exec.pp 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Amiga exec.library include file
  5. Copyright (c) 1997 by Nils Sjoholm
  6. member of the Amiga RTL development team.
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. unit Exec;
  14. INTERFACE
  15. {$I exec.inc}
  16. procedure AbortIO(io : pIORequest);
  17. procedure AddDevice(device : pDevice);
  18. procedure AddHead(list : pList;
  19. node : pNode);
  20. procedure AddIntServer(intNum : ULONG;
  21. Int : pInterrupt);
  22. procedure AddLibrary(lib : pLibrary);
  23. procedure AddMemHandler(memhand : pInterrupt);
  24. procedure AddMemList(size, attr : ULONG;
  25. pri : Longint;
  26. base : Pointer;
  27. name : STRPTR);
  28. procedure AddPort(port : pMsgPort);
  29. procedure AddResource(resource : Pointer);
  30. procedure AddSemaphore(sigsem : pSignalSemaphore);
  31. procedure AddTail(list : pList;
  32. node : pNode);
  33. procedure AddTask(task : pTask;
  34. initialPC, finalPC : Pointer);
  35. procedure Alert(alertNum : ULONG;
  36. parameters : Pointer);
  37. function AllocAbs(bytesize : ULONG;
  38. location : Pointer) : Pointer;
  39. function Allocate(mem : pMemHeader;
  40. bytesize : ULONG) : Pointer;
  41. function AllocEntry(mem : pMemList) : pMemList;
  42. function AllocMem(bytesize : ULONG;
  43. reqs : ULONG) : Pointer;
  44. function AllocPooled( pooleheader : Pointer;
  45. memsize : ULONG ): Pointer;
  46. function AllocSignal(signalNum : Longint) : Shortint;
  47. function AllocTrap(trapNum : Longint) : Longint;
  48. function AllocVec( size, reqm : ULONG ): Pointer;
  49. function AttemptSemaphore(sigsem : pSignalSemaphore) : Boolean;
  50. function AttemptSemaphoreShared(sigsem : pSignalSemaphore): ULONG;
  51. function AvailMem(attr : ULONG) : ULONG;
  52. procedure CacheClearE( cxa : Pointer;
  53. lenght, caches : ULONG);
  54. procedure CacheClearU;
  55. function CacheControl( cachebits, cachemask: ULONG ): ULONG;
  56. procedure CachePostDMA(vaddress, length_IntPtr : Pointer;
  57. flags : ULONG );
  58. function CachePreDMA(vaddress, length_intPtr : Pointer;
  59. flags : ULONG): Pointer;
  60. procedure Cause(Int : pInterrupt);
  61. function CheckIO(io : pIORequest) : pIORequest;
  62. procedure ChildFree( tid : Pointer);
  63. procedure ChildOrphan( tid : Pointer);
  64. procedure ChildStatus( tid : Pointer);
  65. procedure ChildWait( tid : Pointer);
  66. procedure CloseDevice(io : pIORequest);
  67. procedure CloseLibrary(lib : pLibrary);
  68. procedure ColdReboot;
  69. procedure CopyMem(source, dest : Pointer;
  70. size : ULONG);
  71. procedure CopyMemQuick(source, dest : Pointer;
  72. size : ULONG);
  73. function CreateIORequest( mp : pMsgPort;
  74. size : ULONG ): pIORequest;
  75. function CreateMsgPort: pMsgPort;
  76. function CreatePool( requrements,puddlesize,
  77. puddletresh : ULONG ): Pointer;
  78. procedure Deallocate(header : pMemHeader;
  79. block : Pointer;
  80. size : ULONG);
  81. procedure Debug(Param : ULONG);
  82. procedure DeleteIORequest( iorq : Pointer );
  83. procedure DeleteMsgPort( mp : pMsgPort );
  84. procedure DeletePool( poolheader : Pointer );
  85. procedure Disable;
  86. function DoIO(io : pIORequest) : Shortint;
  87. procedure Enable;
  88. procedure Enqueue(list : pList;
  89. node : pNode);
  90. function FindName(start : pList;
  91. name : STRPTR) : pNode;
  92. function FindPort(name : STRPTR): pMsgPort;
  93. function FindResident(name : STRPTR) : pResident;
  94. function FindSemaphore(name : STRPTR) : pSignalSemaphore;
  95. function FindTask(name : STRPTR) : pTask;
  96. procedure Forbid;
  97. procedure FreeEntry(memList : pMemList);
  98. procedure ExecFreeMem(memBlock : Pointer;
  99. size : ULONG);
  100. procedure FreePooled( poolheader, memory: Pointer;
  101. memsize: ULONG);
  102. procedure FreeSignal(signalNum : Longint);
  103. procedure FreeTrap(signalNum : ULONG);
  104. procedure FreeVec( memory : Pointer );
  105. function GetCC : ULONG;
  106. function GetMsg(port : pMsgPort): pMessage;
  107. procedure InitCode(startClass, version : ULONG);
  108. procedure InitResident(resident : pResident;
  109. segList : ULONG);
  110. procedure InitSemaphore(sigsem : pSignalSemaphore);
  111. procedure InitStruct(table, memory : Pointer;
  112. size : ULONG);
  113. procedure Insert(list : pList;
  114. node, listNode : pNode);
  115. procedure MakeFunctions(target, functionarray : Pointer ;
  116. dispbase : ULONG);
  117. function MakeLibrary(vec, struct, init : Pointer;
  118. dSize : ULONG ;
  119. segList : Pointer) : pLibrary;
  120. function ObtainQuickVector(interruptCode : Pointer) : ULONG;
  121. procedure ObtainSemaphore(sigsem : pSignalSemaphore);
  122. procedure ObtainSemaphoreList(semlist : pList);
  123. procedure ObtainSemaphoreShared(sigsem : pSignalSemaphore);
  124. function OldOpenLibrary(lib : STRPTR): pLibrary;
  125. function OpenDevice(devName : STRPTR;
  126. unitNumber : ULONG;
  127. io : pIORequest; flags : ULONG) : Shortint;
  128. function OpenLibrary(libName : STRPTR;
  129. version : Integer) : pLibrary;
  130. function OpenResource(resname : STRPTR): Pointer;
  131. procedure Permit;
  132. function Procure(sem : pSemaphore;
  133. bid : pMessage) : Boolean;
  134. procedure PutMsg(port : pMsgPort;
  135. mess : pMessage);
  136. procedure RawDoFmt(Form : STRPTR;
  137. data, putChProc, putChData : Pointer);
  138. procedure ReleaseSemaphore(sigsem : pSignalSemaphore);
  139. procedure ReleaseSemaphoreList(siglist : pList);
  140. procedure RemDevice(device : pDevice);
  141. function RemHead(list : pList) : pNode;
  142. procedure RemIntServer(intNum : Longint;
  143. Int : pInterrupt);
  144. procedure RemLibrary(lib : pLibrary);
  145. procedure RemMemHandler(memhand : pInterrupt);
  146. procedure Remove(node : pNode);
  147. procedure RemPort(port : pMsgPort);
  148. procedure RemResource(resname : Pointer);
  149. procedure RemSemaphore(sigsem : pSignalSemaphore);
  150. function RemTail(list : pList) : pNode;
  151. procedure RemTask(task : pTask);
  152. procedure ReplyMsg(mess : pMessage);
  153. procedure SendIO(io : pIORequest);
  154. function SetExcept(newSignals, signalMask : ULONG) : ULONG;
  155. function SetFunction(lib : pLibrary;
  156. funcOff : LONG;
  157. funcEntry : Pointer) : Pointer;
  158. function SetIntVector(intNum : Longint;
  159. Int : pInterrupt) : pInterrupt;
  160. function SetSignal(newSignals, signalMask : ULONG) : ULONG;
  161. function SetSR(newSR, mask : ULONG) : ULONG;
  162. function SetTaskPri(task : pTask;
  163. priority : Longint) : Shortint;
  164. procedure Signal(task : pTask; signals : ULONG);
  165. procedure StackSwap( StackSwapRecord : Pointer );
  166. procedure SumKickData;
  167. procedure SumLibrary(lib : pLibrary);
  168. function SuperState : Pointer;
  169. function Supervisor(thefunc : Pointer): ULONG;
  170. function TypeOfMem(mem : Pointer) : ULONG;
  171. procedure UserState(s : Pointer);
  172. procedure Vacate(sigsem : pSignalSemaphore;
  173. bidMsg : pSemaphoreMessage);
  174. function Wait(signals : ULONG) : ULONG;
  175. function WaitIO(io : pIORequest) : Shortint;
  176. function WaitPort(port : pMsgPort): pMessage;
  177. {* Exec support functions from amiga.lib *}
  178. procedure BeginIO (ioRequest: pIORequest);
  179. function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
  180. procedure DeleteExtIO (ioReq: pIORequest);
  181. function CreateStdIO (port: pMsgPort): pIOStdReq;
  182. procedure DeleteStdIO (ioReq: pIOStdReq);
  183. function CreatePort (name: STRPTR; pri: integer): pMsgPort;
  184. procedure DeletePort (port: pMsgPort);
  185. function CreateTask (name: STRPTR; pri: longint;
  186. initPC : Pointer;
  187. stackSize : ULONG): pTask;
  188. procedure DeleteTask (task: pTask);
  189. procedure NewList (list: pList);
  190. IMPLEMENTATION
  191. {* Exec support functions from amiga.lib *}
  192. procedure BeginIO (ioRequest: pIORequest);
  193. begin
  194. asm
  195. move.l a6,-(a7)
  196. move.l ioRequest,a1 ; get IO Request
  197. move.l 20(a1),a6 ; extract Device ptr
  198. jsr -30(a6) ; call BEGINIO directly
  199. move.l (a7)+,a6
  200. end;
  201. end;
  202. function CreateExtIO (port: pMsgPort; size: Longint): pIORequest;
  203. var
  204. IOReq: pIORequest;
  205. begin
  206. IOReq := NIL;
  207. if port <> NIL then
  208. begin
  209. IOReq := AllocMem(size, MEMF_CLEAR or MEMF_PUBLIC);
  210. if IOReq <> NIL then
  211. begin
  212. IOReq^.io_Message.mn_Node.ln_Type := NT_REPLYMSG;
  213. IOReq^.io_Message.mn_Length := size;
  214. IOReq^.io_Message.mn_ReplyPort := port;
  215. end;
  216. end;
  217. CreateExtIO := IOReq;
  218. end;
  219. procedure DeleteExtIO (ioReq: pIORequest);
  220. begin
  221. if ioReq <> NIL then
  222. begin
  223. ioReq^.io_Message.mn_Node.ln_Type := $FF;
  224. ioReq^.io_Message.mn_ReplyPort := pMsgPort(-1);
  225. ioReq^.io_Device := pDevice(-1);
  226. ExecFreeMem(ioReq, ioReq^.io_Message.mn_Length);
  227. end
  228. end;
  229. function CreateStdIO (port: pMsgPort): pIOStdReq;
  230. begin
  231. CreateStdIO := pIOStdReq(CreateExtIO(port, sizeof(tIOStdReq)))
  232. end;
  233. procedure DeleteStdIO (ioReq: pIOStdReq);
  234. begin
  235. DeleteExtIO(pIORequest(ioReq))
  236. end;
  237. function CreatePort (name: STRPTR; pri: integer): pMsgPort;
  238. var
  239. port : pMsgPort;
  240. sigbit : shortint;
  241. begin
  242. port := NIL;
  243. sigbit := AllocSignal(-1);
  244. if sigbit <> -1 then
  245. begin
  246. port := AllocMem(sizeof(tMsgPort), MEMF_CLEAR or MEMF_PUBLIC);
  247. if port = NIL then
  248. FreeSignal(sigbit)
  249. else
  250. begin
  251. port^.mp_Node.ln_Name := name;
  252. port^.mp_Node.ln_Pri := pri;
  253. port^.mp_Node.ln_Type := NT_MSGPORT;
  254. port^.mp_Flags := PA_SIGNAL;
  255. port^.mp_SigBit := sigbit;
  256. port^.mp_SigTask := FindTask(NIL);
  257. if name <> NIL then
  258. AddPort(port)
  259. else
  260. NewList(@port^.mp_MsgList);
  261. end;
  262. end;
  263. CreatePort := port;
  264. end;
  265. procedure DeletePort (port: pMsgPort);
  266. begin
  267. if port <> NIL then
  268. begin
  269. if port^.mp_Node.ln_Name <> NIL then
  270. RemPort(port);
  271. port^.mp_SigTask := pTask(-1);
  272. port^.mp_MsgList.lh_Head := pNode(-1);
  273. FreeSignal(port^.mp_SigBit);
  274. ExecFreeMem(port, sizeof(tMsgPort));
  275. end;
  276. end;
  277. function CreateTask (name: STRPTR; pri: longint;
  278. initPC: pointer; stackSize: ULONG): pTask;
  279. var
  280. memlist : pMemList;
  281. task : pTask;
  282. totalsize : Longint;
  283. begin
  284. task := NIL;
  285. stackSize := (stackSize + 3) and not 3;
  286. totalsize := sizeof(tMemList) + sizeof(tTask) + stackSize;
  287. memlist := AllocMem(totalsize, MEMF_PUBLIC + MEMF_CLEAR);
  288. if memlist <> NIL then begin
  289. memlist^.ml_NumEntries := 1;
  290. memlist^.ml_ME[0].me_Un.meu_Addr := Pointer(memlist + 1);
  291. memlist^.ml_ME[0].me_Length := totalsize - sizeof(tMemList);
  292. task := pTask(memlist + sizeof(tMemList) + stackSize);
  293. task^.tc_Node.ln_Pri := pri;
  294. task^.tc_Node.ln_Type := NT_TASK;
  295. task^.tc_Node.ln_Name := name;
  296. task^.tc_SPLower := Pointer(memlist + sizeof(tMemList));
  297. task^.tc_SPUpper := Pointer(task^.tc_SPLower + stackSize);
  298. task^.tc_SPReg := task^.tc_SPUpper;
  299. NewList(@task^.tc_MemEntry);
  300. AddTail(@task^.tc_MemEntry,@memlist^.ml_Node);
  301. AddTask(task,initPC,NIL)
  302. end;
  303. CreateTask := task;
  304. end;
  305. procedure DeleteTask (task: pTask);
  306. begin
  307. RemTask(task)
  308. end;
  309. procedure NewList (list: pList);
  310. begin
  311. with list^ do
  312. begin
  313. lh_Head := pNode(@lh_Tail);
  314. lh_Tail := NIL;
  315. lh_TailPred := pNode(@lh_Head)
  316. end
  317. end;
  318. procedure AbortIO(io : pIORequest);
  319. begin
  320. asm
  321. MOVE.L A6,-(A7)
  322. MOVE.L io,a1
  323. MOVE.L _ExecBase,A6
  324. JSR -480(A6)
  325. MOVE.L (A7)+,A6
  326. end;
  327. end;
  328. procedure AddDevice(device : pDevice);
  329. begin
  330. asm
  331. MOVE.L A6,-(A7)
  332. MOVE.L device,a1
  333. MOVE.L _ExecBase,A6
  334. JSR -432(A6)
  335. MOVE.L (A7)+,A6
  336. end;
  337. end;
  338. procedure AddHead(list : pList;
  339. node : pNode);
  340. begin
  341. asm
  342. MOVE.L A6,-(A7)
  343. MOVE.L list,a0
  344. MOVE.L node,a1
  345. MOVE.L _ExecBase,A6
  346. JSR -240(A6)
  347. MOVE.L (A7)+,A6
  348. end;
  349. end;
  350. procedure AddIntServer(intNum : ULONG;
  351. Int : pInterrupt);
  352. begin
  353. asm
  354. MOVE.L A6,-(A7)
  355. MOVE.L intNum,d0
  356. MOVE.L Int,a1
  357. MOVE.L _ExecBase,A6
  358. JSR -168(A6)
  359. MOVE.L (A7)+,A6
  360. end;
  361. end;
  362. procedure AddLibrary(lib : pLibrary);
  363. begin
  364. asm
  365. MOVE.L A6,-(A7)
  366. MOVE.L lib,a1
  367. MOVE.L _ExecBase,A6
  368. JSR -396(A6)
  369. MOVE.L (A7)+,A6
  370. end;
  371. end;
  372. procedure AddMemHandler(memhand : pInterrupt);
  373. begin
  374. asm
  375. MOVE.L A6,-(A7)
  376. MOVE.L memhand,a1
  377. MOVE.L _ExecBase,A6
  378. JSR -774(A6)
  379. MOVE.L (A7)+,A6
  380. end;
  381. end;
  382. procedure AddMemList(size, attr : ULONG;
  383. pri : Longint;
  384. base : Pointer;
  385. name : STRPTR);
  386. begin
  387. asm
  388. MOVEM.L d2/a6,-(A7)
  389. MOVE.L size,d0
  390. MOVE.L attr,d1
  391. MOVE.L pri,d2
  392. MOVE.L base,a0
  393. MOVE.L name,a1
  394. MOVE.L _ExecBase,A6
  395. JSR -618(A6)
  396. MOVEM.L (A7)+,d2/a6
  397. end;
  398. end;
  399. procedure AddPort(port : pMsgPort);
  400. begin
  401. asm
  402. MOVE.L A6,-(A7)
  403. MOVE.L port,a1
  404. MOVE.L _ExecBase,A6
  405. JSR -354(A6)
  406. MOVE.L (A7)+,A6
  407. end;
  408. end;
  409. procedure AddResource(resource : Pointer);
  410. begin
  411. asm
  412. MOVE.L A6,-(A7)
  413. MOVE.L resource,a1
  414. MOVE.L _ExecBase,A6
  415. JSR -486(A6)
  416. MOVE.L (A7)+,A6
  417. end;
  418. end;
  419. procedure AddSemaphore(sigsem : pSignalSemaphore);
  420. begin
  421. asm
  422. MOVE.L A6,-(A7)
  423. MOVE.L sigsem,a1
  424. MOVE.L _ExecBase,A6
  425. JSR -600(A6)
  426. MOVE.L (A7)+,A6
  427. end;
  428. end;
  429. procedure AddTail(list : pList;
  430. node : pNode);
  431. begin
  432. asm
  433. MOVE.L A6,-(A7)
  434. MOVE.L list,a0
  435. MOVE.L node,a1
  436. MOVE.L _ExecBase,A6
  437. JSR -246(A6)
  438. MOVE.L (A7)+,A6
  439. end;
  440. end;
  441. procedure AddTask(task : pTask;
  442. initialPC, finalPC : Pointer);
  443. begin
  444. asm
  445. MOVEM.L a2/a3/a6,-(A7)
  446. MOVE.L task,a1
  447. MOVE.L initialPC,a2
  448. MOVE.L finalPC,a3
  449. MOVE.L _ExecBase,A6
  450. JSR -282(A6)
  451. MOVEM.L (A7)+,a2/a3/a6
  452. end;
  453. end;
  454. procedure Alert(alertNum : ULONG;
  455. parameters : Pointer);
  456. begin
  457. asm
  458. MOVEM.L d7/a6,-(A7)
  459. MOVE.L alertNum,d7
  460. MOVE.L _ExecBase,A6
  461. JSR -108(A6)
  462. MOVEM.L (A7)+,d7/a6
  463. end;
  464. end;
  465. function AllocAbs(bytesize : ULONG;
  466. location : Pointer) : Pointer;
  467. begin
  468. asm
  469. MOVE.L A6,-(A7)
  470. MOVE.L bytesize,d0
  471. MOVE.L location,a1
  472. MOVE.L _ExecBase,A6
  473. JSR -204(A6)
  474. MOVE.L (A7)+,A6
  475. MOVE.L d0,@RESULT
  476. end;
  477. end;
  478. function Allocate(mem : pMemHeader;
  479. bytesize : ULONG) : Pointer;
  480. begin
  481. asm
  482. MOVE.L A6,-(A7)
  483. MOVE.L mem,a0
  484. MOVE.L bytesize,d0
  485. MOVE.L _ExecBase,A6
  486. JSR -186(A6)
  487. MOVE.L (A7)+,A6
  488. MOVE.L d0,@RESULT
  489. end;
  490. end;
  491. function AllocEntry(mem : pMemList) : pMemList;
  492. begin
  493. asm
  494. MOVE.L A6,-(A7)
  495. MOVE.L mem,a0
  496. MOVE.L _ExecBase,A6
  497. JSR -222(A6)
  498. MOVE.L (A7)+,A6
  499. MOVE.L d0,@RESULT
  500. end;
  501. end;
  502. function AllocMem(bytesize : ULONG;
  503. reqs : ULONG) : Pointer;
  504. begin
  505. asm
  506. MOVE.L A6,-(A7)
  507. MOVE.L bytesize,d0
  508. MOVE.L reqs,d1
  509. MOVE.L _ExecBase,A6
  510. JSR -198(A6)
  511. MOVE.L (A7)+,A6
  512. MOVE.L d0,@RESULT
  513. end;
  514. end;
  515. function AllocPooled( pooleheader : Pointer;
  516. memsize : ULONG ): Pointer;
  517. begin
  518. asm
  519. MOVE.L A6,-(A7)
  520. MOVE.L pooleheader,a0
  521. MOVE.L memsize,d0
  522. MOVE.L _ExecBase,A6
  523. JSR -708(A6)
  524. MOVE.L (A7)+,A6
  525. MOVE.L d0,@RESULT
  526. end;
  527. end;
  528. function AllocSignal(signalNum : Longint) : Shortint;
  529. begin
  530. asm
  531. MOVE.L A6,-(A7)
  532. MOVE.L signalNum,d0
  533. MOVE.L _ExecBase,A6
  534. JSR -330(A6)
  535. MOVE.L (A7)+,A6
  536. MOVE.B d0,@RESULT
  537. end;
  538. end;
  539. function AllocTrap(trapNum : Longint) : Longint;
  540. begin
  541. asm
  542. MOVE.L A6,-(A7)
  543. MOVE.L trapNum,d0
  544. MOVE.L _ExecBase,A6
  545. JSR -342(A6)
  546. MOVE.L (A7)+,A6
  547. MOVE.L d0,@RESULT
  548. end;
  549. end;
  550. function AllocVec( size, reqm : ULONG ): Pointer;
  551. begin
  552. asm
  553. MOVE.L A6,-(A7)
  554. MOVE.L size,d0
  555. MOVE.L reqm,d1
  556. MOVE.L _ExecBase,A6
  557. JSR -684(A6)
  558. MOVE.L (A7)+,A6
  559. MOVE.L d0,@RESULT
  560. end;
  561. end;
  562. function AttemptSemaphore(sigsem : pSignalSemaphore) : Boolean;
  563. begin
  564. asm
  565. MOVE.L A6,-(A7)
  566. MOVE.L sigsem,a0
  567. MOVE.L _ExecBase,A6
  568. JSR -576(A6)
  569. MOVE.L (A7)+,A6
  570. TST.W D0
  571. BEQ.B @end
  572. MOVEQ #1,D0
  573. @end: MOVE.B D0,@RESULT
  574. end;
  575. end;
  576. function AttemptSemaphoreShared(sigsem : pSignalSemaphore): ULONG;
  577. begin
  578. asm
  579. MOVE.L A6,-(A7)
  580. MOVE.L sigsem,a0
  581. MOVE.L _ExecBase,A6
  582. JSR -720(A6)
  583. MOVE.L (A7)+,A6
  584. MOVE.L d0,@RESULT
  585. end;
  586. end;
  587. function AvailMem(attr : ULONG) : ULONG;
  588. begin
  589. asm
  590. MOVE.L A6,-(A7)
  591. MOVE.L attr,d1
  592. MOVE.L _ExecBase,A6
  593. JSR -216(A6)
  594. MOVE.L (A7)+,A6
  595. MOVE.L d0,@RESULT
  596. end;
  597. end;
  598. procedure CacheClearE( cxa : Pointer;
  599. lenght, caches : ULONG);
  600. begin
  601. asm
  602. MOVE.L A6,-(A7)
  603. MOVE.L cxa,a0
  604. MOVE.L lenght,d0
  605. MOVE.L caches,d1
  606. MOVE.L _ExecBase,A6
  607. JSR -642(A6)
  608. MOVE.L (A7)+,A6
  609. end;
  610. end;
  611. procedure CacheClearU;
  612. begin
  613. asm
  614. MOVE.L A6,-(A7)
  615. MOVE.L _ExecBase,A6
  616. JSR -636(A6)
  617. MOVE.L (A7)+,A6
  618. end;
  619. end;
  620. function CacheControl( cachebits, cachemask: ULONG ): ULONG;
  621. begin
  622. asm
  623. MOVE.L A6,-(A7)
  624. MOVE.L cachebits,d0
  625. MOVE.L cachemask,d1
  626. MOVE.L _ExecBase,A6
  627. JSR -648(A6)
  628. MOVE.L (A7)+,A6
  629. MOVE.L d0,@RESULT
  630. end;
  631. end;
  632. procedure CachePostDMA(vaddress, length_IntPtr : Pointer;
  633. flags : ULONG );
  634. begin
  635. asm
  636. MOVE.L A6,-(A7)
  637. MOVE.L vaddress,a0
  638. MOVE.L length_IntPtr,a1
  639. MOVE.L flags,d0
  640. MOVE.L _ExecBase,A6
  641. JSR -768(A6)
  642. MOVE.L (A7)+,A6
  643. end;
  644. end;
  645. function CachePreDMA(vaddress, length_intPtr : Pointer;
  646. flags : ULONG): Pointer;
  647. begin
  648. asm
  649. MOVE.L A6,-(A7)
  650. MOVE.L vaddress,a0
  651. MOVE.L length_intPtr,a1
  652. MOVE.L flags,d0
  653. MOVE.L _ExecBase,A6
  654. JSR -762(A6)
  655. MOVE.L (A7)+,A6
  656. MOVE.L d0,@RESULT
  657. end;
  658. end;
  659. procedure Cause(Int : pInterrupt);
  660. begin
  661. asm
  662. MOVE.L A6,-(A7)
  663. MOVE.L Int,a1
  664. MOVE.L _ExecBase,A6
  665. JSR -180(A6)
  666. MOVE.L (A7)+,A6
  667. end;
  668. end;
  669. function CheckIO(io : pIORequest) : pIORequest;
  670. begin
  671. asm
  672. MOVE.L A6,-(A7)
  673. MOVE.L io,a1
  674. MOVE.L _ExecBase,A6
  675. JSR -468(A6)
  676. MOVE.L (A7)+,A6
  677. MOVE.L d0,@RESULT
  678. end;
  679. end;
  680. procedure ChildFree( tid : Pointer);
  681. begin
  682. asm
  683. MOVE.L A6,-(A7)
  684. MOVE.L tid,d0
  685. MOVE.L _ExecBase,A6
  686. JSR -738(A6)
  687. MOVE.L (A7)+,A6
  688. end;
  689. end;
  690. procedure ChildOrphan( tid : Pointer);
  691. begin
  692. asm
  693. MOVE.L A6,-(A7)
  694. MOVE.L tid,d0
  695. MOVE.L _ExecBase,A6
  696. JSR -744(A6)
  697. MOVE.L (A7)+,A6
  698. end;
  699. end;
  700. procedure ChildStatus( tid : Pointer);
  701. begin
  702. asm
  703. MOVE.L A6,-(A7)
  704. MOVE.L tid,d0
  705. MOVE.L _ExecBase,A6
  706. JSR -750(A6)
  707. MOVE.L (A7)+,A6
  708. end;
  709. end;
  710. procedure ChildWait( tid : Pointer);
  711. begin
  712. asm
  713. MOVE.L A6,-(A7)
  714. MOVE.L tid,d0
  715. MOVE.L _ExecBase,A6
  716. JSR -756(A6)
  717. MOVE.L (A7)+,A6
  718. end;
  719. end;
  720. procedure CloseDevice(io : pIORequest);
  721. begin
  722. asm
  723. MOVE.L A6,-(A7)
  724. MOVE.L io,a1
  725. MOVE.L _ExecBase,A6
  726. JSR -450(A6)
  727. MOVE.L (A7)+,A6
  728. end;
  729. end;
  730. procedure CloseLibrary(lib : pLibrary);
  731. begin
  732. asm
  733. MOVE.L A6,-(A7)
  734. MOVE.L lib,a1
  735. MOVE.L _ExecBase,A6
  736. JSR -414(A6)
  737. MOVE.L (A7)+,A6
  738. end;
  739. end;
  740. procedure ColdReboot;
  741. begin
  742. asm
  743. MOVE.L A6,-(A7)
  744. MOVE.L _ExecBase,A6
  745. JSR -726(A6)
  746. MOVE.L (A7)+,A6
  747. end;
  748. end;
  749. procedure CopyMem(source, dest : Pointer;
  750. size : ULONG);
  751. begin
  752. asm
  753. MOVE.L A6,-(A7)
  754. MOVE.L source,a0
  755. MOVE.L dest,a1
  756. MOVE.L size,d0
  757. MOVE.L _ExecBase,A6
  758. JSR -624(A6)
  759. MOVE.L (A7)+,A6
  760. end;
  761. end;
  762. procedure CopyMemQuick(source, dest : Pointer;
  763. size : ULONG);
  764. begin
  765. asm
  766. MOVE.L A6,-(A7)
  767. MOVE.L source,a0
  768. MOVE.L dest,a1
  769. MOVE.L size,d0
  770. MOVE.L _ExecBase,A6
  771. JSR -630(A6)
  772. MOVE.L (A7)+,A6
  773. end;
  774. end;
  775. function CreateIORequest( mp : pMsgPort;
  776. size : ULONG ): pIORequest;
  777. begin
  778. asm
  779. MOVE.L A6,-(A7)
  780. MOVE.L mp,a0
  781. MOVE.L size,d0
  782. MOVE.L _ExecBase,A6
  783. JSR -654(A6)
  784. MOVE.L (A7)+,A6
  785. MOVE.L d0,@RESULT
  786. end;
  787. end;
  788. function CreateMsgPort: pMsgPort;
  789. begin
  790. asm
  791. MOVE.L A6,-(A7)
  792. MOVE.L _ExecBase,A6
  793. JSR -666(A6)
  794. MOVE.L (A7)+,A6
  795. MOVE.L d0,@RESULT
  796. end;
  797. end;
  798. function CreatePool( requrements,puddlesize,
  799. puddletresh : ULONG ): Pointer;
  800. begin
  801. asm
  802. MOVEM.L d2/a6,-(A7)
  803. MOVE.L requrements,d0
  804. MOVE.L puddlesize,d1
  805. MOVE.L puddletresh,d2
  806. MOVE.L _ExecBase,A6
  807. JSR -696(A6)
  808. MOVEM.L (A7)+,d2/a6
  809. MOVE.L d0,@RESULT
  810. end;
  811. end;
  812. procedure Deallocate(header : pMemHeader;
  813. block : Pointer;
  814. size : ULONG);
  815. begin
  816. asm
  817. MOVE.L A6,-(A7)
  818. MOVE.L header,a0
  819. MOVE.L block,a1
  820. MOVE.L size,d0
  821. MOVE.L _ExecBase,A6
  822. JSR -192(A6)
  823. MOVE.L (A7)+,A6
  824. end;
  825. end;
  826. procedure Debug(Param : ULONG);
  827. begin
  828. asm
  829. MOVE.L A6,-(A7)
  830. MOVE.L Param,d0
  831. MOVE.L _ExecBase,A6
  832. JSR -114(A6)
  833. MOVE.L (A7)+,A6
  834. end;
  835. end;
  836. procedure DeleteIORequest( iorq : Pointer );
  837. begin
  838. asm
  839. MOVE.L A6,-(A7)
  840. MOVE.L iorq,a0
  841. MOVE.L _ExecBase,A6
  842. JSR -660(A6)
  843. MOVE.L (A7)+,A6
  844. end;
  845. end;
  846. procedure DeleteMsgPort( mp : pMsgPort );
  847. begin
  848. asm
  849. MOVE.L A6,-(A7)
  850. MOVE.L mp,a0
  851. MOVE.L _ExecBase,A6
  852. JSR -672(A6)
  853. MOVE.L (A7)+,A6
  854. end;
  855. end;
  856. procedure DeletePool( poolheader : Pointer );
  857. begin
  858. asm
  859. MOVE.L A6,-(A7)
  860. MOVE.L poolheader,a0
  861. MOVE.L _ExecBase,A6
  862. JSR -702(A6)
  863. MOVE.L (A7)+,A6
  864. end;
  865. end;
  866. procedure Disable;
  867. begin
  868. asm
  869. MOVE.L A6,-(A7)
  870. MOVE.L _ExecBase,A6
  871. JSR -120(A6)
  872. MOVE.L (A7)+,A6
  873. end;
  874. end;
  875. function DoIO(io : pIORequest) : Shortint;
  876. begin
  877. asm
  878. MOVE.L A6,-(A7)
  879. MOVE.L io,a1
  880. MOVE.L _ExecBase,A6
  881. JSR -456(A6)
  882. MOVE.L (A7)+,A6
  883. MOVE.L d0,@RESULT
  884. end;
  885. end;
  886. procedure Enable;
  887. begin
  888. asm
  889. MOVE.L A6,-(A7)
  890. MOVE.L _ExecBase,A6
  891. JSR -126(A6)
  892. MOVE.L (A7)+,A6
  893. end;
  894. end;
  895. procedure Enqueue(list : pList;
  896. node : pNode);
  897. begin
  898. asm
  899. MOVE.L A6,-(A7)
  900. MOVE.L list,a0
  901. MOVE.L node,a1
  902. MOVE.L _ExecBase,A6
  903. JSR -270(A6)
  904. MOVE.L (A7)+,A6
  905. end;
  906. end;
  907. function FindName(start : pList;
  908. name : STRPTR) : pNode;
  909. begin
  910. asm
  911. MOVE.L A6,-(A7)
  912. MOVE.L start,a0
  913. MOVE.L name,a1
  914. MOVE.L _ExecBase,A6
  915. JSR -276(A6)
  916. MOVE.L (A7)+,A6
  917. MOVE.L d0,@RESULT
  918. end;
  919. end;
  920. function FindPort(name : STRPTR): pMsgPort;
  921. begin
  922. asm
  923. MOVE.L A6,-(A7)
  924. MOVE.L name,a1
  925. MOVE.L _ExecBase,A6
  926. JSR -390(A6)
  927. MOVE.L (A7)+,A6
  928. MOVE.L d0,@RESULT
  929. end;
  930. end;
  931. function FindResident(name : STRPTR) : pResident;
  932. begin
  933. asm
  934. MOVE.L A6,-(A7)
  935. MOVE.L name,a1
  936. MOVE.L _ExecBase,A6
  937. JSR -96(A6)
  938. MOVE.L (A7)+,A6
  939. MOVE.L d0,@RESULT
  940. end;
  941. end;
  942. function FindSemaphore(name : STRPTR) : pSignalSemaphore;
  943. begin
  944. asm
  945. MOVE.L A6,-(A7)
  946. MOVE.L name,a1
  947. MOVE.L _ExecBase,A6
  948. JSR -594(A6)
  949. MOVE.L (A7)+,A6
  950. MOVE.L d0,@RESULT
  951. end;
  952. end;
  953. function FindTask(name : STRPTR) : pTask;
  954. begin
  955. asm
  956. MOVE.L A6,-(A7)
  957. MOVE.L name,a1
  958. MOVE.L _ExecBase,A6
  959. JSR -294(A6)
  960. MOVE.L (A7)+,A6
  961. MOVE.L d0,@RESULT
  962. end;
  963. end;
  964. procedure Forbid;
  965. begin
  966. asm
  967. MOVE.L A6,-(A7)
  968. MOVE.L _ExecBase,A6
  969. JSR -132(A6)
  970. MOVE.L (A7)+,A6
  971. end;
  972. end;
  973. procedure FreeEntry(memList : pMemList);
  974. begin
  975. asm
  976. MOVE.L A6,-(A7)
  977. MOVE.L memlist,a0
  978. MOVE.L _ExecBase,A6
  979. JSR -228(A6)
  980. MOVE.L (A7)+,A6
  981. end;
  982. end;
  983. procedure ExecFreeMem(memBlock : Pointer;
  984. size : ULONG);
  985. begin
  986. asm
  987. MOVE.L A6,-(A7)
  988. MOVE.L memBlock,a1
  989. MOVE.L size,d0
  990. MOVE.L _ExecBase,A6
  991. JSR -210(A6)
  992. MOVE.L (A7)+,A6
  993. end;
  994. end;
  995. procedure FreePooled( poolheader, memory: Pointer;
  996. memsize: ULONG);
  997. begin
  998. asm
  999. MOVE.L A6,-(A7)
  1000. MOVE.L poolheader,a0
  1001. MOVE.L memory,a1
  1002. MOVE.L memsize,d0
  1003. MOVE.L _ExecBase,A6
  1004. JSR -714(A6)
  1005. MOVE.L (A7)+,A6
  1006. end;
  1007. end;
  1008. procedure FreeSignal(signalNum : Longint);
  1009. begin
  1010. asm
  1011. MOVE.L A6,-(A7)
  1012. MOVE.L signalNum,d0
  1013. MOVE.L _ExecBase,A6
  1014. JSR -336(A6)
  1015. MOVE.L (A7)+,A6
  1016. end;
  1017. end;
  1018. procedure FreeTrap(signalNum : ULONG);
  1019. begin
  1020. asm
  1021. MOVE.L A6,-(A7)
  1022. MOVE.L signalNum,d0
  1023. MOVE.L _ExecBase,A6
  1024. JSR -348(A6)
  1025. MOVE.L (A7)+,A6
  1026. end;
  1027. end;
  1028. procedure FreeVec( memory : Pointer );
  1029. begin
  1030. asm
  1031. MOVE.L A6,-(A7)
  1032. MOVE.L memory,a1
  1033. MOVE.L _ExecBase,A6
  1034. JSR -690(A6)
  1035. MOVE.L (A7)+,A6
  1036. end;
  1037. end;
  1038. function GetCC : ULONG;
  1039. begin
  1040. asm
  1041. MOVE.L A6,-(A7)
  1042. MOVE.L _ExecBase,A6
  1043. JSR -528(A6)
  1044. MOVE.L (A7)+,A6
  1045. MOVE.L d0,@RESULT
  1046. end;
  1047. end;
  1048. function GetMsg(port : pMsgPort): pMessage;
  1049. begin
  1050. asm
  1051. MOVE.L A6,-(A7)
  1052. MOVE.L port,a0
  1053. MOVE.L _ExecBase,A6
  1054. JSR -372(A6)
  1055. MOVE.L (A7)+,A6
  1056. MOVE.L d0,@RESULT
  1057. end;
  1058. end;
  1059. procedure InitCode(startClass, version : ULONG);
  1060. begin
  1061. asm
  1062. MOVE.L A6,-(A7)
  1063. MOVE.L startClass,d0
  1064. MOVE.L version,d1
  1065. MOVE.L _ExecBase,A6
  1066. JSR -72(A6)
  1067. MOVE.L (A7)+,A6
  1068. end;
  1069. end;
  1070. procedure InitResident(resident : pResident;
  1071. segList : ULONG);
  1072. begin
  1073. asm
  1074. MOVE.L A6,-(A7)
  1075. MOVE.L resident,a1
  1076. MOVE.L seglist,d1
  1077. MOVE.L _ExecBase,A6
  1078. JSR -102(A6)
  1079. MOVE.L (A7)+,A6
  1080. end;
  1081. end;
  1082. procedure InitSemaphore(sigsem : pSignalSemaphore);
  1083. begin
  1084. asm
  1085. MOVE.L A6,-(A7)
  1086. MOVE.L sigsem,a0
  1087. MOVE.L _ExecBase,A6
  1088. JSR -558(A6)
  1089. MOVE.L (A7)+,A6
  1090. end;
  1091. end;
  1092. procedure InitStruct(table, memory : Pointer;
  1093. size : ULONG);
  1094. begin
  1095. asm
  1096. MOVEM.L a2/a6,-(A7)
  1097. MOVE.L table,a1
  1098. MOVE.L memory,a2
  1099. MOVE.L size,d0
  1100. MOVE.L _ExecBase,A6
  1101. JSR -78(A6)
  1102. MOVEM.L (A7)+,a2/a6
  1103. end;
  1104. end;
  1105. procedure Insert(list : pList;
  1106. node, listNode : pNode);
  1107. begin
  1108. asm
  1109. MOVEM.L a2/a6,-(A7)
  1110. MOVE.L list,a0
  1111. MOVE.L node,a1
  1112. MOVE.L listNode,a2
  1113. MOVE.L _ExecBase,A6
  1114. JSR -234(A6)
  1115. MOVEM.L (A7)+,a2/a6
  1116. end;
  1117. end;
  1118. procedure MakeFunctions(target, functionarray : Pointer ;
  1119. dispbase : ULONG);
  1120. begin
  1121. asm
  1122. MOVEM.L a2/a6,-(A7)
  1123. MOVE.L target,a0
  1124. MOVE.L functionarray,a1
  1125. MOVE.L dispbase,a2
  1126. MOVE.L _ExecBase,A6
  1127. JSR -90(A6)
  1128. MOVEM.L (A7)+,a2/a6
  1129. end;
  1130. end;
  1131. function MakeLibrary(vec, struct, init : Pointer;
  1132. dSize : ULONG ;
  1133. segList : Pointer) : pLibrary;
  1134. begin
  1135. asm
  1136. MOVEM.L a2/a6,-(A7)
  1137. MOVE.L vec,a0
  1138. MOVE.L struct,a1
  1139. MOVE.L init,a2
  1140. MOVE.L dSize,d0
  1141. MOVE.L seglist,d1
  1142. MOVE.L _ExecBase,A6
  1143. JSR -84(A6)
  1144. MOVEM.L (A7)+,a2/a6
  1145. MOVE.L d0,@RESULT
  1146. end;
  1147. end;
  1148. function ObtainQuickVector(interruptCode : Pointer) : ULONG;
  1149. begin
  1150. asm
  1151. MOVE.L A6,-(A7)
  1152. MOVE.L interruptCode,a0
  1153. MOVE.L _ExecBase,A6
  1154. JSR -786(A6)
  1155. MOVE.L (A7)+,A6
  1156. MOVE.L d0,@RESULT
  1157. end;
  1158. end;
  1159. procedure ObtainSemaphore(sigsem : pSignalSemaphore);
  1160. begin
  1161. asm
  1162. MOVE.L A6,-(A7)
  1163. MOVE.L sigsem,a0
  1164. MOVE.L _ExecBase,A6
  1165. JSR -564(A6)
  1166. MOVE.L (A7)+,A6
  1167. end;
  1168. end;
  1169. procedure ObtainSemaphoreList(semlist : pList);
  1170. begin
  1171. asm
  1172. MOVE.L A6,-(A7)
  1173. MOVE.L semlist,a0
  1174. MOVE.L _ExecBase,A6
  1175. JSR -582(A6)
  1176. MOVE.L (A7)+,A6
  1177. end;
  1178. end;
  1179. procedure ObtainSemaphoreShared(sigsem : pSignalSemaphore);
  1180. begin
  1181. asm
  1182. MOVE.L A6,-(A7)
  1183. MOVE.L sigsem,a0
  1184. MOVE.L _ExecBase,A6
  1185. JSR -678(A6)
  1186. MOVE.L (A7)+,A6
  1187. end;
  1188. end;
  1189. function OldOpenLibrary(lib : STRPTR): pLibrary;
  1190. begin
  1191. asm
  1192. MOVE.L A6,-(A7)
  1193. MOVE.L lib,a1
  1194. MOVE.L _ExecBase,A6
  1195. JSR -408(A6)
  1196. MOVE.L (A7)+,A6
  1197. MOVE.L d0,@RESULT
  1198. end;
  1199. end;
  1200. function OpenDevice(devName : STRPTR;
  1201. unitNumber : ULONG;
  1202. io : pIORequest; flags : ULONG) : Shortint;
  1203. begin
  1204. asm
  1205. MOVE.L A6,-(A7)
  1206. MOVE.L devName,a0
  1207. MOVE.L unitNumber,d0
  1208. MOVE.L io,a1
  1209. MOVE.L flags,d1
  1210. MOVE.L _ExecBase,A6
  1211. JSR -444(A6)
  1212. MOVE.L (A7)+,A6
  1213. MOVE.B d0,@RESULT
  1214. end;
  1215. end;
  1216. function OpenLibrary(libName : STRPTR;
  1217. version : Integer) : pLibrary;
  1218. begin
  1219. asm
  1220. MOVE.L A6,-(A7)
  1221. MOVE.L libName,a1
  1222. MOVE.L version,d0
  1223. MOVE.L _ExecBase,A6
  1224. JSR -552(A6)
  1225. MOVE.L (A7)+,A6
  1226. MOVE.L d0,@RESULT
  1227. end;
  1228. end;
  1229. function OpenResource(resname : STRPTR): Pointer;
  1230. begin
  1231. asm
  1232. MOVE.L A6,-(A7)
  1233. MOVE.L resname,a1
  1234. MOVE.L _ExecBase,A6
  1235. JSR -498(A6)
  1236. MOVE.L (A7)+,A6
  1237. MOVE.L d0,@RESULT
  1238. end;
  1239. end;
  1240. procedure Permit;
  1241. begin
  1242. asm
  1243. MOVE.L A6,-(A7)
  1244. MOVE.L _ExecBase,A6
  1245. JSR -138(A6)
  1246. MOVE.L (A7)+,A6
  1247. end;
  1248. end;
  1249. function Procure(sem : pSemaphore;
  1250. bid : pMessage) : Boolean;
  1251. begin
  1252. asm
  1253. MOVE.L A6,-(A7)
  1254. MOVE.L sem,a0
  1255. MOVE.L bid,a1
  1256. MOVE.L _ExecBase,A6
  1257. JSR -540(A6)
  1258. MOVE.L (A7)+,A6
  1259. TST.W D0
  1260. BEQ.B @end
  1261. MOVEQ #1,D0
  1262. @end: MOVE.B D0,@RESULT
  1263. end;
  1264. end;
  1265. procedure PutMsg(port : pMsgPort;
  1266. mess : pMessage);
  1267. begin
  1268. asm
  1269. MOVE.L A6,-(A7)
  1270. MOVE.L port,a0
  1271. MOVE.L mess,a1
  1272. MOVE.L _ExecBase,A6
  1273. JSR -366(A6)
  1274. MOVE.L (A7)+,A6
  1275. end;
  1276. end;
  1277. procedure RawDoFmt(Form : STRPTR;
  1278. data, putChProc, putChData : Pointer);
  1279. begin
  1280. asm
  1281. MOVEM.L a2/a3/a6,-(A7)
  1282. MOVE.L Form,a0
  1283. MOVE.L data,a1
  1284. MOVE.L putChProc,a2
  1285. MOVE.L putChData,a3
  1286. MOVE.L _ExecBase,A6
  1287. JSR -522(A6)
  1288. MOVEM.L (A7)+,a2/a3/a6
  1289. end;
  1290. end;
  1291. procedure ReleaseSemaphore(sigsem : pSignalSemaphore);
  1292. begin
  1293. asm
  1294. MOVE.L A6,-(A7)
  1295. MOVE.L sigsem,a0
  1296. MOVE.L _ExecBase,A6
  1297. JSR -570(A6)
  1298. MOVE.L (A7)+,A6
  1299. end;
  1300. end;
  1301. procedure ReleaseSemaphoreList(siglist : pList);
  1302. begin
  1303. asm
  1304. MOVE.L A6,-(A7)
  1305. MOVE.L siglist,a0
  1306. MOVE.L _ExecBase,A6
  1307. JSR -588(A6)
  1308. MOVE.L (A7)+,A6
  1309. end;
  1310. end;
  1311. procedure RemDevice(device : pDevice);
  1312. begin
  1313. asm
  1314. MOVE.L A6,-(A7)
  1315. MOVE.L device,a1
  1316. MOVE.L _ExecBase,A6
  1317. JSR -438(A6)
  1318. MOVE.L (A7)+,A6
  1319. end;
  1320. end;
  1321. function RemHead(list : pList) : pNode;
  1322. begin
  1323. asm
  1324. MOVE.L A6,-(A7)
  1325. MOVE.L list,a0
  1326. MOVE.L _ExecBase,A6
  1327. JSR -258(A6)
  1328. MOVE.L (A7)+,A6
  1329. MOVE.L d0,@RESULT
  1330. end;
  1331. end;
  1332. procedure RemIntServer(intNum : Longint;
  1333. Int : pInterrupt);
  1334. begin
  1335. asm
  1336. MOVE.L A6,-(A7)
  1337. MOVE.L intNum,d0
  1338. MOVE.L Int,a1
  1339. MOVE.L _ExecBase,A6
  1340. JSR -174(A6)
  1341. MOVE.L (A7)+,A6
  1342. end;
  1343. end;
  1344. procedure RemLibrary(lib : pLibrary);
  1345. begin
  1346. asm
  1347. MOVE.L A6,-(A7)
  1348. MOVE.L lib,a1
  1349. MOVE.L _ExecBase,A6
  1350. JSR -402(A6)
  1351. MOVE.L (A7)+,A6
  1352. end;
  1353. end;
  1354. procedure RemMemHandler(memhand : pInterrupt);
  1355. begin
  1356. asm
  1357. MOVE.L A6,-(A7)
  1358. MOVE.L memhand,a1
  1359. MOVE.L _ExecBase,A6
  1360. JSR -780(A6)
  1361. MOVE.L (A7)+,A6
  1362. end;
  1363. end;
  1364. procedure Remove(node : pNode);
  1365. begin
  1366. asm
  1367. MOVE.L A6,-(A7)
  1368. MOVE.L node,a1
  1369. MOVE.L _ExecBase,A6
  1370. JSR -252(A6)
  1371. MOVE.L (A7)+,A6
  1372. end;
  1373. end;
  1374. procedure RemPort(port : pMsgPort);
  1375. begin
  1376. asm
  1377. MOVE.L A6,-(A7)
  1378. MOVE.L port,a1
  1379. MOVE.L _ExecBase,A6
  1380. JSR -360(A6)
  1381. MOVE.L (A7)+,A6
  1382. end;
  1383. end;
  1384. procedure RemResource(resname : Pointer);
  1385. begin
  1386. asm
  1387. MOVE.L A6,-(A7)
  1388. MOVE.L resname,a1
  1389. MOVE.L _ExecBase,A6
  1390. JSR -492(A6)
  1391. MOVE.L (A7)+,A6
  1392. end;
  1393. end;
  1394. procedure RemSemaphore(sigsem : pSignalSemaphore);
  1395. begin
  1396. asm
  1397. MOVE.L A6,-(A7)
  1398. MOVE.L sigsem,a1
  1399. MOVE.L _ExecBase,A6
  1400. JSR -606(A6)
  1401. MOVE.L (A7)+,A6
  1402. end;
  1403. end;
  1404. function RemTail(list : pList) : pNode;
  1405. begin
  1406. asm
  1407. MOVE.L A6,-(A7)
  1408. MOVE.L list,a0
  1409. MOVE.L _ExecBase,A6
  1410. JSR -264(A6)
  1411. MOVE.L (A7)+,A6
  1412. MOVE.L d0,@RESULT
  1413. end;
  1414. end;
  1415. procedure RemTask(task : pTask);
  1416. begin
  1417. asm
  1418. MOVE.L A6,-(A7)
  1419. MOVE.L task,a1
  1420. MOVE.L _ExecBase,A6
  1421. JSR -288(A6)
  1422. MOVE.L (A7)+,A6
  1423. end;
  1424. end;
  1425. procedure ReplyMsg(mess : pMessage);
  1426. begin
  1427. asm
  1428. MOVE.L A6,-(A7)
  1429. MOVE.L mess,a1
  1430. MOVE.L _ExecBase,A6
  1431. JSR -378(A6)
  1432. MOVE.L (A7)+,A6
  1433. end;
  1434. end;
  1435. procedure SendIO(io : pIORequest);
  1436. begin
  1437. asm
  1438. MOVE.L A6,-(A7)
  1439. MOVE.L io,a1
  1440. MOVE.L _ExecBase,A6
  1441. JSR -462(A6)
  1442. MOVE.L (A7)+,A6
  1443. end;
  1444. end;
  1445. function SetExcept(newSignals, signalMask : ULONG) : ULONG;
  1446. begin
  1447. asm
  1448. MOVE.L A6,-(A7)
  1449. MOVE.L newSignals,d0
  1450. MOVE.L signalMask,d1
  1451. MOVE.L _ExecBase,A6
  1452. JSR -312(A6)
  1453. MOVE.L (A7)+,A6
  1454. MOVE.L d0,@RESULT
  1455. end;
  1456. end;
  1457. function SetFunction(lib : pLibrary;
  1458. funcOff : LONG;
  1459. funcEntry : Pointer) : Pointer;
  1460. begin
  1461. asm
  1462. MOVE.L A6,-(A7)
  1463. MOVE.L lib,a1
  1464. MOVE.L funcOff,a0
  1465. MOVE.L funcEntry,d0
  1466. MOVE.L _ExecBase,A6
  1467. JSR -420(A6)
  1468. MOVE.L (A7)+,A6
  1469. MOVE.L d0,@RESULT
  1470. end;
  1471. end;
  1472. function SetIntVector(intNum : Longint;
  1473. Int : pInterrupt) : pInterrupt;
  1474. begin
  1475. asm
  1476. MOVE.L A6,-(A7)
  1477. MOVE.L intNum,d0
  1478. MOVE.L Int,a1
  1479. MOVE.L _ExecBase,A6
  1480. JSR -162(A6)
  1481. MOVE.L (A7)+,A6
  1482. MOVE.L d0,@RESULT
  1483. end;
  1484. end;
  1485. function SetSignal(newSignals, signalMask : ULONG) : ULONG;
  1486. begin
  1487. asm
  1488. MOVE.L A6,-(A7)
  1489. MOVE.L newSignals,d0
  1490. MOVE.L signalMask,d1
  1491. MOVE.L _ExecBase,A6
  1492. JSR -306(A6)
  1493. MOVE.L (A7)+,A6
  1494. MOVE.L d0,@RESULT
  1495. end;
  1496. end;
  1497. function SetSR(newSR, mask : ULONG) : ULONG;
  1498. begin
  1499. asm
  1500. MOVE.L A6,-(A7)
  1501. MOVE.L newSR,d0
  1502. MOVE.L mask,d1
  1503. MOVE.L _ExecBase,A6
  1504. JSR -144(A6)
  1505. MOVE.L (A7)+,A6
  1506. MOVE.L d0,@RESULT
  1507. end;
  1508. end;
  1509. function SetTaskPri(task : pTask;
  1510. priority : Longint) : Shortint;
  1511. begin
  1512. asm
  1513. MOVE.L A6,-(A7)
  1514. MOVE.L task,a1
  1515. MOVE.L priority,d0
  1516. MOVE.L _ExecBase,A6
  1517. JSR -300(A6)
  1518. MOVE.L (A7)+,A6
  1519. MOVE.B d0,@RESULT
  1520. end;
  1521. end;
  1522. procedure Signal(task : pTask; signals : ULONG);
  1523. begin
  1524. asm
  1525. MOVE.L A6,-(A7)
  1526. MOVE.L task,a1
  1527. MOVE.L signals,d0
  1528. MOVE.L _ExecBase,A6
  1529. JSR -324(A6)
  1530. MOVE.L (A7)+,A6
  1531. end;
  1532. end;
  1533. procedure StackSwap( StackSwapRecord : Pointer );
  1534. begin
  1535. asm
  1536. MOVE.L A6,-(A7)
  1537. MOVE.L StackSwapRecord,a0
  1538. MOVE.L _ExecBase,A6
  1539. JSR -732(A6)
  1540. MOVE.L (A7)+,A6
  1541. end;
  1542. end;
  1543. procedure SumKickData;
  1544. begin
  1545. asm
  1546. MOVE.L A6,-(A7)
  1547. MOVE.L _ExecBase,A6
  1548. JSR -612(A6)
  1549. MOVE.L (A7)+,A6
  1550. end;
  1551. end;
  1552. procedure SumLibrary(lib : pLibrary);
  1553. begin
  1554. asm
  1555. MOVE.L A6,-(A7)
  1556. MOVE.L lib,a1
  1557. MOVE.L _ExecBase,A6
  1558. JSR -426(A6)
  1559. MOVE.L (A7)+,A6
  1560. end;
  1561. end;
  1562. function SuperState : Pointer;
  1563. begin
  1564. asm
  1565. MOVE.L A6,-(A7)
  1566. JSR -150(A6)
  1567. MOVE.L (A7)+,A6
  1568. MOVE.L d0,@RESULT
  1569. end;
  1570. end;
  1571. function Supervisor(thefunc : Pointer): ULONG;
  1572. begin
  1573. asm
  1574. MOVEM.L a5/a6,-(A7)
  1575. MOVE.L _ExecBase,A6
  1576. MOVE.L thefunc,a5
  1577. MOVE.L _ExecBase,A6
  1578. JSR -30(A6)
  1579. MOVEM.L (A7)+,a5/a6
  1580. MOVE.L d0,@RESULT
  1581. end;
  1582. end;
  1583. function TypeOfMem(mem : Pointer) : ULONG;
  1584. begin
  1585. asm
  1586. MOVE.L A6,-(A7)
  1587. MOVE.L mem,a1
  1588. MOVE.L _ExecBase,A6
  1589. JSR -534(A6)
  1590. MOVE.L (A7)+,A6
  1591. MOVE.L d0,@RESULT
  1592. end;
  1593. end;
  1594. procedure UserState(s : Pointer);
  1595. begin
  1596. asm
  1597. MOVE.L A6,-(A7)
  1598. MOVE.L s,d0
  1599. MOVE.L _ExecBase,A6
  1600. JSR -156(A6)
  1601. MOVE.L (A7)+,A6
  1602. end;
  1603. end;
  1604. procedure Vacate(sigsem : pSignalSemaphore;
  1605. bidMsg : pSemaphoreMessage);
  1606. begin
  1607. asm
  1608. MOVE.L A6,-(A7)
  1609. MOVE.L sigsem,a0
  1610. MOVE.L bidMsg,a1
  1611. MOVE.L _ExecBase,A6
  1612. JSR -546(A6)
  1613. MOVE.L (A7)+,A6
  1614. end;
  1615. end;
  1616. function Wait(signals : ULONG) : ULONG;
  1617. begin
  1618. asm
  1619. MOVE.L A6,-(A7)
  1620. MOVE.L signals,d0
  1621. MOVE.L _ExecBase,A6
  1622. JSR -318(A6)
  1623. MOVE.L (A7)+,A6
  1624. MOVE.L d0,@RESULT
  1625. end;
  1626. end;
  1627. function WaitIO(io : pIORequest) : Shortint;
  1628. begin
  1629. asm
  1630. MOVE.L A6,-(A7)
  1631. MOVE.L io,a1
  1632. MOVE.L _ExecBase,A6
  1633. JSR -474(A6)
  1634. MOVE.L (A7)+,A6
  1635. MOVE.B d0,@RESULT
  1636. end;
  1637. end;
  1638. function WaitPort(port : pMsgPort): pMessage;
  1639. begin
  1640. asm
  1641. MOVE.L A6,-(A7)
  1642. MOVE.L port,a0
  1643. MOVE.L _ExecBase,A6
  1644. JSR -384(A6)
  1645. MOVE.L (A7)+,A6
  1646. MOVE.L d0,@RESULT
  1647. end;
  1648. end;
  1649. end.
  1650. {
  1651. $Log$
  1652. Revision 1.2 1998-07-09 17:39:40 carl
  1653. * several bugfixes by Nils Sjoholm
  1654. Revision 1.1.1.1 1998/03/25 11:18:47 root
  1655. * Restored version
  1656. Revision 1.3 1998/01/26 12:02:42 michael
  1657. + Added log at the end
  1658. Working file: rtl/amiga/exec.pp
  1659. description:
  1660. ----------------------------
  1661. revision 1.2
  1662. date: 1997/12/14 19:02:47; author: carl; state: Exp; lines: +11 -10
  1663. * small bugfixes
  1664. ----------------------------
  1665. revision 1.1
  1666. date: 1997/12/10 13:48:45; author: carl; state: Exp;
  1667. + exec dynamic library definitions and calls.
  1668. =============================================================================
  1669. }