Add original unix v6

This commit is contained in:
memnoth
2018-01-27 22:35:41 +09:00
commit 2c7099ee50
664 changed files with 106254 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
/
/
/ io1 -- I/O operators
.globl rerr
.globl endio
.globl rio4
.globl rio8
.globl iio2
.globl iio4
.globl lio2
.globl lio1
.globl cio8
.globl cio16
.globl ecvt
.globl fcvt
.globl _ndigit
endio:
mov (sp)+,r5
rts r5
cio8:
tst slcnt
bne 2f
inc slcnt
tst -(r4)
br rio4
2:
clr slcnt
mov ilval,-(sp)
add $4,(sp)
br rio4
cio16:
tst slcnt
bne 2f
inc slcnt
tst -(r4)
br rio8
2:
clr slcnt
mov ilval,-(sp)
add $8,(sp)
br rio8
rio8:
mov $8.\<8+'r,r0
br 1f
rio4:
mov $4\<8+'r,r0
br 1f
iio4:
mov $4\<8+'i,r0
br 1f
iio2:
mov $2\<8+'i,r0
br 1f
lio2:
mov $2\<8+'l,r0
br 1f
lio1:
mov $1\<8+'l,r0
1:
mov r0,itype
mov (sp)+,ilval
mov (sp)+,r5
tst (r5)+
rts r5
+268
View File
@@ -0,0 +1,268 @@
/
/
/ io2 -- format cracker
.globl iowf
.globl iowp
.globl iorf
iowp:
mov (sp)+,formp
mov $6,r1
br 1f
iowf:
mov (sp)+,formp
tst (sp)+
mov (sp)+,r1
1:
jsr r5,setio; 2 / write
clr rdflg
br 1f
iorf:
mov (sp)+,formp
tst (sp)+
mov (sp)+,r1
jsr r5,setio; 1 / read
mov pc,rdflg
1:
clr binflg
clr slcnt
clr itmfnd
clr scale
clr itmflg
mov $pbuf,ppar
mov $-1,llpcnt
jsr r5,fmtchr
mov formp,llp
cmp r0,$'(
beq crack
jsr r5,rerr; 106.
sys exit
crack:
clr ngflg
mov $1,rep
item:
jsr r5,fmtchr
cmp $' ,r0
beq item
cmp $'\t,r0
beq item
jsr r5,switch; mswitch
jsr r5,rerr; 105.
sys exit
mswitch:
'a; afmt
'f; ffmt
'e; efmt
'g; gfmt
'd; dfmt
'i; ifmt
'l; lfmt
'h; hfmt
'x; xfmt
'p; scal
'-; minus
'0; numb
'1; numb
'2; numb
'3; numb
'4; numb
'5; numb
'6; numb
'7; numb
'8; numb
'9; numb
',; crack
'/; slash
'(; lpar
'); rpar
'"; quote
' ; item
0; 0
minus:
jsr r5,gnum
neg r0
br 1f
numb:
dec formp
jsr r5,gnum
1:
mov r0,rep
br item
scal:
mov rep,scale
br crack
elist:
tst _nocr
beq 1f
tst rdflg
bne 1f
jsr r5,eorec1
br 2f
1:
jsr r5,eorec
2:
jmp *(r4)+
slash:
jsr r5,eorec
br crack
rpar:
mov ppar,r0
cmp r0,$pbuf / see if outer parens
blos 2f
dec -2(r0)
ble 1f / no repeats left
mov -4(r0),formp / reset scan
br crack
1:
sub $4,ppar
br crack / pop parens
2:
jsr r5,getitm
br elist
tst itmfnd
bne 1f
jsr r5,rerr; 107.
sys exit
1:
jsr r5,eorec
inc itmflg
mov llpcnt,r1
bpl 1f
mov llp,formp
jmp crack
1:
mov llp,r2
mov r2,formp
mov ppar,r0
mov r2,(r0)+
mov r1,(r0)+
mov r0,ppar
jbr crack1
lpar:
mov ppar,r0
cmp r0,$pbuf+10
blo 1f
jsr r5,rerr; 108.
sys exit
1:
mov formp,(r0)+
mov rep,(r0)+
mov r0,ppar
cmp r0,$pbuf+4
bhi 1f
mov formp,llp
mov rep,llpcnt
1:
jmp crack
quote:
inc ngflg
mov $44,-(sp)
br 3f
hfmt:
inc ngflg
mov $40,-(sp)
br 3f
xfmt:
inc ngflg
mov $34,-(sp)
br 3f
afmt:
mov $30,-(sp)
br 1f
ifmt:
clr -(sp)
br 1f
lfmt:
mov $4,-(sp)
1:
jsr r5,gnum
mov r0,width
br 2f
ffmt:
mov $10,-(sp)
br 1f
dfmt:
mov $14,-(sp)
br 1f
gfmt:
mov $20,-(sp)
br 1f
efmt:
mov $24,-(sp)
1:
jsr r5,gnum
mov r0,width
4:
jsr r5,fmtchr
cmp r0,$' /
beq 4b
cmp r0,$'.
bne err1
jsr r5,gnum
mov r0,ndig
2:
inc itmfnd
3:
add $cvsw,(sp)
tst rdflg
beq 1f
add $2,(sp)
1:
mov *(sp)+,-(sp)
1:
tst ngflg
bne 2f
jsr r5,getitm
br 1f
2:
clr gflg
jsr r5,*(sp)
dec rep
bgt 1b
tst (sp)+
br crack1
1:
tst (sp)+
jmp elist
cvsw:
iocv; iicv / 0
locv; licv / 4
focv; ficv / 10
docv; dicv / 14
gocv; gicv / 20
eocv; eicv / 24
aocv; aicv / 30
xocv; xicv / 34
hocv; hicv / 40
qocv; qicv / 44
crack1:
jmp crack
err1:
jsr r5,rerr; 109.
sys exit
+299
View File
@@ -0,0 +1,299 @@
/
/
/ io3 -- Fortran I/O
.globl getbuf
.globl chkunit
.globl creatf
.globl openf
setio:
mov r1,unit
jsr r5,chkunit
movb utable(r1),r0
beq 1f
bpl 2f
mov r1,r0
asl r0
mov btable(r0),r0
mov r0,r2
br 4f
2:
cmp (r5),r0
beq 3f
jsr r5,rerr; 101. / inconsistent use of unit
sys exit
1:
mov r1,-(sp)
clr r0
dvd $10.,r0
swab r1
bis r1,r0
add $"00,r0
mov r0,filnam+4
mov (sp)+,r1
jsr r5,getbuf
mov $filnam,r0
4:
movb (r5),utable(r1)
bit $1,(r5)
bne 2f
jsr r5,creatf
br 3f
2:
jsr r5,openf
3:
tst (r5)+
asl r1
mov btable(r1),buffer
rts r5
getbuf:
mov $utable,r0
mov $btable,r2
1:
tstb (r0)+
beq 2f
tst (r2)+
br 3f
2:
tst (r2)+
beq 3f
mov -(r2),r0
clr (r2)
mov r0,r2
br 2f
3:
cmp r0,$utable+20.
blo 1b
mov bufp,r2
add $134.,bufp
mov bufp,0f
sys break; 0:..
2:
mov r1,r0
asl r0
mov r2,btable(r0)
mov r2,buffer
rts r5
chkunit:
cmp r1,$20.
blo 1f
jsr r5,rerr; 100. / illegal unit number
sys exit
1:
rts r5
creatf:
cmp unit,$6
bne 2f
mov $1,r0
br 1f
2:
mov r0,0f
sys creat; 0:..; 666
bec 1f
jsr r5,rerr; 102. / create error
sys exit
1:
mov r2,-(sp)
mov r0,(r2)+
clr (r2)+
clr (r2)+
mov r2,-(r2)
mov (sp)+,r2
rts r5
openf:
cmp unit,$5
bne 2f
clr r0
br 1f
2:
mov r0,0f
sys open; 0:..; 0
bec 1f
jsr r5,rerr; 103. / open error
sys exit
1:
mov r2,-(sp)
mov r0,(r2)+
clr (r2)+
clr (r2)+
mov (sp)+,r2
rts r5
fputc:
mov r1,-(sp)
mov buffer,r1
dec 2(r1)
bge 1f
mov r0,-(sp)
jsr pc,flush1
dec 2(r1)
mov (sp)+,r0
1:
movb r0,*4(r1)
inc 4(r1)
mov (sp)+,r1
rts r5
fflush:
mov r1,-(sp)
mov buffer,r1
jsr pc,flush1
mov (sp)+,r1
rts r5
flush1:
mov r1,r0
add $6,r0
mov r0,-(sp)
mov r0,0f
neg r0
add 4(r1),r0
bhis 1f
mov r0,0f+2
mov (r1),r0
sys write; 0:..; ..
1:
mov (sp)+,4(r1)
mov $128.,2(r1)
rts pc
fgetc:
tst nlflg
bne 4f
mov r1,-(sp)
mov buffer,r1
dec 2(r1)
bge 1f
mov r1,r0
add $6,r0
mov r0,0f
mov r0,4(r1)
mov (r1),r0
sys read; 0:..; 128.
bes 2f
tst r0
bne 3f
2:
jsr r5,rerr; 104. / EOF on input
sys exit
3:
dec r0
mov r0,2(r1)
1:
clr r0
bisb *4(r1),r0
inc 4(r1)
mov (sp)+,r1
tst binflg
bne 1f
cmp r0,$'\n
bne 1f
4:
mov pc,nlflg
mov $' ,r0
1:
rts r5
gnum:
mov r1,-(sp)
clr r1
1:
jsr r5,fmtchr
cmp r0,$' /
beq 1b
sub $'0,r0
cmp r0,$9.
bhi 1f
mpy $10.,r1
add r0,r1
br 1b
1:
mov r1,r0
mov (sp)+,r1
dec formp
rts r5
switch:
mov (r5)+,r1
1:
tst (r1)
beq 1f
cmp r0,(r1)+
bne 1b
tst (sp)+
jmp *(r1)
1:
rts r5
fmtchr:
movb *formp,r0
inc formp
rts r5
getitm:
tst itmflg
bne 1f
mov r5,-(sp)
jmp *(r4)+
1:
clr itmflg
tst (r5)+
rts r5
/ just a fake, there's no carriage control
fputcc:
cmp $' ,r0
bne 1f
inc nspace
rts r5
1:
mov r0,-(sp)
1:
dec nspace
blt 1f
mov $' ,r0
jsr r5,fputc
br 1b
1:
clr nspace
mov (sp)+,r0
beq 1f
jsr r5,fputc
1:
rts r5
eorec:
mov unit,r0
bitb $1,utable(r0)
bne 1f
clr nspace
mov $'\n,r0
jsr r5,fputc
eorec1:
clr r0
jsr r5,fputcc
/ cmp unit,$6 / tty output
/ bne 2f
jsr r5,fflush
2:
rts r5
1:
tst nlflg
bne 1f
jsr r5,fgetc
br 1b
1:
clr nlflg
rts r5
spaces:
add r1,nspace
rts r5
+231
View File
@@ -0,0 +1,231 @@
/
/
/ io4 -- numeric output conversion
qicv:
hicv:
jsr r5,rerr; 999.
sys exit
xicv:
jsr r5,fgetc
rts r5
gocv:
mov pc,gflg
jsr r5,getarg
mov ndig,_ndigit
jsr pc,ecvt
tst r2
bmi eocv
cmp r2,ndig
bgt eocv
sub r2,ndig
sub $4,width
jsr r5,focv
add $4,width
add $4,nspace
rts r5
eocv:
mov $'e,-(sp)
br 1f
docv:
mov $'d,-(sp)
1:
tst gflg
bne 1f
jsr r5,getarg
1:
mov ndig,r1
add $6,r1
add nflg,r1
sub width,r1
bge 2f
sub r1,nspace
2:
tst nflg
beq 2f
mov $'-,r0
jsr r5,fputcc
2:
mov ndig,r1
mov scale,r0
bgt 2f
add r0,r1
br 3f
2:
inc r1
3:
mov r1,_ndigit
jsr pc,ecvt
mov r0,r1
mov r2,-(sp)
mov scale,r2
sub r2,(sp)
tst r2
bgt 2f
mov $'0,r0
jsr r5,fputcc
br 3f
2:
movb (r1)+,r0
dec _ndigit
jsr r5,fputcc
sob r2,2b
3:
mov $'.,r0
jsr r5,fputcc
neg r2
ble 2f
3:
mov $'0,r0
jsr r5,fputcc
sob r2,3b
2:
mov _ndigit,r2
ble 2f
3:
movb (r1)+,r0
jsr r5,fputcc
sob r2,3b
2:
mov 2(sp),r0
jsr r5,fputcc
mov (sp)+,r1
bge 2f
mov $'-,r0
jsr r5,fputcc
neg r1
br 3f
2:
mov $'+,r0
jsr r5,fputcc
3:
clr r0
div $10.,r0
add $'0,r0
jsr r5,fputcc
mov r1,r0
add $'0,r0
jsr r5,fputcc
tst (sp)+
rts r5
iocv:
clr -(sp)
clr ndig
br 1f
focv:
mov $1,-(sp)
1:
clr -(sp)
tst gflg
bne 1f
jsr r5,getarg
tst 2(sp)
beq 1f
mov scale,(sp)
1:
mov ndig,_ndigit
add (sp)+,_ndigit
jsr pc,fcvt
mov r0,r1
tst (sp)
beq 1f
tst gflg
bne 1f
add scale,r2
1:
mov ndig,r0
add (sp),r0
add nflg,r0
tst r2
ble 1f
add r2,r0
br 2f
1:
inc r0
2:
sub width,r0
bge 1f
sub r0,nspace
1:
tst nflg
beq 1f
mov $'-,r0
jsr r5,fputcc
1:
tst r2
bgt 1f
mov $'0,r0
jsr r5,fputcc
br 2f
1:
movb (r1)+,r0
jsr r5,fputcc
sob r2,1b
2:
tst (sp)+
beq 1f
mov $'.,r0
jsr r5,fputcc
1:
mov ndig,-(sp)
ble 1f
tst r2
bge 1f
neg r2
2:
mov $'0,r0
jsr r5,fputcc
dec ndig
ble 1f
sob r2,2b
1:
mov ndig,r2
ble 2f
1:
movb (r1)+,r0
jsr r5,fputcc
sob r2,1b
2:
mov (sp)+,ndig
rts r5
getarg:
clr nflg
setd
cmpb itype,$'r
beq 1f
seti
cmpb ilen,$4
bne 2f
setl
2:
cmpb ilen,$1
beq 3f
movif *ilval,r0
br 2f
3:
movb *ilval,r0
movif r0,fr0
br 2f
1:
cmpb ilen,$4
bne 1f
movof *ilval,r0
br 2f
1:
movf *ilval,r0
2:
cfcc
bge 1f
absf r0
mov $1,nflg
1:
rts r5
+96
View File
@@ -0,0 +1,96 @@
/
/
/ io5 -- more conversions
/.globl hocv
/.globl qocv
/.globl xocv
/.globl aocv
/.globl locv
/
/.globl fmtchr
/.globl fputcc
/.globl rep
/.globl formp
/.globl spaces
/.globl ilen
/.globl width
/.globl ilval
.globl rerr
hocv:
jsr r5,fmtchr
tst r0
beq 2f
jsr r5,fputcc
dec rep
bgt hocv
rts r5
2:
jsr r5,rerr; 111.
sys exit
qocv:
mov formp,-(sp)
1:
jsr r5,fmtchr
tst r0
beq 2f
cmp r0,$'"
beq 2f
jsr r5,fputcc
br 1b
2:
dec rep
ble 1f
mov (sp),formp
br 1b
1:
tst (sp)+
rts r5
xocv:
mov $1,r1
jsr r5,spaces
rts r5
aocv:
movb ilen,r1
sub width,r1
neg r1
bpl 1f
clr r1
1:
jsr r5,spaces
mov ilval,r2
mov width,r1
cmpb r1,ilen
ble 2f
movb ilen,r1
2:
movb (r2)+,r0
jsr r5,fputcc
dec r1
bgt 2b
rts r5
locv:
mov width,r1
dec r1
jsr r5,spaces
mov $'f,r0
movb ilen,r1
mov ilval,r2
2:
tstb (r2)+
bne 1f
dec r1
bgt 2b
br 2f
1:
mov $'t,r0
2:
jsr r5,fputcc
rts r5
+248
View File
@@ -0,0 +1,248 @@
/
/
/ io6 -- input conversions
/.globl aicv
/.globl gicv
/
/.globl ilval
/.globl width
/.globl ilen
/.globl fgetc
/.globl itype
/.globl nlflg
/.globl gcflg
aicv:
mov ilval,r1
movb width,r2
movb ilen,r0
mov r0,-(sp)
1:
cmp r2,(sp)
ble 1f
jsr r5,fgetc
dec r2
br 1b
1:
tst r2
ble 1f
jsr r5,fgetc
movb r0,(r1)+
dec r2
dec (sp)
br 1b
1:
tst (sp)
ble 1f
movb $' ,(r1)+
dec (sp)
br 1b
1:
tst (sp)+
rts r5
licv:
mov width,twidth
setd
seti
clrf fr0
1:
jsr r5,fgetcn
cmp r0,$'t
beq 2f
cmp r0,$'T
beq 2f
cmp r0,$'1
beq 2f
cmp r0,$',
beq 1f
br 1b
2:
movif $1,fr0
br 1b
1:
br storin
iicv:
clr ndig
ficv:
eicv:
dicv:
mov width,twidth
br 1f
gicv:
mov $16383.,twidth
clr ndig
mov pc,gcflg
br 2f
1:
clr gcflg
2:
jsr r5,gatof
storin:
cmpb itype,$'r
beq 1f
cmpb ilen,$1
beq 3f
cmpb ilen,$4
bne 2f
setl
2:
movfi fr0,*ilval
rts r5
3:
movfi fr0,r0
movb r0,*ilval
rts r5
1:
cmpb ilen,$8.
beq 2f
setf
2:
movf fr0,*ilval
rts r5
gatof:
setd
seti
movif $10.,fr3
clr r2
clrf fr0
clr -(sp)
1:
jsr r5,fgetcn
cmp $' ,r0
bne 1f
tst nlflg
beq 1b
tst (sp)+
rts r5
1:
cmp r0,$'+
beq 1f
cmp r0,$'-
bne 2f
inc (sp)
1:
jsr r5,fgetcn
2:
cmp $' ,r0
bne 3f
tst gcflg
bne 3f
mov $'0,r0
3:
sub $'0,r0
cmp r0,$9.
bhi 2f
mulf fr3,fr0
movif r0,fr1
addf fr1,fr0
dec r1
br 1b
2:
add $'0,r0
cmp r0,$'.
bne 1f
inc r2
clr r1
br 1b
1:
mov r3,-(sp)
clr r3
cmp r0,$'d
beq 3f
cmp r0,$'+
beq 3f
cmp r0,$'-
beq 3f
cmp r0,$'e
bne 2f
3:
jsr r5,atoi
2:
tst r2
bne 1f
mov ndig,r1
neg r1
1:
movf fr3,fr2
add r3,r1
mov (sp)+,r3
tst r1
beq 1f
bpl 3f
neg r1
mov pc,-(sp)
br 2f
3:
clr -(sp)
2:
dec r1
ble 2f
mulf fr3,fr2
br 2b
2:
tst (sp)+
bne 2f
mulf fr2,fr0
br 1f
2:
divf fr2,fr0
1:
tst (sp)+
beq 1f
negf r0
1:
cmp r0,$',
beq 1f
cmp $' ,r0
beq 1f
jsr r5,rerr; 110.
1:
rts r5
atoi:
clr -(sp)
cmp r0,$'+
beq 1f
cmp r0,$'-
beq 3f
jsr r5,fgetcn
cmp r0,$'+
beq 1f
cmp r0,$'-
bne 2f
3:
inc (sp)
1:
jsr r5,fgetcn
2:
sub $'0,r0
cmp r0,$'9.
bhi 2f
mpy $10.,r3
add r0,r3
br 1b
2:
add $'0,r0
tst (sp)+
beq 1f
neg r3
1:
rts r5
fgetcn:
tst twidth
bgt 1f
mov $',,r0
rts r5
1:
jsr r5,fgetc
dec twidth
rts r5
+62
View File
@@ -0,0 +1,62 @@
/
/
/ Fortran binary I/O
.globl iowu
.globl ioru
.globl rewi
.globl enfl
iowu:
tst (sp)+
mov (sp)+,r1 / unit number
jsr r5,setio; 42
1:
jsr r5,getitm
br 1f
movb ilen,r1
mov ilval,r2
2:
movb (r2)+,r0
jsr r5,fputc
sob r1,2b
br 1b
1:
jsr r5,fflush
jmp *(r4)+
ioru:
tst (sp)+
mov (sp)+,r1 / unit number
jsr r5,setio; 41
clr nlflg
mov pc,binflg
1:
jsr r5,getitm
br 1f
movb ilen,r1
mov ilval,r2
2:
jsr r5,fgetc
movb r0,(r2)+
sob r1,2b
br 1b
1:
jmp *(r4)+
rewi:
enfl:
tst (sp)+
mov (sp)+,r1 / unit number
jsr r5,chkunit
clrb utable(r1)
asl r1
mov *btable(r1),r0
cmp r0,$1
bhi 1f
sys seek; 0; 0
jmp *(r4)+
1:
sys close
jmp *(r4)+
+51
View File
@@ -0,0 +1,51 @@
/
/
/ iox -- io variables
.globl _nocr
.globl utable
.globl btable
.globl ftable
.globl _end
.globl formp
bufp: _end
filnam:
<fortxx\0>; .even
.bss
gflg: .=.+2
formp: .=.+2
rdflg: .=.+2
nflg: .=.+2
unit: .=.+2
buffer: .=.+2
slcnt: .=.+2
itype: .=.+1
ilen: .=.+1
ilval: .=.+2
width: .=.+2
twidth: .=.+2
ndig: .=.+2
pbuf: .=.+10
ppar: .=.+2
llp: .=.+2
llpcnt: .=.+2
itmflg: .=.+2
nspace: .=.+2
gcflg: .=.+2
binflg: .=.+2
utable: .=.+20.
btable: .=.+40.
ftable: .=.+2.
rep: .=.+2
scale: .=.+2
itmfnd: .=.+2
ngflg: .=.+2
nlflg: .=.+2
_nocr: .=.+2