summaryrefslogtreecommitdiff
path: root/test/input-3.s
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2020-05-29 22:38:34 -0400
committermrb0nk500 <b0nk@b0nk.xyz>2020-05-29 22:38:34 -0400
commit2f9d38f9f9d6f17bc274934b23915417012eeed8 (patch)
treeb72aff709261d5e22f026835191eec9b73a77ff5 /test/input-3.s
parent47cb4ad67be723a4df8e6ccd3cad6be79e3e7765 (diff)
Make JSL, JSR absolute, and remove RTL.
The reason for doing this was because JSL, and RTL are redundent, as they both do the same thing as JSR, and RTS.
Diffstat (limited to 'test/input-3.s')
-rw-r--r--test/input-3.s900
1 files changed, 0 insertions, 900 deletions
diff --git a/test/input-3.s b/test/input-3.s
deleted file mode 100644
index 35547a7..0000000
--- a/test/input-3.s
+++ /dev/null
@@ -1,900 +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 $4000
-cmd_buf:
-
-
-; Initalize some variables.
-.org $0
-scr_row:
- .byte $0
-scr_col:
- .byte $0
-scr_trow:
- .byte $0
-scr_tcol:
- .byte $0
-scr_ptr:
- .word $0
-a:
- .byte $0
-b:
- .byte $0
-c:
- .byte $0
-d:
- .byte $0
-e:
- .byte $0
-f:
- .byte $0
-string:
- .byte "Please, type something.\n"
-string2:
- .byte "You typed, "
-end:
- .byte $0
-bits:
- .byte $80
- .byte $40
- .byte $20
- .byte $10
- .byte $08
- .byte $04
- .byte $02
- .byte $01
-bitmask:
- .byte $0
-bitabl:
- .qword $0
- .qword $0
-scr_str:
-.byte $0
-scr_end:
-.byte $0
-wrapped:
-.byte $0
-
-; Pointers
-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 #23
- sta scr_end
- lda #0
- sta scr_str
- ldx #8
- sta.q bitabl
- sta.q bitabl, x
- tax
- jsl clr_buf
- jmp start
-clr_buf:
- lda #0
- cpy.w #$1FFF
- beq clr_buf_end
- sta (ptr), y
- iny
- jmp clr_buf
-clr_buf_end:
- ldy.w #0
- rtl
-
-start:
- lda #0
- tax
- sta $C000
- phy #2
- ldy.w #0
- jsl clr_cbuf
- ply #2
- jmp print
-
-clr_cbuf:
- cpy.w #$3FF
- beq clr_cbuf_end
- sta (cptr), y
- iny
- jmp clr_cbuf
-clr_cbuf_end:
- rtl
-
-pull_y:
- ply #2
-rset_a:
- lda #0
- sta $C000
- inc
-read:
- lda $C000 ; Get control register.
- beq rset_a ; Loop until we get a character.
- jsl getchar ; We got a key.
- beq parse ; We got a newline, so start parsing the line.
- jmp rset_a ; We didn't get a newline, so keep getting more characters.
-
-print:
- phy #2
- txy
- lda string, y ; Get character at offset x.
- beq pull_y ; Did we find a null terminator?
- ply #2
- inx
- jsl print_char
- jmp print
-
-getbit:
- clc
- lda scr_str
- bne getbt0
- ldx scr_row
- jmp getbt1
-getbt0:
- lda scr_row
- adc scr_str
- tax
-getbt1:
- jsl bitpos
- ldb bitabl, x
- aba
- cmp #1
- jmp bitout
-
-;putbit:
-; ldx scr_row
-;putbt1:
-; bcc setbit
-
-
-clrbit:
- jsl bitpos
- xor #$FF
- ldb bitabl, x
- aba
-bitsav:
- sta bitabl, x
-bitout:
- ldx bitmask
- rtl
-
-setbit:
- jsl bitpos
- ldb bitabl, x
- oab
- jmp bitsav
-
-bitpos:
- stx bitmask
- txa
- and #7
- tax
- lda bits, x
- pha #1
- lda bitmask
- lsr #3
- tax
- pla #1
- rtl
-
-
-getchar:
- lda $C002 ; Get typed character.
- ldb #0
- stb e
- pha #1
- phy #2
- cmp #10
- beq cmd_cpy
-getchar_pnt:
- ply #2
- pla #1
- ldb e
- bne reset_row
-getchar_pnt1:
- jsl print_char
- lda a
- cmp #10
- beq getchar_line
- jmp getchar_char
-reset_row:
- ldb e
- stb scr_row
- jmp getchar_pnt1
-
-
-cmd_cpy:
- ldb scr_row
- stb e
- jsl findst
- clc
- lda scr_row
- adc scr_str
- mul #80
- tay
- ldx.w #$0
-cmd_cpy_strt:
- lda (ptr), y
- beq getchar_pnt
- phy #2
- txy
- sta (cptr), y
- inx
- ply #2
- iny
- jmp cmd_cpy_strt
-getchar_line:
- lda #0
- jmp getchar_end
-getchar_char:
- lda #1
-getchar_end:
- rtl
-
-findst:
- jsl getbit
- bcc findst_done
- dec scr_row
- bpo findst
- inc scr_row
-findst_done:
- rtl
-
-parse:
- lda #0
- tax
- jsl dabbed
- beq start
- lda #0
- tax
- jmp result
-
-print_char:
- sta a
- cmp #$1B
- beq esc
- cmp #$A
- beq nl ; Did the user type a newline?
- cmp #$C
- beq clr_scr
- cmp #19
- beq en_step
- cmp #18
- beq dis_step
- cmp #8
- beq bs ; Did the user type a backspace?
- cmp #$7F
- beq bs ; Did the user type a backspace?
- sta a
-printc:
- lda a
- sta (ptr), y ; Store typed character into the input buffer.
- inc scr_col ; Increment the cursor's x coordinate.
- iny
-printc_2:
- ldb #1
- stb f
- ldb scr_col
- cpb #80
- bcs printc_4
-printc_3:
- sta $C001 ; Echo typed character.
- ldb f
- beq printc_wrap
- jmp printc_end
-printc_4:
- ldb scr_row
- cpb #23
- bcs printc_scrl
-printc_5:
- ldb #0
- stb f
- jmp printc_3
-printc_scrl:
- sta $C001 ; Echo typed character.
- clc
- lda #1
- sta wrapped
- jsl scrl_down
-printc_wrap:
- ldb #0
- stb scr_col
- ldb scr_row
- cpb #23
- bcs printc_wrap2
-printc_wrap1:
- inc scr_row
-printc_wrap2:
- phx #2
- clc
- lda scr_row
- adc scr_str
- tax
- jsl setbit
- plx #2
- jsl update_pos
-printc_end:
- rtl
-
-nl:
- lda #0
- sta (ptr), y ; Store said terminator into the input buffer.
- sta scr_col
- lda scr_row
- cmp #23
- bne nl_inc
- jsl scrl_down
- lda #10
- sta a
- jmp printc_end
-nl_inc:
- inc scr_row
- jsl update_pos
- lda #10
- sta a
- jmp printc_end
-
-clr_scr:
- lda #23
- sta scr_end
- lda #0
- sta scr_str
- ldx #8
- sta.q bitabl
- sta.q bitabl, x
- tay
- jsl clr_buf
- sta scr_col
- sta scr_row
- jsl update_pos
- lda #$C
- sta $C001
- jmp printc_end
-
-en_step:
- lda $C010
- beq step_en
- jmp stp_end
-step_en:
- lda #1
- sta $C010
- jmp stp_end
-
-dis_step:
- lda $C010
- bne step_dis
- jmp stp_end
-step_dis:
- lda #0
- sta $C010
-stp_end:
- jmp printc_end
-
-back:
- lda #$7F
- sta $C001
- dey ; Decrement buffer offset.
- lda #0 ; Put a null terminator, in place of the backspace.
- sta (ptr), y ; Place it into the input buffer.
- dec scr_col
- jsl update_pos
- jmp printc_end ; Get next character.
-
-bs:
- lda scr_col ; Are we at the start of the buffer?
- beq back_wrap
- jmp back ; We are not, so add the backspace to the buffer.
-back_wrap:
- jsl getbit
- bcs back_wrap1
- jmp printc_end
-back_wrap1:
- lda scr_row
- beq back_wrap2
- jmp backwrp
-back_wrap2:
- lda scr_str
- bne back_scrl
- jmp printc_end
-back_scrl:
- clc
- jsl scrl_up
- inc scr_row
-backwrp:
- clc
- lda scr_row
- adc scr_str
- tax
-backwrp2:
- dec scr_row
- jsl clrbit
- ldb #80
- stb scr_col
- jsl update_pos
- jmp back
-
-esc:
- lda $C000 ; Skip the '['.
- lda $C002
- cmp #$1B
- beq shftesc
- lda $C000 ; Get the next character.
- beq printc_end ; 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.
- lda #0
- sta d
- 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 printc_end ; Go back to getting user input.
-
-shftesc:
- lda $C000 ; Skip the '['.
- lda $C000 ; Get the next character.
- beq printc_end ; 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.
- lda #0
- sta d
- jsl isshftup ; Check if the user pressed shift+up.
- lda d
- bne shftesc_end
- jsl isshftdown ; Check if the user pressed shift+down.
-shftesc_end:
- lda #0
- sta d
- jmp printc_end ; Go back to getting user input.
-
-isup:
- lda c ; No, so load the escape code back into the accumulator.
- cmp #$41 ; Did the user press the up arrow key?
- bne isup_done ; Yes, so return.
- lda #1
- sta d
- lda scr_row ; Is the cursor at the top of the screen?
- beq isup_scrl ; Yes, so return.
-isup_2:
- 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.
- jmp isup_done
-isup_scrl:
- lda scr_str
- beq isup_done
- jsl scrl_up
-isup_done:
- rtl ; End of isup.
-
-isdown:
- lda c ; No, so load the escape code back into the accumulator.
- cmp #$42 ; Did the user press the down arrow key?
- bne isdown_done
- lda scr_row ; Start checking the y coordinate of the cursor.
- cmp #23 ; Is the cursor at the bottom of the screen?
- beq isdown_scrl ; 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.
- jmp isdown_done
-isdown_scrl:
- lda scr_row
- sta scr_trow
- lda scr_col
- sta scr_tcol
- jsl scrl_down
- lda scr_trow
- sta scr_row
- lda scr_tcol
- sta scr_col
-isdown_done:
- rtl ; End of isdown.
-
-isright:
- lda c ; No, so load the escape code back into the accumulator.
- cmp #$43 ; Did the user press the right arrow key?
- bne isright_done
- 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_wrp ; Yes, so check if this is a wrapped line.
- jmp right ; No, so move the cursor right, like normal.
-isright_wrp:
- inc scr_row
- jsl getbit
- bcs wrap_inc
- dec scr_row
- jmp isright_done
-isright_scrl:
- lda scr_str
- beq isright_end
- lda #1
- sta wrapped
- jsl scrl_down
- dec scr_row
- jmp isright_end
-wrap_inc:
- lda #0
- sta scr_col
- lda scr_row
- cmp #23
- bcs isright_scrl
-isright_end:
- jsl update_pos
-isright_done:
- lda #0
- sta wrapped
- rtl ; End of isright.
-
-isleft:
- lda c
- cmp #$43
- beq isleft_done
- lda scr_col ; Is the cursor at the far left of the screen?
- beq isleft_wrp ; Yes, so start checking if this is a wrapped line.
- 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.
- jmp isleft_done
-isleft_wrp:
- jsl getbit
- bcs wrap_dec
- jmp isleft_done
-wrap_dec:
- lda scr_row
- beq wrap_dec1
- lda #1
- sta wrapped
- dec scr_row
-wrap_dec1:
- lda #79
- sta scr_col
- lda #1
- sta d
- lda scr_row
- beq isleft_scrl
- jmp isleft_end
-isleft_scrl:
- lda wrapped
- bne isleft_end
- lda scr_str
- beq isleft_done
- jsl scrl_up
- jmp isleft_done
-isleft_end:
- jsl update_pos
-isleft_done:
- lda #0
- sta wrapped
- 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_done
-left:
- dec scr_col
- jsl update_pos
- lda #1
- sta d
- jmp isleft_done
-
-isshftup:
- lda c ; Load the escape code back into the accumulator.
- cmp #$41 ; Did the user press the up arrow key?
- bne isshftup_done
- lda #1
- sta d
- lda scr_str
- beq isshftup_done
- jmp shftup
-isshftup_done:
- rtl
-
-isshftdown:
- lda c ; Load the escape code back into the accumulator.
- cmp #$42 ; Did the user press the down arrow key?
- bne isshftdown_done
- lda #1
- sta d
- lda scr_end
- cmp #71
- bcs isshftdown_done
- jmp shftdown
-isshftdown_done:
- rtl
-
-shftup:
- jsl scrl_up
- lda #1
- sta d
- jmp isshftup_done
-
-shftdown:
- jsl scrl_down
- lda #1
- sta d
- jmp isshftdown_done
-
-update_pos:
- ldb #1
- stb f
- clc
- lda scr_row
- adc scr_str
- clc
- mul #80
- clc
- adc scr_col
- tay
- 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.
- clc
- adc #$30 ; Convert it to ascii, and
- sta $C001 ; print to the screen.
- tba ; Get the remainder.
- clc
- adc #$30 ; Convert it to ascii, and
- sta $C001 ; print to the screen.
- rtl ; End of getrow.
-
-scrl_down:
-
- inc scr_str
- inc scr_end
- lda #$1B ; Print an escape character
- sta $C001 ; to the screen.
- lda #$5B ; Print '['
- sta $C001 ; to the screen, and start the escape sequence.
- lda #$54 ; Print 'T'
- sta $C001 ; to the screen, and end the escape sequence.
- lda wrapped
- beq scrldn_save
-scrldn1:
- jsl rdrw_row
- lda wrapped
- beq scrldn_load
- jmp scrldn_end
-scrldn_save:
- lda scr_row
- pha #1
- lda scr_col
- pha #1
- jmp scrldn1
-scrldn_load:
- pla #1
- sta scr_col
- pla #1
- sta scr_row
- jsl update_pos
-scrldn_end:
- lda #0
- sta wrapped
-scrldn_done:
- rtl
-
-scrl_up:
- dec scr_str
- dec scr_end
- lda #$1B ; Print an escape character
- sta $C001 ; to the screen.
- lda #$5B ; Print '['
- sta $C001 ; to the screen, and start the escape sequence.
- lda #$53 ; Print 'S'
- sta $C001 ; to the screen, and end the escape sequence.
- lda scr_row
- pha #1
- lda scr_col
- pha #1
- lda #0
- sta scr_row
- jsl rdrw_row
- pla #1
- sta scr_col
- pla #1
- sta scr_row
- jsl update_pos
-scrlup_done:
- rtl
-
-rdrw_row:
- lda #0
- sta scr_col
- jsl update_pos
-rdrow_st:
- lda (ptr), y
- beq rdrow_inc
- sta $C001
-rdrow_inc:
- inc scr_col
- lda (ptr), y
- beq rdrow_skip
- iny
-rdrow_inc1:
- lda scr_col
- cmp #80
- bcs rdrow_end
- jmp rdrow_st
-rdrow_skip:
- jsl update_pos
- jmp rdrow_inc1
-rdrow_end:
- lda #0
- sta scr_col
- jsl update_pos
-rdrow_done:
- rtl
-
-
-;rdrw_scr:
-; lda #$C
-; sta $C001
-; lda scr_col
-; sta scr_tcol
-; lda scr_row
-; sta scr_trow
-; lda #0
-; sta scr_col
-; sta scr_row
-; phy #2
-; jsl update_pos
-; ply #2
-; ldx scr_ptr
-; phy #2
-; txy
-; lda (ptr), y
-; sta $C001
-; ply #2
-; rtl
-
-result:
- phy #2
- txy
- lda string2, y
- beq rset_y ; Reset y, if we hit the null terminator.
- ply #2
- jsl print_char ; Print 'You have typed, '
- inx
- jmp result ; Keep printing.
-
-rset_y:
- ply #2
- lda #0 ; Reset a.
- tax ; Reset y.
- jmp print_buf ; Print the input buffer.
-
-dabbed:
- phy #2
- txy
- lda (cptr), y ; Get a character from the input buffer.
- beq dab_pend ; Are we done with printing the buffer?
- cmp (tptr), y
- bcc dab_pend
- beq chk_str
- bcs dab_pend
-chk_str:
- ply #2
- inx
- cpx #3
- bne dabbed
- ldx #0
-pnt_msg:
- phy #2
- txy
- lda (mptr), y ; Get a character from the input buffer.
- beq dab_peqnd ; Are we done with printing the buffer?
- ply #2
- jsl print_char
- inx
- jmp pnt_msg ; Keep printing the buffer.
-dab_pend:
- ply #2
- lda #1
- jmp dab_end
-dab_peqnd:
- ply #2
- lda #0
- jmp dab_end
-dab_end:
- rtl
-
-print_buf:
- phy #2
- txy
- lda (cptr), y ; Get a character from the input buffer.
- beq cmd_clr ; Are we done with printing the buffer?
- ply #2
- jsl print_char
- inx
- jmp print_buf ; Keep printing the buffer.
-
-cmd_clr:
- ply #2
- lda #10
- jsl print_char
- jmp start
-
-.org $FFC0
-.qword reset
-
-.org $FF50
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-.qword spin
-done
-