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");
}
}
Alles anzeigen