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

View File

@ -7,6 +7,9 @@
TERRAINWIDTH = 640 ; In pixels TERRAINWIDTH = 640 ; In pixels
MAXTERRAINHEIGHT = 100 ; 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 ; renderTerrain
@ -23,7 +26,7 @@ renderTerrain:
tcs ; 2 tcs ; 2
sec sec
lda #compiledTerrainEnd-80 lda #compiledTerrainEnd-VISIBLETERRAINWINDOW-3
sbc mapScrollPos sbc mapScrollPos
sta PARAML0 sta PARAML0
@ -35,7 +38,7 @@ renderTerrainLoop:
renderRowComplete: renderRowComplete:
lda PARAML0 lda PARAML0
sec sec
sbc #TERRAINWIDTH/4 sbc #COMPILEDTERRAINROW
sta PARAML0 sta PARAML0
dey dey
bne renderTerrainLoop bne renderTerrainLoop
@ -58,7 +61,7 @@ clipTerrain:
SAVE_AXY SAVE_AXY
sec sec
lda #((TERRAINWIDTH/4)*MAXTERRAINHEIGHT) lda #COMPILEDTERRAINROW*MAXTERRAINHEIGHT-3
sbc mapScrollPos sbc mapScrollPos
tay tay
ldx #MAXTERRAINHEIGHT ldx #MAXTERRAINHEIGHT
@ -89,7 +92,7 @@ clipTerrainLoop:
tya tya
sec sec
sbc #TERRAINWIDTH/4+1 sbc #COMPILEDTERRAINROW+1
tay tay
dex dex
@ -107,7 +110,7 @@ unclipTerrain:
SAVE_AXY SAVE_AXY
sec sec
lda #((TERRAINWIDTH/4)*MAXTERRAINHEIGHT) lda #COMPILEDTERRAINROW*MAXTERRAINHEIGHT-3
sbc mapScrollPos sbc mapScrollPos
tay tay
ldx #MAXTERRAINHEIGHT ldx #MAXTERRAINHEIGHT
@ -131,7 +134,7 @@ unclipTerrainLoop:
tya tya
sec sec
sbc #TERRAINWIDTH/4+1 sbc #COMPILEDTERRAINROW+1
tay tay
dex dex
@ -160,7 +163,7 @@ compileTerrainLoop:
bmi compileTerrainDone bmi compileTerrainDone
clc clc
lda #TERRAINWIDTH/4 lda #COMPILEDTERRAINROW
adc PARAML0 adc PARAML0
sta PARAML0 sta PARAML0
@ -208,7 +211,7 @@ compileTerrainColumnStore:
inx inx
iny iny
iny iny
cpy #TERRAINWIDTH/4 cpy #VISIBLETERRAINWIDTH
bne compileTerrainColumnLoop bne compileTerrainColumnLoop
RESTORE_AXY 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 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 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 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 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,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,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 .repeat TERRAINWIDTH/2
.word 0 .word 0
.endrepeat .endrepeat
compiledTerrain: compiledTerrain:
.repeat TERRAINWIDTH/4 * MAXTERRAINHEIGHT .repeat COMPILEDTERRAINROW * MAXTERRAINHEIGHT
.byte 0 .byte 0
.endrepeat .endrepeat
compiledTerrainEnd: compiledTerrainEnd: