Add original unix v6
This commit is contained in:
@@ -0,0 +1,358 @@
|
||||
rti = 2
|
||||
.globl rm
|
||||
.globl ck
|
||||
.globl loop
|
||||
.globl oct
|
||||
.globl argc
|
||||
.globl arg
|
||||
.globl tfiget
|
||||
.globl asmem
|
||||
.globl qflag
|
||||
.globl vflag
|
||||
.globl getspq
|
||||
.globl q
|
||||
.globl ask
|
||||
.globl getword
|
||||
.globl r
|
||||
.globl w
|
||||
.globl output
|
||||
.globl buffer
|
||||
.globl bufend
|
||||
.globl fv
|
||||
.globl getsp
|
||||
.globl release
|
||||
.globl nothere
|
||||
.globl getn
|
||||
.globl getchar
|
||||
.globl rewind
|
||||
.globl iflag
|
||||
.globl inter
|
||||
/ output buffer
|
||||
/ r2 = last char in buffer + 1
|
||||
/ r2 returned at beginning of buffer
|
||||
/
|
||||
output:
|
||||
sub $buffer,r2
|
||||
blos 1f
|
||||
mov r2,0f
|
||||
mov $1,r0
|
||||
sys write; buffer; 0:..
|
||||
mov $buffer,r2
|
||||
1:
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to find the string pointed to by r0
|
||||
/ in either memory or curly
|
||||
/ r1 = where to look
|
||||
/
|
||||
/ returns error set if string not there
|
||||
/ returns r1 = header of string if there
|
||||
getsp:
|
||||
mov r0,-(sp)
|
||||
mov asmem,r1
|
||||
jsr pc,rewind /memory
|
||||
3:
|
||||
jsr pc,getword
|
||||
bes 1f
|
||||
mov r0,r1
|
||||
jsr pc,rewind
|
||||
mov (sp),r2
|
||||
2:
|
||||
jsr pc,getchar
|
||||
bes 2f
|
||||
tstb (r2)
|
||||
beq 4f
|
||||
cmpb r0,(r2)+
|
||||
beq 2b
|
||||
4:
|
||||
mov asmem,r1
|
||||
add $2,r(r1)
|
||||
br 3b
|
||||
2:
|
||||
tstb (r2)
|
||||
bne 4b
|
||||
mov r1,r2
|
||||
mov asmem,r1
|
||||
jsr pc,getword
|
||||
tst (sp)+
|
||||
rts pc
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
sec
|
||||
rts pc
|
||||
/
|
||||
/ finds header of string with name same as that pointed to by r0
|
||||
/ taking into account ? and *
|
||||
getspq:
|
||||
mov r0,-(sp)
|
||||
mov asmem,r1
|
||||
tst qflag
|
||||
bgt 1f
|
||||
jsr pc,rewind
|
||||
1:
|
||||
jsr pc,getword
|
||||
bes 1f
|
||||
mov r0,r1
|
||||
jsr pc,rewind
|
||||
mov (sp),r2
|
||||
2:
|
||||
cmpb (r2),$'*
|
||||
bne 3f
|
||||
clr strflg
|
||||
mov $2,qflag
|
||||
inc r2
|
||||
tstb (r2)
|
||||
beq 6f
|
||||
mov r2,ch
|
||||
3:
|
||||
jsr pc,getchar
|
||||
bes 2f
|
||||
tstb (r2)
|
||||
bne 3f
|
||||
cmp $2,qflag
|
||||
bne 4f
|
||||
mov ch,r2
|
||||
3:
|
||||
cmpb (r2),$'?
|
||||
bne 3f
|
||||
inc r2
|
||||
tst qflag
|
||||
bne 2b
|
||||
mov $1,qflag
|
||||
br 2b
|
||||
3:
|
||||
cmpb r0,(r2)+
|
||||
bne 5f
|
||||
inc strflg
|
||||
br 2b
|
||||
5:
|
||||
cmp $2,qflag
|
||||
bne 4f
|
||||
tst strflg
|
||||
bne 4f
|
||||
dec r2
|
||||
br 2b
|
||||
4:
|
||||
mov asmem,r1
|
||||
add $2,r(r1)
|
||||
br 1b
|
||||
2:
|
||||
tstb (r2)
|
||||
bne 4b
|
||||
6:
|
||||
mov r1,r2
|
||||
mov asmem,r1
|
||||
jsr pc,getword
|
||||
tst (sp)+
|
||||
rts pc
|
||||
1:
|
||||
mov $-1.,qflag
|
||||
mov (sp)+,r0
|
||||
sec
|
||||
rts pc
|
||||
/
|
||||
/ tfiget
|
||||
/ jsr r5,tfiget
|
||||
/
|
||||
tfiget:
|
||||
clr r0
|
||||
sys read; ch; 1
|
||||
bes 1f
|
||||
tst iflag
|
||||
beq 9f; jmp loop; 9:
|
||||
tst r0
|
||||
beq 1f
|
||||
movb ch,r0
|
||||
rts pc
|
||||
1: jmp q
|
||||
/
|
||||
/ routine to print file name and error message
|
||||
/ r2 = next free byte in buffer
|
||||
/
|
||||
nothere:
|
||||
mov $buffer,r2
|
||||
1:
|
||||
tstb (r1)
|
||||
beq 1f
|
||||
movb (r1)+,(r2)+
|
||||
br 1b
|
||||
1:
|
||||
sub $buffer,r2
|
||||
mov r2,0f
|
||||
mov $1,r0
|
||||
sys write; buffer; 0:..
|
||||
mov $1,r0
|
||||
sys write; err4; 16.
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to put characters from string in buffer
|
||||
/ r1 = header of string
|
||||
/ on return r2 = next free byte in buffer
|
||||
/
|
||||
getn:
|
||||
mov $buffer,r2
|
||||
jsr pc,rewind
|
||||
1:
|
||||
jsr pc,getchar
|
||||
bes 1f
|
||||
movb r0,(r2)+
|
||||
cmp r2,$bufend
|
||||
bhis 1f
|
||||
br 1b
|
||||
1: rts pc
|
||||
/
|
||||
ask:
|
||||
mov r2,-(sp)
|
||||
mov r0,r1
|
||||
jsr pc,getn
|
||||
movb $' ,(r2)+
|
||||
jsr pc,output
|
||||
jsr pc,tfiget
|
||||
cmpb $'\n,r0
|
||||
bne 1f
|
||||
2:
|
||||
mov asmem,r1
|
||||
add $2,r(r1)
|
||||
mov (sp)+,r2
|
||||
sec
|
||||
rts pc
|
||||
1:
|
||||
cmpb r0,$'y
|
||||
beq 4f
|
||||
cmpb r0,$'q
|
||||
beq 3f
|
||||
1:
|
||||
tst iflag
|
||||
bne 2b
|
||||
jsr pc,tfiget
|
||||
cmpb $'\n,r0
|
||||
bne 1b
|
||||
br 2b
|
||||
4:
|
||||
tst iflag
|
||||
bne 2b
|
||||
jsr pc,tfiget
|
||||
cmpb $'\n,r0
|
||||
bne 1b
|
||||
mov asmem,r1
|
||||
mov (sp)+,r2
|
||||
clc
|
||||
rts pc
|
||||
3:
|
||||
tst iflag
|
||||
bne 2b
|
||||
jsr pc,tfiget
|
||||
cmpb $'\n,r0
|
||||
bne 1b
|
||||
mov (sp)+,r2
|
||||
jmp loop
|
||||
inter:
|
||||
inc iflag
|
||||
rti
|
||||
/ to remove an entry from asmem - r points to name ptr
|
||||
/
|
||||
rm:
|
||||
mov r3,-(sp)
|
||||
mov asmem,r1
|
||||
mov r(r1),r3
|
||||
sub $4,r(r1)
|
||||
mov r(r1),r2
|
||||
mov r2,-(sp)
|
||||
1:
|
||||
mov r3,r(r1)
|
||||
jsr pc,getword
|
||||
bes 1f
|
||||
mov r(r1),r3
|
||||
mov r2,r(r1)
|
||||
jsr pc,alterword
|
||||
mov r(r1),r2
|
||||
br 1b
|
||||
1:
|
||||
mov r2,w(r1)
|
||||
mov (sp)+,r(r1)
|
||||
mov (sp)+,r3
|
||||
rts pc
|
||||
/
|
||||
/ check that header pointed to by r2 released
|
||||
/
|
||||
ck:
|
||||
mov r2,-(sp)
|
||||
mov l(r2),r0
|
||||
sub a(r2),r0
|
||||
sub $hblk,r2
|
||||
jsr pc,log2
|
||||
asl r0
|
||||
mov r0,ch
|
||||
mov frlist(r0),r0
|
||||
1:
|
||||
beq 1f
|
||||
cmp r2,r0
|
||||
beq 2f
|
||||
add $hblk,r0
|
||||
mov (r0),r0
|
||||
br 1b
|
||||
2:
|
||||
mov ch,r0
|
||||
inc freeb(r0)
|
||||
mov (sp)+,r2
|
||||
rts pc
|
||||
1:
|
||||
mov (sp)+,r2
|
||||
sec
|
||||
rts pc
|
||||
oct:
|
||||
mov r1,-(sp)
|
||||
mov r0,r1
|
||||
clr r0
|
||||
div $8.,r0
|
||||
mov r1,-(sp)
|
||||
add $'0,(sp)
|
||||
tst r0
|
||||
beq 1f
|
||||
jsr r5,oct
|
||||
1:
|
||||
movb (sp)+,ch
|
||||
mov $1,r0
|
||||
sys write; ch; 1
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
|
||||
decml:
|
||||
mov r1,-(sp)
|
||||
mov r0,r1
|
||||
clr r0
|
||||
div $10.,r0
|
||||
mov r1,-(sp)
|
||||
add $'0,(sp)
|
||||
tst r0
|
||||
beq 1f
|
||||
jsr r5,decml
|
||||
1:
|
||||
movb (sp)+,ch
|
||||
mov $1,r0
|
||||
sys write; ch; 1
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
/
|
||||
/
|
||||
iflag: 0
|
||||
qflag: 0
|
||||
vflag: 0
|
||||
.data
|
||||
err4: < not in memory.\n>
|
||||
err1: <Cannot open file >
|
||||
end1: .even
|
||||
.bss
|
||||
freeh: .=.+2
|
||||
freeb: .=.+32.
|
||||
freen:
|
||||
ch: .=.+2
|
||||
strflg: .=.+2
|
||||
buffer: .=.+512.
|
||||
bufend: .=.+2
|
||||
argc = buffer + 20.
|
||||
arg = buffer + 256.
|
||||
fv: .=.+2
|
||||
.text
|
||||
Reference in New Issue
Block a user