SYSBOOT MODULE 0001 * * 21st May 1985 * * "S" series disc bootstrap * * Loaded at RA 0 by system establishment manager (SEM) * or APF loader (APF). * SUBR BOOT CODE W0 WORD -1 W1 WORD 0 W2 WORD 0 W3 WORD 0 WORD(4) 0 VIS WORD(24) X'FACEFACE' *RECOGNISABLE VISAGE IN DUMPS *INITIAL REGISTER VALUES WORD X'39000' * LNB WORD X'0004FF02' * PSR - ACR=0,PSR=PRIV,PM=FF,ACS=2 WORD R'GO * PC WORD X'0000FFFF' * SSR - IM=FFFF WORD X'39005' * SF WORD X'007FFFFF' * IT WORD X'007FFFFF' * IC WORD 0 * CTB WORD 0 * XNB WORD 0 * B - set up by SEM or APF * BYTE 0,1 - reserved * BYTE 2 - stream no. of boots device * BYTE 3 - fn module no. of load DCU LWORD 0 * DR0,DR1 WORD 0 * A0 - ACC set up by SEM or APF WORD 0 * A1 - contains a real address byte descriptor WORD 0 * A2 - of the configuration table WORD 0 * A3 WORD X'00080000' * LSTL LSTBA WORD X'000000D0' * LSTB WORD X'80000000' * PSTL - only required for TCB area PSTBA WORD X'000000E8' * PSTB WORD X'3FF3FF80' * LST WORD X'80000001' * SEG 0 - stack,code WORD X'2FF00000' WORD X'80000081' * SEG 1 - SSN+1 CONL WORD X'2FF00000' * SEG 2 - config table CONAD WORD X'00000000' * set up dynamically WORD X'2FF3FF80' * SEG 0 - TCB area STEAD WORD 0 * set up dynamically WORD(4) 0 WORD 0 * OCP mprog load stop words WORD X'000F0000' * * * PSTL WORD X'83FC0000' PSTB WORD X'00008400' FIXA WORD X'80000001' CFLAGA WORD X'60000000' PCFLAGA WORD X'60000010' CONFIGA LWORD X'2800000000080000' WORD0 LWORD X'2800000100000000' WORD1 LWORD X'2800000100000004' WORD2 LWORD X'2800000100000008' WORD3 LWORD X'280000010000000C' WORD4 LWORD X'3000000100000010' STSTREAM WORD X'01' CSTREAM WORD X'03' OKMASK WORD X'C0000000' CCMASK WORD X'FFFFFF00' LSTBR1 WORD X'00080000' LSTBR2 WORD 0 CCARA1 WORD X'0003C000' CCARA2 WORD 0 CFLAG1 WORD X'80000000' CFLAG2 WORD 0 CONFIGK LWORD 0 ISAS LWORD 0 BOOTSTREAM WORD 0 IPLDEV WORD 0 CFGTX WORD 0 DCUPORT WORD 0 BLOCKS WORD 0 CCHH WORD 0 CHSIZE WORD X'37000' * max CHOPSUPE size * * * GO ST CONFIGK * SAVE CONFIG TABLE ADDRESS STB BOOTSTREAM *PROTEM LSS X'2900DB00' * IDENT ST.G X'6016' * TO 'LIGHTS' * following stuff protem LB X'6006' * 0/0/strm/dcu LSS.GB JZ HKZ ST BOOTSTREAM J NOHK HKZ LSS BOOTSTREAM AND 255 OR X'2100' * stream 33 as default ST BOOTSTREAM J NOHK * following stuff eventually LB X'6006' * read switches (cc/hh) LSS.GB * ( to override label ptr) AND X'FFFF' JZ NOHK * -> use standard ptr ST CCHH NOHK LSS BOOTSTREAM AND X'FF' ST DCUPORT L BOOTSTREAM USH -8 AND X'FF' ST BOOTSTREAM LSD X'18001000'/0 * MOVE CODE TO END OF 1ST 256K LD X'18001000'/X'3E000' MV JLK MODPC *RELOCATE PC LDRL S1ISAS *IMAGE STORE ARRAY STD ISAS JLK SLAVEOFF *RELOCATE LST LSS LSTBA UAD X'3E000' LD ISAS LB.D 1 ST.GB ST LSTBR2 *SAVE FOR LATER ACTIVATE *RELOCATE PST LSS PSTBA UAD X'3E000' LB.D 3 ST.GB LSD CONFIGK *SET DESC & STE FOR CONFIG TABLE MPSR X'11' OR FIXA ST CONAD LSS CONFIGK *LENGTH IAD 255 *CONVERT TO STE BOUND AND X'FF00' ISB X'80' ST.T OR CONL ST CONL *TO LST LSS.T OR CONFIGA *WORD DESC ST CONFIGA LDRL TCBD *SET UP TCB PSTE CYD MPSR X'11' *SHORTEN ACC OR FIXA *FIXED & AVAILABLE ST STEAD *INTO PSTE ST CCARA2 *AND CCA RA LD CONFIGA * CFGT address LSS DCUPORT * DCU port IMY 2 IAD 3 ST CFGTX LSS.D CFGTX * 2nd word of DCU entry USH -16 AND X'FF' * DCU no. USH 8 OR BOOTSTREAM * DCU/stream ST IPLDEV * for CHOPSUPE LSS.G 16 * OCPTYPE USH -24 * OCP port USH 22 *PC PORT OR PCFLAGA ST PCFLAGA LSS DCUPORT *DCU CC PORT USH 22 OR CFLAGA *INTO CHANNEL FLAG ADDRESS ST CFLAGA LSD CCARA1 *SET STREAM AREA BASE LB CFLAGA ADB 32 ST.GB LSS CSTREAM *SET UP CHANNEL FLAG USH 24 OR BOOTSTREAM ST CFLAG2 LSD CFLAG1 *CONNECT STREAM LB CFLAGA ST.GB CST MPSR X'12' *FORCE DOUBLE ACC BEFORE L.B L.GB *LSD NOT GOOD ENOUGH MPSR X'11' *PSD 2.5.3 SAYS TEST WORD 1 ONLY *PSD 4.3.1. SAYS WORDS 0/1 JNZ CST LSS STSTREAM *CHANGE TO START STREAM USH 24 OR BOOTSTREAM ST CFLAG2 LSS X'2040C012' * read VOL label ST TCB0 LSS 80 ST TCB2 LSS X'FE00' * status mask ST TCBPRE0 LSS X'20' * restore USH 24 ST TCBPRE1 JLK FIREIO * * until formats sorted read CHOPSUPE from page 0 * LSS X'2F40C006' * autoread ST TCB0 LSS 65536 * 64K at a time ST TCB2 LSS X'FE40' * smask/mode ST TCBPRE0 LSS X'3C' * restore (lest mech error) & seek USH 24 ST TCBPRE1 LSS 5 * head limit USH 16 ST TCBPRE2 RREAD JLK FIREIO LSS X'2F404006' * unset initialise ST TCB0 LSS TCBR AND X'FFFF' * RBC IRSB 65536 * bytes transferred ST TCBR * remember IAD TCB3 * increment address ST TCB3 LSS TCBR IRSB CHSIZE * left to go JNP REND * -> fini ST CHSIZE ST TCB2 ICP 65536 JL RREAD * -> last chunk LSS 65536 * next 64K ST TCB2 ICP TCBR JE RREAD * -> next read same cyl * ok provided blocks/cyl # 16,32 or 48 LSS TCBPRE1 IAD 1 * increment cyl ST TCBPRE1 LSS TCBPRE2 AND X'FFFFFF' IAD 1 * & scyl ST TCBPRE2 LSS 0 * clear shead/sector ST TCBPRE3 LSS X'2F40C006' * re-seek ST TCB0 J RREAD * -> next I/O REND * LD ISAS * set up real PST LSS PSTL LB.D 2 ST.GB LSS PSTB LB.D 3 ST.GB *NOW ACTIVATE CHOPSUPE LSS IPLDEV ST.I WORD2 LSD CONFIGK *TABLE ADDRESS ST.I WORD4 LSD LSTBR1 SLSD 0 ST.T ACT.T * IDLE X'B00B' * * * MODPC LSS.T * RETURN ADDRESS UAD X'3E000' *RELOCATE PC ST.T J.T *ENTER MOVED CODE * SLAVEOFF LD ISAS LSS.D 4 LB.D 5 ST.GB J.T * * FIREIO LB PCFLAGA *CLEAR ANY INTERRUPTS MPSR X'12' L.GB ST PPCINT LSS BLOCK IAD 1 ST BLOCK LSS TCBR *PREVIOUS RESPONSE ST PRESP LSS 0 ST TCBR *CLEAR RESPONSE WORD LSD CFLAG1 *CHANNEL FLAG LB CFLAGA ST.GB FIREW MPSR X'12' L.GB *WAIT FOR ACCEPT MPSR X'11' JNZ FIREW FIREWR LSS TCBR JZ FIREWR *WAIT FOR RESPONSE AND OKMASK *NORMAL TERMINATION? JZ FIREOK *->YES LSS TCBR USH -24 ICP X'98' * short block? JE FIREOK * -> yes ok LB TCBR LSQ TCBPOST IDLE X'1010' FIREOK LSS TCBR J.T * * * * ALIGNS BLOCK WORD 0 PRESP WORD 0 PPCINT WORD(2) 0 * * S1ISAS WORD X'28000010' WORD X'00000008' WORD X'6000' *LSTL WORD X'6001' *LSTB WORD X'6002' *PSTL WORD X'6003' *PSTB WORD X'1C8' * slave bits WORD X'6011' *OCP CONTROL * * * ALIGND *TCB AREA - MUST BE IN A PUBLIC SEG TCBD WORD X'28000010' *NOTIONAL DESCRIPTOR FOR PSTBR SETUP WORD X'00000008' * *TCB TCB0 WORD 0 * command etc. TCB1 WORD X'00000001' *RA of data seg base TCB2 WORD 0 * length TCB3 WORD 0 * address TCB4 WORD 0 * VA of next TCB TCBR WORD 0 * response word TCBPRE0 WORD 0 * byte: mech/cmask/smask/mode TCBPRE1 WORD 0 * byte: fn/seg.. hword: cyl TCBPRE2 WORD 0 * byte: head/hdlimit.. hword: scyl TCBPRE3 WORD 0 * hword: shead.. byte: sect/offset TCBPOST WORD(4) 0 * post amble END