screen scroll rework finished
This commit is contained in:
1 parent
44df124fc7
commit
c84091291a
1 file changed
+71
-129
@@ -6,18 +6,6 @@
|
|||||||
|
|
||||||
screen_scroll_up:
|
screen_scroll_up:
|
||||||
|
|
||||||
// Preserve SAL and EAL
|
|
||||||
|
|
||||||
lda SAL+0
|
|
||||||
pha
|
|
||||||
lda SAL+1
|
|
||||||
pha
|
|
||||||
lda EAL+0
|
|
||||||
pha
|
|
||||||
lda EAL+1
|
|
||||||
pha
|
|
||||||
|
|
||||||
screen_scroll_up_next:
|
|
||||||
|
|
||||||
#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65
|
#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65
|
||||||
|
|
||||||
@@ -62,14 +50,76 @@ screen_scroll_up_delay_done:
|
|||||||
lda #$80
|
lda #$80
|
||||||
sta LDTBL+24
|
sta LDTBL+24
|
||||||
|
|
||||||
// Now, we need to scroll both screen memory and color memory
|
// Preserve SAL and EAL
|
||||||
|
|
||||||
|
lda SAL+0
|
||||||
|
pha
|
||||||
|
lda SAL+1
|
||||||
|
pha
|
||||||
|
lda EAL+0
|
||||||
|
pha
|
||||||
|
lda EAL+1
|
||||||
|
pha
|
||||||
|
|
||||||
|
// Now, we need to scroll both screen memory and color memory; first create start/end pointers
|
||||||
|
|
||||||
// YYY implement
|
lda HIBASE
|
||||||
|
sta SAL+1
|
||||||
|
sta EAL+1
|
||||||
|
|
||||||
|
lda #>$D800
|
||||||
|
sta PNT+1
|
||||||
|
sta USER+1
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta EAL+0
|
||||||
|
sta USER+0
|
||||||
|
lda #40
|
||||||
|
sta SAL+0
|
||||||
|
sta PNT+0
|
||||||
|
|
||||||
|
// Now copy, SAL->EAL, PNT->USER, in a loop
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
|
||||||
|
screen_scroll_up_loop:
|
||||||
|
|
||||||
|
lda (SAL), y
|
||||||
|
sta (EAL), y
|
||||||
|
lda (PNT), y
|
||||||
|
sta (USER), y
|
||||||
|
|
||||||
|
// Check if this was the last byte (last destination byte for color copy is #DBBF)
|
||||||
|
|
||||||
|
cpy #$BF
|
||||||
|
bne !+ // definitely not the last byte
|
||||||
|
lda USER+1
|
||||||
|
cmp #$DB
|
||||||
|
beq screen_scroll_up_loop_done
|
||||||
|
!:
|
||||||
|
// Increment .Y, possibly advance pointers
|
||||||
|
|
||||||
|
iny
|
||||||
|
bne screen_scroll_up_loop
|
||||||
|
|
||||||
|
inc SAL+1
|
||||||
|
inc EAL+1
|
||||||
|
inc USER+1
|
||||||
|
inc PNT+1
|
||||||
|
bne screen_scroll_up_loop // branch alwayys
|
||||||
|
|
||||||
|
screen_scroll_up_loop_done:
|
||||||
|
|
||||||
|
// Restore SAL and EAL
|
||||||
|
|
||||||
|
pla
|
||||||
|
sta EAL+1
|
||||||
|
pla
|
||||||
|
sta EAL+0
|
||||||
|
pla
|
||||||
|
sta SAL+1
|
||||||
|
pla
|
||||||
|
sta SAL+0
|
||||||
|
|
||||||
// Clear the newly introduced line
|
// Clear the newly introduced line
|
||||||
|
|
||||||
@@ -83,22 +133,15 @@ screen_scroll_up_delay_done:
|
|||||||
// If the first line is linked, scroll once more
|
// If the first line is linked, scroll once more
|
||||||
|
|
||||||
bit LDTBL+0
|
bit LDTBL+0
|
||||||
bpl screen_scroll_up_next
|
#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65
|
||||||
|
bpl_far screen_scroll_up
|
||||||
|
#else
|
||||||
|
bpl screen_scroll_up
|
||||||
|
#endif
|
||||||
|
|
||||||
// Restore SAL and EAL
|
// Recalculate PNT and USER
|
||||||
|
|
||||||
pla
|
jmp screen_calculate_PNT_USER
|
||||||
sta EAL+1
|
|
||||||
pla
|
|
||||||
sta EAL+0
|
|
||||||
pla
|
|
||||||
sta SAL+1
|
|
||||||
pla
|
|
||||||
sta SAL+0
|
|
||||||
|
|
||||||
// Return
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -135,105 +178,4 @@ is_last_line:
|
|||||||
|
|
||||||
// FALLTHROUGH to screen_scroll_up
|
// FALLTHROUGH to screen_scroll_up
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
scroll_screen_up:
|
|
||||||
|
|
||||||
// Preserve EAL
|
|
||||||
lda EAL+0
|
|
||||||
pha
|
|
||||||
lda EAL+1
|
|
||||||
pha
|
|
||||||
|
|
||||||
// Now scroll the whole screen up either one or two lines
|
|
||||||
// based on whether the first screen line is linked or not.
|
|
||||||
|
|
||||||
// Get pointers to start of screen + colour RAM
|
|
||||||
lda HIBASE
|
|
||||||
sta PNT+1
|
|
||||||
sta SAL+1
|
|
||||||
lda #>$D800
|
|
||||||
sta USER+1
|
|
||||||
sta EAL+1
|
|
||||||
lda #$00
|
|
||||||
sta PNT+0
|
|
||||||
sta USER+0
|
|
||||||
|
|
||||||
// Get pointers to screen/colour RAM source
|
|
||||||
lda LDTBL+0
|
|
||||||
bmi !+
|
|
||||||
lda #40
|
|
||||||
.byte $2C // BIT $nnnn to skip next instruction
|
|
||||||
!:
|
|
||||||
lda #80
|
|
||||||
sta SAL+0
|
|
||||||
sta EAL+0
|
|
||||||
|
|
||||||
// Copy first three pages
|
|
||||||
ldy #$00
|
|
||||||
ldx #3
|
|
||||||
scroll_copy_loop:
|
|
||||||
lda (EAL),y
|
|
||||||
sta (USER),y
|
|
||||||
lda (SAL),y
|
|
||||||
sta (PNT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
bne scroll_copy_loop
|
|
||||||
|
|
||||||
inc SAL+1
|
|
||||||
inc PNT+1
|
|
||||||
inc EAL+1
|
|
||||||
inc USER+1
|
|
||||||
dex
|
|
||||||
bne scroll_copy_loop
|
|
||||||
|
|
||||||
// Copy last partial page
|
|
||||||
// We need to copy 1000-(3*256)-line length
|
|
||||||
// = 232 - line length
|
|
||||||
lda SAL+0
|
|
||||||
lda #232
|
|
||||||
sec
|
|
||||||
sbc SAL+0
|
|
||||||
tax
|
|
||||||
scroll_copy_loop2:
|
|
||||||
lda (EAL),y
|
|
||||||
sta (USER),y
|
|
||||||
lda (SAL),y
|
|
||||||
sta (PNT),y
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne scroll_copy_loop2
|
|
||||||
|
|
||||||
// Restore EAL
|
|
||||||
pla
|
|
||||||
sta EAL+1
|
|
||||||
pla
|
|
||||||
sta EAL+0
|
|
||||||
|
|
||||||
// Fill in scrolled up area
|
|
||||||
ldx SAL+0
|
|
||||||
scroll_copy_loop3:
|
|
||||||
lda COLOR
|
|
||||||
sta (USER),y
|
|
||||||
lda #$20
|
|
||||||
sta (PNT),y
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne scroll_copy_loop3
|
|
||||||
|
|
||||||
// Shift line linkage list
|
|
||||||
ldy #0
|
|
||||||
ldx #24
|
|
||||||
link_copy:
|
|
||||||
lda LDTBL+1,y
|
|
||||||
sta LDTBL+0,y
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne link_copy
|
|
||||||
// Clear line link flag of last line
|
|
||||||
stx LDTBL+24
|
|
||||||
|
|
||||||
// Restore correct line pointers
|
|
||||||
jmp screen_calculate_line_pointer
|
|
||||||
*/
|
*/
|
||||||
Reference in new issue
Block a user