.export init .feature c_comments numL := $02 ; low byte of a 16-bit number numH := $03 ; low byte of a 16-bit number key_buf_len := $c6 key_buf := $0277 CHROUT := $ffd2 ; initialisation: clear screen and set num to point to screen mem start init: ; clear screen lda #$93 jsr CHROUT ldy #$00 lda #$04 sta numH lda #$00 sta numL jmp loop ; main loop loop: jsr key_wait lda key_buf cmp #$1d ; right arrow beq if_right cmp #$9d ; left arrow beq if_left cmp #$2d ; reset if - pressed beq if_reset cmp #$20 ; fill cell if space pressed beq if_space cmp #$30 ; end program if 0 pressed bne loop jmp end if_right: jsr inc_num jmp loop if_left: jsr dec_num jmp loop if_reset: lda #$04 sta numH lda #$00 sta numL jmp loop if_space: ldx #$00 lda (numL,x) cmp #$a0 beq if_cell_filled jmp if_cell_empty if_cell_filled: lda #$20 jsr print_byte jmp loop if_cell_empty: lda #$a0 jsr print_byte jmp loop ; loops until keyboard buffer has any number of characters in it key_wait: pha 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 ; print byte in A at location in num print_byte: ; init: store original A in X and push Y to stack tax tya pha txa ldy #$00 sta (numL),y ; deinit: pull Y from stack and transfer original A from X to A pla tay txa rts ; adds A to num (16 bit) (NOT WORKING) ; destroys: X a16b: pha tsx lda numL adc $0100,x sta numL bcs a16b_carry jmp a16b_end a16b_carry: inc numH a16b_end: clc 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