implement screen clear routines

This commit is contained in:
Paul Gardner-Stephen committed 2019-04-19 20:42:39 +09:30
1 parent 3ff2419189
commit 6bd5778db2
4 files changed
+48 -4

No files matched your search

+2 -2
View File
@@ -33,10 +33,10 @@
.alias cursor_is_visible $CF
.alias input_source $D0
.alias current_screen_line_ptr $D1
.alias current_screen_line_logical_column $D3
.alias current_screen_x $D3
.alias quote_mode_flag $D4
.alias max_logical_line_length $D5
.alias cursor_physical_screen_line $D6
.alias current_screen_y $D6
.alias last_printed_character_ascii $D7
.alias insert_mode $D8
; Bits 0 -3 = bits 8-11 of screen line address
+3 -2
View File
@@ -56,5 +56,6 @@ clearscreen_l3:
sta $db00-24,y ; so we only erase 1000 bytes
iny
bne clearscreen_l3
rts
;; (Compute's Mapping the 64 p216)
jmp home_cursor
+10
View File
@@ -0,0 +1,10 @@
;; Home the cursor
;; (Compute's Mapping the 64 p216)
home_cursor:
lda #$00
sta current_screen_x
sta current_screen_y
jmp set_pointer_to_current_screen_line
@@ -0,0 +1,33 @@
;; Put the address of the screen current line
;; into the pointer at $D1 (current_screen_line_ptr).
;; It must take into account the screen line link table
;; (Compute's Mapping the 64 p216)
set_pointer_to_current_screen_line:
;; Get pointer to start of the screen
lda hibase
sta current_screen_line_ptr+1
lda #$00
sta current_screen_line_ptr+0
;; Now advance for the number of lines
ldx current_screen_y
sptcsl_l2:
;; XXX - Should we read the columns per line from
;; somewhere?
lda #<40
;; Double line length if line is linked
bit screen_line_link_table,x
bpl sptcsl_l1
asl
sptcsl_l1:
clc
adc current_screen_line_ptr+0
lda current_screen_line_ptr+1
adc #>40
sta current_screen_line_ptr+1
dex
bpl sptcsl_l2
rts