From: K.Ohta Date: Mon, 13 Jul 2015 08:36:17 +0000 (+0900) Subject: [VM][FM7][MAINMEM] Do not initialize tables on initialize(), do constructor. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3e9a119ae37eed572a7993c94b98a3fa5204ffab;p=csp-qt%2Fcommon_source_project-fm7.git [VM][FM7][MAINMEM] Do not initialize tables on initialize(), do constructor. --- diff --git a/source/src/vm/fm7/fm7.cpp b/source/src/vm/fm7/fm7.cpp index 17e6fe4a6..9f9524a0a 100644 --- a/source/src/vm/fm7/fm7.cpp +++ b/source/src/vm/fm7/fm7.cpp @@ -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); diff --git a/source/src/vm/fm7/fm7_mainio.cpp b/source/src/vm/fm7/fm7_mainio.cpp index efcc77462..6b4435f7c 100644 --- a/source/src/vm/fm7/fm7_mainio.cpp +++ b/source/src/vm/fm7/fm7_mainio.cpp @@ -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); diff --git a/source/src/vm/fm7/fm7_mainmem.cpp b/source/src/vm/fm7/fm7_mainmem.cpp index 732b3818b..c5712c082 100644 --- a/source/src/vm/fm7/fm7_mainmem.cpp +++ b/source/src/vm/fm7/fm7_mainmem.cpp @@ -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);