From d4077a7edc29e4aecb006a87d751c7fd54cb60c6 Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sun, 22 Jul 2018 10:11:51 -0500 Subject: [PATCH] Improved VBL, fixed Ctrl-OA-Reset crash --- gamemanager.s | 13 +++++++------ graphics.s | 9 ++++++--- gscats.2mg | Bin 819264 -> 819264 bytes loader.s | 33 +++++++++++++++++++++++++++++++-- macros.s | 6 ++++++ terrain_e1.s | 14 +------------- utility.s | 27 +++++++++++++++++++++++++++ 7 files changed, 78 insertions(+), 24 deletions(-) diff --git a/gamemanager.s b/gamemanager.s index 7aa8c4c..b33864c 100644 --- a/gamemanager.s +++ b/gamemanager.s @@ -64,6 +64,7 @@ beginGameplay: jsl renderTerrainSpans gameplayLoop: + jsr kbdScan jsr syncVBL BORDER_COLOR #$0 @@ -75,9 +76,6 @@ gameplayLoop: lda projectileActive bpl gameplayLoopShotTracking ; Skip input during shots - ; Check for keys down - jsr kbdScan - ; Check for pause ; lda paused ; bne gameplayLoopEndFrame @@ -150,9 +148,14 @@ gameplayLoopProjectilesSkip: gameplayLoopVictoryCondition: lda gameOver - bmi gameplayLoopEndFrame + bmi gameplayEndTurnCondition jsr endGame +gameplayEndTurnCondition: + lda turnRequested + beq gameplayLoopEndFrame + jsr endTurn + gameplayLoopEndFrame: lda quitRequested beq gameplayLoopContinue @@ -358,8 +361,6 @@ projectilesDirty: .word 1 inventoryDirty: .word 1 -activePlayer: - .word 0 currentPlayer: .word 0 gameOver: diff --git a/graphics.s b/graphics.s index 5e0f33f..65089f2 100644 --- a/graphics.s +++ b/graphics.s @@ -268,18 +268,21 @@ waitVBL: bpl waitVBL rts + ; The Apple version, taken from GS Tech Note 039 ; syncVBL: + ;sei BITS8 syncVBL0: - lda $E0C02F + ldaA $C02f asl ; VA is now in the Carry flag - lda $E0C02E + ldaA $C02e rol ; Roll Carry into bit 0 cmp #200 ; A now contains line number - bne syncVBL0 + blt syncVBL0 BITS16 + ;cli rts ; The old style //e version diff --git a/gscats.2mg b/gscats.2mg index cb73e5a1619dd4da9c622c5229a4e425f8d122a9..0571114ba804f978a0e52a53070eebb62ac62686 100644 GIT binary patch delta 2175 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 diff --git a/loader.s b/loader.s index 865cd83..e1efc95 100644 --- a/loader.s +++ b/loader.s @@ -72,9 +72,25 @@ main: ldy #$800 ; Must match terrain_e1 .org jsr copyBytes + ; Copy vram table into bank E1 + phb + lda #vramRowInvertedSpanLookupEnd-vramRowInvertedSpanLookup-1 + ldx #vramRowInvertedSpanLookupEnd-1 + ldy #$16C0 + vramRowInvertedSpanLookupEnd-vramRowInvertedSpanLookup-1 ; Must match terrain_e1 vramRowInvertedSpanLookup + mvp $e1,$00 ; Note that ca65 reverses src,dest. Grrr. + plb + EMULATION + jmp loadData + + ; Mystery jump table at 1680 - 16BB + +ioError: + brk + ;;;;;;;;;;;;;;;;;;;;; +loadData: ; Open the sprite bank file jsr PRODOS @@ -114,8 +130,21 @@ returnToProDOS: EMULATION rts -ioError: - brk + +; This table lives here in the loader because we need to copy +; it to a specific free hole in bank E1 +vramRowInvertedSpanLookup: + .word $9d00,$9c60,$9bc0,$9b20,$9a80,$99e0,$9940,$98a0,$9800,$9760,$96c0,$9620,$9580,$94e0,$9440,$93a0,$9300,$9260,$91c0,$9120 + .word $9080,$8fe0,$8f40,$8ea0,$8e00,$8d60,$8cc0,$8c20,$8b80,$8ae0,$8a40,$89a0,$8900,$8860,$87c0,$8720,$8680,$85e0,$8540,$84a0 + .word $8400,$8360,$82c0,$8220,$8180,$80e0,$8040,$7fa0,$7f00,$7e60,$7dc0,$7d20,$7c80,$7be0,$7b40,$7aa0,$7a00,$7960,$78c0,$7820 + .word $7780,$76e0,$7640,$75a0,$7500,$7460,$73c0,$7320,$7280,$71e0,$7140,$70a0,$7000,$6f60,$6ec0,$6e20,$6d80,$6ce0,$6c40,$6ba0 + .word $6b00,$6a60,$69c0,$6920,$6880,$67e0,$6740,$66a0,$6600,$6560,$64c0,$6420,$6380,$62e0,$6240,$61a0,$6100,$6060,$5fc0,$5f20 + .word $5e80,$5de0,$5d40,$5ca0,$5c00,$5b60,$5ac0,$5a20,$5980,$58e0,$5840,$57a0,$5700,$5660,$55c0,$5520,$5480,$53e0,$5340,$52a0 + .word $5200,$5160,$50c0,$5020,$4f80,$4ee0,$4e40,$4da0,$4d00,$4c60,$4bc0,$4b20,$4a80,$49e0,$4940,$48a0,$4800,$4760,$46c0,$4620 + .word $4580,$44e0,$4440,$43a0,$4300,$4260,$41c0,$4120,$4080,$3fe0,$3f40,$3ea0,$3e00,$3d60,$3cc0,$3c20,$3b80,$3ae0,$3a40,$39a0 + .word $3900,$3860,$37c0,$3720,$3680,$35e0,$3540,$34a0,$3400,$3360,$32c0,$3220,$3180,$30e0,$3040,$2fa0,$2f00,$2e60,$2dc0,$2d20 + .word $2c80,$2be0,$2b40,$2aa0,$2a00,$2960,$28c0,$2820,$2780,$26e0,$2640,$25a0,$2500,$2460,$23c0,$2320,$2280,$21e0,$2140,$20a0 +vramRowInvertedSpanLookupEnd: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/macros.s b/macros.s index a81375f..49e66ae 100644 --- a/macros.s +++ b/macros.s @@ -169,6 +169,12 @@ .dbyt (((Arg & $FF00) | $AA00) & $EE00) | (((Arg & $00FF) | $00AA) & $00EE) .endmacro +.macro ldaA Arg ; Forces 24-bit absolute addressing to bank $00 + .byte $af + .word Arg + .byte $00 +.endmacro + .macro BREAK pha lda breakpoint diff --git a/terrain_e1.s b/terrain_e1.s index 2ffd832..013a857 100644 --- a/terrain_e1.s +++ b/terrain_e1.s @@ -278,19 +278,7 @@ terrainSpanData: .endrepeat -vramRowInvertedSpanLookup: - .word $9d00,$9c60,$9bc0,$9b20,$9a80,$99e0,$9940,$98a0,$9800,$9760,$96c0,$9620,$9580,$94e0,$9440,$93a0,$9300,$9260,$91c0,$9120 - .word $9080,$8fe0,$8f40,$8ea0,$8e00,$8d60,$8cc0,$8c20,$8b80,$8ae0,$8a40,$89a0,$8900,$8860,$87c0,$8720,$8680,$85e0,$8540,$84a0 - .word $8400,$8360,$82c0,$8220,$8180,$80e0,$8040,$7fa0,$7f00,$7e60,$7dc0,$7d20,$7c80,$7be0,$7b40,$7aa0,$7a00,$7960,$78c0,$7820 - .word $7780,$76e0,$7640,$75a0,$7500,$7460,$73c0,$7320,$7280,$71e0,$7140,$70a0,$7000,$6f60,$6ec0,$6e20,$6d80,$6ce0,$6c40,$6ba0 - .word $6b00,$6a60,$69c0,$6920,$6880,$67e0,$6740,$66a0,$6600,$6560,$64c0,$6420,$6380,$62e0,$6240,$61a0,$6100,$6060,$5fc0,$5f20 - .word $5e80,$5de0,$5d40,$5ca0,$5c00,$5b60,$5ac0,$5a20,$5980,$58e0,$5840,$57a0,$5700,$5660,$55c0,$5520,$5480,$53e0,$5340,$52a0 - .word $5200,$5160,$50c0,$5020,$4f80,$4ee0,$4e40,$4da0,$4d00,$4c60,$4bc0,$4b20,$4a80,$49e0,$4940,$48a0,$4800,$4760,$46c0,$4620 - .word $4580,$44e0,$4440,$43a0,$4300,$4260,$41c0,$4120,$4080,$3fe0,$3f40,$3ea0,$3e00,$3d60,$3cc0,$3c20,$3b80,$3ae0,$3a40,$39a0 - .word $3900,$3860,$37c0,$3720,$3680,$35e0,$3540,$34a0,$3400,$3360,$32c0,$3220,$3180,$30e0,$3040,$2fa0,$2f00,$2e60,$2dc0,$2d20 - .word $2c80,$2be0,$2b40,$2aa0,$2a00,$2960,$28c0,$2820,$2780,$26e0,$2640,$25a0,$2500,$2460,$23c0,$2320,$2280,$21e0,$2140,$20a0 - - +vramRowInvertedSpanLookup = $16C0 ; This table is copied to here by the loader .export renderTerrainSpans diff --git a/utility.s b/utility.s index 43441f2..aa76f73 100644 --- a/utility.s +++ b/utility.s @@ -152,3 +152,30 @@ mult88: jsr mult16 ; Result is 8.8 rts + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; delayShort +; Sleeps for a teeny bit +; +delayShort: + SAVE_AXY + + ldy #$01 ; Loop a bit +delayShortOuter: + ldx #$ff +delayShortInner: + nop + nop + nop + nop + nop + nop + nop + dex + bne delayShortInner + dey + bne delayShortOuter + + RESTORE_AXY + rts