exec.pp 74 KB

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