summaryrefslogtreecommitdiff
path: root/test/input-2.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/input-2.s')
-rw-r--r--test/input-2.s412
1 files changed, 0 insertions, 412 deletions
diff --git a/test/input-2.s b/test/input-2.s
deleted file mode 100644
index f5cb49e..0000000
--- a/test/input-2.s
+++ /dev/null
@@ -1,412 +0,0 @@
-; Testing input.
-;
-; Writen in Sux assembly by
-; mr b0nk 500 <b0nk@b0nk.xyz>
-
-; Instruction mnemonics,
-; and opcodes.
-.org $1000
-tok:
- .byte "dab"
-msg:
- .byte "oof, you divided a, and b on me.\n"
-
-; Input buffer.
-.org $2000
-buffer:
-
-.org $2800
-cmd_buf:
-
-; Initalize some variables.
-.org $0
-scr_row:
- .byte $0
-scr_col:
- .byte $0
-a:
- .byte $0
-b:
- .byte $0
-c:
- .byte $0
-d:
- .byte $0
-e:
- .byte $0
-string:
- .byte "Please, type something.\n"
-string2:
- .byte "You typed, "
-end:
- .byte $0
-
-; String Pointer
-ptr:
- .qword buffer
-cptr:
- .qword cmd_buf
-tptr:
- .qword tok
-mptr:
- .qword msg
-
-
-; Main program
-.org $8000
-reset:
- cps
- ldx.w #$FFFF
- txs
- ldy #0
- lda #0
-clr_buf:
- cpy.w #$7FF
- beq start
- sta (ptr), y
- iny
- jmp clr_buf
-
-start:
- lda #0
- sta $C000
- tax ; Reset x.
- tay ; Reset y.
- jsl clr_cbuf
- jmp print
-
-clr_cbuf:
- cpy.w #$3FF
- beq clr_cbuf_end
- sta (cptr), y
- iny
- jmp clr_cbuf
-clr_cbuf_end:
- ldy #0
- rtl
-
-rset_a:
- lda #1
-read:
- lda $C000 ; Get control register.
- beq rset_a ; Loop until we get a character.
- 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.
- beq rset_a ; Did we find a null terminator?
- sta $C001 ; Print character.
- inx ; Increment offset.
- cmp #$A
- beq inc_row
- inc scr_col
- jmp print
-inc_row:
- lda #0
- sta scr_col
- lda #$42
- sta c
- jsl isdown
- jmp print ; Keep printing more characters.
-
-getchar:
- lda $C002 ; Get typed character.
- cmp #$1B
- beq esc
- cmp #$A
- beq nl ; Did the user type a newline?
- 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 #79
- bne echo_print
-linewrap:
- inc scr_row
- ldx #0
- stx scr_col
- lda scr_row
- jsl update_pos
-echo_print:
- lda a
- sta $C001 ; Echo typed character.
- inc scr_col ; Increment the cursor's x coordinate.
- sta (ptr), y ; Store typed character into the input buffer.
- iny
- jmp rset_a ; Start getting user input.
-
-esc:
- lda $C000 ; Skip the '['.
- lda $C000 ; Get the next character.
- 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.
- jsl isup ; Check if the user pressed up.
- lda d
- bne esc_end
- jsl isdown ; Check if the user pressed down.
- lda d
- bne esc_end
- lda #0
- jsl isleft ; Check if the user pressed left.
- lda d
- bne esc_end
- jsl isright ; Check if the user pressed right.
-esc_end:
- lda #0
- sta d
- jmp rset_a ; Go back to getting user input.
-
-isup:
- lda scr_row ; Is the cursor at the top of the screen?
- beq isup_done ; Yes, so return.
- lda c ; No, so load the escape code back into the accumulator.
- cmp #$41 ; Did the user press the up arrow key?
- beq up ; Yes, so move the cursor up.
-isup_done:
- rtl ; End of isup.
-
-isdown:
- lda scr_row ; Start checking the y coordinate of the cursor.
- 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:
- rtl ; End of isdown.
-
-isright:
- lda scr_col ; Start checking the x coordinate of the cursor.
- 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:
- rtl ; End of isright.
-
-isleft:
- lda scr_col ; Is the cursor at the far left of the screen?
- beq isleft_done ; Yes, so return.
- lda c ; No, so load the escape code back into the accumulator.
- cmp #$44 ; Did the user press the left arrow key?
- beq left ; Yes, so move the cursor left.
-isleft_done:
- rtl ; End of isleft.
-
-up:
- dec scr_row
- jsl update_pos
- lda #1
- sta d
- jmp isup_done
-down:
- inc scr_row
- jsl update_pos
- lda #1
- sta d
- jmp isdown_done
-right:
- inc scr_col
- jsl update_pos
- jmp isright_end
-left:
- dec scr_col
- jsl update_pos
- lda #1
- sta d
- jmp isleft_done
-
-update_pos:
- lda #$1B ; Print an escape character
- sta $C001 ; to the screen.
- lda #$5B ; Print '['
- sta $C001 ; to the screen, and start the escape sequence.
- 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.
- rtl ; End of update_pos.
-getrow:
- lda scr_row ; Get the cursor's y coordinate.
- 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.
- rtl ; End of getrow.
-getcol:
- lda #$3B ; Print ';'
- sta $C001 ; to the screen.
- lda scr_col ; Get the cursor's x coordinate.
- 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.
- rtl ; End of getrow.
-
-nl:
- lda #0
- sta scr_col
- sta (ptr), y ; Store said terminator into the input buffer.
- lda #$42
- sta c
- jsl isdown
- ldy.w #0 ; Reset y, to print the result.
- jsl dabbed
- beq start
- ldy #0
- jmp result
-
-back:
- sta $C001 ; Print backspace.
- 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?
- 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 #79
- bne result_print
-linewrap2:
- inc scr_row
- ldx #$0
- stx scr_col
- jsl update_pos
-result_print:
- lda string2, y
- beq rset_y ; Reset y, if we hit the null terminator.
- sta $C001 ; Print 'You have typed, '
- inc scr_col ; Increment the cursor's x coordinate.
- iny ; Increment offset.
- jmp result ; Keep printing.
-
-rset_y:
- ldy.w #0 ; Reset y.
- ldx.w #0 ; Reset x.
- lda.w #0 ; Reset a.
- jmp print_buf ; Print the input buffer.
-dabbed:
- lda (ptr), y ; Get a character from the input buffer.
- beq dab_nend ; Are we done with printing the buffer?
- cmp (tptr), y
- bcs dab_nend
- beq chk_str
- bcc dab_nend
-chk_str:
- iny
- cpy #3
- bne dabbed
- ldy #0
-pnt_msg:
- ldx scr_col
- cpx #79
- bne msg_pnt
-linewrap3:
- inc scr_row
- ldx #0
- stx scr_col
- jsl update_pos
-msg_pnt:
- lda (mptr), y ; Get a character from the input buffer.
- beq dab_eqnd ; Are we done with printing the buffer?
- sta $C001 ; Print said character.
- inc scr_col ; Increment the cursor's x coordinate.
- iny
- jmp pnt_msg ; Keep printing the buffer.
-dab_nend:
- lda #1
- jmp dab_end
-dab_eqnd:
- lda #0
- jmp dab_end
-dab_end:
- rtl
-
-
-
-print_buf:
- ldx scr_col
- cpx #79
- bne buf_print
-linewrap4:
- inc scr_row
- ldx #0
- stx scr_col
- jsl update_pos
-buf_print:
- lda (ptr), y ; Get a character from the input buffer.
- beq cmd_clr ; Are we done with printing the buffer?
- sta $C001 ; Print said character.
- inc scr_col ; Increment the cursor's x coordinate.
- iny
- jmp print_buf ; Keep printing the buffer.
-
-cmd_clr:
- lda #0
- sta scr_col
- lda #$42
- sta c
- jsl isdown
- jmp start
-
-scr_to_buf:
- tax
- mul #80
- adc scr_col
- tay
- txa
- rtl
-
-spin:
- nop
- nop
- 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
-
-.org $FF50
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.org $FF50
-v
-done
-