Add original unix v6
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)+
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user