OSDN Git Service

[VM][FM77AV40] Move unused I/O at FM77AV40 to FM77AV40EX,40SX, etc.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 3 Sep 2015 20:04:02 +0000 (05:04 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 3 Sep 2015 20:04:02 +0000 (05:04 +0900)
source/src/vm/fm7/display.cpp
source/src/vm/fm7/fm7.cpp
source/src/vm/fm7/fm7.h
source/src/vm/fm7/fm7_dipsw.h [deleted file]
source/src/vm/fm7/fm7_display.h
source/src/vm/fm7/fm7_mainio.cpp
source/src/vm/fm7/fm7_mainmem.cpp

index e6435d5..444fb8d 100644 (file)
@@ -100,9 +100,9 @@ void DISPLAY::reset()
        
        //subcpu->write_signal(SIG_CPU_BUSREQ, 1, 1);
 
-    memset(io_w_latch, 0xff, sizeof(io_w_latch));
+       memset(io_w_latch, 0xff, sizeof(io_w_latch));
        halt_flag = false;
-       vram_accessflag = false;
+       vram_accessflag = true;
        display_mode = DISPLAY_MODE_8_200L;
        
 #if defined(_FM77_VARIANTS) || defined(_FM77AV_VARIANTS)
@@ -127,12 +127,12 @@ void DISPLAY::reset()
        subrom_bank = 0;
        subrom_bank_using = subrom_bank;
        cgrom_bank = 0;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        monitor_ram = false;
        monitor_ram_using = monitor_ram;
        ram_protect = true;
-#endif         
+# endif                
 #endif
        mainio->write_signal(FM7_MAINIO_KEYBOARDIRQ, 0x00 , 0xff);
        //keyboard->reset();
@@ -191,11 +191,10 @@ void DISPLAY::update_config()
                        clock_fast = false;
                        break;
        }
-#if defined(_FM8)
-       enter_display();
-#else  
-       set_cyclesteal(((config.dipswitch & FM7_DIPSW_CYCLESTEAL) != 0) ? 0 : 1); // CYCLE STEAL = bit0.
+#if !defined(_FM8)
+       is_cyclesteal = ((config.dipswitch & FM7_DIPSW_CYCLESTEAL) != 0) ? true : false;
 #endif 
+       enter_display();
 }
 
 inline void DISPLAY::GETVRAM_8_200L(int yoff, scrntype *p, uint32 mask)
@@ -213,8 +212,7 @@ inline void DISPLAY::GETVRAM_8_200L(int yoff, scrntype *p, uint32 mask)
        yoff_d = offset_point;
 #endif 
        yoff_d = (yoff + yoff_d) & 0x3fff;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_display_block != 0) yoff_d += 0x18000;
 # endif
        b = r = g = 0;
@@ -265,8 +263,7 @@ inline void DISPLAY::GETVRAM_8_400L(int yoff, scrntype *p, uint32 mask)
                yoff_d = (offset_point & 0x3fff) << 1;
        }
        yoff_d = (yoff + yoff_d) & 0x7fff;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_display_block != 0) yoff_d += 0x18000;
 # endif
        b = r = g = 0;
@@ -312,8 +309,7 @@ inline void DISPLAY::GETVRAM_4096(int yoff, scrntype *p, uint32 mask)
        yoff_d2 = offset_point_bank1;
        yoff_d1 = (yoff + yoff_d1) & 0x1fff;
        yoff_d2 = (yoff + yoff_d2) & 0x1fff;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_display_block != 0) {
                yoff_d1 += 0x18000;
                yoff_d2 += 0x18000;
@@ -732,11 +728,13 @@ void DISPLAY::set_cyclesteal(uint8 val)
 #if !defined(_FM8)
        vram_wrote = true;
        val &= 0x01;
+# if defined(_FM77_VARIANTS) || defined(_FM77AV_VARIANTS)      
        if(val == 0) {
                is_cyclesteal = true;
        } else {
                is_cyclesteal = false;
        }
+# endif        
        enter_display();
 #endif
 }
@@ -1378,10 +1376,9 @@ uint8 DISPLAY::read_vram_8_200l(uint32 addr, uint32 offset)
                page_offset = 0xc000;
        }
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
-#endif
+# endif
        pagemod = addr & 0xc000;
        return gvram[(((addr + offset) & 0x3fff) | pagemod) + page_offset];
 }
@@ -1416,7 +1413,9 @@ uint8 DISPLAY::read_vram_8_400l(uint32 addr, uint32 offset)
        uint32 pagemod;
        uint32 page_offset = 0;
        uint32 raddr;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
+# endif   
        pagemod = 0x8000 * color;
        offset = (offset & 0x3fff) << 1;
        return gvram[(((addr + offset) & 0x7fff) | pagemod) + page_offset];
@@ -1432,7 +1431,9 @@ uint8 DISPLAY::read_vram_8_400l_direct(uint32 addr, uint32 offset)
        uint32 pagemod;
        uint32 page_offset = 0;
        uint32 raddr;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
+# endif
        pagemod = addr & 0x18000;
        offset = (offset & 0x3fff) << 1;
        return gvram[(((addr + offset) & 0x7fff) | pagemod) + page_offset];
@@ -1450,8 +1451,7 @@ uint8 DISPLAY::read_vram_4096(uint32 addr, uint32 offset)
                page_offset = 0xc000;
        }
        pagemod = addr & 0xe000;
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
 # endif
        return gvram[(((addr + offset) & 0x1fff) | pagemod) + page_offset];
@@ -1466,7 +1466,7 @@ uint8 DISPLAY::read_vram_256k(uint32 addr, uint32 offset)
        uint32 page_offset;
        uint32 pagemod;
        uint32 color; // b
-       page_offset = (0xc000 << vram_bank) - 0xc000;
+       page_offset = 0xc000 * (vram_bank & 0x03);
        pagemod = addr & 0xe000;
        return gvram[(((addr + offset) & 0x1fff) | pagemod) + page_offset];
 #endif
@@ -1501,45 +1501,25 @@ uint8 DISPLAY::read_mmio(uint32 addr)
                case 0x04:
                        attention_irq();
                        break;
-               
-#if defined(_FM77_VARIANTS) || defined(_FM77AV_VARIANTS)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX) || defined(_FM77_VARIANTS) // _FM77L4
                case 0x06:
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(!kanjisub) return 0xff;
+# if !defined(_FM77_VARIANTS)
                        if(kanji_level2) {
-                               //retval = kanjiclass2->read_data8(KANJIROM_DATA_HI);
-                               retval = kanjiclass2->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff));
-                       } else {
-                               //retval = kanjiclass1->read_data8(KANJIROM_DATA_HI);
-                               retval = kanjiclass1->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff));
+                               return (uint8)kanjiclass2->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff));
                        }
-# elif defined(_FM77_VARIANTS) // _FM77L4
-                       if(!kanjisub) return 0xff;
-                       //retval = kanjiclass1->read_data8(KANJIROM_DATA_HI);
+# endif
                        retval = kanjiclass1->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff));
-# else
-                       retval = 0xff;
-#endif                         
                        break;
                case 0x07:
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
                        if(!kanjisub) return 0xff;
+# if !defined(_FM77_VARIANTS)
                        if(kanji_level2) {
-                               retval = kanjiclass2->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff) + 1);
-                               //retval = kanjiclass2->read_data8(KANJIROM_DATA_LO);
-                       } else {
-                               retval = kanjiclass1->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff) + 1);
-                               //retval = kanjiclass1->read_data8(KANJIROM_DATA_LO);
+                               return (uint8)kanjiclass2->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff) + 1);
                        }
-# elif defined(_FM77_VARIANTS) // _FM77L4
-                       if(!kanjisub) return 0xff;
+# endif
                        retval = kanjiclass1->read_data8(KANJIROM_DIRECTADDR + ((kanjiaddr.d << 1) & 0x1ffff) + 1);
-                       //retval = kanjiclass1->read_data8(KANJIROM_DATA_LO);
-# else
-                       retval = 0xff;
-# endif                                
                        break;
 #endif
                case 0x08:
@@ -1756,8 +1736,7 @@ void DISPLAY::write_vram_8_200l(uint32 addr, uint32 offset, uint32 data)
                page_offset = 0xc000;
        }
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block) page_offset += 0x18000;
 #endif
        pagemod = addr & 0xc000;
@@ -1796,7 +1775,9 @@ void DISPLAY::write_vram_8_400l(uint32 addr, uint32 offset, uint32 data)
        uint32 page_offset = 0;
        uint32 raddr;
        uint8 val8 = (uint8)(data & 0x00ff);
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
+# endif   
        pagemod = 0x8000 * color;
        offset = (offset & 0x3fff) << 1;
        gvram[(((addr + offset) & 0x7fff) | pagemod) + page_offset] = val8;
@@ -1812,7 +1793,9 @@ void DISPLAY::write_vram_8_400l_direct(uint32 addr, uint32 offset, uint32 data)
        uint32 page_offset = 0;
        uint32 raddr;
        uint8 val8 = (uint8)(data & 0x00ff);
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
+# endif   
        pagemod = addr & 0x18000 ;
        offset = (offset & 0x3fff) << 1;
        gvram[(((addr + offset) & 0x7fff) | pagemod) + page_offset] = val8;
@@ -1830,8 +1813,7 @@ void DISPLAY::write_vram_4096(uint32 addr, uint32 offset, uint32 data)
                page_offset = 0xc000;
        }
        pagemod = addr & 0xe000;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
        if(vram_active_block != 0) page_offset += 0x18000;
 #endif
        gvram[(((addr + offset) & 0x1fff) | pagemod) + page_offset] = (uint8)data;
@@ -1845,7 +1827,7 @@ void DISPLAY::write_vram_256k(uint32 addr, uint32 offset, uint32 data)
     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
        uint32 page_offset = 0;
        uint32 pagemod;
-       page_offset = (0xc000 << vram_bank) - 0xc000;
+       page_offset = 0xc000 * (vram_bank & 0x03);
        pagemod = addr & 0xe000;
        gvram[(((addr + offset) & 0x1fff) | pagemod) + page_offset] = (uint8)(data & 0xff);
        vram_wrote = true;
@@ -1871,32 +1853,18 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                        set_cyclesteal((uint8)data);
                        break;
 #endif
-#if defined(_FM77AV_VARIANTS) || defined(_FM77_VARIANTS)
+#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX) || defined(_FM77_VARIANTS) // _FM77L4
                // KANJI
                case 0x06:
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)  || defined(_FM77_VARIANTS)
                        if(!kanjisub) return;
-                       //kanjiclass1->write_signal(KANJIROM_ADDR_HI, data, 0xff);
-#  if defined(_FM77AV_VARIANTS)                        
-                       //kanjiclass2->write_signal(KANJIROM_ADDR_HI, data, 0xff);
-#  endif                       
                        kanjiaddr.w.h = 0x0000;
                        kanjiaddr.b.h = (uint8) data;
-# endif
                        break;
                case 0x07:
-                       //printf("KANJI LO=%02x\n", data);
-# if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-    defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)  || defined(_FM77_VARIANTS)
                        if(!kanjisub) return;
-                       //kanjiclass1->write_signal(KANJIROM_ADDR_LO, data, 0xff);
-#  if defined(_FM77AV_VARIANTS)                        
-                       //kanjiclass2->write_signal(KANJIROM_ADDR_LO, data, 0xff);
-#  endif                       
                        kanjiaddr.w.h = 0x0000;
                        kanjiaddr.b.l = (uint8)data;
-# endif
                        break;
 #endif                 
                // CRT OFF
@@ -1998,8 +1966,8 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                case 0x23:
                        alu_write_linepattern_lo(data);
                        break;
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
+     defined(_FM77AV20EX) || defined(_FM77AV20SX)
                case 0x2e: //
                        console_ram_bank = (data & 0x18) >> 3;
                        if(console_ram_bank > 2) console_ram_bank = 0;
@@ -2011,7 +1979,7 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                        if(vram_bank > 2) vram_bank = 0;
                        vram_wrote = true;
                        break;
- #endif                        
+endif                        
                // MISC
                case 0x30:
                        set_miscreg(data);
@@ -2020,8 +1988,7 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                case 0x31:
                        keyboard->write_data8(0x31, data);
                        break;
- #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
-     defined(_FM77AV20) || defined(_FM77AV20EX) || defined(_FM77AV20SX)
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)
                case 0x33: //
                        vram_active_block = data & 0x01;
                        if(vram_display_block != ((data & 0x10) ? 1 : 0)) vram_wrote = true;
@@ -2072,7 +2039,7 @@ void DISPLAY::write_mmio(uint32 addr, uint32 data)
                        }
                        window_high = tmpvar.d;
                        break;
-#endif
+# endif
 #endif                         
                default:
 #if defined(_FM77AV_VARIANTS)
@@ -2329,6 +2296,16 @@ void DISPLAY::initialize()
        vsync_event_id = -1;
        vstart_event_id = -1;
 #endif 
+       switch(config.cpu_type){
+               case 0:
+                       clock_fast = true;
+                       break;
+               case 1:
+                       clock_fast = false;
+                       break;
+       }
+       is_cyclesteal = ((config.dipswitch & FM7_DIPSW_CYCLESTEAL) != 0) ? true : false;
+       enter_display();
        nmi_event_id = -1;
 }
 
index 434ded4..a6deff5 100644 (file)
@@ -149,11 +149,6 @@ DEVICE* VM::get_device(int id)
 
 void VM::initialize(void)
 {
-#if defined(_FM8) || defined(_FM7)
-       cycle_steal = false;
-#else
-       cycle_steal = true;
-#endif
        clock_low = false;
        
 }
@@ -200,6 +195,7 @@ void VM::connect_bus(void)
                mainclock = MAINCLOCK_SLOW;
                subclock = SUBCLOCK_SLOW;
        }
+       //if((config.dipswitch & FM7_DIPSW_CYCLESTEAL) != 0) subclock = subclock / 3;
 #endif
        event->set_context_cpu(maincpu, mainclock);
        event->set_context_cpu(subcpu,  subclock);
index 24117b1..3e173fe 100644 (file)
@@ -360,7 +360,6 @@ protected:
        int machine_version; // 0 = FM8 / 1 = FM7 / 2 = FM77AV / 3 = FM77AV40, etc...
         uint32 bootmode;   
         uint32 connected_opns;
-        bool cycle_steal;
         bool clock_low;
         int mainfreq_type;
         uint32 mainfreq_low;
diff --git a/source/src/vm/fm7/fm7_dipsw.h b/source/src/vm/fm7/fm7_dipsw.h
deleted file mode 100644 (file)
index eca27dd..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef _FM7_DIPSW_H_
-#define _FM7_DIPSW_H_
-
-#include "../device.h"
-
-class DEVICE;
-class FM7_DIPSW : public DEVICE
-{
- protected:
-  uint8 boot_sw = 0;
-  bool cycle_steal = false;
-  bool fast_clock = false;
- public:
- FM7_DIPSW(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
-    {
-    }
- ~FM7_DIPSW() {}
-
- uint32 get_boot_mode(void) {
- case (boot_sw & 3) {
- case 0:
-   return FM7_BOOTMODE_BASIC;
-   break;
- case 1:
-   return FM7_BOOTMODE_DOS;
-   break;
- case 2:
-   return FM7_BOOTMODE_ROM3;
-   break;
- case 3:
-   return FM7_BOOTMODE_ROM4;
-   break;
- }
- }
-
- void set_boot_mode(uint32 mode){
-   boot_sw = mode & 3;
- }
- bool get_cyclesteal(void){
-   return cycle_steal;
- }
- void set_cyclesteal(bool mode){
-   cycle_steal =  mode;
- }
- bool get_fastclock(void){
-   return fast_clock;
- }
- void set_fastclock(bool mode){
-   fast_clock =  mode;
- }
-}
-#endif
index 3363f81..657a9ed 100644 (file)
@@ -187,8 +187,9 @@ class DISPLAY: public DEVICE
 
 #if defined(_FM77AV_VARIANTS)
        uint8 gvram[0x2000 * 12];
-#elif defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40SX)|| \
-      defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
+#elif defined(_FM77AV40)
+       uint8 gvram[0x2000 * 18];
+#elif defined(_FM77AV40EX) || defined(_FM77AV40SX)
        uint8 gvram[0x4000 * 6];
 #else
        uint8 gvram[0x4000 * 3];
index 75650c0..06cdd33 100644 (file)
@@ -1102,8 +1102,7 @@ uint32 FM7_MAINIO::read_data8(uint32 addr)
                        if(mainmem->read_signal(FM7_MAINIO_MMR_ENABLED) != 0)    retval |= 0x80;
                        break;
 #endif
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
-    defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
+#if defined(_FM77AV40SX) || defined(_FM77AV40EX)
                case 0x95:
                        retval = 0x77;
                        if(mainmem->read_signal(FM7_MAINIO_FASTMMR_ENABLED) != 0) retval |= 0x08;
@@ -1368,10 +1367,12 @@ void FM7_MAINIO::write_data8(uint32 addr, uint32 data)
                        mainmem->write_signal(FM7_MAINIO_WINDOW_FAST , data, 0x01);
 
                        break;
+# if defined(_FM77AV40SX) || defined(_FM77AV40EX)
                case 0x95:
                        mainmem->write_signal(FM7_MAINIO_FASTMMR_ENABLED, data, 0x08);
                        mainmem->write_signal(FM7_MAINIO_EXTROM, data & 0x80, 0x80);
                        break;
+# endif
 #endif                 
 #if defined(HAS_DMA)
                case 0x98:
index c46f132..b072f6f 100644 (file)
@@ -558,9 +558,11 @@ uint32 FM7_MAINMEM::read_signal(int sigid)
        case FM7_MAINIO_INITROM_ENABLED:
                value = (initiator_enabled) ? 0xffffffff: 0x00000000;
                break;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)         
        case FM7_MAINIO_EXTROM:
                value = (extrom_bank) ? 0xffffffff: 0x00000000;
                break;
+# endif           
        case FM7_MAINIO_EXTBANK:
                value = extcard_bank & 0x3f;
                value |= (dictram_enabled) ? 0x80 : 0;
@@ -605,9 +607,11 @@ void FM7_MAINMEM::write_signal(int sigid, uint32 data, uint32 mask)
                        dictram_enabled = ((data & 0x80) != 0) ? true : false;
                        dictrom_enabled = ((data & 0x40) != 0) ? true : false;
                        break;
+# if defined(_FM77AV40EX) || defined(_FM77AV40SX)         
                case FM7_MAINIO_EXTROM:
                        extrom_bank = flag;
-                       break;
+                       break;
+# endif           
 #endif                 
 #ifdef HAS_MMR                 
                case FM7_MAINIO_WINDOW_ENABLED: