summaryrefslogtreecommitdiff
path: root/life.asm
diff options
context:
space:
mode:
Diffstat (limited to 'life.asm')
-rw-r--r--life.asm71
1 files changed, 55 insertions, 16 deletions
diff --git a/life.asm b/life.asm
index d04fe7f..b8e9fd0 100644
--- a/life.asm
+++ b/life.asm
@@ -1,4 +1,5 @@
.export init
+.feature c_comments
numL := $02 ; low byte of a 16-bit number
numH := $03 ; low byte of a 16-bit number
@@ -17,26 +18,38 @@ init:
; main loop
loop:
- ; clear keyboard buffer; otherwise program will always think a key is pressed
- lda #$00
- sta key_buf_len
-
jsr key_wait
lda key_buf
+
+ cmp #$1d ; right arrow
+ beq if_right
+
+ cmp #$9d ; left arrow
+ beq if_left
+ jmp else_left
+if_left:
+ jsr dec_num
+ jmp loop
+else_left:
+
jsr print_byte
+if_right:
+ jsr inc_num
- ;pha
- ;lda #1
- ;jsr a16b
- ;pla
+ cmp #$2d ; reset if - pressed
+ beq if_reset
+ jmp else_reset
+if_reset:
+ pha
+ lda #$04
+ sta numH
+ lda #$00
+ sta numL
+ pla
+ jmp loop
- inc numL
- beq inc_H
- jmp dinc_H
- inc_H:
- inc numH
-dinc_H:
- cmp #$30
+else_reset:
+ cmp #$30 ; end program if 0 pressed
bne loop
jmp end
@@ -48,6 +61,9 @@ key_wait_loop:
lda key_buf_len ; shows how many keys are in key buffer
cmp #$00
beq key_wait_loop
+
+ lda #$00
+ sta key_buf_len
pla
rts
@@ -89,7 +105,7 @@ print_byte:
txa
ldy #$00
- sbc #$40 ; convert (very vaguely) to c64 screen codes
+ sbc #$3f ; convert (very vaguely) to c64 screen codes
sta (numL),y
; deinit: pull Y from stack and transfer original A from X to A
@@ -115,5 +131,28 @@ a16b:
pla
rts
+inc_num:
+ inc numL
+ beq inc_H
+ rts
+inc_H:
+ inc numH
+ rts
+
+dec_num:
+ pha
+
+ dec numL
+ lda numL
+ cmp #$ff
+ beq dec_H
+ pla
+ rts
+
+dec_H:
+ dec numH
+ pla
+ rts
+
end:
brk