2017-07-30 18:54:37 +00:00
|
|
|
;
|
|
|
|
; terrain
|
|
|
|
;
|
|
|
|
; Created by Quinn Dunki on 7/29/17
|
|
|
|
;
|
|
|
|
|
|
|
|
|
2017-07-30 22:43:55 +00:00
|
|
|
TERRAINWIDTH = 640 ; In pixels
|
|
|
|
MAXTERRAINHEIGHT = 128 ; In pixels
|
2017-07-30 18:54:37 +00:00
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
; 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
|
|
|
|
|
2017-07-30 22:43:55 +00:00
|
|
|
lda terrainData,y ; Cache terrain height on the stack
|
2017-07-30 18:54:37 +00:00
|
|
|
and #$00ff
|
2017-07-30 22:43:55 +00:00
|
|
|
sta renderTerrainColumnHeight
|
|
|
|
ldx #0
|
2017-07-30 18:54:37 +00:00
|
|
|
|
|
|
|
renderTerrainColumnLoop:
|
2017-07-30 22:43:55 +00:00
|
|
|
inx
|
|
|
|
cpx #MAXTERRAINHEIGHT
|
2017-07-30 18:54:37 +00:00
|
|
|
beq renderTerrainColumnDone
|
2017-07-30 22:43:55 +00:00
|
|
|
cpx renderTerrainColumnHeight
|
|
|
|
bpl renderTerrainColumnBlack
|
|
|
|
|
2017-07-30 18:54:37 +00:00
|
|
|
lda #$1111
|
2017-07-30 22:43:55 +00:00
|
|
|
bra renderTerrainColumnSMC
|
|
|
|
|
|
|
|
renderTerrainColumnBlack:
|
|
|
|
lda #$0000
|
2017-07-30 18:54:37 +00:00
|
|
|
|
|
|
|
renderTerrainColumnSMC:
|
|
|
|
sta $e19c60
|
|
|
|
pla
|
|
|
|
sec
|
|
|
|
sbc #160
|
|
|
|
sta renderTerrainColumnSMC+1
|
|
|
|
pha
|
|
|
|
bra renderTerrainColumnLoop
|
|
|
|
|
|
|
|
renderTerrainColumnDone:
|
|
|
|
pla
|
|
|
|
rts
|
|
|
|
|
2017-07-30 22:43:55 +00:00
|
|
|
renderTerrainColumnHeight:
|
|
|
|
.word 0
|
2017-07-30 18:54:37 +00:00
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
; renderTerrainColumns
|
|
|
|
;
|
|
|
|
; This is not fast- probably only useful for debugging
|
|
|
|
;
|
2017-07-30 22:43:55 +00:00
|
|
|
; Y = Start column
|
|
|
|
;
|
|
|
|
; Trashes all registers
|
|
|
|
;
|
2017-07-30 18:54:37 +00:00
|
|
|
|
|
|
|
renderTerrainColumns:
|
|
|
|
LOADPARAM24 $e1e1,$9c60
|
2017-07-30 22:43:55 +00:00
|
|
|
tya
|
|
|
|
clc
|
|
|
|
adc #80
|
|
|
|
sta SCRATCHL
|
2017-07-30 18:54:37 +00:00
|
|
|
|
|
|
|
renderTerrainColumnsLoop:
|
|
|
|
jsr renderTerrainColumn
|
|
|
|
iny
|
2017-07-30 22:43:55 +00:00
|
|
|
cpy SCRATCHL
|
2017-07-30 18:54:37 +00:00
|
|
|
beq renderTerrainColumnsDone
|
2017-07-30 22:43:55 +00:00
|
|
|
|
2017-07-30 18:54:37 +00:00
|
|
|
inc PARAM24
|
|
|
|
inc PARAM24
|
|
|
|
bra renderTerrainColumnsLoop
|
|
|
|
|
|
|
|
renderTerrainColumnsDone:
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
; generateTerrain
|
|
|
|
;
|
|
|
|
; Trashes A and Y
|
|
|
|
;
|
|
|
|
generateTerrain:
|
|
|
|
ldy #0
|
|
|
|
lda #terrainData
|
|
|
|
sta SCRATCHL
|
|
|
|
|
|
|
|
generateTerrainLoop:
|
2017-07-30 19:16:19 +00:00
|
|
|
|
|
|
|
phy
|
|
|
|
tya ; Pull an interesting value out of the sine table
|
|
|
|
and #$00ff
|
|
|
|
tay
|
|
|
|
lda sineTable,y
|
|
|
|
and #$7f7f
|
|
|
|
ply
|
|
|
|
|
2017-07-30 18:54:37 +00:00
|
|
|
sta (SCRATCHL),y
|
|
|
|
iny
|
|
|
|
cpy #TERRAINWIDTH/4
|
|
|
|
bne generateTerrainLoop
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
; Terrain data, stored as height values 4 pixels wide
|
|
|
|
|
|
|
|
terrainData:
|
2017-07-30 22:43:55 +00:00
|
|
|
.repeat TERRAINWIDTH/2
|
2017-07-30 18:54:37 +00:00
|
|
|
.byte 0
|
|
|
|
.endrepeat
|