OSDN Git Service

[VM][FMTOWNS][MEMORY][MSDOS_ROM] Make accessing of MS-DOS ROM offset model.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmtowns / msdosrom.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;
 }