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