Add original unix v6
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
rti = 2
|
||||
/ accept
|
||||
/ r1 = header of where to put it
|
||||
/
|
||||
accept:
|
||||
mov r0,-(sp)
|
||||
movb $':,r0
|
||||
jsr r5,tfoput
|
||||
movb $' ,r0
|
||||
jsr r5,tfoput
|
||||
2:
|
||||
jsr r5,tfiget
|
||||
cmpb r0,$'\n
|
||||
beq 1f
|
||||
jsr pc,putchar
|
||||
br 2b
|
||||
1:
|
||||
jsr pc,putchar
|
||||
jsr r5,tfiget
|
||||
cmpb r0,$'\n
|
||||
beq 1f
|
||||
jsr pc,putchar
|
||||
br 2b
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to get the last word from the string
|
||||
/ r1=header addr
|
||||
/
|
||||
pop:
|
||||
jsr pc,fsfile
|
||||
jsr pc,backword
|
||||
bes 1f
|
||||
sub $2,w(r1)
|
||||
1:
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ routine to add an entry to assoc mem or curly
|
||||
/ r1 = header
|
||||
/ r0 = header of string name
|
||||
/ r2 = header of string
|
||||
/
|
||||
addentry:
|
||||
jsr pc,putword
|
||||
mov r2,r0
|
||||
jsr pc,putword
|
||||
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 r1,-(sp)
|
||||
jsr pc,rewind /memory
|
||||
3:
|
||||
mov 2(sp),r1
|
||||
jsr pc,rewind /output
|
||||
mov (sp),r1
|
||||
jsr pc,getword
|
||||
bes 1f
|
||||
mov r0,r1
|
||||
mov r0,-(sp)
|
||||
jsr pc,rewind /string
|
||||
2:
|
||||
mov (sp),r1
|
||||
jsr pc,getchar
|
||||
bes 2f
|
||||
movb r0,r2
|
||||
mov 4(sp),r1
|
||||
jsr pc,getchar
|
||||
bes 4f
|
||||
cmpb r0,r2
|
||||
beq 2b
|
||||
4:
|
||||
tst (sp)+
|
||||
4:
|
||||
mov (sp),r1
|
||||
add $2,r(r1)
|
||||
br 3b
|
||||
2:
|
||||
tst (sp)+
|
||||
mov 2(sp),r1
|
||||
cmp r(r1),w(r1)
|
||||
bne 4b
|
||||
mov (sp)+,r1
|
||||
jsr pc,getword
|
||||
tst (sp)+
|
||||
rts pc
|
||||
1:
|
||||
mov (sp)+,r1
|
||||
mov (sp)+,r0
|
||||
sec
|
||||
rts pc
|
||||
/
|
||||
/
|
||||
/ tfoput
|
||||
/
|
||||
/ jsr r5,tfoput
|
||||
/
|
||||
tfoput:
|
||||
mov r0,ch
|
||||
mov $1,r0
|
||||
sys write; ch; 1
|
||||
rts r5
|
||||
/
|
||||
/
|
||||
/ tfiget
|
||||
/
|
||||
/ jsr r5,tfiget
|
||||
/
|
||||
tfiget:
|
||||
clr r0
|
||||
sys read; ch; 1
|
||||
bes 1f
|
||||
tst r0
|
||||
beq 1f
|
||||
movb ch,r0
|
||||
rts r5
|
||||
1:
|
||||
jsr r5,flushb
|
||||
tst argf
|
||||
beq 1f
|
||||
mov opointer,r1
|
||||
jsr pc,pop
|
||||
1:
|
||||
mov $5,tflag
|
||||
jmp interrupt
|
||||
/
|
||||
/ putc
|
||||
/ jsr r5,putc
|
||||
/
|
||||
putc:
|
||||
mov r1,-(sp)
|
||||
mov r2,-(sp)
|
||||
mov $rfo+2,r1
|
||||
mov r1,r2
|
||||
add (r1),r2
|
||||
movb r0,2(r2)
|
||||
inc (r1)
|
||||
cmp (r1),$512.
|
||||
bge 1f
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
1:
|
||||
mov (sp)+,r2
|
||||
mov (sp)+,r1
|
||||
/
|
||||
/
|
||||
/ flush output buffer to output file.
|
||||
/
|
||||
flushb:
|
||||
mov r1,-(sp)
|
||||
mov r0,-(sp)
|
||||
mov $rfo,r1
|
||||
mov (r1)+,r0
|
||||
mov (r1),0f+2
|
||||
beq 1f
|
||||
clr (r1)+
|
||||
mov r1,0f
|
||||
sys write; 0:..;..
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
mov (sp)+,r1
|
||||
rts r5
|
||||
relarg:
|
||||
mov $arg,r2
|
||||
1:
|
||||
mov (r2)+,r1
|
||||
beq 2f
|
||||
jsr pc,release
|
||||
br 1b
|
||||
2:
|
||||
cmp r2,$arge
|
||||
blt 1b
|
||||
rts pc
|
||||
/
|
||||
relcurl:
|
||||
mov curly,r1
|
||||
jsr pc,rewind
|
||||
1:
|
||||
jsr pc,getword
|
||||
bes 1f
|
||||
mov r0,r1
|
||||
jsr pc,release
|
||||
mov curly,r1
|
||||
br 1b
|
||||
1:
|
||||
jsr pc,release
|
||||
rts pc
|
||||
/
|
||||
int:
|
||||
inc iflag
|
||||
rti
|
||||
/
|
||||
interrupt:
|
||||
jsr pc,relarg
|
||||
tst opointer
|
||||
beq 2f
|
||||
1:
|
||||
mov opointer,r1
|
||||
jsr pc,rewind
|
||||
1:
|
||||
jsr pc,getword
|
||||
bes 1f
|
||||
mov r0,r1
|
||||
jsr pc,release
|
||||
mov opointer,r1
|
||||
br 1b
|
||||
1:
|
||||
mov opointer,r1
|
||||
jsr pc,release
|
||||
tst ipointer
|
||||
beq 2f
|
||||
mov ipointer,r1
|
||||
jsr pc,release
|
||||
tst curly
|
||||
beq 2f
|
||||
jsr pc,relcurl
|
||||
tst scr
|
||||
beq 2f
|
||||
mov scr,r1
|
||||
jsr pc,release
|
||||
2:
|
||||
jsr pc,flush
|
||||
jsr pc,whead
|
||||
sys exit
|
||||
letter: .=.+2
|
||||
arg: .=.+20.
|
||||
arge: 0
|
||||
argf: .=.+2
|
||||
switch: .=.+2
|
||||
curly: .=.+2
|
||||
curlyf: .=.+2
|
||||
ch: .=.+2
|
||||
opointer: .=.+2
|
||||
ipointer: .=.+2
|
||||
scr: .=.+2
|
||||
iflag: 0
|
||||
tflag: 0
|
||||
end:
|
||||
Reference in New Issue
Block a user