diff --git a/C64_4joy_adapter/interrupt_test.ino b/C64_4joy_adapter/interrupt_test.ino new file mode 100644 index 0000000..b62e6a8 --- /dev/null +++ b/C64_4joy_adapter/interrupt_test.ino @@ -0,0 +1,49 @@ +#define LED_PIN 5 // digital pin #13 (portb) (pin #9 with Arduino Pro Micro) +#define LED_ON() PORTB |= _BV(LED_PIN) +#define LED_OFF() PORTB &= ~_BV(LED_PIN) + +volatile uint8_t output1; +volatile uint8_t output2; + +ISR(INT0_vect, ISR_NAKED) +{ + asm volatile( + " push r0 \n" // save register r0 + " lds r0, output1 \n" + " out %[pin], r0 \n" + " pop r0 \n" // restore previous r0 + " rjmp INT0_vect_part_2 \n" // go to part 2 for required prologue and epilogue + :: [pin] "I" (_SFR_IO_ADDR(PORTB))); +} + +ISR(INT0_vect_part_2) { +} + +ISR(INT1_vect, ISR_NAKED) +{ + asm volatile( + " push r0 \n" // save register r0 + " lds r0, output2 \n" + " out %[pin], r0 \n" + " pop r0 \n" // restore previous r0 + " rjmp INT1_vect_part_2 \n" // go to part 2 for required prologue and epilogue + :: [pin] "I" (_SFR_IO_ADDR(PORTB))); +} + +ISR(INT1_vect_part_2) { +} + +void setup() { + //pinMode(13, OUTPUT); // Arduino Uno + pinMode(9, OUTPUT); // Arduino Pro Micro + TIMSK0 = 0; // disable timer0 interrupts (Arduino Uno/Pro Micro millis() update ISR) + EICRA = B1011; // INT0 – rising edge on 2 (B11), INT1 - falling edge on 3 (B10xx) + EIMSK = B11; // enable int0 (Bx1) and int1 (B1x) +} + +void loop() { + LED_ON(); + //LED_OFF(); + output1 = 0; + delayMicroseconds(50); +}