VIC-IV cursor is now complete

This commit is contained in:
FeralChild64 committed 2020-08-23 23:39:17 +02:00
1 parent 7527c7a220
commit 642958cddc
10 files changed
+108 -95

No files matched your search

+3
View File
@@ -36,6 +36,9 @@
.label m65_scrtab_txtwidth = KERNAL_0.m65_scrtab_txtwidth
.label m65_scrtab_txtheight = KERNAL_0.m65_scrtab_txtheight
.label cursor_undraw_cont = KERNAL_0.cursor_undraw_cont
.label cursor_timer_reset = KERNAL_0.cursor_timer_reset
.label cursor_show_if_enabled = KERNAL_0.cursor_show_if_enabled
#if CONFIG_IEC
+9 -4
View File
@@ -48,7 +48,7 @@ cursor_draw:
lda #1
sta BLNON
bne cursor_blink_timer_reset // branches always
bne cursor_timer_reset // branches always
// XXX code below is probably not 100% safe
@@ -66,9 +66,9 @@ cursor_hide_if_visible:
lda #$FF
sta BLNCT
// If cursor is not visible, nothing to do
// If cursor is not visible, not much to do
lda BLNON
beq cursor_blink_timer_reset
beq cursor_timer_reset
// FALLTROUGH
@@ -80,12 +80,17 @@ cursor_undraw:
lda GDCOL
sta (USER),y
// FALLTROUGH
cursor_undraw_cont: // entry point used by MEGA65 screen editor
// Mark cursor as not drawn
lda #0
sta BLNON
// FALLTROUGH
cursor_blink_timer_reset:
cursor_timer_reset:
// Rest blink counter (Mapping the 64, p39-40)
lda #20
+6 -13
View File
@@ -14,28 +14,21 @@
cursor_show_if_enabled:
lda BLNSW
bne cursor_show_end
bne !+
lda BLNON
bne cursor_show_end
bne !+
// FALLTROUGH
cursor_show:
// Set cursor as though it had just finished the off phase,
// so that the call to cursor_blink paints it
lda #$00
sta BLNCT
sta BLNON
jsr cursor_blink
// Set the cursor so that it is going to be repainted by the next IRQ
// Then set the timeout to 1 frame, so that the cursor
// blinks under key repeat conditions, like on the original KERNAL
lda #$01
sta BLNCT
// FALLTROUGH
cursor_show_end:
lda #$00
sta BLNON
!:
rts
+9 -37
View File
@@ -34,32 +34,13 @@ m65_chrout_screen_literal: // entry point for m65_chrout_screen_quote
tax // store screen code, we need .A for calculations
// Preserve .Z on stack, use it toi store screen columnt
// Preserve .Z on stack
phz
ldz M65__TXTCOL
// Start from setting M65_LPNT_SCR to point colour memory (starts from $FF80000)
// Prepare .Z and M65_LPNT_SCR for colour memory manipulation
lda #$0F
sta M65_LPNT_SCR+3
lda #$F8
sta M65_LPNT_SCR+2
lda M65_COLVIEW+1
sta M65_LPNT_SCR+1
lda M65_COLVIEW+0
sta M65_LPNT_SCR+0
// Add screen row to the address
clc
lda M65_TXTROW_OFF+0
adc M65_LPNT_SCR+0
sta M65_LPNT_SCR+0
lda M65_TXTROW_OFF+1
adc M65_LPNT_SCR+1
sta M65_LPNT_SCR+1
jsr m65_helper_scrlpnt_color
// Store the new color in screen memory
@@ -68,19 +49,7 @@ m65_chrout_screen_literal: // entry point for m65_chrout_screen_quote
// Now change M65_LPNT_SCR to point to screen memory
// XXX deduplicate this part
lda M65_SCRSEG+1
sta M65_LPNT_SCR+3
lda M65_SCRSEG+0
sta M65_LPNT_SCR+2
clc
lda M65_SCRBASE+0
adc M65_LPNT_SCR+0
sta M65_LPNT_SCR+0
lda M65_SCRBASE+1
adc M65_LPNT_SCR+1
sta M65_LPNT_SCR+1
jsr m65_helper_scrlpnt_to_screen
// Store the new character in screen memory, restore .Z
@@ -91,6 +60,9 @@ m65_chrout_screen_literal: // entry point for m65_chrout_screen_quote
ora #$80 // reverse the character XXX consider doing this within chrout_to_screen_code
!:
sta_lp (M65_LPNT_SCR),z
// Restore .Z
plz
// Increment screen column by 1
@@ -134,7 +106,7 @@ m65_chrout_fix_txtrow_off:
m65_chrout_screen_done:
jsr m65_cursor_show_if_enabled
jsr cursor_show_if_enabled
// XXX change this to return success
// XXX make sure it return success
rts
+2
View File
@@ -2,6 +2,8 @@
// #LAYOUT# * * #IGNORE
// XXX deduplicate pointer manipulation
M65_CLRSCR:
// Clear additional attributes from the color code
+2
View File
@@ -2,6 +2,8 @@
// #LAYOUT# * * #IGNORE
// XXX deduplicate pointer manipulation
M65_CLRWIN:
// Clear additional attributes from the color code
+15 -30
View File
@@ -13,10 +13,6 @@
m65_cursor_disable: // XXX utilize this!
// Make sure IRQ won't interfere by increasing the counter XXX reuse in legacy mode
lda #$FF
sta BLNCT
// Disable cursor blinking
lda #$80
sta BLNSW
@@ -29,40 +25,29 @@ m65_cursor_hide_if_visible:
lda #$FF
sta BLNCT
// If cursor is not visible, nothing to do
// If cursor is not visible, not much to do
lda BLNON
beq m65_cursor_blink_timer_reset
beq_16 cursor_timer_reset
// FALLTROUGH
m65_cursor_undraw:
// XXX provide implementation
// Preserve .Z
phz
// Cursor undraw - color
// Mark cursor as not drawn
lda #0
sta BLNON
jsr m65_helper_scrlpnt_color
lda GDCOL
sta_lp (M65_LPNT_SCR),z
rts
// Cursor undraw - character
m65_cursor_show_if_enabled:
jsr m65_helper_scrlpnt_to_screen
lda GDBLN
sta_lp (M65_LPNT_SCR),z
// XXX provide implementation
lda #$00
sta BLNSW
// FALLTROUGH
m65_cursor_blink_timer_reset: // XXX reuse code from main KERNAL
// Rest blink counter (Mapping the 64, p39-40)
lda #20
sta BLNCT
// FALLTROUGH
m65_cursor_blink_end:
rts
// Restore .Z and continue as with normal editor
plz
jmp cursor_undraw_cont
+7 -10
View File
@@ -62,13 +62,11 @@ m65_cursor_blink_draw:
lda_lp (M65_LPNT_IRQ),z
sta GDCOL
lda COLOR
and #$0F
and #$0F // take current colour, but not extended attributes
sta_lp (M65_LPNT_IRQ),z
// Rework pointer to point to screnn memory
jsr m65_cursor_blink_rework_ptr
// Cursor draw - character
jsr m65_cursor_blink_irqpnt_to_screen
lda_lp (M65_LPNT_IRQ),z
sta GDBLN
eor #$80
@@ -89,18 +87,17 @@ m65_cursor_blink_end:
m65_cursor_blink_undraw:
lda #0
sta BLNON
// Cursor undraw - color
lda GDCOL
sta_lp (M65_LPNT_IRQ),z
// Rework pointer to point to screnn memory
jsr m65_cursor_blink_rework_ptr
// Cursor undraw - character
jsr m65_cursor_blink_irqpnt_to_screen
lda GDBLN
sta_lp (M65_LPNT_IRQ),z
// Mark cursor as not drawn
lda #0
sta BLNON
jmp_8 m65_cursor_blink_timer_reset
@@ -2,7 +2,7 @@
// #LAYOUT# * * #IGNORE
m65_cursor_blink_rework_ptr:
m65_cursor_blink_irqpnt_to_screen:
// Adapt pointer to point to screen memory
@@ -0,0 +1,54 @@
// #LAYOUT# M65 KERNAL_1 #TAKE
// #LAYOUT# * * #IGNORE
m65_helper_scrlpnt_color:
// Set .Z to the current column
ldz M65__TXTCOL
// Setting M65_LPNT_SCR to point to colour memory (starts from $FF80000)
lda #$0F
sta M65_LPNT_SCR+3
lda #$F8
sta M65_LPNT_SCR+2
lda M65_COLVIEW+1
sta M65_LPNT_SCR+1
lda M65_COLVIEW+0
sta M65_LPNT_SCR+0
// Add screen row to the address
clc
lda M65_TXTROW_OFF+0
adc M65_LPNT_SCR+0
sta M65_LPNT_SCR+0
lda M65_TXTROW_OFF+1
adc M65_LPNT_SCR+1
sta M65_LPNT_SCR+1
rts
m65_helper_scrlpnt_to_screen:
// Change M65_LPNT_SCR to point to screen memory (when it points to scren memory)
lda M65_SCRSEG+1
sta M65_LPNT_SCR+3
lda M65_SCRSEG+0
sta M65_LPNT_SCR+2
clc
lda M65_SCRBASE+0
adc M65_LPNT_SCR+0
sta M65_LPNT_SCR+0
lda M65_SCRBASE+1
adc M65_LPNT_SCR+1
sta M65_LPNT_SCR+1
rts