work towards fixing bug with no scrolling when last line is double-length
This commit is contained in:
1 parent
eed50e63f4
commit
e1490c1ded
1 file changed
+20
-12
+20
-12
@@ -56,6 +56,10 @@ colour_check_loop:
|
|||||||
clc
|
clc
|
||||||
adc #40
|
adc #40
|
||||||
sta current_screen_x
|
sta current_screen_x
|
||||||
|
;; We need to advance the pointer manually, as normalising
|
||||||
|
;; now will break things. The pointer update is required
|
||||||
|
;; so that we can tell if we really are on the bottom phys
|
||||||
|
;; screen line or not
|
||||||
jsr scroll_up_if_on_last_line
|
jsr scroll_up_if_on_last_line
|
||||||
jsr calculate_screen_line_pointer
|
jsr calculate_screen_line_pointer
|
||||||
jmp chrout_done
|
jmp chrout_done
|
||||||
@@ -229,6 +233,7 @@ count_rows_loop:
|
|||||||
stx $0420
|
stx $0420
|
||||||
cpx #0
|
cpx #0
|
||||||
beq no_copy_down
|
beq no_copy_down
|
||||||
|
bmi no_copy_down
|
||||||
|
|
||||||
;; Set pointers to end of screen line, and one line
|
;; Set pointers to end of screen line, and one line
|
||||||
;; above. (It is always one physical line, because
|
;; above. (It is always one physical line, because
|
||||||
@@ -318,16 +323,24 @@ not_last_line:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
scroll_up_if_on_last_line:
|
scroll_up_if_on_last_line:
|
||||||
|
|
||||||
;; Colour RAM is always in fixed place, so is easiest
|
;; Colour RAM is always in fixed place, so is easiest
|
||||||
;; to use to check if we are on the last line.
|
;; to use to check if we are on the last line.
|
||||||
;; The last line is at $D800 + 24*40 = $DBC0
|
;; The last line is at $D800 + 24*40 = $DBC0
|
||||||
|
jsr get_current_line_logical_length
|
||||||
lda current_screen_line_colour_ptr+0
|
lda current_screen_line_colour_ptr+0
|
||||||
cmp #<$DBC0
|
clc
|
||||||
|
adc logical_line_length
|
||||||
|
sta $0424
|
||||||
|
cmp #<$DBE7
|
||||||
bne not_last_line
|
bne not_last_line
|
||||||
lda current_screen_line_colour_ptr+1
|
lda current_screen_line_colour_ptr+1
|
||||||
|
sta $0425
|
||||||
cmp #>$DBC0
|
cmp #>$DBC0
|
||||||
bne not_last_line
|
bne not_last_line
|
||||||
|
|
||||||
|
inc $d020
|
||||||
|
|
||||||
dec current_screen_y
|
dec current_screen_y
|
||||||
|
|
||||||
;; FALL THROUGH
|
;; FALL THROUGH
|
||||||
@@ -591,25 +604,20 @@ update_colour_line_pointer:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
retreat_screen_pointer_40_bytes:
|
|
||||||
lda current_screen_line_ptr+0
|
|
||||||
sec
|
|
||||||
sbc #<40
|
|
||||||
sta current_screen_line_ptr+0
|
|
||||||
lda current_screen_line_ptr+1
|
|
||||||
sbc #>40
|
|
||||||
sta current_screen_line_ptr+1
|
|
||||||
|
|
||||||
jmp update_colour_line_pointer
|
|
||||||
|
|
||||||
advance_screen_pointer_40_bytes:
|
advance_screen_pointer_40_bytes:
|
||||||
lda current_screen_line_ptr+0
|
lda current_screen_line_ptr+0
|
||||||
clc
|
clc
|
||||||
adc #<40
|
adc #<40
|
||||||
sta current_screen_line_ptr+0
|
sta current_screen_line_ptr+0
|
||||||
|
sta current_screen_line_colour_ptr+0
|
||||||
lda current_screen_line_ptr+1
|
lda current_screen_line_ptr+1
|
||||||
adc #>40
|
adc #>40
|
||||||
sta current_screen_line_ptr+1
|
sta current_screen_line_ptr+1
|
||||||
|
sec
|
||||||
|
sbc HIBASE
|
||||||
|
clc
|
||||||
|
adc #>$D800
|
||||||
|
sta current_screen_line_colour_ptr+1
|
||||||
|
|
||||||
jmp update_colour_line_pointer
|
jmp update_colour_line_pointer
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user