--- /dev/null
+l=../lib
+
+install: cp
+
+cp: all
+ cp head_em $l/head_em
+ cp tail_em $l/tail_em
+ rm -f head_em tail_em
+
+cmp: all
+ cmp head_em $l/head_em
+ cmp tail_em $l/tail_em
+ rm -f head_em tail_em
+
+all: head_em tail_em
+
+head_em: head_em.s
+ pdp -c head_em.s ; mv head_em.o head_em
+
+tail_em: tail_em.s.a
+ mkdir tmp; \
+ cd tmp; \
+ ar x ../tail_em.s.a; \
+ for i in *.s; \
+ do \
+ pdp -c $$i; \
+ done; \
+ ar cr tail.a `lorder *.o | tsort`; \
+ cp tail.a ../tail_em; \
+ cd ..; \
+ rm -r tmp
+
+clean:
+ -rm -f `ar t tail_em.s.a` ; rm -rf temp ; rm -f *.o
+opr:
+ make pr | opr
+pr:
+ @pr `pwd`/Makefile `pwd`/head_em.s
+ @ar pv tail_em.s.a | pr -h `pwd`/tail_em.s.a
--- /dev/null
+ .globl RT,RTr2,RTr2r4
+
+RTr2r4:
+ mov (sp)+,r4
+RTr2:
+ mov (sp)+,r2
+RT:
+ mov r5,sp
+ mov (sp)+,r5
+ rts pc
--- /dev/null
+.text
+.globl aar~
+
+/r0 : description address
+/r1 : element number
+/base address is on stack
+aar~:
+ sub (r0),r1
+ mov 04(r0),r0
+ mul r0,r1
+ add r1,02(sp)
+ rts pc
--- /dev/null
+.text
+.globl adf~
+.globl setfloat~
+
+/size in r0
+adf~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ movf (sp)+,r0
+ addf (sp)+,r0
+ movf r0,-(sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl adi~
+.globl unknown~
+
+/size in r0
+adi~:
+ mov (sp)+,r1
+ cmp r0,$04
+ bgt 1f
+ cmp r0,$02
+ bgt 2f
+ add (sp)+,(sp)
+ jmp (r1)
+2: add (sp)+,02(sp)
+ add (sp)+,02(sp)
+ adc (sp)
+ jmp (r1)
+1:
+ jmp unknown~
--- /dev/null
+.text
+.globl and~
+.globl save1~
+
+and~:
+ mov (sp)+,save1~
+ mov sp,r1
+ add r0,r1
+ asr r0
+1: com (sp)
+ bic (sp)+,(r1)+
+ sob r0,1b
+ jmp *save1~
--- /dev/null
+.globl blm~
+.globl save~,retu~
+
+/ Size in r0
+blm~:
+ jsr pc,save~
+ mov (sp)+,r2
+ mov (sp)+,r3
+ mov r0,r1
+ asr r0
+ beq 2f
+/ Now avoid wrong copy.
+/ The pieces may overlap !
+ cmp r3,r2
+ beq 2f
+ blt 3f
+1:
+ mov (r3)+,(r2)+
+ sob r0,1b
+2:
+ jmp retu~
+3:
+ add r1,r3
+ add r1,r2
+4:
+ mov -(r3),-(r2)
+ sob r0,4b
+ br 2b
--- /dev/null
+.text
+.globl cff~
+.globl setfloat~
+
+cff~:
+ mov (sp)+,r1
+ mov (sp)+,r0
+ cmp (sp)+,r0
+ beq 1f
+ jsr pc,setfloat~
+ movof (sp)+,r0
+ movf r0,-(sp)
+ setl
+1: jmp (r1)
--- /dev/null
+.text
+.globl cfi~
+.globl setfloat~,setint~
+
+cfi~:
+ mov (sp)+,r1
+ mov (sp)+,r0
+ jsr pc,setint~
+ mov (sp)+,r0
+ jsr pc,setfloat~
+ movf (sp)+,r0
+ movfi r0,-(sp)
+ setl;seti
+ jmp (r1)
--- /dev/null
+.text
+.globl cif~,cuf~
+.globl setint~,setfloat~
+
+cif~:
+ mov (sp)+,r1
+ mov (sp)+,r0
+ jsr pc,setfloat~
+ mov (sp)+,r0
+1: jsr pc,setint~
+ movif (sp)+,r0
+ movf r0,-(sp)
+ setl;seti
+ jmp (r1)
+cuf~:
+ mov (sp)+,r1
+ mov (sp)+,r0
+ jsr pc,setfloat~
+ mov (sp)+,r0
+ cmp r0,$02
+ bne 1b
+ clr -(sp)
+ mov $04,r0
+ br 1b
--- /dev/null
+.text
+.globl cii~
+.globl save1~
+
+/convert int to int
+/ 1 byte -> ? : sign extension
+cii~:
+ mov (sp)+,save1~
+ mov (sp)+,r0
+ sub (sp)+,r0
+ ble 1f
+ asr r0
+ bcc 2f
+ movb (sp),r1
+ mov r1,(sp)
+2: tst r0
+ beq 3f
+ tst (sp)
+4: sxt -(sp)
+ sob r0,4b
+3: jmp *save1~
+1: sub r0,sp
+ jmp *save1~
--- /dev/null
+.text
+.globl cuu~
+cuu~:
+ mov (sp)+,r1
+ mov (sp)+,r0
+ sub (sp)+,r0
+ ble 1f
+ asr r0
+2: clr -(sp)
+ sob r0,2b
+ jmp (r1)
+1: sub r0,sp
+ jmp (r1)
--- /dev/null
+.text
+.globl cmf~
+.globl setfloat~
+
+cmf~:
+ jsr pc,setfloat~
+ mov (sp)+,r1
+ movf (sp)+,r0
+ movf (sp)+,r1
+ clr r0
+ cmpf r0,r1
+ setl
+ cfcc
+ beq 1f
+ blt 2f
+ dec r0
+ jmp (r1)
+2: inc r0
+1: jmp (r1)
--- /dev/null
+.text
+.globl cmi~
+.globl cmi4~,unknown~
+
+/ Size in r0
+cmi~:
+ cmp r0,$02
+ bne 1f
+ mov (sp)+,r1
+ mov (sp)+,r0
+ sub (sp)+,r0
+ neg r0
+ jmp (r1)
+1: cmp r0,$04
+ bne 2f
+ jmp cmi4~
+2: jmp unknown~
--- /dev/null
+.text
+.globl cmi4~
+.globl save1~
+
+cmi4~:
+ mov (sp)+,r1
+ clr r0
+ cmp (sp),4(sp)
+ bgt 1f
+ blt 2f
+ cmp 2(sp),6(sp)
+ bhi 1f
+ beq 3f
+2:
+ inc r0
+ br 3f
+1:
+ dec r0
+3:
+ add $10,sp
+ jmp (r1)
--- /dev/null
+.text
+.globl cms~
+.globl save~,retu~
+
+cms~:
+ jsr pc,save~
+ mov r0,r2
+ add sp,r2
+ mov r2,r4
+ add r0,r4
+ asr r0
+2: cmp (sp)+,(r2)+
+ bne 1f
+ sob r0,2b
+1: mov r4,sp
+ jmp retu~
--- /dev/null
+.text
+.globl cmu~
+.globl unknown~,cmu4~
+
+cmu~:
+ cmp r0,$02
+ bne 3f
+ mov (sp)+,r1
+ clr r0
+ cmp (sp)+,(sp)+
+ beq 2f
+ bhi 1f
+ inc r0
+ br 2f
+1:
+ dec r0
+2:
+ jmp (r1)
+3: cmp r0,$04
+ bne 2f
+ jmp cmu4~
+2: jmp unknown~
--- /dev/null
+ .text
+ .globl cmu4~
+ .globl save~,retu~
+cmu4~:
+ mov (sp)+,r1
+ clr r0
+ cmp (sp),4(sp)
+ bhi 1f
+ blo 2f
+ cmp 2(sp),6(sp)
+ bhi 1f
+ beq 3f
+2:
+ inc r0
+ br 3f
+1:
+ dec r0
+3:
+ add $10,sp
+ jmp (r1)
--- /dev/null
+.text
+.globl csa~
+.globl fat~
+
+ECASE = 20.
+
+csa~:
+ sub 02(r0),r1
+ blt 1f
+ cmp 04(r0),r1
+ blo 1f
+ asl r1
+ add r1,r0
+ mov 06(r0),r1
+ beq 2f
+ jmp (r1)
+1: mov (r0),r0
+ beq 2f
+ jmp (r0)
+2: mov $ECASE,-(sp)
+ jmp fat~
--- /dev/null
+.text
+.globl csb~
+.globl fat~
+
+ECASE = 20.
+
+csb~:
+ mov r3,-(sp)
+ mov (r0)+,-(sp)
+ mov (r0)+,r3
+ beq 1f
+3: cmp (r0)+,r1
+ beq 2f
+ tst (r0)+
+ sob r3,3b
+1: mov (sp)+,r1
+ br 4f
+2: tst (sp)+
+ mov (r0),r1
+4: beq 5f
+ mov (sp)+,r3
+ jmp (r1)
+5: mov (sp)+,r3
+ mov $ECASE,-(sp)
+ jmp fat~
--- /dev/null
+.text
+.globl dup~
+.globl save1~
+
+dup~:
+ mov (sp)+,save1~
+ mov sp,r1
+ add r0,r1
+ asr r0
+1: mov -(r1),-(sp)
+ sob r0,1b
+ jmp *save1~
--- /dev/null
+.text
+.globl dvf~
+.globl setfloat~
+
+dvf~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ movf (sp)+,r0
+ movf (sp)+,r1
+ divf r0,r1
+ movf r1,-(sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl dvi~
+.globl save1~,unknown~,dvi4~
+
+dvi~:
+ mov (sp)+,save1~
+ cmp r0,$04
+ bgt 1f
+ beq 2f
+ mov 02(sp),r1
+ sxt r0
+ div (sp)+,r0
+ mov r0,(sp)
+ br 3f
+2: jsr pc,dvi4~
+ mov r1,-(sp)
+ mov r0,-(sp)
+3: jmp *save1~
+1: jmp unknown~
--- /dev/null
+.text
+.globl dvi4~
+.globl save~,retu~
+
+dvi4~:
+ jsr pc,save~
+ mov 02(sp),r3
+ sxt r4
+ bpl 1f
+ neg r3
+1: cmp r4,(sp)
+ bne hardldiv
+ mov 06(sp),r2
+ mov 04(sp),r1
+ bge 2f
+ neg r1
+ neg r2
+ sbc r1
+ com r4
+2: mov r4,-(sp)
+ clr r0
+ div r3,r0
+ mov r0,-(sp)
+ mov r1,r0
+ mov r1,r4
+ mov r2,r1
+ div r3,r0
+ bvc 3f
+ mov r2,r1
+ mov r4,r0
+ sub r3,r0
+ div r3,r0
+ tst r1
+ sxt r1
+ add r1,r0
+3: mov r0,r1
+ mov (sp)+,r0
+ br 4f
+hardldiv:
+ clr -(sp)
+ mov 010(sp),r2
+ mov 06(sp),r1
+ bpl 5f
+ com (sp)
+ neg r1
+ neg r2
+ sbc r1
+5: clr r0
+ mov 02(sp),r3
+ bge 6f
+ neg r3
+ neg 04(sp)
+ sbc r3
+ com (sp)
+6: mov $16.,r4
+9: clc
+ rol r2
+ rol r1
+ rol r0
+ cmp r3,r0
+ bhi 7f
+ bcs 8f
+ cmp 04(sp),r1
+ blos 8f
+7: sob r4,9b
+ br 1f
+8: sub 04(sp),r1
+ sbc r0
+ sub r3,r0
+ inc r2
+ sob r4,9b
+1:
+ mov r2,r1
+ clr r0
+4: tst (sp)+
+ beq 1f
+ neg r0
+ neg r1
+ sbc r0
+1: add $010,sp
+ jmp retu~
--- /dev/null
+.text
+.globl dvu~
+.globl save1~,unknown~,dvu4~,dvu2~
+
+dvu~:
+ mov (sp)+,save1~
+ cmp r0,$04
+ bgt 1f
+ beq 2f
+ jsr pc,dvu2~
+ mov r0,-(sp)
+ br 3f
+2: jsr pc,dvu4~
+ mov r1,-(sp)
+ mov r0,-(sp)
+3: jmp *save1~
+1: jmp unknown~
--- /dev/null
+.text
+.globl dvu2~
+dvu2~:
+ clr r0
+ mov 04(sp),r1
+ tst 02(sp)
+ blt 1f
+ div 02(sp),r0
+2: mov (sp)+,r1
+ add $04,sp
+ jmp (r1)
+1: cmp 02(sp),r1
+ bhi 2b
+ inc r0
+ br 2b
--- /dev/null
+.text
+.globl dvu4~
+.globl save~,retu~
+
+dvu4~:
+ jsr pc,save~
+ clr r0
+ tst (sp)
+ bne harddvu4
+ tst 02(sp)
+ blt harddvu4
+ mov 06(sp),r2
+ mov 04(sp),r1
+ mov 02(sp),r3
+ div r3,r0
+ mov r0,-(sp)
+ mov r1,r0
+ mov r1,r4
+ mov r2,r1
+ div r3,r0
+ bvc 1f
+ mov r2,r1
+ mov r4,r0
+ sub r3,r0
+ div r3,r0
+ tst r1
+ sxt r1
+ add r1,r0
+1: mov r0,r1
+ mov (sp)+,r0
+ br 2f
+harddvu4:
+ mov 06(sp),r2
+ mov 04(sp),r1
+ mov (sp),r3
+ mov $17.,r4
+ br 3f
+6: rol r2
+ rol r1
+ rol r0
+3: cmp r3,r0
+ bhi 4f
+ blo 5f
+ cmp 02(sp),r1
+ blos 5f
+4: clc
+ sob r4,6b
+ br 7f
+5: sub 02(sp),r1
+ sbc r0
+ sub r3,r0
+ sec
+ sob r4,6b
+7: rol r2
+ bcc 8f
+ mov $01,r0
+ br 9f
+8: clr r0
+9: mov r2,r1
+2: add $010,sp
+ jmp retu~
--- /dev/null
+ .globl eret
+
+eret:
+ mov r5,sp
+ mov (sp)+,r5
+ mov (sp)+,r4
+ mov (sp)+,r2
+ rts pc
--- /dev/null
+ .text
+ .globl exg~
+exg~: jsr pc,save~
+ mov sp,r4
+ sub r0,sp
+ mov sp,r3
+ mov r0,r1
+1:
+ mov (r4)+,(r3)+
+ sob r0,1b
+ asr r1
+ mov sp,r4
+1:
+ mov (r4)+,(r3)+
+ sob r1,1b
+ mov r4,sp
+ jmp retu~
+
--- /dev/null
+.text
+.globl fef~
+.globl setfloat~
+
+fef~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ movf (sp),r0
+ movei r0,-(sp)
+ movie $0,r0
+ movf r0,02(sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl fif~
+.globl setfloat~
+
+fif~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ movf (sp)+,r0
+ modf (sp)+,r0
+ movf r0,-(sp)
+ movf r1,-(sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl gto~
+
+gto~:
+; mov (sp)+,r4
+; mov 4(r4),r5
+; mov 2(r4),sp
+; jmp *(r4)
+
+ mov (sp)+,r3
+1: cmp 4(r3),r5
+ jeq 2f
+ mov 2(r5),r4
+ mov 4(r5),r2
+ br 1b
+2: mov 2(r3),sp
+ jmp *(r3)
--- /dev/null
+ .globl LINO_AD,FILN_AD
+ .globl ERANGE,ESET,EHEAP,EILLINS,ECASE
+ .globl hol0,trppc~,trpim~,reghp~
+
+rti = 2
+stst = 170300 ^ tst
+
+.float = 1 / this should be parameterized somehow
+.hardfp = 1 / only relevant if .float on
+
+LINO_AD = 0.
+FILN_AD = 4.
+
+ERANGE = 1.
+ESET = 2.
+EFOVFL = 4.
+EFUNFL = 5.
+EFDIVZ = 7.
+EFUND = 9.
+ECONV = 10.
+EHEAP = 17.
+EILLINS = 18.
+ECASE = 20.
+
+.if .float
+/ .globl fltused; fltused:
+.if 1 - .hardfp
+/ sys 48.;4.;fptrap / if not commented it will appear as undefined
+.endif
+ sys 48.;8.;sig8
+ ldfps $7600
+.endif
+ mov 2(sp),r0
+ clr -2(r0)
+ mov sp,r0
+ sub $4,sp
+ mov 4(sp),(sp)
+ tst (r0)+
+ mov r0,2(sp)
+1:
+ tst (r0)+
+ bne 1b
+ cmp r0,*2(sp)
+ blo 1f
+ tst -(r0)
+1:
+ mov r0,4(sp)
+ jsr pc,_m_a_i_n
+/ next two lines for as long as tail needs printf
+/ mov r0,-(sp)
+/ jsr pc,*$_exit
+ sys 1.
+
+ .data
+hol0: 0;0 / line no
+ 0;0 / file
+trppc~: 0
+trpim~: 0
+reghp~: _end
+
+ .text
+sig8:
+.if .float
+ mov r0,-(sp)
+ stst r0
+ mov 1f(r0),-(sp)
+ jsr pc,trp~
+ sys 48.;8.;sig8
+ mov (sp)+,r0
+ rti
+
+ .data
+1: EILLINS; EILLINS; EFDIVZ; ECONV; EFOVFL; EFUNFL; EFUND; EILLINS
+ .text
+.endif
--- /dev/null
+.text
+.globl hlt~
+
+exit = 1
+
+hlt~:
+ mov (sp)+,r0
+ bne 1f
+ sys exit
+1: 4
--- /dev/null
+.text
+.globl iaar~
+.globl aar~,trp~
+
+EILLINS = 18.
+
+iaar~:
+ mov (sp)+,r0
+ cmp (sp)+,$02
+ bne 1f
+ mov 02(sp),r1
+ mov r0,02(sp)
+ mov (sp)+,r0
+ jmp aar~
+1: mov $EILLINS,-(sp)
+ jsr pc,trp~
+ add $06,sp
+ jmp (r0)
--- /dev/null
+.text
+.globl ilar~
+.globl lar~,trp~
+
+EILLINS = 18.
+
+ilar~:
+ mov (sp)+,r0
+ cmp (sp)+,$02
+ bne 1f
+ mov 02(sp),r1
+ mov r0,02(sp)
+ mov (sp)+,r0
+ jmp lar~
+1: mov $EILLINS,-(sp)
+ jsr pc,trp~
+ add $06,sp
+ jmp (r0)
--- /dev/null
+.text
+.globl inn~
+
+inn~:
+ mov r0,-(sp)
+ clr r0
+ div $010,r0
+ cmp r0,(sp)
+ bcc 1f
+ add sp,r0
+ add $4,r0
+ bitb bits(r1),(r0)
+ beq 1f
+ mov $01,r0
+ br 2f
+1: clr r0
+2: mov 02(sp),r1
+ add (sp)+,sp
+ tst (sp)+
+ jmp (r1)
+.data
+bits: .byte 1,2,4,10,20,40,100,200
--- /dev/null
+.text
+.globl isar~
+.globl sar~,trp~
+
+EILLINS = 18.
+
+isar~:
+ mov (sp)+,r0
+ cmp (sp)+,$02
+ bne 1f
+ mov 02(sp),r1
+ mov r0,02(sp)
+ mov (sp)+,r0
+ jmp sar~
+1: mov $EILLINS,-(sp)
+ jsr pc,trp~
+ add $06,sp
+ jmp (r0)
--- /dev/null
+.text
+.globl lar~
+.globl save1~
+
+lar~:
+ mov (sp)+,save1~
+ sub (r0),r1
+ mov 04(r0),r0
+ mul r0,r1
+ add (sp)+,r1
+ add r0,r1
+ asr r0
+ beq 1f
+2: mov -(r1),-(sp)
+ sob r0,2b
+ jmp *save1~
+1: clr r0
+ bisb -(r1),r0
+ mov r0,-(sp)
+ jmp *save1~
--- /dev/null
+.text
+.globl los2~
+.globl save1~
+
+los2~:
+ mov (sp)+,save1~
+ cmp r0,$01
+ bne 1f
+ clr -(sp)
+ bisb (r1),(sp)
+ jmp *save1~
+1: add r0,r1
+ asr r0
+2: mov -(r1),-(sp)
+ sob r0,2b
+ jmp *save1~
--- /dev/null
+.text
+.globl mlf~
+.globl setfloat~
+
+mlf~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ movf (sp)+,r0
+ mulf (sp)+,r0
+ movf r0,-(sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl mli~
+.globl save1~,unknown~,mli4~
+
+mli~:
+ cmp r0,$04
+ bgt 1f
+ beq 2f
+ mov (sp)+,r0
+ mov (sp)+,r1
+ mul (sp)+,r1
+ mov r1,-(sp)
+ jmp (r0)
+2: mov (sp)+,save1~
+ jsr pc,mli4~
+ mov r1,-(sp)
+ mov r0,-(sp)
+ jmp *save1~
+1: jmp unknown~
--- /dev/null
+.text
+.globl mli4~
+.globl save~,retu~
+
+mli4~:
+ jsr pc,save~
+ mov 02(sp),r2
+ sxt r1
+ sub (sp),r1
+ mov 06(sp),r0
+ sxt r3
+ sub 04(sp),r3
+ mul r0,r1
+ mul r2,r3
+ add r1,r3
+ mul r2,r0
+ sub r3,r0
+ add $010,sp
+ jmp retu~
--- /dev/null
+.text
+.globl mlu~
+.globl save1~,unknown~,mlu4~
+
+mlu~:
+ cmp r0,$04
+ bgt 1f
+ beq 2f
+ mov (sp)+,r0
+ mov (sp)+,r1
+ mul (sp)+,r1
+ mov r1,-(sp)
+ jmp (r0)
+2: mov (sp)+,save1~
+ jsr pc,mlu4~
+ mov r1,-(sp)
+ mov r0,-(sp)
+ jmp *save1~
+1: jmp unknown~
--- /dev/null
+.text
+.globl mlu4~
+.globl save~,retu~
+
+mlu4~:
+ jsr pc,save~
+ clr r0
+ mov 02(sp),r1
+ mov 06(sp),r3
+ mul r3,r0
+ tst r3
+ bge 1f
+ ashc $15.,r0
+1: mov 02(sp),r3
+ clr r2
+ mul 04(sp),r2
+ add r3,r0
+ mov 06(sp),r3
+ clr r2
+ mul (sp),r2
+ add r3,r0
+ add $010,sp
+ jmp retu~
--- /dev/null
+.text
+.globl mon~
+.globl sigtrp~,save~,retu~,save1~
+
+indir = 0
+fork = 2
+getpid = 20.
+sigtrp = 48.
+EBADMON = 25.
+
+HBMASK = 0177400
+REG01M = 030
+REG1M = 020
+ERRMASK = 040
+
+/ Associated with every monitor call is a descriptor.
+/ The low order three bits describe how values are returned,
+/ the next two bits specify if arguments are expected in
+/ r0 and/or r1, the next bit is not used, and the next
+/ three bits specify the number of arguments disregarding
+/ arguments in registers.
+
+mon~:
+ cmp 02(sp),$sigtrp
+ bne 1f
+ jmp sigtrp~
+1: jsr pc,save~
+ mov (sp)+,r4
+ mov r4,r2
+ asl r4
+ mov args(r4),r3
+ mov r3,r4
+ bit $ERRMASK,r4
+ bne err
+ cmp r2,$fork
+ bne 2f
+ jbr fork~
+2: bic $HBMASK,r2
+ bis $sys,r2
+ mov r2,9f
+ bit $REG01M,r3
+ beq 1f
+ mov (sp)+,r0
+ bit $REG1M,r3
+ beq 1f
+ mov (sp)+,r1
+1: ash $-6,r3
+ beq 2f
+ mov $[9f+2],r2
+1: mov (sp)+,(r2)+
+ sob r3,1b
+2: sys indir ; 9f
+ bcs 2f
+ clr r3
+4: asr r4
+ bcc 1f
+ mov r0,-(sp)
+1: asr r4
+ bcc 1f
+ mov r1,-(sp)
+1: asr r4
+ bcc 1f
+ clr -(sp)
+1: jmp retu~
+2: mov r0,-(sp)
+ mov r0,-(sp)
+ jmp retu~
+fork~:
+ sys fork
+ br 1f
+ bcs 2b
+ clr r1
+ br 4b
+1: mov $1,r1
+ br 4b
+err:
+ mov $EBADMON,-(sp)
+ jsr pc,trp~
+ tst (sp)+
+ jmp retu~
+.data
+.even
+9: .=.+12.
+args: ERRMASK / 0 : error
+ 010 / 1 : exit(st); ---
+ 07 / 2 : fork(); e10
+ 0215 / 3 : read(addr,nb,fild); e-0
+ 0215 / 4 : write(addr,nb,fild); e-0
+ 0205 / 5 : open(str,flag); e-0
+ 014 / 6 : close(fild); e--
+ 07 / 7 : wait(); e10
+ 0205 / 8 : creat(str,mode); e-0
+ 0204 / 9 : link(str1,str2); e--
+ 0104 /10 : unlink(str); e--
+ ERRMASK /11 : error
+ 0104 /12 : chdir(str); e--
+ 03 /13 : time(); -10
+ 0304 /14 : mknod(str,mode,addr); e--
+ 0204 /15 : chmod(str,mode); e--
+ 0304 /16 : chown(str,owner,grp); e--
+ ERRMASK /17 : error
+ 0204 /18 : stat(str,buf); e--
+ 0217 /19 : lseek(high,low,fild); e10
+ 01 /20 : getpid(); --0
+ 0304 /21 : mount(str1,str2,fl); e--
+ 0104 /22 : umount(str); e--
+ 014 /23 : setuid(uid); e--
+ 03 /24 : getuid(); -01
+ 024 /25 : stime(high,low); e--
+ 0315 /26 : ptrace(pid,addr,req,d); e-0
+ 011 /27 : alarm(sec); --0
+ 0114 /28 : fstat(buf,fild); e--
+ 0 /29 : pause(); ---
+ 0204 /30 : utime(str,timep); e--
+ ERRMASK /31 : error
+ ERRMASK /32 : error
+ 0204 /33 : access(str,mode): e--
+ 010 /34 : nice(incr); ---
+ 0100 /35 : ftime(bufp); ---
+ 0 /36 : sync(); ---
+ 0114 /37 : kill(sig,pid); e--
+ ERRMASK /38 : error
+ ERRMASK /39 : error
+ ERRMASK /40 : error
+ 025 /41 : dup(fild,newfild); e-0
+ 07 /42 : pipe(); e10
+ 0100 /43 : times(buf); ---
+ 0400 /44 : profil(buff,siz,off,sc); ---
+ ERRMASK /45 : error
+ 014 /46 : setgid(gid); e--
+ 03 /47 : getgid(); -01
+ 0 /48 : sigtrp(trap,sig); e-0; SPECIAL TREATMENT
+ ERRMASK /49 : error
+ ERRMASK /50 : error
+ 0104 /51 : acct(file); e--
+ 0304 /52 : phys(seg,siz,phaddr); e--
+ 0104 /53 : lock(flag); e--
+ 0304 /54 : ioctl(fild,req,argp); e--
+ ERRMASK /55 : error
+ 0204 /56 : mpxcall(cmd,vec); e--
+ ERRMASK /57 : error
+ ERRMASK /58 : error
+ 0304 /59 : exece(name,argv,envp); e--
+ 0104 /60 : umask(complmode); e--
+ 0104 /61 : chroot(str); e--
--- /dev/null
+.text
+.globl ngf~
+.globl setfloat~
+
+ngf~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ negf (sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl ngi~
+.globl unknown~
+
+ngi~:
+ mov (sp)+,r1
+ cmp r0,$02
+ bgt 1f
+ neg (sp)
+ jmp (r1)
+1: cmp r0,$04
+ bgt 2f
+ neg (sp)
+ neg 02(sp)
+ sbc (sp)
+ jmp (r1)
+2: jmp unknown~
--- /dev/null
+.text
+.globl nop~
+.globl hol0,prf~
+
+nop~:
+ mov hol0,-(sp)
+ mov $fmt,-(sp)
+ jsr pc,prf~
+ add $04,sp
+ rts pc
+.data
+fmt: <test %d\n\0>
--- /dev/null
+.text
+.globl prf~
+.globl save~,retu~,hol0,_printf
+
+prf~:
+ jsr pc,save~
+ mov hol0,-(sp)
+ mov hol0+4,r0
+ beq 1f
+ mov r0,r2
+ mov $40.,r1
+3: movb (r2)+,r3
+ beq 2f
+ cmpb r3,$0177
+ bge 1f
+ cmpb r3,$040
+ blt 1f
+ sob r1,3b
+ clrb (r2)
+2: mov sp,r1
+ mov r1,-(sp)
+ mov r0,-(sp)
+ mov $fmt,-(sp)
+ jsr pc,_printf
+ add $010,sp
+ jsr pc,_printf
+ jmp retu~
+1: mov $name,r0
+ br 2b
+
+.data
+fmt: <"%s", sp = %d, line %d: \0>
+name: <_unknown file_\0>
--- /dev/null
+.text
+.globl _printf
+
+write = 4
+
+_printf:
+ mov r2,-(sp)
+ mov r3,-(sp)
+ mov r4,-(sp)
+ mov sp,r3
+ mov $buff,r4
+ add $010,r3
+ mov (r3)+,r2
+prloop:
+ movb (r2)+,r0
+ beq ready
+ cmpb r0,$045
+ bne 1f
+ movb (r2)+,r0
+ cmpb r0,$0144
+ beq 2f
+ cmpb r0,$0163
+ beq 3f
+1: movb r0,(r4)+
+ br prloop
+2: mov (r3)+,r1
+ bge 4f
+ movb $055,(r4)+
+ neg r1
+4: jsr pc,printn
+ br prloop
+printn:
+ clr r0
+ div $010,r0
+ beq 5f
+ mov r1,-(sp)
+ mov r0,r1
+ jsr pc,printn
+ mov (sp)+,r1
+5: add $060,r1
+ movb r1,(r4)+
+ rts pc
+3: mov (r3)+,r1
+7: movb (r1)+,r0
+ bne 6f
+ br prloop
+6: movb r0,(r4)+
+ br 7b
+ready:
+ movb r0,(r4)+
+ sub $buff,r4
+ mov $01,r0
+ mov $buff,9f
+ mov r4,9f+2
+ sys write
+9: 0; 0
+ mov (sp)+,r4
+ mov (sp)+,r3
+ mov (sp)+,r2
+ rts pc
+.data
+buff: .=.+256.
--- /dev/null
+.text
+.globl rck~
+.globl trp~
+
+ERANGE = 1
+
+rck~:
+ mov (sp)+,r1
+ cmp (sp),(r0)
+ blt 1f
+ cmp (sp),02(r0)
+ ble 2f
+1: mov $ERANGE,-(sp)
+ jsr pc,trp~
+2: jmp (r1)
--- /dev/null
+.text
+.globl ret~,lfr~,retar
+.globl save1~
+.globl unknown~
+
+/ Size in r0
+ret~:
+ mov r0,r1
+ beq 1f
+ asr r1
+ add $retar,r0
+ cmp r0,$retend
+ bhi 9f
+3: mov (sp)+,-(r0)
+ sob r1,3b
+1: mov r5,sp
+ mov (sp)+,r5
+ rts pc
+9: jmp unknown~
+lfr~:
+ mov (sp)+,save1~
+ asr r0
+ beq 4f
+ mov $retar,r1
+5: mov (r1)+,-(sp)
+ sob r0,5b
+4: jmp *save1~
+
+.data
+retar: .=.+16.
+retend:
--- /dev/null
+.text
+.globl rmi~
+.globl save1~,unknown~,rmi4~
+
+rmi~:
+ mov (sp)+,save1~
+ cmp r0,$04
+ bgt 1f
+ beq 2f
+ mov 02(sp),r1
+ sxt r0
+ div (sp)+,r0
+ mov r1,(sp)
+ br 3f
+2: jsr pc,rmi4~
+ mov r1,-(sp)
+ mov r0,-(sp)
+3: jmp *save1~
+1: jmp unknown~
--- /dev/null
+.text
+.globl rmi4~
+.globl save~,retu~
+
+rmi4~:
+ jsr pc,save~
+ mov 02(sp),r3
+ sxt r4
+ bpl 1f
+ neg r3
+1: cmp r4,(sp)
+ bne hardrmi4
+ mov 06(sp),r2
+ mov 04(sp),r1
+ mov r1,r4
+ bge 2f
+ neg r1
+ neg r2
+ sbc r1
+2: mov r4,-(sp)
+ clr r0
+ div r3,r0
+ mov r1,r0
+ mov r1,r4
+ mov r2,r1
+ div r3,r0
+ bvc 3f
+ mov r2,r1
+ mov r4,r0
+ sub r3,r0
+ div r3,r0
+ tst r1
+ beq 3f
+ add r3,r1
+3: tst (sp)+
+ bpl 4f
+ neg r1
+4: sxt r0
+ br 9f
+hardrmi4:
+ mov 06(sp),r2
+ mov 04(sp),r1
+ bpl 5f
+ neg r1
+ neg r2
+ sbc r1
+5: clr r0
+ mov (sp),r3
+ bge 6f
+ neg r3
+ neg 02(sp)
+ sbc r3
+6: mov $16.,r4
+1: clc
+ rol r2
+ rol r1
+ rol r0
+ cmp r3,r0
+ bhi 7f
+ bcs 8f
+ cmp 02(sp),r1
+ blos 8f
+7: sob r4,1b
+ br 2f
+8: sub 02(sp),r1
+ sbc r0
+ sub r3,r0
+ sob r4,1b
+2: tst 04(sp)
+ bge 9f
+ neg r0
+ neg r1
+ sbc r0
+9: add $010,sp
+ jmp retu~
--- /dev/null
+.text
+.globl rmu~
+.globl save1~,rmu2~,rmu4~,unknown~
+
+rmu~:
+ mov (sp)+,save1~
+ cmp r0,$04
+ bgt 1f
+ beq 2f
+ cmp r0,$02
+ bne 1f
+ jsr pc,rmu2~
+ mov r1,-(sp)
+ jmp *save1~
+2: jsr pc,rmu4~
+ mov r1,-(sp)
+ mov r0,-(sp)
+ jmp *save1~
+1: jmp unknown~
--- /dev/null
+.text
+.globl rmu2~
+
+rmu2~:
+ mov 04(sp),r1
+ tst 02(sp)
+ blt 1f
+ clr r0
+ div 02(sp),r0
+2: mov (sp)+,r0
+ add $04,sp
+ jmp (r0)
+1: cmp 02(sp),r1
+ bhi 2b
+ sub 02(sp),r1
+ br 2b
--- /dev/null
+.text
+.globl rmu4~
+.globl save~,retu~
+
+rmu4~:
+ jsr pc,save~
+ clr r0
+ tst (sp)
+ bne hardrmu4
+ tst 02(sp)
+ blt hardrmu4
+ mov 06(sp),r2
+ mov 04(sp),r1
+ mov 02(sp),r3
+ div r3,r0
+ mov r1,r0
+ mov r1,r4
+ mov r2,r1
+ div r3,r0
+ bvc 1f
+ mov r2,r1
+ mov r4,r0
+ sub r3,r0
+ div r3,r0
+ tst r1
+ beq 1f
+ add r3,r1
+1: clr r0
+ br 2f
+hardrmu4:
+ mov 06(sp),r2
+ mov 04(sp),r1
+ mov (sp),r3
+ mov $17.,r4
+ br 3f
+6: clc
+ rol r2
+ rol r1
+ rol r0
+3: cmp r3,r0
+ bhi 4f
+ bcs 5f
+ cmp 02(sp),r1
+ blos 5f
+4: sob r4,6b
+ br 2f
+5: sub 02(sp),r1
+ sbc r0
+ sub r3,r0
+ sob r4,6b
+2: add $010,sp
+ jmp retu~
--- /dev/null
+.text
+.globl rol~
+.globl save~,retu~
+
+rol~:
+ jsr pc,save~
+ mov (sp)+,r3
+3: add r0,sp
+ mov r0,r1
+ asr r1
+ clc
+1: rol -(sp)
+ sob r1,1b
+ bcc 2f
+ mov sp,r1
+ add r0,r1
+ bis $01,-(r1)
+2: sob r3,3b
+ jmp retu~
--- /dev/null
+.text
+.globl ror~
+.globl save~,retu~
+
+ror~:
+ asr r0
+ jsr pc,save~
+ mov (sp)+,r3
+3: mov sp,r1
+ mov r0,-(sp)
+ clc
+1: ror (r1)+
+ sob r0,1b
+ bcc 2f
+ bis $0100000,02(sp)
+2: mov (sp)+,r0
+ sob r3,3b
+ jmp retu~
--- /dev/null
+.text
+.globl sar~
+.globl save1~
+
+sar~:
+ mov (sp)+,save1~
+ sub (r0),r1
+ mov 04(r0),r0
+ mul r0,r1
+ add (sp)+,r1
+ asr r0
+ beq 1f
+2: mov (sp)+,(r1)+
+ sob r0,2b
+ jmp *save1~
+1: movb (sp)+,(r1)
+ jmp *save1~
--- /dev/null
+.text
+.globl save~,retu~,save1~
+
+save~:
+ mov r5,savearea
+ mov $[savearea+2],r5
+ mov r4,(r5)+
+ mov r3,(r5)+
+ mov r2,(r5)+
+ mov (sp)+,r2
+ mov (sp)+,(r5)+
+ jmp (r2)
+retu~:
+ mov -(r5),-(sp)
+ mov -(r5),r2
+ mov -(r5),r3
+ mov -(r5),r4
+ mov -(r5),r5
+ rts pc
+
+.data
+.even
+savearea:
+ .=.+12.
+save1~: 0
--- /dev/null
+.text
+.globl sbf~
+.globl setfloat~
+
+sbf~:
+ mov (sp)+,r1
+ jsr pc,setfloat~
+ movf (sp)+,r0
+ subf (sp)+,r0
+ negf r0
+ movf r0,-(sp)
+ setl
+ jmp (r1)
--- /dev/null
+.text
+.globl sbi~
+.globl unknown~
+
+sbi~:
+ mov (sp)+,r1
+ cmp r0,$04
+ bgt 1f
+ cmp r0,$02
+ bgt 2f
+ sub (sp)+,(sp)
+ jmp (r1)
+2: sub (sp)+,02(sp)
+ sub (sp)+,02(sp)
+ sbc (sp)
+ jmp (r1)
+1:
+ jmp unknown~
--- /dev/null
+.text
+.globl set~
+.globl save~,retu~,trp~
+
+ESET = 2
+
+set~:
+ jsr pc,save~
+ mov r0,r2
+ asr r0
+1: clr -(sp)
+ sob r0,1b
+ div $8.,r0
+ cmp r0,r2
+ blo 2f
+ mov $ESET,-(sp)
+ jsr pc,trp~
+ jmp retu~
+2: add sp,r0
+ bisb bits(r1),(r0)
+ jmp retu~
+
+.data
+bits: .byte 1,2,4,10,20,40,100,200
--- /dev/null
+.text
+.globl setfloat~,setint~
+.globl unknown~
+
+setfloat~:
+ cmp r0,$8.
+ bne 1f
+ rts pc
+1: cmp r0,$04
+ bne 3f
+ setf
+2: rts pc
+3: jmp unknown~
+setint~:
+ cmp r0,$04
+ bne 4f
+ setl
+ rts pc
+4: cmp r0,$02
+ bne 3b
+5: rts pc
--- /dev/null
+.text
+.globl sigtrp~
+.globl trp~,save~,retu~
+
+indir = 0
+signal = 48.
+
+rti = 2
+
+sig1: mov sig.trp+0.,-(sp)
+ br 1f
+sig2: mov sig.trp+2.,-(sp)
+ br 1f
+sig3: mov sig.trp+4.,-(sp)
+ br 1f
+sig4: mov sig.trp+6.,-(sp)
+ br 1f
+sig5: mov sig.trp+8.,-(sp)
+ br 1f
+sig6: mov sig.trp+10.,-(sp)
+ br 1f
+sig7: mov sig.trp+12.,-(sp)
+ br 1f
+sig10: mov sig.trp+18.,-(sp)
+ br 1f
+sig11: mov sig.trp+20.,-(sp)
+ br 1f
+sig12: mov sig.trp+22.,-(sp)
+ br 1f
+sig13: mov sig.trp+24.,-(sp)
+ br 1f
+sig14: mov sig.trp+026.,-(sp)
+ br 1f
+sig15: mov sig.trp+028.,-(sp)
+ br 1f
+sig16: mov sig.trp+030.,-(sp)
+ br 1f
+1:
+ jsr pc,trp~
+ rti
+
+sigtrp~:
+ jsr pc,save~
+ tst (sp)+
+ mov (sp)+,r1
+ mov (sp)+,r0
+ ble sig.bad
+ cmp r0,$16.
+ bhi sig.bad
+ mov r0,call+02
+ asl r0
+ mov sig.trp-2(r0),r3
+ cmp r1,$256.
+ bhis 1f
+ mov sig.adr-2(r0),r2
+ bne 2f
+sig.bad:
+ mov $-1,r0
+sigbad:
+ mov r0,-(sp)
+ mov r0,-(sp)
+ jmp retu~
+1: cmp r1,$-3
+ blo sig.bad
+ mov r1,r2
+ inc r2
+ inc r2
+2: mov r1,sig.trp-2(r0)
+ mov r2,call+04
+ sys indir ; call
+ bcs sigbad
+ asr r0
+ bcc 1f
+ mov $-3,-(sp)
+ clr -(sp)
+ jmp retu~
+1: mov r3,-(sp)
+ clr -(sp)
+ jmp retu~
+
+.data
+call: sys signal; 0; 0
+sig.trp:
+ -2; -2; -2; -2
+ -2; -2; -2; -2
+ -2; -2; -2; -2
+ -2; -2; -2; -2
+sig.adr:
+ sig1; sig2; sig3; sig4
+ sig5; sig6; sig7; 0
+ 0; sig10; sig11; sig12
+ sig13; sig14; sig15; sig16
--- /dev/null
+.text
+.globl sim~
+.globl trpim~,save1~
+
+.float = 1
+
+sim~:
+ mov (sp)+,save1~
+ mov (sp)+,r0
+ mov r0,trpim~
+.if .float
+ stfps r1
+ bis $07400,r1
+ bit $020,r0
+ beq 0f
+ bic $01000,r1
+0: bit $040,r0
+ beq 0f
+ bic $02000,r1
+0: bit $01000,r0
+ beq 0f
+ bic $04000,r1
+0: bit $02000,r0
+ beq 0f
+ bic $0400,r1
+0: ldfps r1
+.endif
+ jmp *save1~
--- /dev/null
+.text
+.globl sli~
+.globl save1~,unknown~
+
+sli~:
+ mov (sp)+,save1~
+ cmp r0,$02
+ bgt 1f
+ mov (sp)+,r1
+ mov (sp)+,r0
+ ash r1,r0
+ mov r0,-(sp)
+ jmp *save1~
+1: cmp r0,$04
+ bgt 2f
+ mov 02(sp),r0
+ mov 04(sp),r1
+ ashc (sp)+,r0
+ mov r0,(sp)
+ mov r1,02(sp)
+ jmp *save1~
+2: jmp unknown~
--- /dev/null
+.text
+.globl sri~
+.globl unknown~,save1~
+
+/ Size in r0
+sri~:
+ mov (sp)+,save1~
+ cmp r0,$02
+ bgt 1f
+ mov (sp)+,r1
+ mov (sp)+,r0
+ neg r1
+ ash r1,r0
+ mov r0,-(sp)
+ jmp *save1~
+1: cmp r0,$04
+ bgt 2f
+ mov 02(sp),r0
+ mov 04(sp),r1
+ neg (sp)
+ ashc (sp)+,r0
+ mov r0,(sp)
+ mov r1,02(sp)
+ jmp *save1~
+2: jmp unknown~
--- /dev/null
+.text
+.globl sru~,slu~
+.globl save1~,unknown~
+
+sru~:
+ neg 2(sp)
+slu~:
+ mov (sp)+,save1~
+ cmp r0,$02
+ bgt 1f
+ mov 2(sp),r1
+ clr r0
+ ashc (sp)+,r0
+2: mov r1,-(sp)
+ jmp *save1~
+1: cmp r0,$04
+ bgt 3f
+ mov 02(sp),r0
+ mov 04(sp),r1
+ tst (sp)
+ beq 4f
+ ashc $-1,r0
+ bic $0100000,r0
+ inc (sp)
+ beq 4f
+ ashc (sp)+,r0
+4: mov r0,(sp)
+ mov r1,02(sp)
+ jmp *save1~
+3: jmp unknown~
--- /dev/null
+.text
+.globl sto2~
+.globl save1~
+
+sto2~:
+ mov (sp)+,save1~
+ cmp r0,$01
+ bne 1f
+ movb (sp),(r1)
+ tst (sp)+
+ jmp *save1~
+1: asr r0
+2: mov (sp)+,(r1)+
+ sob r0,2b
+ jmp *save1~
--- /dev/null
+.text
+.globl strhp~
+.globl fat~,reghp~,_end
+indir = 0
+
+break = 17.
+EHEAP = 17.
+
+strhp~:
+ mov (sp)+,r0
+ mov (sp)+,r1
+ mov r1,reghp~
+ cmp r1,2f+2
+ blos 1f
+ add $01777,r1
+ bic $01777,r1
+ mov r1,2f+2
+ sys indir ; 2f
+ bcs 3f
+1: jmp (r0)
+3: mov $EHEAP,-(sp)
+ jmp fat~
+.data
+2: sys break; _end
--- /dev/null
+.text
+.globl trp~,fat~
+.globl trppc~,trpim~
+ write=4.
+
+fat~:
+ jsr pc,trp~
+ 4
+
+trp~:
+ mov r0,-(sp)
+ mov 04(sp),r0
+ mov 02(sp),04(sp)
+ mov (sp),02(sp)
+ mov r1,(sp)
+ cmp r0,$16.
+ jhis 0f
+ mov $01,r1
+ ashc r0,r1
+ bit r1,trpim~
+ bne 8f
+0: mov r2,-(sp)
+ mov r3,-(sp)
+ mov r4,-(sp)
+ movf r0,-(sp)
+ movf r1,-(sp)
+ movf r2,-(sp)
+ movf r3,-(sp)
+ stfps -(sp)
+ mov r0,-(sp)
+ mov trppc~,r0
+ beq 9f
+ clr trppc~
+ jsr pc,(r0)
+ tst (sp)+
+ ldfps (sp)+
+ movf (sp)+,r3
+ movf (sp)+,r2
+ movf (sp)+,r1
+ movf (sp)+,r0
+ mov (sp)+,r4
+ mov (sp)+,r3
+ mov (sp)+,r2
+8: mov (sp)+,r1
+ mov (sp)+,r0
+ rts pc
+9: mov (sp)+,r0
+ mov $buf+11,r1
+ mov $4,r2
+1: mov r0,r3
+ bic $177770,r3
+ bisb r3,-(r1)
+ ash $-3,r0
+ sob r2,1b
+ mov $2,r0
+ sys write;buf;11.
+ 4
+
+.data
+buf: <err 00000\n>
--- /dev/null
+.text
+.globl unknown~
+.globl fat~
+
+EILLSIZ = 19.
+
+unknown~:
+ mov $EILLSIZ,-(sp)
+ jmp fat~
--- /dev/null
+.globl xor~
+.globl save~,retu~
+
+xor~:
+ jsr pc,save~
+ mov sp,r1
+ add r0,r1
+ asr r0
+1:
+ mov (sp)+,r2
+ xor r2,(r1)+
+ sob r0,1b
+ jmp retu~