.sect .text .sect .rom .sect .data .retaddr: .data4 0 .sect .bss .sect .text !THIS FILE CONTAINS THE SYSTEM CALLS FOR PMDS-II AS SUBROUTINES FOR THE !EM-INTERPRETER. a5 CONTAINS A POINTER TO THE RETURN AREA . EACH SUBROUTINE !EXPECTS ITS DATA IN THE FORM EM PRODUCES AND GIVES ITS RESULTS AS EM !REQUIRES. !THE PMDS-II REQUIRES THE ARGUMENTS ON THE STACK AS 4 BYTE INTEGERS OR !POINTERS , AND USES THE C-CALLING CONVENTION. THE 2 BYTE WORDS 4 BYTE !POINTERS VERSION HAS TO DO SOME CONVERSION FIRST . _Xexit: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr __exit _Xfork: move.l (sp)+,.retaddr jsr _fork tst.l d0 blt 2f bne 1f jsr _getpid 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: move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) 3: move.l .retaddr,a0 jmp (a0) !_Xfork is special _Xread: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _read sys0: lea 12(sp),sp cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: move.l d0,-(sp) cl -(sp) 2: move.l .retaddr,a0 jmp (a0) _Xwrite: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _write bra sys0 _Xopen: move.l (sp)+,.retaddr #ifndef lword bsr st243 #endif jsr _open sys1: lea 8(sp),sp sys5: cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: mov d0,-(sp) cl -(sp) 2: move.l .retaddr,a0 jmp (a0) _Xclose: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _close sys3: lea 4(sp),sp sys4: cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: cl -(sp) 2: move.l .retaddr,a0 jmp (a0) _Xwait: move.l (sp)+,.retaddr .sect .data xxxx: .data4 0 .sect .text move.l #xxxx,-(sp) jsr _wait add.l #4,sp sys6: cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: mov d0,-(sp) ! ?? #ifdef lword move.l xxxx,-(sp) #else move.w xxxx+2,-(sp) #endif cl -(sp) 2: move.l .retaddr,a0 jmp (a0) _Xcreat: move.l (sp)+,.retaddr #ifndef lword bsr st243 #endif jsr _creat bra sys1 _Xlink: move.l (sp)+,.retaddr jsr _link lea 8(sp),sp bra sys4 _Xunlink: move.l (sp)+,.retaddr jsr _unlink bra sys3 _Xchdir: move.l (sp)+,.retaddr jsr _chdir bra sys3 _Xmknod: move.l (sp)+,.retaddr #ifndef lword bsr st244 #endif jsr _mknod lea 12(sp),sp bra sys4 _Xchmod: move.l (sp)+,.retaddr #ifndef lword bsr st243 #endif jsr _chmod lea 8(sp),sp bra sys4 _Xchown: move.l (sp)+,.retaddr #ifndef lword bsr st244 #endif jsr _chown lea 12(sp),sp bra sys4 _Xbreak: move.l (sp)+,.retaddr jsr _brk lea 4(sp),sp cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: move.l -4(sp),nd cl -(sp) 2: move.l .retaddr,a0 jmp (a0) .sect .data nd: .data4 endbss .sect .text _Xstat: move.l (sp)+,.retaddr jsr _stat lea 8(sp),sp bra sys4 _Xlseek: move.l (sp)+,.retaddr #ifndef lword bsr st245 #endif jsr _lseek lea 12(sp),sp cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: move.l d0,-(sp) cl -(sp) 2: move.l .retaddr,a0 jmp (a0) _Xgetpid: move.l (sp)+,.retaddr jsr _getpid mov d0,-(sp) move.l .retaddr,a0 jmp (a0) _Xmount: move.l (sp)+,.retaddr #ifndef lword bsr st246 #endif jsr _mount lea 12(sp),sp bra sys4 _Xumount: move.l (sp)+,.retaddr jsr _umount bra sys3 _Xsetuid: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _setuid bra sys3 _Xgetuid: move.l (sp)+,.retaddr jsr _getuid sys7: mov d1,-(sp) mov d0,-(sp) move.l .retaddr,a0 jmp (a0) _Xstime: move.l (sp)+,.retaddr jsr _stime bra sys3 _Xptrace: move.l (sp)+,.retaddr #ifndef lword bsr st247 #endif jsr _ptrace lea 16(sp),sp bra sys5 _Xalarm: move.l (sp)+,.retaddr #ifndef lword sub.l #2,sp clr.w (sp) #endif jsr _alarm lea 4(sp),sp mov d0,-(sp) move.l .retaddr,a0 jmp (a0) _Xfstat: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _fstat lea 8(sp),sp bra sys4 _Xpause: jsr _pause rts _Xutime: move.l (sp)+,.retaddr jsr _utime lea 8(sp),sp bra sys4 _Xaccess: move.l (sp)+,.retaddr #ifndef lword bsr st243 #endif jsr _access lea 8(sp),sp bra sys4 _Xnice: move.l (sp)+,.retaddr #ifndef lword bsr 241 #endif jsr _nice move.l .retaddr,(sp) rts _Xftime: move.l (sp)+,.retaddr jsr _ftime bra sys3 _Xsync: jsr _sync rts _Xkill: move.l (sp)+,.retaddr #ifndef lword bsr st248 #endif jsr _kill lea 4(sp),sp bra sys4 _Xdup: move.l (sp)+,.retaddr #ifndef lword bsr st248 #endif jsr _dup bra sys1 _Xpipe: move.l (sp)+,.retaddr move.l #xxxx,-(sp) jsr _pipe add.l #4,sp bra sys6 _Xtimes: move.l (sp)+,.retaddr jsr _times move.l .retaddr,a0 add.l #4,sp jmp (a0) _Xprofil: move.l (sp)+,.retaddr jsr _profil move.l .retaddr,a0 lea 16(sp),sp jmp (a0) _Xsetgid: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _setgid bra sys3 _Xgetgid: move.l (sp)+,.retaddr jsr _getgid bra sys7 _Xsignal: move.l (sp)+,.retaddr mov (sp)+,d4 extend d4 move.l d4,-(sp) jsr _signal lea 8(sp),sp !remove arguments cmp.l #-1,d0 bne 1f move.l _errno,d0 mov d0,-(sp) mov d0,-(sp) bra 2f 1: mov d0,-(sp) cl -(sp) 2: move.l .retaddr,a0 jmp (a0) _Xacct: move.l (sp)+,.retaddr jsr _acct bra sys3 !_Xlock: move.l (sp)+,.retaddr !#ifndef lword ! bsr st241 !#endif ! jsr _lock ! bra sys3 _Xioctl: move.l (sp)+,.retaddr #ifndef lword bsr st248 #endif #ifdef __USG ! only support TIOCGETP and TIOCSETP move.l 4(sp),d0 cmp.l d0,#0x7408 ! TIOCGETP bne 1f move.l (sp)+,d0 move.l d0,(sp) jsr _gtty lea 8(sp),sp bra sys4 1: cmp.l d0,#0x7409 ! TIOCSETP bne 9f move.l (sp)+,d0 move.l d0,(sp) jsr _stty lea 8(sp),sp bra sys4 #endif #ifdef __BSD4_2 .sect .data XXmapping: .data4 0x7408,0x40067408 ! TIOCGETP .data4 0x7409,0x80067409 ! TIOCSETP .data4 0x740a,0x8006740a ! TIOCSETN .data4 0x740d,0x2000740d ! TIOCEXCL .data4 0x740e,0x2000740e ! TIOCNXCL .data4 0x7402,0x20007402 ! TIOCHPCL .data4 0x7412,0x40067412 ! TIOCGETC .data4 0x7411,0x40067411 ! TIOCSETC .data4 0 .sect .text lea XXmapping, a0 move.l 4(sp),d0 1: tst.l (a0) beq 9f cmp.l (a0),d0 beq 1f add.l #8,a0 bra 1b 1: move.l 4(a0),d0 move.l d0,4(sp) #endif 9: jsr _ioctl lea 12(sp),sp bra sys4 !_Xmpxcall: move.l (sp)+,.retaddr !#ifndef lword ! bsr st241 !#endif ! trap #0 ! .data2 56 ! lea 12(sp),sp ! bra sys4 _Xexece: move.l (sp)+,.retaddr jsr _execve lea 12(sp),sp bra sys4 _Xumask: move.l (sp)+,.retaddr #ifndef lword bsr st241 #endif jsr _umask add.l #4,sp mov d0,-(sp) move.l .retaddr,a0 jmp (a0) _Xchroot: move.l (sp)+,.retaddr jsr _chroot bra sys3 !---------------------------------------------------------------------------- ! STACK ADJUSTMENT FOR THE TWO BYTE INTERPRETER !----------------------------------------------------------------------------- #ifndef lword st241: sub.l #2,sp move.l 2(sp),(sp) move.w 6(sp),d0 ext.l d0 move.l d0,4(sp) rts st243: 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 st244: 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 16(sp),d0 ext.l d0 move.l d0,12(sp) rts st245: move.l (sp),-(sp) move.w 8(sp),d0 ext.l d0 move.l d0,4(sp) move.l 10(sp),8(sp) move.w 14(sp),d0 ext.l d0 move.l d0,12(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.w 14(sp),d0 ext.l d0 move.l d0,12(sp) rts st247: sub.l #6,sp move.l 6(sp),(sp) move.w 10(sp),d0 ext.l d0 move.l d0,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 st248: move.l (sp),-(sp) move.w 8(sp),d0 ext.l d0 move.l d0,4(sp) move.w 10(sp),d0 ext.l d0 move.l d0,8(sp) rts #endif