Full range scrolling working with clipped compiled terrain

This commit is contained in:
blondie7575 2017-08-12 18:17:14 -07:00
parent ce3c428c31
commit 4b4f322182
3 changed files with 31 additions and 22 deletions

Binary file not shown.

View File

@ -32,8 +32,9 @@ mainBank2:
; jsr generateTerrain
jsr compileTerrain
jsr clipTerrain
jsr unclipTerrain
jsr clipTerrain
; jsr unclipTerrain
; jsr clipTerrain
mainGameLoop:
@ -45,7 +46,7 @@ mainGameLoop:
; clc
; lda mapScrollPos
; adc scrollV
; cmp #TERRAINWIDTH/4-80
; cmp #COMPILEDTERRAINROW-80
; beq reverseScroll
; sta mapScrollPos
bra render
@ -63,11 +64,12 @@ render:
jsr kbdScan
lda mapScrollRequested
bne scrollMap
bpl scrollMap
lda quitRequested
beq mainGameLoop
quit:
CLASSICVIDEO
jml (proDOSLongJump)
@ -75,7 +77,8 @@ scrollMap:
jsr unclipTerrain
sta mapScrollPos
jsr clipTerrain
stz mapScrollRequested
lda #$ffff
sta mapScrollRequested
jmp mainGameLoop
reverseScroll:
@ -119,11 +122,11 @@ kbdScanDone:
kbdScanLeftArrow:
NATIVE
lda mapScrollPos
cmp #TERRAINWIDTH/4-80
cmp #VISIBLETERRAINWIDTH-VISIBLETERRAINWINDOW
beq kbdScanDone
inc
sta mapScrollRequested
bra kbdScanDone
rts
kbdScanRightArrow:
NATIVE
@ -131,13 +134,13 @@ kbdScanRightArrow:
beq kbdScanDone
dec
sta mapScrollRequested
bra kbdScanDone
rts
kbdScanSpace:
NATIVE
lda #1
sta quitRequested
bra kbdScanDone
rts
@ -145,11 +148,11 @@ kbdScanSpace:
basePalette:
.word $0800,$0080,$0000,$000F,$0FFF,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
mapScrollPos: ; 4-pixel columns distance from right terrain edge
.word 5
.word 0
quitRequested:
.word $0000
mapScrollRequested:
.word $0000
.word $FFFF
.include "graphics.s"
.include "terrain.s"

View File

@ -7,6 +7,9 @@
TERRAINWIDTH = 640 ; In pixels
MAXTERRAINHEIGHT = 100 ; In pixels
COMPILEDTERRAINROW = TERRAINWIDTH/4+3 ; In words, +2 to make room for clipping jump at end of row
VISIBLETERRAINWIDTH = TERRAINWIDTH/4 ; In words- width minus jump return padding
VISIBLETERRAINWINDOW = 80 ; In words
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderTerrain
@ -23,7 +26,7 @@ renderTerrain:
tcs ; 2
sec
lda #compiledTerrainEnd-80
lda #compiledTerrainEnd-VISIBLETERRAINWINDOW-3
sbc mapScrollPos
sta PARAML0
@ -35,7 +38,7 @@ renderTerrainLoop:
renderRowComplete:
lda PARAML0
sec
sbc #TERRAINWIDTH/4
sbc #COMPILEDTERRAINROW
sta PARAML0
dey
bne renderTerrainLoop
@ -58,7 +61,7 @@ clipTerrain:
SAVE_AXY
sec
lda #((TERRAINWIDTH/4)*MAXTERRAINHEIGHT)
lda #COMPILEDTERRAINROW*MAXTERRAINHEIGHT-3
sbc mapScrollPos
tay
ldx #MAXTERRAINHEIGHT
@ -89,7 +92,7 @@ clipTerrainLoop:
tya
sec
sbc #TERRAINWIDTH/4+1
sbc #COMPILEDTERRAINROW+1
tay
dex
@ -107,7 +110,7 @@ unclipTerrain:
SAVE_AXY
sec
lda #((TERRAINWIDTH/4)*MAXTERRAINHEIGHT)
lda #COMPILEDTERRAINROW*MAXTERRAINHEIGHT-3
sbc mapScrollPos
tay
ldx #MAXTERRAINHEIGHT
@ -131,7 +134,7 @@ unclipTerrainLoop:
tya
sec
sbc #TERRAINWIDTH/4+1
sbc #COMPILEDTERRAINROW+1
tay
dex
@ -160,7 +163,7 @@ compileTerrainLoop:
bmi compileTerrainDone
clc
lda #TERRAINWIDTH/4
lda #COMPILEDTERRAINROW
adc PARAML0
sta PARAML0
@ -208,7 +211,7 @@ compileTerrainColumnStore:
inx
iny
iny
cpy #TERRAINWIDTH/4
cpy #VISIBLETERRAINWIDTH
bne compileTerrainColumnLoop
RESTORE_AXY
@ -268,15 +271,18 @@ terrainData:
.word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
.word 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
.word 40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21
.word 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,80
.word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.word 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,80
.word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,80
.repeat TERRAINWIDTH/2
.word 0
.endrepeat
compiledTerrain:
.repeat TERRAINWIDTH/4 * MAXTERRAINHEIGHT
.repeat COMPILEDTERRAINROW * MAXTERRAINHEIGHT
.byte 0
.endrepeat
compiledTerrainEnd: