@@ -155,7 +155,9 @@ uint32_t direct_nmi_n = 1;
155155uint32_t direct_nmi_n_d1 = 1 ;
156156uint32_t direct_nmi_n_d2 = 1 ;
157157uint32_t direct_irq_n_d1 = 1 ;
158+ uint32_t direct_irq_n_d2 = 1 ;
158159uint32_t direct_firq_n_d1 = 1 ;
160+ uint32_t direct_firq_n_d2 = 1 ;
159161uint32_t direct_halt_n = 1 ;
160162uint32_t direct_irq_n = 1 ;
161163uint32_t direct_firq_n = 1 ;
@@ -317,8 +319,12 @@ inline void wait_for_CLK_falling_edge() {
317319
318320
319321 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;
321325 direct_irq_n_d1 = direct_irq_n;
326+
327+ direct_firq_n_d2 = direct_firq_n_d1;
322328 direct_firq_n_d1 = direct_firq_n;
323329
324330 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
716722 digitalWriteFast (PIN_DATA_OE_n,0x1 );
717723 pinMode (PIN_RDWR_n, INPUT);
718724 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 ();
720726 digitalWriteFast (PIN_ADDR_OE_n,0x0 );
721727 pinMode (PIN_RDWR_n, OUTPUT);
722728 VMA_Cycle (1 ,0xFFFF );
@@ -739,11 +745,11 @@ void opcode_0x3C () { // CWAI
739745 PushS8 (register_A);
740746 PushS8 (REGISTER_CC);
741747 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 ();
743749
744750 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 );
747753
748754 VMA_Cycle (1 ,0xFFFF );
749755 return ;
@@ -1816,8 +1822,8 @@ void loop() {
18161822
18171823 if (direct_reset_n==0 ) { Reset_sequence (); }
18181824 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 (); }
18211827
18221828 }
18231829
0 commit comments