unit Exec; INTERFACE type pshortint = ^shortint; ppshortint = ^pshortint; pppshortint = ^ppshortint; pbyte = ^byte; ppbyte = ^pbyte; pppbyte = ^ppbyte; pinteger = ^integer; ppinteger = ^pinteger; pword = ^word; plongint = ^longint; pplongint = ^plongint; long = longint; plong = ^longint; ppointer = ^pointer; STRPTR = ^byte; pNode = ^tNode; tNode = record ln_Succ: pNode; ln_Pred: pNode; ln_Type: byte; ln_Pri: shortint; ln_Name: pbyte; end; pMsgPort = ^tMsgPort; pMessage = ^tMessage; tMessage = record mn_Node: tNode; mn_ReplyPort: pMsgPort; mn_Length: word; end; pList = ^tList; tList = record lh_Head: pNode; lh_Tail: pNode; lh_TailPred: pNode; lh_Type: byte; l_pad: byte; end; pMemEntry = ^tMemEntry; tMemEntry = record case integer of 0: ( me_Reqs: long; ); 1: ( me_Addr: pointer; me_Length: long; ); end; pInterrupt = ^tInterrupt; pTask = ^tTask; tMsgPort = record mp_Node: tNode; mp_Flags: byte; mp_SigBit: byte; case integer of 0: ( mp_SoftInt: pInterrupt; ); 1: ( sm_LockMsg: pMessage; ); 2: ( mp_SigTask: pTask; mp_MsgList: tList; ); end; pUnit = ^tUnit; tUnit = record unit_MsgPort: tMsgPort; unit_flags: byte; unit_pad: byte; unit_OpenCnt: word; end; pSoftIntList = ^tSoftIntList; tSoftIntList = record sh_List: tList; sh_Pad: word; end; pIntVector = ^tIntVector; tIntVector = record iv_Data: pointer; iv_Code: pointer; iv_Node: pNode; end; pLibrary = ^tLibrary; tLibrary = record lib_Node: tNode; lib_Flags: byte; lib_pad: byte; lib_NegSize: word; lib_PosSize: word; lib_Version: word; lib_Revision: word; lib_IdString: pointer; lib_Sum: long; lib_OpenCnt: word; end; pResident = ^tResident; tResident = record rt_MatchWord: word; rt_MatchTag: pResident; rt_EndSkip: pointer; rt_Flags: byte; rt_Version: byte; rt_Type: byte; rt_Pri: shortint; rt_Name: pbyte; rt_IdString: pbyte; rt_Init: pointer; end; pMinNode = ^tMinNode; pMinList = ^tMinList; tMinList = record mlh_Head: pMinNode; mlh_Tail: pMinNode; mlh_TailPred: pMinNode; end; tMinNode = record mln_Succ: pMinNode; mln_Pred: pMinNode; end; pSemaphoreRequest = ^tSemaphoreRequest; tSemaphoreRequest = record sr_Link: tMinNode; sr_Waiter: pTask; end; pSignalSemaphore = ^tSignalSemaphore; tSignalSemaphore = record ss_Link: tNode; ss_NestCount: integer; ss_WaitQueue: tMinList; ss_MultipleLink: tSemaphoreRequest; ss_Owner: pTask; ss_QueueCount: integer; end; pSemaphore = ^tSemaphore; tSemaphore = record sm_MsgPort: tMsgPort; sm_Bids: integer; end; pDevice = ^tDevice; pIOStdReq = ^tIOStdReq; tIOStdReq = record io_Message: tMessage; io_Device: pDevice; io_Unit: pUnit; io_Command: word; io_Flags: byte; io_Error: shortint; io_Actual: long; io_Length: long; io_Data: pointer; io_Offset: long; end; pStackSwapStruct = ^tStackSwapStruct; tStackSwapStruct = record stk_Lower: pointer; stk_Upper: long; stk_Pointer: pointer; end; pExecBase = ^tExecBase; tExecBase = record LibNode: tLibrary; SoftVer: word; LowMemChkSum: integer; ChkBase: long; ColdCapture: pointer; CoolCapture: pointer; WarmCapture: pointer; SysStkUpper: pointer; SysStkLower: pointer; MaxLocMem: long; DebugEntry: pointer; DebugData: pointer; AlertData: pointer; MaxExtMem: pointer; ChkSum: word; IntVects: array [0..15] of tIntVector; ThisTask: pTask; IdleCount: long; DispCount: long; Quantum: word; Elapsed: word; SysFlags: word; IDNestCnt: shortint; TDNestCnt: shortint; AttnFlags: word; AttnResched: word; ResModules: pointer; TaskTrapCode: pointer; TaskExceptCode: pointer; TaskExitCode: pointer; TaskSigAlloc: long; TaskTrapAlloc: word; MemList: tList; ResourceList: tList; DeviceList: tList; IntrList: tList; LibList: tList; PortList: tList; TaskReady: tList; TaskWait: tList; SoftInts: array [0..4] of tSoftIntList; LastAlert: array [0..3] of longint; VBlankFrequency: byte; PowerSupplyFrequency: byte; SemaphoreList: tList; KickMemPtr: pointer; KickTagPtr: pointer; KickCheckSum: pointer; ex_Pad0: word; ex_LaunchPoint: long; ex_RamLibPrivate: pointer; ex_EClockFrequency: long; ex_CacheControl: long; ex_TaskID: long; ex_PuddleSize: long; ex_PoolThreshold: long; ex_PublicPool: tMinList; ex_MMULock: pointer; ex_Reserved: array [0..11] of byte; end; pMemChunk = ^tMemChunk; pMemHeader = ^tMemHeader; tMemHeader = record mh_Node: tNode; mh_Attributes: word; mh_First: pMemChunk; mh_Lower: pointer; mh_Upper: pointer; mh_Free: long; end; tInterrupt = record is_Node: tNode; is_Data: pointer; is_Code: pointer; end; tMemChunk = record mc_Next: pMemChunk; mc_Bytes: long; end; tDevice = record dd_Library: tLibrary; end; pIORequest = ^tIORequest; tIORequest = record io_Message: tMessage; io_Device: pDevice; io_Unit: pUnit; io_Command: word; io_Flags: byte; io_Error: shortint; end; pMemList = ^tMemList; tMemList = record ml_Node: tNode; ml_NumEntries: word; end; tTask = record tc_Node: tNode; tc_Flags: byte; tc_State: byte; tc_IDNestCnt: shortint; tc_TDNestCnt: shortint; tc_SigAlloc: long; tc_SigWait: long; tc_SigRecvd: long; tc_SigExcept: long; tc_TrapAlloc: word; tc_TrapAble: word; tc_ExceptData: pointer; tc_ExceptCode: pointer; tc_TrapData: pointer; tc_TrapCode: pointer; tc_SPReg: pointer; tc_SPLower: pointer; tc_SPUpper: pointer; tc_Switch: pointer; tc_Launch: pointer; tc_MemEntry: tList; tc_UserData: pointer; end; const NT_SOFTINT = $B; AN_FreeVec = $7000005; AN_IconLib = $9000000; AG_CloseLib = $90000; AO_IconLib = $8009; AN_MathLib = $5000000; AN_TMBadSupply = $15000002; BYTEMASK = $FF; TS_RUN = 2; AG_OpenLib = $30000; AO_MathLib = $8005; AN_BitMap = $7000007; AN_BadState = $8400000C; TB_SWITCH = 6; NT_MSGPORT = 4; AN_InitAPtr = $1000007; AN_TrackDiskDev = $14000000; AN_WBInitPotionAllocDrawer = $B1010004; AO_TrackDiskDev = $8014; TF_SWITCH = $40; NT_UNKNOWN = 0; LIB_RESERVED = 4; MEMF_LARGEST = $20000; RTF_COLDSTART = 1; AG_CloseDev = $A0000; LIB_OPEN = $FFFFFFFA; AG_OpenDev = $40000; AN_EndTask = $7000002; AN_GamePortDev = $12000000; AN_WBReLayoutToolMenu = $B1010009; AO_GamePortDev = $8012; AN_KeyFree = $7000008; NULL = 0; TS_EXCEPT = 5; SIGB_DOS = 8; IOERR_UNITBUSY = $FFFFFFFA; CACRF_FreezeD = $200; AN_PlaneAlloc = $84010005; AN_AudioDev = $10000000; AO_AudioDev = $8010; CACRF_CopyBack = $80000000; MEMF_ANY = 0; MEMF_24BITDMA = $200; LIBF_SUMMING = 1; TB_ETASK = 3; AG_NoSignal = $70000; AN_MakeVPort = $82010030; SIGF_DOS = $100; AN_ItemAlloc = $4010003; AN_SubAlloc = $4010004; AN_WeirdEcho = $8400000E; TRUE_ = 1; CACRF_FreezeI = 2; AN_LongFrame = $82010006; AN_KeyRange = $700000B; AN_BadExpansionFree = $A000001; IOERR_BADLENGTH = $FFFFFFFC; INTB_NMI = $F; CMD_INVALID = 0; AG_ProcCreate = $B0000; TF_ETASK = 8; DEV_BEGINIO = $FFFFFFE2; MEMF_REVERSE = $40000; UNITF_ACTIVE = 1; AN_FreeTwice = $1000009; AN_GraphicsLib = $2000000; NT_DEATHMESSAGE = $13; LIBF_SUMUSED = 4; AG_OpenRes = $50000; AO_GraphicsLib = $8002; LIB_VECTSIZE = 6; LIBF_DELEXP = 8; INTF_NMI = $8000; RTF_AFTERDOS = 4; NT_MEMORY = $A; NT_SIGNALSEM = $F; NT_SEMAPHORE = $E; AN_GfxFreeError = $200000D; AN_LayersNoMem = $83010000; AN_FileReclosed = $700000E; AN_GadTools = $33000000; TB_STACKCHK = 4; AFB_FPU40 = 6; RTW_NEVER = 0; AO_GadTools = $8033; RTW_COLDSTART = 1; AN_BadOverlay = $700000C; AN_WBinitTimer = $B101000A; AFB_PRIVATE = $F; CMD_STOP = 6; MEMF_PUBLIC = 1; AN_TimerDev = $15000000; LIB_USERDEF = $FFFFFFE2; AO_TimerDev = $8015; AN_IntrMem = $81000006; AN_ItemBoxTop = $84000006; AN_KeyboardDev = $13000000; TF_STACKCHK = $10; TS_READY = 3; AFF_FPU40 = $40; AO_KeyboardDev = $8013; AN_LayersLib = $3000000; SIGB_SINGLE = 4; AO_LayersLib = $8003; AN_GfxNoLCM = $82011234; AFF_PRIVATE = $8000; DMA_Continue = 2; AN_StackProbe = $100000E; AN_GadgetType = $84000001; AN_WBLayoutWBMenusLayoutMenus = $B1010007; AN_DiskRsrc = $21000000; AO_DiskRsrc = $8021; AN_RAMLib = $8000000; AN_MiscRsrc = $22000000; AN_DiskCopy = $32000000; SIGF_SINGLE = $10; UNITF_INTASK = 2; AO_RAMLib = $8008; AO_MiscRsrc = $8022; AO_DiskCopy = $8032; AN_OpenScreen = $84010007; AN_ConsoleDev = $11000000; AN_WBBadStartupMsg1 = $31000001; AO_ConsoleDev = $8011; AN_WBBadStartupMsg2 = $31000002; SIGB_CHILD = 1; AN_GfxNewError = $200000C; AN_DiskfontLib = $B000000; DEV_ABORTIO = $FFFFFFDC; AO_DiskfontLib = $800B; AN_NoConsole = $8400000F; AN_DOSLib = $7000000; AN_NoFonts = $B1000001; MEMF_CLEAR = $10000; AO_DOSLib = $8007; AN_StartMem = $7010001; AN_AsyncPkt = $7000004; SIGF_CHILD = 2; IOERR_NOCMD = $FFFFFFFD; AN_OpenScrnRast = $84010008; NT_GRAPHICS = $12; NT_EXTENDED = $FF; LIB_EXPUNGE = $FFFFFFEE; AG_NoMemory = $10000; AN_CreatePort = $84010002; LIB_EXTFUNC = $FFFFFFE8; CACRF_DBE = $1000; RTF_AUTOINIT = $80; AN_DiskError = $700000A; MEMF_LOCAL = $100; AN_ExcptVect = $1000001; AN_ShortFrame = $82010007; AN_TDCalibSeek = $14000001; AN_CIARsrc = $20000000; AN_DRIntNoAct = $21000002; AO_CIARsrc = $8020; AN_TextTmpRas = $2010009; AFB_68010 = 0; AFB_68020 = 1; TB_PROCTIME = 0; AFB_68030 = 2; CACRF_IBE = $10; AN_AddSWGadget = $8401000A; AN_NoWindow = $11000001; AN_TMBadReq = $15000001; AFB_68040 = 3; AN_WBInitScreenAndWindows1 = $B101000D; AN_WBMAlloc = $B1010010; INCLUDE_VERSION = $24; SIH_PRIMASK = $F0; AFF_68010 = 1; AN_WBInitScreenAndWindows2 = $B101000E; NT_BOOTNODE = $10; AFF_68020 = 2; CMD_UPDATE = 4; AN_ExpansionLib = $A000000; AN_WBInitScreenAndWindows3 = $B101000F; TF_PROCTIME = 1; AFF_68030 = 4; AO_ExpansionLib = $800A; AN_BootStrap = $30000000; AN_BootError = $30000001; AFF_68040 = 8; AO_BootStrap = $8030; AN_BogusExcpt = $8100000A; AN_BadFreeAddr = $100000F; AN_WBAddToolMenuItem = $B1010008; AN_DRHasDisk = $21000001; LIBRARY_MINIMUM = $21; SIGB_ABORT = 0; CACRF_WriteAllocate = $2000; AN_Workbench = $31000000; AO_Workbench = $8031; NT_TASK = 1; AN_ObsoleteFont = $2000401; AN_OpenWindow = $8401000B; FALSE_ = 0; IOERR_OPENFAIL = $FFFFFFFF; CMD_CLEAR = 5; AN_UtilityLib = $34000000; SIGF_ABORT = 1; AO_UtilityLib = $800C; LIBF_CHANGED = 2; AFB_68881 = 4; AN_MemoryInsane = $100000C; NT_FONT = $C; NT_KICKMEM = $11; AFB_68882 = 5; AN_MemCorrupt = $81000005; NT_INTERRUPT = 2; NT_RESOURCE = 8; TS_WAIT = 4; AFF_68881 = $10; NT_MESSAGE = 5; AFF_68882 = $20; AN_SysScrnType = $84000009; AN_RegionMemory = $8201000B; MEMF_TOTAL = $80000; AN_SemCorrupt = $1000008; CMD_NONSTD = 9; NT_FREEMSG = 6; NT_USER = $FE; MEM_BLOCKMASK = 7; LIB_NONSTD = $FFFFFFE2; TS_INVALID = 0; MEMF_CHIP = 2; NT_REPLYMSG = 7; AN_IOAfterClose = $100000D; AN_TDDelay = $14000002; AN_BadChkSum = $7000009; LIB_CLOSE = $FFFFFFF4; RTF_SINGLETASK = 2; AN_BadGadget = $4000001; PA_SIGNAL = 0; AT_DeadEnd = $80000000; AT_Recovery = 0; AN_Unknown = $35000000; SIGB_BLIT = 4; AO_Unknown = $8035; TB_LAUNCH = 7; NT_DEVICE = 3; NT_LIBRARY = 9; AG_MakeLib = $20000; PA_SOFTINT = 1; IOERR_ABORTED = $FFFFFFFE; MEMF_FAST = 4; TS_REMOVED = 6; SIGB_INTUITION = 5; SIGF_BLIT = $10; PF_ACTION = 3; AG_BadParm = $80000; AN_WBInitLayerDemon = $B101000B; TF_LAUNCH = $80; PA_IGNORE = 2; IOERR_BADADDRESS = $FFFFFFFB; CMD_READ = 2; AN_IOUsedTwice = $100000B; CACRF_EnableD = $100; CMD_FLUSH = 8; MEM_BLOCKSIZE = 8; LIB_BASE = $FFFFFFFA; IOERR_SELFTEST = $FFFFFFF9; IOB_QUICK = 0; CMD_RESET = 1; AN_BadInitFunc = $700000D; AN_BadSegList = $8000001; SIGF_INTUITION = $20; AN_Intuition = $4000000; AO_Intuition = $8004; AN_BltBitMap = $8201000A; AN_WBBadIOMsg = $31000003; CACRF_EnableI = 1; CACRF_ClearD = $800; IOF_QUICK = 1; AN_BaseChkSum = $1000002; AN_QPktFail = $7000003; NT_PROCESS = $D; AN_LibChkSum = $1000003; AN_WBinitWbGels = $B101000C; TS_ADDED = 1; TB_EXCEPT = 5; CMD_WRITE = 3; AG_IOError = $60000; AN_GfxNoMemMspc = $82010001; CACRF_ClearI = 8; AN_ExecLib = $1000000; AN_GfxNoMem = $82010000; AN_WBCreateWBMenusCreateMenus1 = $B1010005; AO_ExecLib = $8001; AN_BadMessage = $8400000D; AN_WBCreateWBMenusCreateMenus2 = $B1010006; CMD_START = 7; AN_DiskBlkSeq = $7000006; TF_EXCEPT = $20; DMA_NoModify = 4; RTC_MATCHWORD = $4AFC; function Supervisor (userFunction: pointer): long; procedure InitCode (startClass: long; version: long); procedure InitStruct (initTable: pointer; memory: pointer; size: long); function MakeLibrary (funcInit: pointer; structInit: pointer; libInit: pointer; dataSize: long; segList: longint): pLibrary; function MakeFunctions (target: pointer; functionArray: pointer; funcDispBase: pointer): long; function FindResident (name: STRPTR): pResident; function InitResident (resident: pResident; segList: long): pointer; procedure Alert (alertNum: long); procedure Debug (flags: long); procedure Disable; procedure Enable; procedure Forbid; procedure Permit; function SetSR (newSR: long; mask: long): long; function SuperState: pointer; procedure UserState (sysStack: pointer); function SetIntVector (intNumber: long; interrupt: pInterrupt): pInterrupt; procedure AddIntServer (intNumber: long; interrupt: pInterrupt); procedure RemIntServer (intNumber: long; interrupt: pInterrupt); procedure Cause (interrupt: pInterrupt); function Allocate (freeList: pMemHeader; byteSize: long): pointer; procedure Deallocate (freeList: pMemHeader; memoryBlock: pointer; byteSize: long); function AllocMem (byteSize: long; requirements: long): pointer; function AllocAbs (byteSize: long; location: pointer): pointer; procedure FreeMem_ (memoryBlock: pointer; byteSize: long); function AvailMem (requirements: long): long; function AllocEntry (entry: pMemList): pMemList; procedure FreeEntry (entry: pMemList); procedure Insert_ (list: pList; node: pNode; pred: pNode); procedure AddHead (list: pList; node: pNode); procedure AddTail (list: pList; node: pNode); procedure Remove (node: pNode); function RemHead (list: pList): pNode; function RemTail (list: pList): pNode; procedure Enqueue (list: pList; node: pNode); function FindName (list: pList; name: STRPTR): pNode; function AddTask (task: pTask; initPC: pointer; finalPC: pointer): pointer; procedure RemTask (task: pTask); function FindTask (name: STRPTR): pTask; function SetTaskPri (task: pTask; priority: longint): shortint; function SetSignal (newSignals: long; signalSet: long): long; function SetExcept (newSignals: long; signalSet: long): long; function Wait (signalSet: long): long; procedure Signal (task: pTask; signalSet: long); function AllocSignal (signalNum: shortint): shortint; procedure FreeSignal (signalNum: shortint); function AllocTrap (trapNum: longint): longint; procedure FreeTrap (trapNum: long); procedure AddPort (port: pMsgPort); procedure RemPort (port: pMsgPort); procedure PutMsg (port: pMsgPort; message: pMessage); function GetMsg (port: pMsgPort): pMessage; procedure ReplyMsg (message: pMessage); function WaitPort (port: pMsgPort): pMessage; function FindPort (name: STRPTR): pMsgPort; procedure AddLibrary (library: pLibrary); procedure RemLibrary (library: pLibrary); function OldOpenLibrary (libName: string): pLibrary; procedure CloseLibrary (library: pLibrary); function SetFunction (library: pLibrary; funcOffset: longint; newFunction: pointer): pointer; procedure SumLibrary (library: pLibrary); procedure AddDevice (device: pDevice); procedure RemDevice (device: pDevice); function OpenDevice (devName: string; unit_: long; ioRequest: pIORequest; flags: long): shortint; procedure CloseDevice (ioRequest: pIORequest); function DoIO (ioRequest: pIORequest): shortint; procedure SendIO (ioRequest: pIORequest); function CheckIO (ioRequest: pIORequest): boolean; function WaitIO (ioRequest: pIORequest): shortint; procedure AbortIO (ioRequest: pIORequest); procedure AddResource (resource: pointer); procedure RemResource (resource: pointer); function OpenResource (resName: string): pointer; function RawDoFmt (formatString: STRPTR; dataStream: pointer; putChProc: pointer; putChData: pointer): pointer; function GetCC: word; function TypeOfMem (address: pointer): long; function Procure (semaport: pSemaphore; bidMsg: pMessage): shortint; procedure Vacate (semaport: pSemaphore); function OpenLibrary (libName: string; version: long): pLibrary; procedure InitSemaphore (sigSem: pSignalSemaphore); procedure ObtainSemaphore (sigSem: pSignalSemaphore); procedure ReleaseSemaphore (sigSem: pSignalSemaphore); function AttemptSemaphore (sigSem: pSignalSemaphore): longint; procedure ObtainSemaphoreList (sigSem: pList); procedure ReleaseSemaphoreList (sigSem: pList); function FindSemaphore (sigSem: STRPTR): pSignalSemaphore; procedure AddSemaphore (sigSem: pSignalSemaphore); procedure RemSemaphore (sigSem: pSignalSemaphore); function SumKickData: long; procedure AddMemList (size: long; attributes: long; pri: longint; base: pointer; name: STRPTR); procedure CopyMem (source: pointer; dest: pointer; size: long); procedure CopyMemQuick (source: plong; dest: plong; size: long); procedure CacheClearU; procedure CacheClearE (address: pointer; length: long; caches: long); function CacheControl (cacheBits: long; cacheMask: long): long; function CreateIORequest (port: pMsgPort; size: long): pIORequest; procedure DeleteIORequest (iorequest: pIORequest); function CreateMsgPort: pMsgPort; procedure DeleteMsgPort (port: pMsgPort); procedure ObtainSemaphoreShared (sigSem: pSignalSemaphore); function AllocVec (byteSize: long; requirements: long): pointer; procedure FreeVec (memoryBlock: pointer); procedure ColdReboot; procedure StackSwap (newStack: pStackSwapStruct); function CachePreDMA (address: pointer; length: plongint; flags: long): pointer; function CachePostDMA (address: pointer; length: plongint; flags: long): longint; procedure PasToC (p: string; var c); procedure CToPas (var c; var p: string); function BitMask (no: shortint): longint; function IsListEmpty (list: pList): boolean; function IsMsgPortEmpty (mp: pMsgPort): boolean; IMPLEMENTATION procedure PasToC; xassembler; asm movem.l 4(sp),a0-a1 moveq #0,d0 move.b (a1)+,d0 bra @2 @1: move.b (a1)+,(a0)+ @2: dbra d0,@1 clr.b (a0) end; procedure CToPas; xassembler; asm movem.l 4(sp),a0-a1 addq.l #1,a0 move.w #254,d0 @1: move.b (a1)+,d1 beq @2 move.b d1,(a0)+ dbra d0,@1 @2: addq.b #1,d0 not.b d0 move.l 4(sp),a0 move.b d0,(a0) end; function BitMask; xassembler; asm moveq #0,d0 move.b 4(sp),d1 bset d1,d0 move.l d0,6(sp) end; function IsListEmpty; begin IsListEmpty := list^.lh_TailPred = pNode(list) end; function IsMsgPortEmpty; begin with mp^ do IsMsgPortEmpty := mp_MsgList.lh_TailPred = pNode(@mp_MsgList) end; function Supervisor; xassembler; asm movem.l a5-a6,-(sp) move.l $C(sp),a5 move.l SysBase,a6 jsr -$1E(a6) move.l d0,$10(sp) movem.l (sp)+,a5-a6 end; procedure InitCode; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$48(a6) move.l (sp)+,a6 end; procedure InitStruct; xassembler; asm movem.l a2/a6,-(sp) lea $C(sp),a6 move.l (a6)+,d0 move.l (a6)+,a2 move.l (a6)+,a1 move.l SysBase,a6 jsr -$4E(a6) movem.l (sp)+,a2/a6 end; function MakeLibrary; xassembler; asm movem.l a2/a6,-(sp) lea $C(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l (a6)+,a2 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$54(a6) move.l d0,$20(sp) movem.l (sp)+,a2/a6 end; function MakeFunctions; xassembler; asm movem.l a2/a6,-(sp) lea $C(sp),a6 move.l (a6)+,a2 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$5A(a6) move.l d0,$18(sp) movem.l (sp)+,a2/a6 end; function FindResident; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$60(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; function InitResident; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d1/a1 move.l SysBase,a6 jsr -$66(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; procedure Alert; xassembler; asm movem.l d7/a6,-(sp) move.l $C(sp),d7 move.l SysBase,a6 jsr -$6C(a6) movem.l (sp)+,d7/a6 end; procedure Debug; xassembler; asm move.l a6,-(sp) move.l 8(sp),d0 move.l SysBase,a6 jsr -$72(a6) move.l (sp)+,a6 end; procedure Disable; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$78(a6) move.l (sp)+,a6 end; procedure Enable; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$7E(a6) move.l (sp)+,a6 end; procedure Forbid; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$84(a6) move.l (sp)+,a6 end; procedure Permit; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$8A(a6) move.l (sp)+,a6 end; function SetSR; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$90(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function SuperState; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$96(a6) move.l d0,8(sp) move.l (sp)+,a6 end; procedure UserState; xassembler; asm move.l a6,-(sp) move.l 8(sp),d0 move.l SysBase,a6 jsr -$9C(a6) move.l (sp)+,a6 end; function SetIntVector; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$A2(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; procedure AddIntServer; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$A8(a6) move.l (sp)+,a6 end; procedure RemIntServer; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$AE(a6) move.l (sp)+,a6 end; procedure Cause; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$B4(a6) move.l (sp)+,a6 end; function Allocate; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d0/a0 move.l SysBase,a6 jsr -$BA(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; procedure Deallocate; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d0 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$C0(a6) move.l (sp)+,a6 end; function AllocMem; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$C6(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function AllocAbs; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$CC(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; procedure FreeMem_; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d0/a1 move.l SysBase,a6 jsr -$D2(a6) move.l (sp)+,a6 end; function AvailMem; xassembler; asm move.l a6,-(sp) move.l 8(sp),d1 move.l SysBase,a6 jsr -$D8(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; function AllocEntry; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$DE(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure FreeEntry; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$E4(a6) move.l (sp)+,a6 end; procedure Insert_; xassembler; asm movem.l a2/a6,-(sp) lea $C(sp),a6 move.l (a6)+,a2 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$EA(a6) movem.l (sp)+,a2/a6 end; procedure AddHead; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$F0(a6) move.l (sp)+,a6 end; procedure AddTail; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$F6(a6) move.l (sp)+,a6 end; procedure Remove; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$FC(a6) move.l (sp)+,a6 end; function RemHead; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$102(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; function RemTail; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$108(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure Enqueue; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$10E(a6) move.l (sp)+,a6 end; function FindName; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$114(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function AddTask; xassembler; asm movem.l a2-a3/a6,-(sp) lea $10(sp),a6 move.l (a6)+,a3 move.l (a6)+,a2 move.l (a6)+,a1 move.l SysBase,a6 jsr -$11A(a6) move.l d0,$1C(sp) movem.l (sp)+,a2-a3/a6 end; procedure RemTask; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$120(a6) move.l (sp)+,a6 end; function FindTask; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$126(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; function SetTaskPri; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d0/a1 move.l SysBase,a6 jsr -$12C(a6) move.b d0,$10(sp) move.l (sp)+,a6 end; function SetSignal; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$132(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function SetExcept; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$138(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function Wait; xassembler; asm move.l a6,-(sp) move.l 8(sp),d0 move.l SysBase,a6 jsr -$13E(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure Signal; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d0/a1 move.l SysBase,a6 jsr -$144(a6) move.l (sp)+,a6 end; function AllocSignal; xassembler; asm move.l a6,-(sp) move.b 8(sp),d0 move.l SysBase,a6 jsr -$14A(a6) move.b d0,$A(sp) move.l (sp)+,a6 end; procedure FreeSignal; xassembler; asm move.l a6,-(sp) move.b 8(sp),d0 move.l SysBase,a6 jsr -$150(a6) move.l (sp)+,a6 end; function AllocTrap; xassembler; asm move.l a6,-(sp) move.l 8(sp),d0 move.l SysBase,a6 jsr -$156(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure FreeTrap; xassembler; asm move.l a6,-(sp) move.l 8(sp),d0 move.l SysBase,a6 jsr -$15C(a6) move.l (sp)+,a6 end; procedure AddPort; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$162(a6) move.l (sp)+,a6 end; procedure RemPort; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$168(a6) move.l (sp)+,a6 end; procedure PutMsg; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$16E(a6) move.l (sp)+,a6 end; function GetMsg; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$174(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure ReplyMsg; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$17A(a6) move.l (sp)+,a6 end; function WaitPort; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$180(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; function FindPort; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$186(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure AddLibrary; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$18C(a6) move.l (sp)+,a6 end; procedure RemLibrary; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$192(a6) move.l (sp)+,a6 end; function OldOpenLibrary; assembler; var c_libName: string; asm move.l libName,-(sp) pea c_libName jsr PasToC move.l a6,-(sp) lea c_libName,a1 move.l SysBase,a6 jsr -$198(a6) move.l d0,$110(sp) move.l (sp)+,a6 end; procedure CloseLibrary; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$19E(a6) move.l (sp)+,a6 end; function SetFunction; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d0/a0-a1 move.l SysBase,a6 jsr -$1A4(a6) move.l d0,$14(sp) move.l (sp)+,a6 end; procedure SumLibrary; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1AA(a6) move.l (sp)+,a6 end; procedure AddDevice; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1B0(a6) move.l (sp)+,a6 end; procedure RemDevice; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1B6(a6) move.l (sp)+,a6 end; function OpenDevice; assembler; var c_devName: string; asm move.l devName,-(sp) pea c_devName jsr PasToC move.l a6,-(sp) lea c_devName,a0 lea $10C(sp),a6 move.l (a6)+,d1 move.l (a6)+,a1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$1BC(a6) move.b d0,$11C(sp) move.l (sp)+,a6 end; procedure CloseDevice; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1C2(a6) move.l (sp)+,a6 end; function DoIO; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1C8(a6) move.b d0,$C(sp) move.l (sp)+,a6 end; procedure SendIO; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1CE(a6) move.l (sp)+,a6 end; function CheckIO; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1D4(a6) tst.l d0 sne d0 neg.b d0 move.b d0,$C(sp) move.l (sp)+,a6 end; function WaitIO; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1DA(a6) move.b d0,$C(sp) move.l (sp)+,a6 end; procedure AbortIO; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1E0(a6) move.l (sp)+,a6 end; procedure AddResource; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1E6(a6) move.l (sp)+,a6 end; procedure RemResource; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$1EC(a6) move.l (sp)+,a6 end; function OpenResource; assembler; var c_resName: string; asm move.l resName,-(sp) pea c_resName jsr PasToC move.l a6,-(sp) lea c_resName,a1 move.l SysBase,a6 jsr -$1F2(a6) move.l d0,$110(sp) move.l (sp)+,a6 end; function RawDoFmt; xassembler; asm movem.l a2-a3/a6,-(sp) lea $10(sp),a6 move.l (a6)+,a3 move.l (a6)+,a2 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$20A(a6) move.l d0,$20(sp) movem.l (sp)+,a2-a3/a6 end; function GetCC; xassembler; asm movem.l a2-a3/a6,-(sp) move.l SysBase,a6 jsr -$210(a6) move.w d0,$10(sp) movem.l (sp)+,a2-a3/a6 end; function TypeOfMem; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$216(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; function Procure; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$21C(a6) move.b d0,$10(sp) move.l (sp)+,a6 end; procedure Vacate; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$222(a6) move.l (sp)+,a6 end; function OpenLibrary; assembler; var c_libName: string; asm move.l libName,-(sp) pea c_libName jsr PasToC move.l a6,-(sp) lea c_libName,a1 move.l $10C(sp),d0 move.l SysBase,a6 jsr -$228(a6) move.l d0,$114(sp) move.l (sp)+,a6 end; procedure InitSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$22E(a6) move.l (sp)+,a6 end; procedure ObtainSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$234(a6) move.l (sp)+,a6 end; procedure ReleaseSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$23A(a6) move.l (sp)+,a6 end; function AttemptSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$240(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure ObtainSemaphoreList; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$246(a6) move.l (sp)+,a6 end; procedure ReleaseSemaphoreList; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$24C(a6) move.l (sp)+,a6 end; function FindSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$252(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure AddSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$258(a6) move.l (sp)+,a6 end; procedure RemSemaphore; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$25E(a6) move.l (sp)+,a6 end; function SumKickData; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$264(a6) move.l d0,8(sp) move.l (sp)+,a6 end; procedure AddMemList; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l (a6)+,d2 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$26A(a6) move.l (sp)+,a6 end; procedure CopyMem; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d0 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$270(a6) move.l (sp)+,a6 end; procedure CopyMemQuick; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d0 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$276(a6) move.l (sp)+,a6 end; procedure CacheClearU; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$27C(a6) move.l (sp)+,a6 end; procedure CacheClearE; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l (a6)+,a0 move.l SysBase,a6 jsr -$282(a6) move.l (sp)+,a6 end; function CacheControl; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$288(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function CreateIORequest; xassembler; asm move.l a6,-(sp) movem.l 8(sp),d0/a0 move.l SysBase,a6 jsr -$28E(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; procedure DeleteIORequest; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$294(a6) move.l (sp)+,a6 end; function CreateMsgPort; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$29A(a6) move.l d0,8(sp) move.l (sp)+,a6 end; procedure DeleteMsgPort; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$2A0(a6) move.l (sp)+,a6 end; procedure ObtainSemaphoreShared; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$2A6(a6) move.l (sp)+,a6 end; function AllocVec; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,d0 move.l SysBase,a6 jsr -$2AC(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; procedure FreeVec; xassembler; asm move.l a6,-(sp) move.l 8(sp),a1 move.l SysBase,a6 jsr -$2B2(a6) move.l (sp)+,a6 end; procedure ColdReboot; xassembler; asm move.l a6,-(sp) move.l SysBase,a6 jsr -$2D6(a6) move.l (sp)+,a6 end; procedure StackSwap; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l SysBase,a6 jsr -$2DC(a6) move.l (sp)+,a6 end; function CachePreDMA; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$2FA(a6) move.l d0,$14(sp) move.l (sp)+,a6 end; function CachePostDMA; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,d1 move.l (a6)+,a1 move.l (a6)+,a0 move.l SysBase,a6 jsr -$300(a6) move.l d0,$14(sp) move.l (sp)+,a6 end; end.