chiark
/
gitweb
/
~mdw
/
zx-fizzbuzz
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fizzbuzz.s: Abstract out a number of system dependencies.
[zx-fizzbuzz]
/
fizzbuzz.s
diff --git
a/fizzbuzz.s
b/fizzbuzz.s
index 58d4928cdb7beac15e6a6c99e135f12168b1dba8..8521554d3bcfcc09fc98dd800e2707b4530dc87d 100644
(file)
--- a/
fizzbuzz.s
+++ b/
fizzbuzz.s
@@
-2,21
+2,6
@@
;;;
;;; Best not to ask why.
;;;
;;; 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
;; 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
call squish
call squish
- cp 0
+ and a
jr z, prfizz
cp 3
jr z, prfizz
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
;; 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.
jr nz, prnl
;; OK, so just print the value.
@@
-86,12
+71,12
@@
nobuzz: ld a, e
srl a
srl a
jr z, skiplz
srl a
srl a
jr z, skiplz
- or 0x30
-
rst
print_a
+ fixdig
+ print_a
skiplz: ld a, d
and 0x0f
skiplz: ld a, d
and 0x0f
- or 0x30
-
rst
print_a
+ fixdig
+ print_a
dec b
jr z, prnl
dec b
jr z, prnl
@@
-102,17
+87,17
@@
prdig: dec hl
srl a
srl a
srl a
srl a
srl a
srl a
- or 0x30
-
rst
print_a
+ fixdig
+ print_a
ld a, d
and 0x0f
ld a, d
and 0x0f
- or 0x30
-
rst
print_a
+ fixdig
+ print_a
djnz prdig
;; Print the newline.
djnz prdig
;; Print the newline.
-prnl: ld a,
' '
-
rst
print_a
+prnl: ld a,
spc
+ print_a
;; Increment the counter.
ld hl, buf
;; Increment the counter.
ld hl, buf
@@
-153,14
+138,13
@@
squish:
print:
;; Print the string at hl.
ld a, (hl)
print:
;; Print the string at hl.
ld a, (hl)
- cp 0
+ endstrp
ret z
ret z
-
rst
print_a
+ print_a
inc hl
jr print
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