OSDN Git Service

[VM][SCSI_HOST] Implement both wide and narrow bus.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 31 Jan 2020 18:34:34 +0000 (03:34 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 31 Jan 2020 18:34:34 +0000 (03:34 +0900)
source/src/vm/scsi_host.cpp
source/src/vm/scsi_host.h

index 7a51221..2bcb503 100644 (file)
@@ -19,16 +19,29 @@ void SCSI_HOST::reset()
        set_drq(false);
 }
 
-#ifdef SCSI_HOST_WIDE
+//#ifdef SCSI_HOST_WIDE
 void SCSI_HOST::write_dma_io16(uint32_t addr, uint32_t data)
-#else
+{
+       #ifdef _SCSI_DEBUG_LOG
+               this->force_out_debug_log(_T("[SCSI_HOST] Write %02X\n"), data);
+       #endif
+       write_signals(&outputs_dat, data & 0xffff);
+       
+       #ifdef SCSI_HOST_AUTO_ACK
+               // set ack to clear req signal immediately
+               if(bsy_status && !io_status) {
+                       this->write_signal(SIG_SCSI_ACK, 1, 1);
+               }
+       #endif
+}
+//#else
 void SCSI_HOST::write_dma_io8(uint32_t addr, uint32_t data)
-#endif
+//#endif
 {
        #ifdef _SCSI_DEBUG_LOG
                this->force_out_debug_log(_T("[SCSI_HOST] Write %02X\n"), data);
        #endif
-       write_signals(&outputs_dat, data);
+       write_signals(&outputs_dat, data & 0xff);
        
        #ifdef SCSI_HOST_AUTO_ACK
                // set ack to clear req signal immediately
@@ -38,11 +51,14 @@ void SCSI_HOST::write_dma_io8(uint32_t addr, uint32_t data)
        #endif
 }
 
-#ifdef SCSI_HOST_WIDE
+//#ifdef SCSI_HOST_WIDE
 uint32_t SCSI_HOST::read_dma_io16(uint32_t addr)
-#else
+{
+       return read_dma_io8(addr);
+}
+//#else
 uint32_t SCSI_HOST::read_dma_io8(uint32_t addr)
-#endif
+//#endif
 {
        uint32_t value = data_reg;
        #ifdef _SCSI_DEBUG_LOG
index fa58dd9..cf7e375 100644 (file)
@@ -63,13 +63,13 @@ public:
        
        // common functions
        void reset();
-#ifdef SCSI_HOST_WIDE
+//#ifdef SCSI_HOST_WIDE
        void __FASTCALL write_dma_io16(uint32_t addr, uint32_t data);
        uint32_t __FASTCALL read_dma_io16(uint32_t addr);
-#else
+//#else
        void __FASTCALL write_dma_io8(uint32_t addr, uint32_t data);
        uint32_t __FASTCALL read_dma_io8(uint32_t addr);
-#endif
+//#endif
        void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
        uint32_t __FASTCALL read_signal(int id);
        bool process_state(FILEIO* state_fio, bool loading);