/* * NS3.1 BROKEN ASSEMBLER NOTE: There are several instances of * displacements in our dispatch tables * where we use ":w" instead of ":b" because * the NS3.1 assembler botches. It's not worth * reverting once they fix. Who cares? * [In addition to :w I had to move the tables * forward] */ .text .ascii "Copyright 1992 by Abacus Research and Development, Inc.\ All rights reserved." .ascii "$Id: stubs.s,v 2.5 1994/12/19 15:32:39 ctm Exp $\0" .even .globl __GetDefaultStartup __GetDefaultStartup: movel #-1, a0@ moveb #-33, a0@(3) rts .globl __SetDefaultStartup __SetDefaultStartup: rts .globl __GetVideoDefault __GetVideoDefault: clrb a0@ moveb #-56, a0@(1) rts .globl __SetVideoDefault __SetVideoDefault: rts .globl __GetOSDefault __GetOSDefault: clrb a0@ moveb #1, a0@(1) rts .globl __SetOSDefault __SetOSDefault: rts .globl __SlotVInstall __SlotVInstall: movel d0, sp@- movel a0, sp@- jsr _SlotVInstall addql #8, sp rts .globl __SlotVRemove __SlotVRemove: movel d0, sp@- movel a0, sp@- jsr _SlotVInstall addql #8, sp rts .globl __SwapMMUMode __SwapMMUMode: clrb d0 addqb #1, d0 moveb d0, _MMU32Bit rts .globl __Launch __Launch: clrl sp@- /* should have vrefnum */ movel a0@, sp@- jsr _Launch addql #8, sp /* shouldn't get here */ rts .globl __Chain __Chain: clrl sp@- /* should have vrefnum */ movel a0@, sp@- jsr _Chain addql #8, sp /* shouldn't get here */ rts .globl _IMVI_LowerText _IMVI_LowerText: movel #-192, d0 rts .globl __SCSIDispatch __SCSIDispatch: movel sp@, sp@(2) /* blast selector */ addql #2, sp movew #7, d0 /* scMgrBusyErr */ movew d0, sp@(4) rts .globl __LoadSeg __LoadSeg: link a6, #0 moveml d0/d1/a0/a1, sp@- movew a6@(8), d0 movel d0, sp@- jbsr _C_LoadSeg addql #4, sp subl #6, a6@(4) moveml sp@+, d0/d1/a0/a1 unlk a6 rtd #2 .globl _zerod0SetCtlValue _zerod0SetCtlValue: link a6, #0 movew a6@(8), d0 movel d0, sp@- movel a6@(10), sp@- jbsr _C_SetCtlValue unlk a6 clrl d0 rtd #6 .globl __HWPriv __HWPriv: movel a0, sp@- movel d0, sp@- jbsr _HWPriv addql #8, sp /* pop our args */ rts .globl __ResourceStub __ResourceStub: moveml d0/d1/d2/a1, sp@- movel a2, sp@- movel a4, sp@- jsr _ROMlib_mgetres2 addql #8, sp movel d0, a0 moveml sp@+, d0/d1/d2/a1 rts .globl _P_WackyQD32Trap _P_WackyQD32Trap: .word 0x4AFC .globl __UNKNOWN __UNKNOWN: .word 0x4AFC .globl __CountADBs __CountADBs: clrb d0 rts .globl __GetIndADB .globl __GetADBInfo .globl __SetADBInfo .globl __ADBReInit .globl __ADBOp .globl __DrvrInstall /* Not Supported */ .globl __DrvrRemove /* Not Supported */ .globl __RDrvrInstall /* Not Supported */ __GetIndADB: __GetADBInfo: __SetADBInfo: __ADBOp: __DrvrInstall: __DrvrRemove: __RDrvrInstall: moveql #-1, d0 __ADBReInit: rts .globl ___GetResource ___GetResource: link a6, #0 clrl sp@- /* room for the return value */ movel a6@(10), sp@- movew a6@(8), sp@- jbsr _P_GetResource movel sp@+, a6@(14) /* move return value to proper place */ clrl d0 /* for Excel 4.0 Help subsystem, no shit! */ unlk a6 rtd #6 .globl _PaletteDispatch _PaletteDispatch: cmpb #0x19, d0 bls 2f 1: .word 0x4AFC 2: subql #4, sp movew d0, sp@- extbl d0 PDL1: movel pc@(PDL2-PDL1-2:w,d0:w:4), sp@(2) beq 1b movew sp@+, d0 rts PDL2: .long _P_Entry2Index /* 0x00 */ .long 0 /* 0x01 */ .long _P_RestoreClutDevice /* 0x02 */ .long _P_ResizePalette /* 0x03 */ .long 0 /* 0x04 */ .long 0 /* 0x05 */ .long 0 /* 0x06 */ .long 0 /* 0x07 */ .long 0 /* 0x08 */ .long 0 /* 0x09 */ .long 0 /* 0x0A */ .long 0 /* 0x0B */ .long 0 /* 0x0C */ .long _P_SaveFore /* 0x40D */ .long _P_SaveBack /* 0x40E */ .long _P_RestoreFore /* 0x40F */ .long _P_RestoreBack /* 0x410 */ .long 0 /* 0x11 */ .long 0 /* 0x12 */ .long _P_SetDepth /* 0xA13 */ .long _P_HasDepth /* 0xA14 */ .long _P_PMgrVersion /* 0x15 */ .long _P_SetPaletteUpdates /* 0x616 */ .long _P_GetPaletteUpdates /* 0x417 */ .long 0 /* 0x18 */ .long _P_GetGray /* 0x1219 */ .globl _QDExtensions _QDExtensions: cmpw #0x17, d0 bls QDL1 .word 0x4AFC QDL1: movel pc@(QDL2-QDL1-2:w,d0:w:4), sp@- rts QDL2: .long _P_NewGWorld .long _P_LockPixels .long _P_UnlockPixels .long _P_UpdateGWorld .long _P_DisposeGWorld .long _P_GetGWorld .long _P_SetGWorld .long _P_CTabChanged .long _P_PixPatChanged .long _P_PortChanged .long _P_GDeviceChanged .long _P_AllowPurgePixels .long _P_NoPurgePixels .long _P_GetPixelsState .long _P_SetPixelsState .long _P_GetPixBaseAddr .long _P_NewScreenBuffer .long _P_DisposeScreenBuffer .long _P_GetGWorldDevice .long _P_QDDone .long _P_OffscreenVersion .long _P_NewTempScreenBuffer .long _P_PixMap32Bit .long _P_GetGWorldPixMap .globl _SoundDispatch _SoundDispatch: subql #4, sp /* make room for address */ movel a0, sp@- /* save a0 */ movel #SDTAB-4, a0 1: addql #4, a0 cmpl a0@+, d0 bcs 1b beq 1f .word 0x4AFC 1: movel a0@, sp@(4) movel sp@+, a0 rts SDTAB: .long 0x00000010 .long _P_MACEVersion .long 0x00000014 .long _P_SPBVersion .long 0x00040010 .long _P_Comp3to1 .long 0x00080010 .long _P_Exp1to3 .long 0x000C0008 .long _P_SndSoundManagerVersion .long 0x000C0010 .long _P_Comp6to1 .long 0x00100008 .long _P_SndChannelStatus .long 0x00100010 .long _P_Exp1to6 .long 0x00140008 .long _P_SndManagerStatus .long 0x00180008 .long _P_SndGetSysBeepState .long 0x001C0008 .long _P_SndSetSysBeepState .long 0x00200008 .long _P_SndPlayDoubleBuffer .long 0x01100014 .long _P_SPBSignOutDevice .long 0x02040008 .long _P_SndPauseFilePlay .long 0x021C0014 .long _P_SPBCloseDevice .long 0x02280014 .long _P_SPBPauseRecording .long 0x022C0014 .long _P_SPBResumeRecording .long 0x02300014 .long _P_SPBStopRecording .long 0x03080008 .long _P_SndStopFilePlay .long 0x030C0014 .long _P_SPBSignInDevice .long 0x03200014 .long _P_SPBRecord .long 0x04240014 .long _P_SPBRecordToFile .long 0x04400014 .long _P_SPBMillisecondsToBytes .long 0x04440014 .long _P_SPBBytesToMilliseconds .long 0x05140014 .long _P_SPBGetIndexedDevice .long 0x05180014 .long _P_SPBOpenDevice .long 0x06380014 .long _P_SPBGetDeviceInfo .long 0x063C0014 .long _P_SPBSetDeviceInfo .long 0x07080014 .long _P_SndRecordToFile .long 0x08040014 .long _P_SndRecord .long 0x0B4C0014 .long _P_SetupAIFFHeader .long 0x0D000008 .long _P_SndStartFilePlay .long 0x0D480014 .long _P_SetupSndHeader .long 0x0E340014 .long _P_SPBGetRecordingStatus .long 0xFFFFFFFF .long myabort .globl _ScriptUtil _ScriptUtil: movew d0, sp@- /* save d0 */ clrw d0 moveb sp@(9), d0 /* get selector */ movel sp@(2), sp@(6) /* slide up the ret-pc */ cmpw #0x36, d0 bhi SUDL2 SUDL1: movel pc@(SUDL5-SUDL1-2:w,d0:w:2), sp@(2) beq SUDL4 movew sp@+, d0 rts SUDL5: .long _P_FontScript /* 0 FontScript */ .long _P_IntlScript /* 2 IntlScript */ .long _P_KeyScript /* 4 KybdScript */ .long _P_Font2Script /* 6 Font2Script */ .long _P_GetEnvirons /* 8 */ .long _P_SetEnvirons /* 10 */ .long _P_GetScript /* 12 */ .long _P_SetScript /* 14 */ .long _P_CharByte /* 16 CharByte */ .long _P_CharType /* 18 CharType */ .long _P_Pixel2Char /* 20 Pixel2Char */ .long _P_Char2Pixel /* 22 Char2Pixel */ .long _P_Transliterate /* 24 Translit*/ .long _P_FindWord /* 26 FindWord */ .long _P_HiliteText /* 28 HiliteText */ .long _P_DrawJust /* 30 DrawJust */ .long _P_MeasureJust /* 32 MeasureJust */ .long 0 /* 0x22 ParseTable */ .long 0 /* 0x24 PortionText */ .long 0 /* 0x26 FindScriptRun */ .long 0 /* 0x28 VisibleLength */ .long 0 /* 0x2A IsSpecialFont */ .long 0 /* 0x2C RawPrinterValues */ .long 0 /* 0x2E NPixel2Char */ .long 0 /* 0x30 NChar2Pixel */ .long 0 /* 0x32 NDrawJust */ .long 0 /* 0x34 NMeasureJust */ .long 0 /* 0x36 NPortionText */ SUDL2: cmpw #0xDC, d0 blt SUDL4 SUDL3: movel pc@(SUDL6-SUDL3 - 2 - 2*0xDC:w,d0:w:2), sp@(2) beq SUDL4 movew sp@+, d0 rts SUDL4: .word 0x4AFC /* don't know what it is */ SUDL6: .long 0 /* 0xDC ReplaceText */ .long 0 /* 0xDE TruncText */ .long 0 /* 0xE0 TruncString */ .long 0 /* 0xE2 NFindWord */ .long 0 /* 0xE4 ValidDate */ .long 0 /* 0xE6 FormatStr2X */ .long 0 /* 0xE8 FormatX2Str */ .long 0 /* 0xEA Format2Str */ .long 0 /* 0xEC Str2Format */ .long 0 /* 0xEE ToggleDate */ .long 0 /* 0xF0 LongSecs2Date */ .long 0 /* 0xF2 LongDate2Secs */ .long _P_String2Time /* 0xF4 String2Time */ .long 0 /* 0xF6 String2Date */ .long _P_InitDateCache /* 0xF8 InitDateCache */ .long 0 /* 0xFA IntlTokenize */ .long 0 /* 0xFC GetFormatOrder */ .long 0 /* 0xFE StyledLineBreak */ .globl _TEDispatch _TEDispatch: subql #2, sp /* shim for return pc */ movew d0, sp@- /* save d0 */ movew sp@(8), d0 /* get selector */ movel sp@(4), sp@(6) /* slide up the ret-pc */ cmpw #13, d0 bhi TEDL2 TEDL1: movel pc@(TEDL3-TEDL1-2:w,d0:w:4), sp@(2) movew sp@+, d0 rts TEDL2: .word 0x4AFC /* don't know what it is */ TEDL3: .long _P_TEStylPaste /* 0 */ .long _P_TESetStyle /* 1 */ .long _P_TEReplaceStyle /* 2 */ .long _P_TEGetStyle /* 3 */ .long _P_GetStylHandle /* 4 */ .long _P_SetStylHandle /* 5 */ .long _P_GetStylScrap /* 6 */ .long _P_TEStylInsert /* 7 */ .long _P_TEGetPoint /* 8 */ .long _P_TEGetHeight /* 9 */ .long _P_TEContinuousStyle /* 10 */ .long _P_SetStylScrap /* 11 */ .long _P_TECustomHook /* 12 */ .long _P_TENumStyles /* 13 */ /* beginning of Toolbox Utilities that have hidden arguments */ .globl __Fix2X __Fix2X: jsr _R_Fix2X rtd #4 .globl __Frac2X __Frac2X: jsr _R_Frac2X rtd #4 /* end of Toolbox Utilities that use Extended format */ /* beginning of routines that toolbox routines that are register based */ /* * NOTE: IMI-94 claims that register based traps have registers a1, d1 and d2 * preserved. Previously I took that to mean os traps, but DayMaker * calls Secs2Date and expects a1 to be preserved. Does this mean * that the trap mechanism should be doing the preservation, or does * it mean that the stub should do the preservation. Right now, I'm * going to do the preservation in the stub, but if I'm wrong, it * could show up if someone were to patch one of the toolbox traps * that is register based. */ .globl __HandToHand __HandToHand: link a6, #-4 moveml d1/a1, sp@- movel a0, a6@(-4) /* so we can take address */ pea a6@(-4) jbsr _HandToHand movel a6@(-4), a0 moveml sp@(4), d1/a1 unlk a6 rts .globl __PtrToHand __PtrToHand: link a6, #-4 moveml d1/a1, sp@- movel d0, sp@- /* size */ pea a6@(-4) /* dsthndl */ movel a0, sp@- /* srcptr */ jbsr _PtrToHand movel a6@(-4), a0 moveml sp@(12), d1/a1 unlk a6 rts .globl __PtrToXHand __PtrToXHand: link a6, #-4 moveml d1/a1, sp@- movel a1, a6@(-4) movel d0, sp@- /* size */ movel a1, sp@- /* dsthndl */ movel a0, sp@- jbsr _PtrToXHand movel a6@(-4), a0 moveml sp@(12), d1/a1 unlk a6 rts .globl __HandAndHand __HandAndHand: link a6, #-4 moveml d1/a1, sp@- movel a1, a6@(-4) movel a1, sp@- movel a0, sp@- jbsr _HandAndHand movel a6@(-4), a0 moveml sp@(8), d1/a1 unlk a6 rts .globl __PtrAndHand __PtrAndHand: link a6, #-4 moveml d1/a1, sp@- movel a1, a6@(-4) movel d0, sp@- movel a1, sp@- movel a0, sp@- jbsr _PtrAndHand movel a6@(-4), a0 moveml sp@(12), d1/a1 unlk a6 rts .globl __Date2Secs __Date2Secs: link a6, #-4 moveml d1/a1, sp@- pea a6@(-4) movel a0, sp@- jbsr _Date2Secs movel a6@(-4), d0 moveml sp@(8), d1/a1 unlk a6 rts .globl __Secs2Date __Secs2Date: link a6, #-4 moveml d1/a1, sp@- movel a0, a6@(-4) movel a0, sp@- movel d0, sp@- jbsr _Secs2Date movel a6@(-4), a0 moveml sp@(8), d1/a1 unlk a6 rts .globl __Enqueue __Enqueue: link a6, #-4 moveml d1/a1, sp@- movel a1, a6@(-4) movel a1, sp@- movel a0, sp@- jbsr _Enqueue movel a6@(-4), a1 moveml sp@(8), d1/a1 unlk a6 rts .globl __Dequeue __Dequeue: link a6, #-4 moveml d1/a1, sp@- movel a1, a6@(-4) movel a1, sp@- movel a0, sp@- jbsr _Dequeue movel a6@(-4), a1 moveml sp@(8), d1/a1 unlk a6 rts .globl __Key1Trans __Key1Trans: .globl __Key2Trans __Key2Trans: /* * I don't really know what these do and neither does Cliff as we have * little documentation on it. The following is based upon d2 containing * the virtual key code and d1 containing the high byte of the modifier * flag which is what it appears the mac+ does. */ subql #4, sp clrl sp@- lslw #8, d1 orw d2, d1 movew d1, sp@- clrl sp@- jbsr _P_KeyTrans movel sp@+, d0 swap d0 andl #0xff, d0 rts .globl __NMInstall __NMInstall: link a6, #0 movel a0, sp@- jbsr _NMInstall unlk a6 rts .globl __NMRemove __NMRemove: link a6, #0 movel a0, sp@- jbsr _NMRemove unlk a6 rts /* end of routines that toolbox routines that are register based */ /* beginning of pack routines */ /* * NOTE: Pack4 keeps the sel on the stack, while most other dispatch routines * (including more floating point: Pack5 and Pack7) don't. */ .globl _Pack4 _Pack4: subql #4, sp /* shim for "phoney return address" */ movew d0, sp@- clrw d0 moveb sp@(11),d0 /* get the selector opcode into d0 */ cmpib #0x1c, d0 bls pack4here 2: .word 0x4AFC pack4here: movel pc@(p4table-pack4here-2:w,d0:w:4), sp@(2) beq 2b movew sp@+, d0 rts /* really a branch to where we want to go */ p4table: .long _P_ROMlib_Faddx /* 00 */ .long _P_ROMlib_Fsetenv /* 01 */ .long _P_ROMlib_Fsubx /* 02 */ .long _P_ROMlib_Fgetenv /* 03 */ .long _P_ROMlib_Fmulx /* 04 */ .long _P_ROMlib_Fsethv /* 05 */ .long _P_ROMlib_Fdivx /* 06 */ .long _P_ROMlib_Fgethv /* 07 */ .long _P_ROMlib_Fcmpx /* 08 */ .long _P_ROMlib_Fdec2x /* 09 */ .long _P_ROMlib_FcpXx /* 0A */ .long _P_ROMlib_Fx2dec /* 0B */ .long _P_ROMlib_Fremx /* 0C */ .long _P_ROMlib_FnegX /* 0D */ .long _P_ROMlib_Fx2X /* 0E */ .long _P_ROMlib_FabsX /* 0F */ .long _P_ROMlib_FX2x /* 10 */ .long _P_ROMlib_Fcpysgnx/* 11 */ .long _P_ROMlib_FsqrtX /* 12 */ .long 0 /* 13 */ .long _P_ROMlib_FrintX /* 14 */ .long 0 /* 15 */ .long _P_ROMlib_FtintX /* 16 */ .long _P_ROMlib_Fprocentry /* 17 */ .long _P_ROMlib_FscalbX /* 18 */ .long _P_ROMlib_Fprocexit /* 19 */ .long _P_ROMlib_FlogbX /* 1A */ .long _P_ROMlib_Ftestxcp /* 1B */ .long _P_ROMlib_Fclassx /* 1C */ .globl _Pack5 _Pack5: subql #2, sp /* shim for "phoney return address" */ movew d0, sp@- clrw d0 moveb sp@(9), d0 /* get the selector opcode into d0 */ movel sp@(4), sp@(6) cmpib #0x20, d0 bls pack5here 2: .word 0x4AFC pack5here: movel pc@(p5table-pack5here-2:w,d0:w:2), sp@(2) movew sp@+, d0 rts /* really a branch to where we want to go */ p5table: .long _P_ROMlib_FlnX /* 00 */ .long _P_ROMlib_Flog2X /* 02 */ .long _P_ROMlib_Fln1X /* 04 */ .long _P_ROMlib_Flog21X /* 06 */ .long _P_ROMlib_FexpX /* 08 */ .long _P_ROMlib_Fexp2X /* 0A */ .long _P_ROMlib_Fexp1X /* 0C */ .long _P_ROMlib_Fexp21X /* 0E */ .long _P_ROMlib_Fxpwri /* 10 */ .long _P_ROMlib_Fxpwry /* 12 */ .long _P_ROMlib_Fcompound /* 14 */ .long _P_ROMlib_Fannuity /* 16 */ .long _P_ROMlib_FsinX /* 18 */ .long _P_ROMlib_FcosX /* 1A */ .long _P_ROMlib_FtanX /* 1C */ .long _P_ROMlib_FatanX /* 1E */ .long _P_ROMlib_FrandX /* 20 */ .globl _Pack0 _Pack0: subql #2, sp /* shim for retpc */ movel d0, sp@- movew sp@(10),d0 /* get selector */ movel sp@(6), sp@(8) /* slide up the ret-pc */ cmpw #100, d0 bhi LP02 p0here: movel pc@(LP029-p0here-2:w,d0:w:1), sp@(4) movel sp@+, a0 rts LP02: .word 0x4AFC /* don't know what it is */ LP029: .long _P_LActivate /* 0 */ .long _P_LAddColumn /* 1 */ .long _P_LAddRow /* 2 */ .long _P_LAddToCell /* 3 */ .long _P_LAutoScroll /* 4 */ .long _P_LCellSize /* 5 */ .long _P_LClick /* 6 */ .long _P_LClrCell /* 7 */ .long _P_LDelColumn /* 8 */ .long _P_LDelRow /* 9 */ .long _P_LDispose /* 10 */ .long _P_LDoDraw /* 11 */ .long _P_LDraw /* 12 */ .long _P_LFind /* 13 */ .long _P_LGetCell /* 14 */ .long _P_LGetSelect /* 15 */ .long _P_LLastClick /* 16 */ .long _P_LNew /* 17 */ .long _P_LNextCell /* 18 */ .long _P_LRect /* 19 */ .long _P_LScroll /* 20 */ .long _P_LSearch /* 21 */ .long _P_LSetCell /* 22 */ .long _P_LSetSelect /* 23 */ .long _P_LSize /* 24 */ .long _P_LUpdate /* 25 */ .globl _Pack3 _Pack3: subql #2, sp movew d0, sp@- movew sp@(8), d0 /* get selector */ movel sp@(4), sp@(6) /* slide up the ret-pc */ cmpw #4, d0 bhi P3L2 P3L1: movel pc@(P3L3-P3L1-6:w,d0:w:4), sp@(2) movew sp@+, d0 rts P3L2: .word 0x4AFC /* don't know what it is */ P3L3: /* sfputfile */ .long _P_SFPutFile .long _P_SFGetFile .long _P_SFPPutFile .long _P_SFPGetFile .globl _Pack2 _Pack2: subql #2, sp movew d0, sp@- movew sp@(8), d0 /* get selector */ movel sp@(4), sp@(6) /* slide up the ret-pc */ cmpw #10, d0 bhi DI2 DI12: movel pc@(D12-DI12-2:w,d0:w:2), sp@(2) movew sp@+, d0 rts DI2: .word 0x4AFC /* don't know what it is */ D12: .long _DIBadMount /* 0 */ .long _DILoad /* 2 */ .long _DIUnload /* 4 */ .long _DIFormat /* 6 */ .long _DIVerify /* 8 */ .long _DIZero /* 10 */ _DIBadMount: _DIFormat: _DIVerify: _DIZero: .word 0x4AFC _DILoad: _DIUnload: rts .globl _Pack6 _Pack6: subql #2, sp movew d0, sp@- movew sp@(8), d0 /* get selector */ movel sp@(4), sp@(6) /* slide up the ret-pc */ cmpw #0x24, d0 bhi L2 LI12: movel pc@(L12-LI12-2:w,d0:w:2), sp@(2) movew sp@+, d0 rts L2: .word 0x4AFC /* don't know what it is */ L12: .long _P_IUDateString .long _P_IUTimeString .long _P_IUMetric .long _P_IUGetIntl .long _P_IUSetIntl .long _P_IUMagString .long _P_IUMagIDString .long _P_IUDatePString .long _P_IUTimePString .long _P_IUMystery .long _P_IULDateString .long _P_IULTimeString .long _P_IUClearCache .long _P_IUMagPString .long _P_IUMagIDPString .long _P_IUScriptOrder .long _P_IULangOrder .long _P_IUTextOrder .long _P_IUGetItlTable .globl _Pack7 _Pack7: subql #2, sp /* shim for "phoney return address" */ movew d0, sp@- movew sp@(8), d0 /* get the selector opcode into d0 */ movel sp@(4), sp@(6) cmpiw #0x04, d0 bls pack7here 2: .word 0x4AFC pack7here: movel pc@(p7table-pack7here-2:w,d0:w:4), sp@(2) movew sp@+, d0 rts /* really a branch to where we want to go */ p7table: .long p7iszero /* 00 */ .long p7isone /* 01 */ .long _P_ROMlib_Fpstr2dec /* 02 */ .long _P_ROMlib_Fdec2str /* 03 */ .long _P_ROMlib_Fcstr2dec /* 04 */ p7iszero: moveml d0/d1/a0/a1, sp@- movel a0, sp@- /* pointer to the string */ movel d0, sp@- /* the number */ jbsr _NumToString addql #8, sp /* pop our args */ moveml sp@+, d0/d1/a0/a1 rts p7isone: moveml d1/a0/a1, sp@- subql #4, sp /* room for argument */ pea sp@ movel a0, sp@- jbsr _StringToNum addql #8, sp movel sp@+, d0 moveml sp@+, d1/a0/a1 rts /* Pack12, template copied from Pack3 */ .globl _Pack12 _Pack12: subql #2, sp movew d0, sp@- movew sp@(8), d0 /* get selector */ movel sp@(4), sp@(6) /* slide up the ret-pc */ cmpw #4, d0 bhi P12L2 P12L1: /* FIXME: figure out what the spew should be in pc@(spew) */ movel pc@(P12L3-P12L1-2:w,d0:w:4), sp@(2) movew sp@+, d0 rts P12L2: .word 0x4AFC /* don't know what it is */ P12L3: .long _P_Fix2SmallFract .long _P_SmallFract2Fix .long _P_CMY2RGB .long _P_RGB2CMY .long _P_HSL2RGB .long _P_RGB2HSL .long _P_HSV2RGB .long _P_RGB2HSV .long _P_GetColor .globl _Pack14 _Pack14: /* NOTE: this isn't really supported, it is just here */ /* to make EqnEditor work */ cmpw #0x200, d0 /* HMGetHelpMenuHandle */ bne _Pack14Death movew #-855, sp@(8) rtd #4 .globl _Pack14Death _Pack14Death: illegal /* end of pack stuff */ /* Beginning of hand crafted OStrap stubs */ .globl __SysEnvirons __SysEnvirons: link a6, #-4 movel a0, a6@(-4) movel a0, sp@- movel d0, sp@- /* MSHORT: movew */ jbsr _SysEnvirons movel a6@(-4), a0 unlk a6 extl d0 rts /* begin Event Manager */ .globl __PostEvent /* handles both Post and PPost */ __PostEvent: subql #4, sp /* reserve room for qelemp */ pea sp@ /* pointer to qelemp */ movel d0, sp@- movel a0, sp@- /* MSHORT: movew */ jbsr _PPostEvent addl #12, sp /* MSHORT: #10 */ movel sp@+, a0 rts .globl __FlushEvents __FlushEvents: link a6, #0 swap d0 movel d0, sp@- /* MSHORT: movew */ swap d0 movel d0, sp@- /* MSHORT: movew */ jbsr _FlushEvents /* NOTE: there should be stuff in d0 */ clrl d0 /* lie */ unlk a6 rts .globl __GetOSEvent __GetOSEvent: link a6, #0 movel a0, sp@- movel d0, sp@- /* MSHORT: movew */ jbsr _GetOSEvent tstw d0 seq d0 extbl d0 unlk a6 rts .globl __OSEventAvail __OSEventAvail: link a6, #0 movel a0, sp@- movel d0, sp@- /* MSHORT: movew */ jbsr _OSEventAvail tstw d0 seq d0 extbl d0 unlk a6 rts /* end of Event Manager */ .globl __VInstall __VInstall: link a6, #0 movel a0, sp@- jbsr _VInstall unlk a6 rts .globl __VRemove __VRemove: link a6, #0 movel a0, sp@- jbsr _VRemove unlk a6 rts .globl __InsTime __InsTime: link a6, #0 movel a0, sp@- jbsr _InsTime unlk a6 clrl d0 rts .globl __RmvTime __RmvTime: link a6, #0 movel a0, sp@- jbsr _RmvTime unlk a6 clrl d0 rts .globl __PrimeTime __PrimeTime: link a6, #0 movel d0, sp@- movel a0, sp@- jbsr _PrimeTime unlk a6 clrl d0 rts .globl __ReadDateTime __ReadDateTime: link a6, #0 movel a0, sp@- jbsr _ReadDateTime unlk a6 rts .globl __SetDateTime __SetDateTime: link a6, #0 movel d0, sp@- jbsr _SetDateTime unlk a6 rts .globl __Delay __Delay: link a6, #-4 pea a6@(-4) movel a0, sp@- jbsr _Delay movel a6@(-4), d0 unlk a6 rts .globl __EqualString __EqualString: link a6, #0 movel d0, sp@- clrl sp@- /* diacsense = false, MSHORT: clrw */ btst #9, d1 bne nodiac diac: notl sp@ /* diacsense = true, MSHORT: notw */ nodiac: clrl sp@- /* casesense = false, MSHORT: clrw */ btst #10, d1 beq nocase case: notl sp@ /* casesense = false, MSHORT: notw */ nocase: movel a1, sp@- movel a0, sp@- jbsr _ROMlib_RelString tstl d0 bge 1f negl d0 1: unlk a6 rts .globl __RelString __RelString: link a6, #0 movel d0, sp@- clrl sp@- /* diacsense = false, MSHORT: clrw */ btst #9, d1 bne rnodiac rdiac: notl sp@ /* diacsense = true, MSHORT: notw */ rnodiac: clrl sp@- /* casesense = false, MSHORT: clrw */ btst #10, d1 beq rnocase rcase: notl sp@ /* casesense = false, MSHORT: notl */ rnocase: movel a1, sp@- movel a0, sp@- jbsr _ROMlib_RelString unlk a6 rts .globl __UprString __UprString: link a6, #-4 movel a0, a6@(-4) movel d0, sp@- /* MSHORT: movew */ clrl sp@- /* diacsense = false, MSHORT: clrw */ btst #9, d1 bne unodiac udiac: notl sp@ /* diacsense = true, MSHORT: notl */ unodiac: movel a0, sp@- jbsr _ROMlib_UprString movel a6@(-4), a0 unlk a6 rts .globl __StripAddress __StripAddress: cmpl #0xFFFFFFFF, d0 bne 1f /* 4 comes from the #define for ROMLIB_STRIPADDRESSHACK_BIT in options.h */ btst #4, _ROMlib_options + 3 beq 1f andil #0xFFFFFF, d0 1: rts myabort: .word 0x4AFC prtab: .long _P_PrOpenDoc /* 0 */ .long _P_PrCloseDoc /* 1 */ .long _P_PrOpenPage /* 2 */ .long _P_PrClosePage /* 3 */ .long _P_PrintDefault /* 4 */ .long _P_PrStlDialog /* 5 */ .long _P_PrJobDialog /* 6 */ .long _P_PrStlInit /* 7 */ .long _P_PrJobInit /* 8 */ .long _P_PrDlgMain /* 9 */ .long _P_PrValidate /* 10 */ .long _P_PrJobMerge /* 11 */ .long _P_PrPicFile /* 12 */ .long myabort /* 13 */ .long _P_PrGeneral /* 14 */ .long myabort /* 15 */ .long _P_PrDrvrOpen /* 16 */ .long _P_PrDrvrClose /* 17 */ .long _P_PrDrvrDCE /* 18 */ .long _P_PrDrvrVers /* 19 */ .long _P_PrCtlCall /* 20 */ .long _P_PrPurge /* 21 */ .long _P_PrNoPurge /* 22 */ .long _P_PrError /* 23 */ .long _P_PrSetError /* 24 */ .long _P_PrOpen /* 25 */ .long _P_PrClose /* 26 */ .globl __PrGlue __PrGlue: movel d0, sp@- clrl d0 moveb sp@(8), d0 /* pick up selector */ movel sp@(4), sp@(8) /* move return address */ lsrl #3, d0 cmpl #26, d0 bls 1f .word 0x4AFC 1: movel a0, sp@- lea prtab, a0 movel a0@(d0:l:4), sp@(8) movel sp@+, a0 movel sp@+, d0 rts /* goes where we want it */ /* beginning of File Manager */ hfstab: .long myabort /* 0 */ .long _PBOpenWD /* 1 */ .long _PBCloseWD /* 2 */ .long myabort /* 3 */ .long myabort /* 4 */ .long _PBCatMove /* 5 */ .long _PBDirCreate /* 6 */ .long _PBGetWDInfo /* 7 */ .long _PBGetFCBInfo /* 8 */ .long _PBGetCatInfo /* 9 */ .long _PBSetCatInfo /* 10 */ .long _PBSetVInfo /* 11 */ .long myabort /* 12 */ .long myabort /* 13 */ .long myabort /* 14 */ .long myabort /* 15 */ .long _PBLockRange /* 0x10 */ .long _PBUnlockRange /* 0x11 */ .long myabort /* 0x12 */ .long myabort /* 0x13 */ .long myabort /* 0x14 */ .long myabort /* 0x15 */ .long myabort /* 0x16 */ .long myabort /* 0x17 */ .long myabort /* 0x18 */ .long myabort /* 0x19 */ .long _PBOpen /* 0x1A */ .long myabort /* 0x1B */ .long myabort /* 0x1C */ .long myabort /* 0x1D */ .long myabort /* 0x1E */ .long myabort /* 0x1F */ .long myabort /* 0x20 */ .long myabort /* 0x21 */ .long myabort /* 0x22 */ .long myabort /* 0x23 */ .long myabort /* 0x24 */ .long myabort /* 0x25 */ .long myabort /* 0x26 */ .long myabort /* 0x27 */ .long myabort /* 0x28 */ .long myabort /* 0x29 */ .long myabort /* 0x2A */ .long myabort /* 0x2B */ .long myabort /* 0x2C */ .long myabort /* 0x2D */ .long myabort /* 0x2E */ .long myabort /* 0x2F */ .long _PBHGetVolParms /* 0x30 */ .long _GetLogInInfo /* 0x31 */ .long _GetDirAccess /* 0x32 */ .long _SetDirAccess /* 0x33 */ .long _MapID /* 0x34 */ .long _MapName /* 0x35 */ .long _CopyFile /* 0x36 */ .long _MoveRename /* 0x37 */ .long _OpenDeny /* 0x38 */ .long _OpenRFDeny /* 0x39 */ .globl __HFSDispatch __HFSDispatch: link a6, #0 cmpw #0x39, d0 bls 1f .word 0x4AFC 1: clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq na notl sp@ /* MSHORT: notw */ na: movel a0, sp@- lea hfstab, a0 movel a0@(d0:w:4), a0 jbsr a0@ /* * NOTE: I have no idea why I had the next instruction in here. It * certainly looks like I thought that we had some sort of pascal * calling convention going on here. --ctm 3/23/93 */ /* movel sp@, a0 no need for sp@+ with unlk next insn */ unlk a6 rts .globl __FInitQueue __FInitQueue: /* TODO */ /* .word 0x4AFC NOP */ rts .globl __PBOpen __PBOpen: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq openna notl sp@ /* MSHORT: notw */ openna: movel a0, sp@- btst #9, d1 bne openhfs jbsr _PBOpen unlk a6 rts openhfs: jbsr _PBHOpen unlk a6 rts .globl __PBClose __PBClose: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq closena notl sp@ /* MSHORT: notw */ closena: movel a0, sp@- jbsr _PBClose unlk a6 rts .globl __PBRead __PBRead: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq readna notl sp@ /* MSHORT: notw */ readna: movel a0, sp@- jbsr _PBRead unlk a6 rts .globl __PBWrite __PBWrite: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq writena notl sp@ /* MSHORT: notw */ writena: movel a0, sp@- jbsr _PBWrite unlk a6 rts .globl __PBControl __PBControl: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq controlna notl sp@ /* MSHORT: notw */ controlna: movel a0, sp@- jbsr _PBControl unlk a6 rts .globl __PBStatus __PBStatus: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq statusna notl sp@ /* MSHORT: notw */ statusna: movel a0, sp@- jbsr _PBStatus unlk a6 rts .globl __PBKillIO __PBKillIO: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq killiona notl sp@ /* MSHORT: notw */ killiona: movel a0, sp@- jbsr _PBKillIO unlk a6 rts .globl __PBGetVInfo __PBGetVInfo: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq getvinfona notl sp@ /* MSHORT: notw */ getvinfona: movel a0, sp@- btst #9, d1 bne getvinfohfs jbsr _PBGetVInfo unlk a6 rts getvinfohfs: jbsr _PBHGetVInfo unlk a6 rts .globl __PBCreate __PBCreate: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq createna notl sp@ /* MSHORT: notw */ createna: movel a0, sp@- btst #9, d1 bne createhfs jbsr _PBCreate unlk a6 rts createhfs: jbsr _PBHCreate unlk a6 rts .globl __PBDelete __PBDelete: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq deletena notl sp@ /* MSHORT: notw */ deletena: movel a0, sp@- btst #9, d1 bne deletehfs jbsr _PBDelete unlk a6 rts deletehfs: jbsr _PBHDelete unlk a6 rts .globl __PBOpenRF __PBOpenRF: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq openrfna notl sp@ /* MSHORT: notw */ openrfna: movel a0, sp@- btst #9, d1 bne openrfhfs jbsr _PBOpenRF unlk a6 rts openrfhfs: jbsr _PBHOpenRF unlk a6 rts .globl __PBRename __PBRename: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq renamena notl sp@ /* MSHORT: notw */ renamena: movel a0, sp@- btst #9, d1 bne renamehfs jbsr _PBRename unlk a6 rts renamehfs: jbsr _PBHRename unlk a6 rts .globl __PBGetFInfo __PBGetFInfo: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq getfinfona notl sp@ /* MSHORT: notw */ getfinfona: movel a0, sp@- btst #9, d1 bne getfinfohfs jbsr _PBGetFInfo unlk a6 rts getfinfohfs: jbsr _PBHGetFInfo unlk a6 rts .globl __PBSetFInfo __PBSetFInfo: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq setfinfona notl sp@ /* MSHORT: notw */ setfinfona: movel a0, sp@- btst #9, d1 bne setfinfohfs jbsr _PBSetFInfo unlk a6 rts setfinfohfs: jbsr _PBHSetFInfo unlk a6 rts .globl __PBUnmountVol __PBUnmountVol: link a6, #0 movel a0, sp@- jbsr _PBUnmountVol unlk a6 rts .globl __PBMountVol __PBMountVol: link a6, #0 movel a0, sp@- jbsr _PBMountVol unlk a6 rts .globl __PBAllocate __PBAllocate: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq allocna notl sp@ /* MSHORT: notw */ allocna: movel a0, sp@- btst #9, d1 bne allochfs jbsr _PBAllocate unlk a6 rts allochfs: jbsr _PBAllocContig /* just a guess */ unlk a6 rts .globl __PBGetEOF __PBGetEOF: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq geteofna notl sp@ /* MSHORT: notw */ geteofna: movel a0, sp@- jbsr _PBGetEOF unlk a6 rts .globl __PBSetEOF __PBSetEOF: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq seteofna notl sp@ /* MSHORT: notw */ seteofna: movel a0, sp@- jbsr _PBSetEOF unlk a6 rts .globl __PBFlushVol __PBFlushVol: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq flushvna notl sp@ /* MSHORT: notw */ flushvna: movel a0, sp@- jbsr _PBFlushVol unlk a6 rts .globl __PBGetVol __PBGetVol: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq getvona notl sp@ /* MSHORT: notw */ getvona: movel a0, sp@- btst #9, d1 bne getvohfs jbsr _PBGetVol unlk a6 rts getvohfs: jbsr _PBHGetVol unlk a6 rts .globl __PBSetVol __PBSetVol: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq setvona notl sp@ /* MSHORT: notw */ setvona: movel a0, sp@- btst #9, d1 bne setvohfs jbsr _PBSetVol unlk a6 rts setvohfs: jbsr _PBHSetVol unlk a6 rts .globl __PBEject __PBEject: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq ejecna notl sp@ /* MSHORT: notw */ ejecna: movel a0, sp@- jbsr _PBEject unlk a6 rts .globl __PBGetFPos __PBGetFPos: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq getfposna notl sp@ /* MSHORT: notw */ getfposna: movel a0, sp@- jbsr _PBGetFPos unlk a6 rts .globl __PBOffLine __PBOffLine: link a6, #0 movel a0, sp@- jbsr _PBOffLine unlk a6 rts .globl __PBSetFLock __PBSetFLock: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq setflna notl sp@ /* MSHORT: notw */ setflna: movel a0, sp@- btst #9, d1 bne setflhfs jbsr _PBSetFLock unlk a6 rts setflhfs: jbsr _PBHSetFLock unlk a6 rts .globl __PBRstFLock __PBRstFLock: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq rstflna notl sp@ /* MSHORT: notw */ rstflna: movel a0, sp@- btst #9, d1 bne rstflhfs jbsr _PBRstFLock unlk a6 rts rstflhfs: jbsr _PBHRstFLock unlk a6 rts .globl __PBSetFVers __PBSetFVers: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq setfvna notl sp@ /* MSHORT: notw */ setfvna: movel a0, sp@- jbsr _PBSetFVers unlk a6 rts .globl __PBSetFPos __PBSetFPos: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq setfpna notl sp@ /* MSHORT: notw */ setfpna: movel a0, sp@- jbsr _PBSetFPos unlk a6 rts .globl __PBFlushFile __PBFlushFile: link a6, #0 clrl sp@- /* MSHORT: clrw */ btst #10, d1 beq flushfna notl sp@ /* MSHORT: notw */ flushfna: movel a0, sp@- jbsr _PBFlushFile unlk a6 rts /* end of File Manager */ .globl __GetTrapAddress __GetTrapAddress: /* * NOTE: this ugly hack is for A-train, cause it's brain damaged * and it loads the contents of 0xA198 and 0xA89F! */ cmpl @(0xA198), d0 bne 1f movel #0xA198, d0 1: cmpl @(0xA89F), d0 bne 1f movel #0xA89F, d0 1: /* End of Icky Hack */ btst #9, d1 beq old btst #10, d1 bne tool os: andil #0xff, d0 cmpl #0x77, d0 /* CountADBs: we don't support it */ beq unimp cmpl #0x78, d0 /* GetIndADB: we don't support it */ beq unimp cmpl #0x79, d0 /* GetADBInfo: we don't support it */ beq unimp cmpl #0x7A, d0 /* SetADBInfo: we don't support it */ beq unimp cmpl #0x7B, d0 /* ADBReInit: we don't support it */ beq unimp cmpl #0x7C, d0 /* ADBOp: we don't support it */ beq unimp cmpl #0x3D, d0 /* DrvrInstall: we don't support it */ beq unimp cmpl #0x3E, d0 /* DrvrRemove: we don't support it */ beq unimp cmpl #0x4F, d0 /* RDrvrInstall: we don't support it */ beq unimp asll #2, d0 lea _ostraptable, a0 movel a0@(d0), a0 cmpw #0x4AFC, a0@ beq unimp clrl d0 rts tool: andil #0x3ff, d0 cmpl #0x30, d0 /* Pack14: we don't support it, but we */ beq unimp /* don't have it start with illegal because */ /* EqnEditor (bundled w/Word 5.0) blindly */ /* uses it! */ cmpl #0xB5, d0 /* ScriptUtil: we don't support it */ beq unimp asll #2, d0 lea _tooltraptable, a0 movel a0@(d0), a0 cmpw #0x4AFC, a0@ beq unimp clrl d0 rts unimp: lea _P_Unimplemented, a0 clrl d0 rts old: andil #0x1ff, d0 cmpw #0x4f, d0 /* 0x00 - 0x4F were OS */ ble os cmpw #0x54, d0 /* 0x54: UprString, OS */ beq os cmpw #0x57, d0 /* 0x57: SetApplBase, OS */ beq os bra tool .globl __SetTrapAddress __SetTrapAddress: btst #9, d1 beq olds btst #10, d1 bne tools oss: andil #0xff, d0 asll #2, d0 movel a1, sp@- lea _ostraptable, a1 bra outofhere tools: andil #0x3ff, d0 asll #2, d0 movel a1, sp@- lea _tooltraptable, a1 outofhere: movel a0, a1@(d0) cmpw #0xED, d0 beq 1f moveml d1/d2/a0, sp@- jsr _flushcache moveml sp@+, d1/d2/a0 1: movel sp@+, a1 clrl d0 rts olds: andil #0x1ff, d0 cmpw #0x4f, d0 /* 0x00 - 0x4F were OS */ ble oss cmpw #0x54, d0 /* 0x54: UprString, OS */ beq oss cmpw #0x57, d0 /* 0x57: SetApplBase, OS */ beq oss bra tools .globl __Gestalt __Gestalt: link a6, #-4 pea a6@(-4) movel d0, sp@- jbsr _Gestalt movel a6@(-4), a0 unlk a6 rts /* End of hand crafted OStrap stubs */ /* Beginning of os traps we don't support */ .globl __AddDrive /* Not Supported */ __AddDrive: .word 0x4AFC .globl __SlotManager /* Not Supported */ __SlotManager: .word 0x4AFC .globl __AttachVBL /* Not Supported */ __AttachVBL: .word 0x4AFC .globl __DoVBLTask /* Not Supported */ __DoVBLTask: .word 0x4AFC .globl __DTInstall /* Not Supported */ __DTInstall: .word 0x4AFC .globl __SIntRemove /* Not Supported */ __SIntRemove: .word 0x4AFC .globl __InternalWait /* Not Supported */ __InternalWait: .word 0x4AFC .globl __SIntInstall /* Not Supported */ __SIntInstall: .word 0x4AFC .globl _GetLogInInfo _GetLogInInfo: .word 0x4AFC .globl _GetDirAccess _GetDirAccess: .word 0x4AFC .globl _SetDirAccess _SetDirAccess: .word 0x4AFC .globl _MapID _MapID: .word 0x4AFC .globl _MapName _MapName: .word 0x4AFC .globl _CopyFile _CopyFile: .word 0x4AFC .globl _MoveRename _MoveRename: .word 0x4AFC .globl _OpenRFDeny _OpenRFDeny: .word 0x4AFC .globl _P_PrPurge _P_PrPurge: .word 0x4AFC .globl _P_PrNoPurge _P_PrNoPurge: .word 0x4AFC .globl _IMVI_ReadXPRam _IMVI_ReadXPRam: .word 0x4AFC .globl _IMVI_WriteXPRam _IMVI_WriteXPRam: .word 0x4AFC .globl _IMVI_MemoryDispatch _IMVI_MemoryDispatch: .word 0x4AFC .globl _IMVI_IdleUpdate _IMVI_IdleUpdate: .word 0x4AFC .globl _IMVI_SlpQInstall _IMVI_SlpQInstall: .word 0x4AFC .globl _IMVI_CommToolboxDispatch _IMVI_CommToolboxDispatch: .word 0x4AFC .globl _IMVI_DebugUtil _IMVI_DebugUtil: .word 0x4AFC .globl _IMVI_DeferUserFn _IMVI_DeferUserFn: .word 0x4AFC .globl _IMVI_Translate24To32 _IMVI_Translate24To32: .word 0x4AFC .globl _IMVI_PPC _IMVI_PPC: .word 0x4AFC /* End of os traps we don't support */