TITLE SYSINI - SYSTEM INITIALIZATION AND RESTART - V405 SUBTTL TH/RCC/TL/AF TS 19 DEC 69 XP VSYSII,405 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP EXTERNAL APRCHN,ERROR EXTERNAL NULJOB,ONCE,SYSBEG,SYSBG1,SYSEND EXTERNAL CORTAB,COREP,CORLST,CORTAL,CORBLK,SYSSIZ,LINKSR EXTERNAL SYSTOP EXTERNAL SYSDSP ;INITIALIZE SYSTEM DATA STORAGE INTERNAL FTDISK,SYSINI,FTSWAP,JSR2,CRSHAC,CRSH16,CRSH17,CORLIM ENTRY SYSINI SYSINI: CONO APR,200000 ;IO RESET JSR1: JSR ONCE ;DO ONCE ONLY CODE ONCE JSR2: JSR LINKSR ;LINK IO SERVICE ROUTINES MOVS TAC,.+1 SETZB AC1,SYSBEG MOVSM TAC,JSR1 ;CLEAR SYSTEM DATA STORAGE MOVSM TAC,JSR2 HRRI TAC,SYSBG1 ;CLEAR SYSTEM DATA STORAGE BLT TAC,SYSEND MOVE TAC,[XWD 62,63] ;CLEAR SYSTEM PDL'S, ETC., ABOVE SETZM 62 ; TRAP LOCATIONS BLT TAC,137 ; AND UP TO BASE OF COMMON MOVSI TAC, DVDIRIN+TTYATC+TTYUSE HRRI TAC,ASSCON+ASSPRG HLRZ DEVDAT,DEVLST ;SCAN ALL DEVICES SYS1: ANDCAM TAC, DEVMOD(DEVDAT) ;CLEAR DIRECTORY IN CORE BIT, ;ASSIGNED BY CONSOLE & PROGRAM SETZB TAC1,DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME AND TAC1 ; FOR NXM LOOP BELOW(SYS2-SYS3) HLRZ DEVDAT, DEVSER(DEVDAT) JUMPN DEVDAT, SYS1 XP CRSHAC,SYSINI ;PLACE TO STORE CRASH ACS ON 147 RESTART XP CRSH16,CRSHAC+16 XP CRSH17,CRSHAC+17 ;SETUP CORE USE BIT TABLE(CORTAB) ;1 BIT FOR EACH 1K OF POSSIBLE MEMORY ; BIT=0 IF AVAILABLE TO USERS ; BIT=1 IF USED BY MONITOR,USER PROGRAM, OR NON-EXISTENT ; EXISTENT MEMORY MUST BE CONTIGUOUS(OR ELSE CORE SHUFFLER WON'T WORK) ; IF NOT CONTIGUOUS, BANKS ABOVE FIRST NON-EXISTENT ONE ARE IGNORED EXTERN USRLIM MOVEI TAC,CORBLK ;NO. OF BIT BYTES IN CORTAB MOVE JDAT,COREP ;1 BIT BYTE POINTER TO FIRST K-1 CONO APR,NXM ;CLEAR NON EX MEM ONCE MOVEI UUO,2000 ;CORE SIZE INCREMENT TO UPDATE CORMAX SYS2: IBP JDAT ;MOVE BYTE POINTER UP BY 1K HLLO DAT,(TAC1) ;REFERENCE MEMORY, SET RH OF DAT TO 1 CAML TAC1,SYSSIZ ;STILL IN MONITOR(FIRST LOC NOT USED BY MON)? CONSZ APR,NXM ;NO, SEEN ANY NON-EX 1K YET? JRST SYS3 ;YES, GO STORE 1 BIT IN CORTAB INDICATING ; 1K NOT AVAILABLE MOVEM JDAT,CORLST ;NO, SET LAST AVAILABLE BLOCK EVEN HIGHER CORLIM: CAIGE AC1,USRLIM ;USRLIM=MAX. CORE AVAILABLE TO A SINGLE ; USER AS DEFINED BY BUILD AND MODIFIED BY ONCE ; REACHED MAX YET FOR SIGIN USER? EXTERN CORMAX ADDM UUO,CORMAX ;INCREASE MAX SIZE CORE AVAIL. TO A USER SYS4: AOSA AC1,CORTAL ;INCREMENT NO. OF FREE 1K BLOCKS ; AND LEAVE 0 BIT IN CORTAB TO FLAG IT AS FREE SYS3: DPB DAT,JDAT ;YES, FLAG THIS 1K AS NOT AVAILABLE(1 BIT IN CORATB) ADDI TAC1,2000 ;INCREMENT MEMORY REF SOJG TAC,SYS2 ;FINISHED CORTAB YET? IBP CORLST ;SET TO FIRST UNAVAILABLE BLOCK IFN FTDISK,< EXTERN ACCINI MOVEI PDP,SYSPDL ;RECLAIM MONITOR CORE (SIZE OF MONITOR INCREASED PUSHJ PDP,ACCINI ;AT ONCE ONLY TIME) USED BY DISK DEVICE DATA BLOCKS ; (IF THIS IS RESTART) > MOVEI 1,IOGO HRRM 1,SYSDSP ;FALL INTO IOGO ;INITIALIZE ALL IODEVICES INTERNAL IOGO,FT2REL EXTERNAL DEVLST, MJOBN, JBTADR,JBTSTS,CLKINI,NXTINI EXTERNAL SYSPDL,JOBMAX,CLRJOB,APRRST,JOBADR,CRSHWD,IADPTR IOGO: CONO APR,APRRST ;APR RESET (IO RESET) CONO PI,211577 ;CLEAR PI SYSTEM (AND MEM PARITY AND POWER FAIL) SETZM CRSHWD HLRZ DEVDAT, DEVLST ;CHAIN OF DEVICE DATA BLOKS IOG0: MOVEI TAC1,ASSPRG ;CLEAR ASSIGNED BY PROGRAM BIT ANDCAB TAC1,DEVMOD(DEVDAT) HRLOI ITEM,77 ;DO NOT CLEAR HUNG DEVICE COUNT SETTING TRNE TAC1,ASSCON ;ASSIGNED BY CONSOLE? TLO ITEM,770000 ;YES, DO NOT CLEAR JOB NO. ANDM ITEM,DEVCHR(DEVDAT) ;CLEAR HUNG DEVICE COUNT. SETZM DEVIOS(DEVDAT) ;CLEAR IO STATUS WORD SETZB DAT,DEVBUF(DEVDAT) ;CLEAR BUFFER ADDRESSES TLNE TAC1,DVDTA ;IS THIS A DECTAPE? DPB DAT,IADPTR ;YES, SET NO. OF USER CHANNELS INITED ; ON THIS DEVICE TO 0 HLRZ DEVDAT, DEVSER(DEVDAT) JUMPN DEVDAT, IOG0 MOVEI PDP,SYSPDL ;REUSABLE SPACE(SEE IOINI1) PUSHJ PDP,NXTINI ;ALWAYS INITILIZE SCHEDULER FIST ;SO DEVICES MAY RESET QUEUES IF DESIRED HLRZ AC3,DEVLST ;ADDR OF FIRST DDB SETZM SAVITM IOG01: MOVE DEVDAT,AC3 MOVE AC3,DEVSER(AC3) HRRZ TAC,AC3 CAIE TAC,@SAVITM ;SAME DEVICE PUSHJ PDP,DINI(AC3) ;NO. INITIALIZE IT. HRRZM AC3,SAVITM HLRZS AC3 JUMPN AC3,IOG01 ;INITILIZE CLOCK PUSHJ PDP,CLKINI ;YES,INITILIZE CLOCK IFN FTSWAP,< EXTERN QINI PUSHJ PDP,QINI ;PUT ALL JOBS IN NULL QUEUE IF SWAPPER > IFN FT2REL,< EXTERN SEGINI PUSHJ PDP,SEGINI ;INITIALIZE HIGH SEGMENTS > MOVEI ITEM,JOBMAX ;MAX INDEX IN JOB AND HIGH SEG TABLES IOG2: HRLOI TAC1,JNA+JLOG+SWP ;CLEAR ALL BUT JOB NO. ASSIGNED, ANDM TAC1,JBTSTS(ITEM) ;JOB LOGGED IN(SHRSEG, IF HIGH SEG) ; AND JOB SWAPPED BITS SKIPE JDAT,JBTADR(ITEM) ;DOES THIS JOB HAVE CORE IN MEMORY? PUSHJ PDP,CLRJOB ;YES, CLEAR JOB DATA AREA PROTECTED IOG3: SOJG ITEM,IOG2 ;FROM IO SERVICE(DEVICE ASSIGNMENT TABLE) ;AND SET JERR BIT SO JOB CANNOT CONT ; FINISH WITH ITEM=0 FOR NULL JOB CONO PI,52377 ;TURN ON ALL PI CHANNELS (ENABLE MEM PARITY) JRST NULJOB ;START THE NULL JOB (ITEM=0) SAVITM=40 END SYSINI