OSDN Git Service

[VM][FM7][MAINMEM] Do not initialize tables on initialize(), do constructor.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 13 Jul 2015 08:36:17 +0000 (17:36 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 13 Jul 2015 08:36:17 +0000 (17:36 +0900)
source/src/vm/fm7/fm7.cpp
source/src/vm/fm7/fm7_mainio.cpp
source/src/vm/fm7/fm7_mainmem.cpp

index 17e6fe4..9f9524a 100644 (file)
@@ -83,13 +83,23 @@ VM::VM(EMU* parent_emu): emu(parent_emu)
 #ifdef WITH_Z80
        z80cpu = new Z80(this, emu);
 #endif
+       // MEMORIES must set before initialize().
+       maincpu->set_context_mem(mainmem);
+       subcpu->set_context_mem(display);
+#ifdef WITH_Z80
+       z80cpu->set_context_mem(mainmem);
+#endif
 #ifdef USE_DEBUGGER
        maincpu->set_context_debugger(new DEBUGGER(this, emu));
        subcpu->set_context_debugger(new DEBUGGER(this, emu));
+#ifdef WITH_Z80
+       z80cpu->set_context_debugger(new DEBUGGER(this, emu));
 #endif
-       for(DEVICE* device = first_device; device; device = device->next_device) {
-               device->initialize();
-       }
+#endif
+   
+       //for(DEVICE* device = first_device; device; device = device->next_device) {
+       //      device->initialize();
+       //}
        connect_bus();
        initialize();
 }
@@ -267,10 +277,11 @@ void VM::connect_bus(void)
        subcpu->set_context_bus_halt(display, SIG_FM7_SUB_HALT, 0xffffffff);
        subcpu->set_context_bus_clr(display, SIG_FM7_SUB_USE_CLR, 0x0000000f);
    
-       maincpu->set_context_mem(mainmem);
-       subcpu->set_context_mem(display);
        event->register_frame_event(joystick);
                
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               device->initialize();
+       }
        for(int i = 0; i < 2; i++) {
 #if defined(_FM77AV20) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
                fdc->set_drive_type(i, DRIVE_TYPE_2DD);
index efcc774..6b4435f 100644 (file)
@@ -191,7 +191,7 @@ void FM7_MAINIO::reset()
    
        extdet_neg = false;
    
-       stat_romrammode = true;
+       //stat_romrammode = true;
        if(bootmode == 0) { // IF BASIC BOOT THEN ROM
                stat_romrammode = true;
        } else { // ELSE RAM
@@ -270,6 +270,7 @@ void FM7_MAINIO::reset()
        memset(io_w_latch, 0x00, 0x100);
 
        //mainmem->reset();
+       //maincpu->write_signal(SIG_CPU_BUSREQ, 0, 1);
        //maincpu->reset();
 }
 
@@ -1326,7 +1327,11 @@ void FM7_MAINIO::write_data8(uint32 addr, uint32 data)
                bootmode = data & 0x03;
                mainmem->write_signal(FM7_MAINIO_IS_BASICROM, (bootmode == 0) ? 0xffffffff : 0, 0xffffffff);
                mainmem->write_signal(FM7_MAINIO_BOOTMODE, bootmode, 0x03);
+#if defined(_FM77AV_VARIANTS) || defined(_FM77_VARIANTS) 
                mainmem->write_signal(FM7_MAINIO_BOOTRAM_RW, (boot_ram) ? 0xffffffff : 0 , 0xffffffff);
+#else
+               mainmem->write_signal(FM7_MAINIO_BOOTRAM_RW, 0 , 0xffffffff);
+#endif       
                return;
        } else if(addr == FM7_MAINIO_CLOCKMODE) {
                set_clockmode((uint8)data);
index 732b381..c5712c0 100644 (file)
@@ -578,6 +578,7 @@ void FM7_MAINMEM::write_data8(uint32 addr, uint32 data)
 {
        uint32 realaddr;
        int bank;
+#if defined(HAS_MMR)   
        if(addr >= FM7_MAINIO_WINDOW_OFFSET) {
                switch(addr) {
                case FM7_MAINIO_WINDOW_OFFSET:
@@ -594,6 +595,7 @@ void FM7_MAINMEM::write_data8(uint32 addr, uint32 data)
                }
                return;
        }
+#endif   
        bank = getbank(addr, &realaddr);
        if(bank < 0) {
                emu->out_debug_log("Illegal BANK: ADDR = %04x", addr);
@@ -734,7 +736,7 @@ FM7_MAINMEM::FM7_MAINMEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, par
        p_vm = parent_vm;
        p_emu = parent_emu;
 #if !defined(_FM77AV_VARIANTS)
-       for(i = 0; i < 4; i++) fm7_bootroms[i] = (uint8 *)malloc(0x200);
+       for(int i = 0; i < 4; i++) fm7_bootroms[i] = (uint8 *)malloc(0x200);
 #endif 
        mainio = NULL;
        display = NULL;
@@ -744,6 +746,9 @@ FM7_MAINMEM::FM7_MAINMEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, par
 #if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) ||  defined(_FM77_VARIANTS)
        fm7_mainmem_extram = NULL;
 #endif 
+       // Initialize table
+       memset(read_table, 0x00, sizeof(read_table));
+       memset(write_table, 0x00, sizeof(write_table));
 }
 
 FM7_MAINMEM::~FM7_MAINMEM()
@@ -779,10 +784,8 @@ void FM7_MAINMEM::initialize(void)
        bootmode = config.boot_mode & 3;
        basicrom_fd0f = false;
        is_basicrom = (bootmode == 0) ? true : false;
-       // Initialize table
+   
        // $0000-$7FFF
-       memset(read_table, 0x00, sizeof(read_table));
-       memset(write_table, 0x00, sizeof(write_table));
        i = FM7_MAINMEM_OMOTE;
        memset(fm7_mainmem_omote, 0x00, 0x8000 * sizeof(uint8));
        read_table[i].memory = fm7_mainmem_omote;
@@ -793,7 +796,6 @@ void FM7_MAINMEM::initialize(void)
        memset(fm7_mainmem_ura, 0x00, 0x7c00 * sizeof(uint8));
        read_table[i].memory = fm7_mainmem_ura;
        write_table[i].memory = fm7_mainmem_ura;
-
        
        i = FM7_MAINMEM_VECTOR;
        memset(fm7_mainmem_bootrom_vector, 0x00, 0x1e);