diff --git a/gscats.2mg b/gscats.2mg index 74f7b94..3ff0bb8 100644 Binary files a/gscats.2mg and b/gscats.2mg differ diff --git a/gscats.s b/gscats.s index 3176d05..c67a809 100644 --- a/gscats.s +++ b/gscats.s @@ -30,36 +30,82 @@ mainBank2: jsr colorFill jsr generateTerrain + +mainGameLoop: + ldy mapScrollPos jsr renderTerrainColumns - jsr kbdWait - CLASSICVIDEO + jsr kbdScan + lda quitRequested + beq mainGameLoop + + + CLASSICVIDEO jml (proDOSLongJump) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; kbdWait -; Waits for a keystroke +; kbdScan +; Processes keyboard input ; -kbdWait: +; Trashes A +; + +kbdScan: EMULATION -kbdWaitLoop: +kbdScanLoop: lda KBD - bpl kbdWaitLoop + bpl kbdScanLoop sta KBDSTROBE + cmp #(8 + $80) + beq kbdScanLeftArrow + + cmp #(21 + $80) + beq kbdScanRightArrow + + cmp #(32 + $80) + beq kbdScanSpace NATIVE + +kbdScanDone: rts +kbdScanLeftArrow: + NATIVE + lda mapScrollPos + beq kbdScanDone + dec + sta mapScrollPos + bra kbdScanDone + +kbdScanRightArrow: + NATIVE + lda mapScrollPos + cmp #TERRAINWIDTH/4-80 + beq kbdScanDone + inc + sta mapScrollPos + bra kbdScanDone + +kbdScanSpace: + NATIVE + lda #1 + sta quitRequested + bra kbdScanDone + basePalette: .word $0000,$0080,$0000,$000F,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 - +mapScrollPos: ; 4-pixel columns + .word $0000 +quitRequested: + .word $0000 .include "graphics.s" .include "terrain.s" diff --git a/terrain.s b/terrain.s index f9a06f1..89cb4a5 100644 --- a/terrain.s +++ b/terrain.s @@ -5,8 +5,8 @@ ; -TERRAINWIDTH = 320 ; In pixels -MAXTERRAINHEIGHT = 80 ; In pixels +TERRAINWIDTH = 640 ; In pixels +MAXTERRAINHEIGHT = 128 ; In pixels ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrainColumn @@ -30,15 +30,23 @@ renderTerrainColumn: sta renderTerrainColumnSMC+1 pha ; Cache 16-bit VRAM pointer on the stack - lda terrainData,y + lda terrainData,y ; Cache terrain height on the stack and #$00ff - tax - inx ; Prevent x from going negative upon entry to loop + sta renderTerrainColumnHeight + ldx #0 renderTerrainColumnLoop: - dex + inx + cpx #MAXTERRAINHEIGHT beq renderTerrainColumnDone + cpx renderTerrainColumnHeight + bpl renderTerrainColumnBlack + lda #$1111 + bra renderTerrainColumnSMC + +renderTerrainColumnBlack: + lda #$0000 renderTerrainColumnSMC: sta $e19c60 @@ -53,23 +61,32 @@ renderTerrainColumnDone: pla rts - +renderTerrainColumnHeight: + .word 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrainColumns ; ; This is not fast- probably only useful for debugging ; +; Y = Start column +; +; Trashes all registers +; renderTerrainColumns: LOADPARAM24 $e1e1,$9c60 - ldy #0 + tya + clc + adc #80 + sta SCRATCHL renderTerrainColumnsLoop: jsr renderTerrainColumn iny - cpy #TERRAINWIDTH/4 + cpy SCRATCHL beq renderTerrainColumnsDone + inc PARAM24 inc PARAM24 bra renderTerrainColumnsLoop @@ -109,6 +126,6 @@ generateTerrainLoop: ; Terrain data, stored as height values 4 pixels wide terrainData: - .repeat TERRAINWIDTH/4 + .repeat TERRAINWIDTH/2 .byte 0 .endrepeat