2 SHARP X1 Emulator 'eX1'
3 SHARP X1twin Emulator 'eX1twin'
4 SHARP X1turbo Emulator 'eX1turbo'
5 SHARP X1turboZ Emulator 'eX1turboZ'
7 Author : Takeda.Toshiya
14 #ifdef _X1TURBO_FEATURE
15 #include "../z80dma.h"
18 #define STATUS_INT 0x00 // unknown
19 #define STATUS_REQ 0x01
20 #define STATUS_BSY 0x02
21 #define STATUS_IXO 0x04
22 #define STATUS_CXD 0x08
23 #define STATUS_MSG 0x10
27 irq_status = drq_status = false;
30 void SASI::write_io8(uint32_t addr, uint32_t data)
34 #ifdef _SCSI_DEBUG_LOG
35 this->out_debug_log(_T("[SASI] out %04X %02X\n"), addr, data);
37 d_host->write_dma_io8(addr, data);
40 #ifdef _SCSI_DEBUG_LOG
41 this->out_debug_log(_T("[SASI] out %04X %02X\n"), addr, data);
43 d_host->write_signal(SIG_SCSI_SEL, 0, 1);
46 #ifdef _SCSI_DEBUG_LOG
47 this->out_debug_log(_T("[SASI] out %04X %02X\n"), addr, data);
49 d_host->write_signal(SIG_SCSI_RST, 0, 1);
50 d_host->write_signal(SIG_SCSI_RST, 1, 1);
51 d_host->write_signal(SIG_SCSI_RST, 0, 1);
54 #ifdef _SCSI_DEBUG_LOG
55 this->out_debug_log(_T("[SASI] out %04X %02X\n"), addr, data);
57 d_host->write_dma_io8(addr, data);
58 d_host->write_signal(SIG_SCSI_SEL, 1, 1);
63 uint32_t SASI::read_io8(uint32_t addr)
69 val = d_host->read_dma_io8(addr);
70 #ifdef _SCSI_DEBUG_LOG
71 this->out_debug_log(_T("[SASI] in %04X %02X\n"), addr, val);
75 val = (d_host->read_signal(SIG_SCSI_REQ) ? STATUS_REQ : 0) |
76 // (d_host->read_signal(SIG_SCSI_ACK) ? STATUS_ACK : 0) |
77 (d_host->read_signal(SIG_SCSI_BSY) ? STATUS_BSY : 0) |
78 (d_host->read_signal(SIG_SCSI_MSG) ? STATUS_MSG : 0) |
79 (d_host->read_signal(SIG_SCSI_CD ) ? STATUS_CXD : 0) |
80 (d_host->read_signal(SIG_SCSI_IO ) ? STATUS_IXO : 0) |
81 (irq_status ? STATUS_INT : 0);
83 #ifdef _SCSI_DEBUG_LOG
84 this->out_debug_log(_T("[SASI] in %04X %02X (REQ=%d,BSY=%d,MSG=%d,CxD=%d,IxO=%d)\n"), addr, val,
85 (val & STATUS_REQ) ? 1 : 0,
86 (val & STATUS_BSY) ? 1 : 0,
87 (val & STATUS_MSG) ? 1 : 0,
88 (val & STATUS_CXD) ? 1 : 0,
89 (val & STATUS_IXO) ? 1 : 0);
96 void SASI::write_dma_io8(uint32_t addr, uint32_t data)
98 write_io8(0xfd0, data);
101 uint32_t SASI::read_dma_io8(uint32_t addr)
103 return read_io8(0xfd0);
106 void SASI::write_signal(int id, uint32_t data, uint32_t mask)
110 #ifdef _X1TURBO_FEATURE
111 d_dma->write_signal(SIG_Z80DMA_READY, data, mask);
113 irq_status = ((data & mask) != 0);
116 #ifdef _X1TURBO_FEATURE
117 d_dma->write_signal(SIG_Z80DMA_READY, data, mask);
119 drq_status = ((data & mask) != 0);
124 #define STATE_VERSION 1
126 bool SASI::process_state(FILEIO* state_fio, bool loading)
128 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
131 if(!state_fio->StateCheckInt32(this_device_id)) {
134 state_fio->StateBool(irq_status);
135 state_fio->StateBool(drq_status);