collapseos/kernel/stdio.asm

98 lines
1.5 KiB
NASM
Raw Normal View History

2019-04-23 12:41:37 +10:00
; stdio
;
; Allows other modules to print to "standard out", that is, the console through
; which the user is connected in a decoupled manner.
;
; *** REQUIREMENTS ***
2019-05-17 22:14:19 +10:00
; blkdev. select the block device you want to use as stdio just before you call
; stdioInit.
2019-04-23 12:41:37 +10:00
; *** VARIABLES ***
; Used to store formatted hex values just before printing it.
2019-05-18 05:43:44 +10:00
.equ STDIO_HEX_FMT STDIO_RAMSTART
.equ STDIO_GETC STDIO_HEX_FMT+2
.equ STDIO_PUTC STDIO_GETC+2
.equ STDIO_RAMEND STDIO_PUTC+2
2019-05-17 22:14:19 +10:00
; Select the blockdev to use as stdio before calling this.
stdioInit:
push hl
ld hl, (BLOCKDEV_GETC)
ld (STDIO_GETC), hl
ld hl, (BLOCKDEV_PUTC)
ld (STDIO_PUTC), hl
pop hl
ret
stdioGetC:
ld ix, (STDIO_GETC)
jp (ix)
stdioPutC:
ld ix, (STDIO_PUTC)
jp (ix)
2019-04-23 12:41:37 +10:00
; print null-terminated string pointed to by HL
printstr:
push af
push hl
.loop:
ld a, (hl) ; load character to send
or a ; is it zero?
jr z, .end ; if yes, we're finished
2019-05-17 22:14:19 +10:00
call stdioPutC
2019-04-23 12:41:37 +10:00
inc hl
jr .loop
.end:
pop hl
pop af
ret
; print A characters from string that HL points to
printnstr:
push bc
push hl
ld b, a
.loop:
ld a, (hl) ; load character to send
2019-05-17 22:14:19 +10:00
call stdioPutC
2019-04-23 12:41:37 +10:00
inc hl
djnz .loop
.end:
pop hl
pop bc
ret
printcrlf:
ld a, ASCII_CR
2019-05-17 22:14:19 +10:00
call stdioPutC
2019-04-23 12:41:37 +10:00
ld a, ASCII_LF
2019-05-17 22:14:19 +10:00
call stdioPutC
2019-04-23 12:41:37 +10:00
ret
; Print the hex char in A
printHex:
push af
push hl
ld hl, STDIO_HEX_FMT
call fmtHexPair
ld a, 2
call printnstr
pop hl
pop af
ret
2019-04-24 03:29:16 +10:00
; Print the hex pair in HL
printHexPair:
push af
ld a, h
call printHex
ld a, l
call printHex
pop af
ret