chrisly42
9c48c11cd1
- Bugfix: WaitForFrame was completely broken. Now also caters for race-condition that would have waited one extra frame. - Bugfix: InitPart would overwrite innocent memory (reported by Gigabates and Losso) - Bugfix: Palette LERP had wrong bias. - Removed extra paths in include statement, use default include paths instead - Added Raspberry Casket no-jitter background calc mode (FW_MUSIC_PLAYER_CHOICE = 6) - Updated Raspberry Casket to V2.0 presto branch (WIP) - Removed fw_FrameCounterLong, use fw_FrameCounter-2 for debug purposes - Support for blue noise palette LERPing (like in Is Real). Provide your own blue noise table (4 KB), stuff it into fw_BlueNoiseTablePtr, set FW_PALETTE_LERP_SUPPORT to 2 - Music tick routine is now replaceable during runtime (fw_MusicTickRoutine) - Support for softints and audio interrupts - LMB exit can also be disabled dynamically when using FW_LMB_EXIT_SUPPORT = 2 and fw_DisableLMBExit != 0 - Added LSP Micro support and LSP Nano (custom format that uses note pitches instead of periods) - Minor other things
439 lines
12 KiB
NASM
439 lines
12 KiB
NASM
; Storyboard:
|
|
; Partname | Runtime | Pt | Chip Hunk + Dynamic = Total | Fast Hunk + Dynamic = Total | Disk Space | LOC
|
|
; Gotham | 0:13.5 | -- | 9 KB 28 KB 37 KB | 3 KB 16 KB 19 KB | 4+17 KB | 1200
|
|
; -----------------------------------------------------------------------------------------------------------
|
|
; Music | 2:35 | 19 | 156 KB | 15 KB | 91 KB |
|
|
; Bulb | 0:59 | 0 | 54 KB 177 KB 231 KB | 58 KB 194 KB 252 KB | 59 KB | 3700
|
|
; STHam | 0:28 | 7 | 87 KB 93 KB 180 KB | 9 KB 0 KB 9 KB | 70 KB | 1800
|
|
; Kaleidoscope | 0:54 |10.5| 148 KB 143 KB 291 KB | 19 KB 394 KB 413 KB | 150 KB | 6400
|
|
; Hexagon | 0:13 |17.5| 4 KB <64 KB <68 KB | 5 KB 18 KB 23 KB | 4 KB | 900
|
|
; -----------------------------------------------------------------------------------------------------------
|
|
; Music 2 | 2:35 | 21 | 172 KB | 22 KB | 123 KB |
|
|
; Rubbercube | 0:24 | 0 | 0 KB 291 KB 291 KB | 11 KB 44 KB 55 KB | 5 KB | 3000
|
|
; Virgillbars | 0:52 | 4 | 15 KB 204 KB 208 KB | 11 KB 244 KB 255 KB | 14 KB | 3300
|
|
; Blend | 1:15 | 11 | 43 KB 192 KB 234 KB | 25 KB 401 KB 426 KB | 50+xx KB | 5800
|
|
; -----------------------------------------------------------------------------------------------------------
|
|
; Music 3 | 1:45 | 14 | 45 KB | 12 KB | 24 KB |
|
|
; Endpart | | 0 | 5 KB 159 KB 164 KB | 2 KB 2 KB 4 KB | 3 KB | 900
|
|
;
|
|
|
|
trackmo:
|
|
PUTMSG 10,<"%d: Trackmo start!">,fw_FrameCounter-2(a6)
|
|
.restart
|
|
btst #6,$bfe001
|
|
bne.s .part1
|
|
lea .secondmusicandgouraudloadinghook(pc),a0
|
|
move.l a0,fw_PrePartLaunchHook(a6)
|
|
|
|
lea .gotham(pc),a0
|
|
CALLFW ExecuteNextPart
|
|
|
|
bra .part2
|
|
|
|
.part1
|
|
lea .gotham(pc),a0
|
|
lea .musicandbulbloadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
lea .bulb(pc),a0
|
|
lea .sthamloadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
lea .stham(pc),a0
|
|
lea .kaleidoscopeloadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
move.l #256*256*2,d0
|
|
CALLFW AllocFast
|
|
move.l a0,fw_GlobalUserData(a6)
|
|
PUTMSG 10,<"Kaleidoscope pattern %p">,a0
|
|
|
|
; this memory should not go away!
|
|
CALLFW PushMemoryState
|
|
|
|
lea .kaleidoscope(pc),a0
|
|
lea .hexagonpreploadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
lea .hexagon(pc),a0
|
|
lea .secondmusicloadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
CALLFW StopMusic
|
|
|
|
; High/Top memory
|
|
CALLFW FlipAllocationDirection
|
|
CALLFW PopMemoryState
|
|
CALLFW DropCurrentMemoryAllocations
|
|
|
|
lea .second_music_data(pc),a0
|
|
CALLFW FindFile
|
|
move.l de_MemorySize(a1),d0
|
|
; allocate LSP space
|
|
CALLFW AllocFast
|
|
move.l a0,fw_MusicData(a6)
|
|
|
|
; check how much ram we need for samples
|
|
lea .second_music_samples(pc),a0
|
|
CALLFW FindFile
|
|
move.l de_MemorySize(a1),d0
|
|
|
|
; allocate sample space
|
|
CALLFW AllocChip
|
|
move.l a0,fw_MusicSamples(a6)
|
|
|
|
; this memory should not go away!
|
|
CALLFW PushMemoryState
|
|
|
|
lea .decrunch2ndmusic(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
|
|
lea .gouraud(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
; Bottom/Low memory again
|
|
CALLFW FlipAllocationDirection
|
|
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW WaitUntilTaskFinished
|
|
|
|
; Free music packed
|
|
CALLFW PopMemoryState
|
|
; Free kaleidoscope memory
|
|
CALLFW PopMemoryState
|
|
CALLFW DropCurrentMemoryAllocations
|
|
|
|
.part2
|
|
lea .gouraud(pc),a0
|
|
lea .virgillbarsloadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
lea .virgillbars(pc),a0
|
|
lea .blendloadinghook(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
lea .blend(pc),a0
|
|
lea .unloadpreloaded(pc),a1
|
|
bsr .executenextwithhook
|
|
|
|
CALLFW FlipAllocationDirection
|
|
CALLFW PopMemoryState
|
|
CALLFW DropCurrentMemoryAllocations
|
|
CALLFW FlipAllocationDirection
|
|
CALLFW DropCurrentMemoryAllocations
|
|
|
|
.endpartpart
|
|
lea .end_music_data(pc),a0
|
|
CALLFW LoadAndDecrunchFile
|
|
move.l a0,fw_MusicData(a6)
|
|
|
|
lea .end_music_samples(pc),a0
|
|
CALLFW LoadAndDecrunchFile
|
|
move.l a0,fw_MusicSamples(a6)
|
|
|
|
CALLFW PushMemoryState
|
|
|
|
lea .endpart(pc),a0
|
|
CALLFW ExecuteNextPart
|
|
|
|
CALLFW StopMusic
|
|
|
|
CALLFW PopMemoryState
|
|
CALLFW DropCurrentMemoryAllocations
|
|
|
|
clr.w fw_FrameCounter(a6)
|
|
bra .restart
|
|
|
|
.executenextwithhook
|
|
move.l a1,fw_PrePartLaunchHook(a6)
|
|
CALLFW ExecuteNextPart
|
|
rts
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
.musicandbulbloadinghook
|
|
lea .psenough(pc),a0
|
|
CALLFW FindFile
|
|
move.l de_DiskLength(a1),d0
|
|
PUSHM a1
|
|
CALLFW AllocFast
|
|
POPM
|
|
move.l a0,fw_GlobalBonusData+gbd_PsPackedBuffer(a6)
|
|
move.l de_MemorySize(a1),d0
|
|
CALLFW AllocChip
|
|
move.l a0,fw_GlobalUserData(a6)
|
|
|
|
lea .loadmusicandbulb(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.sthamloadinghook
|
|
bsr.s .unloadpreloaded
|
|
|
|
lea .loadstham(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.kaleidoscopeloadinghook
|
|
lea .loadkaleidoscope(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.hexagonpreploadinghook
|
|
bsr.s .unloadpreloaded
|
|
|
|
lea .loadhexagon(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.secondmusicloadinghook
|
|
bsr.s .unloadpreloaded
|
|
|
|
lea .loadsecondmusic(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.unloadpreloaded
|
|
CALLFW FlipAllocationDirection
|
|
CALLFW DropCurrentMemoryAllocations
|
|
CALLFW FlipAllocationDirection
|
|
rts
|
|
|
|
.virgillbarsloadinghook
|
|
bsr.s .unloadpreloaded
|
|
|
|
lea .loadvirgillbars(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.blendloadinghook
|
|
bsr.s .unloadpreloaded
|
|
|
|
lea .loadblend(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.endpartloadinghook
|
|
bsr.s .unloadpreloaded
|
|
|
|
lea .loadendpart(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
.secondmusicandgouraudloadinghook
|
|
lea .psenough(pc),a0
|
|
CALLFW FindFile
|
|
move.l de_DiskLength(a1),d0
|
|
PUSHM a1
|
|
CALLFW AllocFast
|
|
POPM
|
|
move.l a0,fw_GlobalBonusData+gbd_PsPackedBuffer(a6)
|
|
move.l de_MemorySize(a1),d0
|
|
CALLFW AllocChip
|
|
move.l a0,fw_GlobalUserData(a6)
|
|
|
|
lea .loadmusicandgouraud(pc),a0
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
CALLFW AddTask
|
|
rts
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
.loadmusicandbulb
|
|
lea .psenough(pc),a0
|
|
CALLFW FindFile
|
|
PUSHM a1
|
|
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
|
|
CALLFW LoadFileToBuffer
|
|
POPM
|
|
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
|
|
move.l fw_GlobalUserData(a6),a2
|
|
CALLFW DecrunchToBuffer
|
|
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .first_music_data(pc),a0
|
|
CALLFW LoadAndDecrunchFile
|
|
move.l a0,fw_MusicData(a6)
|
|
|
|
lea .first_music_samples(pc),a0
|
|
CALLFW LoadAndDecrunchFile
|
|
move.l a0,fw_MusicSamples(a6)
|
|
|
|
; this memory should not go away!
|
|
CALLFW PushMemoryState
|
|
|
|
lea .bulb(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadstham
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .stham(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
lea .hamphrey(pc),a0
|
|
CALLFW LoadFile
|
|
move.l a0,fw_GlobalUserData(a6)
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadkaleidoscope
|
|
CALLFW Yield
|
|
tst.l fw_GlobalUserData(a6)
|
|
bne.s .loadkaleidoscope
|
|
|
|
CALLFW FlipAllocationDirection
|
|
CALLFW DropCurrentMemoryAllocations
|
|
|
|
lea .kaleidoscope(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadhexagon
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .hexagon(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadsecondmusic
|
|
lea .second_music_data(pc),a0
|
|
CALLFW LoadFile
|
|
move.l a0,fw_GlobalBonusData+gbd_LSPPackedBuffer(a6)
|
|
|
|
lea .second_music_samples(pc),a0
|
|
CALLFW LoadFile
|
|
move.l a0,fw_GlobalBonusData+gbd_SamplePackedBuffer(a6)
|
|
|
|
CALLFW PushMemoryState
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.decrunch2ndmusic
|
|
lea .second_music_data(pc),a0
|
|
CALLFW FindFile
|
|
move.l fw_GlobalBonusData+gbd_LSPPackedBuffer(a6),a0
|
|
move.l fw_MusicData(a6),a2
|
|
CALLFW DecrunchToBuffer
|
|
|
|
lea .second_music_samples(pc),a0
|
|
CALLFW FindFile
|
|
move.l fw_GlobalBonusData+gbd_SamplePackedBuffer(a6),a0
|
|
move.l fw_MusicSamples(a6),a2
|
|
CALLFW DecrunchToBuffer
|
|
rts
|
|
|
|
.loadvirgillbars
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .virgillbars(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadendpart
|
|
CALLFW Yield
|
|
tst.l fw_GlobalUserData(a6)
|
|
beq.s .loadendpart
|
|
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .endpart(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadmusicandgouraud
|
|
lea .psenough(pc),a0
|
|
CALLFW FindFile
|
|
PUSHM a1
|
|
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
|
|
CALLFW LoadFileToBuffer
|
|
POPM
|
|
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
|
|
move.l fw_GlobalUserData(a6),a2
|
|
CALLFW DecrunchToBuffer
|
|
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .second_music_data(pc),a0
|
|
CALLFW LoadAndDecrunchFile
|
|
move.l a0,fw_MusicData(a6)
|
|
|
|
lea .second_music_samples(pc),a0
|
|
CALLFW LoadAndDecrunchFile
|
|
move.l a0,fw_MusicSamples(a6)
|
|
|
|
; this memory should not go away!
|
|
CALLFW PushMemoryState
|
|
|
|
lea .gouraud(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.loadblend
|
|
CALLFW FlipAllocationDirection
|
|
|
|
lea .blend(pc),a0
|
|
CALLFW PreloadPart
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
rts
|
|
|
|
.gotham dc.b "Gotham",0
|
|
.bulb dc.b "Bulb",0
|
|
.kaleidoscope
|
|
dc.b "Kaleidoscope",0
|
|
.hexagon
|
|
dc.b "Hexagon",0
|
|
.gouraud
|
|
dc.b "Rubbercube",0
|
|
.virgillbars
|
|
dc.b "VirgillBars",0
|
|
.blend
|
|
dc.b "Blend",0
|
|
.stham
|
|
dc.b "STHam",0
|
|
.endpart
|
|
dc.b "Endpart",0
|
|
.psenough
|
|
dc.b "HamTech.smp",0
|
|
.hamphrey
|
|
dc.b "HAMphrey.raw",0
|
|
.first_music_data
|
|
dc.b "1st.lsmus",0
|
|
.first_music_samples
|
|
dc.b "1st.lsbnk",0
|
|
.second_music_data
|
|
dc.b "2nd.lsmus",0
|
|
.second_music_samples
|
|
dc.b "2nd.lsbnk",0
|
|
.end_music_data
|
|
dc.b "End.lsmus",0
|
|
.end_music_samples
|
|
dc.b "End.lsbnk",0
|
|
even
|
|
.end |