From 66d99bc92d752e6e973f980fb83e63346990afbe Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Tue, 4 Jun 2019 18:33:43 +0900 Subject: [PATCH] [VM][PC9801] . --- source/src/vm/i8237_base.cpp | 34 ++++++++++++++++++++++------------ source/src/vm/pc9801/floppy.cpp | 2 +- source/src/vm/pc9801/pc9801.h | 2 ++ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/source/src/vm/i8237_base.cpp b/source/src/vm/i8237_base.cpp index b8a946658..457db6e31 100644 --- a/source/src/vm/i8237_base.cpp +++ b/source/src/vm/i8237_base.cpp @@ -21,6 +21,16 @@ void I8237_BASE::reset() low_high = false; cmd = req = tc = 0; mask = 0xff; + for(int ch = 0; ch < 4; ch++) { + dma[ch].areg = 0; + dma[ch].creg = 0; + dma[ch].bareg = 0; + dma[ch].bcreg = 0; + dma[ch].mode = 0; + dma[ch].bankreg = 0; +// dma[ch].incmask = 0x0000; + dma[ch].incmask = 0xffff; + } } void I8237_BASE::write_io8(uint32_t addr, uint32_t data) @@ -140,23 +150,23 @@ void I8237_BASE::write_io(int ch, uint32_t data) bool I8237_BASE::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len) { /* -CH0 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 MODE=FF MEM->I/O -CH1 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 MODE=FF I/O->MEM -CH2 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 MODE=FF VERIFY -CH3 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 MODE=FF INVALID +CH0 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 INCMASK=FFFF MODE=FF MEM->I/O +CH1 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 INCMASK=FFFF MODE=FF I/O->MEM +CH2 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 INCMASK=FFFF MODE=FF VERIFY +CH3 AREG=FFFF CREG=FFFF BAREG=FFFF BCREG=FFFF BANK=FFFF REQ=1 MASK=1 INCMASK=FFFF MODE=FF INVALID */ static const _TCHAR *dir[4] = { _T("VERIFY"), _T("I/O->MEM"), _T("MEM->I/O"), _T("INVALID") }; my_stprintf_s(buffer, buffer_len, - _T("CH0 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d MODE=%02X %s\n") - _T("CH1 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d MODE=%02X %s\n") - _T("CH2 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d MODE=%02X %s\n") - _T("CH3 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d MODE=%02X %s"), - dma[0].areg, dma[0].creg, dma[0].bareg, dma[0].bcreg, dma[0].bankreg, (req >> 0) & 1, (mask >> 0) & 1, dma[0].mode, dir[(dma[0].mode >> 2) & 3], - dma[1].areg, dma[1].creg, dma[1].bareg, dma[1].bcreg, dma[1].bankreg, (req >> 1) & 1, (mask >> 1) & 1, dma[1].mode, dir[(dma[1].mode >> 2) & 3], - dma[2].areg, dma[2].creg, dma[2].bareg, dma[2].bcreg, dma[2].bankreg, (req >> 2) & 1, (mask >> 2) & 1, dma[2].mode, dir[(dma[2].mode >> 2) & 3], - dma[3].areg, dma[3].creg, dma[3].bareg, dma[3].bcreg, dma[3].bankreg, (req >> 3) & 1, (mask >> 3) & 1, dma[3].mode, dir[(dma[3].mode >> 2) & 3]); + _T("CH0 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d INCMASK=%04X MODE=%02X %s\n") + _T("CH1 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d INCMASK=%04X MODE=%02X %s\n") + _T("CH2 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d INCMASK=%04X MODE=%02X %s\n") + _T("CH3 AREG=%04X CREG=%04X BAREG=%04X BCREG=%04X BANK=%04X REQ=%d MASK=%d INCMASK=%04X MODE=%02X %s"), + dma[0].areg, dma[0].creg, dma[0].bareg, dma[0].bcreg, dma[0].bankreg, (req >> 0) & 1, (mask >> 0) & 1, dma[0].incmask, dma[0].mode, dir[(dma[0].mode >> 2) & 3], + dma[1].areg, dma[1].creg, dma[1].bareg, dma[1].bcreg, dma[1].bankreg, (req >> 1) & 1, (mask >> 1) & 1, dma[1].incmask, dma[1].mode, dir[(dma[1].mode >> 2) & 3], + dma[2].areg, dma[2].creg, dma[2].bareg, dma[2].bcreg, dma[2].bankreg, (req >> 2) & 1, (mask >> 2) & 1, dma[2].incmask, dma[2].mode, dir[(dma[2].mode >> 2) & 3], + dma[3].areg, dma[3].creg, dma[3].bareg, dma[3].bcreg, dma[3].bankreg, (req >> 3) & 1, (mask >> 3) & 1, dma[3].incmask, dma[3].mode, dir[(dma[3].mode >> 2) & 3]); return true; } diff --git a/source/src/vm/pc9801/floppy.cpp b/source/src/vm/pc9801/floppy.cpp index 258dfa7b0..b19596db1 100644 --- a/source/src/vm/pc9801/floppy.cpp +++ b/source/src/vm/pc9801/floppy.cpp @@ -191,7 +191,7 @@ uint32_t FLOPPY::read_io8(uint32_t addr) case 0x0096: // value |= 0x80; // FINT1 (DIP SW 1-7), 1 = OFF, 0 = ON value |= 0x40; // FINT0 (DIP SW 1-6), 1 = OFF, 0 = ON -// value |= 0x20; // DMACH (DIP SW 1-3), 1 = OFF, 0 = ON + value |= 0x20; // DMACH (DIP SW 1-3), 1 = OFF, 0 = ON return value; #endif #if defined(SUPPORT_2DD_FDD_IF) diff --git a/source/src/vm/pc9801/pc9801.h b/source/src/vm/pc9801/pc9801.h index df580265a..565e5c9ed 100644 --- a/source/src/vm/pc9801/pc9801.h +++ b/source/src/vm/pc9801/pc9801.h @@ -266,6 +266,7 @@ #endif #define MAX_DRIVE 2 #define UPD765A_NO_ST1_EN_OR_FOR_RESULT7 + #if defined(_PC98DO) || defined(_PC98DOPLUS) #define PC80S31K_NO_WAIT #endif @@ -342,6 +343,7 @@ #define USE_PRINTER #define USE_PRINTER_TYPE 3 #define USE_DEBUGGER + #define USE_STATE #if defined(HAS_I86) || defined(HAS_V30) #define USE_CPU_I286 -- 2.11.0