#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");
}
void kernal_chrout(uint8_t c) {
asm volatile(
"jsr $FFD2"
:: "a" (c)
);
}
void kernal_settim(uint32_t time) {
uint8_t a = (uint8_t) time;
uint8_t x = (uint8_t) (time >> 8);
uint8_t y = (uint8_t) (time >> 16);
asm volatile(
"jsr $FFDB"
:: "a" (a), "x" (x), "y" (y)
);
}
uint32_t kernal_rdtim() {
uint8_t a, x, y;
asm volatile(
"jsr $FFDE"
: "=a" (a), "=x" (x), "=y" (y)
);
return ((uint32_t) y << 16) | ((uint32_t) x << 8) | ((uint32_t) a);
}
uint16_t kernal_screen() {
uint8_t cols, rows;
asm volatile(
"jsr $FFED"
: "=x" (cols), "=y" (rows)
);
return ((uint16_t) cols << 8) | (uint16_t) rows;
}
uint16_t kernal_plot_get() {
uint8_t row, col;
asm volatile(
"sec\n\t"
"jsr $FFF0"
: "=x" (row), "=y" (col)
);
return ((uint16_t) row << 8) | (uint16_t) col;
}
void kernal_plot_set(uint8_t row, uint8_t col) {
asm volatile(
"clc\n\t"
"jsr $FFF0"
:: "x" (row), "y" (col)
: "a"
);
}