Pristine Ack-5.5
[Ack-5.5.git] / mach / mantra / int / mloopc
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
16 _Xexit:         move.l  (sp)+,.retaddr
17 #ifndef lword
18                 bsr     st241
19 #endif
20                 jsr     __exit
21
22 _Xfork:         move.l  (sp)+,.retaddr
23                 jsr     _fork
24                 tst.l   d0
25                 blt     2f
26                 bne     1f
27                 jsr     _getpid
28                 mov     d1,-(sp)        !PID OF PARENT IN d1
29                 mov     #1,-(sp)        !(PID OF CHILD IN D0),FLAG 1 IN CHILD
30                 bra     0f
31 1:              mov     d0,-(sp)        !PID OF CHILD IN d0
32                 cl      -(sp)           !FLAG 0 IN PARENT
33 0:              cl      -(sp)
34                 bra     3f
35 2:              move.l  _errno,d0
36                 mov     d0,-(sp)
37                 mov     d0,-(sp)
38 3:              move.l  .retaddr,a0
39                 jmp     (a0)
40 !_Xfork is special
41
42 _Xread:         move.l  (sp)+,.retaddr
43 #ifndef lword
44                 bsr     st241
45 #endif
46                 jsr     _read
47 sys0:           lea     12(sp),sp
48                 cmp.l   #-1,d0
49                 bne     1f
50                 move.l  _errno,d0
51                 mov     d0,-(sp)
52                 mov     d0,-(sp)
53                 bra     2f
54 1:              move.l  d0,-(sp)
55                 cl      -(sp)
56 2:              move.l  .retaddr,a0
57                 jmp     (a0)
58
59 _Xwrite:        move.l  (sp)+,.retaddr
60 #ifndef lword
61                 bsr     st241
62 #endif
63                 jsr     _write
64                 bra     sys0
65
66 _Xopen:         move.l  (sp)+,.retaddr
67 #ifndef lword
68                 bsr     st243
69 #endif
70                 jsr     _open
71 sys1:           lea     8(sp),sp
72 sys5:           cmp.l   #-1,d0
73                 bne     1f
74                 move.l  _errno,d0
75                 mov     d0,-(sp)
76                 mov     d0,-(sp)
77                 bra     2f
78 1:              mov     d0,-(sp)
79                 cl      -(sp)
80 2:              move.l  .retaddr,a0
81                 jmp     (a0)
82
83 _Xclose:        move.l  (sp)+,.retaddr
84 #ifndef lword
85                 bsr     st241
86 #endif
87                 jsr     _close
88 sys3:           lea     4(sp),sp
89 sys4:           cmp.l   #-1,d0
90                 bne     1f
91                 move.l  _errno,d0
92                 mov     d0,-(sp)
93                 mov     d0,-(sp)
94                 bra     2f
95 1:              cl      -(sp)
96 2:              move.l  .retaddr,a0
97                 jmp     (a0)
98
99 _Xwait:         move.l  (sp)+,.retaddr
100 .sect .data
101 xxxx:
102         .data4 0
103 .sect .text
104                 move.l  #xxxx,-(sp)
105                 jsr     _wait
106                 add.l   #4,sp
107 sys6:           cmp.l   #-1,d0
108                 bne     1f
109                 move.l  _errno,d0
110                 mov     d0,-(sp)
111                 mov     d0,-(sp)
112                 bra     2f
113 1:              mov     d0,-(sp)                ! ??
114 #ifdef lword
115                 move.l  xxxx,-(sp)
116 #else
117                 move.w  xxxx+2,-(sp)
118 #endif
119                 cl      -(sp)
120 2:              move.l  .retaddr,a0
121                 jmp     (a0)
122
123 _Xcreat:        move.l  (sp)+,.retaddr
124 #ifndef lword
125                 bsr     st243
126 #endif
127                 jsr     _creat
128                 bra     sys1
129
130 _Xlink:         move.l  (sp)+,.retaddr
131                 jsr     _link
132                 lea     8(sp),sp
133                 bra     sys4
134
135 _Xunlink:       move.l  (sp)+,.retaddr
136                 jsr     _unlink
137                 bra     sys3
138
139 _Xchdir:        move.l  (sp)+,.retaddr
140                 jsr     _chdir
141                 bra     sys3
142
143 _Xmknod:        move.l  (sp)+,.retaddr
144 #ifndef lword
145                 bsr     st244
146 #endif
147                 jsr     _mknod
148                 lea     12(sp),sp
149                 bra     sys4
150
151 _Xchmod:        move.l  (sp)+,.retaddr
152 #ifndef lword
153                 bsr     st243
154 #endif
155                 jsr     _chmod
156                 lea     8(sp),sp
157                 bra     sys4
158
159 _Xchown:        move.l  (sp)+,.retaddr
160 #ifndef lword
161                 bsr     st244
162 #endif
163                 jsr     _chown
164                 lea     12(sp),sp
165                 bra     sys4
166
167 _Xbreak:        move.l  (sp)+,.retaddr
168                 jsr     _brk
169                 lea     4(sp),sp
170                 cmp.l   #-1,d0
171                 bne     1f
172                 move.l  _errno,d0
173                 mov     d0,-(sp)
174                 mov     d0,-(sp)
175                 bra     2f
176 1:              move.l  -4(sp),nd
177                 cl      -(sp)
178 2:              move.l  .retaddr,a0
179                 jmp     (a0)
180
181         .sect .data
182 nd:     .data4  endbss
183         .sect .text
184
185 _Xstat:         move.l  (sp)+,.retaddr
186                 jsr     _stat
187                 lea     8(sp),sp
188                 bra     sys4
189
190 _Xlseek:        move.l  (sp)+,.retaddr
191 #ifndef lword
192                 bsr     st245
193 #endif
194                 jsr     _lseek
195                 lea     12(sp),sp
196                 cmp.l   #-1,d0
197                 bne     1f
198                 move.l  _errno,d0
199                 mov     d0,-(sp)
200                 mov     d0,-(sp)
201                 bra     2f
202 1:              move.l  d0,-(sp)
203                 cl      -(sp)
204 2:              move.l  .retaddr,a0
205                 jmp     (a0)
206
207 _Xgetpid:       move.l  (sp)+,.retaddr
208                 jsr     _getpid
209                 mov     d0,-(sp)
210                 move.l  .retaddr,a0
211                 jmp     (a0)
212
213 _Xmount:        move.l  (sp)+,.retaddr
214 #ifndef lword
215                 bsr     st246
216 #endif
217                 jsr     _mount
218                 lea     12(sp),sp
219                 bra     sys4
220
221 _Xumount:       move.l  (sp)+,.retaddr
222                 jsr     _umount
223                 bra     sys3
224
225 _Xsetuid:       move.l  (sp)+,.retaddr
226 #ifndef lword
227                 bsr     st241
228 #endif
229                 jsr     _setuid
230                 bra     sys3
231
232 _Xgetuid:       move.l  (sp)+,.retaddr
233                 jsr     _getuid
234 sys7:           mov     d1,-(sp)
235                 mov     d0,-(sp)
236                 move.l  .retaddr,a0
237                 jmp     (a0)
238
239 _Xstime:        move.l  (sp)+,.retaddr
240                 jsr     _stime
241                 bra     sys3
242
243 _Xptrace:       move.l  (sp)+,.retaddr
244 #ifndef lword
245                 bsr     st247
246 #endif
247                 jsr     _ptrace
248                 lea     16(sp),sp
249                 bra     sys5
250
251 _Xalarm:        move.l  (sp)+,.retaddr
252 #ifndef lword
253                 sub.l   #2,sp
254                 clr.w   (sp)
255 #endif
256                 jsr     _alarm
257                 lea     4(sp),sp
258                 mov     d0,-(sp)
259                 move.l  .retaddr,a0
260                 jmp     (a0)
261
262 _Xfstat:        move.l  (sp)+,.retaddr
263 #ifndef lword
264                 bsr     st241
265 #endif
266                 jsr     _fstat
267                 lea     8(sp),sp
268                 bra     sys4
269
270 _Xpause:        jsr     _pause
271                 rts
272
273 _Xutime:        move.l  (sp)+,.retaddr
274                 jsr     _utime
275                 lea     8(sp),sp
276                 bra     sys4
277
278 _Xaccess:       move.l  (sp)+,.retaddr
279 #ifndef lword
280                 bsr     st243
281 #endif
282                 jsr     _access
283                 lea     8(sp),sp
284                 bra     sys4
285
286 _Xnice:         move.l  (sp)+,.retaddr
287 #ifndef lword
288                 bsr     241
289 #endif
290                 jsr     _nice
291                 move.l  .retaddr,(sp)
292                 rts
293
294 _Xftime:        move.l  (sp)+,.retaddr
295                 jsr     _ftime
296                 bra     sys3
297
298 _Xsync:         jsr     _sync
299                 rts
300
301 _Xkill:         move.l  (sp)+,.retaddr
302 #ifndef lword
303                 bsr     st248
304 #endif
305                 jsr     _kill
306                 lea     4(sp),sp
307                 bra     sys4
308
309 _Xdup:          move.l  (sp)+,.retaddr
310 #ifndef lword
311                 bsr     st248
312 #endif
313                 jsr     _dup
314                 bra     sys1
315
316 _Xpipe:         move.l  (sp)+,.retaddr
317                 move.l  #xxxx,-(sp)
318                 jsr     _pipe
319                 add.l   #4,sp
320                 bra     sys6
321
322 _Xtimes:        move.l  (sp)+,.retaddr
323                 jsr     _times
324                 move.l  .retaddr,a0
325                 add.l   #4,sp
326                 jmp     (a0)
327
328 _Xprofil:       move.l  (sp)+,.retaddr
329                 jsr     _profil
330                 move.l  .retaddr,a0
331                 lea     16(sp),sp
332                 jmp     (a0)
333
334 _Xsetgid:       move.l  (sp)+,.retaddr
335 #ifndef lword
336                 bsr     st241 
337 #endif
338                 jsr     _setgid
339                 bra     sys3
340
341 _Xgetgid:       move.l  (sp)+,.retaddr
342                 jsr     _getgid
343                 bra     sys7
344
345 _Xsignal:       move.l  (sp)+,.retaddr
346                 mov     (sp)+,d4
347                 extend  d4
348                 move.l  d4,-(sp)
349                 jsr     _signal
350                 lea     8(sp),sp                !remove arguments
351                 cmp.l   #-1,d0
352                 bne     1f
353                 move.l  _errno,d0
354                 mov     d0,-(sp)
355                 mov     d0,-(sp)
356                 bra     2f
357 1:
358                 mov     d0,-(sp)
359                 cl      -(sp)
360 2:
361                 move.l  .retaddr,a0
362                 jmp     (a0)
363
364 _Xacct:         move.l  (sp)+,.retaddr
365                 jsr     _acct
366                 bra     sys3
367 !_Xlock:                move.l  (sp)+,.retaddr
368 !#ifndef        lword
369 !               bsr     st241
370 !#endif
371 !               jsr     _lock
372 !               bra     sys3
373
374 _Xioctl:        move.l  (sp)+,.retaddr
375 #ifndef lword
376                 bsr     st248
377 #endif
378 #ifdef __USG
379 ! only support TIOCGETP and TIOCSETP
380                 move.l  4(sp),d0
381                 cmp.l   #0x7408,d0      ! TIOCGETP
382                 bne     1f
383                 move.l  (sp)+,d0
384                 move.l  d0,(sp)
385                 jsr     _gtty
386                 lea     8(sp),sp
387                 bra     sys4
388 1:
389                 cmp.l   #0x7409,d0      ! TIOCSETP
390                 bne     9f
391                 move.l  (sp)+,d0
392                 move.l  d0,(sp)
393                 jsr     _stty
394                 lea     8(sp),sp
395                 bra     sys4
396 #endif
397 #ifdef __BSD4_2
398 .sect .data
399 XXmapping:
400 .data4  0x7408,0x40067408                       ! TIOCGETP
401 .data4  0x7409,0x80067409                       ! TIOCSETP
402 .data4  0x740a,0x8006740a                       ! TIOCSETN
403 .data4  0x740d,0x2000740d                       ! TIOCEXCL
404 .data4  0x740e,0x2000740e                       ! TIOCNXCL
405 .data4  0x7402,0x20007402                       ! TIOCHPCL
406 .data4  0x7412,0x40067412                       ! TIOCGETC
407 .data4  0x7411,0x40067411                       ! TIOCSETC
408 .data4  0
409 .sect .text
410                 lea     XXmapping, a0
411                 move.l  4(sp),d0
412 1:
413                 tst.l   (a0)
414                 beq     9f
415                 cmp.l   (a0),d0
416                 beq     1f
417                 add.l   #8,a0
418                 bra     1b
419 1:
420                 move.l  4(a0),d0
421                 move.l  d0,4(sp)
422 #endif
423 9:
424                 jsr     _ioctl
425                 lea     12(sp),sp
426                 bra     sys4
427
428 !_Xmpxcall:     move.l  (sp)+,.retaddr
429 !#ifndef        lword
430 !               bsr     st241
431 !#endif
432 !               trap    #0
433 !       .data2  56
434 !               lea     12(sp),sp
435 !               bra     sys4
436
437 _Xexece:        move.l  (sp)+,.retaddr
438                 jsr     _execve
439                 lea     12(sp),sp
440                 bra     sys4
441
442 _Xumask:        move.l  (sp)+,.retaddr
443 #ifndef lword
444                 bsr     st241
445 #endif
446                 jsr     _umask
447                 add.l   #4,sp
448                 mov     d0,-(sp)
449                 move.l  .retaddr,a0
450                 jmp     (a0)
451
452 _Xchroot:       move.l  (sp)+,.retaddr
453                 jsr     _chroot
454                 bra     sys3
455
456
457 !----------------------------------------------------------------------------
458 !               STACK ADJUSTMENT FOR THE TWO BYTE INTERPRETER
459 !-----------------------------------------------------------------------------
460 #ifndef lword
461
462 st241:          sub.l   #2,sp
463                 move.l  2(sp),(sp)
464                 move.w  6(sp),d0
465                 ext.l   d0
466                 move.l  d0,4(sp)
467                 rts
468
469 st243:          sub.l   #2,sp
470                 move.l  2(sp),(sp)
471                 move.l  6(sp),4(sp)
472                 move.w  10(sp),d0
473                 ext.l   d0
474                 move.l  d0,8(sp)
475                 rts
476
477 st244:          move.l  (sp),-(sp)
478                 move.l  8(sp),4(sp)
479                 move.w  12(sp),d0
480                 ext.l   d0
481                 move.l  d0,8(sp)
482                 move.w  16(sp),d0
483                 ext.l   d0
484                 move.l  d0,12(sp)
485                 rts
486
487 st245:          move.l  (sp),-(sp)
488                 move.w  8(sp),d0
489                 ext.l   d0
490                 move.l  d0,4(sp)
491                 move.l  10(sp),8(sp)
492                 move.w  14(sp),d0
493                 ext.l   d0
494                 move.l  d0,12(sp)
495                 rts
496
497 st246:          sub.l   #2,sp
498                 move.l  2(sp),(sp)
499                 move.l  6(sp),4(sp)
500                 move.l  10(sp),8(sp)
501                 move.w  14(sp),d0
502                 ext.l   d0
503                 move.l  d0,12(sp)
504                 rts
505
506 st247:          sub.l   #6,sp
507                 move.l  6(sp),(sp)
508                 move.w  10(sp),d0
509                 ext.l   d0
510                 move.l  d0,4(sp)
511                 move.w  12(sp),d0
512                 ext.l   d0
513                 move.l  d0,8(sp)
514                 move.l  14(sp),12(sp)
515                 move.w  18(sp),d0
516                 ext.l   d0
517                 move.l  d0,16(sp)
518                 rts
519
520 st248:          move.l  (sp),-(sp)
521                 move.w  8(sp),d0
522                 ext.l   d0
523                 move.l  d0,4(sp)
524                 move.w  10(sp),d0
525                 ext.l   d0
526                 move.l  d0,8(sp)
527                 rts
528
529 #endif