1 #ifndef UAE_A2091_H 2 #define UAE_A2091_H 3 4 #ifdef A2091 5 6 #define WD_STATUS_QUEUE 2 7 8 struct wd_chip_state { 9 10 volatile uae_u8 sasr, scmd, auxstatus; 11 volatile int wd_used; 12 volatile int wd_phase, wd_next_phase, wd_busy, wd_data_avail; 13 volatile bool wd_selected; 14 volatile int wd_dataoffset; 15 volatile uae_u8 wd_data[32]; 16 uae_u8 wdregs[32]; 17 volatile uae_u8 scsidelay_status[WD_STATUS_QUEUE]; 18 volatile int queue_index; 19 volatile int scsidelay_irq[WD_STATUS_QUEUE]; 20 struct scsi_data *scsi; 21 int wd33c93_ver;// 0 or 1 22 }; 23 24 #define COMMODORE_8727 0 25 #define COMMODORE_DMAC 1 26 #define COMMODORE_SDMAC 2 27 #define GVP_DMAC_S2 3 28 #define GVP_DMAC_S1 4 29 30 struct commodore_dmac 31 { 32 uae_u32 dmac_istr, dmac_cntr; 33 uae_u32 dmac_dawr; 34 uae_u32 dmac_acr; 35 uae_u32 dmac_wtc; 36 int dmac_dma; 37 int old_dmac; 38 39 uae_u8 xt_control; 40 uae_u8 xt_status; 41 uae_u16 xt_cyls, xt_heads, xt_sectors; 42 43 bool xt_irq; 44 int xt_offset; 45 int xt_datalen; 46 uae_u8 xt_cmd[6]; 47 uae_u8 xt_statusbyte; 48 49 uae_u8 c8727_pcss; 50 uae_u8 c8727_ctl; 51 uae_u8 c8727_wrcbp; 52 uae_u16 c8727_st506_cb; 53 }; 54 struct gvp_dmac 55 { 56 uae_u16 cntr; 57 uae_u32 addr; 58 uae_u16 len; 59 uae_u16 bank; 60 int dma_on; 61 uae_u8 version; 62 bool use_version; 63 uae_u32 addr_mask; 64 bool series2; 65 int s1_subtype; 66 int s1_ramoffset; 67 int s1_rammask; 68 uae_u8 *buffer; 69 int bufoffset; 70 }; 71 72 struct wd_state { 73 bool enabled; 74 int configured; 75 bool autoconfig; 76 uae_u8 dmacmemory[100]; 77 uae_u8 *rom; 78 int board_mask; 79 uaecptr baseaddress; 80 int rombankswitcher, rombank; 81 int rom_size, rom_mask; 82 addrbank *bank; 83 struct romconfig *rc; 84 struct wd_state **self_ptr; 85 86 smp_comm_pipe requests; 87 volatile int scsi_thread_running; 88 89 // unit 8,9 = ST-506 (A2090) 90 // unit 8 = XT (A2091) 91 struct scsi_data *scsis[8 + 2]; 92 93 bool cdtv; 94 95 int dmac_type; 96 struct wd_chip_state wc; 97 struct commodore_dmac cdmac; 98 struct gvp_dmac gdmac; 99 }; 100 extern wd_state *wd_cdtv; 101 102 extern void init_wd_scsi (struct wd_state*); 103 extern void scsi_dmac_a2091_start_dma (struct wd_state*); 104 extern void scsi_dmac_a2091_stop_dma (struct wd_state*); 105 106 extern addrbank *a2090_init (struct romconfig*); 107 108 extern addrbank *a2091_init (struct romconfig*); 109 extern void a2091_free(void); 110 extern void a2091_reset (void); 111 112 extern addrbank *gvp_init_s1(struct romconfig*); 113 extern addrbank *gvp_init_s2(struct romconfig*); 114 extern addrbank *gvp_init_accelerator(struct romconfig*); 115 extern void gvp_free(void); 116 extern void gvp_reset (void); 117 118 extern void a3000scsi_init (void); 119 extern void a3000scsi_free (void); 120 extern void a3000scsi_reset (void); 121 extern void rethink_a2091 (void); 122 123 extern void wdscsi_put (struct wd_chip_state*, wd_state*, uae_u8); 124 extern uae_u8 wdscsi_get (struct wd_chip_state*, struct wd_state*); 125 extern uae_u8 wdscsi_getauxstatus (struct wd_chip_state*); 126 extern void wdscsi_sasr (struct wd_chip_state*, uae_u8); 127 128 extern void scsi_hsync (void); 129 130 #define WDTYPE_A2091 0 131 #define WDTYPE_A2091_2 1 132 #define WDTYPE_A3000 2 133 #define WDTYPE_CDTV 3 134 #define WDTYPE_GVP 4 135 136 #define WD33C93 _T("WD33C93") 137 138 extern void a2090_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); 139 extern void a2091_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); 140 extern void gvp_s1_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); 141 extern void gvp_s2_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); 142 extern void gvp_s2_add_accelerator_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); 143 extern void a3000_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); 144 145 extern int add_wd_scsi_hd (struct wd_state *wd, int ch, struct hd_hardfiledata *hfd, struct uaedev_config_info *ci, int scsi_level); 146 extern int add_wd_scsi_cd (struct wd_state *wd, int ch, int unitnum); 147 extern int add_wd_scsi_tape (struct wd_state *wd, int ch, const TCHAR *tape_directory, bool readonly); 148 149 #endif /* A2091 */ 150 151 #endif /* UAE_A2091_H */ 152