provided screen scroll up unofficial routine
This commit is contained in:
1 parent
82c7c22831
commit
ca0d316948
6 files changed
+76
-101
No files matched your search
@@ -0,0 +1,115 @@
|
||||
|
||||
//
|
||||
// Scroll the whole screen up by 1 logical line, described in:
|
||||
//
|
||||
// - [CM64] Computes Mapping the Commodore 64 - page 218
|
||||
//
|
||||
|
||||
|
||||
screen_scroll_up:
|
||||
|
||||
// First handle CTRL and NO_SCRL keys
|
||||
|
||||
jsr screen_scroll_delay
|
||||
|
||||
// Scroll the LDTBL (line link table)
|
||||
|
||||
ldy #$00
|
||||
!:
|
||||
lda LDTBL+1, y
|
||||
sta LDTBL+0, y
|
||||
iny
|
||||
cpy #24
|
||||
bne !-
|
||||
|
||||
lda #$80
|
||||
sta LDTBL+24
|
||||
|
||||
// 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
|
||||
|
||||
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
|
||||
|
||||
ldx #24
|
||||
jsr screen_clear_line
|
||||
|
||||
// Decrement the current physical line number
|
||||
|
||||
dec TBLX
|
||||
|
||||
// If the first line is linked, scroll once more
|
||||
|
||||
bit LDTBL+0
|
||||
bpl screen_scroll_up
|
||||
|
||||
// Recalculate PNT and USER
|
||||
|
||||
jmp screen_calculate_PNT_USER
|
||||
Reference in new issue
Block a user