Add original unix v6
This commit is contained in:
+427
@@ -0,0 +1,427 @@
|
||||
/ fp1 -- floating point simulator
|
||||
|
||||
rti = 2
|
||||
bpt = 3
|
||||
|
||||
m.ext = 200 / long mode bit
|
||||
m.lngi = 100 / long integer mode
|
||||
|
||||
.globl fptrap
|
||||
.globl ac0, ac1, ac2, ac3
|
||||
|
||||
fptrap:
|
||||
dec reenter
|
||||
bge 1f
|
||||
4 / reentered!
|
||||
1:
|
||||
mov (sp)+,spc
|
||||
mov (sp)+,sps
|
||||
mov r0,sr0
|
||||
mov $sr1,r0
|
||||
mov r1,(r0)+
|
||||
mov r2,(r0)+
|
||||
mov r3,(r0)+
|
||||
mov r4,(r0)+
|
||||
mov r5,(r0)+
|
||||
mov sp,(r0)+
|
||||
sub $8,sp / room for double push
|
||||
mov (r0),r5 / pc
|
||||
clr trapins
|
||||
mov -(r5),r5 / trapped instruction
|
||||
mov r5,r4
|
||||
bic $7777,r4
|
||||
cmp r4,$170000
|
||||
beq 1f
|
||||
jmp badins
|
||||
1:
|
||||
bic $100000,fpsr / clear fp error
|
||||
bic $170000,r5
|
||||
mov r5,r4
|
||||
bit $7000,r4
|
||||
bne class3
|
||||
bit $700,r4
|
||||
bne class2
|
||||
cmp r4,$12
|
||||
blos 1f
|
||||
jmp badins
|
||||
1:
|
||||
asl r4
|
||||
jmp *1f(r4)
|
||||
|
||||
.data
|
||||
1:
|
||||
i.cfcc / 170000
|
||||
i.setf / 170001
|
||||
i.seti / 170002
|
||||
badins
|
||||
badins
|
||||
badins
|
||||
badins
|
||||
badins
|
||||
badins
|
||||
i.setd / 170011
|
||||
i.setl / 170012
|
||||
.text
|
||||
|
||||
class2:
|
||||
cmp r5,$400
|
||||
bge 1f
|
||||
jsr r1,fsrc; mod0rx; mod242
|
||||
br 2f
|
||||
1:
|
||||
jsr r1,fsrc; mod0f; mod24f
|
||||
2:
|
||||
mov r3,r5
|
||||
asl r4
|
||||
asl r4
|
||||
clrb r4
|
||||
swab r4
|
||||
asl r4
|
||||
jsr pc,*1f(r4)
|
||||
jmp sret
|
||||
|
||||
.data
|
||||
1:
|
||||
badins / 1700xx
|
||||
i.ldfps / 1701xx
|
||||
i.stfps / 1702xx
|
||||
badins / 1703xx - stst
|
||||
i.clrx / 1704xx
|
||||
i.tstx / 1705xx
|
||||
i.absx / 1706xx
|
||||
i.negx / 1707xx
|
||||
.text
|
||||
|
||||
class3:
|
||||
cmp r5,$5000
|
||||
blt 1f
|
||||
mov r5,r2
|
||||
clrb r2
|
||||
cmp r2,$6400
|
||||
blt 2f
|
||||
sub $1400,r2
|
||||
2:
|
||||
cmp r2,$5000
|
||||
bne 2f
|
||||
jsr r1,fsrc; mod0rx; mod242
|
||||
br 3f
|
||||
2:
|
||||
cmp r2,$5400
|
||||
bne 2f
|
||||
jsr r1,fsrc; mod0ra; mod24i
|
||||
br 3f
|
||||
2:
|
||||
jsr r1,fsrc; mod0f; mod24d
|
||||
br 3f
|
||||
1:
|
||||
jsr r1,fsrc; mod0f; mod24f
|
||||
3:
|
||||
jsr pc,freg
|
||||
mov r2,r5
|
||||
clrb r4
|
||||
swab r4
|
||||
asl r4
|
||||
jsr pc,*1f(r4)
|
||||
br sret
|
||||
|
||||
.data
|
||||
1:
|
||||
badins / 1700xx
|
||||
badins / 1704xx
|
||||
i.mulx / 1710xx
|
||||
i.modx / 1714xx
|
||||
i.addx / 1720xx
|
||||
i.ldx / 1724xx
|
||||
i.subx / 1730xx
|
||||
i.cmpx / 1734xx
|
||||
i.stx / 1740xx
|
||||
i.divx / 1744xx
|
||||
i.stexp / 1750xx
|
||||
i.stcxj / 1754xx
|
||||
i.stcxy / 1760xx
|
||||
i.ldexp / 1764xx
|
||||
i.ldcjx / 1770xx
|
||||
i.ldcyx / 1774xx
|
||||
.text
|
||||
|
||||
i.cfcc:
|
||||
mov fpsr,r0
|
||||
bic $!17,r0
|
||||
mov r0,sps
|
||||
br ret
|
||||
|
||||
i.setf:
|
||||
bic $m.ext,fpsr
|
||||
br ret
|
||||
|
||||
i.setd:
|
||||
bis $m.ext,fpsr
|
||||
br ret
|
||||
|
||||
i.seti:
|
||||
bic $m.lngi,fpsr
|
||||
br ret
|
||||
|
||||
i.setl:
|
||||
bis $m.lngi,fpsr
|
||||
br ret
|
||||
|
||||
badins:
|
||||
inc trapins
|
||||
br ret
|
||||
|
||||
sret:
|
||||
mov $fpsr,r0
|
||||
bic $17,(r0)
|
||||
tst (r5)
|
||||
bpl 1f
|
||||
bis $10,(r0)
|
||||
br ret
|
||||
1:
|
||||
bne ret
|
||||
bis $4,(r0)
|
||||
|
||||
ret:
|
||||
mov $sr1,r0
|
||||
mov (r0)+,r1
|
||||
mov (r0)+,r2
|
||||
mov (r0)+,r3
|
||||
mov (r0)+,r4
|
||||
mov (r0)+,r5
|
||||
mov (r0)+,sp
|
||||
mov sr0,r0
|
||||
mov sps,-(sp)
|
||||
mov spc,-(sp)
|
||||
tst trapins
|
||||
bne 1f
|
||||
inc reenter
|
||||
rti
|
||||
1:
|
||||
bpt
|
||||
|
||||
freg:
|
||||
mov r5,r2
|
||||
bic $!300,r2
|
||||
asr r2
|
||||
asr r2
|
||||
asr r2
|
||||
add $ac0,r2
|
||||
rts pc
|
||||
|
||||
fsrc:
|
||||
mov r5,r3
|
||||
bic $!7,r3 / register
|
||||
asl r3
|
||||
add $sr0,r3
|
||||
mov r5,r0
|
||||
bic $!70,r0 / mode
|
||||
asr r0
|
||||
asr r0
|
||||
jmp *1f(r0)
|
||||
|
||||
.data
|
||||
1:
|
||||
mod0
|
||||
mod1
|
||||
mod2
|
||||
mod3
|
||||
mod4
|
||||
mod5
|
||||
mod6
|
||||
mod7
|
||||
.text
|
||||
|
||||
mod24f:
|
||||
mov $4,r0
|
||||
bit $m.ext,fpsr
|
||||
beq 1f
|
||||
add $4,r0
|
||||
1:
|
||||
rts pc
|
||||
|
||||
mod24d:
|
||||
mov $8,r0
|
||||
bit $m.ext,fpsr
|
||||
beq 1f
|
||||
sub $4,r0
|
||||
1:
|
||||
rts pc
|
||||
|
||||
mod242:
|
||||
mov $2,r0
|
||||
rts pc
|
||||
|
||||
mod24i:
|
||||
mov $2,r0
|
||||
bit $m.lngi,fpsr
|
||||
beq 1f
|
||||
add $2,r0
|
||||
1:
|
||||
rts pc
|
||||
|
||||
mod0:
|
||||
jmp *(r1)+
|
||||
|
||||
mod0f:
|
||||
sub $sr0,r3 / get fp ac
|
||||
cmp r3,$6*2
|
||||
bhis badi1
|
||||
asl r3
|
||||
asl r3
|
||||
add $ac0,r3
|
||||
tst (r1)+
|
||||
rts r1
|
||||
|
||||
mod0ra:
|
||||
bit $m.lngi,fpsr
|
||||
bne badi1
|
||||
|
||||
mod0r:
|
||||
cmp r3,$ssp
|
||||
bhis badi1
|
||||
mod0rx:
|
||||
tst (r1)+
|
||||
rts r1
|
||||
|
||||
mod1:
|
||||
cmp r3,$spc
|
||||
beq badi1
|
||||
mov (r3),r3
|
||||
br check
|
||||
|
||||
mod2:
|
||||
mov (r3),-(sp)
|
||||
jsr pc,*2(r1)
|
||||
cmp r3,$spc
|
||||
bne 1f
|
||||
mov $2,r0
|
||||
mov *(r3),pctmp
|
||||
mov $pctmp,(sp)
|
||||
1:
|
||||
add r0,(r3)
|
||||
mov (sp)+,r3
|
||||
br check
|
||||
|
||||
mod3:
|
||||
mov *(r3),-(sp)
|
||||
add $2,(r3)
|
||||
mov (sp)+,r3
|
||||
br check
|
||||
|
||||
mod4:
|
||||
cmp r3,$spc / test pc
|
||||
beq badi1
|
||||
jsr pc,*2(r1)
|
||||
sub r0,(r3)
|
||||
mov (r3),r3
|
||||
br check
|
||||
|
||||
mod5:
|
||||
cmp r3,$spc
|
||||
beq badi1
|
||||
sub $2,(r3)
|
||||
mov *(r3),r3
|
||||
br check
|
||||
|
||||
mod6:
|
||||
mov *spc,-(sp)
|
||||
add $2,spc
|
||||
add (r3),(sp)
|
||||
mov (sp)+,r3
|
||||
br check
|
||||
|
||||
mod7:
|
||||
jsr r1,mod6; ..; ..
|
||||
mov (r3),r3
|
||||
br check
|
||||
|
||||
badi1:
|
||||
jmp badins
|
||||
|
||||
check:
|
||||
bit $1,r3
|
||||
bne badi1
|
||||
cmp (r1)+,(r1)+
|
||||
rts r1
|
||||
|
||||
setab:
|
||||
mov $asign,r0
|
||||
jsr pc,seta
|
||||
mov r3,r2
|
||||
mov $bsign,r0
|
||||
|
||||
seta:
|
||||
clr (r0)
|
||||
mov (r2)+,r1
|
||||
mov r1,-(sp)
|
||||
beq 1f
|
||||
blt 2f
|
||||
inc (r0)+
|
||||
br 3f
|
||||
2:
|
||||
dec (r0)+
|
||||
3:
|
||||
bic $!177,r1
|
||||
bis $200,r1
|
||||
br 2f
|
||||
1:
|
||||
clr (r0)+
|
||||
2:
|
||||
mov r1,(r0)+
|
||||
mov (r2)+,(r0)+
|
||||
bit $m.ext,fpsr
|
||||
beq 2f
|
||||
mov (r2)+,(r0)+
|
||||
mov (r2)+,(r0)+
|
||||
br 3f
|
||||
2:
|
||||
clr (r0)+
|
||||
clr (r0)+
|
||||
3:
|
||||
mov (sp)+,r1
|
||||
asl r1
|
||||
clrb r1
|
||||
swab r1
|
||||
sub $200,r1
|
||||
mov r1,(r0)+ / exp
|
||||
rts pc
|
||||
|
||||
norm:
|
||||
mov $areg,r0
|
||||
mov (r0)+,r1
|
||||
mov r1,-(sp)
|
||||
mov (r0)+,r2
|
||||
bis r2,(sp)
|
||||
mov (r0)+,r3
|
||||
bis r3,(sp)
|
||||
mov (r0)+,r4
|
||||
bis r4,(sp)+
|
||||
bne 1f
|
||||
clr asign
|
||||
rts pc
|
||||
1:
|
||||
bit $!377,r1
|
||||
beq 1f
|
||||
clc
|
||||
ror r1
|
||||
ror r2
|
||||
ror r3
|
||||
ror r4
|
||||
inc (r0)
|
||||
br 1b
|
||||
1:
|
||||
bit $200,r1
|
||||
bne 1f
|
||||
asl r4
|
||||
rol r3
|
||||
rol r2
|
||||
rol r1
|
||||
dec (r0)
|
||||
br 1b
|
||||
1:
|
||||
mov r4,-(r0)
|
||||
mov r3,-(r0)
|
||||
mov r2,-(r0)
|
||||
mov r1,-(r0)
|
||||
rts pc
|
||||
|
||||
Reference in New Issue
Block a user