joeylib2/tools/iigsStart/iigsStartQuit.s

36 lines
1.3 KiB
ArmAsm

; GS/OS inline-call stubs for iigsStart.
;
; Same shape as iigsQuitGS in src/iigs/joeyDraw.s and for the same reason:
; pure constants, no relocations, so the cross-bank DBR trap that bit the
; first attempt at that routine cannot apply here either. Each parameter
; block lives at a FIXED address in the $E1:9DC8-$9DFD scratch window and
; the C caller fills it in before calling.
; iigsStartSetPrefix -- SetPrefixGS ($2009), parm block at $E1:9DE4.
;
; GS/OS does NOT point prefix 0 at the program named in a QuitGS launch: it
; was measured still pointing at the BOOT volume, so the launched example's
; own relative fopen()s missed. That is not cosmetic -- JoeyLib loads the
; NTP replayer as bare "ntpplayer", and when that read fails jlpAudioInit
; bails before ntpArm(), leaving the sound vector at its ROM default and
; the application completely silent.
.section .text.iigsStartSetPrefix,"ax"
.globl iigsStartSetPrefix
iigsStartSetPrefix:
jsl 0xE100A8
.word 0x2009
.long 0x00E19DE4
rtl
; iigsStartQuit -- QuitGS ($2029), parm block at $E1:9DCC.
;
; Unlike jlpShutdown's pCount=0 "quit to my parent", this is called with
; pCount=2 and a pathname, which tells GS/OS to LAUNCH that program in our
; place. On success it never returns.
.section .text.iigsStartQuit,"ax"
.globl iigsStartQuit
iigsStartQuit:
jsl 0xE100A8
.word 0x2029
.long 0x00E19DCC
rtl