$ cat ken/main.c # #include "../param.h" #include "../user.h" #include "../systm.h" #include "../proc.h" #include "../text.h" #include "../inode.h" #include "../seg.h" #define CLOCK1 0177546 #define CLOCK2 0172540 /* * Icode is the octal bootstrap * program executed in user mode * to bring up the system. */ int icode[] { 0104413, /* sys exec; init; initp */ 0000014, 0000010, 0000777, /* br . */ 0000014, /* initp: init; 0 */ 0000000, 0062457, /* init: </etc/init > */ 0061564, 0064457, 0064556, 0000164, }; /* * Initialization code. * Called from m40.s or m45.s as * soon as a stack and segmentation * have been established. * Functions: * clear and free user core * find which clock is configured * hand craft 0th process * call all initialization routines * fork - process 0 to schedule * - process 1 execute bootstrap * * panic: no clock -- neither clock responds * loop at loc 6 in user mode -- /etc/init * cannot be executed. */ main() { extern schar; register i, *p; /* * zero and free all of core */ updlock = 0; i = *ka6 + USIZE; UISD->r[0] = 077406; for(;;) { UISA->r[0] = i; if(fuibyte(0) < 0) break; clearseg(i); maxmem++; mfree(coremap, 1, i); i++; } if(cputype == 70) for(i=0; i<62; i=+2) { UBMAP->r[i] = i<<12; UBMAP->r[i+1] = 0; } printf("mem = %l ", maxmem*5/16); maxmem = min(maxmem, MAXMEM); mfree(swapmap, nswap, swplo); /* * determine clock */ UISA->r[7] = ka6[1]; /* io segment */ UISD->r[7] = 077406; lks = CLOCK1; if(fuiword(lks) == -1) { lks = CLOCK2; if(fuiword(lks) == -1) panic("no clock"); } /* * set up system process */ proc[0].p_addr = *ka6; proc[0].p_size = USIZE; proc[0].p_stat = SRUN; proc[0].p_flag =| SLOAD|SSYS; u.u_procp = &proc[0]; /* * set up 'known' i-nodes */ *lks = 0115; cinit(); binit(); iinit(); rootdir = iget(rootdev, ROOTINO); rootdir->i_flag =& ~ILOCK; u.u_cdir = iget(rootdev, ROOTINO); u.u_cdir->i_flag =& ~ILOCK; /* * make init process * enter scheduling loop * with system process */ if(newproc()) { expand(USIZE+1); estabur(0, 1, 0, 0); copyout(icode, 0, sizeof icode); /* * Return goes to loc. 0 of user init * code just copied out. */ return; } sched(); } /* * Load the user hardware segmentation * registers from the software prototype. * The software registers must have * been setup prior by estabur. */ sureg() { register *up, *rp, a; a = u.u_procp->p_addr; up = &u.u_uisa[16]; rp = &UISA->r[16]; if(cputype == 40) { up =- 8; rp =- 8; } while(rp > &UISA->r[0]) *--rp = *--up + a; if((up=u.u_procp->p_textp) != NULL) a =- up->x_caddr; up = &u.u_uisd[16]; rp = &UISD->r[16]; if(cputype == 40) { up =- 8; rp =- 8; } while(rp > &UISD->r[0]) { *--rp = *--up; if((*rp & WO) == 0) rp[(UISA-UISD)/2] =- a; } } /* * Set up software prototype segmentation * registers to implement the 3 pseudo * text,data,stack segment sizes passed * as arguments. * The argument sep specifies if the * text and data+stack segments are to * be separated. */ estabur(nt, nd, ns, sep) { register a, *ap, *dp; if(sep) { if(cputype == 40) goto err; if(nseg(nt) > 8 || nseg(nd)+nseg(ns) > 8) goto err; } else if(nseg(nt)+nseg(nd)+nseg(ns) > 8) goto err; if(nt+nd+ns+USIZE > maxmem) goto err; a = 0; ap = &u.u_uisa[0]; dp = &u.u_uisd[0]; while(nt >= 128) { *dp++ = (127<<8) | RO; *ap++ = a; a =+ 128; nt =- 128; } if(nt) { *dp++ = ((nt-1)<<8) | RO; *ap++ = a; } if(sep) while(ap < &u.u_uisa[8]) { *ap++ = 0; *dp++ = 0; } a = USIZE; while(nd >= 128) { *dp++ = (127<<8) | RW; *ap++ = a; a =+ 128; nd =- 128; } if(nd) { *dp++ = ((nd-1)<<8) | RW; *ap++ = a; a =+ nd; } while(ap < &u.u_uisa[8]) { *dp++ = 0; *ap++ = 0; } if(sep) while(ap < &u.u_uisa[16]) { *dp++ = 0; *ap++ = 0; } a =+ ns; while(ns >= 128) { a =- 128; ns =- 128; *--dp = (127<<8) | RW; *--ap = a; } if(ns) { *--dp = ((128-ns)<<8) | RW | ED; *--ap = a-128; } if(!sep) { ap = &u.u_uisa[0]; dp = &u.u_uisa[8]; while(ap < &u.u_uisa[8]) *dp++ = *ap++; ap = &u.u_uisd[0]; dp = &u.u_uisd[8]; while(ap < &u.u_uisd[8]) *dp++ = *ap++; } sureg(); return(0); err: u.u_error = ENOMEM; return(-1); } /* * Return the arg/128 rounded up. */ nseg(n) { return((n+127)>>7); }
$ cat ken/main.c # #include "../param.h" #include "../user.h" #include "../systm.h" #include "../proc.h" #include "../text.h" #include "../inode.h" #include "../seg.h" #define CLOCK1 0177546 #define CLOCK2 0172540 /* * Icode is the octal bootstrap * program executed in user mode * to bring up the system. */ int icode[] { 0104413, /* sys exec; init; initp */ 0000014, 0000010, 0000777, /* br . */ 0000014, /* initp: init; 0 */ 0000000, 0062457, /* init: </etc/init > */ 0061564, 0064457, 0064556, 0000164, }; /* * Initialization code. * Called from m40.s or m45.s as * soon as a stack and segmentation * have been established. * Functions: * clear and free user core * find which clock is configured * hand craft 0th process * call all initialization routines * fork - process 0 to schedule * - process 1 execute bootstrap * * panic: no clock -- neither clock responds * loop at loc 6 in user mode -- /etc/init * cannot be executed. */ main() { extern schar; register i, *p; /* * zero and free all of core */ updlock = 0; i = *ka6 + USIZE; UISD->r[0] = 077406; for(;;) { UISA->r[0] = i; if(fuibyte(0) < 0) break; clearseg(i); maxmem++; mfree(coremap, 1, i); i++; } if(cputype == 70) for(i=0; i<62; i=+2) { UBMAP->r[i] = i<<12; UBMAP->r[i+1] = 0; } printf("mem = %l ", maxmem*5/16); maxmem = min(maxmem, MAXMEM); mfree(swapmap, nswap, swplo); /* * determine clock */ UISA->r[7] = ka6[1]; /* io segment */ UISD->r[7] = 077406; lks = CLOCK1; if(fuiword(lks) == -1) { lks = CLOCK2; if(fuiword(lks) == -1) panic("no clock"); } /* * set up system process */ proc[0].p_addr = *ka6; proc[0].p_size = USIZE; proc[0].p_stat = SRUN; proc[0].p_flag =| SLOAD|SSYS; u.u_procp = &proc[0]; /* * set up 'known' i-nodes */ *lks = 0115; cinit(); binit(); iinit(); rootdir = iget(rootdev, ROOTINO); rootdir->i_flag =& ~ILOCK; u.u_cdir = iget(rootdev, ROOTINO); u.u_cdir->i_flag =& ~ILOCK; /* * make init process * enter scheduling loop * with system process */ if(newproc()) { expand(USIZE+1); estabur(0, 1, 0, 0); copyout(icode, 0, sizeof icode); /* * Return goes to loc. 0 of user init * code just copied out. */ return; } sched(); } /* * Load the user hardware segmentation * registers from the software prototype. * The software registers must have * been setup prior by estabur. */ sureg() { register *up, *rp, a; a = u.u_procp->p_addr; up = &u.u_uisa[16]; rp = &UISA->r[16]; if(cputype == 40) { up =- 8; rp =- 8; } while(rp > &UISA->r[0]) *--rp = *--up + a; if((up=u.u_procp->p_textp) != NULL) a =- up->x_caddr; up = &u.u_uisd[16]; rp = &UISD->r[16]; if(cputype == 40) { up =- 8; rp =- 8; } while(rp > &UISD->r[0]) { *--rp = *--up; if((*rp & WO) == 0) rp[(UISA-UISD)/2] =- a; } } /* * Set up software prototype segmentation * registers to implement the 3 pseudo * text,data,stack segment sizes passed * as arguments. * The argument sep specifies if the * text and data+stack segments are to * be separated. */ estabur(nt, nd, ns, sep) { register a, *ap, *dp; if(sep) { if(cputype == 40) goto err; if(nseg(nt) > 8 || nseg(nd)+nseg(ns) > 8) goto err; } else if(nseg(nt)+nseg(nd)+nseg(ns) > 8) goto err; if(nt+nd+ns+USIZE > maxmem) goto err; a = 0; ap = &u.u_uisa[0]; dp = &u.u_uisd[0]; while(nt >= 128) { *dp++ = (127<<8) | RO; *ap++ = a; a =+ 128; nt =- 128; } if(nt) { *dp++ = ((nt-1)<<8) | RO; *ap++ = a; } if(sep) while(ap < &u.u_uisa[8]) { *ap++ = 0; *dp++ = 0; } a = USIZE; while(nd >= 128) { *dp++ = (127<<8) | RW; *ap++ = a; a =+ 128; nd =- 128; } if(nd) { *dp++ = ((nd-1)<<8) | RW; *ap++ = a; a =+ nd; } while(ap < &u.u_uisa[8]) { *dp++ = 0; *ap++ = 0; } if(sep) while(ap < &u.u_uisa[16]) { *dp++ = 0; *ap++ = 0; } a =+ ns; while(ns >= 128) { a =- 128; ns =- 128; *--dp = (127<<8) | RW; *--ap = a; } if(ns) { *--dp = ((128-ns)<<8) | RW | ED; *--ap = a-128; } if(!sep) { ap = &u.u_uisa[0]; dp = &u.u_uisa[8]; while(ap < &u.u_uisa[8]) *dp++ = *ap++; ap = &u.u_uisd[0]; dp = &u.u_uisd[8]; while(ap < &u.u_uisd[8]) *dp++ = *ap++; } sureg(); return(0); err: u.u_error = ENOMEM; return(-1); } /* * Return the arg/128 rounded up. */ nseg(n) { return((n+127)>>7); }
***********
******* **
*** ***
** ******
*** ******* **
********************* ****
*** *****
******** ***
******** *****
●/⊙************ *************
****** *****
***** ****
* ***
*** *******
***** *****
*** ***
*** ****
**** ****
**************************** ***
***********
**********
**** ****************
**** ************
*********** ***
***************** *** *****
****** ****** ****
** ****
*** ****
********* ********
**** ***
* **** ****
**** *******●/⊙***** ***
****** ******
****************** *******
*********** **
****** *
*** ***
************** ****
**** **
***********
**********
******** *
*** *
** *
** ***
**** ***
*** ***
******** ******
* ******** ********
***●/⊙************ **
****** ****
***** *****
* **
**** *******
**** ******
**** **
**** ***
**** ****
*************************** ***
**********
************* **
*** ********* ***
** ******** ***
**** **
***** ******
********* *** *
** ******** ****
**●/⊙*** *******************
** **********
*** *****
*** ***
**** *
** ******
******* ***
************ *
************* ******* **
** ******* **************** ****
**** ******* ***********************
** ********
*****
***********
******** **
*************** *** *
*** ******** *
******** ****
**** **
** ***
****** *******
*** ********
****● ⊙* **
** ****
*** ****
*** ***
******* *******
********* ******
********** **************** **
*** ******* *** ***
** *** ****
***************************** ****
**********
*********
*** ************
** ******
******* ***
**************** *****
** **
** ****
******** ******
***** **
*** *************
●/⊙*** ***********************
*** ************
*** *********
**** *********
** *****
******** ******
** *
******** **
***************** ******
************************
⊙*
**
**
*
****
**
*
*****
*
****
********
**
**
***
**** **
******************* * ***
***** *** ******
* *****
**********
*●
●**
*
**
**
***
**
**
****
***
***
*****
***
*
**
***** ****
****************** * ****
******** *****
****
**********
⊙
****
**** ***
******* *
************ ***********
******* *********
**** ****
*** ******
*** ***
***** **
**** ***
*** *****
****** ******
********** ****
************* *****************************
**** *** **● ⊙****
**** ***********
******** ************
*************************** ****
************ ****************
***************
●***********
******************
***** ****
** ************
***
**********
*******************
*******
*******
***
*****
***************
*****
*
******
***
***
***
****
***⊙
⊙***********
********************
******
*******************
***
***********
********************
*******
********
***
****
**************
****
**
*****
***
***
***
****
●
****
** **
** **
************ *
*********** ***
************* ***********
*** ****
**** ***
**** *****
*** ****
** ***
****** ***** ***
******** ****** **********
***** ********** ******
** ****** ******
**** ***** *******
************** *●*
***
**
************⊙
*******
*********** **
** **
*** ****
***** ***
** ******** ***
***** ******
***** **
************* *** ***
*** ******** * ******** ****
** ************ ****** ** ** ***
******** ****
*** **** ** ****
********* *************** *******
* ********* **********
*** * ***** ** ***●/⊙
**** ****************
******* ***** *
***** ***************** ********
*****
******●
********
*****
****
*********
***
******
*****
***
***********
****
*
*
***
***
****
**
***
*********
⊙*****
●/⊙*
**
******
****
*******************
******
********
*******
***
****
*****
****
***
**********
*******
***********
******* ******
****** ***
***** ****
**********
****
**** * ** ************** ***
******** ******** *** ******* *** **** **** **
****** ****** *** **** * **** ***
******************* ***** ***
*** *** ** **
** ********
**** **
*** ***
*** **
**** *****
***** ****
******* ***
** ***** ****
*** * ********* **
** ****** ** ******* ***
******** ** *** ******** **●/⊙
*** ** *** **
****
****
⊙*****
*****
***
***
*
*
*
***
*
*****
**
**
**
***
**** ***
******************* * ****
********* *****
*****
***********
●
*******
******* *
*** *
** **
** **
*** **
***** *****
******** ******
●********* ****
***
**
***
*****
*****
*
**
******
**********
*************
**⊙
⊙******
*****
***
**
**
*
*
*
****
***
***
**
**
**
***
** ***
********************** ** ****
***** *** ******
* ****
******●
****
*** *******●*⊙
***** ************* **
******* *************** *** ****
**** *** ***** ****
******* ** **** **
********* * **
****** *** **
**** **** ********
**** ***** *********
*** ********** ***** **
***** ********** *** ****
****** **** **
**** **** ** *
******* ***** *********
***** ** ** ***
*** ** **
*********
*******
**
⊙*****
*****
***
***
**
*
**
****
*
***
**
**
**
***
* **
********************* * *****
******** ******
****
**********
●
****
*** ******** **
***●⊙******* * ******
* ********* ** ***********
** *** **** ****
** ********* ***
** *******
*** *
** *
** *
*** ***
* *
********* **
** **
**** **
*** *
***** *
*********** *
****** * **
**** ************
●
**
****
***
******
*
**
***
*** *
* ** ****
* * * ** **
** ** * *** **
** *** *
* ** *
**** ** ***
** * * ****
⊙*** * * * ****** ********
**** * * ** *****
***** **
***
**
********
*** ****** **
**** * *** ** *******
************* ******* **** ** *** *******
** *** ***** ** ****** ****
** ** ** ***** *******
**** ***** **
***** ***
** ***
**** **●/⊙ **
********** ****
** **
**** **
**** * * *****
** **** ************* *
****** **** *** ** *****
* ** ***
** *******
***********
⊙
*
****** *
*** * *
***** * *** *
*** ******** ****************
*●* **
* ****
* ***
** **
**** *
*** ***
** **
** **
* ****
*** ***
* **
** **
* ***
******
*⊙*
*****
***
**** **
** ** *******
********** * *****
**
**
●* *****
** ****
** ******
** ***
** ** **
**** ** ***** ****
*** * ******* ***
******* *** ** **** * ***
*** *** *** *** ******
*** ********* ****
** *
***
**********
******** *
**** *
** *
** ***
**** ***
*** *****
******* ****
** ********* ********
***●/⊙************ **
****** *****
***** *****
* **
*** ******
****** *****
**** ***
*** ***
***** ****
************************** ***
**********
***************************
** ***********
***** ****
****** ***
******* ***
** *******
* *****
* *****
* ****
* ****
*** *******
* **
** ***
* ****
********************************* **
***************** ********
* ************ *****
***********
*
●/⊙*
***********
****************** ****
* ****
** ***
* *****
**** *** *
* **** * *****
***** ******
**** *****
***** ** **
**** ** *
**** ** ****
**** **************** *
*** **** ** *****
* * *
* * *
** ** **
* ** *
* ** **
****** ●⊙
****
** **
*** **
*********** *
*********** *****
*********** ***********
**** ***
** **
** *****
*** ****
*** ***
****** ** ***
********* ****** ****● **
*** ********* ****
** ******* *******
*** *** ********
************** ***
****
***
************⊙
***
********* *
** *******⊙ **********
** **** ●
* *****
** **
********** *
*****
********
*** ** **
********
*****
****************
************************ * **
* ******** ** **
******* ** ******
*** * ******
***** ********
***************** *****
*********
⊙*
**
* *
* * ***
* *** *** * *
* * *** * *
* ** * *
** * * **
** * * **
* **** * * *****
* * ** * ** * *
* * * * ** * * * *
* ** * *** **** * * *
* * **** * * * * * * **
* ** * * * * * *
* * * * ** *
********** * *
* *
*
●
⊙**
***** *
********
**************************
●* ***************
** ********
* *
**** *******
** ****
***** ******
**** ***
***** *
** *
**** *
* ***
****** **
************ **
*** ***
**** *
**************
************************ *
***** *****************************
*** *********
******* ********
*********** **********
*** ***
**** **
*** *************
***** ***
*** **
*** *****
**** *******
******* **
********** *********
****** *************●⊙***
***** ***
********* ************
**************************** ******
********* ********
******************
*********************** *
***** *******************************
** *********
******* ******
********* **********
*** *******
**** ***********
** *********************
**** ***
**** **
**** *****
***** *********
******** ***
**** ** ********** *****
********** ** ** *******⊙*●
***** *********
******** ************
************************** ****
********** ****************
***************
********
********** ***
******* *
******* ** ** **
***** ******** ** * *** ****
*** ********** * *** ** *
*** * *** *** *
** ********** ********
**** **** *
********** ********************
*** ****** **
** ***
**** ***
* *
***** ******
*** *******
*** ********
**** **
●* *********** ***
*⊙** ****
*****
*********** ** ****
****** *** ** *** ***********
** ******** *
** ***
**** *
************* ****
****** ******* ***************
** ********* **** *⊙****●
* *****
****** **
* ***
**** ****
** ** ***
******* ******
**** **************
****************************** ***
******** ***
*** **
*****
**********************************************
*********************** ***********
**** ******
**** *******
****** ************
******** ******
** ***************
** ****
*********** **
*** *********
******* ***
*** *******
*** **
******* ****
************** **********
***** ****** * ⊙***
****
*****
************************
******●
***********************************************
******* ************
****** ***
** *******
***** *****
******* ********
******* ********
*** **************
**** ***
** **
**** **********
****** **
*** ******
* ****
******* *
***** ****
*************** **********
** ************⊙●***
******* ****
*********************
*****
********* ***** **
********* ***************************
********************* ****
********** ***********
*** ******
*** ***
** ***
******** **
*********** *******
** ****
* ***
***** *
*** ****
** ****
** ****
**** *******
*** **
****●/⊙************** **
******
**
** ******
**** *** ****
** * *** **
* ** *** *****
**** ** ** **
** ** ** *** ******
**** ** **** ** *******
**** ** ** *
*** ********* * *
*** ** ** * ***
** ******************* *** * **
*** ***** ***** ** ** *
*** ***** ** ** ****
************* *** ***** *
* **** ******** *⊙●******
******** **
* ***
****
***
*************************************************
************ *************
**** ******
** ******
******** ************
******** ******
*** **************
***** ******* ***
*** ******************* *****
***** ***
******* **
*** *****
** *********
******** *
****** ***
**************** ********⊙
******
*****
*******
**●
⊙*●**
***
***
**
*
****
**
**
********** ***** ***
***************** ***** ****** ******** ***
**** *** ** **** ******* *****
** **** ***** **** ********
***** ****** *** ** ***
***** ** ** ***
** *** *** ***
** ** ** **
*** *** ** **
**** ****** ** ***
** **** ** **
***
************************************************
*********** *************
*** *****
******* ******
******* **********
******* ****************
***** ***********
** ***
**** **********
******* ****
** ********
**** *
******** *****
************** *****
**** ●⊙**********
****** *******
**************** **
*************************** *******
*********** ************* ******** *******
************ ******* ***********
******
****** ****** *******************
************* ***
*************** *****
*** ********************⊙
*****
*******
************* *** *●
************ ******
*********** * ***
****** ******************
** ****** **** *************
*************** ******* *******************
************ ****
********** ** **
******** *** ***************
**** ** ***
******* *******
* *******
***
*****
************* ******************
********** ****
*************** *****
** ********************⊙
****
********
************* ** *●*
************ ******
*********** * ****
****** *******************
** *********** * **************
*************** ****** ******************
***** *****
************ ** *
********* ** ***************
*** ** ****
******* ********
* ********
***
**●
***
**
*******
****
*
**
***
***
***