OSDN Git Service

[VM][FM7][DISPLAY] Fixing bus arbitation both main cpu & sub cpu.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 10 Apr 2015 15:48:03 +0000 (00:48 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 10 Apr 2015 15:48:03 +0000 (00:48 +0900)
source/src/vm/fm7/display.cpp
source/src/vm/fm7/fm7_mainmem.cpp

index 59556bb..8749555 100644 (file)
@@ -861,8 +861,8 @@ void DISPLAY::set_monitor_bank(uint8 var)
                halt_flag = true;
        }
 #else
-       this->reset();
-       //subcpu->reset();
+       //this->reset();
+       subcpu->reset();
 #endif
 }
 
@@ -1104,8 +1104,8 @@ void DISPLAY::write_signal(int id, uint32 data, uint32 mask)
                                        vram_wrote = true;
                                        power_on_reset = false;
                                        subrom_bank_using = subrom_bank;
-                                       //subcpu->reset();
-                                       this->reset();
+                                       subcpu->reset();
+                                       //this->reset();
                                        subcpu_resetreq = false;
                                        //restart_subsystem();
                                } else {
@@ -1828,17 +1828,17 @@ void DISPLAY::write_data8(uint32 addr, uint32 data)
                                reset_vramaccess();
                                break;
                        case 0x0a:
-                               if(clr_count <= 0) {
-                                       set_subbusy();
-                               } else { // Read once when using clr_foo() to set busy flag.
-                                       double usec = (1000.0 * 1000.0) / 999000.0;
-                                       if(mainio->read_data8(FM7_MAINIO_CLOCKMODE) != FM7_MAINCLOCK_SLOW) usec = (1000.0 * 1000.0) / 2000000.0;
-                                       if(!is_cyclesteal) usec = usec * 3.0;
-                                       usec = (double)clr_count * usec;
-                                       register_event(this, EVENT_FM7SUB_CLR, usec, false, NULL); // NEXT CYCLE_
-                                       reset_subbusy();
-                                       clr_count = 0;
-                               }
+                                       //if(clr_count <= 0) {
+                               set_subbusy();
+                                       //} else { // Read once when using clr_foo() to set busy flag.
+                                       //double usec = (1000.0 * 1000.0) / 999000.0;
+                                       //if(mainio->read_data8(FM7_MAINIO_CLOCKMODE) != FM7_MAINCLOCK_SLOW) usec = (1000.0 * 1000.0) / 2000000.0;
+                                       //if(!is_cyclesteal) usec = usec * 3.0;
+                                       //usec = (double)clr_count * usec;
+                                       //register_event(this, EVENT_FM7SUB_CLR, usec, false, NULL); // NEXT CYCLE_
+                                       //reset_subbusy();
+                                       //clr_count = 0;
+                                       //}
                                break;
                        case 0x0d:
                                keyboard->write_signal(SIG_FM7KEY_SET_INSLED, 0x00, 0x01);
index af32f6f..aa819c0 100644 (file)
@@ -16,11 +16,12 @@ void FM7_MAINMEM::reset()
        sub_halted = false;
        first_pass = true;
        flag_debug = false;
-#if defined(_FM77AV_VARIANTS)  
+#if defined(_FM77AV_VARIANTS)
+       memset(fm7_bootram, 0x00, 0x1e0);
        if((config.boot_mode & 3) == 0) {
-               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1800], 0x200 * sizeof(uint8));
+               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1800], 0x1e0 * sizeof(uint8));
        } else {
-               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1a00], 0x200 * sizeof(uint8));
+               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1a00], 0x1e0 * sizeof(uint8));
        }
        fm7_bootram[0x1fe] = 0xfe; // Set reset vector.
        fm7_bootram[0x1ff] = 0x00; //
@@ -683,9 +684,9 @@ void FM7_MAINMEM::initialize(void)
        if(diag_load_initrom) diag_load_bootrom_bas = true;
        if(diag_load_initrom) diag_load_bootrom_dos = true;
        if((config.boot_mode & 0x03) == 0) {
-               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1800], 0x200 * sizeof(uint8));
+               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1800], 0x1e0 * sizeof(uint8));
        } else {
-               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1a00], 0x200 * sizeof(uint8));
+               memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1a00], 0x1e0 * sizeof(uint8));
        }
        fm7_bootram[0x1fe] = 0xfe; // Set reset vector.
        fm7_bootram[0x1ff] = 0x00; //