C
- #include <6502.h>
- #include <c64.h>
- #include <stdint.h>
- #define FIRST (249)
- #define SECOND (FIRST + 2)
- #define CINV (*(uint16_t *) 0x0314)
- #define MEM (*(uint8_t *) 0x3fff)
- void newirq(void);
- int main(void)
- {
- SEI();
- CINV = newirq;
- VIC.rasterline = FIRST;
- VIC.ctrl1 = VIC.ctrl1 & ~(0x80);
- VIC.imr = 0x81;
- CLI();
- for (;;)
- {
- ++MEM;
- }
- }
- void newirq(void)
- {
- static uint8_t trash;
- if (!((VIC.irr = VIC.irr) & 0x80))
- {
- trash = CIA1.icr;
- CLI();
- __asm__("JMP $EA31");
- }
- else
- {
- if (VIC.rasterline < SECOND)
- {
- VIC.ctrl1 = 0x13;
- VIC.rasterline = SECOND;
- }
- else
- {
- VIC.ctrl1 = 0x1b;
- VIC.rasterline = FIRST;
- }
- __asm__("JMP $EA7E");
- }
- }