quickdev16/snes/qd16/routines/eventroutines.asm
2009-10-16 07:25:18 +02:00

216 lines
3.2 KiB
NASM
Executable File

.include "routines/main.h"
.section "events" semifree
EventPtTable:
.dw EventRoutine0
.dw EventRoutine1
.dw EventRoutine2
.dw EventRoutine3
.dw EventRoutine4
;boot init, also debug menu check
EventRoutine0:
rep #$31
lda.w #200
sta.w GravityCutOffYPos
sep #$20
lda.b #0
sta.b ScreenBrightness
lda.b #$80
sta.l $2100
; jsr InitOam
jsr InitHdma
jsr ResetScrollOffsets
jsr InitDmaFifo
; jsr ClearColObjList
; jsr ClearZBuffer
jsr PalEffectInit
jsr ClearVRAM
jsr ClearBg3TilemapBuffer ;cls
jsr ClearBg2TilemapBuffer ;cls
jsr ClearBg1TilemapBuffer ;cls
inc.b NMIBg1UploadFlag
inc.b NMIBg2UploadFlag
inc.b NMIBg3UploadFlag
stz.b FocusScreenFlags
lda.b #0
sta.b CheckJoypadMode ;set joypad check to 8 players
lda.b #$80
sta.w IrqBrightnessIncDec
lda.b #20
sta.w MaxGravObjCount
lda.b #0 ;load bgmode config #1
jsr SetBGMode
; jsr DMATilesToVramBG3
; jsr ClearBg3TilemapBuffer ;cls
lda.b #0
jsr SpcPlaySong
stz.b LoadMenuDoInit
inc.b CurrentEvent
lda.b #13 ;window effect
jsr CreateHdmaEffect
lda.b #14 ;wavy scroll
jsr CreateHdmaEffect
rep #$31
lda.w #%00100100
ldx.w #0
ldy.w #0
jsr UploadBgObject
lda.w #%00101001+$0100
ldx.w #0
ldy.w #0
jsr UploadBgObject
lda.w #0
jsr VwfCreateTextbox
lda.w #11
jsr PalEffectCreate
lda.w #12
jsr PalEffectCreate
lda.w #$0504
sta.w SpcReportType
jsr SpcSetReportType
rts
;wait for rom upload to start
EventRoutine1:
sep #$20
lda.w Qd16Flags
lsr a
bcc EventNoRomLoad
inc.b CurrentEvent
rep #$31
lda.w #1
jsr VwfCreateTextbox ;print "loading rom"
sep #$20
EventNoRomLoad:
jsr ShakeShake
jsr QD16CommandPoll
jsr VwfHandler
jsr ProcessHdmaList
jsr PalEffectHandler
rts
;seek rom header:
EventRoutine2:
jsr QD16CheckHeaderValid
bcc SeekHeaderNotFound
rep #$31
lda.l RomHeaderSize,x ;get romsize
txy
sec
sbc.w #8
and.w #7
tax
lda.l RomSizeLUT+BaseAdress,x
sta.w Qd16Mbit
tya
bne SeekHeaderHirom
lda.w #5
jsr VwfCreateTextbox ;print lorom header
bra SeekHeaderNotFound
SeekHeaderHirom:
lda.w #6
jsr VwfCreateTextbox ;print hirom header
SeekHeaderNotFound:
jsr ShakeShake
jsr QD16CommandPoll
jsr VwfHandler
jsr ProcessHdmaList
jsr PalEffectHandler
rts
RomSizeLUT:
.db 2
.db 4
.db 8
.db 16
.db 32
.db 64
.db 0
.db 0
ShakeShake:
php
sep #$20
lda.b #$0f
sta.b ScreenBrightness
lda.l SpcReportBuffer+8
beq event1Noshake
lda.b Mosaic
clc
adc.b #$80
sta.b Mosaic
event1Noshake:
; jsr ObjectProcessor
lda.b Mosaic
and.b #$f0
beq Event1MosDec
sec
sbc.b #$10
Event1MosDec:
ora.b #%10
sta.b Mosaic
plp
rts
;wait some frames
EventRoutine3:
sep #$20
dec.w FrameWait
bne EventRoutine3Wait
lda.w EventBuffer
sta.b CurrentEvent
EventRoutine3Wait:
rts
;fade out, dont accept any new commands
EventRoutine4:
jsr VwfHandler
jsr ProcessHdmaList
jsr PalEffectHandler
rts
WaitFrameEvent:
pha
php
sep #$20
sta.w FrameWait
lda.b CurrentEvent
sta.w EventBuffer
lda.b #3
sta.b CurrentEvent
plp
pla
rts
.ends