From e79bc34e9bec9d8e9f94d89c5f77a5004b494797 Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Sat, 25 Mar 2023 16:11:47 +0900 Subject: [PATCH] [VM][UPD71071] Fix req / sreq sequences. [VM][UPD71071] Temporally disable read_io16() and write_io16(). --- source/src/vm/upd71071.cpp | 29 ++++++++++------------------- source/src/vm/upd71071.h | 9 ++++++++- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/source/src/vm/upd71071.cpp b/source/src/vm/upd71071.cpp index 07fe18911..76c35d85a 100644 --- a/source/src/vm/upd71071.cpp +++ b/source/src/vm/upd71071.cpp @@ -47,7 +47,7 @@ void UPD71071::reset() running = false; reset_all_tc(); } - +#if 0 void UPD71071::write_io16(uint32_t addr, uint32_t data) { pair32_t _d, _bd; @@ -84,8 +84,8 @@ void UPD71071::write_io16(uint32_t addr, uint32_t data) cmd = data & 0xffff; break; default: -// write_io8(addr & 0x0e, data); - write_io8(addr, data); + write_io8(addr & 0x0e, data); +// write_io8(addr, data); break; } // } else { @@ -94,7 +94,7 @@ void UPD71071::write_io16(uint32_t addr, uint32_t data) //// write_io8((addr & 0x0e) + 1, (data >> 8) & 0xff); // } } - +#endif void UPD71071::write_io8(uint32_t addr, uint32_t data) { @@ -181,7 +181,7 @@ void UPD71071::write_io8(uint32_t addr, uint32_t data) break; } } - +#if 0 uint32_t UPD71071::read_io16(uint32_t addr) { // if(b16 != 0) { @@ -216,7 +216,7 @@ uint32_t UPD71071::read_io16(uint32_t addr) } return read_io8(addr); } - +#endif uint32_t UPD71071::read_io8(uint32_t addr) { uint32_t val; @@ -586,12 +586,9 @@ bool UPD71071::do_dma_epilogue(int c) } else if((dma[c].mode & 0xc0) == 0x40) { // Single mode return true; - } else if((dma[c].mode & 0xc0) == 0x40) { - // Demand mode - req &= ~bit; - sreq &= ~bit; - return false; } + return false; + // Note: At FM-Towns, SCSI's DMAC will be set after // SCSI bus phase become DATA IN/DATA OUT. // Before bus phase became DATA IN/DATA OUT, @@ -640,16 +637,10 @@ bool UPD71071::do_dma_epilogue(int c) // -- 20200316 K.O if((dma[c].mode & 0xc0) == 0x40){ // single mode - req &= ~bit; - sreq &= ~bit; +// req &= ~bit; +// sreq &= ~bit; running = false; return true; - } else if((dma[c].mode & 0xc0) == 0x00){ - // demand mode - req &= ~bit; - sreq &= ~bit; - running = false; - return false; } #endif return false; diff --git a/source/src/vm/upd71071.h b/source/src/vm/upd71071.h index 2153912bb..0c73f8b0c 100644 --- a/source/src/vm/upd71071.h +++ b/source/src/vm/upd71071.h @@ -103,12 +103,17 @@ public: { // TIP: if((DEVICE::prev_device == NULL) || (DEVICE::this_device_id == 0)) DEVICE must be DUMMY. // And, at this device, should not be FIRST DEVICE. 20170613 Ohta. + //DEVICE *__dev = this; + //while((__dev->prev_device != NULL) && (__dev->this_device_id > 0)) { + // __dev = __dev->prev_device; + //} for(int i = 0; i < 4; i++) { - //dma[i].dev = vm->dummy; + //dma[i].dev = __dev; dma[i].dev = vm->dummy; } d_cpu = NULL; d_mem = vm->dummy; + //d_mem = __dev; //#ifdef SINGLE_MODE_DMA d_dma = NULL; //#endif @@ -130,8 +135,10 @@ public: virtual void __FASTCALL write_io8(uint32_t addr, uint32_t data) override; virtual uint32_t __FASTCALL read_io8(uint32_t addr) override; + #if 0 virtual void __FASTCALL write_io16(uint32_t addr, uint32_t data) override; virtual uint32_t __FASTCALL read_io16(uint32_t addr) override; + #endif virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t _mask) override; virtual uint32_t __FASTCALL read_signal(int id) override; -- 2.11.0