diff options
| -rw-r--r-- | life.asm | 71 |
1 files changed, 55 insertions, 16 deletions
@@ -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 |
