mirror of
https://github.com/irmen/prog8.git
synced 2024-10-19 07:23:56 +00:00
smooth scroll
This commit is contained in:
parent
3881ebe429
commit
11e9539416
@ -593,6 +593,9 @@ asmsub scroll_left_full (ubyte alsocolors @ Pc) clobbers(A, Y) {
|
|||||||
; ---- scroll the whole screen 1 character to the left
|
; ---- scroll the whole screen 1 character to the left
|
||||||
; contents of the rightmost column are unchanged, you should clear/refill this yourself
|
; contents of the rightmost column are unchanged, you should clear/refill this yourself
|
||||||
; Carry flag determines if screen color data must be scrolled too
|
; Carry flag determines if screen color data must be scrolled too
|
||||||
|
|
||||||
|
; TODO why are the two inner loops split apart? can't they just be one single .for/.next macro?
|
||||||
|
|
||||||
%asm {{
|
%asm {{
|
||||||
stx c64.SCRATCH_ZPREGX
|
stx c64.SCRATCH_ZPREGX
|
||||||
bcs +
|
bcs +
|
||||||
|
@ -7,10 +7,16 @@
|
|||||||
|
|
||||||
main {
|
main {
|
||||||
|
|
||||||
|
ubyte perform_scroll = false
|
||||||
|
|
||||||
sub start() {
|
sub start() {
|
||||||
c64scr.plot(30,2)
|
c64scr.plot(30,2)
|
||||||
c64scr.print("skramble !")
|
c64scr.print("skramble !")
|
||||||
|
|
||||||
|
c64.SCROLX = c64.SCROLX & %11110111 ; 38 column mode
|
||||||
|
|
||||||
|
c64utils.set_rasterirq(1) ; enable animation
|
||||||
|
|
||||||
ubyte target_height = 10
|
ubyte target_height = 10
|
||||||
ubyte active_height = 25
|
ubyte active_height = 25
|
||||||
|
|
||||||
@ -20,17 +26,21 @@ main {
|
|||||||
} else if active_height > target_height {
|
} else if active_height > target_height {
|
||||||
active_height--
|
active_height--
|
||||||
} else {
|
} else {
|
||||||
target_height = 10 + rnd() % 13
|
target_height = 8 + rnd() % 16
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while not perform_scroll {
|
||||||
|
; let the raster irq do its timing job
|
||||||
|
}
|
||||||
|
perform_scroll = false
|
||||||
c64scr.scroll_left_full(true)
|
c64scr.scroll_left_full(true)
|
||||||
ubyte yy
|
ubyte yy
|
||||||
for yy in 0 to active_height-1 {
|
for yy in 0 to active_height-1 {
|
||||||
c64scr.setcc(39, yy, 32, 2)
|
c64scr.setcc(39, yy, 32, 2) ; clear top
|
||||||
}
|
}
|
||||||
for yy in active_height to 24 {
|
for yy in active_height to 24 {
|
||||||
c64scr.setcc(39, yy, 102, 8)
|
c64scr.setcc(39, yy, 102, 8) ; draw mountain
|
||||||
}
|
}
|
||||||
|
|
||||||
yy = rnd()
|
yy = rnd()
|
||||||
@ -68,11 +78,16 @@ main {
|
|||||||
; c64scr.setcc(1, 10, @'=', 15)
|
; c64scr.setcc(1, 10, @'=', 15)
|
||||||
; c64scr.setcc(2, 10, @'>', 15)
|
; c64scr.setcc(2, 10, @'>', 15)
|
||||||
|
|
||||||
for A in 0 to 4 {
|
|
||||||
while @($d012) != 100 {
|
|
||||||
; just wait for the raster beam...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
irq {
|
||||||
|
ubyte smoothx=7
|
||||||
|
sub irq() {
|
||||||
|
smoothx = (smoothx-1) & 7
|
||||||
|
main.perform_scroll = smoothx==0
|
||||||
|
c64.SCROLX = (c64.SCROLX & %11111000) | smoothx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user