99 lines
1.7 KiB
ArmAsm
99 lines
1.7 KiB
ArmAsm
; Main printing routine that checksums and
|
|
; prints to output device
|
|
|
|
; Character that does equivalent of print_newline
|
|
.define newline 10
|
|
|
|
; Prints char without updating checksum
|
|
; Preserved: BC, DE, HL
|
|
.define print_char_nocrc bss
|
|
.redefine bss bss+3
|
|
|
|
|
|
; Initializes printing. HL = print routine
|
|
init_printing:
|
|
ld a,l
|
|
ld (print_char_nocrc+1),a
|
|
ld a,h
|
|
ld (print_char_nocrc+2),a
|
|
jr show_printing
|
|
|
|
|
|
; Hides/shows further printing
|
|
; Preserved: BC, DE, HL
|
|
hide_printing:
|
|
ld a,$C9 ; RET
|
|
jr +
|
|
show_printing:
|
|
ld a,$C3 ; JP (nn)
|
|
+ ld (print_char_nocrc),a
|
|
ret
|
|
|
|
|
|
; Prints character and updates checksum UNLESS
|
|
; it's a newline.
|
|
; Preserved: AF, BC, DE, HL
|
|
print_char:
|
|
push af
|
|
cp newline
|
|
call nz,update_crc
|
|
call print_char_nocrc
|
|
pop af
|
|
ret
|
|
|
|
|
|
; Prints space. Does NOT update checksum.
|
|
; Preserved: AF, BC, DE, HL
|
|
print_space:
|
|
push af
|
|
ld a,' '
|
|
call print_char_nocrc
|
|
pop af
|
|
ret
|
|
|
|
|
|
; Advances to next line. Does NOT update checksum.
|
|
; Preserved: AF, BC, DE, HL
|
|
print_newline:
|
|
push af
|
|
ld a,newline
|
|
call print_char_nocrc
|
|
pop af
|
|
ret
|
|
|
|
|
|
; Prints immediate string
|
|
; Preserved: AF, BC, DE, HL
|
|
.macro print_str ; string,string2
|
|
push hl
|
|
call print_str_
|
|
.byte \1
|
|
.if NARGS > 1
|
|
.byte \2
|
|
.endif
|
|
.if NARGS > 2
|
|
.byte \3
|
|
.endif
|
|
.byte 0
|
|
pop hl
|
|
.endm
|
|
|
|
print_str_:
|
|
pop hl
|
|
call print_str_hl
|
|
jp hl
|
|
|
|
|
|
; Prints zero-terminated string pointed to by HL.
|
|
; On return, HL points to byte AFTER zero terminator.
|
|
; Preserved: AF, BC, DE
|
|
print_str_hl:
|
|
push af
|
|
jr +
|
|
- call print_char
|
|
+ ldi a,(hl)
|
|
or a
|
|
jr nz,-
|
|
pop af
|
|
ret
|