!THIS FILE CONTAINS THE SYSTEM CALLS FOR PMDS-II AS SUBROUTINES FOR THE !EM-INTERPRETER. a1 CONTAINS A POINTER TO THE RETURN AREA . EACH SUBROUTINE !EXPECTS ITS DATA IN THE FORM EM PRODUCES AND GIVES ITS RESULTS AS EM !REQUIRES _exit: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 1 _fork: move.l (sp),(a1) trap #0 .short 2 lea 4(sp),sp bcs 2f tst.l d0 !PID OF CHILD IN PARENT, 0 IN CHILD bne 1f trap #0 .short 20 mov d1,-(sp) !PID OF PARENT IN d1 mov #1,-(sp) !(PID OF CHILD IN D0),FLAG 1 IN CHILD bra 0f 1: mov d0,-(sp) !PID OF CHILD IN d0 cl -(sp) !FLAG 0 IN PARENT 0: cl -(sp) bra 3f 2: mov d0,-(sp) mov d0,-(sp) 3: move.l (a1),a0 jmp (a0) !_fork is special _read: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 3 sys0: lea 16(sp),sp bcc 1f mov d0,-(sp) mov d0,-(sp) bra 2f 1: move.l d0,-(sp) cl -(sp) 2: move.l (a1),a0 jmp (a0) _write: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 4 bra sys0 _open: move.l (sp),(a1) #ifndef lword bsr st243 #endif trap #0 .short 5 sys1: lea 12(sp),sp sys5: bcc 1f mov d0,-(sp) mov d0,-(sp) bra 2f 1: mov d0,-(sp) cl -(sp) 2: move.l (a1),a0 jmp (a0) _close: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 6 sys3: lea 8(sp),sp sys4: bcc 1f mov d0,-(sp) mov d0,-(sp) bra 2f 1: cl -(sp) 2: move.l (a1),a0 jmp (a0) _wait: move.l (sp),(a1) trap #0 .short 7 sys6: lea 4(sp),sp bcc 1f mov d0,-(sp) mov d0,-(sp) bra 2f 1: mov d1,-(sp) ! ?? mov d0,-(sp) cl -(sp) 2: move.l (a1),a0 jmp (a0) _creat: move.l (sp),(a1) #ifndef lword bsr st243 #endif trap #0 .short 8 bra sys1 _link: move.l (sp),(a1) trap #0 .short 9 lea 12(sp),sp bra sys4 _unlink: move.l (sp),(a1) trap #0 .short 10 bra sys3 _chdir: move.l (sp),(a1) trap #0 .short 12 bra sys3 _mknod: move.l (sp),(a1) #ifndef lword bsr st244 #endif trap #0 .short 14 lea 16(sp),sp bra sys4 _chmod: move.l (sp),(a1) #ifndef lword bsr st243 #endif trap #0 .short 15 lea 12(sp),sp bra sys4 _chown: move.l (sp),(a1) #ifndef lword bsr st244 #endif trap #0 .short 16 lea 16(sp),sp bra sys4 _break: move.l (sp),(a1) trap #0 .short 17 lea 8(sp),sp bcc 1f mov d0,-(sp) mov d0,-(sp) bra 2f 1: move.l -4(sp),nd cl -(sp) 2: move.l (a1),a0 jmp (a0) .data nd: .long endbss .text _stat: move.l (sp),(a1) trap #0 .short 18 lea 12(sp),sp bra sys4 _lseek: move.l (sp),(a1) #ifndef lword bsr st245 #endif trap #0 .short 19 lea 16(sp),sp bcc 1f mov d0,-(sp) mov d0,-(sp) bra 2f 1: move.l d1,-(sp) mov d0,-(sp) cl -(sp) 2: move.l (a1),a0 jmp (a0) _getpid: move.l (sp),(a1) trap #0 .short 20 add.l #4,sp mov d0,-(sp) move.l (a1),a0 jmp (a0) _mount: move.l (sp),(a1) #ifndef lword bsr st246 #endif trap #0 .short 21 lea 16(sp),sp bra sys4 _umount: move.l (sp),(a1) trap #0 .short 22 bra sys3 _setuid: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 23 bra sys3 _getuid: move.l (sp),(a1) trap #0 .short 24 sys7: add.l #4,sp mov d1,-(sp) mov d0,-(sp) move.l (a1),a0 jmp (a0) _stime: move.l (sp),(a1) trap #0 .short 25 bra sys3 _ptrace: move.l (sp),(a1) #ifndef lword bsr st247 #endif trap #0 .short 26 lea 20(sp),sp bra sys5 _alarm: move.l (sp),(a1) #ifndef lword sub.l #2,sp clr.w 4(sp) #endif trap #0 .short 27 lea 8(sp),sp mov d0,-(sp) move.l (a1),a0 jmp (a0) _fstat: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 28 lea 12(sp),sp bra sys4 _pause: trap #0 .short 29 rts _utime: move.l (sp),(a1) trap #0 .short 30 lea 12(sp),sp bra sys4 _access: move.l (sp),(a1) #ifndef lword bsr st248 #endif trap #0 .short 33 lea 12(sp),sp bra sys4 _nice: #ifndef lword bsr 241 #endif trap #0 .short 34 move.l (sp)+,(sp) rts _ftime: move.l (sp),(a1) trap #0 .short 35 bra sys3 _sync: trap #0 .short 36 rts _kill: move.l (sp),(a1) #ifndef lword bsr st248 #endif trap #0 .short 37 lea 12(sp),sp bra sys4 _dup: move.l (sp),(a1) #ifndef lword bsr st248 #endif trap #0 .short 38 bra sys1 _pipe: move.l (sp),(a1) trap #0 .short 42 bra sys6 _times: trap #0 .short 43 move.l (sp),a0 add.l #8,sp jmp (a0) _profil: trap #0 .short 44 move.l (sp),a0 lea 20(sp),sp jmp (a0) _setgid: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 46 bra sys3 _getgid: move.l (sp),(a1) trap #0 .short 47 bra sys7 _signal: move.l (sp)+,retaddr mov (sp)+,d4 extend d4 move.l d4,-(sp) move.l retaddr,-(sp) trap #0 .short 48 mov d0,-(sp) bne 1f mov d0,-(sp) 1: move.l retaddr,a0 jmp (a0) .data retaddr: .long 0 .text _acct: move.l (sp),(a1) trap #0 .short 51 bra sys3 _lock: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 53 bra sys3 _ioctl: move.l (sp),(a1) #ifndef lword bsr st248 #endif trap #0 .short 54 lea 16(sp),sp bra sys4 _mpxcall: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 56 lea 12(sp),sp bra sys4 _exece: move.l (sp),(a1) trap #0 .short 59 lea 16(sp),sp bra sys4 _umask: move.l (sp),(a1) #ifndef lword bsr st241 #endif trap #0 .short 60 add.l #8,sp mov d0,-(sp) move.l (a1),a0 jmp (a0) _chroot: move.l (sp),(a1) trap #0 .short 61 bra sys3 !---------------------------------------------------------------------------- ! STACK ADJUSTMENT FOR THE TWO BYTE INTERPRETER !----------------------------------------------------------------------------- #ifndef lword st241: sub.l #2,sp move.l 2(sp),(sp) move.l 6(sp),4(sp) move.w 10(sp),d0 ext.l d0 move.l d0,8(sp) rts st243: sub.l #2,sp move.l 2(sp),(sp) move.l 6(sp),4(sp) move.l 10(sp),8(sp) move.w 14(sp),d0 ext.l d0 move.l d0,12(sp) rts st244: move.l (sp),-(sp) move.l 8(sp),4(sp) move.l 12(sp),8(sp) move.w 16(sp),d0 ext.l d0 move.l d0,12(sp) move.w 18(sp),d0 ext.l d0 move.l d0,16(sp) rts st245: move.l (sp),-(sp) move.l 8(sp),4(sp) move.w 12(sp),d0 ext.l d0 move.l d0,8(sp) move.l 14(sp),12(sp) move.w 18(sp),d0 ext.l d0 move.l d0,16(sp) rts st246: sub.l #2,sp move.l 2(sp),(sp) move.l 6(sp),4(sp) move.l 10(sp),8(sp) move.l 14(sp),12(sp) move.w 18(sp),d0 ext.l d0 move.l d0,16(sp) rts st247: sub.l #6,sp move.l 6(sp),(sp) move.l 10(sp),4(sp) move.w 14(sp),d0 ext.l d0 move.l d0,8(sp) move.w 16(sp),d0 ext.l d0 move.l d0,12(sp) move.l 18(sp),16(sp) move.w 22(sp),d0 ext.l d0 move.l d0,20(sp) rts st248: move.l (sp),-(sp) move.l 8(sp),4(sp) move.w 12(sp),d0 ext.l d0 move.l d0,8(sp) move.w 14(sp),d0 ext.l d0 move.l d0,12(sp) rts #endif