Research V7 development
[unix-history] / usr / src / cmd / standalone / M.s
/ Startup code for two-stage bootstrap
/ non-UNIX instructions
mfpi = 6500^tst
stst = 170300^tst
mtpi = 6600^tst
mfpd = 106500^tst
mtpd = 106600^tst
spl = 230
ldfps = 170100^tst
stfps = 170200^tst
wait = 1
rtt = 6
halt = 0
reset = 5
trap = 104400
.globl _end
.globl _main
start:
reset
mov $340,PS
mov $140100,sp
/ set kernel I+D to physical 0 and IO page
clr r1
mov $77406,r2
mov $KISA0,r3
mov $KISD0,r4
jsr pc,setseg
mov $IO,-(r3)
clr r1
mov $KDSA0,r3
mov $KDSD0,r4
jsr pc,setseg
mov $IO,-(r3)
/ set user I+D to physical 64K (words) and IO page
mov $4000,r1
mov $UISA0,r3
mov $UISD0,r4
jsr pc,setseg
mov $IO,-(r3)
mov $4000,r1
mov $UDSA0,r3
mov $UDSD0,r4
jsr pc,setseg
mov $IO,-(r3)
/ enable map
mov $65,SSR3 / 22-bit map
bit $20,SSR3
beq 1f
mov $3,MSCR
1:
mov $30340,PS
inc SSR0
/ copy program to user I space
mov $_end,r0
asr r0
clr r1
1:
mov (r1),-(sp)
mtpi (r1)+
sob r0,1b
/ continue execution in user space copy
mov $140004,sp
clr *$KDSA6
mov $140340,-(sp)
mov $user,-(sp)
rtt
user:
mov $_end+512.,sp
mov sp,r5
jsr pc,_main
trap
br user
setseg:
mov $8,r0
1:
mov r1,(r3)+
add $200,r1
mov r2,(r4)+
sob r0,1b
rts pc
.globl _setseg
_setseg:
mov 2(sp),r1
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
mov $77406,r2
mov $KISA0,r3
mov $KISD0,r4
jsr pc,setseg
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
rts pc
/ clrseg(addr,count)
.globl _clrseg
_clrseg:
mov 4(sp),r0
beq 2f
asr r0
bic $!77777,r0
mov 2(sp),r1
1:
clr -(sp)
mtpi (r1)+
sob r0,1b
2:
rts pc
/ mtpi(word,addr)
.globl _mtpi
_mtpi:
mov 4(sp),r0
mov 2(sp),-(sp)
mtpi (r0)+
rts pc
.globl __rtt
__rtt:
halt
PS = 177776
SSR0 = 177572
SSR1 = 177574
SSR2 = 177576
SSR3 = 172516
KISA0 = 172340
KISA1 = 172342
KISA7 = 172356
KISD0 = 172300
KISD7 = 172316
KDSA0 = 172360
KDSA6 = 172374
KDSA7 = 172376
KDSD0 = 172320
KDSD5 = 172332
SISA0 = 172240
SISA1 = 172242
SISD0 = 172200
SISD1 = 172202
UISA0 = 177640
UISD0 = 177600
UDSA0 = 177660
UDSD0 = 177620
MSCR = 017777746 / 11/70 memory control register
IO = 177600
SWR = 177570
.data