Working terrain scrolling

This commit is contained in:
blondie7575 2017-07-30 15:43:55 -07:00
parent e7f4a0b256
commit 39395c40bb
3 changed files with 81 additions and 18 deletions

Binary file not shown.

View File

@ -30,36 +30,82 @@ mainBank2:
jsr colorFill jsr colorFill
jsr generateTerrain jsr generateTerrain
mainGameLoop:
ldy mapScrollPos
jsr renderTerrainColumns jsr renderTerrainColumns
jsr kbdWait jsr kbdScan
CLASSICVIDEO
lda quitRequested
beq mainGameLoop
CLASSICVIDEO
jml (proDOSLongJump) jml (proDOSLongJump)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; kbdWait ; kbdScan
; Waits for a keystroke ; Processes keyboard input
; ;
kbdWait: ; Trashes A
;
kbdScan:
EMULATION EMULATION
kbdWaitLoop: kbdScanLoop:
lda KBD lda KBD
bpl kbdWaitLoop bpl kbdScanLoop
sta KBDSTROBE sta KBDSTROBE
cmp #(8 + $80)
beq kbdScanLeftArrow
cmp #(21 + $80)
beq kbdScanRightArrow
cmp #(32 + $80)
beq kbdScanSpace
NATIVE NATIVE
kbdScanDone:
rts 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: basePalette:
.word $0000,$0080,$0000,$000F,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 .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 "graphics.s"
.include "terrain.s" .include "terrain.s"

View File

@ -5,8 +5,8 @@
; ;
TERRAINWIDTH = 320 ; In pixels TERRAINWIDTH = 640 ; In pixels
MAXTERRAINHEIGHT = 80 ; In pixels MAXTERRAINHEIGHT = 128 ; In pixels
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderTerrainColumn ; renderTerrainColumn
@ -30,15 +30,23 @@ renderTerrainColumn:
sta renderTerrainColumnSMC+1 sta renderTerrainColumnSMC+1
pha ; Cache 16-bit VRAM pointer on the stack pha ; Cache 16-bit VRAM pointer on the stack
lda terrainData,y lda terrainData,y ; Cache terrain height on the stack
and #$00ff and #$00ff
tax sta renderTerrainColumnHeight
inx ; Prevent x from going negative upon entry to loop ldx #0
renderTerrainColumnLoop: renderTerrainColumnLoop:
dex inx
cpx #MAXTERRAINHEIGHT
beq renderTerrainColumnDone beq renderTerrainColumnDone
cpx renderTerrainColumnHeight
bpl renderTerrainColumnBlack
lda #$1111 lda #$1111
bra renderTerrainColumnSMC
renderTerrainColumnBlack:
lda #$0000
renderTerrainColumnSMC: renderTerrainColumnSMC:
sta $e19c60 sta $e19c60
@ -53,23 +61,32 @@ renderTerrainColumnDone:
pla pla
rts rts
renderTerrainColumnHeight:
.word 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderTerrainColumns ; renderTerrainColumns
; ;
; This is not fast- probably only useful for debugging ; This is not fast- probably only useful for debugging
; ;
; Y = Start column
;
; Trashes all registers
;
renderTerrainColumns: renderTerrainColumns:
LOADPARAM24 $e1e1,$9c60 LOADPARAM24 $e1e1,$9c60
ldy #0 tya
clc
adc #80
sta SCRATCHL
renderTerrainColumnsLoop: renderTerrainColumnsLoop:
jsr renderTerrainColumn jsr renderTerrainColumn
iny iny
cpy #TERRAINWIDTH/4 cpy SCRATCHL
beq renderTerrainColumnsDone beq renderTerrainColumnsDone
inc PARAM24 inc PARAM24
inc PARAM24 inc PARAM24
bra renderTerrainColumnsLoop bra renderTerrainColumnsLoop
@ -109,6 +126,6 @@ generateTerrainLoop:
; Terrain data, stored as height values 4 pixels wide ; Terrain data, stored as height values 4 pixels wide
terrainData: terrainData:
.repeat TERRAINWIDTH/4 .repeat TERRAINWIDTH/2
.byte 0 .byte 0
.endrepeat .endrepeat