mloopc 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. .sect .text
  2. .sect .rom
  3. .sect .data
  4. .retaddr:
  5. .data4 0
  6. .sect .bss
  7. .sect .text
  8. !THIS FILE CONTAINS THE SYSTEM CALLS FOR PMDS-II AS SUBROUTINES FOR THE
  9. !EM-INTERPRETER. a5 CONTAINS A POINTER TO THE RETURN AREA . EACH SUBROUTINE
  10. !EXPECTS ITS DATA IN THE FORM EM PRODUCES AND GIVES ITS RESULTS AS EM
  11. !REQUIRES.
  12. !THE PMDS-II REQUIRES THE ARGUMENTS ON THE STACK AS 4 BYTE INTEGERS OR
  13. !POINTERS , AND USES THE C-CALLING CONVENTION. THE 2 BYTE WORDS 4 BYTE
  14. !POINTERS VERSION HAS TO DO SOME CONVERSION FIRST .
  15. _Xexit: move.l (sp)+,.retaddr
  16. #ifndef lword
  17. bsr st241
  18. #endif
  19. jsr __exit
  20. _Xfork: move.l (sp)+,.retaddr
  21. jsr _fork
  22. tst.l d0
  23. blt 2f
  24. bne 1f
  25. jsr _getpid
  26. mov d1,-(sp) !PID OF PARENT IN d1
  27. mov #1,-(sp) !(PID OF CHILD IN D0),FLAG 1 IN CHILD
  28. bra 0f
  29. 1: mov d0,-(sp) !PID OF CHILD IN d0
  30. cl -(sp) !FLAG 0 IN PARENT
  31. 0: cl -(sp)
  32. bra 3f
  33. 2: move.l _errno,d0
  34. mov d0,-(sp)
  35. mov d0,-(sp)
  36. 3: move.l .retaddr,a0
  37. jmp (a0)
  38. !_Xfork is special
  39. _Xread: move.l (sp)+,.retaddr
  40. #ifndef lword
  41. bsr st241
  42. #endif
  43. jsr _read
  44. sys0: lea 12(sp),sp
  45. cmp.l #-1,d0
  46. bne 1f
  47. move.l _errno,d0
  48. mov d0,-(sp)
  49. mov d0,-(sp)
  50. bra 2f
  51. 1: move.l d0,-(sp)
  52. cl -(sp)
  53. 2: move.l .retaddr,a0
  54. jmp (a0)
  55. _Xwrite: move.l (sp)+,.retaddr
  56. #ifndef lword
  57. bsr st241
  58. #endif
  59. jsr _write
  60. bra sys0
  61. _Xopen: move.l (sp)+,.retaddr
  62. #ifndef lword
  63. bsr st243
  64. #endif
  65. jsr _open
  66. sys1: lea 8(sp),sp
  67. sys5: cmp.l #-1,d0
  68. bne 1f
  69. move.l _errno,d0
  70. mov d0,-(sp)
  71. mov d0,-(sp)
  72. bra 2f
  73. 1: mov d0,-(sp)
  74. cl -(sp)
  75. 2: move.l .retaddr,a0
  76. jmp (a0)
  77. _Xclose: move.l (sp)+,.retaddr
  78. #ifndef lword
  79. bsr st241
  80. #endif
  81. jsr _close
  82. sys3: lea 4(sp),sp
  83. sys4: cmp.l #-1,d0
  84. bne 1f
  85. move.l _errno,d0
  86. mov d0,-(sp)
  87. mov d0,-(sp)
  88. bra 2f
  89. 1: cl -(sp)
  90. 2: move.l .retaddr,a0
  91. jmp (a0)
  92. _Xwait: move.l (sp)+,.retaddr
  93. .sect .data
  94. xxxx:
  95. .data4 0, 0
  96. .sect .text
  97. move.l #xxxx,-(sp)
  98. jsr _wait
  99. add.l #4,sp
  100. sys6: cmp.l #-1,d0
  101. bne 1f
  102. move.l _errno,d0
  103. mov d0,-(sp)
  104. mov d0,-(sp)
  105. bra 2f
  106. 1: mov xxxx+4,-(sp) ! ??
  107. mov xxxx,-(sp)
  108. cl -(sp)
  109. 2: move.l .retaddr,a0
  110. jmp (a0)
  111. _Xcreat: move.l (sp)+,.retaddr
  112. #ifndef lword
  113. bsr st243
  114. #endif
  115. jsr _creat
  116. bra sys1
  117. _Xlink: move.l (sp)+,.retaddr
  118. jsr _link
  119. lea 8(sp),sp
  120. bra sys4
  121. _Xunlink: move.l (sp)+,.retaddr
  122. jsr _unlink
  123. bra sys3
  124. _Xchdir: move.l (sp)+,.retaddr
  125. jsr _chdir
  126. bra sys3
  127. _Xmknod: move.l (sp)+,.retaddr
  128. #ifndef lword
  129. bsr st244
  130. #endif
  131. jsr _mknod
  132. lea 12(sp),sp
  133. bra sys4
  134. _Xchmod: move.l (sp)+,.retaddr
  135. #ifndef lword
  136. bsr st243
  137. #endif
  138. jsr _chmod
  139. lea 8(sp),sp
  140. bra sys4
  141. _Xchown: move.l (sp)+,.retaddr
  142. #ifndef lword
  143. bsr st244
  144. #endif
  145. jsr _chown
  146. lea 12(sp),sp
  147. bra sys4
  148. _Xbreak: move.l (sp)+,.retaddr
  149. jsr _brk
  150. lea 4(sp),sp
  151. cmp.l #-1,d0
  152. bne 1f
  153. move.l _errno,d0
  154. mov d0,-(sp)
  155. mov d0,-(sp)
  156. bra 2f
  157. 1: move.l -4(sp),nd
  158. cl -(sp)
  159. 2: move.l .retaddr,a0
  160. jmp (a0)
  161. .sect .data
  162. nd: .data4 endbss
  163. .sect .text
  164. _Xstat: move.l (sp)+,.retaddr
  165. jsr _stat
  166. lea 8(sp),sp
  167. bra sys4
  168. _Xlseek: move.l (sp)+,.retaddr
  169. #ifndef lword
  170. bsr st245
  171. #endif
  172. jsr _lseek
  173. lea 12(sp),sp
  174. cmp.l #-1,d0
  175. bne 1f
  176. move.l _errno,d0
  177. mov d0,-(sp)
  178. mov d0,-(sp)
  179. bra 2f
  180. 1: move.l d0,-(sp)
  181. cl -(sp)
  182. 2: move.l .retaddr,a0
  183. jmp (a0)
  184. _Xgetpid: move.l (sp)+,.retaddr
  185. jsr _getpid
  186. mov d0,-(sp)
  187. move.l .retaddr,a0
  188. jmp (a0)
  189. _Xmount: move.l (sp)+,.retaddr
  190. #ifndef lword
  191. bsr st246
  192. #endif
  193. jsr _mount
  194. lea 12(sp),sp
  195. bra sys4
  196. _Xumount: move.l (sp)+,.retaddr
  197. jsr _umount
  198. bra sys3
  199. _Xsetuid: move.l (sp)+,.retaddr
  200. #ifndef lword
  201. bsr st241
  202. #endif
  203. jsr _setuid
  204. bra sys3
  205. _Xgetuid: move.l (sp)+,.retaddr
  206. jsr _getuid
  207. sys7: mov d1,-(sp)
  208. mov d0,-(sp)
  209. move.l .retaddr,a0
  210. jmp (a0)
  211. _Xstime: move.l (sp)+,.retaddr
  212. jsr _stime
  213. bra sys3
  214. _Xptrace: move.l (sp)+,.retaddr
  215. #ifndef lword
  216. bsr st247
  217. #endif
  218. jsr _ptrace
  219. lea 16(sp),sp
  220. bra sys5
  221. _Xalarm: move.l (sp)+,.retaddr
  222. #ifndef lword
  223. sub.l #2,sp
  224. clr.w (sp)
  225. #endif
  226. jsr _alarm
  227. lea 4(sp),sp
  228. mov d0,-(sp)
  229. move.l .retaddr,a0
  230. jmp (a0)
  231. _Xfstat: move.l (sp)+,.retaddr
  232. #ifndef lword
  233. bsr st241
  234. #endif
  235. jsr _fstat
  236. lea 8(sp),sp
  237. bra sys4
  238. _Xpause: jsr _pause
  239. rts
  240. _Xutime: move.l (sp)+,.retaddr
  241. jsr _utime
  242. lea 8(sp),sp
  243. bra sys4
  244. _Xaccess: move.l (sp)+,.retaddr
  245. #ifndef lword
  246. bsr st243
  247. #endif
  248. jsr _access
  249. lea 8(sp),sp
  250. bra sys4
  251. _Xnice: move.l (sp)+,.retaddr
  252. #ifndef lword
  253. bsr 241
  254. #endif
  255. jsr _nice
  256. move.l .retaddr,(sp)
  257. rts
  258. _Xftime: move.l (sp)+,.retaddr
  259. jsr _ftime
  260. bra sys3
  261. _Xsync: jsr _sync
  262. rts
  263. _Xkill: move.l (sp)+,.retaddr
  264. #ifndef lword
  265. bsr st248
  266. #endif
  267. jsr _kill
  268. lea 4(sp),sp
  269. bra sys4
  270. _Xdup: move.l (sp)+,.retaddr
  271. #ifndef lword
  272. bsr st248
  273. #endif
  274. jsr _dup
  275. bra sys1
  276. _Xpipe: move.l (sp)+,.retaddr
  277. move.l #xxxx,-(sp)
  278. jsr _pipe
  279. add.l #4,sp
  280. bra sys6
  281. _Xtimes: move.l (sp)+,.retaddr
  282. jsr _times
  283. move.l .retaddr,a0
  284. add.l #4,sp
  285. jmp (a0)
  286. _Xprofil: move.l (sp)+,.retaddr
  287. jsr _profil
  288. move.l .retaddr,a0
  289. lea 16(sp),sp
  290. jmp (a0)
  291. _Xsetgid: move.l (sp)+,.retaddr
  292. #ifndef lword
  293. bsr st241
  294. #endif
  295. jsr _setgid
  296. bra sys3
  297. _Xgetgid: move.l (sp)+,.retaddr
  298. jsr _getpid
  299. bra sys7
  300. _Xsignal: move.l (sp)+,.retaddr
  301. mov (sp)+,d4
  302. extend d4
  303. move.l d4,-(sp)
  304. move.l .retaddr,-(sp)
  305. jsr _signal
  306. lea 12(sp),sp !remove arguments
  307. cmp.l #-1,d0
  308. bne 1f
  309. move.l _errno,d0
  310. mov d0,-(sp)
  311. mov d0,-(sp)
  312. bra 2f
  313. 1:
  314. mov d0,-(sp)
  315. cl -(sp)
  316. 2:
  317. move.l .retaddr,a0
  318. jmp (a0)
  319. _Xacct: move.l (sp)+,.retaddr
  320. jsr _acct
  321. bra sys3
  322. !_Xlock: move.l (sp)+,.retaddr
  323. !#ifndef lword
  324. ! bsr st241
  325. !#endif
  326. ! jsr _lock
  327. ! bra sys3
  328. _Xioctl: move.l (sp)+,.retaddr
  329. #ifndef lword
  330. bsr st248
  331. #endif
  332. jsr _ioctl
  333. lea 12(sp),sp
  334. bra sys4
  335. !_Xmpxcall: move.l (sp)+,.retaddr
  336. !#ifndef lword
  337. ! bsr st241
  338. !#endif
  339. ! trap #0
  340. ! .data2 56
  341. ! lea 12(sp),sp
  342. ! bra sys4
  343. _Xexece: move.l (sp)+,.retaddr
  344. jsr _execve
  345. lea 12(sp),sp
  346. bra sys4
  347. _Xumask: move.l (sp)+,.retaddr
  348. #ifndef lword
  349. bsr st241
  350. #endif
  351. jsr _umask
  352. add.l #4,sp
  353. mov d0,-(sp)
  354. move.l .retaddr,a0
  355. jmp (a0)
  356. _Xchroot: move.l (sp)+,.retaddr
  357. jsr _chroot
  358. bra sys3
  359. !----------------------------------------------------------------------------
  360. ! STACK ADJUSTMENT FOR THE TWO BYTE INTERPRETER
  361. !-----------------------------------------------------------------------------
  362. #ifndef lword
  363. st241: sub.l #2,sp
  364. move.l 2(sp),(sp)
  365. move.w 6(sp),d0
  366. ext.l d0
  367. move.l d0,4(sp)
  368. rts
  369. st243: sub.l #2,sp
  370. move.l 2(sp),(sp)
  371. move.l 6(sp),4(sp)
  372. move.w 10(sp),d0
  373. ext.l d0
  374. move.l d0,8(sp)
  375. rts
  376. st244: move.l (sp),-(sp)
  377. move.l 8(sp),4(sp)
  378. move.w 12(sp),d0
  379. ext.l d0
  380. move.l d0,8(sp)
  381. move.w 16(sp),d0
  382. ext.l d0
  383. move.l d0,12(sp)
  384. rts
  385. st245: move.l (sp),-(sp)
  386. move.w 8(sp),d0
  387. ext.l d0
  388. move.l d0,4(sp)
  389. move.l 10(sp),8(sp)
  390. move.w 14(sp),d0
  391. ext.l d0
  392. move.l d0,12(sp)
  393. rts
  394. st246: sub.l #2,sp
  395. move.l 2(sp),(sp)
  396. move.l 6(sp),4(sp)
  397. move.l 10(sp),8(sp)
  398. move.w 14(sp),d0
  399. ext.l d0
  400. move.l d0,12(sp)
  401. rts
  402. st247: sub.l #6,sp
  403. move.l 6(sp),(sp)
  404. move.w 10(sp),d0
  405. ext.l d0
  406. move.l d0,4(sp)
  407. move.w 12(sp),d0
  408. ext.l d0
  409. move.l d0,8(sp)
  410. move.l 14(sp),12(sp)
  411. move.w 18(sp),d0
  412. ext.l d0
  413. move.l d0,16(sp)
  414. rts
  415. st248: move.l (sp),-(sp)
  416. move.w 8(sp),d0
  417. ext.l d0
  418. move.l d0,4(sp)
  419. move.w 10(sp),d0
  420. ext.l d0
  421. move.l d0,8(sp)
  422. rts
  423. #endif