OSDN Git Service

[VM][FMTOWNS][MEMORY][MSDOS_ROM] Make accessing of MS-DOS ROM offset model.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 4 Sep 2023 18:23:20 +0000 (03:23 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 4 Sep 2023 18:23:20 +0000 (03:23 +0900)
- 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?

source/src/vm/fmtowns/msdosrom.cpp
source/src/vm/fmtowns/msdosrom.h
source/src/vm/fmtowns/towns_memory.cpp

index 24b7387..8e2fe1e 100644 (file)
@@ -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;
 }
 
 
index dce35df..e062d1c 100644 (file)
@@ -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;
 };
 
 }
-       
index 113a5c8..f469d36 100644 (file)
@@ -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.