From 2f9d38f9f9d6f17bc274934b23915417012eeed8 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Fri, 29 May 2020 22:38:34 -0400 Subject: 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. --- test/input-2.s | 412 --------------------------------------------------------- 1 file changed, 412 deletions(-) delete mode 100644 test/input-2.s (limited to 'test/input-2.s') 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 - -; 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 - -- cgit v1.2.3-13-gbd6f