From: K.Ohta Date: Mon, 4 Sep 2023 18:23:20 +0000 (+0900) Subject: [VM][FMTOWNS][MEMORY][MSDOS_ROM] Make accessing of MS-DOS ROM offset model. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e98bac50922a938df2bd37e8751192b0249b7e02;p=csp-qt%2Fcommon_source_project-fm7.git [VM][FMTOWNS][MEMORY][MSDOS_ROM] Make accessing of MS-DOS ROM offset model. - Address accessing of MS-DOS ROM has changed to 00000h - 7FFFFh from C2000000h - C207FFFFh . - I wonder why BANK B0000h has not used by MS-DOS ? Maybe mistake of text? --- diff --git a/source/src/vm/fmtowns/msdosrom.cpp b/source/src/vm/fmtowns/msdosrom.cpp index 24b7387e1..8e2fe1e32 100644 --- a/source/src/vm/fmtowns/msdosrom.cpp +++ b/source/src/vm/fmtowns/msdosrom.cpp @@ -10,7 +10,7 @@ #include "./msdosrom.h" namespace FMTOWNS { - + void MSDOSROM::initialize() { memset(rom, 0xff, sizeof(rom)); @@ -22,8 +22,13 @@ void MSDOSROM::initialize() delete fio; } -uint32_t MSDOSROM::read_memory_mapped_io8(uint32_t addr) +uint32_t MSDOSROM::read_memory_mapped_io8(uint32_t addr) { + __LIKELY_IF(addr < 0x80000) { + return rom[addr]; + } + return 0xff; + #if 0 uint8_t d = 0xff; if((addr >= 0xc2000000) && (addr < 0xc2080000)) { d = rom[addr & 0x7ffff]; @@ -31,6 +36,27 @@ uint32_t MSDOSROM::read_memory_mapped_io8(uint32_t addr) d = rom[addr & 0x0ffff]; } return (uint32_t)d; + #endif +} + +uint32_t MSDOSROM::read_memory_mapped_io16(uint32_t addr) +{ + __LIKELY_IF(addr < (0x80000 - 1)) { + pair16_t nd; + nd.read_2bytes_le_from(&(rom[addr])); + return nd.w; + } + return 0xffff; +} + +uint32_t MSDOSROM::read_memory_mapped_io32(uint32_t addr) +{ + __LIKELY_IF(addr < (0x80000 - 3)) { + pair32_t nd; + nd.read_4bytes_le_from(&(rom[addr])); + return nd.d; + } + return 0xffffffff; } diff --git a/source/src/vm/fmtowns/msdosrom.h b/source/src/vm/fmtowns/msdosrom.h index dce35dfd9..e062d1c58 100644 --- a/source/src/vm/fmtowns/msdosrom.h +++ b/source/src/vm/fmtowns/msdosrom.h @@ -22,9 +22,10 @@ public: } ~MSDOSROM() {} - void initialize(); - uint32_t __FASTCALL read_memory_mapped_io8(uint32_t addr); + void initialize() override; + uint32_t __FASTCALL read_memory_mapped_io8(uint32_t addr) override; + uint32_t __FASTCALL read_memory_mapped_io16(uint32_t addr) override; + uint32_t __FASTCALL read_memory_mapped_io32(uint32_t addr) override; }; } - diff --git a/source/src/vm/fmtowns/towns_memory.cpp b/source/src/vm/fmtowns/towns_memory.cpp index 113a5c897..f469d3685 100644 --- a/source/src/vm/fmtowns/towns_memory.cpp +++ b/source/src/vm/fmtowns/towns_memory.cpp @@ -88,7 +88,7 @@ void TOWNS_MEMORY::initialize() set_region_device_rw(0xc1000000, 0xc1ffffff, d_iccard[1], 0); // set_wait_rw(0x00000000, 0xffffffff, vram_wait_val); - set_region_device_r (0xc2000000, 0xc207ffff, d_msdos, NOT_NEED_TO_OFFSET); + set_region_device_r (0xc2000000, 0xc207ffff, d_msdos, 0); set_region_device_r (0xc2080000, 0xc20fffff, d_dictionary, NOT_NEED_TO_OFFSET); set_region_device_r (0xc2100000, 0xc213ffff, d_font, NOT_NEED_TO_OFFSET); // REAL IS C2140000h - C2141FFFh, but grain may be 8000h bytes.