c64 0.1.0-alpha.0

Driver for the Commodore 64 platform
#include <stdint.h>

void kernal_poly1(uint8_t* addr) {
    uint8_t a = (uint8_t) ((uint16_t) addr);
    uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
    asm volatile(
        "jsr $E043;"
        :: "a" (a), "y" (y)
    );
}

void kernal_poly2(uint8_t* addr) {
    uint8_t a = (uint8_t) ((uint16_t) addr);
    uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
    asm volatile(
        "jsr $E059;"
        :: "a" (a), "y" (y)
    );
}

void kernal_cos() {
    asm volatile("jsr $E264");
}

void kernal_sin() {
    asm volatile("jsr $E26B");
}

void kernal_tan() {
    asm volatile("jsr $E2B4");
}

void kernal_atn() {
    asm volatile("jsr $E30E");
}

uint32_t kernal_rdtim() {
    uint8_t a, x, y;
    asm volatile(
        "jsr $FFDE;"
        : "=a" (a), "=x" (x), "=y" (y)
    );
    return ((uint32_t) a << 16) | ((uint32_t) x << 8) | ((uint32_t) y);
}