2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
7 [ SCSI base initiator ]
20 #define SIG_SCSI_HOST_DMAE 1
21 class SCSI_HOST : public DEVICE
23 protected: // Make pcotected because TOWNS's DMAC may transfer 16bit around SCSI.
24 outputs_t outputs_irq; // to adaptor
25 outputs_t outputs_drq;
27 outputs_t outputs_bsy;
30 outputs_t outputs_msg;
31 outputs_t outputs_req;
33 outputs_t outputs_dat; // to devices
34 outputs_t outputs_sel;
35 outputs_t outputs_atn;
36 outputs_t outputs_ack;
37 outputs_t outputs_rst;
41 uint32_t bsy_status, cd_status, io_status, msg_status, req_status, ack_status;
46 virtual void __FASTCALL set_irq(bool value);
47 virtual void __FASTCALL set_drq(bool value);
50 SCSI_HOST(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
52 initialize_output_signals(&outputs_irq);
53 initialize_output_signals(&outputs_drq);
55 initialize_output_signals(&outputs_bsy);
56 initialize_output_signals(&outputs_cd);
57 initialize_output_signals(&outputs_io);
58 initialize_output_signals(&outputs_msg);
59 initialize_output_signals(&outputs_req);
61 initialize_output_signals(&outputs_dat);
62 initialize_output_signals(&outputs_sel);
63 initialize_output_signals(&outputs_atn);
64 initialize_output_signals(&outputs_ack);
65 initialize_output_signals(&outputs_rst);
68 set_device_name(_T("SCSI HOST"));
74 virtual void initialize();
75 virtual void release();
76 virtual void event_callback(int id, int err);
79 virtual void __FASTCALL write_dma_io16(uint32_t addr, uint32_t data);
80 virtual uint32_t __FASTCALL read_dma_io16(uint32_t addr);
82 virtual void __FASTCALL write_dma_io8(uint32_t addr, uint32_t data);
83 virtual uint32_t __FASTCALL read_dma_io8(uint32_t addr);
86 virtual void __FASTCALL write_dma_io8(uint32_t addr, uint32_t data);
87 virtual void __FASTCALL write_dma_io16(uint32_t addr, uint32_t data);
88 virtual uint32_t __FASTCALL read_dma_io8(uint32_t addr);
89 virtual uint32_t __FASTCALL read_dma_io16(uint32_t addr);
91 virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
92 virtual uint32_t __FASTCALL read_signal(int id);
93 virtual bool process_state(FILEIO* state_fio, bool loading);
96 void set_context_irq(DEVICE* device, int id, uint32_t mask)
98 register_output_signal(&outputs_irq, device, id, mask);
100 void set_context_drq(DEVICE* device, int id, uint32_t mask)
102 register_output_signal(&outputs_drq, device, id, mask);
104 void set_context_bsy(DEVICE* device, int id, uint32_t mask)
106 register_output_signal(&outputs_bsy, device, id, mask);
108 void set_context_cd(DEVICE* device, int id, uint32_t mask)
110 register_output_signal(&outputs_cd, device, id, mask);
112 void set_context_io(DEVICE* device, int id, uint32_t mask)
114 register_output_signal(&outputs_io, device, id, mask);
116 void set_context_msg(DEVICE* device, int id, uint32_t mask)
118 register_output_signal(&outputs_msg, device, id, mask);
120 void set_context_req(DEVICE* device, int id, uint32_t mask)
122 register_output_signal(&outputs_req, device, id, mask);
124 void set_context_ack(DEVICE* device, int id, uint32_t mask)
126 register_output_signal(&outputs_ack, device, id, mask);
128 void set_context_target(DEVICE* device)
130 #ifdef SCSI_HOST_WIDE
131 register_output_signal(&outputs_dat, device, SIG_SCSI_DAT, 0xffff);
133 register_output_signal(&outputs_dat, device, SIG_SCSI_DAT, 0xff);
135 register_output_signal(&outputs_sel, device, SIG_SCSI_SEL, 1);
136 register_output_signal(&outputs_atn, device, SIG_SCSI_ATN, 1);
137 register_output_signal(&outputs_ack, device, SIG_SCSI_ACK, 1);
138 register_output_signal(&outputs_rst, device, SIG_SCSI_RST, 1);