a8ee847ece85c133ad1fa40ce77aaae6c8ae6a17
[retro-software/dec/tops10/v4.5.git] / src / sysini.mac
1 TITLE   SYSINI - SYSTEM INITIALIZATION AND RESTART\r
2 SUBTTL  TH/GH  TS  11 NOV 68  V006\r
3 XP VSYSII,006\r
4                 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
5 \r
6 EXTERNAL APRCHN,ERROR\r
7 EXTERNAL NULJOB,ONCE,SYSBEG,SYSBG1,SYSEND\r
8 EXTERNAL CORTAB,COREP,CORLST,CORTAL,CORBLK,SYSSIZ,LINKSR\r
9 EXTERNAL SYSTOP\r
10 \r
11 EXTERNAL SYSDSP\r
12 \f;INITIALIZE SYSTEM DATA STORAGE\r
13 \r
14 INTERNAL FTDISK,SYSINI,FTSWAP,JSR2,CRSHAC,CRSH16,CRSH17,CORLIM\r
15 \r
16 ENTRY SYSINI\r
17 SYSINI: CONO APR,200000         ;IO RESET\r
18 JSR1:   JSR ONCE                ;DO ONCE ONLY CODE ONCE\r
19 JSR2:   JSR LINKSR              ;LINK IO SERVICE ROUTINES\r
20         MOVS TAC,.+1\r
21         SETZM SYSBEG\r
22         MOVSM TAC,JSR1          ;CLEAR SYSTEM DATA STORAGE\r
23         MOVSM TAC,JSR2\r
24         HRRI TAC,SYSBG1         ;CLEAR SYSTEM DATA STORAGE\r
25         BLT TAC,SYSEND\r
26         MOVSI TAC, DVDIRIN+TTYATC+TTYUSE\r
27         HRRI TAC,ASSCON+ASSPRG\r
28         HLRZ DEVDAT,DEVLST      ;SCAN ALL DEVICES\r
29 SYS1:   ANDCAM TAC, DEVMOD(DEVDAT)      ;CLEAR DIRECTORY IN CORE BIT,\r
30                                 ;ASSIGNED BY CONSOLE & PROGRAM\r
31         SETZB TAC1,DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME AND TAC1\r
32                                 ; FOR NXM LOOP BELOW(SYS2-SYS3)\r
33 \r
34         HLRZ DEVDAT, DEVSER(DEVDAT)\r
35         JUMPN DEVDAT, SYS1\r
36 XP CRSHAC,SYSINI\r
37                                 ;PLACE TO STORE CRASH ACS ON 147 RESTART\r
38 XP CRSH16,CRSHAC+16\r
39 XP CRSH17,CRSHAC+17\r
40 \f;SETUP CORE USE BIT TABLE(CORTAB)\r
41 ;1 BIT FOR EACH 1K OF POSSIBLE MEMORY\r
42 ; BIT=0 IF AVAILABLE TO USERS\r
43 ; BIT=1 IF USED BY MONITOR,USER PROGRAM, OR NON-EXISTENT\r
44 ; EXISTENT MEMORY MUST BE CONTIGUOUS(OR ELSE CORE SHUFFLER WON'T WORK)\r
45 ; IF NOT CONTIGUOUS, BANKS ABOVE FIRST NON-EXISTENT ONE ARE IGNORED\r
46         EXTERN USRLIM\r
47         MOVEI TAC,CORBLK        ;NO. OF BIT BYTES IN CORTAB\r
48 CORLIM: MOVEI AC1,USRLIM        ;LIMIT OF NO. OF K AVAIL. TO ASINGLE USER\r
49                                 ; RH PATCHED BY ONCE ONLY CODE\r
50 \r
51         MOVE JDAT,COREP         ;1 BIT BYTE POINTER TO FIRST K-1\r
52         CONO APR,NXM            ;CLEAR NON EX MEM ONCE\r
53 IFN FTSWAP,<\r
54         MOVEI UUO,2000          ;CORE SIZE INCREMENT TO UPDATE CORMAX\r
55 >\r
56 SYS2:   IBP JDAT                ;MOVE BYTE POINTER UP BY 1K\r
57         HLLO DAT,(TAC1)         ;REFERENCE MEMORY, SET RH OF DAT TO 1\r
58         CAML TAC1,SYSSIZ        ;STILL IN MONITOR(FIRST LOC NOT USED BY MON)?\r
59         CONSZ APR,NXM           ;NO, SEEN ANY NON-EX 1K YET?\r
60         JRST SYS3               ;YES, GO STORE 1 BIT IN CORTAB INDICATING\r
61                                 ; 1K NOT AVAILABLE\r
62         MOVEM JDAT,CORLST       ;NO, SET LAST AVAILABLE BLOCK EVEN HIGHER\r
63         CAML AC1,CORTAL         ;MAX RESTRICTED BY ONCE ONLY CODE?\r
64         JRST SYS4               ;400 MEANS OPERATOR DIDN'T SPECIFY ANY\r
65 IFN FTSWAP,<\r
66         EXTERN CORMAX\r
67         ADDM UUO,CORMAX         ;INCREASE MAX SIZE CORE AVAIL. TO A USER\r
68 >\r
69 SYS4:   AOSA CORTAL             ;INCREMENT NO. OF FREE 1K BLOCKS\r
70                                 ; AND LEAVE 0 BIT IN CORTAB TO FLAG IT AS FREE\r
71 SYS3:   DPB DAT,JDAT            ;YES, FLAG THIS 1K AS NOT AVAILABLE(1 BIT IN CORATB)\r
72         ADDI TAC1,2000          ;INCREMENT MEMORY REF\r
73         SOJG TAC,SYS2           ;FINISHED CORTAB YET?\r
74         IBP CORLST              ;SET TO FIRST UNAVAILABLE BLOCK\r
75 \r
76 IFN FTDISK,<\r
77         EXTERN ACCINI\r
78         MOVEI PDP,SYSPDL        ;RECLAIM MONITOR CORE (SIZE OF MONITOR INCREASED\r
79         PUSHJ PDP,ACCINI        ;AT ONCE ONLY TIME) USED BY DISK DEVICE DATA BLOCKS\r
80                                 ; (IF THIS IS RESTART)\r
81         MOVE TAC,CORTAL         ;THESE 3 INSTR. TEMPORARY UNTIL ACCINI\r
82         LSH TAC,12              ;IS REWRITTEN\r
83         MOVEM TAC, CORMAX       ;AND MOST OF ITS WORK PUT IN ONCE ONLY TIME\r
84 >\r
85         MOVEI 1,IOGO\r
86         HRRM 1,SYSDSP           ;FALL INTO IOGO\r
87 \f;INITIALIZE ALL IODEVICES\r
88 \r
89         INTERNAL IOGO,FT2REL\r
90         EXTERNAL DEVLST, MJOBN, JBTADR,JBTSTS,CLKINI,NXTINI\r
91         EXTERNAL SYSPDL,JOBMAX,CLRJOB,APRRST,JOBADR\r
92 \r
93 \r
94 IOGO:   CONO APR,APRRST         ;APR RESET (IO RESET)\r
95         CONO PI,611577          ;CLEAR PI SYSTEM (AND MEM PARITY AND POWER FAIL)\r
96         HLRZ TAC, DEVLST        ;CHAIN OF DEVICE DATA BLOKS\r
97 IOG0:   MOVEI TAC1,ASSPRG       ;CLEAR ASSIGNED BY PROGRAM BIT\r
98         ANDCAB TAC1,DEVMOD(TAC)\r
99         HRLOI ITEM,77           ;DO NOT CLEAR HUNG DEVICE COUNT SETTING\r
100         TRNE TAC1,ASSCON        ;ASSIGNED BY CONSOLE?\r
101         TLO ITEM,770000         ;YES, DO NOT CLEAR JOB NO.\r
102         ANDM ITEM,DEVCHR(TAC)   ;CLEAR HUNG DEVICE COUNT.\r
103         SETZM DEVIOS(TAC)       ;CLEAR IO STATUS WORD\r
104         SETZM DEVBUF(TAC)       ;CLEAR BUFFER ADDRESSES\r
105         HLRZ TAC, DEVSER(TAC)\r
106         JUMPN TAC, IOG0\r
107         MOVEI PDP,SYSPDL        ;REUSABLE SPACE(SEE IOINI1)\r
108         PUSHJ PDP,NXTINI        ;ALWAYS INITILIZE SCHEDULER FIST\r
109                         ;SO DEVICES MAY RESET QUEUES IF DESIRED\r
110         HLRZ    AC3,DEVLST      ;ADDR OF FIRST DDB\r
111         SETZM SAVITM\r
112 IOG01:  MOVE AC3,DEVSER(AC3)\r
113         HRRZ TAC,AC3\r
114         CAIE TAC,@SAVITM        ;SAME DEVICE\r
115         PUSHJ PDP,DINI(AC3)     ;NO. INITIALIZE IT.\r
116         HRRZM AC3,SAVITM\r
117         HLRZS AC3\r
118         JUMPN AC3,IOG01         ;INITILIZE CLOCK\r
119         PUSHJ PDP,CLKINI        ;YES,INITILIZE CLOCK\r
120 IFN FTSWAP,<\r
121         EXTERN QINI\r
122         PUSHJ PDP,QINI          ;PUT ALL JOBS IN NULL QUEUE IF SWAPPER\r
123 >\r
124 IFN FT2REL,<\r
125         EXTERN SEGINI\r
126         PUSHJ PDP,SEGINI        ;INITIALIZE HIGH SEGMENTS\r
127 >\r
128         MOVEI ITEM,JOBMAX       ;MAX INDEX IN JOB AND HIGH SEG TABLES\r
129 IOG2:   HRLOI TAC1,JNA+JLOG+SWP ;CLEAR  ALL BUT JOB NO. ASSIGNED,\r
130         ANDM TAC1,JBTSTS(ITEM)  ;JOB LOGGED IN(SHRSEG, IF HIGH SEG)\r
131                                 ; AND JOB SWAPPED BITS\r
132         SKIPE JDAT,JBTADR(ITEM) ;DOES THIS JOB HAVE CORE IN MEMORY?\r
133         PUSHJ PDP,CLRJOB        ;YES, CLEAR JOB DATA AREA PROTECTED\r
134 IOG3:   SOJG ITEM,IOG2          ;FROM IO SERVICE(DEVICE ASSIGNMENT TABLE)\r
135                                 ;AND SET JERR BIT SO JOB CANNOT CONT\r
136                                 ; FINISH WITH ITEM=0 FOR NULL JOB\r
137         CONO PI,52377           ;TURN ON ALL PI CHANNELS (ENABLE MEM PARITY)\r
138         JRST NULJOB             ;START THE NULL JOB (ITEM=0)\r
139 SAVITM=40\r
140 \r
141 \r
142 \r
143         END SYSINI\r
144 \f\r