8bitworkshop/presets/zx/bios.c

69 lines
868 B
C

#include <stdio.h>
#ifdef __MAIN__
void main(void);
void startup(void) __naked {
__asm
jp _main
__endasm;
}
#endif
// http://www.users.globalnet.co.uk/~jg27paw4/pourri/rom-routines.txt
void init_stdio(void) {
__asm
ld a,#2
call 0x1601
__endasm;
}
int putchar(int ch) {
if (ch == 10) ch = 13; // newline -> CR
__asm
ld a,4 (ix)
rst 0x10
__endasm;
}
void beep(int divisor, int duration) {
divisor;
duration;
__asm
ld l,4 (ix)
ld h,5 (ix)
ld e,6 (ix)
ld d,7 (ix)
call 0x3b5
__endasm;
}
int keyscan(void) {
__asm
call 0x028e
ld l,e
ld h,d
__endasm;
}
#ifdef __MAIN__
void main() {
init_stdio();
printf("HELLO WORLD!\r");
beep(1000,20);
beep(750,20);
beep(500,20);
while (1) {
int key = keyscan();
if (key != -1) printf("%04x", key);
}
while (1);
}
#endif