--- /dev/null
+PUTC: MACRO
+ ld a, \1
+ call putc
+ ENDM
+
+PUTS: MACRO
+ ld hl, \1
+ call puts
+ ENDM
+
+PUTSI: MACRO
+ push hl
+ call putsi
+ db \1, 0
+ pop hl
+ ENDM
+
+PUTSIL: MACRO
+ push hl
+ call putsi
+ db \1, 13, 10, 0
+ pop hl
+ ENDM
+
+PUTHEX: MACRO
+ ld a, \1
+ call puthex
+ ENDM
+
+ SECTION "serial", HOME
+
+putc:
+ push af
+.waitport:
+ ld a,[$FF53]
+ and $01
+ jr nz,.waitport
+ pop af
+ ld [$FF52],a
+ ret
+
+puts:
+ ld a, [hli]
+ cp $00
+ ret z
+ call putc
+ jr puts
+
+EX_SP_HL: MACRO
+ push de
+ di
+ add sp, 2
+ pop de
+ push hl
+ ld l, e
+ ld h, d
+ add sp, -2
+ ei
+ pop de
+ ENDM
+
+putsi:
+ pop hl
+ push af
+ push bc
+ push de
+.lp: ld a, [hli]
+ or a
+ jr z, .done
+ call putc
+ jr .lp
+.done: pop de
+ pop bc
+ pop af
+ push hl
+ ret
+
+puthex: ; Put two hex nibbles to the serial console.
+ push bc
+ push hl
+ push af
+ swap a
+ and $0F
+ ld hl,hex
+ ld b,0
+ ld c,a
+ add hl,bc
+ ld a, [hl]
+ call putc
+ pop af
+ and $0F
+ ld hl,hex
+ ld c,a
+ add hl,bc
+ ld a, [hl]
+ call putc
+ pop hl
+ pop bc
+ ret
+hex: db "0123456789ABCDEF"