summaryrefslogtreecommitdiff
path: root/test/input.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/input.s')
-rw-r--r--test/input.s195
1 files changed, 93 insertions, 102 deletions
diff --git a/test/input.s b/test/input.s
index 20ab3d1..a8b0830 100644
--- a/test/input.s
+++ b/test/input.s
@@ -4,22 +4,26 @@
; mr b0nk 500 <b0nk@b0nk.xyz>
+; Input buffer.
+.org $4000
+buffer:
+
; Initalize some variables.
-.org $1000
+.org $0
scr_row:
.byte $0
scr_col:
.byte $0
a:
- .word $0
+ .byte $0
b:
- .word $0
+ .byte $0
c:
- .word $0
+ .byte $0
d:
- .word $0
+ .byte $0
e:
- .word $0
+ .byte $0
string:
.byte "Please, type something.\n"
string2:
@@ -27,9 +31,9 @@ string2:
end:
.byte $0
-; Input buffer.
-.org $0000
-buffer:
+; String Pointer
+ptr:
+ .qword buffer
; Main program
.org $8000
@@ -37,35 +41,32 @@ reset:
cps
ldx.w #$FFFF
txs
- ldy #$0
+ ldy #0
+ lda #0
clr_buf:
- lda #$0
- cpy.w #$1000
+ cpy.w #$FFF
beq start
- sta buffer, y
+ sta (ptr), y
iny
jmp clr_buf
start:
- ldx.w #$0 ; Reset x.
- ldy.w #$0 ; Reset y.
+ tax ; Reset x.
+ tay ; Reset y.
jmp print
rset_a:
- lda #$10
-delay:
- beq read
- dec
- jmp delay
-sleep:
- lda end
- bne spin ; Are we done with getting input?
+ lda #1
+
read:
lda $C000 ; Get control register.
beq rset_a ; Loop until we get a character.
- lda #$0
+ lda #0
sta $C000
jmp getchar ; We got a key.
+sleep:
+ lda end
+ bne spin ; Are we done with getting input?
print:
lda string, x ; Get character at offset x.
@@ -78,7 +79,7 @@ print:
jmp print
inc_row:
inc scr_row
- lda #$0
+ lda #0
sta scr_col
jmp print ; Keep printing more characters.
@@ -88,26 +89,26 @@ getchar:
beq esc
cmp #$A
beq nl ; Did the user type a newline?
- cmp #$8
+ cmp #8
beq bs ; Did the user type a backspace?
cmp #$7F
beq bs ; Did the user type a backspace?
echo:
sta a
ldx scr_col
- cpx #$4F
+ cpx #79
bne echo_print
linewrap:
inc scr_row
- ldx #$0
+ ldx #0
stx scr_col
lda scr_row
- jsr update_pos
+ jsl update_pos
echo_print:
lda a
sta $C001 ; Echo typed character.
inc scr_col ; Increment the cursor's x coordinate.
- sta buffer, y ; Store typed character into the input buffer.
+ sta (ptr), y ; Store typed character into the input buffer.
iny
jmp rset_a ; Start getting user input.
@@ -117,22 +118,22 @@ esc:
beq read ; We have an error, so discard it, and go back to getting user input.
lda $C002 ; Get the escape code.
sta c ; Store the escape code, until we need it.
- jsr isup ; Check if the user pressed up.
+ jsl isup ; Check if the user pressed up.
lda d
- cmp #$0
+ cmp #0
bne esc_end
- jsr isdown ; Check if the user pressed down.
+ jsl isdown ; Check if the user pressed down.
lda d
- cmp #$0
+ cmp #0
bne esc_end
- lda #$0
- jsr isleft ; Check if the user pressed left.
+ lda #0
+ jsl isleft ; Check if the user pressed left.
lda d
- cmp #$0
+ cmp #0
bne esc_end
- jsr isright ; Check if the user pressed right.
+ jsl isright ; Check if the user pressed right.
esc_end:
- lda #$0
+ lda #0
sta d
jmp rset_a ; Go back to getting user input.
@@ -143,27 +144,27 @@ isup:
cmp #$41 ; Did the user press the up arrow key?
beq up ; Yes, so move the cursor up.
isup_done:
- rts ; End of isup.
+ rtl ; End of isup.
isdown:
lda scr_row ; Start checking the y coordinate of the cursor.
- cmp #$17 ; Is the cursor at the bottom of the screen?
+ cmp #23 ; Is the cursor at the bottom of the screen?
beq isdown_done ; Yes, so return.
lda c ; No, so load the escape code back into the accumulator.
cmp #$42 ; Did the user press the down arrow key?
beq down ; Yes, so move the cursor down.
isdown_done:
- rts ; End of isdown.
+ rtl ; End of isdown.
isright:
lda scr_col ; Start checking the x coordinate of the cursor.
- cmp #$4F ; Is the cursor at the far right of the screen?
+ cmp #79 ; Is the cursor at the far right of the screen?
beq isright_end ; Yes, so return.
lda c ; No, so load the escape code back into the accumulator.
cmp #$43 ; Did the user press the right arrow key?
beq right ; Yes, so move the cursor right.
isright_end:
- rts ; End of isright.
+ rtl ; End of isright.
isleft:
lda scr_col ; Is the cursor at the far left of the screen?
@@ -172,36 +173,28 @@ isleft:
cmp #$44 ; Did the user press the left arrow key?
beq left ; Yes, so move the cursor left.
isleft_done:
- rts ; End of isleft.
+ rtl ; End of isleft.
up:
dec scr_row
- lda #$0
- sta e
- jsr update_pos
- lda #$1
+ jsl update_pos
+ lda #1
sta d
jmp isup_done
down:
inc scr_row
- lda #$1
- sta e
- jsr update_pos
- lda #$1
+ jsl update_pos
+ lda #1
sta d
jmp isdown_done
right:
inc scr_col
- lda #$2
- sta e
- jsr update_pos
+ jsl update_pos
jmp isright_end
left:
dec scr_col
- lda #$3
- sta e
- jsr update_pos
- lda #$1
+ jsl update_pos
+ lda #1
sta d
jmp isleft_done
@@ -210,74 +203,65 @@ update_pos:
sta $C001 ; to the screen.
lda #$5B ; Print '['
sta $C001 ; to the screen, and start the escape sequence.
- jsr getrow ; Start printing the row number to the screen.
- jsr getcol ; Start printing the column number to the screen.
+ jsl getrow ; Start printing the row number to the screen.
+ jsl getcol ; Start printing the column number to the screen.
lda #$48 ; Print 'H'
sta $C001 ; to the screen.
- rts ; End of update_pos.
+ rtl ; End of update_pos.
getrow:
lda scr_row ; Get the cursor's y coordinate.
- div #$A ; Divide A by 10.
+ div #10 ; Divide A by 10.
adc #$30 ; Convert it to ascii, and
sta $C001 ; print to the screen.
tba ; Get the remainder.
adc #$30 ; Convert it to ascii, and
sta $C001 ; print to the screen.
- rts ; End of getrow.
+ rtl ; End of getrow.
getcol:
lda #$3B ; Print ';'
sta $C001 ; to the screen.
lda scr_col ; Get the cursor's x coordinate.
- div #$A ; Divide A by 10.
+ div #10 ; Divide A by 10.
adc #$30 ; Convert it to ascii, and
sta $C001 ; print to the screen.
tba ; Get the remainder.
adc #$30 ; Convert it to ascii, and
sta $C001 ; print to the screen.
- rts ; End of getrow.
+ rtl ; End of getrow.
-uint_to_bcd:
- div #$A ; Divide A by 10.
- lsl #$4 ; Shift the result left by 4 bits.
- sta a ; Store the result for later.
- tba ; Get the remainder.
- sta b ; Store the remainder for later.
- lda a ; Get the result.
- ora b ; Or the result, with the remainder.
- rts ; We've converted the value to BCD, so return.
nl:
lda #$A
sta $C001
inc scr_row
- lda #$0 ; Replace newline with a null terminator.
- sta buffer, y ; Store said terminator into the input buffer.
+ lda #0 ; Replace newline with a null terminator.
+ sta (ptr), y ; Store said terminator into the input buffer.
sta scr_col
- ldy.w #$0 ; Reset y, to print the result.
+ ldy.w #0 ; Reset y, to print the result.
jmp result
back:
sta $C001 ; Print backspace.
- lda #$0 ; Put a null terminator, in place of the backspace.
- sta buffer, y ; Place it into the input buffer.
+ lda #0 ; Put a null terminator, in place of the backspace.
+ sta (ptr), y ; Place it into the input buffer.
dey ; Decrement buffer offset.
dec scr_col
jmp read ; Get next character.
bs:
- cpy #$0 ; Are we at the start of the buffer?
+ cpy #0 ; Are we at the start of the buffer?
beq rset_a ; We are, so do not store the backspace into the buffer.
jmp back ; We are not, so add the backspace to the buffer.
result:
ldx scr_col
- cpx #$4F
+ cpx #79
bne result_print
linewrap2:
inc scr_row
ldx #$0
stx scr_col
- jsr update_pos
+ jsl update_pos
result_print:
lda string2, y
beq rset_y ; Reset y, if we hit the null terminator.
@@ -288,20 +272,20 @@ result_print:
rset_y:
- ldy.w #$0 ; Reset y.
+ ldy.w #0 ; Reset y.
jmp print_buf ; Print the input buffer.
print_buf:
ldx scr_col
- cpx #$4F
+ cpx #79
bne buf_print
linewrap3:
inc scr_row
- ldx #$0
+ ldx #0
stx scr_col
- jsr update_pos
+ jsl update_pos
buf_print:
- lda buffer, y ; Get a character from the input buffer.
+ lda (ptr), y ; Get a character from the input buffer.
beq spin ; Are we done with printing the buffer?
sta $C001 ; Print said character.
inc scr_col ; Increment the cursor's x coordinate.
@@ -310,11 +294,11 @@ buf_print:
scr_to_buf:
tax
- mul #$50
+ mul #80
adc scr_col
tay
txa
- rts
+ rtl
spin:
nop
@@ -322,6 +306,20 @@ spin:
nop
jmp spin
+.org $1000
+v
+.org $1100
+v
+.org $1200
+v
+.org $8000
+v
+.org $8100
+v
+.org $8200
+v
+.org $8300
+v
.org $FFC0
.qword reset
@@ -333,15 +331,8 @@ spin:
.qword spin
.qword spin
.qword spin
-
-.org $FFA0
-.qword irq_routine
-;.org $8000
-;viewmem
-;.org $8100
-;viewmem
-;.org $8200
-;viewmem
-;q
-done
+.org $FF50
+v
+;done
+q