#include <stdint.h>
#define PEEK(address) (*(volatile uint8_t *)(address))
int16_t basic_facinx() {
uint8_t a, y;
asm volatile(
"jsr $B1AA"
: "=a" (a), "=y" (y)
);
return (int16_t) (((uint16_t) a << 8) | ((uint16_t) y));
}
void basic_givayf(int16_t value) {
uint8_t a = (uint8_t) ((uint16_t) value >> 8);
uint8_t y = (uint8_t) ((uint16_t) value);
asm volatile(
"jsr $B391"
:: "a" (a), "y" (y)
);
}
void basic_fsub(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $B850"
:: "a" (a), "y" (y)
);
}
void basic_fsubt() {
asm volatile("jsr $B853");
}
void basic_fadd(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $B867"
:: "a" (a), "y" (y)
);
}
void basic_faddt() {
asm volatile(
"lda $66\n\t" "eor $6E\n\t" "sta $6F\n\t" "lda $61\n\t" "jsr $B86A"
::: "a"
);
}
void basic_log() {
asm volatile("jsr $B9EA");
}
void basic_fmult(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $BA28"
:: "a" (a), "y" (y)
);
}
void basic_mul10() {
asm volatile("jsr $BAE2");
}
void basic_div10() {
asm volatile("jsr $BAFE");
}
void basic_fdivarg(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
uint8_t x = PEEK(0x6E) ^ addr[1];
asm volatile(
"jsr $BB07"
:: "a" (a), "y" (y), "x" (x)
);
}
void basic_fdiv(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $BB0F"
:: "a" (a), "y" (y)
);
}
void basic_fdivt() {
asm volatile(
"lda $66\n\t" "eor $6E\n\t" "sta $6F\n\t" "lda $61\n\t" "jsr $BB12"
::: "a"
);
}
void basic_movfm(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $BBA2"
:: "a" (a), "y" (y)
);
}
void basic_movmf(uint8_t* addr) {
uint8_t x = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $BBD4"
:: "x" (x), "y" (y)
);
}
uint8_t basic_movaf() {
uint8_t a;
asm volatile(
"jsr $BBFC"
: "=a" (a)
);
return a;
}
uint8_t basic_movfa() {
uint8_t a;
asm volatile(
"jsr $BC0C"
: "=a" (a)
);
return a;
}
void basic_round() {
asm volatile("jsr $BC1B");
}
int8_t basic_sign() {
int8_t a;
asm volatile(
"jsr $BC2B"
: "=a" (a)
);
return a;
}
void basic_sgn() {
asm volatile("jsr $BC39");
}
void basic_abs() {
asm volatile("lsr $66");
}
int8_t basic_fcomp(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
int8_t ret;
asm volatile(
"jsr $BC5B"
: "=a" (ret)
: "a" (a), "y" (y)
);
return ret;
}
void basic_qint() {
asm volatile("jsr $BC9B");
}
void basic_int() {
asm volatile("jsr $BCCC");
}
int8_t* basic_fout() {
uint8_t a, y;
asm volatile(
"jsr $BDDD"
: "=a" (a), "=y" (y)
);
return (int8_t*) (((uint16_t) y << 8) | ((uint16_t) a));
}
void basic_sqr() {
asm volatile("jsr $BF71");
}
void basic_fpwr(uint8_t* addr) {
uint8_t a = (uint8_t) ((uint16_t) addr);
uint8_t y = (uint8_t) ((uint16_t) addr >> 8);
asm volatile(
"jsr $BF78"
:: "a" (a), "y" (y)
);
}
void basic_fpwrt() {
asm volatile(
"lda $61\n\t"
"jsr $BF7B"
::: "a"
);
}
void basic_negop() {
asm volatile("jsr $BFB4");
}
void basic_exp() {
asm volatile("jsr $BFED");
}