OSDN Git Service

[VM][FM77AV40] Fix FTBFSs.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 17 Aug 2015 08:47:50 +0000 (17:47 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 17 Aug 2015 08:47:50 +0000 (17:47 +0900)
source/src/vm/fm7/display.cpp
source/src/vm/fm7/fm7_display.h
source/src/vm/fm7/fm7_mainio.cpp
source/src/vm/fm7/fm7_mainio.h
source/src/vm/fm7/fm7_mainmem.cpp
source/src/vm/fm7/fm7_mainmem.h

index c4cdadf..8fbc790 100644 (file)
@@ -153,7 +153,8 @@ void DISPLAY::reset()
        alu->write_signal(SIG_ALU_Y_HEIGHT, 200, 0xffff);
        alu->write_signal(SIG_ALU_400LINE, 0, 0xffffffff);
 #endif   
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        mode400line = false;
        //alu->write_signal(SIG_ALU_400LINE, 0x00, 0xff);
        mode256k = false;
@@ -478,7 +479,8 @@ void DISPLAY::draw_screen()
                }
                return;
        }
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        else if(display_mode == DISPLAY_MODE_8_400L) {
                yoff = 0;
                rgbmask = ~multimode_dispmask;
@@ -835,7 +837,8 @@ void DISPLAY::alu_write_line_position(int addr, uint8 val)
 // D42E :  AV40
 void DISPLAY::select_sub_bank(uint8 val)
 {
-#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)  
+#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        kanji_level2 = ((val & 0x80) == 0) ? false : true;
 #endif
 }
@@ -895,7 +898,8 @@ void DISPLAY::set_miscreg(uint8 val)
 // Main: FD13
 void DISPLAY::set_monitor_bank(uint8 var)
 {
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        if((var & 0x04) != 0){
                monitor_ram = true;
        } else {
@@ -1132,7 +1136,8 @@ uint32 DISPLAY::read_signal(int id)
                        break;
                case SIG_FM7_SUB_BANK: // Main: FD13
                        retval = subrom_bank;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(monitor_ram) retval |= 0x04;
 #endif
                        break;
@@ -1206,7 +1211,8 @@ void DISPLAY::write_signal(int id, uint32 data, uint32 mask)
                        set_monitor_bank(data & 0xff);
                        break;
                case SIG_DISPLAY_EXTRA_MODE: // FD04 bit 4, 3
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        {
                                int oldmode = display_mode;
                                kanjisub = ((data & 0x20) != 0);
@@ -1225,12 +1231,13 @@ void DISPLAY::write_signal(int id, uint32 data, uint32 mask)
                                        alu->write_signal(SIG_ALU_X_WIDTH, (mode320 || mode256k) ? 40 :  80, 0xffff);
                                        alu->write_signal(SIG_ALU_Y_HEIGHT, (display_mode == DISPLAY_MODE_8_400L) ? 400 : 200, 0xffff);
                                }
-                               alu->write_signal(SIG_ALU_400LINE, (mode_400line) ? 0xff : 0x00, 0xff);
+                               alu->write_signal(SIG_ALU_400LINE, (mode400line) ? 0xff : 0x00, 0xff);
                        }
 #endif
                        break;
                case SIG_DISPLAY_MODE320: // FD12 bit 6
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if((!mode400line) && (!mode256k)){
                                if(mode320 != flag) {
                                        for(y = 0; y < 400; y++) memset(emu->screen_buffer(y), 0x00, 640 * sizeof(scrntype));
@@ -1290,7 +1297,8 @@ uint8 DISPLAY::read_vram_8_200l(uint32 addr, uint32 offset)
                page_offset = 0xc000;
        }
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        if(vram_page) page_offset += 0x18000;
 #endif
        pagemod = addr & 0xc000;
@@ -1321,7 +1329,8 @@ uint8 DISPLAY::read_vram_l4_400l(uint32 addr, uint32 offset)
 
 uint8 DISPLAY::read_vram_8_400l(uint32 addr, uint32 offset)
 {
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        uint32 color = vram_bank & 0x03;
        uint32 raddr;
        
@@ -1370,11 +1379,13 @@ uint8 DISPLAY::read_vram_4096(uint32 addr, uint32 offset)
 #if defined(_FM77AV_VARIANTS)
        uint32 page_offset = 0;
        uint32 pagemod;
+       uint32 color;
        if(active_page != 0) {
                page_offset = 0xc000;
        }
        pagemod = addr & 0xe000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        if(vram_page) page_offset += 0x18000;
        if(vram_bank) {
                if(pagemod < 0x4000) {
@@ -1400,7 +1411,8 @@ uint8 DISPLAY::read_vram_4096(uint32 addr, uint32 offset)
 
 uint8 DISPLAY::read_vram_256k(uint32 addr, uint32 offset)
 {
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        uint32 page_offset;
        uint32 pagemod;
        uint32 color; // b
@@ -1429,6 +1441,7 @@ uint8 DISPLAY::read_mmio(uint32 addr)
 {
        uint32 retval = 0xff;
        uint32 raddr;   
+       pair tmpvar;
 #if !defined(_FM77AV_VARIANTS)
        raddr = (addr - 0xd400) & 0x000f;
 #else
@@ -1454,7 +1467,8 @@ uint8 DISPLAY::read_mmio(uint32 addr)
                
 #if defined(_FM77L4) || defined(_FM77AV_VARIANTS)
                case 0x06:
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(!kanjisub) return 0xff;
                        if(kanji_level2) {
                                retval = kanjiclass2->read_data8(kanji2_addr.w.l << 1);
@@ -1468,7 +1482,8 @@ uint8 DISPLAY::read_mmio(uint32 addr)
 #endif                         
                        break;
                case 0x07:
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)        
+ #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+        defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(!kanjisub) return 0xff;
                        if(kanji_level2) {
                                retval = kanjiclass2->read_data8((kanji2_addr.w.l << 1) + 1);
@@ -1512,7 +1527,8 @@ uint8 DISPLAY::read_mmio(uint32 addr)
                case 0x1b:
                        retval = alu->read_data8(ALU_BANK_DISABLE);
                        break;
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                case 0x2f: // VRAM BANK
                        retval = 0xfc | (vram_bank & 0x03);
                        break;
@@ -1559,7 +1575,8 @@ uint32 DISPLAY::read_data8(uint32 addr)
                }
                if((multimode_accessmask & (1 << color)) != 0) return 0xff;
                
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                if(display_mode == DISPLAY_MODE_8_400L) {
                        return (uint32)read_vram_8_400l(addr, offset);
                } else if(display_mode == DISPLAY_MODE_256k) {
@@ -1589,8 +1606,9 @@ uint32 DISPLAY::read_data8(uint32 addr)
 #endif
        } else if(addr < 0xd000) { 
                raddr = addr - 0xc000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
-               if(monitor_ram_bank == 4) {
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+       defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX) 
+       if(monitor_ram_bank == 4) {
                        if(console_ram_bank >= 1) {
                                return submem_console_av40[((console_ram_bank - 1) << 12) | raddr];
                        }
@@ -1615,14 +1633,16 @@ uint32 DISPLAY::read_data8(uint32 addr)
                return subsys_c[addr - 0xd800];
 #else
                if(addr < 0xe000) {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
-                       if(monitor_ram) {
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+        defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+               if(monitor_ram) {
                                return submem_cgram[cgram_bank * 0x0800 + (addr - 0xd800)]; //FIXME
                        }
 #endif         
                        return subsys_cg[(addr - 0xd800) + cgrom_bank * 0x800];
                } else if(addr < 0x10000) {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(monitor_ram) {
                                return subsys_ram[addr - 0xe000]; //FIXME
                        }
@@ -1650,7 +1670,8 @@ uint32 DISPLAY::read_data8(uint32 addr)
        // ACCESS VIA ALU.
        else if((addr >= DISPLAY_VRAM_DIRECT_ACCESS) && (addr < (DISPLAY_VRAM_DIRECT_ACCESS + 0x30000))) {
                addr = addr - DISPLAY_VRAM_DIRECT_ACCESS; 
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                if(display_mode == DISPLAY_MODE_8_400L) {
                        return read_vram_8_400l(addr, offset);
                } else if(display_mode == DISPLAY_MODE_256k) {
@@ -1683,7 +1704,8 @@ void DISPLAY::write_vram_8_200l(uint32 addr, uint32 offset, uint32 data)
                page_offset = 0xc000;
        }
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        if(vram_page) page_offset += 0x18000;
 #endif
        pagemod = addr & 0xc000;
@@ -1715,7 +1737,8 @@ void DISPLAY::write_vram_l4_400l(uint32 addr, uint32 offset, uint32 data)
 
 void DISPLAY::write_vram_8_400l(uint32 addr, uint32 offset, uint32 data)
 {
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        uint32 color = vram_bank & 0x03;
        uint32 raddr;
        uint8 val8 = (uint8)(data & 0x00ff);
@@ -1765,11 +1788,13 @@ void DISPLAY::write_vram_4096(uint32 addr, uint32 offset, uint32 data)
 #if defined(_FM77AV_VARIANTS)
        uint32 page_offset = 0;
        uint32 pagemod;
+       uint32 color;
        if(active_page != 0) {
                page_offset = 0xc000;
        }
        pagemod = addr & 0xe000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        if(vram_page) page_offset += 0x18000;
        if(vram_bank) {
                if(pagemod < 0x4000) {
@@ -1794,7 +1819,8 @@ void DISPLAY::write_vram_4096(uint32 addr, uint32 offset, uint32 data)
 
 void DISPLAY::write_vram_256k(uint32 addr, uint32 offset, uint32 data)
 {
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        uint32 page_offset;
        uint32 pagemod;
        uint32 color; // b
@@ -1822,6 +1848,7 @@ void DISPLAY::write_vram_256k(uint32 addr, uint32 offset, uint32 data)
 void DISPLAY::write_mmio(uint32 addr, uint32 data)
 {
        uint8 rval = 0;
+       pair tmpvar;
 #if !defined(_FM77AV_VARIANTS)
        addr = addr & 0x000f;
 #else
@@ -1839,7 +1866,8 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
 #if defined(_FM77AV_VARIANTS) || defined(_FM77L4)
                // KANJI
                case 0x06:
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) ||\
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(!kanjisub) return;
                        if(kanji_level2) {
                                kanji2_addr.b.h = (uint8)data;
@@ -1855,7 +1883,8 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                        break;
                case 0x07:
                        //printf("KANJI LO=%02x\n", data);
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(!kanjisub) return;
                        if(kanji_level2) {
                                kanji2_addr.b.l = (uint8)data;
@@ -1969,7 +1998,8 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                case 0x23:
                        alu_write_linepattern_lo(data);
                        break;
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                case 0x2e: //
                        console_ram_bank = (data & 0x18) >> 3;
                        if(console_ram_bank > 2) console_ram_bank = 0;
@@ -1990,7 +2020,8 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                case 0x31:
                        keyboard->write_data8(0x31, data);
                        break;
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                case 0x33: //
                        vram_active_block = data & 0x01;
                        vram_display_block = ((data & 0x10) == 0) ? 1 : 0;
@@ -2056,7 +2087,8 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
 #endif                         
                        break;
        }
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        if((addr < 0x40) && (addr >= 0x38)) {
                if((window_xbegin < window_xend) && (window_low < window_high)) {
                        window_opened = true;
@@ -2095,7 +2127,8 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
                color  = (addr & 0x0c000) >> 14;
                if((multimode_accessmask & (1 << color)) != 0) return;
                
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                if(display_mode == DISPLAY_MODE_8_400L) {
                        write_vram_8_400l(addr, offset, data);
                } else if(display_mode == DISPLAY_MODE_256k) {
@@ -2125,7 +2158,8 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
 #endif
        } else if(addr < 0xd000) { 
                raddr = addr - 0xc000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                if(monitor_ram_bank == 4) {
                        if(console_ram_bank >= 1) {
                                submem_console_av40[((console_ram_bank - 1) << 12) | addr] = val8;
@@ -2153,7 +2187,8 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
                write_mmio(addr, data);
                return;
        } else if(addr < 0x10000) {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+        defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                if(addr < 0xe000) {
                        if(monitor_ram && !ram_protect) {
                                submem_cgram[cgram_bank * 0x0800 + (addr - 0xd800)] = val8; //FIXME
@@ -2191,7 +2226,8 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
        // ACCESS VIA ALU.
        else if((addr >= DISPLAY_VRAM_DIRECT_ACCESS) && (addr < (DISPLAY_VRAM_DIRECT_ACCESS + 0x30000))) {
                addr = addr - DISPLAY_VRAM_DIRECT_ACCESS; 
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                if(display_mode == DISPLAY_MODE_8_400L) {
                        write_vram_8_400l(addr, offset, data);
                } else if(display_mode == DISPLAY_MODE_256k) {
@@ -2263,7 +2299,8 @@ void DISPLAY::initialize()
        diag_load_subrom_cg = false;
        if(read_bios(_T("SUBSYSCG.ROM"), subsys_cg, 0x2000) >= 0x2000) diag_load_subrom_cg = true;
        emu->out_debug_log("SUBSYSTEM CG ROM READING : %s", diag_load_subrom_cg ? "OK" : "NG");
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        memset(subsys_ram, 0x00, sizeof(subsys_ram));
        memset(submem_cgram, 0x00, sizeof(submem_cgram));
        memset(submem_console_av40, 0x00, sizeof(submem_cgram));
@@ -2361,7 +2398,8 @@ void DISPLAY::save_state(FILEIO *state_fio)
                state_fio->FputBool(mode320);
                state_fio->FputInt32_BE(display_page);
                state_fio->FputInt32_BE(cgrom_bank);
-#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)  
+#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                state_fio->FputInt32_BE(vram_bank);
 #endif 
                state_fio->FputInt32_BE(offset_point_bank1);
@@ -2387,7 +2425,8 @@ void DISPLAY::save_state(FILEIO *state_fio)
                state_fio->Fwrite(subsys_b, sizeof(subsys_b), 1);
                state_fio->Fwrite(subsys_cg, sizeof(subsys_cg), 1);
                state_fio->Fwrite(submem_hidden, sizeof(submem_hidden), 1);
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+           defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                state_fio->FputBool(mode400line);
                state_fio->FputBool(mode256k);
                
@@ -2500,7 +2539,8 @@ bool DISPLAY::load_state(FILEIO *state_fio)
                mode320 = state_fio->FgetBool();
                display_page = state_fio->FgetInt32_BE();
                cgrom_bank = state_fio->FgetInt32_BE();
-#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)  
+#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                vram_bank = state_fio->FgetInt32_BE();
 #endif         
                offset_point_bank1 = state_fio->FgetInt32_BE();
@@ -2528,7 +2568,8 @@ bool DISPLAY::load_state(FILEIO *state_fio)
                state_fio->Fread(subsys_cg, sizeof(subsys_cg), 1);
                state_fio->Fread(submem_hidden, sizeof(submem_hidden), 1);
           
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                mode400line = state_fio->FgetBool();
                mode256k = state_fio->FgetBool();
 
index e1b4b3f..4793aa0 100644 (file)
@@ -114,14 +114,16 @@ class DISPLAY: public DEVICE
        bool kanjisub;
 #elif defined(_FM77AV_VARIANTS)
        bool kanjisub;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)|| \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        bool mode400line;
        bool mode256k;
 #endif
        bool mode320;
        int display_page;
        int cgrom_bank;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) 
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)|| \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        int vram_bank;
        bool vram_page;
    
@@ -171,7 +173,8 @@ class DISPLAY: public DEVICE
        uint8 subrom_bank;
        uint8 subrom_bank_using;
        uint32 offset_point_bank1;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)|| \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        bool monitor_ram;
        bool monitor_ram_using;
        bool ram_protect;
@@ -180,7 +183,8 @@ class DISPLAY: public DEVICE
 
 #if defined(_FM77AV_VARIANTS)
        uint8 gvram[0x2000 * 12];
-#elif defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)
+#elif defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40SX)|| \
+      defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        uint8 gvram[0x4000 * 6];
 #else
        uint8 gvram[0x4000 * 3];
@@ -202,7 +206,8 @@ class DISPLAY: public DEVICE
        bool is_cyclesteal;
        pair kanji1_addr;
        DEVICE *kanjiclass1;
-#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)  
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        uint8 submem_cgram[0x4000];
        uint8 submem_console_av40[0x2000];
        uint8 subsys_ram[0x2000];
@@ -272,7 +277,8 @@ class DISPLAY: public DEVICE
 #endif
        }
        void set_context_kanjiclass2(DEVICE *p) {
-#if defined(_FM77AV40) || defined(_FM77AV40SX)|| defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40SX)|| \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
                kanji2_addr.d = 0;
                kanjiclass2 = p;
                if(p != NULL) kanji_level2 = true;
index 3f03fb9..a370a73 100644 (file)
@@ -557,7 +557,8 @@ uint8 FM7_MAINIO::get_fd04(void)
 void FM7_MAINIO::set_fd04(uint8 val)
 {
        // NOOP?
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        display->write_signal(SIG_DISPLAY_EXTRA_MODE, val, 0xff);
 #endif
 }
@@ -934,8 +935,8 @@ uint32 FM7_MAINIO::read_data8(uint32 addr)
 #if defined(HAS_MMR)
                if((addr < 0x90) && (addr >= 0x80)) {
                        mmr_segment = mainmem->read_data8(FM7_MAINIO_MMR_SEGMENT);
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
-    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+     defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
                        mmr_segment &= 0x07;
 # else            
                        mmr_segment &= 0x03;
@@ -1086,7 +1087,8 @@ uint32 FM7_MAINIO::read_data8(uint32 addr)
                retval = sub_monitor_type & 0x03;
                return retval;
        }  else if(addr == FM7_MAINIO_SUBMONITOR_RAM) {
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
                retval = ((sub_monitor_type & 0x04) != 0) ? 0xffffffff : 0x00000000;
 #else
                retval = 0;
@@ -1094,7 +1096,8 @@ uint32 FM7_MAINIO::read_data8(uint32 addr)
                return retval;
        }
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        else if(addr == FM7_MAINIO_EXTBANK) {
        } else if(addr == FM7_MAINIO_EXTROM) {
        }
@@ -1113,8 +1116,8 @@ void FM7_MAINIO::write_data8(uint32 addr, uint32 data)
 #if defined(HAS_MMR)
                if((addr < 0x90) && (addr >= 0x80)) {
                        mmr_segment = mainmem->read_data8(FM7_MAINIO_MMR_SEGMENT);
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
-    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+     defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
                        mmr_segment &= 0x07;
 # else            
                        mmr_segment &= 0x03;
@@ -1266,7 +1269,8 @@ void FM7_MAINIO::write_data8(uint32 addr, uint32 data)
                        break;
 #if defined(HAS_MMR)
                case 0x90:
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
                        mmr_segment = data & 7;
 #else
                        //                      printf("MMR SEGMENT: %02x\n", data & 3);
index a928f18..801ec11 100644 (file)
@@ -179,8 +179,8 @@ class FM7_MAINIO : public DEVICE {
        /* FD1D : R/W */
        bool fdc_motor; // bit7 : '1' = ON, '0' = OFF
        uint8 fdc_drvsel; // bit 1-0
-#if defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV40) || \
-  defined(_FM77AV40EX) || defined(FM77AV40SX)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)|| \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        bool fdc_2dd;
        // FD1E
        uint8 fdc_drvindex[4];
@@ -215,7 +215,8 @@ class FM7_MAINIO : public DEVICE {
        /* FD10: bit1 */
        bool enable_initiator;
 #endif 
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77AV20EX)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        bool intstat_dma;
 #endif 
        void set_clockmode(uint8 flags);
index 03273c6..5cbaa95 100644 (file)
@@ -180,7 +180,7 @@ int FM7_MAINMEM::mmr_convert(uint32 addr, uint32 *realaddr)
        } else  if(major_bank == 0x2) { // PAGE 2
 #if defined(CAPABLE_DICTROM)
                        //uint32 dbank = mainio->read_data8(FM7_MAINIO_EXTBANK);
-                       uint32 dbank = extbank;
+                       uint32 dbank = extcard_bank;
                        switch(mmr_bank) {
                        case 0x28:
                        case 0x29: // Backuped RAM
@@ -234,7 +234,8 @@ int FM7_MAINMEM::mmr_convert(uint32 addr, uint32 *realaddr)
 #endif
        }
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        else if(extram_connected) { // PAGE 4-
                if(major_bank >= (extram_pages + 4)) {
                        *realaddr = 0;
@@ -800,7 +801,9 @@ FM7_MAINMEM::FM7_MAINMEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, par
        maincpu = NULL;
        kanjiclass1 = NULL;
        kanjiclass2 = NULL;
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) ||  defined(_FM77_VARIANTS)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)  || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)  || \
+       defined(_FM77_VARIANTS)
        fm7_mainmem_extram = NULL;
 #endif 
        // Initialize table
@@ -879,7 +882,8 @@ void FM7_MAINMEM::initialize(void)
        if(!diag_load_learndata) write_bios("USERDIC.DAT", fm7_mainmem_learndata, 0x2000);
 #endif
        
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX)  || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        i = FM7_MAINMEM_77AV40_EXTRAROM;
        diag_load_extrarom = false;
        memset(fm7_mainmem_extrarom, 0xff, 0x20000 * sizeof(uint8));
@@ -889,7 +893,9 @@ void FM7_MAINMEM::initialize(void)
        emu->out_debug_log("AV40 EXTRA ROM READING : %s", diag_load_extrarom ? "OK" : "NG");
 #endif
        
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77_VARIANTS)
+#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
+       defined(_FM77_VARIANTS)
        extram_pages = FM77_EXRAM_BANKS;
 #if defined(_FM77_VARIANTS)
        if(extram_pages > 3) extram_pages = 3;
@@ -1046,7 +1052,9 @@ void FM7_MAINMEM::initialize(void)
 
 void FM7_MAINMEM::release()
 {
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77_VARIANTS)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+     defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
+        defined(_FM77_VARIANTS)
        if(fm7_mainmem_extram != NULL) free(fm7_mainmem_extram);
 #endif  
 #if !defined(_FM77AV_VARIANTS)
@@ -1112,7 +1120,9 @@ void FM7_MAINMEM::save_state(FILEIO *state_fio)
        
 #ifdef HAS_MMR
        state_fio->FputBool(extram_connected);
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77_VARIANTS)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+     defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
+        defined(_FM77_VARIANTS)
        int pages;
        state_fio->FputInt32_BE(extram_pages);
        pages = extram_pages;
@@ -1207,7 +1217,9 @@ bool FM7_MAINMEM::load_state(FILEIO *state_fio)
        
 #ifdef HAS_MMR
                extram_connected = state_fio->FgetBool();
-# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77_VARIANTS)
+# if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+     defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX) || \
+        defined(_FM77_VARIANTS)
                int pages;
                extram_pages = state_fio->FgetInt32_BE();
                pages = extram_pages;
index 3998901..db10ad9 100644 (file)
@@ -87,7 +87,8 @@ class FM7_MAINMEM : public DEVICE
        uint8 fm7_mainmem_dictrom[0x40000]; // $20000-$2ffff, banked
        uint8 fm7_mainmem_learndata[0x2000];
 #  endif       
-#  if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20)
+#  if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
+      defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
        int extram_pages;
        uint8 *fm7_mainmem_extram; // $40000- : MAX 768KB ($c0000)
 #  endif