home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / m2posx14 / include / oscalls.m2h next >
Encoding:
Text File  |  1994-05-14  |  54.8 KB  |  2,182 lines

  1. /* Definitionen fuer "GEMDOS","BIOS","XBIOS"-``Inline''-Betriebssystemaufrufe.
  2.  *
  3.  * Die Datei ist mit: #include "oscalls.m2h"  noch vor dem eigentlichen
  4.  * Programmcode als letzte ``Importdatei'' in die M2-Datei einzuladen.
  5.  * Die Datei kann sowohl im aktuellen Verzeichnis zusammen mit den M2-Dateien
  6.  * stehen, als auch im Verzeichnis, in dem der Praeprozessor nach Include-
  7.  * Dateien sucht; falls der GNU-Praeprozessor (gcc-cpp) benutzt wird, muss
  8.  * hierfuer die Environmentvariable GNUINC gesetzt werden, z.B.:
  9.  *
  10.  *   setenv GNUINC f:\usr\include\m2
  11.  *
  12.  * Die Argumente der Makros sollten nur einfache (nicht Teil eines RECORDs
  13.  * oder eines ARRAYs), lokale (vor allem keine VAR-Parameter) Variablen sein.
  14.  *
  15.  * Es wird nur das Datenregister D0 fuer die Parameteruebergabe benoetigt,
  16.  * das TOS selbst veraendert die Register D0-D2 und A0-A2.
  17.  */
  18.  
  19. /* "GEM"-Funktionsnummern in D0 */
  20. #define VDIOpCode 115
  21. #define AESOpCode 200
  22. #define AESApplYield 201 /* siehe c't 5'90, S.203 */
  23.  
  24. /* "XBIOS"-Funktionsnummern */
  25. #define INITMOUS 0
  26. #define SSBRK 1
  27. #define PHYSBASE 2
  28. #define LOGBASE 3
  29. #define GETREZ 4
  30. #define SETSCREEN 5
  31. #define SETPALETTE 6
  32. #define SETCOLOR 7
  33. #define FLOPRD 8
  34. #define FLOPWR 9
  35. #define FLOPFMT 10
  36. #define MIDIWS 12
  37. #define MFPINT 13
  38. #define IOREC 14
  39. #define RSCONF 15
  40. #define KEYTBL 16
  41. #define RANDOM 17
  42. #define PROTOBT 18
  43. #define FLOPVER 19
  44. #define SCRDMP 20
  45. #define CURSCONF 21
  46. #define SETTIME 22
  47. #define GETTIME 23
  48. #define BIOSKEYS 24
  49. #define IKBDWS 25
  50. #define JDISINT 26
  51. #define JENABINT 27
  52. #define GIACCESS 28
  53. #define OFFGIBIT 29
  54. #define ONGIBIT 30
  55. #define XBTIMER 31
  56. #define DOSOUND 32
  57. #define SETPRT 33
  58. #define KBDVBASE 34
  59. #define KBRATE 35
  60. #define PRTBLK 36
  61. #define VSYNC 37
  62. #define SUPEXEC 38
  63. #define PUNTAES 39
  64. #define FLOPRATE 41 /* ab TOS 1.04 */
  65. #define DMAREAD 42 /* TT */
  66. #define DMAWRITE 43 /* TT */
  67. #define BCONMAP 44 /* vorhanden, falls Bconmap(0) = 0 */
  68. #define NVMACCESS 46 /* TT */
  69. #define METAINIT 48 /* Meta-DOS, Funktionen 49 bis 63 reserviert */
  70. #define BLITMODE 64 /* ab TOS 1.02 */
  71. #define ESETSHIFT 80 /* TT */
  72. #define EGETSHIFT 81 /* TT */
  73. #define ESETBANK 82 /* TT */
  74. #define ESETCOLOR 83 /* TT */
  75. #define ESETPALETTE 84 /* TT */
  76. #define EGETPALETTE 85 /* TT */
  77. #define ESETGRAY 86 /* TT */
  78. #define ESETSMEAR 87 /* TT */
  79.  
  80. /* "Falcon"-Erweiterungen -- ohne Gewaehr! */
  81. #define VSETMODE 88
  82. #define VGETMONITOR 89
  83. #define VSETSYNC 90
  84. #define VGETSIZE 91
  85. #define VSETRGB 93
  86. #define VGETRGB 94
  87. #define DSP_DOBLOCK 96
  88. #define DSP_BLKHANDSHAKE 97
  89. #define DSP_BLKUNPACKED 98
  90. #define DSP_INSTREAM 99
  91. #define DSP_OUTSTREAM 100
  92. #define DSP_IOSTREAM 101
  93. #define DSP_REMOVEINTERRUPTS 102
  94. #define DSP_GETWORDSIZE 103
  95. #define DSP_LOCK 104
  96. #define DSP_UNLOCK 105
  97. #define DSP_AVAILABLE 106
  98. #define DSP_RESERVE 107
  99. #define DSP_LOADPROG 108
  100. #define DSP_EXECPROG 109
  101. #define DSP_EXECBOOT 110
  102. #define DSP_LODTOBINARY 111
  103. #define DSP_TRIGGERHC 112
  104. #define DSP_REQUESTUNIQUEABILITY 113
  105. #define DSP_GETPROGABILITY 114
  106. #define DSP_FLUSHSUBROUTINES 115
  107. #define DSP_LOADSUBROUTINE 116
  108. #define DSP_INQSUBRABILITY 117
  109. #define DSP_RUNSUBROUTINE 118
  110. #define DSP_HF0 119
  111. #define DSP_HF1 120
  112. #define DSP_HF2 121
  113. #define DSP_HF3 122
  114. #define DSP_BLKWORDS 123
  115. #define DSP_BLKBYTES 124
  116. #define DSP_HSTAT 125
  117. #define DSP_SETVECTORS 126
  118. #define DSP_MULTBLOCKS 127
  119. #define LOCKSND 128
  120. #define UNLOCKSND 129
  121. #define SOUNDCMD 130
  122. #define SETBUFFER 131
  123. #define SETMODE 132
  124. #define SETTRACKS 133
  125. #define SETMONTRACKS 134
  126. #define SETINTERRUPT 135
  127. #define BUFFOPER 136
  128. #define DSPTRISTATE 137
  129. #define GPIO 138
  130. #define DEVCONNECT 139
  131. #define SNDSTATUS 140
  132. #define BUFFPTR 141
  133. #define VSETMASK 150
  134.  
  135. /* "BIOS"-Funktionsnummern */
  136. #define GETMPB 0
  137. #define BCONSTAT 1
  138. #define BCONIN 2
  139. #define BCONOUT 3
  140. #define RWABS 4
  141. #define SETEXC 5
  142. #define TICKCAL 6
  143. #define GETBPB 7
  144. #define BCOSTAT 8
  145. #define MEDIACH 9
  146. #define DRVMAP 10
  147. #define KBSHIFT 11
  148.  
  149. /* "GEMDOS"-Funktionsnummern */
  150. #define PTERM0 0
  151. #define CCONIN 1
  152. #define CCONOUT 2
  153. #define CAUXIN 3
  154. #define CAUXOUT 4
  155. #define CPRNOUT 5
  156. #define CRAWIO 6
  157. #define CRAWCIN 7
  158. #define CNECIN 8
  159. #define CCONWS 9
  160. #define CCONRS 10
  161. #define CCONIS 11
  162. #define DSETDRV 14
  163. #define CCONOS 16
  164. #define CPRNOS 17
  165. #define CAUXIS 18
  166. #define CAUXOS 19
  167. #define MADDALT 20 /* ab GEMDOS 0.19 */
  168. #define SREALLOC 21
  169. #define DGETDRV 25
  170. #define FSETDTA 26
  171. #define SUPER 32
  172. #define TGETDATE 42
  173. #define TSETDATE 43
  174. #define TGETTIME 44
  175. #define TSETTIME 45
  176. #define FGETDTA 47
  177. #define SVERSION 48
  178. #define PTERMRES 49
  179. #define DFREE 54
  180. #define DCREATE 57
  181. #define DDELETE 58
  182. #define DSETPATH 59
  183. #define FCREATE 60
  184. #define FOPEN 61
  185. #define FCLOSE 62
  186. #define FREAD 63
  187. #define FWRITE 64
  188. #define FDELETE 65
  189. #define FSEEK 66
  190. #define FATTRIB 67
  191. #define MXALLOC 68 /* ab GEMDOS 0.19 */
  192. #define FDUP 69
  193. #define FFORCE 70
  194. #define DGETPATH 71
  195. #define MALLOC 72
  196. #define MFREE 73
  197. #define MSHRINK 74
  198. #define PEXEC 75
  199. #define PTERM 76
  200. #define FSFIRST 78
  201. #define FSNEXT 79
  202. #define FRENAME 86
  203. #define FDATIME 87
  204. #define FLOCK 92 /* nur mit Netzwerk oder MiNT */
  205.  
  206. /* MultiGEM-Erweiterung */
  207. #define MFORK 112
  208.  
  209. /* Mag!X-Erweiterung */
  210. #define SCONFIG 51
  211.  
  212. /* MiNT-Erweiterungen */
  213. #define SYIELD 255
  214. #define FPIPE 256
  215. #define FCNTL 260
  216. #define FINSTAT 261
  217. #define FOUTSTAT 262
  218. #define FGETCHAR 263
  219. #define FPUTCHAR 264
  220. #define PWAIT 265
  221. #define PNICE 266
  222. #define PGETPID 267
  223. #define PGETPPID 268
  224. #define PGETPGRP 269
  225. #define PSETPGRP 270
  226. #define PGETUID 271
  227. #define PSETUID 272
  228. #define PKILL 273
  229. #define PSIGNAL 274
  230. #define PVFORK 275
  231. #define PGETGID 276
  232. #define PSETGID 277
  233. #define PSIGBLOCK 278
  234. #define PSIGSETMASK 279
  235. #define PUSRVAL 280
  236. #define PDOMAIN 281
  237. #define PSIGRETURN 282
  238. #define PFORK 283
  239. #define PWAIT3 284
  240. #define FSELECT 285
  241. #define PRUSAGE 286
  242. #define PSETLIMIT 287
  243. #define TALARM 288
  244. #define PAUSE 289
  245. #define SYSCONF 290
  246. #define PSIGPENDING 291
  247. #define DPATHCONF 292
  248. #define PMSG 293
  249. #define FMIDIPIPE 294
  250. #define PRENICE 295
  251. #define DOPENDIR 296
  252. #define DREADDIR 297
  253. #define DREWINDDIR 298
  254. #define DCLOSEDIR 299
  255. #define FXATTR 300
  256. #define FLINK 301
  257. #define FSYMLINK 302
  258. #define FREADLINK 303
  259. #define DCNTL 304
  260. #define FCHOWN 305
  261. #define FCHMOD 306
  262. #define PUMASK 307
  263. #define PSEMAPHORE 308
  264. #define DLOCK 309
  265. #define PSIGPAUSE 310
  266. #define PSIGACTION 311
  267. #define PGETEUID 312
  268. #define PGETEGID 313
  269. #define PWAITPID 314
  270. #define DGETCWD 315
  271. #define SALERT 316
  272. #define TMALARM 317
  273.  
  274. /*===========================================================================*/
  275.  
  276. #ifdef MM2
  277. #define XTRAP 14 /* XBIOS */
  278. #define BTRAP 13 /* BIOS */
  279. #define DTRAP 1 /* GEMDOS */
  280. #define GTRAP 2 /* AES & VDI */
  281. #else
  282. #define XTRAP 4E4EH /* XBIOS */
  283. #define BTRAP 4E4DH /* BIOS */
  284. #define DTRAP 4E41H /* GEMDOS */
  285. #define GTRAP 4E42H /* AES & VDI */
  286.  
  287. #define ADDQ2 548FH /* ADDQ.l #2, sp */
  288. #define ADDQ4 588FH /* ADDQ.l #4, sp */
  289. #define ADDQ6 5C8FH /* ADDQ.l #6, sp */
  290. #define ADDQ8 508FH /* ADDQ.l #8, sp */
  291. #define LEA 4FEFH /* LEA <const>(sp), sp */
  292.  
  293. #define PSHW 3F00H /* MOVE.W D0, -(sp) */
  294. #define PSHL 2F00H /* MOVE.L D0, -(sp) */
  295. #define PSHC 3F3CH /* MOVE.W #<const>, -(sp) */
  296. #endif
  297.  
  298. /* Unter MiNT koennte man sich das Registerretten sparen, da MiNT lediglich
  299.  * die Register D0 und A0 veraendert (z.Z. wird auch A0 nicht veraendert,
  300.  * das muss aber nicht so bleiben!).
  301.  */
  302. #if (defined HM2)
  303. #  define SAVEREGS CODE(48E7H,2020H); /* movem.l D2/A2, -(sp) */
  304. #  define RESTOREREGS CODE(4CDFH,0404H); /* movem.l (sp)+, D2/A2 */
  305. #else
  306. #  define SAVEREGS
  307. #  define RESTOREREGS
  308. #endif
  309.  
  310. /*===========================================================================*/
  311.  
  312. #if (defined LPRM2) || (defined SPCM2)
  313. #undef CODE
  314.  
  315. PROCEDURE GEM0;CODE(GTRAP);(* Parameter in D0, D1 *)
  316.  
  317. PROCEDURE XBIOS0(f:WORD);CODE(XTRAP);
  318. PROCEDURE XBIOS1w(p1,f:WORD);CODE(XTRAP);
  319. PROCEDURE XBIOS2w(p2,p1,f:WORD);CODE(XTRAP);
  320. PROCEDURE XBIOS5w(p5,p4,p3,p2,p1,f:WORD);CODE(XTRAP);
  321. PROCEDURE XBIOS6w(p6,p5,p4,p3,p2,p1,f:WORD);CODE(XTRAP);
  322. PROCEDURE XBIOS1l(p1:LONGCARD;f:WORD);CODE(XTRAP);
  323. PROCEDURE XBIOS2l(p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  324. PROCEDURE XBIOS3l(p3,p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  325. PROCEDURE XBIOS4l(p4,p3,p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  326. PROCEDURE XBIOS6l(p6,p5,p4,p3,p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  327. PROCEDURE XBIOS1w1l(p2:LONGCARD;p1,f:WORD);CODE(XTRAP);
  328. PROCEDURE XBIOS1w2l(p3,p2:LONGCARD;p1,f:WORD);CODE(XTRAP);
  329. PROCEDURE XBIOS2w1l(p3:LONGCARD;p2,p1,f:WORD);CODE(XTRAP);
  330. PROCEDURE XBIOS3w1l(p4:LONGCARD;p3,p2,p1,f:WORD);CODE(XTRAP);
  331. PROCEDURE XBIOS1l1w1l(p3:LONGCARD;p2:WORD;p1:LONGCARD;f:WORD);CODE(XTRAP);
  332. PROCEDURE XBIOS1l1w1l1w(p4:WORD;p3:LONGCARD;p2:WORD;p1:LONGCARD;f:WORD);CODE(XTRAP);
  333. PROCEDURE XBIOS2l2w(p4,p3:WORD;p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  334. PROCEDURE XBIOS2l5w(p7,p6,p5,p4,p3:WORD;p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  335. PROCEDURE XBIOS2l5w1l1w(p9:WORD;p8:LONGCARD;p7,p6,p5,p4,p3:WORD;p2,p1:LONGCARD;f:WORD);CODE(XTRAP);
  336.  
  337. PROCEDURE BIOS0(f:WORD);CODE(BTRAP);
  338. PROCEDURE BIOS1w(p,f:WORD);CODE(BTRAP);
  339. PROCEDURE BIOS2w(p2,p1,f:WORD);CODE(BTRAP);
  340. PROCEDURE BIOS1w1l(p2:LONGCARD;p1,f:WORD);CODE(BTRAP);
  341. PROCEDURE BIOS1w1l3w1l(p6:LONGCARD;p5,p4,p3:WORD;p2:LONGCARD;p1,f:WORD);CODE(BTRAP);
  342. PROCEDURE BIOS1l(p:LONGCARD;f:WORD);CODE(BTRAP);
  343.  
  344. PROCEDURE GEMDOS0(f:WORD);CODE(DTRAP);
  345. PROCEDURE GEMDOS1w(p,f:WORD);CODE(DTRAP);
  346. PROCEDURE GEMDOS2w(p2,p1,f:WORD);CODE(DTRAP);
  347. PROCEDURE GEMDOS3w(p3,p2,p1,f:WORD);CODE(DTRAP);
  348. PROCEDURE GEMDOS1w1l(p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  349. PROCEDURE GEMDOS1w2l(p3,p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  350. PROCEDURE GEMDOS1w3l(p4,p3,p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  351. PROCEDURE GEMDOS2w1l(p3:LONGCARD;p2,p1,f:WORD);CODE(DTRAP);
  352. PROCEDURE GEMDOS2w2l(p4,p3:LONGCARD;p2,p1,f:WORD);CODE(DTRAP);
  353. PROCEDURE GEMDOS1w1l1w(p3:WORD;p2:LONGCARD;p1,f:WORD);CODE(DTRAP);
  354. PROCEDURE GEMDOS1l(p1:LONGCARD;f:WORD);CODE(DTRAP);
  355. PROCEDURE GEMDOS2l(p2,p1:LONGCARD;f:WORD);CODE(DTRAP);
  356. PROCEDURE GEMDOS1l1w(p2:WORD;p1:LONGCARD;f:WORD);CODE(DTRAP);
  357. PROCEDURE GEMDOS1l2w(p3,p2:WORD;p1:LONGCARD;f:WORD);CODE(DTRAP);
  358. PROCEDURE GEMDOS1l1w1l(p3:LONGCARD;p2:WORD;p1:LONGCARD;f:WORD);CODE(DTRAP);
  359. #define CODE INLINE
  360.  
  361. #ifdef __OSCALLS__
  362. /* Die Syntax mit den Punkten fuer optionale Parameter ist
  363.  * moeglicherweise GNU-CPP-spezifisch.
  364.  */
  365.   #define _INLINE(p...) /* Stackkorrektur kann entfallen */
  366. #else
  367.   #define _INLINE INLINE
  368. #endif
  369.  
  370. #define XCALL0(f)\
  371.  XBIOS0(f);_INLINE(ADDQ2)
  372. #define XCALL1w(f,p)\
  373.  XBIOS1w(p,f);_INLINE(ADDQ4)
  374. #define XCALL2w(f,p1,p2)\
  375.  XBIOS2w(p2,p1,f);_INLINE(ADDQ6)
  376. #define XCALL5w(f,p1,p2,p3,p4,p5)\
  377.  XBIOS5w(p5,p4,p3,p2,p1,f);_INLINE(LEA,12)
  378. #define XCALL6w(f,p1,p2,p3,p4,p5,p6)\
  379.  XBIOS6w(p6,p5,p4,p3,p2,p1,f);_INLINE(LEA,14)
  380. #define XCALL1w1l(f,p1,p2)\
  381.  XBIOS1w1l(p2,p1,f);_INLINE(ADDQ8)
  382. #define XCALL1w2l(f,p1,p2,p3)\
  383.  XBIOS1w2l(p3,p2,p1,f);_INLINE(LEA,12)
  384. #define XCALL2w1l(f,p1,p2,p3)\
  385.  XBIOS2w1l(p3,p2,p1,f);_INLINE(LEA,10)
  386. #define XCALL3w1l(f,p1,p2,p3,p4)\
  387.  XBIOS3w1l(p4,p3,p2,p1,f);_INLINE(LEA,12)
  388. #define XCALL1l(f,p)\
  389.  XBIOS1l(p,f);_INLINE(ADDQ6)
  390. #define XCALL2l(f,p1,p2)\
  391.  XBIOS2l(p2,p1,f);_INLINE(LEA,10)
  392. #define XCALL3l(f,p1,p2,p3)\
  393.  XBIOS3l(p3,p2,p1,f);_INLINE(LEA,14)
  394. #define XCALL4l(f,p1,p2,p3,p4)\
  395.  XBIOS4l(p4,p3,p2,p1,f);_INLINE(LEA,18)
  396. #define XCALL6l(f,p1,p2,p3,p4,p5,p6)\
  397.  XBIOS6l(p6,p5,p4,p3,p2,p1,f);_INLINE(LEA,26)
  398. #define XCALL1l1w1l(f,p1,p2,p3)\
  399.  XBIOS1l1w1l(p3,p2,p1,f);_INLINE(LEA,12)
  400. #define XCALL1l1w1l1w(f,p1,p2,p3,p4)\
  401.  XBIOS1l1w1l1w(p4,p3,p2,p1,f);_INLINE(LEA,14)
  402. #define XCALL2l2w(f,p1,p2,p3,p4)\
  403.  XBIOS2l2w(p4,p3,p2,p1,f);_INLINE(LEA,14)
  404. #define XCALL2l5w(f,p1,p2,p3,p4,p5,p6,p7)\
  405.  XBIOS2l5w(p7,p6,p5,p4,p3,p2,p1,f);_INLINE(LEA,20)
  406. #define XCALL2l5w1l1w(f,p1,p2,p3,p4,p5,p6,p7,p8,p9)\
  407.  XBIOS2l5w1l1w(p9,p8,p7,p6,p5,p4,p3,p2,p1,f);_INLINE(LEA,26)
  408.  
  409. #define BCALL0(f)\
  410.  BIOS0(f);_INLINE(ADDQ2)
  411. #define BCALL1w(f,p)\
  412.  BIOS1w(p,f);_INLINE(ADDQ4)
  413. #define BCALL2w(f,p1,p2)\
  414.  BIOS2w(p2,p1,f);_INLINE(ADDQ6)
  415. #define BCALL1w1l(f,p1,p2)\
  416.  BIOS1w1l(p2,p1,f);_INLINE(ADDQ8)
  417. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  418.  BIOS1w1l3w1l(p6,p5,p4,p3,p2,p1,f);_INLINE(LEA,18)
  419. #define BCALL1l(f,p)\
  420.  BIOS1l(p,f);_INLINE(ADDQ6)
  421.  
  422. #define DCALL0(f)\
  423.  GEMDOS0(f);_INLINE(ADDQ2)
  424. #define DCALL1w(f,p)\
  425.  GEMDOS1w(p,f);_INLINE(ADDQ4)
  426. #define DCALL2w(f,p1,p2)\
  427.  GEMDOS2w(p2,p1,f);_INLINE(ADDQ6)
  428. #define DCALL3w(f,p1,p2,p3)\
  429.  GEMDOS3w(p3,p2,p1,f);_INLINE(ADDQ8)
  430. #define DCALL1w1l(f,p1,p2)\
  431.  GEMDOS1w1l(p2,p1,f);_INLINE(ADDQ8)
  432. #define DCALL1w2l(f,p1,p2,p3)\
  433.  GEMDOS1w2l(p3,p2,p1,f);_INLINE(LEA,12)
  434. #define DCALL1w3l(f,p1,p2,p3,p4)\
  435.  GEMDOS1w3l(p4,p3,p2,p1,f);_INLINE(LEA,16)
  436. #define DCALL2w1l(f,p1,p2,p3)\
  437.  GEMDOS2w1l(p3,p2,p1,f);_INLINE(LEA,10)
  438. #define DCALL2w2l(f,p1,p2,p3,p4)\
  439.  GEMDOS2w2l(p4,p3,p2,p1,f);_INLINE(LEA,14)
  440. #define DCALL1w1l1w(f,p1,p2,p3)\
  441.  GEMDOS1w1l1w(p3,p2,p1,f);_INLINE(LEA,10)
  442. #define DCALL1l(f,p)\
  443.  GEMDOS1l(p,f);_INLINE(ADDQ6)
  444. #define DCALL2l(f,p1,p2)\
  445.  GEMDOS2l(p2,p1,f);_INLINE(LEA,10)
  446. #define DCALL1l1w(f,p1,p2)\
  447.  GEMDOS1l1w(p2,p1,f);_INLINE(ADDQ8)
  448. #define DCALL1l2w(f,p1,p2,p3)\
  449.  GEMDOS1l2w(p3,p2,p1,f);_INLINE(LEA,10)
  450. #define DCALL1l1w1l(f,p1,p2,p3)\
  451.  GEMDOS1l1w1l(p3,p2,p1,f);_INLINE(LEA,12)
  452.  
  453. #elif (defined TDIM2)
  454.  
  455. #ifdef __OSCALLS__
  456.   #define _BCODE(p...) CODE(BTRAP)
  457.   #define _XCODE(p...) CODE(XTRAP)
  458.   #define _DCODE(p...) CODE(DTRAP)
  459.   #define _GCODE(p...) CODE(GTRAP)
  460. #else
  461.   #define _BCODE CODE
  462.   #define _XCODE CODE
  463.   #define _DCODE CODE
  464.   #define _GCODE CODE
  465. #endif
  466.  
  467. #define XCALL0(f)\
  468.  PUSH(f);_XCODE(XTRAP,ADDQ2)
  469. #define XCALL1w(f,p)\
  470.  PUSH(CARDINAL(p));PUSH(CARDINAL(f));_XCODE(XTRAP,ADDQ4)
  471. #define XCALL2w(f,p1,p2)\
  472.  PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_XCODE(XTRAP,ADDQ6)
  473. #define XCALL5w(f,p1,p2,p3,p4,p5)\
  474.  PUSH(CARDINAL(p5));PUSH(CARDINAL(p4));PUSH(CARDINAL(p3));\
  475. PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,12)
  476. #define XCALL6w(f,p1,p2,p3,p4,p5,p6)\
  477.  PUSH(CARDINAL(p6));PUSH(CARDINAL(p5));PUSH(CARDINAL(p4));PUSH(CARDINAL(p3));\
  478. PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,14)
  479. #define XCALL1w1l(f,p1,p2)\
  480.  PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_XCODE(XTRAP,ADDQ8)
  481. #define XCALL1w2l(f,p1,p2,p3)\
  482.  PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  483. _XCODE(XTRAP,LEA,12)
  484. #define XCALL2w1l(f,p1,p2,p3)\
  485.  PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  486. _XCODE(XTRAP,LEA,10)
  487. #define XCALL3w1l(f,p1,p2,p3,p4)\
  488.  PUSH(LONGCARD(p4));PUSH(CARDINAL(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));\
  489. PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,12)
  490. #define XCALL1l(f,p)\
  491.  PUSH(LONGCARD(p));PUSH(CARDINAL(f));_XCODE(XTRAP,ADDQ6)
  492. #define XCALL2l(f,p1,p2)\
  493.  PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,10)
  494. #define XCALL3l(f,p1,p2,p3)\
  495.  PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));\
  496. _XCODE(XTRAP,LEA,14)
  497. #define XCALL4l(f,p1,p2,p3,p4)\
  498.  PUSH(LONGCARD(p4));PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));\
  499. PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,18)
  500. #define XCALL6l(f,p1,p2,p3,p4,p5,p6)\
  501.  PUSH(LONGCARD(p6));PUSH(LONGCARD(p5));PUSH(LONGCARD(p4));PUSH(LONGCARD(p3));\
  502. PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));PUSH(LONGCARD(f));_XCODE(XTRAP,LEA,26)
  503. #define XCALL1l1w1l(f,p1,p2,p3)\
  504.  PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));\
  505. PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,12)
  506. #define XCALL1l1w1l1w(f,p1,p2,p3,p4)\
  507.  PUSH(CARDINAL(p4));PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));\
  508. PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,14)
  509. #define XCALL2l2w(f,p1,p2,p3,p4)\
  510.  PUSH(CARDINAL(p4));PUSH(CARDINAL(p3));PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));\
  511. PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,14)
  512. #define XCALL2l5w(f,p1,p2,p3,p4,p5,p6,p7)\
  513.  PUSH(CARDINAL(p7));PUSH(CARDINAL(p6));PUSH(CARDINAL(p5));PUSH(CARDINAL(p4));\
  514. PUSH(CARDINAL(p3));PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));\
  515. _XCODE(XTRAP,LEA,20)
  516. #define XCALL2l5w1l1w(f,p1,p2,p3,p4,p5,p6,p7,p8,p9)\
  517.  PUSH(CARDINAL(p9));PUSH(LONGCARD(p8));PUSH(CARDINAL(p7));PUSH(CARDINAL(p6));\
  518. PUSH(CARDINAL(p5));PUSH(CARDINAL(p4));PUSH(CARDINAL(p3));PUSH(LONGCARD(p2));\
  519. PUSH(LONGCARD(p1));PUSH(CARDINAL(f));_XCODE(XTRAP,LEA,26)
  520.  
  521. #define BCALL0(f)\
  522.  PUSH(f);_BCODE(BTRAP,ADDQ2)
  523. #define BCALL1w(f,p)\
  524.  PUSH(CARDINAL(p));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ4)
  525. #define BCALL2w(f,p1,p2)\
  526.  PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ6)
  527. #define BCALL1w1l(f,p1,p2)\
  528.  PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ8)
  529. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  530.  PUSH(LONGCARD(p6));PUSH(CARDINAL(p5));PUSH(CARDINAL(p4));PUSH(CARDINAL(p3));\
  531. PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_BCODE(BTRAP,LEA,18)
  532. #define BCALL1l(f,p)\
  533.  PUSH(LONGCARD(p));PUSH(CARDINAL(f));_BCODE(BTRAP,ADDQ6)
  534.  
  535. #define DCALL0(f)\
  536.  PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ2)
  537. #define DCALL1w(f,p)\
  538.  PUSH(CARDINAL(p));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ4)
  539. #define DCALL2w(f,p1,p2)\
  540.  PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ6)
  541. #define DCALL3w(f,p1,p2,p3)\
  542.  PUSH(CARDINAL(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  543. _DCODE(DTRAP,ADDQ8)
  544. #define DCALL1w1l(f,p1,p2)\
  545.  PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ8)
  546. #define DCALL1w2l(f,p1,p2,p3)\
  547.  PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  548. _DCODE(DTRAP,LEA,12)
  549. #define DCALL1w3l(f,p1,p2,p3,p4)\
  550.  PUSH(LONGCARD(p4));PUSH(LONGCARD(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));\
  551. PUSH(CARDINAL(f));_DCODE(DTRAP,LEA,16)
  552. #define DCALL2w1l(f,p1,p2,p3)\
  553.  PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  554. _DCODE(DTRAP,LEA,10)
  555. #define DCALL2w2l(f,p1,p2,p3,p4)\
  556.  PUSH(LONGCARD(p4));PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(CARDINAL(p1));\
  557. PUSH(CARDINAL(f));_DCODE(DTRAP,LEA,14)
  558. #define DCALL1w1l1w(f,p1,p2,p3)\
  559.  PUSH(CARDINAL(p3));PUSH(LONGCARD(p2));PUSH(CARDINAL(p1));PUSH(CARDINAL(f));\
  560. _DCODE(DTRAP,LEA,10)
  561. #define DCALL1l(f,p)\
  562.  PUSH(LONGCARD(p));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ6)
  563. #define DCALL2l(f,p1,p2)\
  564.  PUSH(LONGCARD(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,LEA,10)
  565. #define DCALL1l1w(f,p1,p2)\
  566.  PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));_DCODE(DTRAP,ADDQ8)
  567. #define DCALL1l2w(f,p1,p2,p3)\
  568.  PUSH(CARDINAL(p3));PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));\
  569. _DCODE(DTRAP,LEA,10)
  570. #define DCALL1l1w1l(f,p1,p2,p3)\
  571.  PUSH(LONGCARD(p3));PUSH(CARDINAL(p2));PUSH(LONGCARD(p1));PUSH(CARDINAL(f));\
  572. _DCODE(DTRAP,LEA,12)
  573.  
  574. #elif (defined MM2)
  575.  
  576. #define XCALL0(f)\
  577.  CALLSYS(XTRAP,CAST(SHORTCARD,f))
  578. #define XCALL1w(f,p)\
  579.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p))
  580. #define XCALL2w(f,p1,p2)\
  581.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2))
  582. #define XCALL5w(f,p1,p2,p3,p4,p5)\
  583.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  584. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4),CAST(SHORTCARD,p5))
  585. #define XCALL6w(f,p1,p2,p3,p4,p5,p6)\
  586.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  587. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4),CAST(SHORTCARD,p5),CAST(SHORTCARD,p6))
  588. #define XCALL1w1l(f,p1,p2)\
  589.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2))
  590. #define XCALL1w2l(f,p1,p2,p3)\
  591.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  592. CAST(LONGCARD,p3))
  593. #define XCALL2w1l(f,p1,p2,p3)\
  594.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  595. CAST(LONGCARD,p3))
  596. #define XCALL3w1l(f,p1,p2,p3,p4)\
  597.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  598. CAST(SHORTCARD,p3),CAST(LONGCARD,p4))
  599. #define XCALL1l(f,p)\
  600.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p))
  601. #define XCALL2l(f,p1,p2)\
  602.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2))
  603. #define XCALL3l(f,p1,p2,p3)\
  604.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2),\
  605. CAST(LONGCARD,p3))
  606. #define XCALL4l(f,p1,p2,p3,p4)\
  607.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2),\
  608. CAST(LONGCARD,p3),CAST(LONGCARD(p4))
  609. #define XCALL6l(f,p1,p2,p3,p4,p5,p6)\
  610.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2),\
  611. CAST(LONGCARD,p3),CAST(LONGCARD,p4),CAST(LONGCARD,p5),CAST(LONGCARD,p6))
  612. #define XCALL1l1w1l(f,p1,p2,p3)\
  613.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2),\
  614. CAST(LONGCARD,p3))
  615. #define XCALL1l1w1l1w(f,p1,p2,p3,p4)\
  616.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2),\
  617. CAST(LONGCARD,p3),CAST(SHORTCARD,p4))
  618. #define XCALL2l2w(f,p1,p2,p3,p4)\
  619.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2),\
  620. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4))
  621. #define XCALL2l5w(f,p1,p2,p3,p4,p5,p6,p7)\
  622.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2),\
  623. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4),CAST(SHORTCARD,p5),CAST(SHORTCARD,p6),\
  624. CAST(SHORTCARD,p7))
  625. #define XCALL2l5w1l1w(f,p1,p2,p3,p4,p5,p6,p7,p8,p9)\
  626.  CALLSYS(XTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2),\
  627. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4),CAST(SHORTCARD,p5),CAST(SHORTCARD,p6),\
  628. CAST(SHORTCARD,p7)CAST(LONGCARD,p8),CAST(SHORTCARD,p9))
  629.  
  630. #define BCALL0(f)\
  631.  CALLSYS(BTRAP,CAST(SHORTCARD,f))
  632. #define BCALL1w(f,p)\
  633.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p))
  634. #define BCALL2w(f,p1,p2)\
  635.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2))
  636. #define BCALL1w1l(f,p1,p2)\
  637.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2))
  638. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  639.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  640. CAST(SHORTCARD,p3),CAST(SHORTCARD,p4),CAST(SHORTCARD,p5),CAST(LONGCARD,p6))
  641. #define BCALL1l(f,p)\
  642.  CALLSYS(BTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p))
  643.  
  644. #define DCALL0(f)\
  645.  CALLSYS(DTRAP,CAST(SHORTCARD,f))
  646. #define DCALL1w(f,p)\
  647.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p))
  648. #define DCALL2w(f,p1,p2)\
  649.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2))
  650. #define DCALL3w(f,p1,p2,p3)\
  651.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  652. CAST(SHORTCARD,p3))
  653. #define DCALL1w1l(f,p1,p2)\
  654.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2))
  655. #define DCALL1w2l(f,p1,p2,p3)\
  656.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  657. CAST(LONGCARD,p3))
  658. #define DCALL1w3l(f,p1,p2,p3,p4)\
  659.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  660. CAST(LONGCARD,p3),CAST(LONGCARD,p4))
  661. #define DCALL2w1l(f,p1,p2,p3)\
  662.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  663. CAST(LONGCARD,p3))
  664. #define DCALL2w2l(f,p1,p2,p3,p4)\
  665.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(SHORTCARD,p2),\
  666. CAST(LONGCARD,p3),CAST(LONGCARD,p4))
  667. #define DCALL1w1l1w(f,p1,p2,p3)\
  668.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(SHORTCARD,p1),CAST(LONGCARD,p2),\
  669. CAST(SHORTCARD,p3))
  670. #define DCALL1l(f,p)\
  671.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p))
  672. #define DCALL2l(f,p1,p2)\
  673.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(LONGCARD,p2))
  674. #define DCALL1l1w(f,p1,p2)\
  675.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2))
  676. #define DCALL1l2w(f,p1,p2,p3)\
  677.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2),\
  678. CAST(SHORTCARD,p3))
  679. #define DCALL1l1w1l(f,p1,p2,p3)\
  680.  CALLSYS(DTRAP,CAST(SHORTCARD,f),CAST(LONGCARD,p1),CAST(SHORTCARD,p2),\
  681. CAST(LONGCARD,p3))
  682.  
  683. #else /* HM2 */
  684.  
  685. #define XCALL0(f)\
  686.  CODE(PSHC,f,XTRAP,ADDQ2)
  687. #define XCALL1w(f,p)\
  688.  SETREG(0,p);CODE(PSHW,PSHC,f,XTRAP,ADDQ4)
  689. #define XCALL2w(f,p1,p2)\
  690.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHW,PSHC,f,XTRAP,ADDQ6)
  691. #define XCALL5w(f,p1,p2,p3,p4,p5)\
  692.  SETREG(0,p5);CODE(PSHW);SETREG(0,p4);CODE(PSHW);\
  693. SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  694. CODE(PSHW,PSHC,f,XTRAP,LEA,12)
  695. #define XCALL6w(f,p1,p2,p3,p4,p5,p6)\
  696.  SETREG(0,p6);CODE(PSHW);SETREG(0,p5);CODE(PSHW);SETREG(0,p4);CODE(PSHW);\
  697. SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  698. CODE(PSHW,PSHC,f,XTRAP,LEA,14)
  699. #define XCALL1w1l(f,p1,p2)\
  700.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,XTRAP,ADDQ8)
  701. #define XCALL1w2l(f,p1,p2,p3)\
  702.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  703. CODE(PSHW,PSHC,f,XTRAP,LEA,12)
  704. #define XCALL2w1l(f,p1,p2,p3)\
  705.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  706. CODE(PSHW,PSHC,f,XTRAP,LEA,10)
  707. #define XCALL3w1l(f,p1,p2,p3,p4)\
  708.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);\
  709. SETREG(0,p1);CODE(PSHW,PSHC,f,XTRAP,LEA,12)
  710. #define XCALL1l(f,p)\
  711.  SETREG(0,p);CODE(PSHL,PSHC,f,XTRAP,ADDQ6)
  712. #define XCALL2l(f,p1,p2)\
  713.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,10)
  714. #define XCALL3l(f,p1,p2,p3)\
  715.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  716. CODE(PSHL,PSHC,f,XTRAP,LEA,14)
  717. #define XCALL4l(f,p1,p2,p3,p4)\
  718.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);\
  719. SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,18)
  720. #define XCALL6l(f,p1,p2,p3,p4,p5,p6)\
  721.  SETREG(0,p6);CODE(PSHL);SETREG(0,p5);CODE(PSHL);SETREG(0,p4);CODE(PSHL);\
  722. SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  723. CODE(PSHL,PSHC,f,XTRAP,LEA,26)
  724. #define XCALL1l1w1l(f,p1,p2,p3)\
  725.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);\
  726. SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,12)
  727. #define XCALL1l1w1l1w(f,p1,p2,p3,p4)\
  728.  SETREG(0,p4);CODE(PSHW);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);\
  729. SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,14)
  730. #define XCALL2l2w(f,p1,p2,p3,p4)\
  731.  SETREG(0,p4);CODE(PSHW);SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);\
  732. SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,14)
  733. #define XCALL2l5w(f,p1,p2,p3,p4,p5,p6,p7)\
  734.  SETREG(0,p7);CODE(PSHW);SETREG(0,p6);CODE(PSHW);SETREG(0,p5);CODE(PSHW);\
  735. SETREG(0,p4);CODE(PSHW);SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);\
  736. SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,20)
  737. #define XCALL2l5w1l1w(f,p1,p2,p3,p4,p5,p6,p7,p8,p9)\
  738.  SETREG(0,p9);CODE(PSHW);SETREG(0,p8);CODE(PSHL);\
  739. SETREG(0,p7);CODE(PSHW);SETREG(0,p6);CODE(PSHW);SETREG(0,p5);CODE(PSHW);\
  740. SETREG(0,p4);CODE(PSHW);SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);\
  741. SETREG(0,p1);CODE(PSHL,PSHC,f,XTRAP,LEA,26)
  742.  
  743. #define BCALL0(f)\
  744.  CODE(PSHC,f,BTRAP,ADDQ2)
  745. #define BCALL1w(f,p)\
  746.  SETREG(0,p);CODE(PSHW,PSHC,f,BTRAP,ADDQ4)
  747. #define BCALL2w(f,p1,p2)\
  748.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHW,PSHC,f,BTRAP,ADDQ6)
  749. #define BCALL1w1l(f,p1,p2)\
  750.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,BTRAP,ADDQ8)
  751. #define BCALL1w1l3w1l(f,p1,p2,p3,p4,p5,p6)\
  752.  SETREG(0,p6);CODE(PSHL);SETREG(0,p5);CODE(PSHW);SETREG(0,p4);CODE(PSHW);\
  753. SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  754. CODE(PSHW,PSHC,f,BTRAP,LEA,18)
  755. #define BCALL1l(f,p)\
  756.  SETREG(0,p);CODE(PSHL,PSHC,f,BTRAP,ADDQ6)
  757.  
  758. #define DCALL0(f)\
  759.  CODE(PSHC,f,DTRAP,ADDQ2)
  760. #define DCALL1w(f,p)\
  761.  SETREG(0,p);CODE(PSHW,PSHC,f,DTRAP,ADDQ4)
  762. #define DCALL2w(f,p1,p2)\
  763.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,ADDQ6)
  764. #define DCALL3w(f,p1,p2,p3)\
  765.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  766. CODE(PSHW,PSHC,f,DTRAP,ADDQ8)
  767. #define DCALL1w1l(f,p1,p2)\
  768.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,ADDQ8)
  769. #define DCALL1w2l(f,p1,p2,p3)\
  770.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  771. CODE(PSHW,PSHC,f,DTRAP,LEA,12)
  772. #define DCALL1w3l(f,p1,p2,p3,p4)\
  773.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHL);\
  774. SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,LEA,16)
  775. #define DCALL2w1l(f,p1,p2,p3)\
  776.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  777. CODE(PSHW,PSHC,f,DTRAP,LEA,10)
  778. #define DCALL2w2l(f,p1,p2,p3,p4)\
  779.  SETREG(0,p4);CODE(PSHL);SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);\
  780. SETREG(0,p1);CODE(PSHW,PSHC,f,DTRAP,LEA,14)
  781. #define DCALL1w1l1w(f,p1,p2,p3)\
  782.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHL);SETREG(0,p1);\
  783. CODE(PSHW,PSHC,f,DTRAP,LEA,10)
  784. #define DCALL1l(f,p)\
  785.  SETREG(0,p);CODE(PSHL,PSHC,f,DTRAP,ADDQ6)
  786. #define DCALL2l(f,p1,p2)\
  787.  SETREG(0,p2);CODE(PSHL);SETREG(0,p1);CODE(PSHL,PSHC,f,DTRAP,LEA,10)
  788. #define DCALL1l1w(f,p1,p2)\
  789.  SETREG(0,p2);CODE(PSHW);SETREG(0,p1);CODE(PSHL,PSHC,f,DTRAP,ADDQ8)
  790. #define DCALL1l2w(f,p1,p2,p3)\
  791.  SETREG(0,p3);CODE(PSHW);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  792. CODE(PSHL,PSHC,f,DTRAP,LEA,10)
  793. #define DCALL1l1w1l(f,p1,p2,p3)\
  794.  SETREG(0,p3);CODE(PSHL);SETREG(0,p2);CODE(PSHW);SETREG(0,p1);\
  795. CODE(PSHL,PSHC,f,DTRAP,LEA,12)
  796.  
  797. #endif
  798.  
  799. /*==========================================================================*/
  800. /*                           "XBIOS"-Calls                                  */
  801. /*==========================================================================*/
  802.  
  803. #define initmous(_TYPE,_PARAM,_VEC)\
  804.  SAVEREGS\
  805.  XCALL1w2l(INITMOUS,_TYPE,_PARAM,_VEC);\
  806.  RESTOREREGS
  807.  
  808. #define ssbrk(_AMOUNT,_ADR)\
  809.  SAVEREGS\
  810.  XCALL1w(SSBRK,_AMOUNT);\
  811.  RESTOREREGS\
  812.  GETREGADR(0,_ADR)
  813.  
  814. #define physbase(_ADR)\
  815.  SAVEREGS\
  816.  XCALL0(PHYSBASE);\
  817.  RESTOREREGS\
  818.  GETREGADR(0,_ADR)
  819.  
  820. #define logbase(_ADR)\
  821.  SAVEREGS\
  822.  XCALL0(LOGBASE);\
  823.  RESTOREREGS\
  824.  GETREGADR(0,_ADR)
  825.  
  826. #define getrez(_RES)\
  827.  SAVEREGS\
  828.  XCALL0(GETREZ);\
  829.  RESTOREREGS\
  830.  GETUWREG(0,_RES)
  831.  
  832. /* _MODE wird nur beim Falcon ausgewertet! */
  833. #define setscreen(_LOG,_PHYS,_REZ,_MODE)\
  834.  SAVEREGS\
  835.  XCALL2l2w(SETSCREEN,_LOG,_PHYS,_REZ,_MODE);\
  836.  RESTOREREGS
  837.  
  838. #define setpalette(_PAL)\
  839.  SAVEREGS\
  840.  XCALL1l(SETPALETTE,_PAL);\
  841.  RESTOREREGS
  842.  
  843. #define setcolor(_REG,_COL,_OLD)\
  844.  SAVEREGS\
  845.  XCALL2w(SETCOLOR,_REG,_COL);\
  846.  RESTOREREGS\
  847.  GETUWREG(0,_OLD)
  848.  
  849. #define floprd(_BUF,_FIL,_DEV,_SEC,_TRK,_SIDE,_CNT,_RES)\
  850.  SAVEREGS\
  851.  XCALL2l5w(FLOPRD,_BUF,_FIL,_DEV,_SEC,_TRK,_SIDE,_CNT);\
  852.  RESTOREREGS\
  853.  GETSWREG(0,_RES)
  854.  
  855. #define flopwr(_BUF,_FIL,_DEV,_SEC,_TRK,_SIDE,_CNT,_RES)\
  856.  SAVEREGS\
  857.  XCALL2l5w(FLOPWR,_BUF,_FIL,_DEV,_SEC,_TRK,_SIDE,_CNT);\
  858.  RESTOREREGS\
  859.  GETSWREG(0,_RES)
  860.  
  861. #define flopfmt(_BUF,_FIL,_DEV,_SPT,_TRK,_SIDE,_INTRLV,_MAGIC,_VIRGIN,_RES)\
  862.  SAVEREGS\
  863.  XCALL2l5w1l1w(FLOPFMT,_BUF,_FIL,_DEV,_SPT,_TRK,_SIDE,_INTRLV,_MAGIC,_VIRGIN);\
  864.  RESTOREREGS\
  865.  GETSWREG(0,_RES)
  866.  
  867. #define midiws(_CNT,_BUF)\
  868.  SAVEREGS\
  869.  XCALL1w1l(MIDIWS,_CNT,_BUF);\
  870.  RESTOREREGS
  871.  
  872. #define mfpint(_NO,_VEC)\
  873.  SAVEREGS\
  874.  XCALL1w1l(MFPINT,_NO,_VEC);\
  875.  RESTOREREGS
  876.  
  877. #define iorec(_DEV,_ADR)\
  878.  SAVEREGS\
  879.  XCALL1w(IOREC,_DEV);\
  880.  RESTOREREGS\
  881.  GETREGADR(0,_ADR)
  882.  
  883. #define rsconf(_SPEED,_FLOW,_UCR,_RSR,_TSR,_SCR,_RES)\
  884.  SAVEREGS\
  885.  XCALL6w(RSCONF,_SPEED,_FLOW,_UCR,_RSR,_TSR,_SCR);\
  886.  RESTOREREGS\
  887.  GETLREG(0,_RES)
  888.  
  889. #define keytbl(_UNSHIFT,_SHIFT,_CAPS,_ADR)\
  890.  SAVEREGS\
  891.  XCALL3l(KEYTBL,_UNSHIFT,_SHIFT,_CAPS);\
  892.  RESTOREREGS\
  893.  GETREGADR(0,_ADR)
  894.  
  895. #define random(_RND)\
  896.  SAVEREGS\
  897.  XCALL0(RANDOM);\
  898.  RESTOREREGS\
  899.  GETLREG(0,_RND)
  900.  
  901. #define protobt(_BUF,_SER,_TYPE,_EXEC)\
  902.  SAVEREGS\
  903.  XCALL2l2w(PROTOBT,_BUF,_SER,_TYPE,_EXEC);\
  904.  RESTOREREGS
  905.  
  906. #define flopver(_BUF,_FIL,_DEV,_SEC,_TRK,_SIDE,_CNT,_RES)\
  907.  SAVEREGS\
  908.  XCALL2l5w(FLOPVER,_BUF,_FIL,_DEV,_SEC,_TRK,_SIDE,_CNT);\
  909.  RESTOREREGS\
  910.  GETSWREG(0,_RES)
  911.  
  912. #define scrdmp()\
  913.  SAVEREGS\
  914.  XCALL0(SCRDMP);\
  915.  RESTOREREGS
  916.  
  917. #define cursconf(_FUNC,_OP,_RES)\
  918.  SAVEREGS\
  919.  XCALL2w(CURSCONF,_FUNC,_OP);\
  920.  RESTOREREGS\
  921.  GETUWREG(0,_RES)
  922.  
  923. #define settime(_DATIME)\
  924.  SAVEREGS\
  925.  XCALL1l(SETTIME,_DATIME);\
  926.  RESTOREREGS
  927.  
  928. #define gettime(_DATIME)\
  929.  SAVEREGS\
  930.  XCALL0(GETTIME);\
  931.  RESTOREREGS\
  932.  GETLREG(0,_DATIME)
  933.  
  934. #define bioskeys()\
  935.  SAVEREGS\
  936.  XCALL0(BIOSKEYS);\
  937.  RESTOREREGS
  938.  
  939. #define ikbdws(_CNT,_BUF)\
  940.  SAVEREGS\
  941.  XCALL1w1l(IKBDWS,_CNT,_BUF);\
  942.  RESTOREREGS
  943.  
  944. #define jdisint(_INT)\
  945.  SAVEREGS\
  946.  XCALL1w(JDISINT,_INT);\
  947.  RESTOREREGS
  948.  
  949. #define jenabint(_INT)\
  950.  SAVEREGS\
  951.  XCALL1w(JENABINT,_INT);\
  952.  RESTOREREGS
  953.  
  954. #define giaccess(_DATA,_REG,_OLD)\
  955.  SAVEREGS\
  956.  XCALL2w(GIACCESS,_DATA,_REG);\
  957.  RESTOREREGS\
  958.  GETUWREG(0,_OLD)
  959.  
  960. #define offgibit(_BIT)\
  961.  SAVEREGS\
  962.  XCALL1w(OFFGIBIT,_BIT);\
  963.  RESTOREREGS
  964.  
  965. #define ongibit(_BIT)\
  966.  SAVEREGS\
  967.  XCALL1w(ONGIBIT,_BIT);\
  968.  RESTOREREGS
  969.  
  970. #define xbtimer(_TIMER,_CTRL,_DATA,_VEC)\
  971.  SAVEREGS\
  972.  XCALL3w1l(XBTIMER,_TIMER,_CTRL,_DATA,_VEC);\
  973.  RESTOREREGS
  974.  
  975. #define dosound(_BUF)\
  976.  SAVEREGS\
  977.  XCALL1l(DOSOUND,_BUF);\
  978.  RESTOREREGS
  979.  
  980. #define setprt(_CONF,_OLD)\
  981.  SAVEREGS\
  982.  XCALL1w(SETPRT,_CONF);\
  983.  RESTOREREGS\
  984.  GETUWREG(0,_OLD)
  985.  
  986. #define kbdvbase(_ADR)\
  987.  SAVEREGS\
  988.  XCALL0(KBDVBASE);\
  989.  RESTOREREGS\
  990.  GETREGADR(0,_ADR)
  991.  
  992. #define kbrate(_INIT,_REP,_OLD)\
  993.  SAVEREGS\
  994.  XCALL2w(KBRATE,_INIT,_REP);\
  995.  RESTOREREGS\
  996.  GETUWREG(0,_OLD)
  997.  
  998. #define prtblk(_BUF)\
  999.  SAVEREGS\
  1000.  XCALL1l(PRTBLK,_BUF);\
  1001.  RESTOREREGS
  1002.  
  1003. #define supexec(_PROC)\
  1004.  SAVEREGS\
  1005.  XCALL1l(SUPEXEC,_PROC);\
  1006.  RESTOREREGS
  1007.  
  1008. #define vsync()\
  1009.  SAVEREGS\
  1010.  XCALL0(VSYNC);\
  1011.  RESTOREREGS
  1012.  
  1013. #define puntaes()\
  1014.  SAVEREGS\
  1015.  XCALL0(PUNTAES);\
  1016.  RESTOREREGS
  1017.  
  1018. #define floprate(_DRV,_SEEK,_OLD)\
  1019.  SAVEREGS\
  1020.  XCALL2w(FLOPRATE,_DRV,_SEEK);\
  1021.  RESTOREREGS\
  1022.  GETUWREG(0,_OLD)
  1023.  
  1024. #define dmaread(_SEC,_CNT,_BUF,_DEV,_RES)\
  1025.  SAVEREGS\
  1026.  XCALL1l1w1l1w(DMAREAD,_SEC,_CNT,_BUF,_DEV);\
  1027.  RESTOREREGS\
  1028.  GETLREG(0,_RES)
  1029.  
  1030. #define dmawrite(_SEC,_CNT,_BUF,_DEV,_RES)\
  1031.  SAVEREGS\
  1032.  XCALL1l1w1l1w(DMAWRITE,_SEC,_CNT,_BUF,_DEV);\
  1033.  RESTOREREGS\
  1034.  GETLREG(0,_RES)
  1035.  
  1036. #define bconmap(_DEV,_RES)\
  1037.  SAVEREGS\
  1038.  XCALL1w(BCONMAP,_DEV);\
  1039.  RESTOREREGS\
  1040.  GETLREG(0,_RES)
  1041.  
  1042. #define nvmaccess(_OP,_START,_CNT,_BUF,_RES)\
  1043.  SAVEREGS\
  1044.  XCALL3w1l(NVMACCESS,_OP,_START,_CNT,_BUF);\
  1045.  RESTOREREGS\
  1046.  GETSWREG(0,_RES)
  1047.  
  1048. #define metainit(_BUF)\
  1049.  SAVEREGS\
  1050.  XCALL1l(METAINIT,_BUF);\
  1051.  RESTOREREGS
  1052.  
  1053. #define blitmode(_MODE,_OLD)\
  1054.  SAVEREGS\
  1055.  XCALL1w(BLITMODE,_MODE);\
  1056.  RESTOREREGS\
  1057.  GETUWREG(0,_OLD)
  1058.  
  1059. #define esetshift(_MODE,_OLD)\
  1060.  SAVEREGS\
  1061.  XCALL1w(ESETSHIFT,_MODE);\
  1062.  RESTOREREGS\
  1063.  GETUWREG(0,_OLD)
  1064.  
  1065. #define egetshift(_RES)\
  1066.  SAVEREGS\
  1067.  XCALL0(EGETSHIFT);\
  1068.  RESTOREREGS\
  1069.  GETUWREG(0,_RES)
  1070.  
  1071. #define esetbank(_BANK,_OLD)\
  1072.  SAVEREGS\
  1073.  XCALL1w(ESETBANK,_BANK);\
  1074.  RESTOREREGS\
  1075.  GETUWREG(0,_OLD)
  1076.  
  1077. #define esetcolor(_REG,_COL,_OLD)\
  1078.  SAVEREGS\
  1079.  XCALL2w(ESETCOLOR,_REG,_COL);\
  1080.  RESTOREREGS\
  1081.  GETUWREG(0,_OLD)
  1082.  
  1083. #define esetpalette(_REG,_COL,_BUF)\
  1084.  SAVEREGS\
  1085.  XCALL2w1l(ESETPALETTE,_REG,_COL,_BUF);\
  1086.  RESTOREREGS
  1087.  
  1088. #define egetpalette(_REG,_COL,_BUF)\
  1089.  SAVEREGS\
  1090.  XCALL2w1l(EGETPALETTE,_REG,_COL,_BUF);\
  1091.  RESTOREREGS
  1092.  
  1093. #define esetgray(_SWITCH,_OLD)\
  1094.  SAVEREGS\
  1095.  XCALL1w(ESETGRAY,_SWITCH);\
  1096.  RESTOREREGS\
  1097.  GETUWREG(0,_OLD)
  1098.  
  1099. #define esetsmear(_SWITCH,_OLD)\
  1100.  SAVEREGS\
  1101.  XCALL1w(ESETSMEAR,_SWITCH);\
  1102.  RESTOREREGS\
  1103.  GETUWREG(0,_OLD)
  1104.  
  1105. /*==========================================================================*/
  1106. /*                     "Falcon"-XBIOS-Calls (ohne Gewaehr!)                 */
  1107. /*==========================================================================*/
  1108.  
  1109. #define vsetmode(_MODE,_RES)\
  1110.  SAVEREGS\
  1111.  XCALL1w(VSETMODE,_MODE);\
  1112.  RESTOREREGS\
  1113.  GETSWREG(0,_RES)
  1114.  
  1115. #define vgetmonitor(_TYPE)\
  1116.  SAVEREGS\
  1117.  XCALL0(VGETMONITOR);\
  1118.  RESTOREREGS\
  1119.  GETSWREG(0,_TYPE)
  1120.  
  1121. #define vsetsync(_EXT)\
  1122.  SAVEREGS\
  1123.  XCALL1w(VSETSYNC,_EXT);\
  1124.  RESTOREREGS
  1125.  
  1126. #define vgetsize(_MODE,_SIZE)\
  1127.  SAVEREGS\
  1128.  XCALL1w(VGETSIZE,_MODE);\
  1129.  RESTOREREGS\
  1130.  GETLREG(0,_SIZE)
  1131.  
  1132. #define vsetrgb(_IDX,_CNT,_BUF)\
  1133.  SAVEREGS\
  1134.  XCALL2w1l(VSETRGB,_IDX,_CNT,_BUF);\
  1135.  RESTOREREGS
  1136.  
  1137. #define vgetrgb(_IDX,_CNT,_BUF)\
  1138.  SAVEREGS\
  1139.  XCALL2w1l(VGETRGB,_IDX,_CNT,_BUF);\
  1140.  RESTOREREGS
  1141.  
  1142. #define dsp_doblock(_DATIN,_SIZIN,_DATOUT,_SIZOUT)\
  1143.  SAVEREGS\
  1144.  XCALL4l(DSP_DOBLOCK,_DATIN,_SIZIN,_DATOUT,_SIZOUT);\
  1145.  RESTOREREGS
  1146.  
  1147. #define dsp_blkhandshake(_DATIN,_SIZIN,_DATOUT,_SIZOUT)\
  1148.  SAVEREGS\
  1149.  XCALL4l(DSP_BLKHANDSHAKE,_DATIN,_SIZIN,_DATOUT,_SIZOUT);\
  1150.  RESTOREREGS
  1151.  
  1152. #define dsp_blkunpacked(_DATIN,_SIZIN,_DATOUT,_SIZOUT)\
  1153.  SAVEREGS\
  1154.  XCALL4l(DSP_BLKUNPACKED,_DATIN,_SIZIN,_DATOUT,_SIZOUT);\
  1155.  RESTOREREGS
  1156.  
  1157. #define dsp_instream(_DATIN,_BSIZ,_NBLK,_BLKS)\
  1158.  SAVEREGS\
  1159.  XCALL4l(DSP_INSTREAM,_DATIN,_BSIZ,_NBLK,_BLKS);\
  1160.  RESTOREREGS
  1161.  
  1162. #define dsp_outstream(_DATOUT,_BSIZ,_NBLK,_BLKS)\
  1163.  SAVEREGS\
  1164.  XCALL4l(DSP_OUTSTREAM,_DATOUT,_BSIZ,_NBLK,_BLKS);\
  1165.  RESTOREREGS
  1166.  
  1167. #define dsp_iostream(_DATIN,_DATOUT,_BISIZ,_BOSIZ,_NBLK,_BLKS)\
  1168.  SAVEREGS\
  1169.  XCALL6l(DSP_IOSTREAM,_DATIN,_DATOUT,_BISIZ,_BOSIZ,_NBLK,_BLKS);\
  1170.  RESTOREREGS
  1171.  
  1172. #define dsp_removeinterrupts(_MASK)\
  1173.  SAVEREGS\
  1174.  XCALL1w(DSP_REMOVEINTERRUPTS,_MASK);\
  1175.  RESTOREREGS
  1176.  
  1177. #define dsp_getwordsize(_SIZE)\
  1178.  SAVEREGS\
  1179.  XCALL0(DSP_GETWORDSIZE);\
  1180.  RESTOREREGS\
  1181.  GETSWREG(0,_)
  1182.  
  1183. #define dsp_lock(_RES)\
  1184.  SAVEREGS\
  1185.  XCALL0(DSP_LOCK);\
  1186.  RESTOREREGS\
  1187.  GETSWREG(0,_RES)
  1188.  
  1189. #define dsp_unlock()\
  1190.  SAVEREGS\
  1191.  XCALL0(DSP_UNLOCK);\
  1192.  RESTOREREGS
  1193.  
  1194. #define dsp_available(_XMEM,_YMEM)\
  1195.  SAVEREGS\
  1196.  XCALL2l(DSP_AVAILABLE,_XMEM,_YMEM);\
  1197.  RESTOREREGS
  1198.  
  1199. #define dsp_reserve(_XMEM,_YMEM,_RES)\
  1200.  SAVEREGS\
  1201.  XCALL2l(DSP_RESERVE,_XMEM,_YMEM);\
  1202.  RESTOREREGS\
  1203.  GETSWREG(0,_RES)
  1204.  
  1205. #define dsp_loadprog(_FILE,_ABILITY,_BUF,_RES)\
  1206.  SAVEREGS\
  1207.  XCALL1l1w1l(DSP_LOADPROG,_FILE,_ABILITY,_BUF);\
  1208.  RESTOREREGS\
  1209.  GETSWREG(0,_RES)
  1210.  
  1211. #define dsp_execprog(_CODE,_CSIZ,_ABILITY)\
  1212.  SAVEREGS\
  1213.  XCALL2l1w(DSP_EXECPROG,_CODE,_CSIZ,_ABILITY);\
  1214.  RESTOREREGS
  1215.  
  1216. #define dsp_execboot(_CODE,_CSIZ,_ABILITY)\
  1217.  SAVEREGS\
  1218.  XCALL2l1w(DSP_EXECBOOT,_CODE,_CSIZ,_ABILITY);\
  1219.  RESTOREREGS
  1220.  
  1221. #define dsp_lodtobinary(_FILE,_CODE,_RES)\
  1222.  SAVEREGS\
  1223.  XCALL2l(DSP_LODTOBINARY,_FILE,_CODE);\
  1224.  RESTOREREGS\
  1225.  GETLREG(0,_RES)
  1226.  
  1227. #define dsp_triggerhc(_VEC)\
  1228.  SAVEREGS\
  1229.  XCALL1w(DSP_TRIGGERHC,_VEC);\
  1230.  RESTOREREGS
  1231.  
  1232. #define dsp_requestuniqueability(_ABILITY)\
  1233.  SAVEREGS\
  1234.  XCALL0(DSP_REQUESTUNIQUEABILITY);\
  1235.  RESTOREREGS\
  1236.  GETSWREG(0,_ABILITY)
  1237.  
  1238. #define dsp_getprogability(_ABILITY)\
  1239.  SAVEREGS\
  1240.  XCALL0(DSP_GETPROGABILITY,_ABILITY);\
  1241.  RESTOREREGS\
  1242.  GETSWREG(0,_ABILITY)
  1243.  
  1244. #define dsp_flushsubroutines()\
  1245.  SAVEREGS\
  1246.  XCALL0(DSP_FLUSHSUBROUTINES);\
  1247.  RESTOREREGS
  1248.  
  1249. #define dsp_loadsubroutine(_BUF,_SIZ,_ABILITY,_RES)\
  1250.  SAVEREGS\
  1251.  XCALL2l1w(DSP_LOADSUBROUTINE,_BUF,_SIZ,_ABILITY);\
  1252.  RESTOREREGS\
  1253.  GETSWREG(0,_RES)
  1254.  
  1255. #define dsp_inqsubrability(_ABILITY,_RES)\
  1256.  SAVEREGS\
  1257.  XCALL1w(DSP_INQSUBRABILITY,_ABILITY);\
  1258.  RESTOREREGS\
  1259.  GETSWREG(0,_RES)
  1260.  
  1261. #define dsp_runsubroutine(_HANDLE,_RES)\
  1262.  SAVEREGS\
  1263.  XCALL1w(DSP_RUNSUBROUTINE,_HANDLE);\
  1264.  RESTOREREGS\
  1265.  GETSWREG(0,_RES)
  1266.  
  1267. #define dsp_hf0(_FLAG,_RES)\
  1268.  SAVEREGS\
  1269.  XCALL1w(DSP_HF0,_FLAG);\
  1270.  RESTOREREGS\
  1271.  GETSWREG(0,_RES)
  1272.  
  1273. #define dsp_hf1(_FLAG,_RES)\
  1274.  SAVEREGS\
  1275.  XCALL1w(DSP_HF1,_FLAG);\
  1276.  RESTOREREGS\
  1277.  GETSWREG(0,_RES)
  1278.  
  1279. #define dsp_hf2(_RES)\
  1280.  SAVEREGS\
  1281.  XCALL0(DSP_HF2);\
  1282.  RESTOREREGS\
  1283.  GETSWREG(0,_RES)
  1284.  
  1285. #define dsp_hf3(_RES)\
  1286.  SAVEREGS\
  1287.  XCALL0(DSP_HF3);\
  1288.  RESTOREREGS\
  1289.  GETSWREG(0,_RES)
  1290.  
  1291. #define dsp_blkwords(_DATIN,_SIZIN,_DATOUT,_SIZOUT)\
  1292.  SAVEREGS\
  1293.  XCALL4l(DSP_BLKWORDS,_DATIN,_SIZIN,_DATOUT,_SIZOUT);\
  1294.  RESTOREREGS
  1295.  
  1296. #define dsp_blkbytes(_DATIN,_SIZIN,_DATOUT,_SIZOUT)\
  1297.  SAVEREGS\
  1298.  XCALL4l(DSP_BLKBYTES,_DATIN,_SIZIN,_DATOUT,_SIZOUT);\
  1299.  RESTOREREGS
  1300.  
  1301. #define dsp_hstat(_STAT)\
  1302.  SAVEREGS\
  1303.  XCALL0(DSP_HSTAT);\
  1304.  RESTOREREGS\
  1305.  GETUWREG(0,_)
  1306.  
  1307. #define dsp_setvectors(_REC,_XMT)\
  1308.  SAVEREGS\
  1309.  XCALL2l(DSP_SETVECTORS,_REC,_XMT);\
  1310.  RESTOREREGS
  1311.  
  1312. #define dsp_multblocks(_NSEND,_NREC,_BSEND,_BREC)\
  1313.  SAVEREGS\
  1314.  XCALL4l(DSP_MULTBLOCKS,_NSEND,_NREC,_BSEND,_BREC);\
  1315.  RESTOREREGS
  1316.  
  1317. #define locksnd(_RES)\
  1318.  SAVEREGS\
  1319.  XCALL0(LOCKSND);\
  1320.  RESTOREREGS\
  1321.  GETLREG(0,_RES)
  1322.  
  1323. #define unlocksnd(_RES)\
  1324.  SAVEREGS\
  1325.  XCALL0(UNLOCKSND);\
  1326.  RESTOREREGS\
  1327.  GETLREG(0,_RES)
  1328.  
  1329. #define soundcmd(_MODE,_DAT,_RES)\
  1330.  SAVEREGS\
  1331.  XCALL2w(SOUNDCMD,_MODE,_DAT);\
  1332.  RESTOREREGS\
  1333.  GETLREG(0,_RES)
  1334.  
  1335. #define setbuffer(_REG,_BEG,_END,_RES)\
  1336.  SAVEREGS\
  1337.  XCALL1w2l(SETBUFFER,_REG,_BEG,_END);\
  1338.  RESTOREREGS\
  1339.  GETLREG(0,_RES)
  1340.  
  1341. #define setmode(_MODE,_RES)\
  1342.  SAVEREGS\
  1343.  XCALL1w(SETMODE,_MODE);\
  1344.  RESTOREREGS\
  1345.  GETLREG(0,_MODE)
  1346.  
  1347. #define settracks(_PLAY,_REC,_RES)\
  1348.  SAVEREGS\
  1349.  XCALL2w(SETTRACKS,_PLAY,_REC);\
  1350.  RESTOREREGS\
  1351.  GETLREG(0,_RES)
  1352.  
  1353. #define setmontracks(_TRACK,_RES)\
  1354.  SAVEREGS\
  1355.  XCALL1w(SETMONTRACKS,_TRACK);\
  1356.  RESTOREREGS\
  1357.  GETLREG(0,_RES)
  1358.  
  1359. #define setinterrupt(_SRC,_CAUSE,_RES)\
  1360.  SAVEREGS\
  1361.  XCALL2w(SETINTERRUPT,_SRC,_CAUSE);\
  1362.  RESTOREREGS\
  1363.  GETLREG(0,_RES)
  1364.  
  1365. #define buffoper(_MODE,_RES)\
  1366.  SAVEREGS\
  1367.  XCALL1w(BUFFOPER,_MODE);\
  1368.  RESTOREREGS\
  1369.  GETLREG(0,_RES)
  1370.  
  1371. #define dsptristate(_XMT,_REC,_RES)\
  1372.  SAVEREGS\
  1373.  XCALL2w(DSPTRISTATE,_XMT,_REC);\
  1374.  RESTOREREGS\
  1375.  GETLREG(0,_RES)
  1376.  
  1377. #define gpio(_MODE,_DAT,_RES)\
  1378.  SAVEREGS\
  1379.  XCALL2w(GPIO,_MODE,_DAT);\
  1380.  RESTOREREGS\
  1381.  GETLREG(0,_RES)
  1382.  
  1383. #define devconnect(_SRC,_DST,_CLK,_PRE,_PROTO,_RES)\
  1384.  SAVEREGS\
  1385.  XCALL5w(DEVCONNECT,_SRC,_DST,_CLK,_PRE,_PROTO);\
  1386.  RESTOREREGS\
  1387.  GETLREG(0,_RES)
  1388.  
  1389. #define sndstatus(_RESET,_RES)\
  1390.  SAVEREGS\
  1391.  XCALL1w(SNDSTATUS,_RESET);\
  1392.  RESTOREREGS\
  1393.  GETLREG(0,_RES)
  1394.  
  1395. #define buffptr(_BUF,_RES)\
  1396.  SAVEREGS\
  1397.  XCALL1l(BUFFPTR,_BUF);\
  1398.  RESTOREREGS\
  1399.  GETLREG(0,_RES)
  1400.  
  1401. #define vsetmask(_ORM,_ANDM,_OVLAY)\
  1402.  SAVEREGS\
  1403.  XCALL2l1w(VSETMASK,_ORM,_ANDM,_OVLAY);\
  1404.  RESTOREREGS
  1405.  
  1406. /*==========================================================================*/
  1407. /*                           "BIOS"-Calls                                   */
  1408. /*==========================================================================*/
  1409.  
  1410. #define getmpb(_MPB)\
  1411.  SAVEREGS\
  1412.  BCALL1l(GETMPB,_MPB);\
  1413.  RESTOREREGS
  1414.  
  1415. #define bconstat(_DEV,_READY)\
  1416.  SAVEREGS\
  1417.  BCALL1w(BCONSTAT,_DEV);\
  1418.  RESTOREREGS\
  1419.  GETSWREG(0,_READY)
  1420.  
  1421. #define bconin(_DEV,_KEY)\
  1422.  SAVEREGS\
  1423.  BCALL1w(CCONIN,_DEV);\
  1424.  RESTOREREGS\
  1425.  GETLREG(0,_KEY)
  1426.  
  1427. #define bconout(_DEV,_CHAR,_RES)\
  1428.  SAVEREGS\
  1429.  BCALL2w(BCONOUT,_DEV,_CHAR);\
  1430.  RESTOREREGS\
  1431.  GETSWREG(0,_RES)
  1432.  
  1433. #define rwabs(_FLAG,_BUF,_CNT,_REC,_DEV,_LREC,_RES)\
  1434.  SAVEREGS\
  1435.  BCALL1w1l3w1l(RWABS,_FLAG,_BUF,_CNT,_REC,_DEV,_LREC);\
  1436.  RESTOREREGS\
  1437.  GETLREG(0,_RES)
  1438.  
  1439. #define setexc(_VEC,_ADR,_OLD)\
  1440.  SAVEREGS\
  1441.  BCALL1w1l(SETEXC,_VEC,_ADR);\
  1442.  RESTOREREGS\
  1443.  GETREGADR(0,_OLD)
  1444.  
  1445. #define tickcal(_MS)\
  1446.  SAVEREGS\
  1447.  BCALL0(TICKCAL);\
  1448.  RESTOREREGS\
  1449.  GETLREG(0,_MS)
  1450.  
  1451. #define bcostat(_DEV,_READY)\
  1452.  SAVEREGS\
  1453.  BCALL1w(BCOSTAT,_DEV);\
  1454.  RESTOREREGS\
  1455.  GETSWREG(0,_READY)
  1456.  
  1457. #define getbpb(_DEV,_BPB)\
  1458.  SAVEREGS\
  1459.  BCALL1w(GETBPB,_DEV);\
  1460.  RESTOREREGS\
  1461.  GETLREG(0,_BPB)
  1462.  
  1463. #define mediach(_DEV,_CHG)\
  1464.  SAVEREGS\
  1465.  BCALL1w(MEDIACH,_DEV);\
  1466.  RESTOREREGS\
  1467.  GETSWREG(0,_CHG)
  1468.  
  1469. #define drvmap(_DRIVES)\
  1470.  SAVEREGS\
  1471.  BCALL0(DRVMAP);\
  1472.  RESTOREREGS\
  1473.  GETLREG(0,_DRIVES)
  1474.  
  1475. #define kbshift(_MODE,_STAT)\
  1476.  SAVEREGS\
  1477.  BCALL1w(KBSHIFT,_MODE);\
  1478.  RESTOREREGS\
  1479.  GETLREG(0,_STAT)
  1480.  
  1481. /*==========================================================================*/
  1482. /*                           "GEMDOS"-Calls                                 */
  1483. /*==========================================================================*/
  1484.  
  1485. #define p_term0()\
  1486.  DCALL0(PTERM0)
  1487.  
  1488. #define c_conin(_KEY)\
  1489.  SAVEREGS\
  1490.  DCALL0(CCONIN);\
  1491.  RESTOREREGS\
  1492.  GETLREG(0,_KEY)
  1493.  
  1494. #define c_conout(_CHAR)\
  1495.  SAVEREGS\
  1496.  DCALL1w(CCONOUT,_CHAR);\
  1497.  RESTOREREGS
  1498.  
  1499. #define c_auxin(_CHAR)\
  1500.  SAVEREGS\
  1501.  DCALL0(CAUXIN);\
  1502.  RESTOREREGS\
  1503.  GETSWREG(0,_CHAR)
  1504.  
  1505. #define c_auxout(_CHAR)\
  1506.  SAVEREGS\
  1507.  DCALL1w(CAUXOUT,_CHAR);\
  1508.  RESTOREREGS
  1509.  
  1510. #define c_prnout(_CHAR)\
  1511.  SAVEREGS\
  1512.  DCALL1w(CPRNOUT,_CHAR);\
  1513.  RESTOREREGS
  1514.  
  1515. #define c_rawio(_DAT,_RES)\
  1516.  SAVEREGS\
  1517.  DCALL1w(CRAWIO,_DAT);\
  1518.  RESTOREREGS\
  1519.  GETLREG(0,_RES)
  1520.  
  1521. #define c_rawcin(_KEY)\
  1522.  SAVEREGS\
  1523.  DCALL0(CRAWCIN);\
  1524.  RESTOREREGS\
  1525.  GETLREG(0,_KEY)
  1526.  
  1527. #define c_necin(_KEY)\
  1528.  SAVEREGS\
  1529.  DCALL0(CNECIN);\
  1530.  RESTOREREGS\
  1531.  GETLREG(0,_KEY)
  1532.  
  1533. #define c_conws(_STR)\
  1534.  SAVEREGS\
  1535.  DCALL1l(CCONWS,_STR);\
  1536.  RESTOREREGS
  1537.  
  1538. #define c_conrs(_BUF)\
  1539.  SAVEREGS\
  1540.  DCALL1l(CCONRS,_BUF);\
  1541.  RESTOREREGS
  1542.  
  1543. #define c_conis(_STAT)\
  1544.  SAVEREGS\
  1545.  DCALL0(CCONIS);\
  1546.  RESTOREREGS\
  1547.  GETSWREG(0,_STAT)
  1548.  
  1549. #define d_setdrv(_DRV,_DRIVES)\
  1550.  SAVEREGS\
  1551.  DCALL1w(DSETDRV,_DRV);\
  1552.  RESTOREREGS\
  1553.  GETLREG(0,_DRIVES)
  1554.  
  1555. #define c_conos(_STAT)\
  1556.  SAVEREGS\
  1557.  DCALL0(CCONOS);\
  1558.  RESTOREREGS\
  1559.  GETSWREG(0,_STAT)
  1560.  
  1561. #define c_prnos(_STAT)\
  1562.  SAVEREGS\
  1563.  DCALL0(CPRNOS);\
  1564.  RESTOREREGS\
  1565.  GETSWREG(0,_STAT)
  1566.  
  1567. #define c_auxis(_STAT)\
  1568.  SAVEREGS\
  1569.  DCALL0(CAUXIS);\
  1570.  RESTOREREGS\
  1571.  GETSWREG(0,_STAT)
  1572.  
  1573. #define c_auxos(_STAT)\
  1574.  SAVEREGS\
  1575.  DCALL0(CAUXOS);\
  1576.  RESTOREREGS\
  1577.  GETSWREG(0,_STAT)
  1578.  
  1579. #define m_addalt(_START,_SIZE,_RES)\
  1580.  SAVEREGS\
  1581.  DCALL2l(MADDALT,_START,_SIZE);\
  1582.  RESTOREREGS\
  1583.  GETSWREG(0,_RES)
  1584.  
  1585. #define s_realloc(_SIZE,_ADR)\
  1586.  SAVEREGS\
  1587.  DCALL1l(SREALLOC,_SIZE);\
  1588.  RESTOREREGS\
  1589.  GETREGADR(0,_ADR)
  1590.  
  1591. #define d_getdrv(_DRV)\
  1592.  SAVEREGS\
  1593.  DCALL0(DGETDRV);\
  1594.  RESTOREREGS\
  1595.  GETUWREG(0,_DRV)
  1596.  
  1597. #define f_setdta(_DTA)\
  1598.  SAVEREGS\
  1599.  DCALL1l(FSETDTA,_DTA);\
  1600.  RESTOREREGS
  1601.  
  1602. #define s_uper(_DAT,_VAL)\
  1603.  SAVEREGS\
  1604.  DCALL1l(SUPER,_DAT);\
  1605.  RESTOREREGS\
  1606.  GETLREG(0,_VAL)
  1607.  
  1608. #define t_getdate(_DATE)\
  1609.  SAVEREGS\
  1610.  DCALL0(TGETDATE);\
  1611.  RESTOREREGS\
  1612.  GETUWREG(0,_DATE)
  1613.  
  1614. #define t_setdate(_DATE,_RES)\
  1615.  SAVEREGS\
  1616.  DCALL1w(TSETDATE,_DATE);\
  1617.  RESTOREREGS\
  1618.  GETSWREG(0,_RES)
  1619.  
  1620. #define t_gettime(_TIME)\
  1621.  SAVEREGS\
  1622.  DCALL0(TGETTIME);\
  1623.  RESTOREREGS\
  1624.  GETUWREG(0,_TIME)
  1625.  
  1626. #define t_settime(_TIME,_RES)\
  1627.  SAVEREGS\
  1628.  DCALL1w(TSETTIME,_TIME);\
  1629.  RESTOREREGS\
  1630.  GETSWREG(0,_RES)
  1631.  
  1632. #define f_getdta(_DTA)\
  1633.  SAVEREGS\
  1634.  DCALL0(FGETDTA);\
  1635.  RESTOREREGS\
  1636.  GETREGADR(0,_DTA)
  1637.  
  1638. #define s_version(_VERS)\
  1639.  SAVEREGS\
  1640.  DCALL0(SVERSION);\
  1641.  RESTOREREGS\
  1642.  GETUWREG(0,_VERS)
  1643.  
  1644. #define p_termres(_KEEP,_RET)\
  1645.  DCALL1l1w(PTERMRES,_KEEP,_RET)
  1646.  
  1647. #define d_free(_BUF,_DRV,_RES)\
  1648.  SAVEREGS\
  1649.  DCALL1l1w(DFREE,_BUF,_DRV);\
  1650.  RESTOREREGS\
  1651.  GETSWREG(0,_RES)
  1652.  
  1653. #define d_create(_DIR,_RES)\
  1654.  SAVEREGS\
  1655.  DCALL1l(DCREATE,_DIR);\
  1656.  RESTOREREGS\
  1657.  GETSWREG(0,_RES)
  1658.  
  1659. #define d_delete(_DIR,_RES)\
  1660.  SAVEREGS\
  1661.  DCALL1l(DDELETE,_DIR);\
  1662.  RESTOREREGS\
  1663.  GETSWREG(0,_RES)
  1664.  
  1665. #define d_setpath(_PATH,_RES)\
  1666.  SAVEREGS\
  1667.  DCALL1l(DSETPATH,_PATH);\
  1668.  RESTOREREGS\
  1669.  GETSWREG(0,_RES)
  1670.  
  1671. #define f_create(_FILE,_ATTR,_HNDL)\
  1672.  SAVEREGS\
  1673.  DCALL1l1w(FCREATE,_FILE,_ATTR);\
  1674.  RESTOREREGS\
  1675.  GETLREG(0,_HNDL)
  1676.  
  1677. #define f_open(_FILE,_MODE,_HNDL)\
  1678.  SAVEREGS\
  1679.  DCALL1l1w(FOPEN,_FILE,_MODE);\
  1680.  RESTOREREGS\
  1681.  GETLREG(0,_HNDL)
  1682.  
  1683. #define f_close(_HNDL,_RES)\
  1684.  SAVEREGS\
  1685.  DCALL1w(FCLOSE,_HNDL);\
  1686.  RESTOREREGS\
  1687.  GETSWREG(0,_RES)
  1688.  
  1689. #define f_read(_HNDL,_LEN,_BUF,_CNT)\
  1690.  SAVEREGS\
  1691.  DCALL1w2l(FREAD,_HNDL,_LEN,_BUF);\
  1692.  RESTOREREGS\
  1693.  GETLREG(0,_CNT)
  1694.  
  1695. #define f_write(_HNDL,_LEN,_BUF,_CNT)\
  1696.  SAVEREGS\
  1697.  DCALL1w2l(FWRITE,_HNDL,_LEN,_BUF);\
  1698.  RESTOREREGS\
  1699.  GETLREG(0,_CNT)
  1700.  
  1701. #define f_delete(_FILE,_RES)\
  1702.  SAVEREGS\
  1703.  DCALL1l(FDELETE,_FILE);\
  1704.  RESTOREREGS\
  1705.  GETSWREG(0,_RES)
  1706.  
  1707. #define f_seek(_OFF,_HNDL,_MODE,_POS)\
  1708.  SAVEREGS\
  1709.  DCALL1l2w(FSEEK,_OFF,_HNDL,_MODE);\
  1710.  RESTOREREGS\
  1711.  GETLREG(0,_POS)
  1712.  
  1713. #define f_attrib(_FILE,_FLAG,_ATTR,_OLD)\
  1714.  SAVEREGS\
  1715.  DCALL1l2w(FATTRIB,_FILE,_FLAG,_ATTR);\
  1716.  RESTOREREGS\
  1717.  GETLREG(0,_OLD)
  1718.  
  1719. #define m_xalloc(_SIZE,_MODE,_ADR)\
  1720.  SAVEREGS\
  1721.  DCALL1l1w(MXALLOC,_SIZE,_MODE);\
  1722.  RESTOREREGS\
  1723.  GETREGADR(0,_ADR)
  1724.  
  1725. #define f_dup(_STD,_HNDL)\
  1726.  SAVEREGS\
  1727.  DCALL1w(FDUP,_STD);\
  1728.  RESTOREREGS\
  1729.  GETLREG(0,_HNDL)
  1730.  
  1731. #define f_force(_STD,_HNDL,_RES)\
  1732.  SAVEREGS\
  1733.  DCALL2w(FFORCE,_STD,_HNDL);\
  1734.  RESTOREREGS\
  1735.  GETSWREG(0,_RES)
  1736.  
  1737. #define d_getpath(_PATH,_DRV,_RES)\
  1738.  SAVEREGS\
  1739.  DCALL1l1w(DGETPATH,_PATH,_DRV);\
  1740.  RESTOREREGS\
  1741.  GETSWREG(0,_RES)
  1742.  
  1743. #define m_alloc(_SIZE,_ADR)\
  1744.  SAVEREGS\
  1745.  DCALL1l(MALLOC,_SIZE);\
  1746.  RESTOREREGS\
  1747.  GETREGADR(0,_ADR)
  1748.  
  1749. #define m_free(_ADR,_RES)\
  1750.  SAVEREGS\
  1751.  DCALL1l(MFREE,_ADR);\
  1752.  RESTOREREGS\
  1753.  GETSWREG(0,_RES)
  1754.  
  1755. #define m_shrink(_ADR,_SIZE,_RES)\
  1756.  SAVEREGS\
  1757.  DCALL1w2l(MSHRINK,0,_ADR,_SIZE);\
  1758.  RESTOREREGS\
  1759.  GETSWREG(0,_RES)
  1760.  
  1761. #define p_exec(_MODE,_PROG,_TAIL,_ENV,_RES)\
  1762.  SAVEREGS\
  1763.  DCALL1w3l(PEXEC,_MODE,_PROG,_TAIL,_ENV);\
  1764.  RESTOREREGS\
  1765.  GETLREG(0,_RES)
  1766.  
  1767. #define p_term(_RET)\
  1768.  DCALL1w(PTERM,_RET)
  1769.  
  1770. #define f_sfirst(_FILE,_ATTR,_RES)\
  1771.  SAVEREGS\
  1772.  DCALL1l1w(FSFIRST,_FILE,_ATTR);\
  1773.  RESTOREREGS\
  1774.  GETSWREG(0,_RES)
  1775.  
  1776. #define f_snext(_RES)\
  1777.  SAVEREGS\
  1778.  DCALL0(FSNEXT);\
  1779.  RESTOREREGS\
  1780.  GETSWREG(0,_RES)
  1781.  
  1782. #define f_rename(_OLD,_NEW,_RES)\
  1783.  SAVEREGS\
  1784.  DCALL1w2l(FRENAME,0,_OLD,_NEW);\
  1785.  RESTOREREGS\
  1786.  GETSWREG(0,_RES)
  1787.  
  1788. #define f_datime(_DATIME,_FILE,_FLAG)\
  1789.  SAVEREGS\
  1790.  DCALL1l2w(FDATIME,_DATIME,_FILE,_FLAG);\
  1791.  RESTOREREGS
  1792.  
  1793. #define f_lock(_HDL,_MODE,_FROM,_LEN,_RES)\
  1794.  SAVEREGS\
  1795.  DCALL2w2l(FLOCK,_HDL,_MODE,_FROM,_LEN);\
  1796.  RESTOREREGS\
  1797.  GETSWREG(0,_RES)
  1798.  
  1799. /*==========================================================================*/
  1800. /*                      MultiGEM-Calls                                      */
  1801. /*==========================================================================*/
  1802.  
  1803. #define m_fork(_PRG,_CMD,_RES)\
  1804.  SAVEREGS\
  1805.  DCALL1l1w1l(MFORK,_PRG,5AA7H,_CMD);\
  1806.  RESTOREREGS\
  1807.  GETSWREG(0,_RES)
  1808.  
  1809. /*==========================================================================*/
  1810. /*                      Mag!X-Calls                                         */
  1811. /*==========================================================================*/
  1812.  
  1813. #define s_config(_MODE,_SET,_RES)\
  1814.  SAVEREGS\
  1815.  DCALL1w1l(SCONFIG,_MODE,_SET);\
  1816.  RESTOREREGS\
  1817.  GETLREG(0,_RES)
  1818.  
  1819. /*==========================================================================*/
  1820. /*                      MiNT-Calls                                          */
  1821. /*==========================================================================*/
  1822.  
  1823. #define s_yield(_RES)\
  1824.  SAVEREGS\
  1825.  DCALL0(SYIELD);\
  1826.  RESTOREREGS\
  1827.  GETSWREG(0,_RES)
  1828.  
  1829. #define f_pipe(_PTR,_RES)\
  1830.  SAVEREGS\
  1831.  DCALL1l(FPIPE,_PTR);\
  1832.  RESTOREREGS\
  1833.  GETSWREG(0,_RES)
  1834.  
  1835. #define f_cntl(_HNDL,_ARG,_CMD,_RES)\
  1836.  SAVEREGS\
  1837.  DCALL1w1l1w(FCNTL,_HNDL,_ARG,_CMD);\
  1838.  RESTOREREGS\
  1839.  GETLREG(0,_RES)
  1840.  
  1841. #define f_instat(_HNDL,_CNT)\
  1842.  SAVEREGS\
  1843.  DCALL1w(FINSTAT,_HNDL);\
  1844.  RESTOREREGS\
  1845.  GETLREG(0,_CNT)
  1846.  
  1847. #define f_outstat(_HNDL,_CNT)\
  1848.  SAVEREGS\
  1849.  DCALL1w(FOUTSTAT,_HNDL);\
  1850.  RESTOREREGS\
  1851.  GETLREG(0,_CNT)
  1852.  
  1853. #define f_getchar(_HNDL,_MODE,_RES)\
  1854.  SAVEREGS\
  1855.  DCALL2w(FGETCHAR,_HNDL,_MODE);\
  1856.  RESTOREREGS\
  1857.  GETLREG(0,_RES)
  1858.  
  1859. #define f_putchar(_HNDL,_CHAR,_MODE,_RES)\
  1860.  SAVEREGS\
  1861.  DCALL1w1l1w(FPUTCHAR,_HNDL,_CHAR,_MODE);\
  1862.  RESTOREREGS\
  1863.  GETLREG(0,_RES)
  1864.  
  1865. #define p_wait(_RES)\
  1866.  SAVEREGS\
  1867.  DCALL0(PWAIT);\
  1868.  RESTOREREGS\
  1869.  GETLREG(0,_RES)
  1870.  
  1871. #define p_nice(_DELTA,_PRIO)\
  1872.  SAVEREGS\
  1873.  DCALL1w(PNICE,_DELTA);\
  1874.  RESTOREREGS\
  1875.  GETLREG(0,_PRIO)
  1876.  
  1877. #define p_getpid(_PID)\
  1878.  SAVEREGS\
  1879.  DCALL0(PGETPID);\
  1880.  RESTOREREGS\
  1881.  GETSWREG(0,_PID)
  1882.  
  1883. #define p_getppid(_PPID)\
  1884.  SAVEREGS\
  1885.  DCALL0(PGETPPID);\
  1886.  RESTOREREGS\
  1887.  GETSWREG(0,_PPID)
  1888.  
  1889. #define p_getpgrp(_PGRP)\
  1890.  SAVEREGS\
  1891.  DCALL0(PGETPGRP);\
  1892.  RESTOREREGS\
  1893.  GETSWREG(0,_PGRP)
  1894.  
  1895. #define p_setpgrp(_PID,_GRP,_RES)\
  1896.  SAVEREGS\
  1897.  DCALL2w(PSETPGRP,_PID,_GRP);\
  1898.  RESTOREREGS\
  1899.  GETSWREG(0,_RES)
  1900.  
  1901. #define p_getuid(_UID)\
  1902.  SAVEREGS\
  1903.  DCALL0(PGETUID);\
  1904.  RESTOREREGS\
  1905.  GETSWREG(0,_UID)
  1906.  
  1907. #define p_setuid(_UID,_RES)\
  1908.  SAVEREGS\
  1909.  DCALL1w(PSETUID,_UID);\
  1910.  RESTOREREGS\
  1911.  GETSWREG(0,_RES)
  1912.  
  1913. #define p_kill(_PID,_SIG,_RES)\
  1914.  SAVEREGS\
  1915.  DCALL2w(PKILL,_PID,_SIG);\
  1916.  RESTOREREGS\
  1917.  GETSWREG(0,_RES)
  1918.  
  1919. #define p_signal(_SIG,_HANDLER,_OLD)\
  1920.  SAVEREGS\
  1921.  DCALL1w1l(PSIGNAL,_SIG,_HANDLER);\
  1922.  RESTOREREGS\
  1923.  GETREGADR(0,_OLD)
  1924.  
  1925. #define p_vfork(_RES)\
  1926.  SAVEREGS\
  1927.  DCALL0(PVFORK);\
  1928.  RESTOREREGS\
  1929.  GETSWREG(0,_RES)
  1930.  
  1931. #define p_getgid(_GID)\
  1932.  SAVEREGS\
  1933.  DCALL0(PGETGID);\
  1934.  RESTOREREGS\
  1935.  GETSWREG(0,_GID)
  1936.  
  1937. #define p_setgid(_GID,_RES)\
  1938.  SAVEREGS\
  1939.  DCALL1w(PSETGID,_GID);\
  1940.  RESTOREREGS\
  1941.  GETSWREG(0,_RES)
  1942.  
  1943. #define p_sigblock(_MASK,_OLD)\
  1944.  SAVEREGS\
  1945.  DCALL1l(PSIGBLOCK,_MASK);\
  1946.  RESTOREREGS\
  1947.  GETLREG(0,_OLD)
  1948.  
  1949. #define p_sigsetmask(_MASK,_OLD)\
  1950.  SAVEREGS\
  1951.  DCALL1l(PSIGSETMASK,_MASK);\
  1952.  RESTOREREGS\
  1953.  GETLREG(0,_OLD)
  1954.  
  1955. #define p_usrval(_ARG,_VAL)\
  1956.  SAVEREGS\
  1957.  DCALL1l(PUSRVAL,_ARG);\
  1958.  RESTOREREGS\
  1959.  GETLREG(0,_VAL)
  1960.  
  1961. #define p_domain(_DOM,_OLD)\
  1962.  SAVEREGS\
  1963.  DCALL1w(PDOMAIN,_DOM);\
  1964.  RESTOREREGS\
  1965.  GETSWREG(0,_OLD)
  1966.  
  1967. #define p_sigreturn()\
  1968.  SAVEREGS\
  1969.  DCALL0(PSIGRETURN);\
  1970.  RESTOREREGS
  1971.  
  1972. #define p_fork(_RES)\
  1973.  SAVEREGS\
  1974.  DCALL0(PFORK);\
  1975.  RESTOREREGS\
  1976.  GETSWREG(0,_RES)
  1977.  
  1978. #define p_wait3(_FLAG,_RUSAGE,_RES)\
  1979.  SAVEREGS\
  1980.  DCALL1w1l(PWAIT3,_FLAG,_RUSAGE);\
  1981.  RESTOREREGS\
  1982.  GETLREG(0,_RES)
  1983.  
  1984. #define f_select(_TIMEOUT,_RFDS,_WFDS,_XFDS,_RES)\
  1985.  SAVEREGS\
  1986.  DCALL1w3l(FSELECT,_TIMEOUT,_RFDS,_WFDS,_XFDS);\
  1987.  RESTOREREGS\
  1988.  GETSWREG(0,_RES)
  1989.  
  1990. #define p_rusage(_RSCADR,_RES)\
  1991.  SAVEREGS\
  1992.  DCALL1l(PRUSAGE,_RSCADR);\
  1993.  RESTOREREGS\
  1994.  GETSWREG(0,_RES)
  1995.  
  1996. #define p_setlimit(_LIM,_VAL,_OLD)\
  1997.  SAVEREGS\
  1998.  DCALL1w1l(PSETLIMIT,_LIM,_VAL);\
  1999.  RESTOREREGS\
  2000.  GETLREG(0,_OLD)
  2001.  
  2002. #define t_alarm(_SECS,_OLD)\
  2003.  SAVEREGS\
  2004.  DCALL1l(TALARM,_SECS);\
  2005.  RESTOREREGS\
  2006.  GETLREG(0,_OLD)
  2007.  
  2008. #define p_ause(_RES)\
  2009.  SAVEREGS\
  2010.  DCALL0(PAUSE);\
  2011.  RESTOREREGS\
  2012.  GETSWREG(0,_RES)
  2013.  
  2014. #define s_ysconf(_WHICH,_VAL)\
  2015.  SAVEREGS\
  2016.  DCALL1w(SYSCONF,_WHICH);\
  2017.  RESTOREREGS\
  2018.  GETLREG(0,_VAL)
  2019.  
  2020. #define p_sigpending(_SIGS)\
  2021.  SAVEREGS\
  2022.  DCALL0(PSIGPENDING);\
  2023.  RESTOREREGS\
  2024.  GETLREG(0,_SIGS)
  2025.  
  2026. #define d_pathconf(_NAME,_WHICH,_VAL)\
  2027.  SAVEREGS\
  2028.  DCALL1l1w(DPATHCONF,_NAME,_WHICH);\
  2029.  RESTOREREGS\
  2030.  GETLREG(0,_VAL)
  2031.  
  2032. #define p_msg(_MODE,_MBOXID,_MSGPTR,_RES)\
  2033.  SAVEREGS\
  2034.  DCALL1w2l(PMSG,_MODE,_MBOXID,_MSGPTR);\
  2035.  RESTOREREGS\
  2036.  GETSWREG(0,_RES)
  2037.  
  2038. #define f_midipipe(_PID,_IN,_OUT,_RES)\
  2039.  SAVEREGS\
  2040.  DCALL3w(FMIDIPIPE,_PID,_IN,_OUT);\
  2041.  RESTOREREGS\
  2042.  GETSWREG(0,_RES)
  2043.  
  2044. #define p_renice(_PID,_DELTA,_CURRENT)\
  2045.  SAVEREGS\
  2046.  DCALL2w(PRENICE,_PID,_DELTA);\
  2047.  RESTOREREGS\
  2048.  GETLREG(0,_CURRENT)
  2049.  
  2050. #define d_opendir(_NAME,_FLAG,_DIR)\
  2051.  SAVEREGS\
  2052.  DCALL1l1w(DOPENDIR,_NAME,_FLAG);\
  2053.  RESTOREREGS\
  2054.  GETLREG(0,_DIR)
  2055.  
  2056. #define d_readdir(_LEN,_DIR,_BUF,_RES)\
  2057.  SAVEREGS\
  2058.  DCALL1w2l(DREADDIR,_LEN,_DIR,_BUF);\
  2059.  RESTOREREGS\
  2060.  GETSWREG(0,_RES)
  2061.  
  2062. #define d_rewinddir(_DIR,_RES)\
  2063.  SAVEREGS\
  2064.  DCALL1l(DREWINDDIR,_DIR);\
  2065.  RESTOREREGS\
  2066.  GETSWREG(0,_RES)
  2067.  
  2068. #define d_closedir(_DIR,_RES)\
  2069.  SAVEREGS\
  2070.  DCALL1l(DCLOSEDIR,_DIR);\
  2071.  RESTOREREGS\
  2072.  GETSWREG(0,_RES)
  2073.  
  2074. #define f_xattr(_FLAG,_NAME,_XATTR,_RES)\
  2075.  SAVEREGS\
  2076.  DCALL1w2l(FXATTR,_FLAG,_NAME,_XATTR);\
  2077.  RESTOREREGS\
  2078.  GETSWREG(0,_RES)
  2079.  
  2080. #define f_link(_OLD,_NEW,_RES)\
  2081.  SAVEREGS\
  2082.  DCALL2l(FLINK,_OLD,_NEW);\
  2083.  RESTOREREGS\
  2084.  GETSWREG(0,_RES)
  2085.  
  2086. #define f_symlink(_OLD,_NEW,_RES)\
  2087.  SAVEREGS\
  2088.  DCALL2l(FSYMLINK,_OLD,_NEW);\
  2089.  RESTOREREGS\
  2090.  GETSWREG(0,_RES)
  2091.  
  2092. #define f_readlink(_BUFSIZ,_BUF,_NAME,_RES)\
  2093.  SAVEREGS\
  2094.  DCALL1w2l(FREADLINK,_BUFSIZ,_BUF,_NAME);\
  2095.  RESTOREREGS\
  2096.  GETSWREG(0,_RES)
  2097.  
  2098. #define d_cntl(_CMD,_NAME,_ARG,_RES)\
  2099.  SAVEREGS\
  2100.  DCALL1w2l(DCNTL,_CMD,_NAME,_ARG);\
  2101.  RESTOREREGS\
  2102.  GETLREG(0,_RES)
  2103.  
  2104. #define f_chown(_FILE,_UID,_GID,_RES)\
  2105.  SAVEREGS\
  2106.  DCALL1l2w(FCHOWN,_FILE,_UID,_GID);\
  2107.  RESTOREREGS\
  2108.  GETSWREG(0,_RES)
  2109.  
  2110. #define f_chmod(_FILE,_MODE,_RES)\
  2111.  SAVEREGS\
  2112.  DCALL1l1w(FCHMOD,_FILE,_MODE);\
  2113.  RESTOREREGS\
  2114.  GETSWREG(0,_RES)
  2115.  
  2116. #define p_umask(_MODE,_OLD)\
  2117.  SAVEREGS\
  2118.  DCALL1w(PUMASK,_MODE);\
  2119.  RESTOREREGS\
  2120.  GETLREG(0,_OLD)
  2121.  
  2122. #define p_semaphore(_MODE,_ID,_TOUT,_RES)\
  2123.  SAVEREGS\
  2124.  DCALL1w2l(PSEMAPHORE,_MODE,_ID,_TOUT);\
  2125.  RESTOREREGS\
  2126.  GETLREG(0,_RES)
  2127.  
  2128. #define d_lock(_MODE,_DRV,_RES)\
  2129.  SAVEREGS\
  2130.  DCALL2w(DLOCK,_MODE,_DRV);\
  2131.  RESTOREREGS\
  2132.  GETSWREG(0,_RES)
  2133.  
  2134. #define p_sigpause(_SIGMASK,_RES)\
  2135.  SAVEREGS\
  2136.  DCALL1l(PSIGPAUSE,_SIGMASK);\
  2137.  RESTOREREGS\
  2138.  GETSWREG(0,_RES)
  2139.  
  2140. #define p_sigaction(_SIG,_ACT,_OACT,_RES)\
  2141.  SAVEREGS\
  2142.  DCALL1w2l(PSIGACTION,_SIG,_ACT,_OACT);\
  2143.  RESTOREREGS\
  2144.  GETSWREG(0,_RES)
  2145.  
  2146. #define p_geteuid(_EUID)\
  2147.  SAVEREGS\
  2148.  DCALL0(PGETEUID);\
  2149.  RESTOREREGS\
  2150.  GETSWREG(0,_EUID)
  2151.  
  2152. #define p_getegid(_EGID)\
  2153.  SAVEREGS\
  2154.  DCALL0(PGETEGID);\
  2155.  RESTOREREGS\
  2156.  GETSWREG(0,_EGID)
  2157.  
  2158. #define p_waitpid(_PID,_FLAG,_RUSAGE,_RES)\
  2159.  SAVEREGS\
  2160.  DCALL2w1l(PWAITPID,_PID,_FLAG,_RUSAGE);\
  2161.  RESTOREREGS\
  2162.  GETLREG(0,_RES)
  2163.  
  2164. #define d_getcwd(_PATH,_DRV,_SIZE,_RES)\
  2165.  SAVEREGS\
  2166.  DCALL1l2w(DGETCWD,_PATH,_DRV,_SIZE);\
  2167.  RESTOREREGS\
  2168.  GETSWREG(0,_RES)
  2169.  
  2170. #define s_alert(_MSG,_RES)\
  2171.  SAVEREGS\
  2172.  DCALL1l(SALERT,_MSG);\
  2173.  RESTOREREGS\
  2174.  GETSWREG(0,_RES)
  2175.  
  2176. #define t_malarm(_MSECS,_OLD)\
  2177.  SAVEREGS\
  2178.  DCALL1l(TMALARM,_MSECS);\
  2179.  RESTOREREGS\
  2180.  GETLREG(0,_OLD)
  2181.  
  2182.