From 64f49b876371a1329af82562e4b30f9d9542206c Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Wed, 16 May 1979 16:27:51 -0500 Subject: [PATCH 1/1] Research V7 development Work on file usr/src/cmd/standalone/M.s Co-Authored-By: Dennis Ritchie Synthesized-from: v7 --- usr/src/cmd/standalone/M.s | 166 +++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 usr/src/cmd/standalone/M.s diff --git a/usr/src/cmd/standalone/M.s b/usr/src/cmd/standalone/M.s new file mode 100644 index 0000000000..d96690b1ca --- /dev/null +++ b/usr/src/cmd/standalone/M.s @@ -0,0 +1,166 @@ +/ 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 + -- 2.20.1