Add original unix v6
This commit is contained in:
+726
@@ -0,0 +1,726 @@
|
||||
/ db1 -- debugger
|
||||
|
||||
fpp = 0
|
||||
eae = 0
|
||||
ldfps = 170100^tst
|
||||
|
||||
|
||||
db:
|
||||
mov sp,r5
|
||||
mov (r5)+,r4
|
||||
tst (r5)+
|
||||
cmp r4,$2
|
||||
blt 1f
|
||||
mov (r5),dbfile
|
||||
mov (r5),odbfil
|
||||
mov (r5)+,namfil
|
||||
cmp r4,$2
|
||||
beq 1f
|
||||
mov (r5)+,namfil
|
||||
1:
|
||||
sys open; dbfile: core; 0
|
||||
bec 9f
|
||||
jmp fnfnd
|
||||
9:
|
||||
mov r0,dbfin
|
||||
clr dbfout
|
||||
sys open; odbfil:core; 1
|
||||
bes 1f
|
||||
mov r0,dbfout
|
||||
1:
|
||||
sys open; namfil: a.out; 0
|
||||
bes 1f
|
||||
mov r0,r1
|
||||
mov r0,symfin
|
||||
sys read; nambuf; 20
|
||||
cmp nambuf,nobjmagic
|
||||
beq 2f
|
||||
cmp nambuf,objmagic
|
||||
bne 1f
|
||||
2:
|
||||
mov nambuf+2,r0 / text
|
||||
add nambuf+4,r0 / data
|
||||
cmp nambuf+16,$1 / relocation?
|
||||
beq 6f
|
||||
asl r0 / sym origin
|
||||
6:
|
||||
add $20,r0
|
||||
mov r0,0f
|
||||
mov r1,r0
|
||||
sys seek; 0:..; 0
|
||||
mov nambuf+10,r0 / symbol size
|
||||
cmp r0,$maxsym
|
||||
blos 3f
|
||||
mov $maxsym,r0
|
||||
3:
|
||||
add r0,0f
|
||||
sys break; 0: nambuf
|
||||
mov r0,0f
|
||||
mov r1,r0
|
||||
sys read; nambuf; 0:..
|
||||
add $nambuf,r0
|
||||
mov r0,namsiz
|
||||
1:
|
||||
jsr r5,get; zero / test new object
|
||||
cmp r0,nobjmagic
|
||||
beq 2f
|
||||
cmp r0,objmagic
|
||||
bne 1f
|
||||
2:
|
||||
mov $20,getoff
|
||||
1:
|
||||
mov sp,savsp
|
||||
sys signal; 2; 1
|
||||
ror r0
|
||||
bcs 1f
|
||||
sys signal; 2; errexit
|
||||
1:
|
||||
cmp r4,$2 / arg count
|
||||
beq 9f / not core image
|
||||
cmp r4,$4 / no-core image flag
|
||||
beq 9f
|
||||
mov $1024.,getoff
|
||||
mov dbfin,r0
|
||||
sys seek; 0; 0
|
||||
mov dbfin,r0
|
||||
sys read; regbuf; 1024.
|
||||
mov txtsiz,r0
|
||||
ash $6,r0
|
||||
mov r0,txtsiz
|
||||
add $17777,r0
|
||||
bic $17777,r0
|
||||
mov r0,rtxtsiz
|
||||
mov datsiz,r0
|
||||
ash $6,r0
|
||||
mov r0,datsiz
|
||||
mov stksiz,r0
|
||||
ash $6,r0
|
||||
mov r0,stksiz
|
||||
mov *locfpsr,r0
|
||||
bic $!200,r0
|
||||
mov r0,fpsr
|
||||
br loop
|
||||
9:
|
||||
loop:
|
||||
clr error
|
||||
jsr pc,readlin
|
||||
jsr pc,readexp
|
||||
tst error
|
||||
bne errexit
|
||||
mov $1,count
|
||||
cmpb r0,$',
|
||||
bne 2f
|
||||
movb (r4)+,r0
|
||||
mov addres,-(sp)
|
||||
mov adrflg,-(sp)
|
||||
jsr pc,readexp
|
||||
mov addres,count
|
||||
mov (sp)+,adrflg
|
||||
mov (sp)+,addres
|
||||
tst error
|
||||
bne errexit
|
||||
2:
|
||||
movb (r4),r0
|
||||
jsr pc,command
|
||||
tst error
|
||||
beq loop
|
||||
errexit:
|
||||
sys signal; 2; errexit
|
||||
mov savsp,sp
|
||||
jsr r5,mesg; <?\n\0>; .even
|
||||
br loop
|
||||
|
||||
fnfnd:
|
||||
jsr r5,mesg; <File not found.\n\0>; .even
|
||||
ex:
|
||||
sys exit
|
||||
|
||||
readlin:
|
||||
mov $inbuf,r4
|
||||
1:
|
||||
mov ttyfin,r0
|
||||
sys read; ch; 1
|
||||
tst r0
|
||||
beq ex
|
||||
cmpb ch,$'\n
|
||||
beq 1f
|
||||
movb ch,(r4)+
|
||||
br 1b
|
||||
1:
|
||||
clrb (r4)
|
||||
mov $inbuf,r4
|
||||
rts pc
|
||||
|
||||
switch:
|
||||
mov (r5)+,r1
|
||||
2:
|
||||
cmp r0,(r1)+
|
||||
bne 1f
|
||||
tst (sp)+
|
||||
jmp *(r1)
|
||||
1:
|
||||
tst (r1)+
|
||||
bne 2b
|
||||
rts r5
|
||||
|
||||
readexp:
|
||||
mov $'+,lastop
|
||||
clr addres
|
||||
clr starmod
|
||||
clr taddr
|
||||
clr adrflg
|
||||
nextxp:
|
||||
movb (r4)+,r0
|
||||
cmp r0,$'0
|
||||
blt 1f
|
||||
cmp r0,$'9
|
||||
ble numin
|
||||
cmp r0,$'a
|
||||
blt 1f
|
||||
cmp r0,$'z
|
||||
bgt 1f
|
||||
jmp letin
|
||||
1:
|
||||
cmp r0,$'a-40
|
||||
blt 1f
|
||||
cmp r0,$'z-40
|
||||
ble letin
|
||||
1:
|
||||
jsr r5,switch; expsw
|
||||
tstb -(r4)
|
||||
tst starmod
|
||||
beq 1f
|
||||
mov dot,taddr
|
||||
br operand
|
||||
1:
|
||||
rts pc
|
||||
|
||||
expsw:
|
||||
'+; opex
|
||||
'-; opex
|
||||
' ; nextxp
|
||||
'.; letin
|
||||
'_; letin
|
||||
'^; circumf
|
||||
'*; star
|
||||
-1; 0
|
||||
|
||||
star:
|
||||
mov pc,starmod
|
||||
br nextxp
|
||||
|
||||
operand:
|
||||
inc adrflg
|
||||
tst starmod
|
||||
beq 1f
|
||||
clr starmod
|
||||
bis bytemod,error
|
||||
jsr r5,get; taddr
|
||||
tst error
|
||||
bne 1f
|
||||
mov r0,taddr
|
||||
1:
|
||||
cmp lastop,$'+
|
||||
beq 1f
|
||||
sub taddr,addres
|
||||
br 2f
|
||||
1:
|
||||
add taddr,addres
|
||||
2:
|
||||
mov $'+,lastop
|
||||
br nextxp
|
||||
|
||||
circumf:
|
||||
mov dot,taddr
|
||||
dec taddr
|
||||
tst bytemod
|
||||
bne operand
|
||||
dec taddr
|
||||
br operand
|
||||
|
||||
numin:
|
||||
clr r1
|
||||
clr r3
|
||||
1:
|
||||
sub $'0,r0
|
||||
asl r1
|
||||
asl r1
|
||||
asl r1
|
||||
mpy $10.,r3
|
||||
bis r0,r1
|
||||
add r0,r3
|
||||
movb (r4)+,r0
|
||||
cmp r0,$'0
|
||||
blo 1f
|
||||
cmp r0,$'9
|
||||
blos 1b
|
||||
1:
|
||||
cmp r0,$'.
|
||||
bne 1f
|
||||
mov r3,r1
|
||||
inc r4
|
||||
1:
|
||||
mov r1,taddr
|
||||
dec r4
|
||||
br operand
|
||||
|
||||
letin:
|
||||
dec r4
|
||||
mov $nambuf,namstrt
|
||||
letin1:
|
||||
mov $symbol,r1
|
||||
clr (r1)+
|
||||
clr (r1)+
|
||||
clr (r1)+
|
||||
clr (r1)
|
||||
mov $symbol,r1
|
||||
mov $8.,-(sp)
|
||||
br 2f
|
||||
1:
|
||||
tstb (r4)+
|
||||
cmpb (r4),$'.
|
||||
beq 2f
|
||||
cmpb (r4),$'0
|
||||
blo 3f
|
||||
cmpb (r4),$'9
|
||||
blos 2f
|
||||
cmpb (r4),$'A
|
||||
blo 3f
|
||||
cmpb (r4),$'Z
|
||||
blos 2f
|
||||
cmpb (r4),$'_
|
||||
beq 2f
|
||||
cmpb (r4),$'a
|
||||
blo 3f
|
||||
cmpb (r4),$'z
|
||||
bhi 3f
|
||||
2:
|
||||
dec (sp)
|
||||
blt 1b
|
||||
movb (r4),(r1)+
|
||||
br 1b
|
||||
3:
|
||||
tst (sp)+
|
||||
jsr pc,lookupn
|
||||
tst error
|
||||
bne 1f
|
||||
cmpb (r4),$';
|
||||
beq 2f
|
||||
1:
|
||||
jmp operand
|
||||
2:
|
||||
tstb (r4)+
|
||||
mov r1,namstrt
|
||||
br letin1
|
||||
|
||||
opex:
|
||||
mov r0,lastop
|
||||
jmp nextxp
|
||||
|
||||
|
||||
command:
|
||||
jsr r5,switch; comsw
|
||||
inc error
|
||||
rts pc
|
||||
|
||||
comsw:
|
||||
'/; slash
|
||||
'\\; bslash
|
||||
'?; quest
|
||||
'\0; newln
|
||||
'^; circumf
|
||||
'=; equal
|
||||
':; colon
|
||||
'!; excla
|
||||
''; squote
|
||||
'"; dquote
|
||||
'$; dolr
|
||||
'&; amper
|
||||
'%; ex
|
||||
'`; grave
|
||||
-1; 0
|
||||
|
||||
dolr:
|
||||
mov sigp,r1
|
||||
bic $!17,r1
|
||||
asl r1
|
||||
mov traptab(r1),r1
|
||||
jsr pc,string
|
||||
jsr pc,pnl
|
||||
mov $doltab,r5
|
||||
1:
|
||||
mov (r5)+,r1
|
||||
beq 1f
|
||||
jsr pc,*(r5)+
|
||||
br 1b
|
||||
.if fpp
|
||||
1:
|
||||
mov (r5)+,r1
|
||||
beq 1f
|
||||
ldfps fpsr
|
||||
jsr pc,*(r5)+
|
||||
br 1b
|
||||
1:
|
||||
mov (r5)+,r1
|
||||
jsr pc,*(r5)+
|
||||
.endif
|
||||
1:
|
||||
rts pc
|
||||
|
||||
traptab:
|
||||
1f; .data; 1:<?0\0>; .text
|
||||
1f; .data; 1:<Hangup\0>; .text
|
||||
1f; .data; 1:<Interrupt\0>; .text
|
||||
1f; .data; 1:<Quit\0>; .text
|
||||
1f; .data; 1:<Illegal instruction\0>; .text
|
||||
1f; .data; 1:<Trace/BPT\0>; .text
|
||||
1f; .data; 1:<IOT\0>; .text
|
||||
1f; .data; 1:<EMT\0>; .text
|
||||
1f; .data; 1:<FP exception\0>; .text
|
||||
1f; .data; 1:<Killed\0>; .text
|
||||
1f; .data; 1:<Bus error\0>; .text
|
||||
1f; .data; 1:<Segmentation violation\0>; .text
|
||||
1f; .data; 1:<Bad system call\0>; .text
|
||||
1f; .data; 1:<?15\0>; .text
|
||||
1f; .data; 1:<?16\0>; .text
|
||||
1f; .data; 1:<?17\0>; .text
|
||||
|
||||
locps: regbuf+1776
|
||||
locpc: regbuf+1774
|
||||
locr0: regbuf+1772
|
||||
locr1: regbuf+1766
|
||||
locr2: regbuf+1750
|
||||
locr3: regbuf+1752
|
||||
locr4: regbuf+1754
|
||||
locsp: regbuf+1764
|
||||
locr5: regbuf+1756
|
||||
locfpsr: regbuf+4
|
||||
locfr0: regbuf+6
|
||||
locfr4: regbuf+16
|
||||
locfr5: regbuf+26
|
||||
locfr1: regbuf+36
|
||||
locfr2: regbuf+46
|
||||
locfr3: regbuf+56
|
||||
|
||||
doltab:
|
||||
1f; prgreg; locsp; .data; 1:<sp \0>; .text
|
||||
1f; proct; locps; .data; 1:<ps \0>; .text
|
||||
1f; prgreg; locpc; .data; 1:<pc \0>; .text
|
||||
1f; prgreg; locr0; .data; 1:<r0 \0>; .text
|
||||
1f; prgreg; locr1; .data; 1:<r1 \0>; .text
|
||||
1f; prgreg; locr2; .data; 1:<r2 \0>; .text
|
||||
1f; prgreg; locr3; .data; 1:<r3 \0>; .text
|
||||
1f; prgreg; locr4; .data; 1:<r4 \0>; .text
|
||||
1f; prgreg; locr5; .data; 1:<r5 \0>; .text
|
||||
0
|
||||
.if fpp
|
||||
1f; prfreg; locfr0; .data; 1:<fr0 \0>; .text
|
||||
1f; prfreg; locfr1; .data; 1:<fr1 \0>; .text
|
||||
1f; prfreg; locfr2; .data; 1:<fr2 \0>; .text
|
||||
1f; prfreg; locfr3; .data; 1:<fr3 \0>; .text
|
||||
1f; prfreg; locfr4; .data; 1:<fr4 \0>; .text
|
||||
1f; prfreg; locfr5; .data; 1:<fr5 \0>; .text
|
||||
0
|
||||
1f; proct; locfpsr; .data; 1:<fpsr \0>; .text
|
||||
.endif
|
||||
.data
|
||||
.even
|
||||
.text
|
||||
|
||||
.if fpp
|
||||
prfreg:
|
||||
mov *(r5)+,r4
|
||||
movf (r4),fr0
|
||||
cfcc
|
||||
beq 1f
|
||||
jsr pc,string
|
||||
jsr pc,printf
|
||||
jsr pc,pnl
|
||||
1:
|
||||
rts pc
|
||||
.endif
|
||||
|
||||
prgreg:
|
||||
jsr pc,string
|
||||
mov *(r5)+,r4
|
||||
mov (r4),r0
|
||||
jsr pc,printo
|
||||
mov (r4),r0
|
||||
jsr pc,lookupv
|
||||
tst r2
|
||||
beq 1f
|
||||
jsr r5,mesg; < \0>; .even
|
||||
mov (r4),r0
|
||||
jsr pc,pname
|
||||
1:
|
||||
jsr pc,pnl
|
||||
rts pc
|
||||
|
||||
proct:
|
||||
jsr pc,string
|
||||
mov *(r5)+,r4
|
||||
mov (r4),r0
|
||||
jsr pc,printo
|
||||
jsr pc,pnl
|
||||
rts pc
|
||||
|
||||
string:
|
||||
movb (r1)+,r0
|
||||
beq 1f
|
||||
jsr pc,putc
|
||||
br string
|
||||
1:
|
||||
rts pc
|
||||
|
||||
putc:
|
||||
mov r0,och
|
||||
mov $1,r0
|
||||
sys write; och; 1
|
||||
rts pc
|
||||
|
||||
equal:
|
||||
jsr r5,coleq; printo
|
||||
rts pc
|
||||
amper:
|
||||
clr bytemod
|
||||
mov $2,incdot
|
||||
jsr r5,cycle; asymp
|
||||
rts pc
|
||||
|
||||
asymp:
|
||||
jsr pc,pname
|
||||
jsr pc,pnl
|
||||
rts pc
|
||||
|
||||
bslash:
|
||||
inc bytemod
|
||||
mov $1,incdot
|
||||
br 1f
|
||||
|
||||
slash:
|
||||
clr bytemod
|
||||
mov $2,incdot
|
||||
1:
|
||||
jsr r5,cycle; octp
|
||||
rts pc
|
||||
|
||||
grave:
|
||||
clr bytemod
|
||||
mov $2,incdot
|
||||
jsr r5,cycle; decp
|
||||
rts pc
|
||||
|
||||
quest:
|
||||
clr bytemod
|
||||
jsr r5,cycle; psym
|
||||
rts pc
|
||||
|
||||
decp:
|
||||
jsr pc,printd
|
||||
jsr r5,mesg; <.\n\0>; .even
|
||||
rts pc
|
||||
|
||||
octp:
|
||||
jsr pc,printo
|
||||
jsr pc,pnl
|
||||
rts pc
|
||||
|
||||
newln:
|
||||
tst adrflg
|
||||
bne 1f
|
||||
add incdot,dot
|
||||
1:
|
||||
mov nlcom,r0
|
||||
jmp command
|
||||
|
||||
excla:
|
||||
tst adrflg
|
||||
bne 1f
|
||||
2:
|
||||
inc error
|
||||
rts pc
|
||||
1:
|
||||
bit $1,dot
|
||||
beq 1f
|
||||
tst bytemod
|
||||
beq 2b
|
||||
1:
|
||||
jsr r5,put; dot; addres
|
||||
rts pc
|
||||
|
||||
squote:
|
||||
inc bytemod
|
||||
mov $1,incdot
|
||||
br 2f
|
||||
dquote:
|
||||
clr bytemod
|
||||
mov $2,incdot
|
||||
2:
|
||||
jsr r5,cycle; ascp
|
||||
rts pc
|
||||
|
||||
ascp:
|
||||
mov r0,-(sp)
|
||||
jsr pc,ascp1
|
||||
mov (sp)+,r0
|
||||
tst bytemod
|
||||
bne 1f
|
||||
swab r0
|
||||
jsr pc,ascp1
|
||||
1:
|
||||
cmp count,$1
|
||||
bgt 1f
|
||||
jsr pc,pnl
|
||||
1:
|
||||
rts pc
|
||||
|
||||
ascp1:
|
||||
bic $!377,r0
|
||||
cmp r0,$'\n
|
||||
beq 2f
|
||||
cmp r0,$011
|
||||
beq 2f
|
||||
cmp r0,$40
|
||||
blo 1f
|
||||
cmp r0,$177
|
||||
bhis 1f
|
||||
2:
|
||||
jsr pc,putc
|
||||
rts pc
|
||||
1:
|
||||
mov r0,r1
|
||||
jsr r5,mesg; <\\\0>
|
||||
clr r0
|
||||
alsc $10.,r0
|
||||
add $'0,r0
|
||||
jsr pc,putc
|
||||
clr r0
|
||||
alsc $3,r0
|
||||
add $'0,r0
|
||||
jsr pc,putc
|
||||
clr r0
|
||||
alsc $3,r0
|
||||
add $'0,r0
|
||||
jsr pc,putc
|
||||
rts pc
|
||||
|
||||
colon:
|
||||
jsr r5,coleq; pname
|
||||
rts pc
|
||||
|
||||
coleq:
|
||||
jsr pc,setadr
|
||||
mov addres,r0
|
||||
jsr pc,*(r5)+
|
||||
jsr pc,pnl
|
||||
rts r5
|
||||
|
||||
cycle:
|
||||
mov r0,nlcom
|
||||
jsr pc,setadr
|
||||
mov addres,dot
|
||||
tst bytemod
|
||||
bne 1f
|
||||
bic $1,dot
|
||||
1:
|
||||
jsr r5,get; dot
|
||||
tst error
|
||||
bne 1f
|
||||
tst bytemod
|
||||
beq 2f
|
||||
bic $!377,r0
|
||||
2:
|
||||
jsr pc,*(r5)
|
||||
tst error
|
||||
bne 1f
|
||||
dec count
|
||||
ble 1f
|
||||
add incdot,dot
|
||||
br 1b
|
||||
1:
|
||||
tst (r5)+
|
||||
rts r5
|
||||
|
||||
setadr:
|
||||
tst adrflg
|
||||
bne 1f
|
||||
mov dot,addres
|
||||
1:
|
||||
rts pc
|
||||
|
||||
.if fpp
|
||||
printf:
|
||||
ldfps $200 / round+double
|
||||
mov r4,-(sp)
|
||||
mov r3,-(sp)
|
||||
movif $10.,r3
|
||||
movif $1,r2
|
||||
clr r4
|
||||
tstf r0
|
||||
cfcc
|
||||
beq 2f
|
||||
bge 1f
|
||||
negf r0
|
||||
mov $'-,r0
|
||||
jsr pc,putc
|
||||
1:
|
||||
cmpf r3,r0
|
||||
cfcc
|
||||
bgt 1f
|
||||
inc r4
|
||||
divf r3,r0
|
||||
br 1b
|
||||
1:
|
||||
cmpf r2,r0
|
||||
cfcc
|
||||
ble 2f
|
||||
dec r4
|
||||
mulf r3,r0
|
||||
br 1b
|
||||
2:
|
||||
modf r2,r0
|
||||
movfi r1,r0
|
||||
add $'0,r0
|
||||
jsr pc,putc
|
||||
mov $'.,r0
|
||||
jsr pc,putc
|
||||
mov $8.,r3
|
||||
1:
|
||||
modf r3,r0
|
||||
movfi r1,r0
|
||||
add $'0,r0
|
||||
jsr pc,putc
|
||||
dec r3
|
||||
bgt 1b
|
||||
mov $'E,r0
|
||||
jsr pc,putc
|
||||
mov r4,r0
|
||||
mov (sp)+,r3
|
||||
mov (sp)+,r4
|
||||
br printd
|
||||
.endif
|
||||
|
||||
printd:
|
||||
mov r1,-(sp)
|
||||
mov r0,r1
|
||||
bpl 1f
|
||||
neg r1
|
||||
mov $'-,r0
|
||||
jsr pc,putc
|
||||
1:
|
||||
jsr pc,1f
|
||||
mov (sp)+,r1
|
||||
rts pc
|
||||
1:
|
||||
clr r0
|
||||
dvd $10.,r0
|
||||
mov r1,-(sp)
|
||||
mov r0,r1
|
||||
beq 1f
|
||||
jsr pc,1b
|
||||
1:
|
||||
mov (sp)+,r0
|
||||
add $'0,r0
|
||||
jsr pc,putc
|
||||
rts pc
|
||||
|
||||
Reference in New Issue
Block a user