From 3c43a0bc78d0ba582fcb4bef94decafff8088fb5 Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Wed, 9 Aug 2017 19:33:52 -0700 Subject: [PATCH] VBL experiments --- V2Make.scpt | Bin 2526 -> 2460 bytes graphics.s | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++ gscats.2mg | Bin 819264 -> 819264 bytes gscats.s | 46 ++++++++++++++++++++++++---- macros.s | 1 + terrain.s | 2 +- 6 files changed, 126 insertions(+), 7 deletions(-) diff --git a/V2Make.scpt b/V2Make.scpt index 5da294f64385c78fb8336372324041c56ea07422..050b92c37e624b7e7145f208a416c33e339945e9 100644 GIT binary patch delta 217 zcmca7JV$uLb5^D`9Fsq?dQD>E5K1pD$YEe&WJt`(EM@=#M!(6vY#Q7QTQ)!Bat|)Z zDJ`Dd$Y#OGz-ajF(v>w!gC-wjlh5RFEGWpyOinDx%+D)k5Mbb7V7L(Dm=4q~2x4DZ zD|!iJ6ax#$7zQQ=Ro}$q%)FBP;tT~37b|4VRtykJ^b!jS7#R2%#2C03+!=xy3K()2 dN*RhL7qV;0iz92$M^-P)z^Ko#`7%2<695t#Ka>Cf delta 284 zcmbOud{218b5^Ez9Fsq?dQD>E5DG3gG-F_5WJt`(EM@=##tD;s*)(_<4bL=i2bZU& zmKd5%ZeX+E01C`FpPdvj`5>EoJug%y-dN8-&zONhfPsU7;X;gKI?wvPJ1L7MDOp~uNFfrKrCMIX*mE;#^D0sM7g%+n46ac-W-&dme>f>uoV diff --git a/graphics.s b/graphics.s index 7b09809..d23c9bb 100644 --- a/graphics.s +++ b/graphics.s @@ -30,6 +30,38 @@ colorFillLoop: rts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; bottomFill +; Fills the bottom of the screen with a color (or two). Pretty fast, but not fastest possible +; A 4:4:4:4 = Palette entries +; X = Color to fill (doubled) +; +; Trashes Y + +bottomFill: + FASTGRAPHICS + + lda #$9d00-1 ; Point stack to end of VRAM + tcs + + ldy #58 + +bottomFillLoop: + ; 80 PHXs, for 1 line + ; We could do the entire screen with PHXs, but this is a + ; balance between speed and super-verbose code + .byte $da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da + .byte $da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da + .byte $da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da + .byte $da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da,$da + + dey + bne bottomFillLoop + + SLOWGRAPHICS + rts + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; initSCBs ; Initialize all scanline control bytes @@ -107,6 +139,58 @@ setPaletteLoop: rts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Vertical blank checkers +; + +; The Brutal Deluxe version, taken from LemminGS +; +nextVBL: + lda #75 + pha +nextVBL0: + lda $e0c02e + and #$7f + cmp 1,s + blt nextVBL0 + cmp #100 + bge nextVBL0 + pla +waitVBL: + lda $e0c018 + bpl waitVBL + rts + +; The Apple version, taken from GS Tech Note 039 +; +syncVBL: + BITS8 +syncVBL0: + lda $E0C02F + asl ; VA is now in the Carry flag + lda $E0C02E + rol ; Roll Carry into bit 0 + cmp #200 ; A now contains line number + bne syncVBL0 + BITS16 + rts + +; The old style //e version +; +vblSync: + BITS8 + +waitVBLToFinish: + lda $E0C019 + bmi waitVBLToFinish +waitVBLToStart: + lda $E0C019 + bpl waitVBLToStart + + BITS16 + rts + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; caches shadowRegister: diff --git a/gscats.2mg b/gscats.2mg index 724a57f36aba15afff15926d32bf7082178381b8..97ee4506e546f51c3ec3b2a888f65ab5e56f2eae 100644 GIT binary patch delta 2560 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 diff --git a/gscats.s b/gscats.s index 7a9218f..38801ea 100644 --- a/gscats.s +++ b/gscats.s @@ -32,9 +32,35 @@ mainBank2: jsr generateTerrain mainGameLoop: - ldy mapScrollPos -; jsr renderTerrainColumns + jsr syncVBL + +; ldx #$2222 +; jsr bottomFill + +; ldx #$1111 +; jsr bottomFill + + lda scrollV + bmi negV + + clc + lda mapScrollPos + adc scrollV + cmp #TERRAINWIDTH/4-80 + beq reverseScroll + sta mapScrollPos + bra render + +negV: + clc + lda mapScrollPos + adc scrollV + beq reverseScroll + sta mapScrollPos + +render: + tay jsr renderTerrain jsr kbdScan @@ -46,7 +72,15 @@ mainGameLoop: CLASSICVIDEO jml (proDOSLongJump) +reverseScroll: + lda scrollV + eor #$ffff + inc + sta scrollV + jmp mainGameLoop +scrollV: + .word 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; kbdScan @@ -60,7 +94,7 @@ kbdScan: kbdScanLoop: lda KBD - bpl kbdScanLoop + bpl kbdScanDone sta KBDSTROBE cmp #(8 + $80) @@ -71,9 +105,9 @@ kbdScanLoop: cmp #(32 + $80) beq kbdScanSpace - NATIVE kbdScanDone: + NATIVE rts kbdScanLeftArrow: @@ -105,9 +139,9 @@ kbdScanSpace: basePalette: - .word $0800,$0080,$0000,$000F,$0000,$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 - .word 80 + .word 79 quitRequested: .word $0000 diff --git a/macros.s b/macros.s index 93153ab..2b12de4 100644 --- a/macros.s +++ b/macros.s @@ -117,6 +117,7 @@ sta PARAM24 .endmacro + ;;;;;;;;;; ; Stack Macros diff --git a/terrain.s b/terrain.s index 83afeb8..02905ca 100644 --- a/terrain.s +++ b/terrain.s @@ -6,7 +6,7 @@ TERRAINWIDTH = 640 ; In pixels -MAXTERRAINHEIGHT = 100 ; In pixels +MAXTERRAINHEIGHT = 20 ; In pixels ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrain