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.s | 338 ----------------------------------------------------------- 1 file changed, 338 deletions(-) delete mode 100644 test/input.s (limited to 'test/input.s') diff --git a/test/input.s b/test/input.s deleted file mode 100644 index a8b0830..0000000 --- a/test/input.s +++ /dev/null @@ -1,338 +0,0 @@ -; Testing input. -; -; Writen in Sux assembly by -; mr b0nk 500 - - -; Input buffer. -.org $4000 -buffer: - -; 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 - -; Main program -.org $8000 -reset: - cps - ldx.w #$FFFF - txs - ldy #0 - lda #0 -clr_buf: - cpy.w #$FFF - beq start - sta (ptr), y - iny - jmp clr_buf - -start: - tax ; Reset x. - tay ; Reset y. - jmp print - -rset_a: - lda #1 - -read: - lda $C000 ; Get control register. - beq rset_a ; Loop until we get a character. - 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. - 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: - inc scr_row - lda #0 - sta scr_col - 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 - cmp #0 - bne esc_end - jsl isdown ; Check if the user pressed down. - lda d - cmp #0 - bne esc_end - lda #0 - jsl isleft ; Check if the user pressed left. - lda d - cmp #0 - 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 #$A - sta $C001 - inc scr_row - 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. - 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. - jmp print_buf ; Print the input buffer. - -print_buf: - ldx scr_col - cpx #79 - bne buf_print -linewrap3: - inc scr_row - ldx #0 - stx scr_col - jsl update_pos -buf_print: - 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. - iny - jmp print_buf ; Keep printing the buffer. - -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 -q - -- cgit v1.2.3-13-gbd6f