Skip to content

Instantly share code, notes, and snippets.

@MrTost
Last active February 27, 2020 23:33
; ROM routines
define SCINIT $ff81 ; initialize/clear screen
define CHRIN $ffcf ; input character from keyboard
define CHROUT $ffd2 ; output character to screen
define SCREEN $ffed ; get screen size
define PLOT $fff0 ; get/set cursor coordinates
define X $f5
define Y $f6
define SCREEN_PTR $f7
define SCREEN_PTR_HI $f8
define save1 $10
jsr SCINIT
ldx #$00
ldy #$00
jmp print_form
cursor:
; delay the cursor so it can blink on high speed too
sec ; set PLOT to get mode (carry = 1)
jsr PLOT ; get the cursor position
eor #$80 ; reverse video
ldy #$00 ; clear y
sta (SCREEN_PTR),y ; save the changed char
rts ; return
handle_key:
cmp #$0d
beq handle_enter
jmp print
handle_enter:
ldy Y
cpy #$04 ; enter at the last line means all input is done
beq print_label
jmp print
print:
sec
jsr CHROUT ; print the char
jmp main
print_label:
ldx #$00
ldy #$06
clc ; set PLOT to set mode (carry = 0)
jsr PLOT ; set the cursor position
ldx #$00
ldy #$00
jmp print_label_loop
main:
sec ; set PLOT to get mode (carry = 1)
jsr PLOT ; get the cursor position
cpx #$0d ; limit 14 chars from left
bmi cursor_limit_x_min
cpx #$37 ; limit 40 chars of input
bpl cursor_limit_x_max
cpy #$05 ; limit the cursor to the form area
bpl cursor_limit_y_max
jsr cursor ; blink cursor - reverse video
jsr cursor ; blink curosr - reverse it back
jsr CHRIN ; load the typed key into A
bne handle_key ; if some key was pressed
jmp main
print_label_loop:
lda label,y
beq cursor_reset
jsr CHROUT
iny
bne print_label_loop
print_form:
lda form,y
beq cursor_reset
jsr CHROUT
iny
bne print_form
set_cursor:
clc ; set PLOT to set mode (carry = 0)
jsr PLOT ; set the cursor position
jmp main
cursor_limit_x_min:
ldx #$0d
jmp set_cursor
cursor_limit_x_max:
ldx #$36
jmp set_cursor
cursor_limit_y_max:
ldy #$04
jmp set_cursor
cursor_reset:
ldx #$0d
ldy #$00
jmp set_cursor
form:
dcb "U","s","e","r", 32,"N","a","m","e", 32, 32,":",32,13
dcb "A","d","d","r","e","s","s", 32, 32, 32, 32,":",32,13
dcb "C","i","t","y", 32, 32, 32, 32, 32, 32, 32,":",32,13
dcb "P","r","o","v","i","n","c","e", 32, 32, 32,":",32,13
dcb "P","o","s","t","a","l", 32,"C","o","d","e",":",32,00
label:
dcb "Y","o","u","r", 32
dcb "o","r","d","e","r", 32
dcb "w","i","l","l", 32,
dcb "b","e", 32
dcb "d","e","l","i","v","e","r","e","d", 32
dcb "t","o",":",13,13,00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment