aboutsummaryrefslogtreecommitdiffstats
path: root/c/libc.s
diff options
context:
space:
mode:
Diffstat (limited to 'c/libc.s')
-rw-r--r--c/libc.s54
1 files changed, 54 insertions, 0 deletions
diff --git a/c/libc.s b/c/libc.s
new file mode 100644
index 0000000..4fca5e3
--- /dev/null
+++ b/c/libc.s
@@ -0,0 +1,54 @@
+ .module libc
+ .globl _writes, _nl, _readc, _sexit, _getpid
+ .area _CODE
+ ;; void writes(const char *buf /*DE*/, unsigned char len /*A*/)
+_writes:
+ push hl
+ push de
+ push bc
+ ld b, a
+ ld c, #3 ; SYS_WRITE
+ rst #0x30
+ pop bc
+ pop de
+ pop hl
+ ret
+ ;; void nl(void) - CRLF straight to serial
+_nl:
+ ld a, #0x0d
+ ld (0xff01), a
+ ld a, #0x81
+ ld (0xff02), a
+ ld a, #0x0a
+ ld (0xff01), a
+ ld a, #0x81
+ ld (0xff02), a
+ ret
+ ;; unsigned char readc(void) -> A
+_readc:
+ push hl
+ push de
+ push bc
+ ld c, #2 ; SYS_READ
+ rst #0x30
+ pop bc
+ pop de
+ pop hl
+ ret
+ ;; void sexit(unsigned char code /*A*/)
+_sexit:
+ ld b, a
+ ld c, #0 ; SYS_EXIT
+ rst #0x30
+ ret
+ ;; unsigned char getpid(void) -> A
+_getpid:
+ push hl
+ push de
+ push bc
+ ld c, #8 ; SYS_GETPID
+ rst #0x30
+ pop bc
+ pop de
+ pop hl
+ ret