GSCats/terrain.s

106 lines
1.6 KiB
ArmAsm
Raw Normal View History

;
; terrain
;
; Created by Quinn Dunki on 7/29/17
;
TERRAINWIDTH = 320 ; In pixels
MAXTERRAINHEIGHT = 80 ; In pixels
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderTerrainColumn
;
; This is not fast- probably only useful for debugging
;
; Y = Index into height data
; PARAM24 = 24-bit pointer to bottom of column in VRAM
;
; Trashes A and X
renderTerrainColumn:
phy
BITS8
lda PARAM24+2
sta renderTerrainColumnSMC+3
BITS16
ply
lda PARAM24
sta renderTerrainColumnSMC+1
pha ; Cache 16-bit VRAM pointer on the stack
lda terrainData,y
and #$00ff
tax
renderTerrainColumnLoop:
dex
beq renderTerrainColumnDone
lda #$1111
renderTerrainColumnSMC:
sta $e19c60
pla
sec
sbc #160
sta renderTerrainColumnSMC+1
pha
bra renderTerrainColumnLoop
renderTerrainColumnDone:
pla
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderTerrainColumns
;
; This is not fast- probably only useful for debugging
;
renderTerrainColumns:
LOADPARAM24 $e1e1,$9c60
ldy #0
renderTerrainColumnsLoop:
jsr renderTerrainColumn
iny
cpy #TERRAINWIDTH/4
beq renderTerrainColumnsDone
inc PARAM24
inc PARAM24
bra renderTerrainColumnsLoop
renderTerrainColumnsDone:
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; generateTerrain
;
; Trashes A and Y
;
generateTerrain:
ldy #0
lda #terrainData
sta SCRATCHL
lda #MAXTERRAINHEIGHT
generateTerrainLoop:
sta (SCRATCHL),y
iny
cpy #TERRAINWIDTH/4
bne generateTerrainLoop
rts
; Terrain data, stored as height values 4 pixels wide
terrainData:
.repeat TERRAINWIDTH/4
.byte 0
.endrepeat