OSDN Git Service

[VM][FM7][WIP] Change sequence of SUB-MAIN handshake, this is Work-In-Progress.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 14 Apr 2015 20:56:09 +0000 (05:56 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 14 Apr 2015 20:56:09 +0000 (05:56 +0900)
source/src/vm/fm7/display.cpp
source/src/vm/fm7/fm7_mainio.cpp

index 32f172a..8f5c22b 100644 (file)
@@ -119,7 +119,7 @@ void DISPLAY::reset()
        register_event(this, EVENT_FM7SUB_VSTART, 10.0, false, &vstart_event_id);   
        register_event(this, EVENT_FM7SUB_DISPLAY_NMI, 20000.0, true, &nmi_event_id); // NEXT CYCLE_
        sub_busy = true;
-       sub_busy_bak = !sub_busy;
+       sub_busy_bak = sub_busy;
        do_attention = false;
        mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0xff, 0xff);
 //     subcpu->reset();
@@ -546,7 +546,7 @@ void DISPLAY::reset_crtflag(void)
 uint8 DISPLAY::acknowledge_irq(void)
 {
        cancel_request = false;
-       //do_irq(false);
+       do_irq(false);
        return 0xff;
 }
 
@@ -598,7 +598,7 @@ void DISPLAY::reset_vramaccess(void)
 uint8 DISPLAY::reset_subbusy(void)
 {
        sub_busy = false;
-//     mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0, 0xff);
+       //mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0, 0xff);
        return 0xff;
 }
 
@@ -606,7 +606,7 @@ uint8 DISPLAY::reset_subbusy(void)
 void DISPLAY::set_subbusy(void)
 {
        sub_busy = true;
-//     mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0xff, 0xff);
+       //mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0xff, 0xff);
 }
 
 
@@ -757,7 +757,7 @@ void DISPLAY::alu_write_line_position(int addr, uint8 val)
                        alu->write_data8(ALU_LINEPOS_END_X_HIGH, data & 0x03); 
                        break;
                case 5:  
-                 alu->write_data8(ALU_LINEPOS_END_X_LOW, data); 
+                       alu->write_data8(ALU_LINEPOS_END_X_LOW, data); 
                        break;
                case 6:  
                        alu->write_data8(ALU_LINEPOS_END_Y_HIGH, data & 0x01); 
@@ -1114,7 +1114,7 @@ void DISPLAY::write_signal(int id, uint32 data, uint32 mask)
                case SIG_FM7_SUB_HALT:
                        if(flag) {
                                sub_busy = true;
-                               //mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0xff, 0xff);
+                               mainio->write_signal(FM7_MAINIO_SUB_BUSY, 0xff, 0xff);
                        }
                        //if(cancel_request && flag) {
                        //      restart_subsystem();
@@ -1157,7 +1157,7 @@ void DISPLAY::write_signal(int id, uint32 data, uint32 mask)
                        //printf("MAIN: CANCEL REQUEST TO SUB\n");
                        if(flag) {
                                cancel_request = true;
-                               //do_irq(true);
+                               do_irq(true);
                        }
                        break;
                case SIG_DISPLAY_CLOCK:
index 30d0627..5f6d6d1 100644 (file)
@@ -342,7 +342,7 @@ void FM7_MAINIO::set_break_key(bool pressed)
 void FM7_MAINIO::set_sub_attention(bool flag)
 {
        firq_sub_attention = flag;
-       do_firq(); 
+//     do_firq(); 
 }
   
 
@@ -385,7 +385,7 @@ void FM7_MAINIO::set_fd04(uint8 val)
        if(sub_cancel != sub_cancel_bak) {
                display->write_signal(SIG_FM7_SUB_CANCEL, (sub_cancel) ? 0xff : 0x00, 0xff); // HACK
        }
-       sub_cancel_bak = sub_cancel;
+       //sub_cancel_bak = sub_cancel;
        //sub_halt_bak = sub_halt;
 #ifdef WITH_Z80
        if((val & 0x01) != 0) {
@@ -1158,11 +1158,11 @@ void FM7_MAINIO::event_vline(int v, int clock)
                display->write_signal(SIG_DISPLAY_HALT,  (sub_halt) ? 0xff : 0x00, 0xff);
        }
        sub_halt_bak = sub_halt;
-       //if(firq_sub_attention != firq_sub_attention_bak){
-       //      do_firq();
-       //}
-       //firq_sub_attention_bak = firq_sub_attention;
-
+       if(firq_sub_attention != firq_sub_attention_bak){
+               do_firq();
+       }
+       firq_sub_attention_bak = firq_sub_attention;
+       sub_cancel_bak = sub_cancel;
 #if defined(_FM77AV_VARIANTS)
        if(sub_monitor_type != sub_monitor_bak) {
                display->write_signal(SIG_FM7_SUB_BANK, sub_monitor_type, 0x07);