X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/zx-fizzbuzz/blobdiff_plain/79f866505582c4e8e6e7ead838bdb7bdc3c31396..64b6fca5f33b619e9c38778000f5192521a57cf6:/fizzbuzz.s diff --git a/fizzbuzz.s b/fizzbuzz.s index 58d4928..8521554 100644 --- a/fizzbuzz.s +++ b/fizzbuzz.s @@ -2,21 +2,6 @@ ;;; ;;; 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 @@ -42,7 +27,7 @@ mod3_1: djnz mod3 call squish call squish - cp 0 + and a jr z, prfizz cp 3 jr z, prfizz @@ -68,7 +53,7 @@ prbuzz: ld hl, buzz ;; 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. @@ -86,12 +71,12 @@ nobuzz: ld a, e 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 @@ -102,17 +87,17 @@ prdig: dec hl 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 @@ -153,14 +138,13 @@ squish: 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