Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- initSVT:
- lda.b #PT_NULL
- pha
- sta.l $7E5410
- ldx.w #SVT_LOC
- ldy.w #SVT_LOC + 1
- lda.b #MAX_SVT_ENTRIES * SVT_ENTRY_SIZE - 2
- rep #$30
- pha
- mvn $7E=$7E
- pla
- plb
- sep #$20
- rts
- allocateSVTEntry:
- phx
- phy
- pha
- lda.b #$7E
- pha
- plb
- ldx.w #0
- ldy.w #0
- phy
- ldy.w #SVT_LOC
- sty.w tempWord
- ply
- lda (ADTI),y
- pha
- -
- cpy.w #MAX_SVT_ENTRIES
- beq ++
- lda (tempWord)
- beq +
- iny
- inx #SVT_ENTRY_SIZE
- inc $04
- inc $04
- inc $04
- inc $04
- inc $04
- bra -
- +
- pla
- sta.l SVT_LOC,x
- sep #$10
- phy
- phx
- tyx
- lda.l SVTCharTable,x
- ldy.b #actor.charAddr
- sta (ADTI),y
- plx
- rep #$20
- ply
- phx
- tya
- asl
- tax
- lda.l SVTSizeTable,x
- ldy.b #actor.vramAddr
- sta (ADTI),y
- plx
- pha
- inx
- sta.l SVT_LOC,x
- sep #$20
- rep #$10
- jsr f_resetADB
- lda.b #$80
- sta.w REG_VMAIN
- rep #$20
- pla
- lsr
- tax
- xba
- sep #$20
- stx.w REG_VMADDL
- lda.b #$01
- sta.w REG_DMAP0
- lda.b #$18
- sta.w REG_BBAD0
- pla
- ply
- plx
- stx.w REG_A1T0L
- sta.w REG_A1B0
- sty.w REG_DAS0L
- lda.b #$01
- sta.w REG_MDMAEN
- rts
- +
- ply
- plx
- pla
- rts
- renderOAM:
- pha
- plb
- sta.b tempByte
- stx.w tempWord
- lda (tempWord)
- pha
- inc tempWord
- lda.b #$7E
- pha
- plb
- sep #$10
- ldx.b #0
- ldy.b #MAX_ST_ENTRIES
- findFreeSTSlot:
- cpy.b #0
- beq ++
- lda ST_LOC,x
- beq +
- inx
- dey
- bra findFreeSTSlot
- +
- pla
- dec
- tay
- phy
- phx
- -
- cpy.b #0
- beq allocateSTSlots
- inx
- lda ST_LOC,x
- bne moveToNextSlot
- dey
- bra -
- //; size does not match slot count
- moveToNextSlot:
- inx
- ply
- bra findFreeSTSlot
- allocateSTSlots:
- plx //; get starting allocation index
- stx.b sprCallback
- pla
- clc
- adc.b #1 //; get count + 1
- tay
- sty.b sprCallback+2
- ldy.b #actor.x
- lda (ADTI),y
- pha
- iny
- lda (ADTI),y
- pha
- ldy.b #actor.SPTID
- lda (ADTI),y
- pha
- rep #$20
- ldy.b #actor.vramAddr
- lda (ADTI),y
- pha
- xba
- sep #$20
- ldy.b #actor.charAddr
- lda (ADTI),y
- pha
- lda.b tempByte
- pha
- plb
- ldy.b sprCallback+2
- parseSTDefinitions:
- cpy.b #0
- beq +
- jsr parseSTDef
- inc sprCallback
- bra parseSTDefinitions
- //; time to clean up our mess
- +
- rep #$20
- pla
- pla
- pla
- sep #$20
- rep #$10
- lda.b #0
- pha
- plb
- rts
- parseSTDef:
- phb
- phy
- ldx.b #LAST_META_ENTRY
- txy
- dey
- -
- cpx.b #0
- beq plotOAMEntry
- lda (tempWord),y
- pha
- dex
- dey
- bra -
- plotOAMEntry:
- lda.b #MAX_ST_ENTRIES-1
- sbc.b sprCallback
- sta.b tempByte
- rep #$20
- asl
- asl
- clc
- adc.w #OAMT_LOC
- sta.w tempLong
- sta.w $0100
- sep #$20
- lda.b #0
- tay
- pha
- plb
- xba
- pla //; X position
- adc $0E,s
- sta [tempLong],y
- iny
- pla //; Y position
- adc $0C,s
- sta [tempLong],y
- iny
- pla //; size
- adc $0A,s
- sta sprCallback+2
- pla //; char
- adc $08,s
- sta [tempLong],y
- iny
- pla //; palette
- adc $06,s
- sta [tempLong],y
- lda.b tempByte
- tax
- lsr
- lsr
- tay
- txa
- and.b #3
- asl
- tax
- lda oamHighTable,x
- eor.b #$FF
- and OAM_HIGH,y
- phx
- ldx.b sprCallback+2
- beq +
- plx
- inx
- ora oamHighTable,x
- bra ++
- +
- plx
- +
- sta OAM_HIGH,y
- ply
- dey
- lda.b tempWord
- clc
- adc.b #5
- sta.b tempWord
- plb
- rts
- macro defineMacroSprite(X, Y, SIZE, TILE, FLAG) {
- db {X}
- db {Y}
- if {SIZE} == OBJ_LARGE {
- db $01
- } else {
- db $00
- }
- db {TILE}
- db {FLAG}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement