Fixed typos in PDP6 dectape controller.
[retro-software/dec/tops10/v4.5.git] / src / sysini.mac
1 TITLE   SYSINI - SYSTEM INITIALIZATION AND RESTART - V405\r
2 SUBTTL  TH/RCC/TL/AF    TS 19 DEC 69\r
3 XP VSYSII,405\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         SETZB AC1,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         MOVE TAC,[XWD 62,63]    ;CLEAR SYSTEM PDL'S, ETC., ABOVE\r
27         SETZM 62                ; TRAP LOCATIONS\r
28         BLT TAC,137             ; AND UP TO BASE OF COMMON\r
29         MOVSI TAC, DVDIRIN+TTYATC+TTYUSE\r
30         HRRI TAC,ASSCON+ASSPRG\r
31         HLRZ DEVDAT,DEVLST      ;SCAN ALL DEVICES\r
32 SYS1:   ANDCAM TAC, DEVMOD(DEVDAT)      ;CLEAR DIRECTORY IN CORE BIT,\r
33                                 ;ASSIGNED BY CONSOLE & PROGRAM\r
34         SETZB TAC1,DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME AND TAC1\r
35                                 ; FOR NXM LOOP BELOW(SYS2-SYS3)\r
36 \r
37         HLRZ DEVDAT, DEVSER(DEVDAT)\r
38         JUMPN DEVDAT, SYS1\r
39 XP CRSHAC,SYSINI\r
40                                 ;PLACE TO STORE CRASH ACS ON 147 RESTART\r
41 XP CRSH16,CRSHAC+16\r
42 XP CRSH17,CRSHAC+17\r
43 \f;SETUP CORE USE BIT TABLE(CORTAB)\r
44 ;1 BIT FOR EACH 1K OF POSSIBLE MEMORY\r
45 ; BIT=0 IF AVAILABLE TO USERS\r
46 ; BIT=1 IF USED BY MONITOR,USER PROGRAM, OR NON-EXISTENT\r
47 ; EXISTENT MEMORY MUST BE CONTIGUOUS(OR ELSE CORE SHUFFLER WON'T WORK)\r
48 ; IF NOT CONTIGUOUS, BANKS ABOVE FIRST NON-EXISTENT ONE ARE IGNORED\r
49         EXTERN USRLIM\r
50         MOVEI TAC,CORBLK        ;NO. OF BIT BYTES IN CORTAB\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         MOVEI UUO,2000          ;CORE SIZE INCREMENT TO UPDATE CORMAX\r
54 SYS2:   IBP JDAT                ;MOVE BYTE POINTER UP BY 1K\r
55         HLLO DAT,(TAC1)         ;REFERENCE MEMORY, SET RH OF DAT TO 1\r
56         CAML TAC1,SYSSIZ        ;STILL IN MONITOR(FIRST LOC NOT USED BY MON)?\r
57         CONSZ APR,NXM           ;NO, SEEN ANY NON-EX 1K YET?\r
58         JRST SYS3               ;YES, GO STORE 1 BIT IN CORTAB INDICATING\r
59                                 ; 1K NOT AVAILABLE\r
60         MOVEM JDAT,CORLST       ;NO, SET LAST AVAILABLE BLOCK EVEN HIGHER\r
61 CORLIM: CAIGE AC1,USRLIM        ;USRLIM=MAX. CORE AVAILABLE TO A SINGLE\r
62                                 ; USER AS DEFINED BY BUILD AND MODIFIED BY ONCE\r
63                                 ; REACHED MAX YET FOR SIGIN USER?\r
64         EXTERN CORMAX\r
65         ADDM UUO,CORMAX         ;INCREASE MAX SIZE CORE AVAIL. TO A USER\r
66 SYS4:   AOSA AC1,CORTAL         ;INCREMENT NO. OF FREE 1K BLOCKS\r
67                                 ; AND LEAVE 0 BIT IN CORTAB TO FLAG IT AS FREE\r
68 SYS3:   DPB DAT,JDAT            ;YES, FLAG THIS 1K AS NOT AVAILABLE(1 BIT IN CORATB)\r
69         ADDI TAC1,2000          ;INCREMENT MEMORY REF\r
70         SOJG TAC,SYS2           ;FINISHED CORTAB YET?\r
71         IBP CORLST              ;SET TO FIRST UNAVAILABLE BLOCK\r
72 \r
73 IFN FTDISK,<\r
74         EXTERN ACCINI\r
75         MOVEI PDP,SYSPDL        ;RECLAIM MONITOR CORE (SIZE OF MONITOR INCREASED\r
76         PUSHJ PDP,ACCINI        ;AT ONCE ONLY TIME) USED BY DISK DEVICE DATA BLOCKS\r
77                                 ; (IF THIS IS RESTART)\r
78 >\r
79 IFN FTSWAP,<\r
80         EXTERN SWPINI\r
81         PUSHJ PDP,SWPINI        ;INIT SWAPPING SPACE ALLOCATION\r
82 >\r
83         MOVEI 1,IOGO\r
84         HRRM 1,SYSDSP           ;FALL INTO IOGO\r
85 \f;INITIALIZE ALL IODEVICES\r
86 \r
87         INTERNAL IOGO,FT2REL\r
88         EXTERNAL DEVLST, MJOBN, JBTADR,JBTSTS,CLKINI,NXTINI\r
89         EXTERNAL SYSPDL,JOBMAX,CLRJOB,APRRST,JOBADR,CRSHWD,IADPTR\r
90 \r
91 \r
92 IOGO:   CONO APR,APRRST         ;APR RESET (IO RESET)\r
93         CONO PI,211577          ;CLEAR PI SYSTEM (AND MEM PARITY AND POWER FAIL)\r
94         SETZM CRSHWD\r
95         HLRZ DEVDAT, DEVLST     ;CHAIN OF DEVICE DATA BLOKS\r
96 IOG0:   MOVEI TAC1,ASSPRG       ;CLEAR ASSIGNED BY PROGRAM BIT\r
97         ANDCAB TAC1,DEVMOD(DEVDAT)\r
98         HRLOI ITEM,77           ;DO NOT CLEAR HUNG DEVICE COUNT SETTING\r
99         TRNE TAC1,ASSCON        ;ASSIGNED BY CONSOLE?\r
100         TLO ITEM,770000         ;YES, DO NOT CLEAR JOB NO.\r
101         ANDM ITEM,DEVCHR(DEVDAT)        ;CLEAR HUNG DEVICE COUNT.\r
102         SETZM DEVIOS(DEVDAT)    ;CLEAR IO STATUS WORD\r
103         SETZB DAT,DEVBUF(DEVDAT)        ;CLEAR BUFFER ADDRESSES\r
104         TLNE TAC1,DVDTA         ;IS THIS A DECTAPE?\r
105         DPB DAT,IADPTR          ;YES, SET NO. OF USER CHANNELS INITED\r
106                                 ; ON THIS DEVICE TO 0\r
107         HLRZ DEVDAT, DEVSER(DEVDAT)\r
108         JUMPN DEVDAT, IOG0\r
109         MOVEI PDP,SYSPDL        ;REUSABLE SPACE(SEE IOINI1)\r
110         PUSHJ PDP,NXTINI        ;ALWAYS INITILIZE SCHEDULER FIST\r
111                         ;SO DEVICES MAY RESET QUEUES IF DESIRED\r
112         HLRZ    AC3,DEVLST      ;ADDR OF FIRST DDB\r
113         SETZM SAVITM\r
114 IOG01:  MOVE DEVDAT,AC3\r
115         MOVE AC3,DEVSER(AC3)\r
116         HRRZ TAC,AC3\r
117         CAIE TAC,@SAVITM        ;SAME DEVICE\r
118         PUSHJ PDP,DINI(AC3)     ;NO. INITIALIZE IT.\r
119         HRRZM AC3,SAVITM\r
120         HLRZS AC3\r
121         JUMPN AC3,IOG01         ;INITILIZE CLOCK\r
122         PUSHJ PDP,CLKINI        ;YES,INITILIZE CLOCK\r
123 IFN FTSWAP,<\r
124         EXTERN QINI\r
125         PUSHJ PDP,QINI          ;PUT ALL JOBS IN NULL QUEUE IF SWAPPER\r
126 >\r
127 IFN FT2REL,<\r
128         EXTERN SEGINI\r
129         PUSHJ PDP,SEGINI        ;INITIALIZE HIGH SEGMENTS\r
130 >\r
131         MOVEI ITEM,JOBMAX       ;MAX INDEX IN JOB AND HIGH SEG TABLES\r
132 IOG2:   HRLOI TAC1,JNA+JLOG+SWP ;CLEAR  ALL BUT JOB NO. ASSIGNED,\r
133         ANDM TAC1,JBTSTS(ITEM)  ;JOB LOGGED IN(SHRSEG, IF HIGH SEG)\r
134                                 ; AND JOB SWAPPED BITS\r
135         SKIPE JDAT,JBTADR(ITEM) ;DOES THIS JOB HAVE CORE IN MEMORY?\r
136         PUSHJ PDP,CLRJOB        ;YES, CLEAR JOB DATA AREA PROTECTED\r
137 IOG3:   SOJG ITEM,IOG2          ;FROM IO SERVICE(DEVICE ASSIGNMENT TABLE)\r
138                                 ;AND SET JERR BIT SO JOB CANNOT CONT\r
139                                 ; FINISH WITH ITEM=0 FOR NULL JOB\r
140         CONO PI,52377           ;TURN ON ALL PI CHANNELS (ENABLE MEM PARITY)\r
141         JRST NULJOB             ;START THE NULL JOB (ITEM=0)\r
142 SAVITM=40\r
143 \r
144 \r
145 \r
146         END SYSINI\r
147 \f\r