X-Git-Url: https://git.distorted.org.uk/~mdw/zx-fizzbuzz/blobdiff_plain/a221d644f4371212a32875ed05fa6dfafb31e51e..b4fd018059713a9efdaa72f9017a8d87b7dc7325:/fizzbuzz.s?ds=sidebyside diff --git a/fizzbuzz.s b/fizzbuzz.s index 58d4928..76242ef 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,14 +53,12 @@ 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. - ld a, (len) - ld b, 0 - ld c, a ld hl, buf - 1 + ld bc, (len) add hl, bc ld b, c @@ -86,12 +69,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 +85,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 @@ -128,14 +111,9 @@ incr: ld a, (hl) djnz incr ;; Carry out. - ld a, (len) - ld b, 0 - ld c, a - ld hl, buf - add hl, bc ld (hl), 1 - inc a - ld (len), a + ld hl, len + inc (hl) jp again squish: @@ -153,14 +131,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, 0 +buf: db 1