exec.pp 68 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Amiga exec.library include file
  5. Copyright (c) 1997 by Nils Sjoholm
  6. member of the Amiga RTL development team.
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. unit Exec;
  14. INTERFACE
  15. TYPE
  16. STRPTR = PChar;
  17. ULONG = Longint;
  18. LONG = longint;
  19. APTR = Pointer;
  20. BPTR = Longint;
  21. BSTR = Longint;
  22. pWord = ^Word;
  23. pLongint = ^Longint;
  24. pInteger = ^Integer;
  25. TYPE
  26. {$PACKRECORDS 4}
  27. { * List Node Structure. Each member in a list starts with a Node * }
  28. pNode = ^tNode;
  29. tNode = Record
  30. ln_Succ, { * Pointer to next (successor) * }
  31. ln_Pred : pNode; { * Pointer to previous (predecessor) * }
  32. ln_Type : Byte;
  33. ln_Pri : Shortint; { * Priority, for sorting * }
  34. ln_Name : STRPTR; { * ID string, null terminated * }
  35. End; { * Note: Integer aligned * }
  36. {$PACKRECORDS NORMAL}
  37. { * minimal node -- no type checking possible * }
  38. pMinNode = ^tMinNode;
  39. tMinNode = Record
  40. mln_Succ,
  41. mln_Pred : pMinNode;
  42. End;
  43. { *
  44. ** Note: Newly initialized IORequests, and software interrupt structures
  45. ** used with Cause(), should have type NT_UNKNOWN. The OS will assign a type
  46. ** when they are first used.
  47. * }
  48. { *----- Node Types for LN_TYPE -----* }
  49. Const
  50. NT_UNKNOWN = 0;
  51. NT_TASK = 1; { * Exec task * }
  52. NT_INTERRUPT = 2;
  53. NT_DEVICE = 3;
  54. NT_MSGPORT = 4;
  55. NT_MESSAGE = 5; { * Indicates message currently pending * }
  56. NT_FREEMSG = 6;
  57. NT_REPLYMSG = 7; { * Message has been replied * }
  58. NT_RESOURCE = 8;
  59. NT_LIBRARY = 9;
  60. NT_MEMORY = 10;
  61. NT_SOFTINT = 11; { * Internal flag used by SoftInits * }
  62. NT_FONT = 12;
  63. NT_PROCESS = 13; { * AmigaDOS Process * }
  64. NT_SEMAPHORE = 14;
  65. NT_SIGNALSEM = 15; { * signal semaphores * }
  66. NT_BOOTNODE = 16;
  67. NT_KICKMEM = 17;
  68. NT_GRAPHICS = 18;
  69. NT_DEATHMESSAGE = 19;
  70. NT_USER = 254; { * User node types work down from here * }
  71. NT_EXTENDED = 255;
  72. {
  73. This file defines Exec system lists, which are used to link
  74. various things. Exec provides several routines to handle list
  75. processing (defined at the bottom of this file), so you can
  76. use these routines to save yourself the trouble of writing a list
  77. package.
  78. }
  79. Type
  80. { normal, full featured list }
  81. pList = ^tList;
  82. tList = record
  83. lh_Head : pNode;
  84. lh_Tail : pNode;
  85. lh_TailPred : pNode;
  86. lh_Type : Byte;
  87. l_pad : Byte;
  88. end;
  89. { minimum list -- no type checking possible }
  90. pMinList = ^tMinList;
  91. tMinList = record
  92. mlh_Head : pMinNode;
  93. mlh_Tail : pMinNode;
  94. mlh_TailPred : pMinNode;
  95. end;
  96. { ********************************************************************
  97. *
  98. * Format of the alert error number:
  99. *
  100. * +-+-------------+----------------+--------------------------------+
  101. * |D| SubSysId | General Error | SubSystem Specific Error |
  102. * +-+-------------+----------------+--------------------------------+
  103. * 1 7 bits 8 bits 16 bits
  104. *
  105. * D: DeadEnd alert
  106. * SubSysId: indicates ROM subsystem number.
  107. * General Error: roughly indicates what the error was
  108. * Specific Error: indicates more detail
  109. *********************************************************************}
  110. const
  111. {*********************************************************************
  112. *
  113. * Hardware/CPU specific alerts: They may show without the 8 at the
  114. * front of the number. These are CPU/68000 specific. See 68$0
  115. * programmer's manuals for more details.
  116. *
  117. *********************************************************************}
  118. ACPU_BusErr = $80000002; { Hardware bus fault/access error }
  119. ACPU_AddressErr = $80000003; { Illegal address access (ie: odd) }
  120. ACPU_InstErr = $80000004; { Illegal instruction }
  121. ACPU_DivZero = $80000005; { Divide by zero }
  122. ACPU_CHK = $80000006; { Check instruction error }
  123. ACPU_TRAPV = $80000007; { TrapV instruction error }
  124. ACPU_PrivErr = $80000008; { Privilege violation error }
  125. ACPU_Trace = $80000009; { Trace error }
  126. ACPU_LineA = $8000000A; { Line 1010 Emulator error }
  127. ACPU_LineF = $8000000B; { Line 1111 Emulator error }
  128. ACPU_Format = $8000000E; { Stack frame format error }
  129. ACPU_Spurious = $80000018; { Spurious interrupt error }
  130. ACPU_AutoVec1 = $80000019; { AutoVector Level 1 interrupt error }
  131. ACPU_AutoVec2 = $8000001A; { AutoVector Level 2 interrupt error }
  132. ACPU_AutoVec3 = $8000001B; { AutoVector Level 3 interrupt error }
  133. ACPU_AutoVec4 = $8000001C; { AutoVector Level 4 interrupt error }
  134. ACPU_AutoVec5 = $8000001D; { AutoVector Level 5 interrupt error }
  135. ACPU_AutoVec6 = $8000001E; { AutoVector Level 6 interrupt error }
  136. ACPU_AutoVec7 = $8000001F; { AutoVector Level 7 interrupt error }
  137. { ********************************************************************
  138. *
  139. * General Alerts
  140. *
  141. * For example: timer.device cannot open math.library would be $05038015
  142. *
  143. * Alert(AN_TimerDev|AG_OpenLib|AO_MathLib);
  144. *
  145. ********************************************************************}
  146. CONST
  147. { ------ alert types }
  148. AT_DeadEnd = $80000000;
  149. AT_Recovery = $00000000;
  150. { ------ general purpose alert codes }
  151. AG_NoMemory = $00010000;
  152. AG_MakeLib = $00020000;
  153. AG_OpenLib = $00030000;
  154. AG_OpenDev = $00040000;
  155. AG_OpenRes = $00050000;
  156. AG_IOError = $00060000;
  157. AG_NoSignal = $00070000;
  158. AG_BadParm = $00080000;
  159. AG_CloseLib = $00090000; { usually too many closes }
  160. AG_CloseDev = $000A0000; { or a mismatched close }
  161. AG_ProcCreate = $000B0000; { Process creation failed }
  162. { ------ alert objects: }
  163. AO_ExecLib = $00008001;
  164. AO_GraphicsLib = $00008002;
  165. AO_LayersLib = $00008003;
  166. AO_Intuition = $00008004;
  167. AO_MathLib = $00008005;
  168. AO_DOSLib = $00008007;
  169. AO_RAMLib = $00008008;
  170. AO_IconLib = $00008009;
  171. AO_ExpansionLib = $0000800A;
  172. AO_DiskfontLib = $0000800B;
  173. AO_UtilityLib = $0000800C;
  174. AO_KeyMapLib = $0000800D;
  175. AO_AudioDev = $00008010;
  176. AO_ConsoleDev = $00008011;
  177. AO_GamePortDev = $00008012;
  178. AO_KeyboardDev = $00008013;
  179. AO_TrackDiskDev = $00008014;
  180. AO_TimerDev = $00008015;
  181. AO_CIARsrc = $00008020;
  182. AO_DiskRsrc = $00008021;
  183. AO_MiscRsrc = $00008022;
  184. AO_BootStrap = $00008030;
  185. AO_Workbench = $00008031;
  186. AO_DiskCopy = $00008032;
  187. AO_GadTools = $00008033;
  188. AO_Unknown = $00008035;
  189. { ********************************************************************
  190. *
  191. * Specific Alerts:
  192. *
  193. ********************************************************************}
  194. { ------ exec.library }
  195. AN_ExecLib = $01000000;
  196. AN_ExcptVect = $01000001; { 68000 exception vector checksum (obs.) }
  197. AN_BaseChkSum = $01000002; { Execbase checksum (obs.) }
  198. AN_LibChkSum = $01000003; { Library checksum failure }
  199. AN_MemCorrupt = $81000005; { Corrupt memory list detected in FreeMem }
  200. AN_IntrMem = $81000006; { No memory for interrupt servers }
  201. AN_InitAPtr = $01000007; { InitStruct() of an APTR source (obs.) }
  202. AN_SemCorrupt = $01000008; { A semaphore is in an illegal state
  203. at ReleaseSempahore() }
  204. AN_FreeTwice = $01000009; { Freeing memory already freed }
  205. AN_BogusExcpt = $8100000A; { illegal 68k exception taken (obs.) }
  206. AN_IOUsedTwice = $0100000B; { Attempt to reuse active IORequest }
  207. AN_MemoryInsane = $0100000C; { Sanity check on memory list failed
  208. during AvailMem(MEMF_LARGEST) }
  209. AN_IOAfterClose = $0100000D; { IO attempted on closed IORequest }
  210. AN_StackProbe = $0100000E; { Stack appears to extend out of range }
  211. AN_BadFreeAddr = $0100000F; { Memory header not located. [ Usually an
  212. invalid address passed to FreeMem() ] }
  213. AN_BadSemaphore = $01000010; { An attempt was made to use the old
  214. message semaphores. }
  215. { ------ graphics.library }
  216. AN_GraphicsLib = $02000000;
  217. AN_GfxNoMem = $82010000; { graphics out of memory }
  218. AN_GfxNoMemMspc = $82010001; { MonitorSpec alloc, no memory }
  219. AN_LongFrame = $82010006; { long frame, no memory }
  220. AN_ShortFrame = $82010007; { short frame, no memory }
  221. AN_TextTmpRas = $02010009; { text, no memory for TmpRas }
  222. AN_BltBitMap = $8201000A; { BltBitMap, no memory }
  223. AN_RegionMemory = $8201000B; { regions, memory not available }
  224. AN_MakeVPort = $82010030; { MakeVPort, no memory }
  225. AN_GfxNewError = $0200000C;
  226. AN_GfxFreeError = $0200000D;
  227. AN_GfxNoLCM = $82011234; { emergency memory not available }
  228. AN_ObsoleteFont = $02000401; { unsupported font description used }
  229. { ------ layers.library }
  230. AN_LayersLib = $03000000;
  231. AN_LayersNoMem = $83010000; { layers out of memory }
  232. { ------ intuition.library }
  233. AN_Intuition = $04000000;
  234. AN_GadgetType = $84000001; { unknown gadget type }
  235. AN_BadGadget = $04000001; { Recovery form of AN_GadgetType }
  236. AN_CreatePort = $84010002; { create port, no memory }
  237. AN_ItemAlloc = $04010003; { item plane alloc, no memory }
  238. AN_SubAlloc = $04010004; { sub alloc, no memory }
  239. AN_PlaneAlloc = $84010005; { plane alloc, no memory }
  240. AN_ItemBoxTop = $84000006; { item box top < RelZero }
  241. AN_OpenScreen = $84010007; { open screen, no memory }
  242. AN_OpenScrnRast = $84010008; { open screen, raster alloc, no memory }
  243. AN_SysScrnType = $84000009; { open sys screen, unknown type }
  244. AN_AddSWGadget = $8401000A; { add SW gadgets, no memory }
  245. AN_OpenWindow = $8401000B; { open window, no memory }
  246. AN_BadState = $8400000C; { Bad State Return entering Intuition }
  247. AN_BadMessage = $8400000D; { Bad Message received by IDCMP }
  248. AN_WeirdEcho = $8400000E; { Weird echo causing incomprehension }
  249. AN_NoConsole = $8400000F; { couldn't open the Console Device }
  250. AN_NoISem = $04000010; { Intuition skipped obtaining a sem }
  251. AN_ISemOrder = $04000011; { Intuition obtained a sem in bad order }
  252. { ------ math.library }
  253. AN_MathLib = $05000000;
  254. { ------ dos.library }
  255. AN_DOSLib = $07000000;
  256. AN_StartMem = $07010001; { no memory at startup }
  257. AN_EndTask = $07000002; { EndTask didn't }
  258. AN_QPktFail = $07000003; { Qpkt failure }
  259. AN_AsyncPkt = $07000004; { Unexpected packet received }
  260. AN_FreeVec = $07000005; { Freevec failed }
  261. AN_DiskBlkSeq = $07000006; { Disk block sequence error }
  262. AN_BitMap = $07000007; { Bitmap corrupt }
  263. AN_KeyFree = $07000008; { Key already free }
  264. AN_BadChkSum = $07000009; { Invalid checksum }
  265. AN_DiskError = $0700000A; { Disk Error }
  266. AN_KeyRange = $0700000B; { Key out of range }
  267. AN_BadOverlay = $0700000C; { Bad overlay }
  268. AN_BadInitFunc = $0700000D; { Invalid init packet for cli/shell }
  269. AN_FileReclosed = $0700000E; { A filehandle was closed more than once }
  270. { ------ ramlib.library }
  271. AN_RAMLib = $08000000;
  272. AN_BadSegList = $08000001; { no overlays in library seglists }
  273. { ------ icon.library }
  274. AN_IconLib = $09000000;
  275. { ------ expansion.library }
  276. AN_ExpansionLib = $0A000000;
  277. AN_BadExpansionFree = $0A000001; { freeed free region }
  278. { ------ diskfont.library }
  279. AN_DiskfontLib = $0B000000;
  280. { ------ audio.device }
  281. AN_AudioDev = $10000000;
  282. { ------ console.device }
  283. AN_ConsoleDev = $11000000;
  284. AN_NoWindow = $11000001; { Console can't open initial window }
  285. { ------ gameport.device }
  286. AN_GamePortDev = $12000000;
  287. { ------ keyboard.device }
  288. AN_KeyboardDev = $13000000;
  289. { ------ trackdisk.device }
  290. AN_TrackDiskDev = $14000000;
  291. AN_TDCalibSeek = $14000001; { calibrate: seek error }
  292. AN_TDDelay = $14000002; { delay: error on timer wait }
  293. { ------ timer.device }
  294. AN_TimerDev = $15000000;
  295. AN_TMBadReq = $15000001; { bad request }
  296. AN_TMBadSupply = $15000002; { power supply -- no 50/60Hz ticks }
  297. { ------ cia.resource }
  298. AN_CIARsrc = $20000000;
  299. { ------ disk.resource }
  300. AN_DiskRsrc = $21000000;
  301. AN_DRHasDisk = $21000001; { get unit: already has disk }
  302. AN_DRIntNoAct = $21000002; { interrupt: no active unit }
  303. { ------ misc.resource }
  304. AN_MiscRsrc = $22000000;
  305. { ------ bootstrap }
  306. AN_BootStrap = $30000000;
  307. AN_BootError = $30000001; { boot code returned an error }
  308. { ------ Workbench }
  309. AN_Workbench = $31000000;
  310. AN_NoFonts = $B1000001;
  311. AN_WBBadStartupMsg1 = $31000001;
  312. AN_WBBadStartupMsg2 = $31000002;
  313. AN_WBBadIOMsg = $31000003;
  314. AN_WBReLayoutToolMenu = $B1010009;
  315. { ------ DiskCopy }
  316. AN_DiskCopy = $32000000;
  317. { ------ toolkit for Intuition }
  318. AN_GadTools = $33000000;
  319. { ------ System utility library }
  320. AN_UtilityLib = $34000000;
  321. { ------ For use by any application that needs it }
  322. AN_Unknown = $35000000;
  323. CONST
  324. IOERR_OPENFAIL = -1; { device/unit failed to open }
  325. IOERR_ABORTED = -2; { request terminated early [after AbortIO()] }
  326. IOERR_NOCMD = -3; { command not supported by device }
  327. IOERR_BADLENGTH = -4; { not a valid length (usually IO_LENGTH) }
  328. IOERR_BADADDRESS = -5; { invalid address (misaligned or bad range) }
  329. IOERR_UNITBUSY = -6; { device opens ok, but requested unit is busy }
  330. IOERR_SELFTEST = -7; { hardware failed self-test }
  331. type
  332. pResident = ^tResident;
  333. tResident = record
  334. rt_MatchWord : Word; { Integer to match on (ILLEGAL) }
  335. rt_MatchTag : pResident; { pointer to the above }
  336. rt_EndSkip : Pointer; { address to continue scan }
  337. rt_Flags : Byte; { various tag flags }
  338. rt_Version : Byte; { release version number }
  339. rt_Type : Byte; { type of module (NT_mumble) }
  340. rt_Pri : Shortint; { initialization priority }
  341. rt_Name : STRPTR; { pointer to node name }
  342. rt_IdString : STRPTR; { pointer to ident string }
  343. rt_Init : Pointer; { pointer to init code }
  344. end;
  345. const
  346. RTC_MATCHWORD = $4AFC;
  347. RTF_AUTOINIT = $80;
  348. RTF_AFTERDOS = $04;
  349. RTF_SINGLETASK = $02;
  350. RTF_COLDSTART = $01;
  351. { Compatibility: }
  352. RTM_WHEN = $03;
  353. RTW_COLDSTART = $01;
  354. RTW_NEVER = $00;
  355. TYPE
  356. { ****** MemChunk **************************************************** }
  357. pMemChunk = ^tMemChunk;
  358. tMemChunk = Record
  359. mc_Next : pMemChunk; { * pointer to next chunk * }
  360. mc_Bytes : ULONG; { * chunk byte size * }
  361. End;
  362. { ****** MemHeader *************************************************** }
  363. pMemHeader = ^tMemHeader;
  364. tMemHeader = Record
  365. mh_Node : tNode;
  366. mh_Attributes : Word; { * characteristics of this region * }
  367. mh_First : pMemChunk; { * first free region * }
  368. mh_Lower, { * lower memory bound * }
  369. mh_Upper : Pointer; { * upper memory bound+1 * }
  370. mh_Free : Ulong; { * total number of free bytes * }
  371. End;
  372. { ****** MemEntry **************************************************** }
  373. pMemUnit = ^tMemUnit;
  374. tMemUnit = Record
  375. meu_Reqs : ULONG; { * the AllocMem requirements * }
  376. meu_Addr : Pointer; { * the address of this memory region * }
  377. End;
  378. pMemEntry = ^tMemEntry;
  379. tMemEntry = Record
  380. me_Un : tMemUnit;
  381. me_Length : ULONG; { * the length of this memory region * }
  382. End;
  383. { ****** MemList ***************************************************** }
  384. { * Note: sizeof(struct MemList) includes the size of the first MemEntry! * }
  385. pMemList = ^tMemList;
  386. tMemList = Record
  387. ml_Node : tNode;
  388. ml_NumEntries : Word; { * number of entries in this struct * }
  389. ml_ME : Array [0..0] of tMemEntry; { * the first entry * }
  390. End;
  391. { *----- Memory Requirement Types ---------------------------* }
  392. { *----- See the AllocMem() documentation for details--------* }
  393. Const
  394. MEMF_ANY = %000000000000000000000000; { * Any type of memory will do * }
  395. MEMF_PUBLIC = %000000000000000000000001;
  396. MEMF_CHIP = %000000000000000000000010;
  397. MEMF_FAST = %000000000000000000000100;
  398. MEMF_LOCAL = %000000000000000100000000;
  399. MEMF_24BITDMA = %000000000000001000000000; { * DMAable memory within 24 bits of address * }
  400. MEMF_KICK = %000000000000010000000000; { Memory that can be used for KickTags }
  401. MEMF_CLEAR = %000000010000000000000000;
  402. MEMF_LARGEST = %000000100000000000000000;
  403. MEMF_REVERSE = %000001000000000000000000;
  404. MEMF_TOTAL = %000010000000000000000000; { * AvailMem: return total size of memory * }
  405. MEMF_NO_EXPUNGE = $80000000; {AllocMem: Do not cause expunge on failure }
  406. MEM_BLOCKSIZE = 8;
  407. MEM_BLOCKMASK = MEM_BLOCKSIZE-1;
  408. Type
  409. {***** MemHandlerData *********************************************}
  410. { Note: This structure is *READ ONLY* and only EXEC can create it!}
  411. pMemHandlerData = ^tMemHandlerData;
  412. tMemHandlerData = Record
  413. memh_RequestSize, { Requested allocation size }
  414. memh_RequestFlags, { Requested allocation flags }
  415. memh_Flags : ULONG; { Flags (see below) }
  416. end;
  417. const
  418. MEMHF_RECYCLE = 1; { 0==First time, 1==recycle }
  419. {***** Low Memory handler return values **************************}
  420. MEM_DID_NOTHING = 0; { Nothing we could do... }
  421. MEM_ALL_DONE = -1; { We did all we could do }
  422. MEM_TRY_AGAIN = 1; { We did some, try the allocation again }
  423. type
  424. pInterrupt = ^tInterrupt;
  425. tInterrupt = record
  426. is_Node : tNode;
  427. is_Data : Pointer; { Server data segment }
  428. is_Code : Pointer; { Server code entry }
  429. end;
  430. pIntVector = ^tIntVector;
  431. tIntVector = record { For EXEC use ONLY! }
  432. iv_Data : Pointer;
  433. iv_Code : Pointer;
  434. iv_Node : pNode;
  435. end;
  436. pSoftIntList = ^tSoftIntList;
  437. tSoftIntList = record { For EXEC use ONLY! }
  438. sh_List : tList;
  439. sh_Pad : Word;
  440. end;
  441. const
  442. SIH_PRIMASK = $F0;
  443. { this is a fake INT definition, used only for AddIntServer and the like }
  444. INTB_NMI = 15;
  445. INTF_NMI = $0080;
  446. {
  447. Every Amiga Task has one of these Task structures associated with it.
  448. To find yours, use FindTask(Nil). AmigaDOS processes tack a few more
  449. values on to the end of this structure, which is the difference between
  450. Tasks and Processes.
  451. }
  452. type
  453. pTask = ^tTask;
  454. tTask = record
  455. tc_Node : tNode;
  456. tc_Flags : Byte;
  457. tc_State : Byte;
  458. tc_IDNestCnt : Shortint; { intr disabled nesting }
  459. tc_TDNestCnt : Shortint; { task disabled nesting }
  460. tc_SigAlloc : ULONG; { sigs allocated }
  461. tc_SigWait : ULONG; { sigs we are waiting for }
  462. tc_SigRecvd : ULONG; { sigs we have received }
  463. tc_SigExcept : ULONG; { sigs we will take excepts for }
  464. tc_TrapAlloc : Word; { traps allocated }
  465. tc_TrapAble : Word; { traps enabled }
  466. tc_ExceptData : Pointer; { points to except data }
  467. tc_ExceptCode : Pointer; { points to except code }
  468. tc_TrapData : Pointer; { points to trap data }
  469. tc_TrapCode : Pointer; { points to trap code }
  470. tc_SPReg : Pointer; { stack pointer }
  471. tc_SPLower : Pointer; { stack lower bound }
  472. tc_SPUpper : Pointer; { stack upper bound + 2 }
  473. tc_Switch : Pointer; { task losing CPU }
  474. tc_Launch : Pointer; { task getting CPU }
  475. tc_MemEntry : tList; { allocated memory }
  476. tc_UserData : Pointer; { per task data }
  477. end;
  478. {
  479. * Stack swap structure as passed to StackSwap()
  480. }
  481. pStackSwapStruct = ^tStackSwapStruct;
  482. tStackSwapStruct = Record
  483. stk_Lower : Pointer; { Lowest byte of stack }
  484. stk_Upper : ULONG; { Upper end of stack (size + Lowest) }
  485. stk_Pointer : Pointer; { Stack pointer at switch point }
  486. end;
  487. {----- Flag Bits ------------------------------------------}
  488. const
  489. TB_PROCTIME = 0;
  490. TB_ETASK = 3;
  491. TB_STACKCHK = 4;
  492. TB_EXCEPT = 5;
  493. TB_SWITCH = 6;
  494. TB_LAUNCH = 7;
  495. TF_PROCTIME = 1;
  496. TF_ETASK = 8;
  497. TF_STACKCHK = 16;
  498. TF_EXCEPT = 32;
  499. TF_SWITCH = 64;
  500. TF_LAUNCH = 128;
  501. {----- Task States ----------------------------------------}
  502. TS_INVALID = 0;
  503. TS_ADDED = 1;
  504. TS_RUN = 2;
  505. TS_READY = 3;
  506. TS_WAIT = 4;
  507. TS_EXCEPT = 5;
  508. TS_REMOVED = 6;
  509. {----- Predefined Signals -------------------------------------}
  510. SIGB_ABORT = 0;
  511. SIGB_CHILD = 1;
  512. SIGB_BLIT = 4;
  513. SIGB_SINGLE = 4;
  514. SIGB_INTUITION = 5;
  515. SIGB_DOS = 8;
  516. SIGF_ABORT = 1;
  517. SIGF_CHILD = 2;
  518. SIGF_BLIT = 16;
  519. SIGF_SINGLE = 16;
  520. SIGF_INTUITION = 32;
  521. SIGF_DOS = 256;
  522. {
  523. This file defines ports and messages, which are used for inter-
  524. task communications using the routines defined toward the
  525. bottom of this file.
  526. }
  527. type
  528. {****** MsgPort *****************************************************}
  529. pMsgPort = ^tMsgPort;
  530. tMsgPort = record
  531. mp_Node : tNode;
  532. mp_Flags : Byte;
  533. mp_SigBit : Byte; { signal bit number }
  534. mp_SigTask : Pointer; { task to be signalled (TaskPtr) }
  535. mp_MsgList : tList; { message linked list }
  536. end;
  537. {****** Message *****************************************************}
  538. pMessage = ^tMessage;
  539. tMessage = record
  540. mn_Node : tNode;
  541. mn_ReplyPort : pMsgPort; { message reply port }
  542. mn_Length : Word; { message len in bytes }
  543. end;
  544. { mp_Flags: Port arrival actions (PutMsg) }
  545. CONST
  546. PF_ACTION = 3; { * Mask * }
  547. PA_SIGNAL = 0; { * Signal task in mp_SigTask * }
  548. PA_SOFTINT = 1; { * Signal SoftInt in mp_SoftInt/mp_SigTask * }
  549. PA_IGNORE = 2; { * Ignore arrival * }
  550. { Semaphore }
  551. type
  552. pSemaphore = ^tSemaphore;
  553. tSemaphore = record
  554. sm_MsgPort : tMsgPort;
  555. sm_Bids : Integer;
  556. end;
  557. { This is the structure used to request a signal semaphore }
  558. pSemaphoreRequest = ^tSemaphoreRequest;
  559. tSemaphoreRequest = record
  560. sr_Link : tMinNode;
  561. sr_Waiter : pTask;
  562. end;
  563. { The actual semaphore itself }
  564. pSignalSemaphore = ^tSignalSemaphore;
  565. tSignalSemaphore = record
  566. ss_Link : tNode;
  567. ss_NestCount : Integer;
  568. ss_WaitQueue : tMinList;
  569. ss_MultipleLink : tSemaphoreRequest;
  570. ss_Owner : pTask;
  571. ss_QueueCount : Integer;
  572. end;
  573. { ***** Semaphore procure message (for use in V39 Procure/Vacate *** }
  574. pSemaphoreMessage = ^tSemaphoreMessage;
  575. tSemaphoreMessage = Record
  576. ssm_Message : tMessage;
  577. ssm_Semaphore : pSignalSemaphore;
  578. end;
  579. const
  580. SM_SHARED = 1;
  581. SM_EXCLUSIVE = 0;
  582. CONST
  583. { ------ Special Constants --------------------------------------- }
  584. LIB_VECTSIZE = 6; { Each library entry takes 6 bytes }
  585. LIB_RESERVED = 4; { Exec reserves the first 4 vectors }
  586. LIB_BASE = (-LIB_VECTSIZE);
  587. LIB_USERDEF = (LIB_BASE-(LIB_RESERVED*LIB_VECTSIZE));
  588. LIB_NONSTD = (LIB_USERDEF);
  589. { ------ Standard Functions -------------------------------------- }
  590. LIB_OPEN = -6;
  591. LIB_CLOSE = -12;
  592. LIB_EXPUNGE = -18;
  593. LIB_EXTFUNC = -24; { for future expansion }
  594. TYPE
  595. { ------ Library Base Structure ---------------------------------- }
  596. { Also used for Devices and some Resources }
  597. pLibrary = ^tLibrary;
  598. tLibrary = record
  599. lib_Node : tNode;
  600. lib_Flags,
  601. lib_pad : Byte;
  602. lib_NegSize, { number of bytes before library }
  603. lib_PosSize, { number of bytes after library }
  604. lib_Version, { major }
  605. lib_Revision : Word; { minor }
  606. lib_IdString : STRPTR; { ASCII identification }
  607. lib_Sum : ULONG; { the checksum itself }
  608. lib_OpenCnt : Word; { number of current opens }
  609. end; { * Warning: size is not a longword multiple ! * }
  610. CONST
  611. { lib_Flags bit definitions (all others are system reserved) }
  612. LIBF_SUMMING = %00000001; { we are currently checksumming }
  613. LIBF_CHANGED = %00000010; { we have just changed the lib }
  614. LIBF_SUMUSED = %00000100; { set if we should bother to sum }
  615. LIBF_DELEXP = %00001000; { delayed expunge }
  616. {
  617. This file defines the constants and types required to use
  618. Amiga device IO routines, which are also defined here.
  619. }
  620. TYPE
  621. {***** Device *****************************************************}
  622. pDevice = ^tDevice;
  623. tDevice = record
  624. dd_Library : tLibrary;
  625. end;
  626. {***** Unit *******************************************************}
  627. pUnit = ^tUnit;
  628. tUnit = record
  629. unit_MsgPort : tMsgPort; { queue for unprocessed messages }
  630. { instance of msgport is recommended }
  631. unit_flags,
  632. unit_pad : Byte;
  633. unit_OpenCnt : Word; { number of active opens }
  634. end;
  635. Const
  636. UNITF_ACTIVE = %00000001;
  637. UNITF_INTASK = %00000010;
  638. type
  639. pIORequest = ^tIORequest;
  640. tIORequest = record
  641. io_Message : tMessage;
  642. io_Device : pDevice; { device node pointer }
  643. io_Unit : pUnit; { unit (driver private)}
  644. io_Command : Word; { device command }
  645. io_Flags : Byte;
  646. io_Error : Shortint; { error or warning num }
  647. end;
  648. pIOStdReq = ^tIOStdReq;
  649. tIOStdReq = record
  650. io_Message : tMessage;
  651. io_Device : pDevice; { device node pointer }
  652. io_Unit : pUnit; { unit (driver private)}
  653. io_Command : Word; { device command }
  654. io_Flags : Byte;
  655. io_Error : Shortint; { error or warning num }
  656. io_Actual : ULONG; { actual number of bytes transferred }
  657. io_Length : ULONG; { requested number bytes transferred}
  658. io_Data : Pointer; { points to data area }
  659. io_Offset : ULONG; { offset for block structured devices }
  660. end;
  661. { library vector offsets for device reserved vectors }
  662. const
  663. DEV_BEGINIO = -30;
  664. DEV_ABORTIO = -36;
  665. { io_Flags defined bits }
  666. IOB_QUICK = 0;
  667. IOF_QUICK = 1;
  668. CMD_INVALID = 0;
  669. CMD_RESET = 1;
  670. CMD_READ = 2;
  671. CMD_WRITE = 3;
  672. CMD_UPDATE = 4;
  673. CMD_CLEAR = 5;
  674. CMD_STOP = 6;
  675. CMD_START = 7;
  676. CMD_FLUSH = 8;
  677. CMD_NONSTD = 9;
  678. { Definition of the Exec library base structure (pointed to by location 4).
  679. ** Most fields are not to be viewed or modified by user programs. Use
  680. ** extreme caution.
  681. }
  682. type
  683. pExecBase = ^tExecBase;
  684. tExecBase = Record
  685. LibNode : tLibrary; { Standard library node }
  686. { ******* Static System Variables ******* }
  687. SoftVer : Word; { kickstart release number (obs.) }
  688. LowMemChkSum : Integer; { checksum of 68000 trap vectors }
  689. ChkBase : ULONG; { system base pointer complement }
  690. ColdCapture, { coldstart soft capture vector }
  691. CoolCapture, { coolstart soft capture vector }
  692. WarmCapture, { warmstart soft capture vector }
  693. SysStkUpper, { system stack base (upper bound) }
  694. SysStkLower : Pointer; { top of system stack (lower bound) }
  695. MaxLocMem : ULONG; { top of chip memory }
  696. DebugEntry, { global debugger entry point }
  697. DebugData, { global debugger data segment }
  698. AlertData, { alert data segment }
  699. MaxExtMem : Pointer; { top of extended mem, or null if none }
  700. ChkSum : Word; { for all of the above (minus 2) }
  701. { ***** Interrupt Related ************************************** }
  702. IntVects : Array[0..15] of tIntVector;
  703. { ***** Dynamic System Variables ************************************ }
  704. ThisTask : pTask; { pointer to current task (readable) }
  705. IdleCount, { idle counter }
  706. DispCount : ULONG; { dispatch counter }
  707. Quantum, { time slice quantum }
  708. Elapsed, { current quantum ticks }
  709. SysFlags : Word; { misc internal system flags }
  710. IDNestCnt, { interrupt disable nesting count }
  711. TDNestCnt : Shortint; { task disable nesting count }
  712. AttnFlags, { special attention flags (readable) }
  713. AttnResched : Word; { rescheduling attention }
  714. ResModules, { resident module array pointer }
  715. TaskTrapCode,
  716. TaskExceptCode,
  717. TaskExitCode : Pointer;
  718. TaskSigAlloc : ULONG;
  719. TaskTrapAlloc: Word;
  720. { ***** System Lists (private!) ******************************* }
  721. MemList,
  722. ResourceList,
  723. DeviceList,
  724. IntrList,
  725. LibList,
  726. PortList,
  727. TaskReady,
  728. TaskWait : tList;
  729. SoftInts : Array[0..4] of tSoftIntList;
  730. { ***** Other Globals ****************************************** }
  731. LastAlert : Array[0..3] of LONG;
  732. { these next two variables are provided to allow
  733. ** system developers to have a rough idea of the
  734. ** period of two externally controlled signals --
  735. ** the time between vertical blank interrupts and the
  736. ** external line rate (which is counted by CIA A's
  737. ** "time of day" clock). In general these values
  738. ** will be 50 or 60, and may or may not track each
  739. ** other. These values replace the obsolete AFB_PAL
  740. ** and AFB_50HZ flags.
  741. }
  742. VBlankFrequency, { (readable) }
  743. PowerSupplyFrequency : Byte; { (readable) }
  744. SemaphoreList : tList;
  745. { these next two are to be able to kickstart into user ram.
  746. ** KickMemPtr holds a singly linked list of MemLists which
  747. ** will be removed from the memory list via AllocAbs. If
  748. ** all the AllocAbs's succeeded, then the KickTagPtr will
  749. ** be added to the rom tag list.
  750. }
  751. KickMemPtr, { ptr to queue of mem lists }
  752. KickTagPtr, { ptr to rom tag queue }
  753. KickCheckSum : Pointer; { checksum for mem and tags }
  754. { ***** V36 Exec additions start here ************************************* }
  755. ex_Pad0 : Word;
  756. ex_Reserved0 : ULONG;
  757. ex_RamLibPrivate : Pointer;
  758. { The next ULONG contains the system "E" clock frequency,
  759. ** expressed in Hertz. The E clock is used as a timebase for
  760. ** the Amiga's 8520 I/O chips. (E is connected to "02").
  761. ** Typical values are 715909 for NTSC, or 709379 for PAL.
  762. }
  763. ex_EClockFrequency, { (readable) }
  764. ex_CacheControl, { Private to CacheControl calls }
  765. ex_TaskID : ULONG; { Next available task ID }
  766. ex_Reserved1 : Array[0..4] of ULONG;
  767. ex_MMULock : Pointer; { private }
  768. ex_Reserved2 : Array[0..2] of ULONG;
  769. {***** V39 Exec additions start here *************************************}
  770. { The following list and data element are used
  771. * for V39 exec's low memory handler...
  772. }
  773. ex_MemHandlers : tMinList; { The handler list }
  774. ex_MemHandler : Pointer; { Private! handler pointer }
  775. ex_Reserved : Array[0..1] of Shortint;
  776. end;
  777. { ***** Bit defines for AttnFlags (see above) ***************************** }
  778. { Processors and Co-processors: }
  779. CONST
  780. AFB_68010 = 0; { also set for 68020 }
  781. AFB_68020 = 1; { also set for 68030 }
  782. AFB_68030 = 2; { also set for 68040 }
  783. AFB_68040 = 3;
  784. AFB_68881 = 4; { also set for 68882 }
  785. AFB_68882 = 5;
  786. AFB_FPU40 = 6; { Set if 68040 FPU }
  787. AFF_68010 = %00000001;
  788. AFF_68020 = %00000010;
  789. AFF_68030 = %00000100;
  790. AFF_68040 = %00001000;
  791. AFF_68881 = %00010000;
  792. AFF_68882 = %00100000;
  793. AFF_FPU40 = %01000000;
  794. { AFB_RESERVED8 = %000100000000; }
  795. { AFB_RESERVED9 = %001000000000; }
  796. { ***** Selected flag definitions for Cache manipulation calls ********* }
  797. CACRF_EnableI = %0000000000000001; { Enable instruction cache }
  798. CACRF_FreezeI = %0000000000000010; { Freeze instruction cache }
  799. CACRF_ClearI = %0000000000001000; { Clear instruction cache }
  800. CACRF_IBE = %0000000000010000; { Instruction burst enable }
  801. CACRF_EnableD = %0000000100000000; { 68030 Enable data cache }
  802. CACRF_FreezeD = %0000001000000000; { 68030 Freeze data cache }
  803. CACRF_ClearD = %0000100000000000; { 68030 Clear data cache }
  804. CACRF_DBE = %0001000000000000; { 68030 Data burst enable }
  805. CACRF_WriteAllocate = %0010000000000000; { 68030 Write-Allocate mode
  806. (must always be set!) }
  807. CACRF_EnableE = 1073741824; { Master enable for external caches }
  808. { External caches should track the }
  809. { state of the internal caches }
  810. { such that they do not cache anything }
  811. { that the internal cache turned off }
  812. { for. }
  813. CACRF_CopyBack = $80000000; { Master enable for copyback caches }
  814. DMA_Continue = 2; { Continuation flag for CachePreDMA }
  815. DMA_NoModify = 4; { Set if DMA does not update memory }
  816. DMA_ReadFromRAM = 8; { Set if DMA goes *FROM* RAM to device }
  817. procedure AbortIO(io : pIORequest);
  818. procedure AddDevice(device : pDevice);
  819. procedure AddHead(list : pList;
  820. node : pNode);
  821. procedure AddIntServer(intNum : ULONG;
  822. Int : pInterrupt);
  823. procedure AddLibrary(lib : pLibrary);
  824. procedure AddMemHandler(memhand : pInterrupt);
  825. procedure AddMemList(size, attr : ULONG;
  826. pri : Longint;
  827. base : Pointer;
  828. name : STRPTR);
  829. procedure AddPort(port : pMsgPort);
  830. procedure AddResource(resource : Pointer);
  831. procedure AddSemaphore(sigsem : pSignalSemaphore);
  832. procedure AddTail(list : pList;
  833. node : pNode);
  834. procedure AddTask(task : pTask;
  835. initialPC, finalPC : Pointer);
  836. procedure Alert(alertNum : ULONG;
  837. parameters : Pointer);
  838. function AllocAbs(bytesize : ULONG;
  839. location : Pointer) : Pointer;
  840. function Allocate(mem : pMemHeader;
  841. bytesize : ULONG) : Pointer;
  842. function AllocEntry(mem : pMemList) : pMemList;
  843. function AllocMem(bytesize : ULONG;
  844. reqs : ULONG) : Pointer;
  845. function AllocPooled( pooleheader : Pointer;
  846. memsize : ULONG ): Pointer;
  847. function AllocSignal(signalNum : Longint) : Shortint;
  848. function AllocTrap(trapNum : Longint) : Longint;
  849. function AllocVec( size, reqm : ULONG ): Pointer;
  850. function AttemptSemaphore(sigsem : pSignalSemaphore) : Boolean;
  851. function AttemptSemaphoreShared(sigsem : pSignalSemaphore): ULONG;
  852. function AvailMem(attr : ULONG) : ULONG;
  853. procedure CacheClearE( cxa : Pointer;
  854. lenght, caches : ULONG);
  855. procedure CacheClearU;
  856. function CacheControl( cachebits, cachemask: ULONG ): ULONG;
  857. procedure CachePostDMA(vaddress, length_IntPtr : Pointer;
  858. flags : ULONG );
  859. function CachePreDMA(vaddress, length_intPtr : Pointer;
  860. flags : ULONG): Pointer;
  861. procedure Cause(Int : pInterrupt);
  862. function CheckIO(io : pIORequest) : pIORequest;
  863. procedure ChildFree( tid : Pointer);
  864. procedure ChildOrphan( tid : Pointer);
  865. procedure ChildStatus( tid : Pointer);
  866. procedure ChildWait( tid : Pointer);
  867. procedure CloseDevice(io : pIORequest);
  868. procedure CloseLibrary(lib : pLibrary);
  869. procedure ColdReboot;
  870. procedure CopyMem(source, dest : Pointer;
  871. size : ULONG);
  872. procedure CopyMemQuick(source, dest : Pointer;
  873. size : ULONG);
  874. function CreateIORequest( mp : pMsgPort;
  875. size : ULONG ): pIORequest;
  876. function CreateMsgPort: pMsgPort;
  877. function CreatePool( requrements,puddlesize,
  878. puddletresh : ULONG ): Pointer;
  879. procedure Deallocate(header : pMemHeader;
  880. block : Pointer;
  881. size : ULONG);
  882. procedure Debug(Param : ULONG);
  883. procedure DeleteIORequest( iorq : Pointer );
  884. procedure DeleteMsgPort( mp : pMsgPort );
  885. procedure DeletePool( poolheader : Pointer );
  886. procedure Disable;
  887. function DoIO(io : pIORequest) : Shortint;
  888. procedure Enable;
  889. procedure Enqueue(list : pList;
  890. node : pNode);
  891. function FindName(start : pList;
  892. name : STRPTR) : pNode;
  893. function FindPort(name : STRPTR): pMsgPort;
  894. function FindResident(name : STRPTR) : pResident;
  895. function FindSemaphore(name : STRPTR) : pSignalSemaphore;
  896. function FindTask(name : STRPTR) : pTask;
  897. procedure Forbid;
  898. procedure FreeEntry(memList : pMemList);
  899. procedure ExecFreeMem(memBlock : Pointer;
  900. size : ULONG);
  901. procedure FreePooled( poolheader, memory: Pointer;
  902. memsize: ULONG);
  903. procedure FreeSignal(signalNum : Longint);
  904. procedure FreeTrap(signalNum : ULONG);
  905. procedure FreeVec( memory : Pointer );
  906. function GetCC : Word;
  907. function GetMsg(port : pMsgPort): pMessage;
  908. procedure InitCode(startClass, version : ULONG);
  909. procedure InitResident(resident : pResident;
  910. segList : ULONG);
  911. procedure InitSemaphore(sigsem : pSignalSemaphore);
  912. procedure InitStruct(table, memory : Pointer;
  913. size : ULONG);
  914. procedure Insert(list : pList;
  915. node, listNode : pNode);
  916. procedure MakeFunctions(target, functionarray : Pointer ;
  917. dispbase : ULONG);
  918. function MakeLibrary(vec, struct, init : Pointer;
  919. dSize : ULONG ;
  920. segList : Pointer) : pLibrary;
  921. function ObtainQuickVector(interruptCode : Pointer) : ULONG;
  922. procedure ObtainSemaphore(sigsem : pSignalSemaphore);
  923. procedure ObtainSemaphoreList(semlist : pList);
  924. procedure ObtainSemaphoreShared(sigsem : pSignalSemaphore);
  925. function OldOpenLibrary(lib : STRPTR): pLibrary;
  926. function OpenDevice(devName : STRPTR;
  927. unitNumber : ULONG;
  928. io : pIORequest; flags : ULONG) : Shortint;
  929. function OpenLibrary(libName : STRPTR;
  930. version : Integer) : pLibrary;
  931. function OpenResource(resname : STRPTR): Pointer;
  932. procedure Permit;
  933. function Procure(sem : pSemaphore;
  934. bid : pMessage) : Boolean;
  935. procedure PutMsg(port : pMsgPort;
  936. mess : pMessage);
  937. procedure RawDoFmt(Form : STRPTR;
  938. data, putChProc, putChData : Pointer);
  939. procedure ReleaseSemaphore(sigsem : pSignalSemaphore);
  940. procedure ReleaseSemaphoreList(siglist : pList);
  941. procedure RemDevice(device : pDevice);
  942. function RemHead(list : pList) : pNode;
  943. procedure RemIntServer(intNum : Longint;
  944. Int : pInterrupt);
  945. procedure RemLibrary(lib : pLibrary);
  946. procedure RemMemHandler(memhand : pInterrupt);
  947. procedure Remove(node : pNode);
  948. procedure RemPort(port : pMsgPort);
  949. procedure RemResource(resname : Pointer);
  950. procedure RemSemaphore(sigsem : pSignalSemaphore);
  951. function RemTail(list : pList) : pNode;
  952. procedure RemTask(task : pTask);
  953. procedure ReplyMsg(mess : pMessage);
  954. procedure SendIO(io : pIORequest);
  955. function SetExcept(newSignals, signalMask : ULONG) : ULONG;
  956. function SetFunction(lib : pLibrary;
  957. funcOff : LONG;
  958. funcEntry : Pointer) : Pointer;
  959. function SetIntVector(intNum : Longint;
  960. Int : pInterrupt) : pInterrupt;
  961. function SetSignal(newSignals, signalMask : ULONG) : ULONG;
  962. function SetSR(newSR, mask : ULONG) : ULONG;
  963. function SetTaskPri(task : pTask;
  964. priority : Longint) : Shortint;
  965. procedure Signal(task : pTask; signals : ULONG);
  966. procedure StackSwap( StackSwapRecord : Pointer );
  967. procedure SumKickData;
  968. procedure SumLibrary(lib : pLibrary);
  969. function SuperState : Pointer;
  970. function Supervisor(thefunc : Pointer): ULONG;
  971. function TypeOfMem(mem : Pointer) : ULONG;
  972. procedure UserState(s : Pointer);
  973. procedure Vacate(sigsem : pSignalSemaphore;
  974. bidMsg : pSemaphoreMessage);
  975. function Wait(signals : ULONG) : ULONG;
  976. function WaitIO(io : pIORequest) : Shortint;
  977. function WaitPort(port : pMsgPort): pMessage;
  978. {* Exec support functions from amiga.lib *}
  979. procedure BeginIO (ioRequest: pIORequest);
  980. function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
  981. procedure DeleteExtIO (ioReq: pIORequest);
  982. function CreateStdIO (port: pMsgPort): pIOStdReq;
  983. procedure DeleteStdIO (ioReq: pIOStdReq);
  984. function CreatePort (name: STRPTR; pri: integer): pMsgPort;
  985. procedure DeletePort (port: pMsgPort);
  986. function CreateTask (name: STRPTR; pri: longint;
  987. initPC : Pointer;
  988. stackSize : ULONG): pTask;
  989. procedure DeleteTask (task: pTask);
  990. procedure NewList (list: pList);
  991. IMPLEMENTATION
  992. {* Exec support functions from amiga.lib *}
  993. procedure BeginIO (ioRequest: pIORequest); Assembler;
  994. asm
  995. move.l a6,-(a7)
  996. move.l ioRequest,a1 ; get IO Request
  997. move.l 20(a1),a6 ; extract Device ptr
  998. jsr -30(a6) ; call BEGINIO directly
  999. move.l (a7)+,a6
  1000. end;
  1001. function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
  1002. var
  1003. IOReq: pIORequest;
  1004. begin
  1005. IOReq := NIL;
  1006. if port <> NIL then
  1007. begin
  1008. IOReq := AllocMem(size, MEMF_CLEAR or MEMF_PUBLIC);
  1009. if IOReq <> NIL then
  1010. begin
  1011. IOReq^.io_Message.mn_Node.ln_Type := NT_REPLYMSG;
  1012. IOReq^.io_Message.mn_Length := size;
  1013. IOReq^.io_Message.mn_ReplyPort := port;
  1014. end;
  1015. end;
  1016. CreateExtIO := IOReq;
  1017. end;
  1018. procedure DeleteExtIO (ioReq: pIORequest);
  1019. begin
  1020. if ioReq <> NIL then
  1021. begin
  1022. ioReq^.io_Message.mn_Node.ln_Type := $FF;
  1023. ioReq^.io_Message.mn_ReplyPort := pMsgPort(-1);
  1024. ioReq^.io_Device := pDevice(-1);
  1025. ExecFreeMem(ioReq, ioReq^.io_Message.mn_Length);
  1026. end
  1027. end;
  1028. function CreateStdIO (port: pMsgPort): pIOStdReq;
  1029. begin
  1030. CreateStdIO := pIOStdReq(CreateExtIO(port, sizeof(tIOStdReq)))
  1031. end;
  1032. procedure DeleteStdIO (ioReq: pIOStdReq);
  1033. begin
  1034. DeleteExtIO(pIORequest(ioReq))
  1035. end;
  1036. function CreatePort (name: STRPTR; pri: integer): pMsgPort;
  1037. var
  1038. port : pMsgPort;
  1039. sigbit : shortint;
  1040. begin
  1041. port := NIL;
  1042. sigbit := AllocSignal(-1);
  1043. if sigbit <> -1 then
  1044. begin
  1045. port := AllocMem(sizeof(tMsgPort), MEMF_CLEAR or MEMF_PUBLIC);
  1046. if port = NIL then
  1047. FreeSignal(sigbit)
  1048. else
  1049. begin
  1050. port^.mp_Node.ln_Name := name;
  1051. port^.mp_Node.ln_Pri := pri;
  1052. port^.mp_Node.ln_Type := NT_MSGPORT;
  1053. port^.mp_Flags := PA_SIGNAL;
  1054. port^.mp_SigBit := sigbit;
  1055. port^.mp_SigTask := FindTask(NIL);
  1056. if name <> NIL then
  1057. AddPort(port)
  1058. else
  1059. NewList(@port^.mp_MsgList);
  1060. end;
  1061. end;
  1062. CreatePort := port;
  1063. end;
  1064. procedure DeletePort (port: pMsgPort);
  1065. begin
  1066. if port <> NIL then
  1067. begin
  1068. if port^.mp_Node.ln_Name <> NIL then
  1069. RemPort(port);
  1070. port^.mp_SigTask := pTask(-1);
  1071. port^.mp_MsgList.lh_Head := pNode(-1);
  1072. FreeSignal(port^.mp_SigBit);
  1073. ExecFreeMem(port, sizeof(tMsgPort));
  1074. end;
  1075. end;
  1076. function CreateTask (name: STRPTR; pri: longint;
  1077. initPC: pointer; stackSize: ULONG): pTask;
  1078. var
  1079. memlist : pMemList;
  1080. task : pTask;
  1081. totalsize : Longint;
  1082. begin
  1083. task := NIL;
  1084. stackSize := (stackSize + 3) and not 3;
  1085. totalsize := sizeof(tMemList) + sizeof(tTask) + stackSize;
  1086. memlist := AllocMem(totalsize, MEMF_PUBLIC + MEMF_CLEAR);
  1087. if memlist <> NIL then begin
  1088. memlist^.ml_NumEntries := 1;
  1089. memlist^.ml_ME[0].me_Un.meu_Addr := Pointer(memlist + 1);
  1090. memlist^.ml_ME[0].me_Length := totalsize - sizeof(tMemList);
  1091. task := pTask(memlist + sizeof(tMemList) + stackSize);
  1092. task^.tc_Node.ln_Pri := pri;
  1093. task^.tc_Node.ln_Type := NT_TASK;
  1094. task^.tc_Node.ln_Name := name;
  1095. task^.tc_SPLower := Pointer(memlist + sizeof(tMemList));
  1096. task^.tc_SPUpper := Pointer(task^.tc_SPLower + stackSize);
  1097. task^.tc_SPReg := task^.tc_SPUpper;
  1098. NewList(@task^.tc_MemEntry);
  1099. AddTail(@task^.tc_MemEntry,@memlist^.ml_Node);
  1100. AddTask(task,initPC,NIL)
  1101. end;
  1102. CreateTask := task;
  1103. end;
  1104. procedure DeleteTask (task: pTask);
  1105. begin
  1106. RemTask(task)
  1107. end;
  1108. procedure NewList (list: pList);
  1109. begin
  1110. with list^ do
  1111. begin
  1112. lh_Head := pNode(@lh_Tail);
  1113. lh_Tail := NIL;
  1114. lh_TailPred := pNode(@lh_Head)
  1115. end
  1116. end;
  1117. procedure AbortIO(io : pIORequest); Assembler;
  1118. asm
  1119. MOVE.L A6,-(A7)
  1120. MOVE.L _ExecBase,A6
  1121. MOVE.L io,a1
  1122. JSR -480(A6)
  1123. MOVE.L (A7)+,A6
  1124. end;
  1125. procedure AddDevice(device : pDevice); Assembler;
  1126. asm
  1127. MOVE.L A6,-(A7)
  1128. MOVE.L _ExecBase,A6
  1129. MOVE.L device,a1
  1130. JSR -432(A6)
  1131. MOVE.L (A7)+,A6
  1132. end;
  1133. procedure AddHead(list : pList;
  1134. node : pNode); Assembler;
  1135. asm
  1136. MOVE.L A6,-(A7)
  1137. MOVE.L _ExecBase,A6
  1138. MOVE.L list,a0
  1139. MOVE.L node,a1
  1140. JSR -240(A6)
  1141. MOVE.L (A7)+,A6
  1142. end;
  1143. procedure AddIntServer(intNum : ULONG;
  1144. Int : pInterrupt); Assembler;
  1145. asm
  1146. MOVE.L A6,-(A7)
  1147. MOVE.L _ExecBase,A6
  1148. MOVE.L intNum,d0
  1149. MOVE.L Int,a1
  1150. JSR -168(A6)
  1151. MOVE.L (A7)+,A6
  1152. end;
  1153. procedure AddLibrary(lib : pLibrary); Assembler;
  1154. asm
  1155. MOVE.L A6,-(A7)
  1156. MOVE.L _ExecBase,A6
  1157. MOVE.L lib,a1
  1158. JSR -396(A6)
  1159. MOVE.L (A7)+,A6
  1160. end;
  1161. procedure AddMemHandler(memhand : pInterrupt); Assembler;
  1162. asm
  1163. MOVE.L A6,-(A7)
  1164. MOVE.L _ExecBase,A6
  1165. MOVE.L memhand,a1
  1166. JSR -774(A6)
  1167. MOVE.L (A7)+,A6
  1168. end;
  1169. procedure AddMemList(size, attr : ULONG;
  1170. pri : Longint;
  1171. base : Pointer;
  1172. name : STRPTR); Assembler;
  1173. asm
  1174. MOVEM.L d2/a6,-(A7)
  1175. MOVE.L _ExecBase,A6
  1176. MOVE.L size,d0
  1177. MOVE.L attr,d1
  1178. MOVE.L pri,d2
  1179. MOVE.L base,a0
  1180. MOVE.L name,a1
  1181. JSR -618(A6)
  1182. MOVEM.L (A7)+,d2/a6
  1183. end;
  1184. procedure AddPort(port : pMsgPort); Assembler;
  1185. asm
  1186. MOVE.L A6,-(A7)
  1187. MOVE.L _ExecBase,A6
  1188. MOVE.L port,a1
  1189. JSR -354(A6)
  1190. MOVE.L (A7)+,A6
  1191. end;
  1192. procedure AddResource(resource : Pointer); Assembler;
  1193. asm
  1194. MOVE.L A6,-(A7)
  1195. MOVE.L _ExecBase,A6
  1196. MOVE.L resource,a1
  1197. JSR -486(A6)
  1198. MOVE.L (A7)+,A6
  1199. end;
  1200. procedure AddSemaphore(sigsem : pSignalSemaphore); Assembler;
  1201. asm
  1202. MOVE.L A6,-(A7)
  1203. MOVE.L _ExecBase,A6
  1204. MOVE.L sigsem,a1
  1205. JSR -600(A6)
  1206. MOVE.L (A7)+,A6
  1207. end;
  1208. procedure AddTail(list : pList;
  1209. node : pNode); Assembler;
  1210. asm
  1211. MOVE.L A6,-(A7)
  1212. MOVE.L _ExecBase,A6
  1213. MOVE.L list,a0
  1214. MOVE.L node,a1
  1215. JSR -246(A6)
  1216. MOVE.L (A7)+,A6
  1217. end;
  1218. procedure AddTask(task : pTask;
  1219. initialPC, finalPC : Pointer); Assembler;
  1220. asm
  1221. MOVEM.L a2/a3/a6,-(A7)
  1222. MOVE.L _ExecBase,A6
  1223. MOVE.L task,a1
  1224. MOVE.L initialPC,a2
  1225. MOVE.L finalPC,a3
  1226. JSR -282(A6)
  1227. MOVEM.L (A7)+,a2/a3/a6
  1228. end;
  1229. procedure Alert(alertNum : ULONG;
  1230. parameters : Pointer); Assembler;
  1231. asm
  1232. MOVEM.L d7/a6,-(A7)
  1233. MOVE.L _ExecBase,A6
  1234. MOVE.L alertNum,d7
  1235. JSR -108(A6)
  1236. MOVEM.L (A7)+,d7/a6
  1237. end;
  1238. function AllocAbs(bytesize : ULONG;
  1239. location : Pointer) : Pointer; Assembler;
  1240. asm
  1241. MOVE.L A6,-(A7)
  1242. MOVE.L _ExecBase,A6
  1243. MOVE.L bytesize,d0
  1244. MOVE.L location,a1
  1245. JSR -204(A6)
  1246. MOVE.L (A7)+,A6
  1247. end;
  1248. function Allocate(mem : pMemHeader;
  1249. bytesize : ULONG) : Pointer; Assembler;
  1250. asm
  1251. MOVE.L A6,-(A7)
  1252. MOVE.L _ExecBase,A6
  1253. MOVE.L mem,a0
  1254. MOVE.L bytesize,d0
  1255. JSR -186(A6)
  1256. MOVE.L (A7)+,A6
  1257. end;
  1258. function AllocEntry(mem : pMemList) : pMemList; Assembler;
  1259. asm
  1260. MOVE.L A6,-(A7)
  1261. MOVE.L _ExecBase,A6
  1262. MOVE.L mem,a0
  1263. JSR -222(A6)
  1264. MOVE.L (A7)+,A6
  1265. end;
  1266. function AllocMem(bytesize : ULONG;
  1267. reqs : ULONG) : Pointer; Assembler;
  1268. asm
  1269. MOVE.L A6,-(A7)
  1270. MOVE.L _ExecBase,A6
  1271. MOVE.L bytesize,d0
  1272. MOVE.L reqs,d1
  1273. JSR -198(A6)
  1274. MOVE.L (A7)+,A6
  1275. end;
  1276. function AllocPooled( pooleheader : Pointer;
  1277. memsize : ULONG ): Pointer; Assembler;
  1278. asm
  1279. MOVE.L A6,-(A7)
  1280. MOVE.L _ExecBase,A6
  1281. MOVE.L pooleheader,a0
  1282. MOVE.L memsize,d0
  1283. JSR -708(A6)
  1284. MOVE.L (A7)+,A6
  1285. end;
  1286. function AllocSignal(signalNum : Longint) : Shortint; Assembler;
  1287. asm
  1288. MOVE.L A6,-(A7)
  1289. MOVE.L _ExecBase,A6
  1290. MOVE.L signalNum,d0
  1291. JSR -330(A6)
  1292. MOVE.L (A7)+,A6
  1293. end;
  1294. function AllocTrap(trapNum : Longint) : Longint; Assembler;
  1295. asm
  1296. MOVE.L A6,-(A7)
  1297. MOVE.L _ExecBase,A6
  1298. MOVE.L trapNum,d0
  1299. JSR -342(A6)
  1300. MOVE.L (A7)+,A6
  1301. end;
  1302. function AllocVec( size, reqm : ULONG ): Pointer; Assembler;
  1303. asm
  1304. MOVE.L A6,-(A7)
  1305. MOVE.L _ExecBase,A6
  1306. MOVE.L size,d0
  1307. MOVE.L reqm,d1
  1308. JSR -684(A6)
  1309. MOVE.L (A7)+,A6
  1310. end;
  1311. function AttemptSemaphore(sigsem : pSignalSemaphore) : Boolean; Assembler;
  1312. asm
  1313. MOVE.L A6,-(A7)
  1314. MOVE.L _ExecBase,A6
  1315. MOVE.L sigsem,a0
  1316. JSR -576(A6)
  1317. MOVE.L (A7)+,A6
  1318. TST.L d0
  1319. SNE d0
  1320. NEG.B d0
  1321. end;
  1322. function AttemptSemaphoreShared(sigsem : pSignalSemaphore): ULONG; Assembler;
  1323. asm
  1324. MOVE.L A6,-(A7)
  1325. MOVE.L _ExecBase,A6
  1326. MOVE.L sigsem,a0
  1327. JSR -720(A6)
  1328. MOVE.L (A7)+,A6
  1329. end;
  1330. function AvailMem(attr : ULONG) : ULONG; Assembler;
  1331. asm
  1332. MOVE.L A6,-(A7)
  1333. MOVE.L _ExecBase,A6
  1334. MOVE.L attr,d1
  1335. JSR -216(A6)
  1336. MOVE.L (A7)+,A6
  1337. end;
  1338. procedure CacheClearE( cxa : Pointer;
  1339. lenght, caches : ULONG); Assembler;
  1340. asm
  1341. MOVE.L A6,-(A7)
  1342. MOVE.L _ExecBase,A6
  1343. MOVE.L cxa,a0
  1344. MOVE.L lenght,d0
  1345. MOVE.L caches,d1
  1346. JSR -642(A6)
  1347. MOVE.L (A7)+,A6
  1348. end;
  1349. procedure CacheClearU; Assembler;
  1350. asm
  1351. MOVE.L A6,-(A7)
  1352. MOVE.L _ExecBase,A6
  1353. JSR -636(A6)
  1354. MOVE.L (A7)+,A6
  1355. end;
  1356. function CacheControl( cachebits, cachemask: ULONG ): ULONG; Assembler;
  1357. asm
  1358. MOVE.L A6,-(A7)
  1359. MOVE.L _ExecBase,A6
  1360. MOVE.L cachebits,d0
  1361. MOVE.L cachemask,d1
  1362. JSR -648(A6)
  1363. MOVE.L (A7)+,A6
  1364. end;
  1365. procedure CachePostDMA(vaddress, length_IntPtr : Pointer;
  1366. flags : ULONG ); Assembler;
  1367. asm
  1368. MOVE.L A6,-(A7)
  1369. MOVE.L _ExecBase,A6
  1370. MOVE.L vaddress,a0
  1371. MOVE.L length_IntPtr,a1
  1372. MOVE.L flags,d0
  1373. JSR -768(A6)
  1374. MOVE.L (A7)+,A6
  1375. end;
  1376. function CachePreDMA(vaddress, length_intPtr : Pointer;
  1377. flags : ULONG): Pointer; Assembler;
  1378. asm
  1379. MOVE.L A6,-(A7)
  1380. MOVE.L _ExecBase,A6
  1381. MOVE.L vaddress,a0
  1382. MOVE.L length_intPtr,a1
  1383. MOVE.L flags,d0
  1384. JSR -762(A6)
  1385. MOVE.L (A7)+,A6
  1386. end;
  1387. procedure Cause(Int : pInterrupt); Assembler;
  1388. asm
  1389. MOVE.L A6,-(A7)
  1390. MOVE.L _ExecBase,A6
  1391. MOVE.L Int,a1
  1392. JSR -180(A6)
  1393. MOVE.L (A7)+,A6
  1394. end;
  1395. function CheckIO(io : pIORequest) : pIORequest; Assembler;
  1396. asm
  1397. MOVE.L A6,-(A7)
  1398. MOVE.L _ExecBase,A6
  1399. MOVE.L io,a1
  1400. JSR -468(A6)
  1401. MOVE.L (A7)+,A6
  1402. end;
  1403. procedure ChildFree( tid : Pointer); Assembler;
  1404. asm
  1405. MOVE.L A6,-(A7)
  1406. MOVE.L _ExecBase,A6
  1407. MOVE.L tid,d0
  1408. JSR -738(A6)
  1409. MOVE.L (A7)+,A6
  1410. end;
  1411. procedure ChildOrphan( tid : Pointer); Assembler;
  1412. asm
  1413. MOVE.L A6,-(A7)
  1414. MOVE.L _ExecBase,A6
  1415. MOVE.L tid,d0
  1416. JSR -744(A6)
  1417. MOVE.L (A7)+,A6
  1418. end;
  1419. procedure ChildStatus( tid : Pointer); Assembler;
  1420. asm
  1421. MOVE.L A6,-(A7)
  1422. MOVE.L _ExecBase,A6
  1423. MOVE.L tid,d0
  1424. JSR -750(A6)
  1425. MOVE.L (A7)+,A6
  1426. end;
  1427. procedure ChildWait( tid : Pointer); Assembler;
  1428. asm
  1429. MOVE.L A6,-(A7)
  1430. MOVE.L _ExecBase,A6
  1431. MOVE.L tid,d0
  1432. JSR -756(A6)
  1433. MOVE.L (A7)+,A6
  1434. end;
  1435. procedure CloseDevice(io : pIORequest); Assembler;
  1436. asm
  1437. MOVE.L A6,-(A7)
  1438. MOVE.L _ExecBase,A6
  1439. MOVE.L io,a1
  1440. JSR -450(A6)
  1441. MOVE.L (A7)+,A6
  1442. end;
  1443. procedure CloseLibrary(lib : pLibrary); Assembler;
  1444. asm
  1445. MOVE.L A6,-(A7)
  1446. MOVE.L _ExecBase,A6
  1447. MOVE.L lib,a1
  1448. JSR -414(A6)
  1449. MOVE.L (A7)+,A6
  1450. end;
  1451. procedure ColdReboot; Assembler;
  1452. asm
  1453. MOVE.L A6,-(A7)
  1454. MOVE.L _ExecBase,A6
  1455. JSR -726(A6)
  1456. MOVE.L (A7)+,A6
  1457. end;
  1458. procedure CopyMem(source, dest : Pointer;
  1459. size : ULONG); Assembler;
  1460. asm
  1461. MOVE.L A6,-(A7)
  1462. MOVE.L _ExecBase,A6
  1463. MOVE.L source,a0
  1464. MOVE.L dest,a1
  1465. MOVE.L size,d0
  1466. JSR -624(A6)
  1467. MOVE.L (A7)+,A6
  1468. end;
  1469. procedure CopyMemQuick(source, dest : Pointer;
  1470. size : ULONG); Assembler;
  1471. asm
  1472. MOVE.L A6,-(A7)
  1473. MOVE.L _ExecBase,A6
  1474. MOVE.L source,a0
  1475. MOVE.L dest,a1
  1476. MOVE.L size,d0
  1477. JSR -630(A6)
  1478. MOVE.L (A7)+,A6
  1479. end;
  1480. function CreateIORequest( mp : pMsgPort;
  1481. size : ULONG ): pIORequest; Assembler;
  1482. asm
  1483. MOVE.L A6,-(A7)
  1484. MOVE.L _ExecBase,A6
  1485. MOVE.L mp,a0
  1486. MOVE.L size,d0
  1487. JSR -654(A6)
  1488. MOVE.L (A7)+,A6
  1489. end;
  1490. function CreateMsgPort: pMsgPort; Assembler;
  1491. asm
  1492. MOVE.L A6,-(A7)
  1493. MOVE.L _ExecBase,A6
  1494. JSR -666(A6)
  1495. MOVE.L (A7)+,A6
  1496. end;
  1497. function CreatePool( requrements,puddlesize,
  1498. puddletresh : ULONG ): Pointer; Assembler;
  1499. asm
  1500. MOVEM.L d2/a6,-(A7)
  1501. MOVE.L _ExecBase,A6
  1502. MOVE.L requrements,d0
  1503. MOVE.L puddlesize,d1
  1504. MOVE.L puddletresh,d2
  1505. JSR -696(A6)
  1506. MOVEM.L (A7)+,d2/a6
  1507. end;
  1508. procedure Deallocate(header : pMemHeader;
  1509. block : Pointer;
  1510. size : ULONG); Assembler;
  1511. asm
  1512. MOVE.L A6,-(A7)
  1513. MOVE.L _ExecBase,A6
  1514. MOVE.L header,a0
  1515. MOVE.L block,a1
  1516. MOVE.L size,d0
  1517. JSR -192(A6)
  1518. MOVE.L (A7)+,A6
  1519. end;
  1520. procedure Debug(Param : ULONG); Assembler;
  1521. asm
  1522. MOVE.L A6,-(A7)
  1523. MOVE.L _ExecBase,A6
  1524. MOVE.L Param,d0
  1525. JSR -114(A6)
  1526. MOVE.L (A7)+,A6
  1527. end;
  1528. procedure DeleteIORequest( iorq : Pointer ); Assembler;
  1529. asm
  1530. MOVE.L A6,-(A7)
  1531. MOVE.L _ExecBase,A6
  1532. MOVE.L iorq,a0
  1533. JSR -660(A6)
  1534. MOVE.L (A7)+,A6
  1535. end;
  1536. procedure DeleteMsgPort( mp : pMsgPort ); Assembler;
  1537. asm
  1538. MOVE.L A6,-(A7)
  1539. MOVE.L _ExecBase,A6
  1540. MOVE.L mp,a0
  1541. JSR -672(A6)
  1542. MOVE.L (A7)+,A6
  1543. end;
  1544. procedure DeletePool( poolheader : Pointer ); Assembler;
  1545. asm
  1546. MOVE.L A6,-(A7)
  1547. MOVE.L _ExecBase,A6
  1548. MOVE.L poolheader,a0
  1549. JSR -702(A6)
  1550. MOVE.L (A7)+,A6
  1551. end;
  1552. procedure Disable; Assembler;
  1553. asm
  1554. MOVE.L A6,-(A7)
  1555. MOVE.L _ExecBase,A6
  1556. JSR -120(A6)
  1557. MOVE.L (A7)+,A6
  1558. end;
  1559. function DoIO(io : pIORequest) : Shortint; Assembler;
  1560. asm
  1561. MOVE.L A6,-(A7)
  1562. MOVE.L _ExecBase,A6
  1563. MOVE.L io,a1
  1564. JSR -456(A6)
  1565. MOVE.L (A7)+,A6
  1566. end;
  1567. procedure Enable; Assembler;
  1568. asm
  1569. MOVE.L A6,-(A7)
  1570. MOVE.L _ExecBase,A6
  1571. JSR -126(A6)
  1572. MOVE.L (A7)+,A6
  1573. end;
  1574. procedure Enqueue(list : pList;
  1575. node : pNode); Assembler;
  1576. asm
  1577. MOVE.L A6,-(A7)
  1578. MOVE.L _ExecBase,A6
  1579. MOVE.L list,a0
  1580. MOVE.L node,a1
  1581. JSR -270(A6)
  1582. MOVE.L (A7)+,A6
  1583. end;
  1584. function FindName(start : pList;
  1585. name : STRPTR) : pNode; Assembler;
  1586. asm
  1587. MOVE.L A6,-(A7)
  1588. MOVE.L _ExecBase,A6
  1589. MOVE.L start,a0
  1590. MOVE.L name,a1
  1591. JSR -276(A6)
  1592. MOVE.L (A7)+,A6
  1593. end;
  1594. function FindPort(name : STRPTR): pMsgPort; Assembler;
  1595. asm
  1596. MOVE.L A6,-(A7)
  1597. MOVE.L _ExecBase,A6
  1598. MOVE.L name,a1
  1599. JSR -390(A6)
  1600. MOVE.L (A7)+,A6
  1601. end;
  1602. function FindResident(name : STRPTR) : pResident; Assembler;
  1603. asm
  1604. MOVE.L A6,-(A7)
  1605. MOVE.L _ExecBase,A6
  1606. MOVE.L name,a1
  1607. JSR -96(A6)
  1608. MOVE.L (A7)+,A6
  1609. end;
  1610. function FindSemaphore(name : STRPTR) : pSignalSemaphore; Assembler;
  1611. asm
  1612. MOVE.L A6,-(A7)
  1613. MOVE.L _ExecBase,A6
  1614. MOVE.L name,a1
  1615. JSR -594(A6)
  1616. MOVE.L (A7)+,A6
  1617. end;
  1618. function FindTask(name : STRPTR) : pTask; Assembler;
  1619. asm
  1620. MOVE.L A6,-(A7)
  1621. MOVE.L _ExecBase,A6
  1622. MOVE.L name,a1
  1623. JSR -294(A6)
  1624. MOVE.L (A7)+,A6
  1625. end;
  1626. procedure Forbid; Assembler;
  1627. asm
  1628. MOVE.L A6,-(A7)
  1629. MOVE.L _ExecBase,A6
  1630. JSR -132(A6)
  1631. MOVE.L (A7)+,A6
  1632. end;
  1633. procedure FreeEntry(memList : pMemList); Assembler;
  1634. asm
  1635. MOVE.L A6,-(A7)
  1636. MOVE.L _ExecBase,A6
  1637. MOVE.L memlist,a0
  1638. JSR -228(A6)
  1639. MOVE.L (A7)+,A6
  1640. end;
  1641. procedure ExecFreeMem(memBlock : Pointer;
  1642. size : ULONG); Assembler;
  1643. asm
  1644. MOVE.L A6,-(A7)
  1645. MOVE.L _ExecBase,A6
  1646. MOVE.L memBlock,a1
  1647. MOVE.L size,d0
  1648. JSR -210(A6)
  1649. MOVE.L (A7)+,A6
  1650. end;
  1651. procedure FreePooled( poolheader, memory: Pointer;
  1652. memsize: ULONG); Assembler;
  1653. asm
  1654. MOVE.L A6,-(A7)
  1655. MOVE.L _ExecBase,A6
  1656. MOVE.L poolheader,a0
  1657. MOVE.L memory,a1
  1658. MOVE.L memsize,d0
  1659. JSR -714(A6)
  1660. MOVE.L (A7)+,A6
  1661. end;
  1662. procedure FreeSignal(signalNum : Longint); Assembler;
  1663. asm
  1664. MOVE.L A6,-(A7)
  1665. MOVE.L _ExecBase,A6
  1666. MOVE.L signalNum,d0
  1667. JSR -336(A6)
  1668. MOVE.L (A7)+,A6
  1669. end;
  1670. procedure FreeTrap(signalNum : ULONG); Assembler;
  1671. asm
  1672. MOVE.L A6,-(A7)
  1673. MOVE.L _ExecBase,A6
  1674. MOVE.L signalNum,d0
  1675. JSR -348(A6)
  1676. MOVE.L (A7)+,A6
  1677. end;
  1678. procedure FreeVec( memory : Pointer ); Assembler;
  1679. asm
  1680. MOVE.L A6,-(A7)
  1681. MOVE.L _ExecBase,A6
  1682. MOVE.L memory,a1
  1683. JSR -690(A6)
  1684. MOVE.L (A7)+,A6
  1685. end;
  1686. function GetCC : Word; Assembler;
  1687. asm
  1688. MOVE.L A6,-(A7)
  1689. MOVE.L _ExecBase,A6
  1690. JSR -528(A6)
  1691. MOVE.L (A7)+,A6
  1692. end;
  1693. function GetMsg(port : pMsgPort): pMessage; Assembler;
  1694. asm
  1695. MOVE.L A6,-(A7)
  1696. MOVE.L _ExecBase,A6
  1697. MOVE.L port,a0
  1698. JSR -372(A6)
  1699. MOVE.L (A7)+,A6
  1700. end;
  1701. procedure InitCode(startClass, version : ULONG); Assembler;
  1702. asm
  1703. MOVE.L A6,-(A7)
  1704. MOVE.L _ExecBase,A6
  1705. MOVE.L startClass,d0
  1706. MOVE.L version,d1
  1707. JSR -72(A6)
  1708. MOVE.L (A7)+,A6
  1709. end;
  1710. procedure InitResident(resident : pResident;
  1711. segList : ULONG); Assembler;
  1712. asm
  1713. MOVE.L A6,-(A7)
  1714. MOVE.L _ExecBase,A6
  1715. MOVE.L resident,a1
  1716. MOVE.L seglist,d1
  1717. JSR -102(A6)
  1718. MOVE.L (A7)+,A6
  1719. end;
  1720. procedure InitSemaphore(sigsem : pSignalSemaphore); Assembler;
  1721. asm
  1722. MOVE.L A6,-(A7)
  1723. MOVE.L _ExecBase,A6
  1724. MOVE.L sigsem,a0
  1725. JSR -558(A6)
  1726. MOVE.L (A7)+,A6
  1727. end;
  1728. procedure InitStruct(table, memory : Pointer;
  1729. size : ULONG); Assembler;
  1730. asm
  1731. MOVEM.L a2/a6,-(A7)
  1732. MOVE.L _ExecBase,A6
  1733. MOVE.L table,a1
  1734. MOVE.L memory,a2
  1735. MOVE.L size,d0
  1736. JSR -78(A6)
  1737. MOVEM.L (A7)+,a2/a6
  1738. end;
  1739. procedure Insert(list : pList;
  1740. node, listNode : pNode); Assembler;
  1741. asm
  1742. MOVEM.L a2/a6,-(A7)
  1743. MOVE.L _ExecBase,A6
  1744. MOVE.L list,a0
  1745. MOVE.L node,a1
  1746. MOVE.L listNode,a2
  1747. JSR -234(A6)
  1748. MOVEM.L (A7)+,a2/a6
  1749. end;
  1750. procedure MakeFunctions(target, functionarray : Pointer ;
  1751. dispbase : ULONG); Assembler;
  1752. asm
  1753. MOVEM.L a2/a6,-(A7)
  1754. MOVE.L _ExecBase,A6
  1755. MOVE.L target,a0
  1756. MOVE.L functionarray,a1
  1757. MOVE.L dispbase,a2
  1758. JSR -90(A6)
  1759. MOVEM.L (A7)+,a2/a6
  1760. end;
  1761. function MakeLibrary(vec, struct, init : Pointer;
  1762. dSize : ULONG ;
  1763. segList : Pointer) : pLibrary; Assembler;
  1764. asm
  1765. MOVEM.L a2/a6,-(A7)
  1766. MOVE.L _ExecBase,A6
  1767. MOVE.L vec,a0
  1768. MOVE.L struct,a1
  1769. MOVE.L init,a2
  1770. MOVE.L dSize,d0
  1771. MOVE.L seglist,d1
  1772. JSR -84(A6)
  1773. MOVEM.L (A7)+,a2/a6
  1774. end;
  1775. function ObtainQuickVector(interruptCode : Pointer) : ULONG; Assembler;
  1776. asm
  1777. MOVE.L A6,-(A7)
  1778. MOVE.L _ExecBase,A6
  1779. MOVE.L interruptCode,a0
  1780. JSR -786(A6)
  1781. MOVE.L (A7)+,A6
  1782. end;
  1783. procedure ObtainSemaphore(sigsem : pSignalSemaphore); Assembler;
  1784. asm
  1785. MOVE.L A6,-(A7)
  1786. MOVE.L _ExecBase,A6
  1787. MOVE.L sigsem,a0
  1788. JSR -564(A6)
  1789. MOVE.L (A7)+,A6
  1790. end;
  1791. procedure ObtainSemaphoreList(semlist : pList); Assembler;
  1792. asm
  1793. MOVE.L A6,-(A7)
  1794. MOVE.L _ExecBase,A6
  1795. MOVE.L semlist,a0
  1796. JSR -582(A6)
  1797. MOVE.L (A7)+,A6
  1798. end;
  1799. procedure ObtainSemaphoreShared(sigsem : pSignalSemaphore); Assembler;
  1800. asm
  1801. MOVE.L A6,-(A7)
  1802. MOVE.L _ExecBase,A6
  1803. MOVE.L sigsem,a0
  1804. JSR -678(A6)
  1805. MOVE.L (A7)+,A6
  1806. end;
  1807. function OldOpenLibrary(lib : STRPTR): pLibrary; Assembler;
  1808. asm
  1809. MOVE.L A6,-(A7)
  1810. MOVE.L _ExecBase,A6
  1811. MOVE.L lib,a1
  1812. JSR -408(A6)
  1813. MOVE.L (A7)+,A6
  1814. end;
  1815. function OpenDevice(devName : STRPTR;
  1816. unitNumber : ULONG;
  1817. io : pIORequest; flags : ULONG) : Shortint; Assembler;
  1818. asm
  1819. MOVE.L A6,-(A7)
  1820. MOVE.L _ExecBase,A6
  1821. MOVE.L devName,a0
  1822. MOVE.L unitNumber,d0
  1823. MOVE.L io,a1
  1824. MOVE.L flags,d1
  1825. JSR -444(A6)
  1826. MOVE.L (A7)+,A6
  1827. end;
  1828. function OpenLibrary(libName : STRPTR;
  1829. version : Integer) : pLibrary; Assembler;
  1830. asm
  1831. MOVE.L A6,-(A7)
  1832. MOVE.L _ExecBase,A6
  1833. MOVE.L libName,a1
  1834. MOVE.L version,d0
  1835. JSR -552(A6)
  1836. MOVE.L (A7)+,A6
  1837. end;
  1838. function OpenResource(resname : STRPTR): Pointer; Assembler;
  1839. asm
  1840. MOVE.L A6,-(A7)
  1841. MOVE.L _ExecBase,A6
  1842. MOVE.L resname,a1
  1843. JSR -498(A6)
  1844. MOVE.L (A7)+,A6
  1845. end;
  1846. procedure Permit; Assembler;
  1847. asm
  1848. MOVE.L A6,-(A7)
  1849. MOVE.L _ExecBase,A6
  1850. JSR -138(A6)
  1851. MOVE.L (A7)+,A6
  1852. end;
  1853. function Procure(sem : pSemaphore;
  1854. bid : pMessage) : Boolean; Assembler;
  1855. asm
  1856. MOVE.L A6,-(A7)
  1857. MOVE.L _ExecBase,A6
  1858. MOVE.L sem,a0
  1859. MOVE.L bid,a1
  1860. JSR -540(A6)
  1861. MOVE.L (A7)+,A6
  1862. TST.L d0
  1863. SNE d0
  1864. NEG.B d0
  1865. end;
  1866. procedure PutMsg(port : pMsgPort;
  1867. mess : pMessage); Assembler;
  1868. asm
  1869. MOVE.L A6,-(A7)
  1870. MOVE.L _ExecBase,A6
  1871. MOVE.L port,a0
  1872. MOVE.L mess,a1
  1873. JSR -366(A6)
  1874. MOVE.L (A7)+,A6
  1875. end;
  1876. procedure RawDoFmt(Form : STRPTR;
  1877. data, putChProc, putChData : Pointer); Assembler;
  1878. asm
  1879. MOVEM.L a2/a3/a6,-(A7)
  1880. MOVE.L _ExecBase,A6
  1881. MOVE.L Form,a0
  1882. MOVE.L data,a1
  1883. MOVE.L putChProc,a2
  1884. MOVE.L putChData,a3
  1885. JSR -522(A6)
  1886. MOVEM.L (A7)+,a2/a3/a6
  1887. end;
  1888. procedure ReleaseSemaphore(sigsem : pSignalSemaphore); Assembler;
  1889. asm
  1890. MOVE.L A6,-(A7)
  1891. MOVE.L _ExecBase,A6
  1892. MOVE.L sigsem,a0
  1893. JSR -570(A6)
  1894. MOVE.L (A7)+,A6
  1895. end;
  1896. procedure ReleaseSemaphoreList(siglist : pList); Assembler;
  1897. asm
  1898. MOVE.L A6,-(A7)
  1899. MOVE.L _ExecBase,A6
  1900. MOVE.L siglist,a0
  1901. JSR -588(A6)
  1902. MOVE.L (A7)+,A6
  1903. end;
  1904. procedure RemDevice(device : pDevice); Assembler;
  1905. asm
  1906. MOVE.L A6,-(A7)
  1907. MOVE.L _ExecBase,A6
  1908. MOVE.L device,a1
  1909. JSR -438(A6)
  1910. MOVE.L (A7)+,A6
  1911. end;
  1912. function RemHead(list : pList) : pNode; Assembler;
  1913. asm
  1914. MOVE.L A6,-(A7)
  1915. MOVE.L _ExecBase,A6
  1916. MOVE.L list,a0
  1917. JSR -258(A6)
  1918. MOVE.L (A7)+,A6
  1919. end;
  1920. procedure RemIntServer(intNum : Longint;
  1921. Int : pInterrupt); Assembler;
  1922. asm
  1923. MOVE.L A6,-(A7)
  1924. MOVE.L _ExecBase,A6
  1925. MOVE.L intNum,d0
  1926. MOVE.L Int,a1
  1927. JSR -174(A6)
  1928. MOVE.L (A7)+,A6
  1929. end;
  1930. procedure RemLibrary(lib : pLibrary); Assembler;
  1931. asm
  1932. MOVE.L A6,-(A7)
  1933. MOVE.L _ExecBase,A6
  1934. MOVE.L lib,a1
  1935. JSR -402(A6)
  1936. MOVE.L (A7)+,A6
  1937. end;
  1938. procedure RemMemHandler(memhand : pInterrupt); Assembler;
  1939. asm
  1940. MOVE.L A6,-(A7)
  1941. MOVE.L _ExecBase,A6
  1942. MOVE.L memhand,a1
  1943. JSR -780(A6)
  1944. MOVE.L (A7)+,A6
  1945. end;
  1946. procedure Remove(node : pNode); Assembler;
  1947. asm
  1948. MOVE.L A6,-(A7)
  1949. MOVE.L _ExecBase,A6
  1950. MOVE.L node,a1
  1951. JSR -252(A6)
  1952. MOVE.L (A7)+,A6
  1953. end;
  1954. procedure RemPort(port : pMsgPort); Assembler;
  1955. asm
  1956. MOVE.L A6,-(A7)
  1957. MOVE.L _ExecBase,A6
  1958. MOVE.L port,a1
  1959. JSR -360(A6)
  1960. MOVE.L (A7)+,A6
  1961. end;
  1962. procedure RemResource(resname : Pointer); Assembler;
  1963. asm
  1964. MOVE.L A6,-(A7)
  1965. MOVE.L _ExecBase,A6
  1966. MOVE.L resname,a1
  1967. JSR -492(A6)
  1968. MOVE.L (A7)+,A6
  1969. end;
  1970. procedure RemSemaphore(sigsem : pSignalSemaphore); Assembler;
  1971. asm
  1972. MOVE.L A6,-(A7)
  1973. MOVE.L _ExecBase,A6
  1974. MOVE.L sigsem,a1
  1975. JSR -606(A6)
  1976. MOVE.L (A7)+,A6
  1977. end;
  1978. function RemTail(list : pList) : pNode; Assembler;
  1979. asm
  1980. MOVE.L A6,-(A7)
  1981. MOVE.L _ExecBase,A6
  1982. MOVE.L list,a0
  1983. JSR -264(A6)
  1984. MOVE.L (A7)+,A6
  1985. end;
  1986. procedure RemTask(task : pTask); Assembler;
  1987. asm
  1988. MOVE.L A6,-(A7)
  1989. MOVE.L _ExecBase,A6
  1990. MOVE.L task,a1
  1991. JSR -288(A6)
  1992. MOVE.L (A7)+,A6
  1993. end;
  1994. procedure ReplyMsg(mess : pMessage); Assembler;
  1995. asm
  1996. MOVE.L A6,-(A7)
  1997. MOVE.L _ExecBase,A6
  1998. MOVE.L mess,a1
  1999. JSR -378(A6)
  2000. MOVE.L (A7)+,A6
  2001. end;
  2002. procedure SendIO(io : pIORequest); Assembler;
  2003. asm
  2004. MOVE.L A6,-(A7)
  2005. MOVE.L _ExecBase,A6
  2006. MOVE.L io,a1
  2007. JSR -462(A6)
  2008. MOVE.L (A7)+,A6
  2009. end;
  2010. function SetExcept(newSignals, signalMask : ULONG) : ULONG; Assembler;
  2011. asm
  2012. MOVE.L A6,-(A7)
  2013. MOVE.L _ExecBase,A6
  2014. MOVE.L newSignals,d0
  2015. MOVE.L signalMask,d1
  2016. JSR -312(A6)
  2017. MOVE.L (A7)+,A6
  2018. end;
  2019. function SetFunction(lib : pLibrary;
  2020. funcOff : LONG;
  2021. funcEntry : Pointer) : Pointer; Assembler;
  2022. asm
  2023. MOVE.L A6,-(A7)
  2024. MOVE.L _ExecBase,A6
  2025. MOVE.L lib,a1
  2026. MOVE.L funcOff,a0
  2027. MOVE.L funcEntry,d0
  2028. JSR -420(A6)
  2029. MOVE.L (A7)+,A6
  2030. end;
  2031. function SetIntVector(intNum : Longint;
  2032. Int : pInterrupt) : pInterrupt; Assembler;
  2033. asm
  2034. MOVE.L A6,-(A7)
  2035. MOVE.L _ExecBase,A6
  2036. MOVE.L intNum,d0
  2037. MOVE.L Int,a1
  2038. JSR -162(A6)
  2039. MOVE.L (A7)+,A6
  2040. end;
  2041. function SetSignal(newSignals, signalMask : ULONG) : ULONG; Assembler;
  2042. asm
  2043. MOVE.L A6,-(A7)
  2044. MOVE.L _ExecBase,A6
  2045. MOVE.L newSignals,d0
  2046. MOVE.L signalMask,d1
  2047. JSR -306(A6)
  2048. MOVE.L (A7)+,A6
  2049. end;
  2050. function SetSR(newSR, mask : ULONG) : ULONG; Assembler;
  2051. asm
  2052. MOVE.L A6,-(A7)
  2053. MOVE.L _ExecBase,A6
  2054. MOVE.L newSR,d0
  2055. MOVE.L mask,d1
  2056. JSR -144(A6)
  2057. MOVE.L (A7)+,A6
  2058. end;
  2059. function SetTaskPri(task : pTask;
  2060. priority : Longint) : Shortint; Assembler;
  2061. asm
  2062. MOVE.L A6,-(A7)
  2063. MOVE.L _ExecBase,A6
  2064. MOVE.L task,a1
  2065. MOVE.L priority,d0
  2066. JSR -300(A6)
  2067. MOVE.L (A7)+,A6
  2068. end;
  2069. procedure Signal(task : pTask; signals : ULONG); Assembler;
  2070. asm
  2071. MOVE.L A6,-(A7)
  2072. MOVE.L _ExecBase,A6
  2073. MOVE.L task,a1
  2074. MOVE.L signals,d0
  2075. JSR -324(A6)
  2076. MOVE.L (A7)+,A6
  2077. end;
  2078. procedure StackSwap( StackSwapRecord : Pointer ); Assembler;
  2079. asm
  2080. MOVE.L A6,-(A7)
  2081. MOVE.L _ExecBase,A6
  2082. MOVE.L StackSwapRecord,a0
  2083. JSR -732(A6)
  2084. MOVE.L (A7)+,A6
  2085. end;
  2086. procedure SumKickData; Assembler;
  2087. asm
  2088. MOVE.L A6,-(A7)
  2089. MOVE.L _ExecBase,A6
  2090. JSR -612(A6)
  2091. MOVE.L (A7)+,A6
  2092. end;
  2093. procedure SumLibrary(lib : pLibrary); Assembler;
  2094. asm
  2095. MOVE.L A6,-(A7)
  2096. MOVE.L _ExecBase,A6
  2097. MOVE.L lib,a1
  2098. JSR -426(A6)
  2099. MOVE.L (A7)+,A6
  2100. end;
  2101. function SuperState : Pointer; Assembler;
  2102. asm
  2103. MOVE.L A6,-(A7)
  2104. MOVE.L _ExecBase,A6
  2105. JSR -150(A6)
  2106. MOVE.L (A7)+,A6
  2107. end;
  2108. function Supervisor(thefunc : Pointer): ULONG; Assembler;
  2109. asm
  2110. MOVEM.L a5/a6,-(A7)
  2111. MOVE.L _ExecBase,A6
  2112. MOVE.L thefunc,a5
  2113. JSR -30(A6)
  2114. MOVEM.L (A7)+,a5/a6
  2115. end;
  2116. function TypeOfMem(mem : Pointer) : ULONG; Assembler;
  2117. asm
  2118. MOVE.L A6,-(A7)
  2119. MOVE.L _ExecBase,A6
  2120. MOVE.L mem,a1
  2121. JSR -534(A6)
  2122. MOVE.L (A7)+,A6
  2123. end;
  2124. procedure UserState(s : Pointer); Assembler;
  2125. asm
  2126. MOVE.L A6,-(A7)
  2127. MOVE.L _ExecBase,A6
  2128. MOVE.L s,d0
  2129. JSR -156(A6)
  2130. MOVE.L (A7)+,A6
  2131. end;
  2132. procedure Vacate(sigsem : pSignalSemaphore;
  2133. bidMsg : pSemaphoreMessage); Assembler;
  2134. asm
  2135. MOVE.L A6,-(A7)
  2136. MOVE.L _ExecBase,A6
  2137. MOVE.L sigsem,a0
  2138. MOVE.L bidMsg,a1
  2139. JSR -546(A6)
  2140. MOVE.L (A7)+,A6
  2141. end;
  2142. function Wait(signals : ULONG) : ULONG; Assembler;
  2143. asm
  2144. MOVE.L A6,-(A7)
  2145. MOVE.L _ExecBase,A6
  2146. MOVE.L signals,d0
  2147. JSR -318(A6)
  2148. MOVE.L (A7)+,A6
  2149. end;
  2150. function WaitIO(io : pIORequest) : Shortint; Assembler;
  2151. asm
  2152. MOVE.L A6,-(A7)
  2153. MOVE.L _ExecBase,A6
  2154. MOVE.L io,a1
  2155. JSR -474(A6)
  2156. MOVE.L (A7)+,A6
  2157. end;
  2158. function WaitPort(port : pMsgPort): pMessage; Assembler;
  2159. asm
  2160. MOVE.L A6,-(A7)
  2161. MOVE.L _ExecBase,A6
  2162. MOVE.L port,a0
  2163. JSR -384(A6)
  2164. MOVE.L (A7)+,A6
  2165. end;
  2166. end.
  2167. {
  2168. $Log$
  2169. Revision 1.1 1998-03-25 11:18:47 root
  2170. Initial revision
  2171. Revision 1.3 1998/01/26 12:02:42 michael
  2172. + Added log at the end
  2173. Working file: rtl/amiga/exec.pp
  2174. description:
  2175. ----------------------------
  2176. revision 1.2
  2177. date: 1997/12/14 19:02:47; author: carl; state: Exp; lines: +11 -10
  2178. * small bugfixes
  2179. ----------------------------
  2180. revision 1.1
  2181. date: 1997/12/10 13:48:45; author: carl; state: Exp;
  2182. + exec dynamic library definitions and calls.
  2183. =============================================================================
  2184. }