chiark / gitweb /
fizzbuzz.s: Abstract out a number of system dependencies.
[zx-fizzbuzz] / fizzbuzz.s
index 58d4928cdb7beac15e6a6c99e135f12168b1dba8..8521554d3bcfcc09fc98dd800e2707b4530dc87d 100644 (file)
@@ -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