@@ -155,7 +155,9 @@ uint32_t direct_nmi_n = 1;
155
155
uint32_t direct_nmi_n_d1 = 1 ;
156
156
uint32_t direct_nmi_n_d2 = 1 ;
157
157
uint32_t direct_irq_n_d1 = 1 ;
158
+ uint32_t direct_irq_n_d2 = 1 ;
158
159
uint32_t direct_firq_n_d1 = 1 ;
160
+ uint32_t direct_firq_n_d2 = 1 ;
159
161
uint32_t direct_halt_n = 1 ;
160
162
uint32_t direct_irq_n = 1 ;
161
163
uint32_t direct_firq_n = 1 ;
@@ -317,8 +319,12 @@ inline void wait_for_CLK_falling_edge() {
317
319
318
320
319
321
direct_nmi_n_d2 = direct_nmi_n_d1;
320
- direct_nmi_n_d1 = direct_nmi_n;
322
+ direct_nmi_n_d1 = direct_nmi_n;
323
+
324
+ direct_irq_n_d2 = direct_irq_n_d1;
321
325
direct_irq_n_d1 = direct_irq_n;
326
+
327
+ direct_firq_n_d2 = direct_firq_n_d1;
322
328
direct_firq_n_d1 = direct_firq_n;
323
329
324
330
direct_reset_n = (GPIO9_raw_data&0x00000100 ); // Sample all signals at E falling edge
@@ -716,7 +722,7 @@ void opcode_0x13 () { VMA_Cycle(1,register_PC); // SYNC
716
722
digitalWriteFast (PIN_DATA_OE_n,0x1 );
717
723
pinMode (PIN_RDWR_n, INPUT);
718
724
VMA_Cycle (1 ,0xFFFF );
719
- while ( (direct_irq_n !=0 ) && (direct_firq_n !=0 ) && (direct_nmi_n!=0 ) ) wait_for_CLK_falling_edge ();
725
+ while ( (direct_irq_n_d2 !=0 ) && (direct_firq_n_d2 !=0 ) && (direct_nmi_n!=0 ) ) wait_for_CLK_falling_edge ();
720
726
digitalWriteFast (PIN_ADDR_OE_n,0x0 );
721
727
pinMode (PIN_RDWR_n, OUTPUT);
722
728
VMA_Cycle (1 ,0xFFFF );
@@ -739,11 +745,11 @@ void opcode_0x3C () { // CWAI
739
745
PushS8 (register_A);
740
746
PushS8 (REGISTER_CC);
741
747
VMA_Cycle (1 ,0xFFFF );
742
- while ( (direct_irq_n !=0 ) && (direct_firq_n !=0 ) && (direct_nmi_n!=0 ) ) wait_for_CLK_falling_edge ();
748
+ while ( (direct_irq_n_d2 !=0 ) && (direct_firq_n_d2 !=0 ) && (direct_nmi_n!=0 ) ) wait_for_CLK_falling_edge ();
743
749
744
750
if (direct_nmi_n==0 ) register_PC = Read_Word (0xFFFC );
745
- else if (flag_f==0 && direct_firq_n ==0 ) register_PC = Read_Word (0xFFF6 );
746
- else if (flag_i==0 && direct_irq_n ==0 ) register_PC = Read_Word (0xFFF8 );
751
+ else if (flag_f==0 && direct_firq_n_d2 ==0 ) register_PC = Read_Word (0xFFF6 );
752
+ else if (flag_i==0 && direct_irq_n_d2 ==0 ) register_PC = Read_Word (0xFFF8 );
747
753
748
754
VMA_Cycle (1 ,0xFFFF );
749
755
return ;
@@ -1816,8 +1822,8 @@ void loop() {
1816
1822
1817
1823
if (direct_reset_n==0 ) { Reset_sequence (); }
1818
1824
else if (nmi_latched==1 ) { NMI_Handler (); }
1819
- else if (flag_f==0 && direct_firq_n_d1 ==0 ) { FIRQ_Handler (); }
1820
- else if (flag_i==0 && direct_irq_n_d1 ==0 ) { IRQ_Handler (); }
1825
+ else if (flag_f==0 && direct_firq_n_d2 ==0 ) { FIRQ_Handler (); }
1826
+ else if (flag_i==0 && direct_irq_n_d2 ==0 ) { IRQ_Handler (); }
1821
1827
1822
1828
}
1823
1829
0 commit comments