Maybe you can see where this is going.
CLEANFILES = $(TARGETS)
CLEANFILES += spectrum-fb.img
-spectrum-fb.img: fizzbuzz.s
+spectrum-fb.img: spectrum.s fizzbuzz.s
z80asm -o $@ $^
TARGETS += spectrum-fizzbuzz.tap
;;;
;;; Best not to ask why.
- org 0xf000
-
-print_a: equ 0x10
-tvflag: equ 0x5c3c
-
-entry:
- ;; Initialize the buffer.
- ld a, 1
- ld (buf), a
- ld (len), a
-
- ;; Use the main screen.
- xor a
- ld (tvflag), a
-
;; Look at the buffer and decide what to do.
again: ld e, 0
call squish
call squish
- cp 0
+ and a
jr z, prfizz
cp 3
jr z, prfizz
;; Not a multiple of five. Skip ahead if it was a multiple of three.
nobuzz: ld a, e
- cp 0
+ and a
jr nz, prnl
;; OK, so just print the value.
srl a
srl a
jr z, skiplz
- or 0x30
- rst print_a
+ fixdig
+ print_a
skiplz: ld a, d
and 0x0f
- or 0x30
- rst print_a
+ fixdig
+ print_a
dec b
jr z, prnl
srl a
srl a
srl a
- or 0x30
- rst print_a
+ fixdig
+ print_a
ld a, d
and 0x0f
- or 0x30
- rst print_a
+ fixdig
+ print_a
djnz prdig
;; Print the newline.
-prnl: ld a, ' '
- rst print_a
+prnl: ld a, spc
+ print_a
;; Increment the counter.
ld hl, buf
print:
;; Print the string at hl.
ld a, (hl)
- cp 0
+ endstrp
ret z
- rst print_a
+ print_a
inc hl
jr print
-fizz: defb "fizz", 0
-buzz: defb "buzz", 0
-
-len: defb 0
-buf: defs 256
+ ;; Initial state. The buffer notionally continues for another 254
+ ;; bytes, but there's no point in including them in the image.
+len: db 1
+buf: db 1
--- /dev/null
+;;; -*-asm-*-
+
+ org 0x7000
+
+spc: equ ' '
+
+tvflag: equ 0x5c3c
+
+fixdig: macro
+ or 0x30
+ endm
+
+print_a: macro
+ rst 0x10
+ endm
+
+endstrp: macro
+ and a
+ endm
+
+ jr setup
+
+fizz: db "fizz", 0
+buzz: db "buzz", 0
+
+setup:
+ ;; Use the main screen.
+ xor a
+ ld (tvflag), a