File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / d / dmp4 / temp$.s
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:30:21 2019 UTC (6 years, 11 months ago) by root
Branches: bsd, MAIN
CVS tags: v121, HEAD
Power 6/32 Unix version 1.21


/*	privileged registers constants (addresses)			*/



	.set	SBR,0			/*system base register		*/
	.set	SLR,1			/*system length reg		*/
	.set	P0BR,2			/*p0 base reg			*/
	.set	P0LR,3			/*p0 length reg			*/
	.set	P1BR,4			/*p1 base reg			*/
	.set	P1LR,5			/*p1 length reg			*/
	.set	P2BR,6			/*p2 base reg			*/
	.set	P2LR,7			/*p2 length reg			*/
	.set	IPL,8			/*int priority level reg	*/
	.set	MME,9			/*memory mgmt enable reg	*/
	.set	TBIA,10			/*trans buf invalidate all	*/
					/*entries			*/
	.set	TBIS,11			/*trans buf invalidate single	*/
					/*entry				*/
	.set	DCK,12			/*data cache key		*/
	.set	CCK,13			/*code cache key		*/
	.set	PCBB,14			/*process control block base	*/
	.set	ISP,15			/*interrupt stack pointer	*/
	.set	SIRR,16			/*software int request reg	*/
	.set	SISR,17			/*software int summary reg	*/
	.set	SCBB,18			/*system control block base reg	*/
	.set	KSP,19			/*kernel stack pointer reg	*/
	.set	USP,20			/*user stack pointer		*/
	.set	DCB,21			/*CPU2 DCB	                */
	.set	PACC,23			/*purge (invalidate) all pages	*/
					/*of process in code cache	*/
	.set	P1DC,24			/*purge one page of data cache	*/
	.set	PADC,25			/*purge all the pages of 	*/
					/*process in data cache		*/
	.set	HISR,26			/* Hardware interrupt summary reg  */
	.set	DCR,27			/* Diagnostic control register  */
	.set	PDCS,28			/* Purge 1 data cache slot      */
	
#
 #TAHOE program status longword
#

	.set  	PSL_C,0x00000001	/* carry bit                     */
	.set  	PSL_V,0x00000002	/* overflow bit                  */
	.set  	PSL_Z,0x00000004	/* zero bit                      */
	.set  	Z,0x00000004
	.set  	PSL_N,0x00000008	/* negative bit                  */
	.set  	PSL_T,0x00000010	/* trace enable bit              */
	.set  	PSL_I,0x00000020	/* integer overflow enable bit   */
	.set	PSL_EN_OVFL,0x20	/* integer overflow enable bit   */
	.set	PSL_EN_UNDFL,0x40	/* floating underflow enable     */
	.set  	PSL_DBL,0x80		/* dbl precision Accumulator bit */
	.set  	PSL_IPL,0x001f0000	/* interrupt priority level      */
	.set  	PSL_MOD,0x01000000	/* mode = 1 means user           */
	.set  	PSL_IS,0x04000000	/* interrupt stack               */
	.set  	PSL_TP,0x40000000	/* trace pending                 */

#
 # TAHOE page table entry
 #/
	.set  	PG_V,0x8000000
	.set  	PG_PROT,0x78000000
	.set  	PG_M,0x04000000
	.set  	PG_USED,0x02000000
	.set  	PG_NC,0x01000000
	.set  	PG_PFNUM,0x003fffff

	.set  	PG_NOACC,0
	.set  	PG_KR,0x40000000
	.set  	PG_KW,0x60000000
	.set  	PG_URKR,0x50000000
	.set  	PG_URKW,0x70000000
	.set  	PG_UW,0x78000000

 #*	PCB offsets & diagnostic extension to pcb			*/
 #*	PCB is at pcb0							*/


	.set	PCB_SIZE,	 24	
	.set	PCB_KSP,	 0
	.set	PCB_USP,	 4
	.set	PCB_R0,	 	 8
	.set	PCB_R1,	 	 12
	.set	PCB_R2,	 	 16
	.set	PCB_R3,	 	 20
	.set	PCB_R4,	 	 24
	.set	PCB_R5,	 	 28
	.set	PCB_R6,	 	 32
	.set	PCB_R7,	 	 36
	.set	PCB_R8,	 	 40
	.set	PCB_R9,	 	 44
	.set	PCB_R10,	 48
	.set	PCB_R11,	 52
	.set	PCB_R12,	 56
	.set	PCB_R13,	 60
	.set	PCB_PC,	 	 64
	.set	PCB_PSL,	 68
	.set	PCB_P0BR,	 72
	.set	PCB_P0LR,	 76
	.set	PCB_P1BR,	 80
	.set	PCB_P1LR,	 84
	.set	PCB_P2BR,	 88
	.set	PCB_P2LR,	 92
	.set	PCB_ACCM,	 96
	.set	PCB_ACCL,	100
 #*
 #	Diagnostic pcb extension
 #/
	.set	PCB_STAT,	104	/*process status,statistics,id,etc*/



 #*	fundamental constants						*/

 #*
 # fundamental constants of the implementation--
 # cannot be changed easily.
 #/

	.set  	NBPG,1024
	.set  	PGOFSET,(NBPG-1)	/* byte offset into page */
	.set  	PGSHIFT,10		/* LOG2(NBPG) */
	.set 	HIGH,0x1f


 #*	SCB offsets							*/
 #*	SCB is at scb							*/

	.set	PFVEC,1*4		/*power fail			*/
	.set	PRVEC,2*4		/*power restore			*/
	.set	CLOCKVEC,7*4		/*hard clock vector		*/
	.set	CRVEC,0xa*4		/*console receive		*/
	.set	CXVEC,44		/*console transmit		*/
	.set	SIVEC1,0x1e*4 		/*software int vec #1		*/
					/*for 2,3,..15, sub 4,8,.. 56	*/
					/*from SIVEC1			*/	
	.set	BEVEC,0x20*4		/*bus error 			*/	
	.set	SYSVEC,0x2b*4		/*system call (kcall)		*/
	.set	PINSTVEC,0x2c*4		/*privileged instruction fault	*/
	.set	PRIVSVEC,0x2c*4		/*privileged instruction fault	*/
	.set	ROVEC,0x2d*4		/*reserved operand fault	*/
	.set	RAVEC,0x2e*4		/*reserved addressing fault	*/
	.set	PROTVEC,0x2f*4		/*access control violation	*/
	.set	TRANS,0x30		/*translation fault vector	*/
	.set	TRANSVEC,0x30*4		/*translation fault vector	*/
	.set	KSPVEC,0x31*4		/*kernel stack not valid vector	*/
	.set	TRACEVEC,0x32*4		/*trace vector			*/
	.set	BPTVEC,0x33*4		/*break point fault		*/
	.set	ARITHVEC,0x34*4		/*arithmetic trap		*/
	.set	ALIGNVEC,0x35*4		/*alignment vector		*/	
	.set	FPMVEC,0x37*4		/*fpp emulation vector          */
	.set	IO14VEC,256		/*io vector, ipl #14		*/
	.set	IO15VEC,320		/*io vector, ipl #15		*/
	.set	IO16VEC,384		/*io vector, ipl #16		*/
	.set	IO17VEC,448		/*io vector, ipl #17		*/

 #*	SPT (system page table) offsets					*/
 #*	SPT is at Sysmap						*/

	.set	SCBPTE,8		/*system control block pte offset*/
	.set	BUFPTE,12		/*buffer pte offset		*/
	.set	ISPTE,16		/*interrupt stack page 0	*/
	.set	IS1PTE,20		/*interrupt stack page 1	*/
	.set	SPTPTE,20		/*system page table page 1	*/
	.set	SPT1PTE,20		/*system page table page 2	*/
	.set	IOMAPPTE,24		/*io map			*/
	.set	PCBPTE,28		/*process control blocks pte	*/
	.set	U0P0PTE,32		/*U0 p0pt pte			*/
	.set	U0P1PTE,36		/*U0 p1pt pte			*/
	.set	U0P2PTE,40		/*U0 p2pt pte			*/
	.set	U1P0PTE,44
	.set	U1P1PTE,48
	.set	U1P2PTE,52
	.set	U2P0PTE,56
	.set	U2P1PTE,60
	.set	U2P2PTE,64
	.set	U3P0PTE,68
	.set	U3P1PTE,72
	.set	U3P2PTE,76
	.set	U4P0PTE,80
	.set	U4P1PTE,84
	.set	U4P2PTE,88
	.set	U5P0PTE,92
	.set	U5P1PTE,96
	.set	U5P2PTE,100
	.set	U6P0PTE,104
	.set	U6P1PTE,108
	.set	U6P2PTE,112
	.set	U7P0PTE,116		/*U7 p0pt pte			*/
	.set	U7P1PTE,120		/*U7 p1pt pte			*/
	.set	U7P2PTE,124		/*U7 p2pt pte			*/
	.set	IOB0PTE,128		/*io buffer 0 pte		*/
	.set	IOB1PTE,132
	.set	IOB2PTE,136
	.set	IOB3PTE,140
	.set	IOB4PTE,144
	.set	IOB5PTE,148
	.set	IOB6PTE,152
	.set	IOB7PTE,156		/*io buffer 7 pte		*/


 #*	trap.h	4.6	81/03/03	*/

 #*
 #* Trap type values
 #/

	.set  	RESADFLT,0		/* reserved addressing fault */
	.set  	PRIVINFLT,1		/* privileged instruction fault */
	.set  	RESOPFLT,2		/* reserved operand fault */
	.set  	BPTFLT,3		/* bpt instruction fault */
	.set  	ALIGNFLT,4		/* alignment fault */
	.set  	SYSCALL,5		/* kcall instruction (syscall trap) */
	.set  	ARITHTRAP,6		/* arithmetic trap */
	.set  	PROTFLT,7		/* protection fault */
	.set  	TRCTRAP,8		/* trace trap */
	.set  	TRANSFLT,9		/* translation not valid fault */
	.set	DONE,255

#
 #  Event codes
#
	.set	RTCLOCK_CODE,7		/* real time clock event */
	.set	RESOP_CODE,0x2d		/* reserved operand fault */
	.set	RESAD_CODE,0x2e		/* reserved address fault */
	.set	ARITH_CODE,0x34		/* arithmetic fault       */
	.set	FPM_CODE,0x37		/* fpp emulation trap     */
	.set	INTEGER_OVERFLOW,1	/* code for arith. fault  */

#
 #  Arithmetic Event types
#
	.set	INT_OVFL_CODE,1		/* integer overflow     */
	.set	INT_0_DIV_CODE,2	/* integer divide by 0  */
	.set	FLT_0_DIV_CODE,3	/* floating divide by 0 */
	.set	FLT_OVFL_CODE,4		/* floating overflow    */
	.set	FLT_UNDFL_CODE,5	/* floating underflow   */

#
 #  Floating Point Instruction Op-Codes
#
	.set  LDF_OP_CODE,0x06		/* sgl load acc. instr      */
	.set  LDD_OP_CODE,0x07		/* dbl load acc. instr      */
	.set  LNF_OP_CODE,0x16		/* sgl load-neg acc. instr  */
	.set  LND_OP_CODE,0x17		/* dbl load-neg acc. instr  */
	.set  STF_OP_CODE,0x26		/* sgl store acc. instr     */
	.set  STD_OP_CODE,0x27		/* dbl store acc. instr     */
	.set  CMPF_OP_CODE,0x36		/* sgl compare instr        */
	.set  CMPD_OP_CODE,0x37		/* dbl compare instr        */
	.set  CMPF2_OP_CODE,0x46	/* sgl compare 2 instr      */
	.set  CMPD2_OP_CODE,0x47	/* dbl compare 2 instr      */
	.set  TSTF_OP_CODE,0x56		/* sgl test acc. instr      */
	.set  TSTD_OP_CODE,0x57		/* dbl test acc. instr      */
	.set  PUSHD_OP_CODE,0x67	/* dbl push acc. instr      */
	.set  CVLF_OP_CODE,0x76		/* convert int to sgl instr */
	.set  CVLD_OP_CODE,0x77		/* convert int to dbl instr */
	.set  CVFL_OP_CODE,0x86		/* convert sgl to int instr */
	.set  CVDL_OP_CODE,0x87		/* convert dbl to int instr */
	.set  LDFD_OP_CODE,0x97		/* load sgl to dbl instr    */
	.set  CVDF_OP_CODE,0xa6		/* convert dbl to sgl instr */
	.set  NEGF_OP_CODE,0xb6		/* negate sgl acc. instr    */
	.set  NEGD_OP_CODE,0xb7		/* negate dbl acc. instr    */
	.set  ADDF_OP_CODE,0xc6		/* sgl add instr            */
	.set  ADDD_OP_CODE,0xc7		/* dbl add instr            */
	.set  SUBF_OP_CODE,0xd6		/* sgl subtract instr       */
	.set  SUBD_OP_CODE,0xd7		/* dbl subtract instr       */
	.set  MULF_OP_CODE,0xe6		/* sgl multiply instr       */
	.set  MULD_OP_CODE,0xe7		/* dbl multiply instr       */
	.set  DIVF_OP_CODE,0xf6		/* sgl divide instr         */
	.set  DIVD_OP_CODE,0xf7		/* dbl divide instr         */
	.set  SINF_OP_CODE,0x05		/* sgl sine instr           */
	.set  COSF_OP_CODE,0x15		/* sgl cosine instr         */
	.set  ATANF_OP_CODE,0x25	/* sgl arc-tangent instr    */
	.set  LOGF_OP_CODE,0x35		/* sgl natural log instr    */
	.set  SQRTF_OP_CODE,0x45	/* sgl square root instr    */
	.set  EXPF_OP_CODE,0x55		/* sgl "e to the x" instr   */
	.set  MULL2_OP_CODE,0x4c	/* integer multiply - 2 ops */
	.set  MULL3_OP_CODE,0x5c	/* integer multiply - 3 ops */


#
 #  Addressing test constants - These must agree with "fpp_defs.h"
#
	.set ADR_ABSOLUTE,1	/* absolute address                 */
	.set ADR_LITERAL,2	/* literal -short immediate byte    */
	.set ADR_IM_B,3		/* immediate byte                   */
	.set ADR_IM_W,4		/* immediate word                   */
	.set ADR_IM_L,5		/* immediate long-word              */
	.set ADR_B_DSP,6	/* byte displ relative              */
	.set ADR_W_DSP,7	/* word displ relative              */
	.set ADR_L_DSP,8	/* long-word displ relative         */
	.set ADR_B_DSP_DEF,9	/* byte displ relative deferred     */
	.set ADR_W_DSP_DEF,10	/* word displ relative deferred     */
	.set ADR_L_DSP_DEF,11	/* L-word displ relative deferred   */
	.set ADR_REG,12		/* direct register                  */
	.set ADR_REG_DEF,13	/* register deferred                */
	.set ADR_FP_DEF,14	/* FP deferred                      */
	.set ADR_SP_DEF,15	/* SP deferred                      */
	.set ADR_PUSH,16	/* auto-decrement SP                */
	.set ADR_POP,17		/* auto-increment SP                */
	.set ADR_POP_DEF,18	/* auto-increment SP deferred       */
	.set ADR_REG_B,19	/* register + byte displ            */
	.set ADR_REG_W,20	/* register + word displ            */
	.set ADR_REG_L,21	/* register + long-word displ       */
	.set ADR_REG_B_DEF,22	/* register + byte displ deferred   */
	.set ADR_REG_W_DEF,23	/* register + word displ deferred   */
	.set ADR_REG_L_DEF,24	/* register + L-word displ deferred */
	.set ADR_I_FP_DEF,25	/* indexed (frame pointer deferred) */
	.set ADR_I_L,26		/* indexed (longword displacement)  */


 #*************************************************************************
#
 #	Stuff for the Demand Paging , Events, & Addressing Tests
#
 #************************************************************************/
	.set SGL,1			/* sgl precision data           */
	.set DBL,2			/* dbl precision data           */
	.set ENABLE_EVENTS,0x60		/* enable ovfl & undfl events   */
	.set NONE,0			/* no operand flag              */
	.set LOAD,1			/* read-the-operand flag        */
	.set STORE,2			/* store-the-operand flag       */

	.set NO_EVT_HLT,1		/* halt code: did not Get event  */
	.set EVT_MSK_HLT,2		/* halt code: got masked event   */
	.set BAD_PSL_HLT,3		/* halt code: wrong PSL value    */
	.set PUSH_CNT_HLT,4		/* halt code: wrong # ops on stk */
	.set PUSH_PSL_HLT,5		/* halt code: bad PSL on stack   */
	.set PUSH_PC_HLT,6		/* halt code: bad PC on stack    */
	.set BAD_REG_HLT,7		/* halt code: bad final register */
	.set BAD_ACC_HLT,8		/* halt code: bad final Acc.     */

#
 # set DMP_PG_0 to the 1st empty page
#
	.set DMP_PG_0,0x36000
	.set DMP_PG_1,DMP_PG_0+0x400
	.set DMP_PG_2,DMP_PG_1+0x400
	.set DMP_PG_3,DMP_PG_2+0x400
	.set DMP_PG_4,DMP_PG_3+0x400
	.set DMP_PG_5,DMP_PG_4+0x400
	.set DMP_PG_6,DMP_PG_5+0x400
	.set DMP_PG_7,DMP_PG_6+0x400
	.set DMP_PG_8,DMP_PG_7+0x400
	.set DMP_PG_9,DMP_PG_8+0x400
	.set DMP_PG_10,DMP_PG_9+0x400
	.set DMP_PG_11,DMP_PG_10+0x400
	.set DMP_PG_12,DMP_PG_11+0x400
	.set DMP_PG_13,DMP_PG_12+0x400

#
 # test code space for the address / demand page tests
#
	.set START_OF_CODE,DMP_PG_1-20	/* 1st addr of test-code space  */
	.set CODE_BUF_SIZE,40		/* # bytes in test-code space   */
	.set END_OF_CODE,START_OF_CODE+CODE_BUF_SIZE

#
 # data locations used by the event and demand page tests
#
	.set _dmp_byte_op_1,DMP_PG_1+0x30	/* 'byte offset' data */
	.set _dmp_byte_op_2,DMP_PG_1+0x50	/* 'byte offset' data */
	.set _dmp_byte_op_3,DMP_PG_1+0x70	/* 'byte offset' data */
	.set _dmp_op_1,DMP_PG_3-4		/* 1st data word      */
	.set _dmp_op_1_ptr,DMP_PG_4+0x30	/* ptr to 1st data wd */
	.set _dmp_op_2_ptr,DMP_PG_5+0x30	/* ptr to 2nd data wd */
	.set _dmp_op_2,DMP_PG_7-4		/* 2nd data word      */
	.set _dmp_op_3,DMP_PG_8			/* 3rd data word      */
	.set _dmp_op_3_ptr,DMP_PG_9+0x30	/* ptr to 3rd data wd */
	.set _dmp_op_4,DMP_PG_10		/* 4th data (for pipes) */
	.set _dmp_op_5,DMP_PG_11		/* 5th data (for pipes) */
	.set _sp_minus,DMP_PG_13-4		/* SP for POPs        */
	.set _sp_page,DMP_PG_13			/* SP page boundary   */
	.set _sp_plus,DMP_PG_13+4		/* SP for PUSHs       */


/************************************************************************/
/*			     Revision History				*/
/*				----------				*/
/*	Rev 1.0						 1 Aug 85	*/
/*									*/
/*	Initial release of the diagnostic				*/
/*									*/
/************************************************************************/

 #	INIT.X for the Demand Pageing Tests				
#
 #	This file is a diagnostic version of locore.s.			
 #	It contains the following:					
 #	*system data area = scb, dump buffer, interrupt stack,		
 #	*system page table,user page tables,pcbs,iomap, & io buffers.	
 #									
 #	*system code = interrupt vectors, initialization of system data,
 #	*memory size calculation,initialization of SPT, zeroing of	
 #	*unused memory, & loading of SBR & SLR.				
 #	*								
 #	*at the end of this code, you are ready to go to virtual mode.	
 #	* --- GOOD LUCK!						
#
 ##########################################################################
#
 #   6-Mar-85 :  changed to user mode execution
 #  11-Mar-85 :  moved mode changeing from here to RUN_CODE
 #  17-Jul-85 :  added "mtpr" test for fpp/no-fpp wcs
 ##########################################################################


/*	privileged registers addresses	*/
#include	"prvreg.h"
	
/*	program status long word definition	*/
#include	"psl.h"	

/* 	page table entry definition		*/
#include	"pte.h"
	
/*	process control block offsets	*/
#include	"pcboffset.h"	

/*	fundamental constants for globl use	*/
#include	"const.h"	

/*	system control block offsets*/
#include	"scboffset.h"
/*	SPT offsets				*/
#include	"sptoffset.h"

/*	trap numbers*/
#include	"trap.h"	


#define V_TRAP		0
#define V_SYSCALL	4

	.set	HIGH,0x1f	/*mask for disabling all interrupts	*/
	.set	MCKVEC,4	/*scb offset for machinecheck vector	*/
	.set	NISP,2		/*no. of interrupt stack pages		*/
	.set	DONE,255	/*user process done code		*/
	.set	TTRAP,0x32
	.set	PRIVS,0x2c

	.text

		/* PROCESSOR STORAGE AREA 		*/
#include "pstorage.s"

	.globl	_Entry
_Entry:
	jmp	start
	.space	(1024-6)

/*		globl dump buffer to be used for communication		*/
/*		between tests & interrupt handlers, & other misc.	*/
/*		purposes.						*/
				
/*	Physical page 3 : Used for global variables 		*/

	.set	NLWU,35		/*no. of longwords already used		*/
				/*this must be changed when you define	*/
				/*additional variables below before	*/
				/*_dbuf					*/
	.globl	_Codek
_Codek:	.long	0		/* Code cache key */

	.globl	_restart
_restart:
	.space	4		/*contains restart address for restarting*/
				/*after power is restored (loaded by	*/
				/*power fail interrupt handler & used by*/
				/*CPU 2					*/	
	.globl	_maxmem
_maxmem:
	.space	4		/*memory size in no of bytes		*/

	.globl	_maxpages
_maxpages:
	.space	4		/*memory size in no. of physical pages	*/

	.globl	_lastadd
_lastadd:
	.space	4		/*address of the last long word		*/

	.globl	_unused
_unused:
	.space	4		/*first unused page in system space	*/

	.globl	_ctlblk
_ctlblk:
	.long	0		/* pointer to SCB */

	.globl	_savvec0	/*save vectors area			*/
_savvec0:
	.space	4

	.globl	_savvec1	/*save vectors area			*/
_savvec1:
	.space	4

	.globl	_savvec2	/*save vectors area			*/
_savvec2:
	.space	4

	.globl	_savvec3	/*save vectors area			*/
_savvec3:
	.space	4

	.globl	_savvec4	/*save vectors area			*/
_savvec4:
	.space	4

	.globl	_savvec5	/*save vectors area			*/
_savvec5:
	.space	4
	.globl	_savvec6	/*save vectors area			*/
_savvec6:
	.space	4
	.globl	_savvec7	/*save vectors area			*/
_savvec7:
	.space	4

	.globl	_savvec8	/*save vectors area			*/
_savvec8:
	.space	4

	.globl	_r_no
_r_no:
	.long	0
	.globl	_pt_base
_pt_base:
	.long	0
	.globl	_saved_psl
_saved_psl:
	.long   0
	.globl	_saved_sp
_saved_sp:
	.long	0
	.globl	_saved_fp
_saved_fp:
	.long	0
	.globl	_ret_adr
_ret_adr:
	.long	0
	.globl	_exp_par0
_exp_par0:
	.long	0
	.globl	_exp_par1
_exp_par1:
	.long	0
	.globl	_f_vaddr
_f_vaddr:
	.long	0			/* VA that caused fault */

	.globl	_f_ptr
_f_ptr:
	.long   0			/* Pointer to fault parameters */
	.globl	_df_cnt
_df_cnt:
	.long	0			/* Count of data fault */

	.globl	_if_cnt
_if_cnt:
	.long	0			/* Count of Instruction fault */

	.globl	_newepc
_newepc:
	.long	0

	.globl	_errcnt
_errcnt:
	.long	0

	.globl	_clk_cnt
_clk_cnt:
	.long	0

	.globl	_ttcnt
_ttcnt:
	.long	0			/* Count of Trap exception */
	.globl	_trcnt
_trcnt:
	.long	0			/* Count of Translation fault */

	.globl	_Ufpte
_Ufpte: .long	0
	.globl	_Ulpte
_Ulpte: .long	0

	.globl	_dbuf		/*dump buffer left out of 1K		*/
_dbuf:
	.space	NBPG - (NLWU *4)
edbuf:


	.globl	_intstack	/* Interrupt stack			*/
_intstack:			/* Physical pages 4 & 5			*/
	.space	NISP*NBPG
eintstack:


	.set	SYSPTSIZE,512	/* No. of entries in SPT		*/
 
/*
	System Page Table -- physical page 6 & 7
*/ 
	.align	2
	.globl	_Sysmap
_Sysmap:
	.space	SYSPTSIZE*4 	/* 512 max pages allowed for system	*/
eSysmap:
	.globl	_Syssize
	.set	_Syssize,(eSysmap-_Sysmap)/4	/* should be SYSPTSIZE	*/
	
	.globl	_iomap		/* Physical page 8	*/
_iomap:	.space	1024		/* IOMAP - unused 	*/
	.globl	_eiomap
_eiomap:

	.globl	_pcb0		/* Physical page 9	*/
_pcb0:	.space	128		/*process control block 0		*/
	.globl	_pcb1
_pcb1:	.space 128		/*process control block 1		*/
	.globl	_pcb2
_pcb2:	.space 128		/*process control block 2		*/
	.globl	_pcb3
_pcb3:	.space 128		/*process control block 3		*/
	.globl	_pcb4
_pcb4:	.space 128		/*process control block 4		*/
	.globl	_pcb5
_pcb5:	.space 128		/*process control block 5		*/
	.globl	_pcb6
_pcb6:	.space 128		/*process control block 6		*/
	.globl	_pcb7
_pcb7:	.space 128		/*process control block 7		*/

/*
	*user #0 page tables -- P0PT, P1PT, P2PT			
	*physical memory     --  page10, 11, & 12  respectively
*/
	.align	2
	.globl	_u0p0pt
_u0p0pt:
	.space	1024		/*255 max pages for user #0 text	*/
	.globl	_u0p1pt
_u0p1pt:	
	.space	1024		/*255 max pages for user #0 data	*/
	.globl	_u0p2pt
_u0p2pt:	
	.space	1020		/*255 max pages for user #0 stack	*/
eu0p2pt:
	.space	4

/*
	*user #1 page tables -- P0PT, P1PT, P2PT			
	*physical memory     --  page13 ,14, & 15  respectively
*/
	.align	2
	.globl	_u1p0pt
_u1p0pt:
	.space	1024		/*255 max pages for user #1 text	*/
	.globl	_u1p1pt
_u1p1pt:	
	.space	1024		/*255 max pages for user #1 data	*/
	.globl	_u1p2pt
_u1p2pt:	
	.space	1020		/*255 max pages for user #1 stack	*/
eu1p2pt:
	.space	4


/*
	*user #2 page tables -- P0PT, P1PT, P2PT			
	*physical memory     --  page 16, 17 , & 18  respectively
*/
	.align	2
	.globl	_u2p0pt
_u2p0pt:
	.space	1024		/*255 max pages for user #2 text	*/
	.globl	_u2p1pt
_u2p1pt:	
	.space	1024		/*255 max pages for user #2 data	*/
	.globl	_u2p2pt
_u2p2pt:	
	.space	1020		/*255 max pages for user #2 stack	*/
eu2p2pt:
	.space	4


/*
	*user #3 page tables -- P0PT, P1PT, P2PT			
	*physical memory     --  page 19, 20 , & 21  respectively
*/
	.align	2
	.globl	_u3p0pt
_u3p0pt:
	.space	1024		/*255 max pages for user #3 text	*/
	.globl	_u3p1pt
_u3p1pt:	
	.space	1024		/*255 max pages for user #3 data	*/
	.globl	_u3p2pt
_u3p2pt:	
	.space	1020		/*255 max pages for user #3 stack	*/
eu3p2pt:
	.space	4

/*
	*user #4 thru 6 page tables
	*physical memory -- pages 22 thru 30
*/
	.globl	_u4p0pt
_u4p0pt:
	.space	(9*NBPG) - 4
eu6p2pt:
	.space	4

/*
	Area used for Kernel stack			
	physical memory --  page 31, 32 , 33
*/

	.align	2
	.globl	_Kstack		/* Kernel stack	*/
_Kstack:			/* Physical pages 31,32,33 */
	.space	3*NBPG
	.globl	ekstack	
ekstack:


	.globl	_iob0		/*io buffer 0 */
_iob0:	.space	1024
	.globl	_iob1		/*io buffer 1 */
_iob1:	.space	1024
	.globl	_iob2		/*io buffer 2 */
_iob2:	.space	1024
	.globl	_iob3		/*io buffer 3 */
_iob3:	.space	1024
	.globl	_iob4		/*io buffer 4 */
_iob4:	.space	1024
	.globl	_iob5		/*io buffer 5 */
_iob5:	.space	1024
	.globl	_iob6		/*io buffer 6 */
_iob6:	.space	1024
esysdata:

/* 	SYSTEM CONTROL BLOCK 		*/
#include "scblock.s"



#include	"evthandlers.s"

#define	ACBL(_n1,_n2,_n3,_n4)   addl2 _n2,_n3;  cmpl _n3,_n1;  bleq _n4;



 #	*INITIALIZATION CODE
 #	*
 #	* MME off; mode = k; IPL = 31; IS = 1
 #	*

	
	.globl	start
start:
	mtpr	$0,$MME		/* Disable MME */
	movl	r0,_run_list
	movl	r1,_OPTIONS
	clrl	_nonstop	/* clear the continuous run flag */
	movl	r2,_count	/* save the test count           */
	bneq	1f		/* is count = 0 ?		 */
	movl	$1,_count	/*   yes -set cycle count = 1    */
1:	bgeq	1f		/* is count < 0 ?                */
	movl	$1,_nonstop	/*   yes -set NONSTOP flag       */
1:
	clrl	_no_fpp_wcs	/* clear the NO-FPP WCS flag     */
	mtpr	$0x400,$DCR	/* check for FPP WCS loaded      */
	tstl	r1		/* r1 = 0 if NO-FPP WCS loaded   */
	bneq	1f
	movl	$1,_no_fpp_wcs	/* set the NO-FPP WCS flag       */
1:
	movab	_scb,r0
	andl2	$0x3ffffc00,r0
	mtpr	r0,$SCBB	/* Set SCBB  */
	mtpr	$0x1f,$IPL	/* Set IPL to HIGH */

	andl3	$4,r11,_ss1	/* messages sense switch         */

#
 # clear the option flags
#
	clrl	_halt_flg	/* clear the halt on error flag             */
	clrl	_loop_on_err	/* clear the loop on error flag             */
	movl	$1,_prt_error	/* set the print error messages flag        */
	movl	$1,_prt_hdrs	/* set the print header messages flag       */
	movl	$1,_en_data_cache  /* set the enable data cache flag        */
	movl	$1,_user_mode	/* set the Run In User Mode flag            */
	clrl	_exp_event	/* clear the fpp event expected flag        */
	clrl	_event_return	/* clear the fpp event return flag          */
	clrl	_unexp_event_ret /*clear the unexpected event return addr   */

#
 # set the option flags as needed
#
	bitl	$1,_OPTIONS	/* bit(0) = HALT ON ERROR */
	beql	1f
	movl	$1,_halt_flg	/* set the HALT ON ERROR flag */
1:
	bitl	$2,_OPTIONS	/* bit(1) = LOOP ON ERROR */
	beql	1f
	movl	$1,_loop_on_err	/* set the LOOP ON ERROR flag */
1:
	bitl	$4,_OPTIONS	/* bit(2) = PRINT ERROR MESSAGES */
	beql	1f
	clrl	_prt_error	/* clear the PRINT ERROR MESSAGES flag */
1:
	bitl	$8,_OPTIONS	/* bit(3) = PRINT HEADER MESSAGES */
	beql	1f
	clrl	_prt_hdrs	/* clear the PRINT HEADER MESSAGES flag */
1:
	bitl	$16,_OPTIONS	/* bit(4) = ENABLE DATA CACHE flag */
	beql	1f
	clrl	_en_data_cache	/* clear the ENABLE DATA CACHE flag */
1:
	bitl	$32,_OPTIONS	/* bit(5) = DON'T RUN IN USER MODE flag */
	beql	1f
	clrl	_user_mode	/* reset the RUN IN USER MODE flag */
1:
	movpsl	r1
	andl2	$0xffffff00,r1		/* Mask out flags		*/
	cmpl	r1,$0x041f0000		/*IS on,modes =k & IPL = 31?	*/
	beql	1f
2:	movl	$1,r0
	movl	$0x041f0000,r2
	halt			/* PSL not initialized as expected	*/
1:
	movl	$_intstack+NISP*NBPG,r0
	andl2	$0x3fffffff,r0		/* Mask out bit 30,31 */
	mtpr	r0,$ISP			/* init. ISP		*/
	movl	r0,sp			/* in case we get exception	*/
	movab	(sp),fp			/* Initialize FP	  	*/
#
 #	Clear system data area all the way upto system code
 #	this includes dump buffer,interrupt stack,spt,iomap,pcbs,user 
 #	page tables, & io buffer area.
#
3:	
	movab	esysdata,r7
	movab	_restart,r6
1:	clrl	(r6)
	ACBL(r7,$4,r6,1b)
#
 #	Initialize System Page Table
#
5:
	clrl	r2
	movab	esysdata,r1	/* R1 = Last address in system data area */
	andl2	$0x3fffffff,r1	/* Mask out bit 30,31	*/
	shar	$PGSHIFT,r1,r1	/* Get page no. of last system data addr  */
				/* Map systm data area 1 to 1,kernel writable */
1:
	orl3	$PG_V|PG_KW,r2,_Sysmap[r2]
	aoblss	r1,r2,1b

#
 # 	Map system text area 1 to 1, Kernel read/write.
 #	For this to work, the label _etext must exist at the end 
 #	of system code; Add in 4 more pages for data area used in C
#
	movab	_Esys,r1	/* Map System text 1 to 1; Kernel R/W */
	andl2	$0x3fffffff,r1
	shar	$PGSHIFT,r1,r1
1:
	orl3	$PG_V|PG_KW,r2,_Sysmap[r2]
	aobleq	r1,r2,1b
#
 #	Map from here to last page used by user :
 #	invalid, User access, & virtual = physical
#
	movl	r2,_unused	/* Save first unused physical page no	*/
	movl	r2,_Ufpte		/* First PTE of User */
	movl	$0x80000,r1		/* Allow this much memory for User */
	shar	$PGSHIFT,r1,r1
	movl	r1,_Ulpte		/* Last PTE of User */

1:
	orl3	$PG_V|PG_UW,r2,_Sysmap[r2]	/* Valid / User Read/Write */
	aoblss	r1,r2,1b

#
 #	Initialize SBR, SLR
#
sysrdy:
	mtpr	$_Sysmap,$SBR      		/* Set SYSTEM BASE REG */
	mtpr	$_Syssize,$SLR
	mtpr	$64,$DCR			/* Enable fault */

 # 		GO TO VIRTUAL MODE
 #	Double map the kernel into user addresses : 
 #	This will enable system to go to virtual mode the 1st time !!
#

	orl3	$0xc0000000,$_Sysmap,r0	
	mtpr	r0,$P0BR		/* Double map P0BR to SBR */
	mtpr	$_Syssize,$P0LR
	mtpr	$1,$PADC		/* Purge all data cache */
	mtpr	$1,$TBIA		/* Purge all Trans. buffer */
	
	mfpr	$SCBB,r0
	movab	_Trans,TRANSVEC(r0)	/* Set new trans. fault handler */
	movab	_Prvis,PRIVSVEC(r0)	/* Set new priv. ins. fault handler */
	moval	_FPM_handler,FPMVEC(r0)	/* Set now fpm trap handler */
	mtpr	$_pcb0,$0xe		/* Init. PCBB to PCB_0 */
	
	movab	_pcb0,r0
	movab	ekstack,PCB_KSP(r0)	/* Init. PCB_KSP             */
	movab	eustack,PCB_USP(r0)	/* Init. PCB_USP             */
	mfpr	$P0BR,PCB_P0BR(r0)	/*  "    PCB_P0BR            */
	mfpr	$P0LR,PCB_P0LR(r0)	/*  "    PCB_P0LR            */
	movl	$0x001f000,PCB_PSL(r0)	/* Set PCB_PSL : Kernel Mode */
	ldpctx				/* load the process context  */

	mtpr	$1,$PACC		/* purge the code cache      */
	movl	$1,_Codek
	mtpr	_Codek,$CCK		/* Set code cache key        */

	callf	$4,_monitor		/* go execute the test       */


#include	"fault_handlers.s"	/* put spectial handlers here */


 # /****************************************************************************
 # *			STACK AREA
 # ****************************************************************************/

	.globl	_Esys			/* end of systems only code */
_Esys:
	.space	NBPG
	
	.globl	_Ustack			/* basic stack space */
_Ustack:
	.space	(2*NBPG)-4		/* 2 pages */
	.globl	eustack
eustack:
	.long	0			/* initial user stack ptr */

	.globl	U_area
U_area:


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.