2023-05-22 16:17:35 +02:00
|
|
|
;--------------------------------------------------------------------
|
|
|
|
; Install a script
|
|
|
|
;
|
|
|
|
; Routines of the script will be executed via CheckScript once the
|
|
|
|
; given relative frame numbers (from the point in time this routine
|
|
|
|
; is called) have been reached (or passed).
|
|
|
|
;
|
|
|
|
; A script is built in this way:
|
|
|
|
; dc.w <framenumber>,<routinetocall>-*
|
|
|
|
; dc.w <framenumber>,<routinetocall>-*
|
|
|
|
;
|
|
|
|
; The script is terminated with a zero word.
|
|
|
|
;
|
|
|
|
; In : a0 = script pointer
|
|
|
|
;
|
|
|
|
fw_InstallScript:
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 10,<"%d: Script at %p installed">,fw_FrameCounter-2(a6),a0
|
2023-05-22 16:17:35 +02:00
|
|
|
move.l a0,fw_ScriptPointer(a6)
|
|
|
|
move.w fw_FrameCounter(a6),fw_ScriptFrameOffset(a6)
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
; Checks the script for execution
|
|
|
|
;
|
|
|
|
; Checkes if a script is installed and another cue is due to the
|
|
|
|
; current frame counter, executes it and advances the script pointer.
|
|
|
|
;
|
|
|
|
fw_CheckScript:
|
|
|
|
move.l fw_ScriptPointer(a6),d0
|
|
|
|
bne.s .cont
|
|
|
|
rts
|
|
|
|
.cont move.l d0,a0
|
|
|
|
move.w (a0)+,d0
|
|
|
|
add.w fw_ScriptFrameOffset(a6),d0
|
|
|
|
cmp.w fw_FrameCounter(a6),d0
|
|
|
|
bgt.s .exit
|
|
|
|
move.w (a0)+,d0
|
|
|
|
move.l a0,fw_ScriptPointer(a6)
|
|
|
|
pea -2(a0,d0.w)
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 10,<"%d: Script hit %p">,fw_FrameCounter-2(a6),(sp)
|
2023-05-22 16:17:35 +02:00
|
|
|
tst.w (a0)
|
|
|
|
bne.s .exit
|
|
|
|
PUTMSG 10,<"Script terminated.">
|
|
|
|
clr.l fw_ScriptPointer(a6)
|
|
|
|
.exit rts
|
|
|
|
|
|
|
|
IF FW_MUSIC_SUPPORT
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
; Install a music-frame based script
|
|
|
|
;
|
2024-09-15 17:43:33 +02:00
|
|
|
; Routines of the script will be executed via CheckMusicScript once
|
2023-05-22 16:17:35 +02:00
|
|
|
; the given absolute music frame numbers have been reached (or passed).
|
|
|
|
;
|
|
|
|
; A script is built in this way:
|
|
|
|
; dc.w <musicframenumber>,<routinetocall>-*
|
|
|
|
; dc.w <musicframenumber>,<routinetocall>-*
|
|
|
|
;
|
|
|
|
; The script is terminated with a zero word.
|
|
|
|
;
|
|
|
|
; In : a0 = script pointer
|
|
|
|
;
|
|
|
|
fw_InstallMusicScript:
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 10,<"%d: MusicScript at %p installed">,fw_FrameCounter-2(a6),a0
|
2023-05-22 16:17:35 +02:00
|
|
|
move.l a0,fw_MusicScriptPointer(a6)
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
; Checks the music script for execution
|
|
|
|
;
|
|
|
|
; Checkes if a music script is installed and another cue is due to the
|
|
|
|
; current frame counter, executes it and advances the script pointer.
|
|
|
|
;
|
|
|
|
fw_CheckMusicScript:
|
|
|
|
move.l fw_MusicScriptPointer(a6),d0
|
|
|
|
bne.s .cont
|
|
|
|
rts
|
|
|
|
.cont move.l d0,a0
|
|
|
|
move.w (a0)+,d0
|
|
|
|
cmp.w fw_MusicFrameCount(a6),d0
|
|
|
|
bgt.s .exit
|
|
|
|
move.w (a0)+,d0
|
|
|
|
move.l a0,fw_MusicScriptPointer(a6)
|
|
|
|
pea -2(a0,d0.w)
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 10,<"%d: MusicScript (%d) hit %p">,fw_FrameCounter-2(a6),fw_MusicFrameCount-2(a6),(sp)
|
2023-05-22 16:17:35 +02:00
|
|
|
tst.w (a0)
|
|
|
|
bne.s .exit
|
|
|
|
PUTMSG 10,<"MusicScript terminated.">
|
|
|
|
clr.l fw_MusicScriptPointer(a6)
|
|
|
|
.exit rts
|
|
|
|
ENDC
|