; Testing input. ; ; Writen in Sux assembly by ; mr b0nk 500 ; Initalize some variables. .org $1000 string: .byte "Please, type something.\n" string2: .byte "You typed, " end: .byte $0 ; Input buffer. .org $2000 buffer: ; Main program .org $8000 reset: cps ldx.w #$FFFF txs ldy #$0 clr_buf: lda #$0 cpy.w #$400 beq start sta buffer, y iny jmp clr_buf start: ldx.w #$0 ; Reset x. ldy #$0 ; 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? read: nop ; Sleep until we get a character. lda $C000 ; Get control register. beq rset_a ; Loop until we get a character. lda #$0 sta $C000 jmp getchar ; We got a key. 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. jmp print ; Keep printing more characters. getchar: lda $C002 ; Get typed character. cmp #$A beq nl ; Did the user type a newline? cmp #$8 beq bs ; Did the user type a backspace? echo: sta $C001 ; Echo typed character. sta buffer, y ; Store typed character into the input buffer. iny ; Increment buffer offset. nop jmp rset_a ; We are not, so add the backspace to the buffer. nl: sta $C001 lda #$0 ; Replace newline with a null terminator. sta buffer, y ; Store said terminator into the input buffer. ldy.w #$0 ; Reset y, to print the result. jmp result bs: cpy #$0 beq return ; Are we at the start of the buffer? jmp echo ; We are not, so add the backspace to the buffer. result: lda string2, y beq rset_y ; Reset y, if we hit the null terminator. sta $C001 ; Print 'You have typed, ' iny ; Increment offset. jmp result ; Keep printing. rset_y: ldy.w #$0 jmp print_buf ; Print the input buffer. print_buf: lda buffer, y ; Get a character from the input buffer. beq fin ; Are we done with printing the buffer? sta $C001 ; Print said character. iny jmp print_buf ; Keep printing the buffer. fin: lda #$A ; Load a newline. sta $C001 ; Print the newline. lda #$1 ; Tell the program that we are done. sta end ; We are done. jmp sleep spin: nop nop nop jmp spin .org $FFC0 .qword reset .org $FF50 .qword spin .qword spin .qword spin .qword spin .qword spin .qword spin .qword spin .org $FFA0 .qword irq_routine ;.org $0 ;viewmem ;.org $100 ;viewmem ;q done