From 4b4f322182191ee3d4b9fae8643852f5128342a5 Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sat, 12 Aug 2017 18:17:14 -0700 Subject: [PATCH] Full range scrolling working with clipped compiled terrain --- gscats.2mg | Bin 819264 -> 819264 bytes gscats.s | 25 ++++++++++++++----------- terrain.s | 28 +++++++++++++++++----------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/gscats.2mg b/gscats.2mg index c67e9481d7d099d0ea70ab662e4a7fbf46b3d20c..bb989aaab686dbf9d9e577add64c10151e1cf62d 100644 GIT binary patch delta 2559 zcmeH}e{54#6vuDNczf@)uYGUby0-7NeeJq#MFs^nnB&KOkj+U*s747c#!MMFq7Y0l z;9_i1Dvj=Kl!pp}qiksUB;6KjY={yI1YIE}8;HS)x=mv?$B&{hMo6sp^|t)jApYfF zdYf}T-*fIgr#Ck_$&35u$9?nrTW9JPg0>AnT}0;ra0=kEP>Qw6)6p7CgDHUch&mR< zD9=`9!v=B94wu(Mj=B3>@e$%gC-f)X5+MAT1OUHwIRY28)JBK zk-!sS{sPG#!y^uY)<^6_auoG&Rihr4=HdKS6+8zErBq6A5Gz~pNDO~Cl`;u290m$d zd9x41N9YxFCmkP21d>$Zt)wXtN;(WTPr93B2mdeO0m*A7Sf5QKN2{`tqyU1QXa=|s z0H6gaZO~?Nq*B|)_`Ztxh%iJ-pc9I|Rv4Tk33n$HC;7#~d9lO)RP_)kZ${3MC>=RZ zvTK_Ext5et2iQ;*5D)oTvF7!1#nx!8@~lFv2~-pY1|ws9WLjf!cOdA!|82-n3y_;u zO1T@a@aXNk8RmHmypL5*^Z-8=7`%M1zVd~e8;6@JC8-(~hPzvU;SG}9uzI5(JJwsa z8~YjlTp&fP1pB=_9ZA*6y0niP=0Y-iNs_Qhq%UhasO2a^4)Z^nQ!zE1- zMooa>AT~ZeFc1%c!Esl!jbd=D8GuXbG4+J{y84DXhtg6kRZ1Z!-6_0%@%P0D+a`iMG1jZ%M7d79ap zhcs(7K24YAxaK>}Um9M!T>GrHU3*mfjaEU=q93EZ^bz_ZjWHF>I_7O=fVs)c&1=bf zH*YA9(ADW)*2Q$c>D>97@+0|I^5+z6E{GQVQLse+sy?A-3Y!WK7hWq|YzP>>HWV9Q zG=6S0n4a^RJ~MrQ4X-R$L7&Af-WGSLJLO&a?qEtZHO#~f!?#!F61Nl6YT(xNLvl`h zpFMsUd+y;1J9R76dB-k6=TvBNQPN%e@Xbp+6CH z%Bd5<5`lp)MPn2X>>n1?VQVF5xpLIuJ?gheu*4n3H@LlyMf_f*NL z?Ryp@EJ0X`uneIZp$4HAp$=g=LOtwtsHY+A>u1Q1e5j{BC;i$`i1GFuv?Vt0pP5mf zb}XZOLT*Ow>cBIq-;c|k<>G!nk(D7qmD#5|)!CZ&s9QBu_TWf|)?2Ou;A8ev_7r=T z{fhmbonU`wl^o4kxw%{o_b9iHdx`7d4s)My=ef%qX11A^nw!kq%+O3_0}0PZswSPZpOuUvVa!1trgv^p~VcR+WZIe=V(d?Q{Km^VBL2X?9JW zgsJg8MrGQO|K|x#?0)K+mn;Yx}VH-F$_d;i)A=Buh7>3(SGzQI# zv?#>|sbd^QmJBJ2V>^;&;1XdAOS%z~jUbHp$6yi|lORhRbc*qXnEAUtOr=AOf0}rg z=l6NOPoL+xUvj_a8Vlycf;q<;QZ#w!_7)^}xReN;Ml#Wn@+HzU{l$cWkVyDi`H6ml z_P;3|+`@0#=?*+YP5b)Xu_GJYL8xz|FcE7>w!h4XM>r-!V1RTdqTRm{(u!hFNM9RvM!2HzWlEUuWFn)8mvs2~ zsSvShf)W#>mncYyUZ$8$_5a+5H}5j@#k+F*OQh!{d~s_Y9|;j+L-nGD{GQhKz~AgB zvKfh+$``gb&N|@*bg9)%1nMU8XCf#>w2pr}%|#dW6*pR6K3SJ91lQog-mcBau$!W` zo^1>f12x`##7%s=(L7m&Is!G`(L_wpr*_nM59H4rM!jdp$6J1B_^TG55jat7F`Doe zO0FeJ>LM>8p~f2`cFMR5sjWWBAVkp1M2HC9Zb@{EAk>9Wr(QmE*L_B|SLcd5g-I0F z%WvI+2pcy=^?dejV?Zw_QF-tNLbyh_>kb*~4!Gx0@4)lT?v1FW-Iy(P?T1(sL74&Mll75zMqPNrSbT>UnkJI1K^Rz*cqo`JFRqRrH zsyMCqTCr5=R8}aPmHU(@mDiNZR6bRmDily1S6x-f)kW$?b*K8gT9THR_DWhLZ6Zyn zDc8KK8Pfc$S(*MudVl)&>ABi%+5zpa+EQJs?t)IQuh$>d|DZ21d}z30SZ;jVc+O}s zy=FRNIzmiV6{g~K0l)JPXTb|h;_H64=sw^-D3VmNT%;EV9um<%BqnZxuic}OCXf!$ z0(1a9z$hu?=fXx&%!N$=2EYQ$01Lnh-~cv&9pC_D0Gzn!TmUz~16VF% z?w~i3?}gY3z@q@4i0hx^Br8)2wv64xHnIVBKYNrNW-qhfv2t^kd7Zi5 zyxn}zJY>FVMiz%xPEd~ zx(~Vk&7>p`$DfBL=@2(Q@LSSMCC^xLUr{eEd3fmmLBZ4cA0CvYiBFxk_s|jv^79va v3;JId_LjcqnSI|gE5RnkwglT!Y$@0XY|F68u#woP6Q0>r9pCSl?veZkx?JuV diff --git a/gscats.s b/gscats.s index 2ddd52b..616b6d0 100644 --- a/gscats.s +++ b/gscats.s @@ -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" diff --git a/terrain.s b/terrain.s index b08112b..66306b5 100644 --- a/terrain.s +++ b/terrain.s @@ -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: