ASMB,Q,R,C HED SWTCH - TRANSFERS FILE CONTAINING RTE-IV SYSTEM GENERATED ONLINE NAM SWTCH,3,10 92067-16325 REV.1903 790418 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 **************************************** * * NAME: SWTCH * SOURCE: 92067-18325 * BINARY: 92067-16325 * WRITTEN BY: KFH * **************************************** SPC 2 * * TURN - ON SEQUENCE: * * RU,SWTCH,FLNAME:SC:LB,CHANNEL,SUBCHANNEL/UNIT,AUTO,FILES,TYPE6,INITS * * WHERE: * * FLNAME:SC:LB IS THE ABSOLUTE FILE NAME OF THE SYSTEM * CHANNEL IS THE OCTAL TARGET CHANNEL, WITH A "B" APPENDED * SUBCHANNEL IS THE TARGET 7900 SUBCHANNEL * OR * UNIT IS THE TARGET 7905/7920 UNIT * AUTO IS Y/N, FOR AUTO BOOT-UP * FILES IS Y/N, FOR SAVING THE TARGET FILE SYSTEM * TYPE6 IS Y/N, FOR PURGING THE TYPE 6 FILES AT THE TARGET * INITS IS Y/N, FOR INITIALIZING ANY ADDITIONAL SUBCHANNELS SPC 2 * * * THE ON-LINE RTE GENERATOR PRODUCES AN FMP FILE CONTAINING * A COMPLETE RTE-IV+ SYSTEM FOR A SPECIFIC CONFIGURATION. * SWTCH COPIES THE FILE ONTO THAT CHANNEL AND SUBCHANNEL(UNIT), OR * TO A USER-SPECIFIED 'TEMPORARY' CHANNEL AND SUBCHANNEL(UNIT). * AND BEFORE THE TRANSFER BEGINS, THE FILE IS CHECKED FOR VALIDITY, * THE OPERATOR IS NOTIFIED OF THE DESTINATION CONFIGURATION, * INCLUDING THE SYSTEM SUBCHANNEL DEFINITION. * * IF THE NEW RTE SYSTEM OVERLAYS THE CURRENT SYSTEM, A NEW * FMP SETUP (INITIALIZED) CODE WORD IS COMPUTED AND WRITTEN * INTO THE FMP CARTRIDGE DIRECTORY SO THAT ON BOOTUP, FMP * WILL REMAIN INTACT (INITIALIZED). SKP * ENTRY POINTS * ENT SWTCH * ENT \SWTM ENT \DFTR,\DSHD,\DNSU,\DNSP,\DNTR,\DSUB ENT \TUNT,\TCH,\TSUB,\DUNT,\D#ST,\D#WT ENT \INIT,\LNTH ENT \BUFA,\XOUT,\SAVE ENT \TRAK,\SECT ENT \CVAS,\CLEN,\DSPL,\BLIN ENT \FFMP,\STRK ENT \BOOT,\TMT,\LU2 * * EXTERNAL ENTRY POINTS * EXT RMPAR,EXEC,$LIBR EXT OPEN,READF,LOCF,CLOSE,$BMON EXT $LIBR,$LIBX * EXT \DSK0,\DSK5 EXT \INP0,\INP5 EXT \INT0,\INT5 EXT \STD0,\STD5 EXT CNUMD,GETST EXT \FLGT,\SETD,\BADH * SPC 2 A EQU 0 B EQU 1 SUP SKP * HEADER RECORD #2 FORMAT * * . * . * . * * ------------------------------------ * ! 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ! INDICATES AN RTE-IV+ * ------------------------------------ * 59 ! SYSTEM SUBCHANNEL # ! * ------------------------------------ * 60 ! SYSTEM EQT # ! * ------------------------------------ * 61 ! NUMBER OF EQT'S ! * ------------------------------------ * 62 ! PRIV. INT. CHANNEL ! * ------------------------------------ * 63 ! TBG CHANNEL ! * ------------------------------------ * 64 ! # SUBCHANNELS ! TTY CHANNEL ! * ------------------------------------ * 65 ! CHANNEL # ! EQT TYPE ! FOR EQT #1 * ------------------------------------ * . . * . . * . . * ------------------------------------ * 127 ! CHANNEL # ! EQT TYPE ! FOR EQT #64 * ------------------------------------ SKP * HEADER RECORD #1 FORMAT * * FOR A 7905/6/20/25 SYSTEM: * * ------------------------------------ * ! # 64-WORD SECTORS/TRACK ! * ------------------------------------ * ! FIRST CYLINDER # ! ONE 5-WORD * ------------------------------------ * ! # SUFACES ! STARTING HEAD ! UNIT ! ENTRY FOR * ------------------------------------ * ! NUMBER OF TRACKS ! SUBCHANNELS * ------------------------------------ * ! NUMBER OF SPARES ! 0 THRU 31 * ------------------------------------ * * FOR A 7900 SYSTEM: * * ------------------------------------ * ! FIRST TRACK # ! SUBCHANNEL 0 * ------------------------------------ * . SUBCHANNELS 1 * . * . THRU 7 * ------------------------------------ * ! NUMBER OF TRACKS ! SUBCHANNEL 0 * ------------------------------------ * . SUBCHANNELS 1 * . * . THRU 7 SKP SPC 4 *------------------------------------------------------------------------ * * THE FOLLOWING 8192 WORDS WILL BE OVERLAID * ONCE THE TRANSFER PROCESS BEGINS. BUFR * WILL CONTAIN ONE TRACK'S WORTH OF INFO. * *------------------------------------------------------------------------ SPC 4 BUFR BSS 128 BUFFER FOR 1 FULL TRACK (6144 WORDS) * * MES1 DEF *+1 ASC 22, ****** W A R N I N G ****** MES2 DEF *+1 ASC 23,ALL ACTIVITY MUST BE TERMINATED BEFORE SYSTEM ASC 9,TRANSFER PROCESS. SPC 2 BSS 384+BUFR-* NEED TO READ IN 3 RECORDS AT VERF1 SPC 2 MES3 DEF *+1 ASC 14,FILE NAME OF NEW RTE SYSTEM? MES4 DEF *+1 ASC 9,ILLEGAL FILE NAME MES5 DEF *+1 ASC 15,NEW SYSTEM I/O CONFIGURATION: MES6 DEF *+1 ASC 18,SELECT CODE XX PRIVILEGED INTERRUPT MES6A DEF MES6+7 MES7 DEF *+1 ASC 9,SELECT CODE XX TBG MES7A DEF MES7+7 MES8 DEF *+1 ASC 11,SELECT CODE XX TYPE=XX MES8A DEF MES8+7 MES8B DEF MES8+11 MES9 DEF *+1 ASC 24,NEW SYSTEM (LU2) SELECT CODE= XX SUBCHANNEL= XX MES9A DEF MES9+16 MES9B DEF MES9+24 MES10 DEF *+1 ASC 12,PLATTER XX FIRST TRACK# MS10A ASC 9,XXXX #TRACKS XXXX MS10C DEF MS10A MS10D DEF MS10A+7 MES12 DEF *+1 ASC 25,TARGET SELECT CODE FOR NEW SYSTEM? (XX OR " "CR) MES13 DEF *+1 ASC 14,TARGET PLATTER/UNIT FOR NEW ASC 11,SYSTEM? (X OR " "CR) MES16 DEF *+1 ASC 23,NOW IS THE TIME TO INSERT CORRECT CARTRIDGE IN MES17 DEF *+1 ASC 21,TARGET PLATTER/UNIT. (" "CR TO CONTINUE) MES18 DEF *+1 ASC 16,SAVE FILES AT TARGET? (Y OR N) MES19 DEF *+1 ASC 19,NEW SYSTEM WILL DESTROY SOME FMP FILES MES20 DEF *+1 ASC 12,OK TO PROCEED? (Y OR N) MES22 DEF *+1 ASC 15,PURGE TYPE 6 FILES? (Y OR N) MES23 DEF *+1 ASC 19, INFORMATION STORED ON PLATTER/UNIT XX ASC 14, OF TARGET SELECT CODE XX MS23B DEF *+1 ASC 9, WILL BE DESTROYED MS23A DEF MES23+32 MES24 DEF *+1 ASC 12,AUTO BOOT-UP? (Y OR N) MES25 DEF *+1 ASC 25,PRESENT CONFIGURATION DOESN'T PERMIT AUTO BOOT-UP. MES26 DEF *+1 ASC 22,SYSTEM WILL HALT AFTER TRANSFER COMPLETION. MES32 DEF *+1 ASC 17,READY TO TRANSFER. OK TO PROCEED? MES34 DEF *+1 ASC 18,INITIALIZE SUBCHANNELS ? (Y OR N) MS34A DEF MES34+12 "L" ASC 1,L MES35 DEF *+1 ASC 15,TARGET PLATTER? (XX OR " "CR) MES36 DEF *+1 ASC 16,TARGET UNIT XX FOR SUBCHANNELS MS36A ASC 24, ASC 20, ASC 24, COMBL ASC 1,, MS36B DEF MS36A MES37 DEF *+1 ASC 16,DESTN. UNIT XX FOR SUBCHANNELS MS37A ASC 24, ASC 20, ASC 24, MS37B DEF MS37A MES38 DEF *+1 ASC 14,TARGET UNIT? (XX OR " "CR) MES40 DEF *+1 ASC 17,#TRACKS FIRST CYL MS40A DEF MES40+6 MS40B DEF MES40+16 MES41 DEF *+1 ASC 17,HEAD # #SURFACES MS41A DEF MES41+6 MS41B DEF MES41+16 MES42 DEF *+1 ASC 17,UNIT/ADD #SPARES MS42A DEF MES42+6 MS42B DEF MES42+16 MES43 DEF *+1 ASC 17,#SECTORS/TRACK MS43B DEF MES43+16 * SWAP0 DEF *+1 ASC 3,SWSG1 7900 DISK DRIVER SEGMENT SWAP5 DEF *+1 ASC 3,SWSG2 7905/7920 DISK DRIVER SEGMENT SKP * CONSTANTS * B177 OCT 177 B777 OCT 777 B1774 OCT 177400 B2060 OCT 20060 * N7 DEC -7 N31 DEC -31 N64 DEC -64 N89 DEC -89 * P12 DEC 12 P14 DEC 14 P17 DEC 17 P28 DEC 28 P98 DEC 98 P161 DEC 161 P512 DEC 512 * * #LEP EQU 1762B # OF LIBRARY ENTRY POINTS IN LIST ALEP EQU 1761B ADDR " " " LIST LEPL NOP LENGTH " " " " LCNT NOP COUNTER $T ASC 1,$T B3 ASC 1,B3 .2 ASC 1,2 TMTSF OCT 2202 SKP * * GTLEN COMPUTES LLEN FOR READING THE * LIBRARY ENTRY POINTS LIST INTO * BUFR * * CALLING SEQUENCE: (A)=REMAINING SIZE OF L.E.P. * JSB GTLEN * GTLEN NOP LDB P512 THE NORMAL BUFFER SIZE CMA,INA IF MORE THAN THE REMAINING ADA P512 LEP SIZE, THEN USE THE SIZE SSA,RSS IN (A) LDB LEPL STB LLEN JMP GTLEN,I SPC 5 * * READD READS LLEN WORDS AT TRACK LTRK, AND * SECTOR LSEC * READD NOP JSB EXEC DEF *+7 DEF P1 DEF P2 DEF BUFR DEF LLEN DEF LTRK DEF LSEC * JMP READD,I * * LTRK NOP LSEC NOP SKP * * VERIFIES THE EXISTENCE OF A SYSTEM SUBCHANNEL MATCH * AT THE TARGET CHANNEL AND SUBCHANNEL. THE FOLLOWING * CHECKS ARE MADE: * * VERIFY THAT A CARTRIDGE DIRECTORY EXISTS ON THE * LAST SYSTEM TRACK (AS DEFINED BY THE NEW * SYSTEM) * OR VERIFY THAT A FILE DIRECTORY SPECIFICATION ENTRY * EXISTS ON THIS TRACK * * * RETURN: (P+1) CAN'T SAVE THE FILE STRUCTURE * (P+2) CAN SAVE IT * VFYSY NOP CLA STA \INIT CLEAR INIT WORD FOR DISKD * LDA N128 STA \LNTH READ 128 WORDS CCE HOPEFULLY THEY WILL CONTAIN LDB \BUFA THE DIRECTORY AT STB BPTR TARGET SUBCHANNEL CCA ADA \DNTR DESTINATION SYSTEM LAST(LOGICAL) STA \TRAK TRACK, LESS 1 CLA STA \SECT JSB DISKD * * * VERIFY THE EXISTENCE OF A CARTRIDGE DIRECTORY * LDA N31 MAX # CARTRIDGE ENTRIES STA TEMP1 CHCD0 LDA BPTR,I GET WORD 0 OF ENTRY SSA JMP NEWFD LU WORD < 0 LDB N64 ADB A SSB,RSS JMP NEWFD LU > 77(8) * CPA P0 END OF LU'S ? JMP CHCD3 YES CPA P2 LU 2 (SYSTEM) ? RSS YES JMP CHCD1 CHECK WORDS 1-3 IN ENTRY * LDB BPTR GET WORD #1 OF THE (POSSIBLY) INB SYSTEM LU 2 ENTRY LDA B,I SSA JMP NEWFD LAST FMP TRACK WORD < 0 STA D.LT SAVE FOR LATER CHECKS * CHCD1 LDA N3 STA TEMP2 * CHCD2 ISZ BPTR CHECK WORDS 1,2,&3 LDA BPTR,I OF ENTRY FOR VALUES SSA >= 0 JMP NEWFD INVALID ISZ TEMP2 JMP CHCD2 CHECK NEXT WORD ISZ BPTR NEXT ENTRY WORD 0 ISZ TEMP1 LAST ENTRY (31)? JMP CHCD0 NO,CONTINUE * * POSSIBLY A NEW FILE DIRECTORY FORMAT: CARTRIDGE DIRECTORY * IS AT END OF OP SYSTEM * NEWFD LDB \BUFA RESET BUFFER POINTER STB BPTR TO CHECK FOR FD AT ISZ D.LT BEGINNING OF DIRECTORY TRACK NOP SET D.LT TO 0 TO INDICATE ISZ OLDNU A POTENTIAL NEW FORMAT JMP CHFD0 CHECK FOR FD * CHCD3 LDA D.LT (WAS INITIALLY -1) SSA JMP NEWFD NEVER SET BY A LU 2 LDA BF124 SZA JMP NEWFD WORD 124 OF CD MUST = 0 * * * LOOKED LIKE A CARTRIDGE DIRECTORY. NOW TRY FOR A * FILE DIRECTORY IN THE NEXT BLOCK. * CCA ADA \DNTR DETERMINE DISK ADDRESS OF NEXT STA \TRAK BLOCK CONTAINING THE LDA P14 FILE SPEC ENTRY STA \SECT READ 128 WORDS, HOPEFULLY THE LDB \BUFA SPEC ENTRY STB BPTR CCE JSB DISKD * CHFD0 LDA BPTR,I TESTS FOR A VALID FILE DIRECTORY ENTRY: SSA,RSS JMP NOTFS WORD 0 MUST BE < 0 * LDA N7 WORDS 1-7,9-15 IN SPEC MUST BE >= 0 STA TEMP2 CHFD1 ISZ BPTR LDA BPTR,I SSA JMP NOTFS < 0, THEREFORE INVALID ISZ TEMP2 JMP CHFD1 * ISZ BPTR WORD 8 MUST BE < 0 LDA BPTR,I SSA,RSS JMP NOTFS LDA N6 NOW CHECK WORDS 9-15 STA TEMP2 CHFD2 ISZ BPTR LDA BPTR,I SSA JMP NOTFS ISZ TEMP2 JMP CHFD2 * LDA BF6 WORD 6 (#SECTORS/TRACK) MUST BE CPA \D#ST SAME AS DESTINATION SYSTEM RSS JMP NOTFS AND LDB BF5 >= WORD 5 (NEXT AVAILABLE SECTOR) CMB,INB ADA B SSA JMP NOTFS INVALID * LDA BF7 LOWEST DIRECTORY TRACK(LOGICAL) LDB BF8 MINUS THE NEGATIVE # DIRECTORY STB D.# TRACKS, CMB MINUS 1 ADA B GIVES LAST FMP TRACK CPA D.LT MUST = LAST FMP TRACK INDICATED JMP CHFD3 IN CD FOR LU 2 LDB D.LT ELSE NONE FOUND AT ALL SZB JMP NOTFS NEITHER STA D.LT OTHERWISE UPDATE LAST FMP TRACK * CHFD3 LDB \DNTR DOES THE LOGICAL DIRECTORY TRACK # ADB N1 AT TARGET = LOGICAL DIRECTORY TRACK # CPA B FOR DESTINATION (THE LAST LOGICAL TRACK FOR RSS SYSTEM LU) ? JMP NOTFS NO LDA BF4 SAVE THE FIRST FMP TRACK FOR STA \FFMP FUTURE CHECKS * * SET UP SOME VALUES FOR SCANNING THE DIRECTORY * ENTRIES LATER - ESPECIALLY WHEN PURGING OVERLAID FILES * OR TYPE 6 FILES * LDA OLDNU GET THE FLAG TO INDICATE THE DIFFERENCES LDB \D#ST DETERMINE # OF 16-WORD RBL,RBL ENTRIES PER TRACK SZA,RSS OLD VERSION ADB N8 HAS 8 LESS CUZ OF CD CMB,INB COMPLEMENT STB FDT#E NUMBER TO SCAN ON FIRST TRACK LDB P4 NOW DETERMINE THE WORD 4 OFFSET SZA,RSS IN THE FILE SPEC'N ENTRY ADB P896 BEGINNING OF SECOND BLOCK FOR OLD ADB \BUFA ADD BUFFER ADDRESS STB FDOFF AND SAVE LDB \BUFA NOW THE OFFSET FOR THE FIRST SZA,RSS DIRECTORY ENTRY (OK TO ADB P128 SCAN THE SPEC'N ENTRY) STB FIRDE LDA \D#WT NOW SET A POINTER TO THE ADA \BUFA LAST WORD+1 IN THE DIRECTORY STA DTEND TRACK BUFFER * ISZ VFYSY LOOKS VALID JMP VFYSY,I * P896 DEC 896 SPC 2 * * ONE OF THE ABOVE TESTS FAILED, THEREFORE NOT ALLOWING THE * TARGET FILE STRUCTURE TO BE SAVED * NOTFS LDA \TSUB LDB DEQT SLB,RSS LDA \TUNT ADA B2060 STA MES23+19 LDA P1 SET FO \CVAS STA \CLEN LDA \TCH LDB MS23A JSB \CVAS LDA P33 LDB MES23 "INFORMATION STORED ON PLATTER UNIT XX OF JSB \DSPL TARGET CHANNEL YY WILL BE DESTROYED" LDA P9 LDB MS23B JSB \DSPL * JSB OK? CHECK ANSWER * CLA STA \SAVE DON'T \SAVEFILES STA TYP6 " " PURGE TYPE 6'S JMP VFYSY,I * P33 DEC 33 * BF4 EQU BUFR+4 BF5 EQU BUFR+5 BF6 EQU BUFR+6 BF7 EQU BUFR+7 BF8 EQU BUFR+8 BF124 EQU BUFR+124 SKP * VERIFIES THE EXISTENCE OF A TRACK 0, SECTOR 0 BOOTSTRAP * IN HEADER RECORD #3 * * * RETURN: (P+1) NOT A BOOTSTRAP * (P+2) YES, ONE EXISTS * VT0S0 NOP * LDB BPTR ADB B155 COMPARE WORDS: LDA B,I CPA WD155 WORD 155 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD156 WORD 156 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD157 WORD 157 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD160 WORD 160 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD161 WORD 161 INB,RSS JMP VT0S0,I NO INB SKIP WORD 162 LDA B,I CPA WD163 WORD 163 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD164 WORD 164 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD165 WORD 165 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD166 WORD 166 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD167 WORD 167 INB,RSS JMP VT0S0,I NO LDA B,I CPA WD170 WORD 170 RSS JMP VT0S0,I NO ISZ VT0S0 FOUND ONE JMP VT0S0,I SO EXIT * SPC 2 WD155 OCT 000000 " WORD 155 WD156 OCT 102106 " WORD 156 WD157 OCT 107700 " WORD 157 WD160 OCT 006400 " WORD 160 WD161 OCT 102501 " WORD 161 WD163 OCT 101045 " WORD 163 WD164 OCT 002011 " WORD 164 WD165 OCT 026201 " WORD 165 WD166 OCT 102077 " WORD 166 WD167 OCT 026202 " WORD 167 WD170 OCT 106601 " WORD 170 * B155 OCT 155 SKP * * STDSK CONTROLS THE CALL TO CONFIGURE THE * DISK DRIVER (EITHER \DSK0 FOR 7900 OR \DSK5 * FOR 7905/7920), VIA A CALL TO \STD0 OR \STD5 * STDSK NOP LDA DEQT SLA JMP STDS1 JSB \STD5 CONFIGURE THE 7905/7920 DRIVER JMP STDSK,I * STDS1 JSB \STD0 CONFIGURE THE 7900 DRIVER JMP STDSK,I SKP * OK? QUERIES THE USER WITH: * "OK TO PROCEED? (Y OR N)" * AND TRANSFERS TO \XOUT ON A "N" RESPONSE, * DOING A SIMPLE RETURN ON A "Y" RESPONSE. * OK? NOP LDA P12 LDB MES20 JSB \DSPL JSB YE?NO DECIPHER ANSWER JMP OK?+1 INVALID REPLY JMP OK?+1 INVALID REPLY JMP \XOUT NO,TERMINATE SWTCH JMP OK?,I SPC 4 * YE?NO READS THE OPERATOR ANSWER ( Y OR N ) * RETURNS TO (P+1) IF INVALID ANSWER * (P+2) IF /E * (P+3) IF NO * (P+4) IF YES * YE?NO NOP JSB EXEC RETRIEVE ANSWER DEF *+5 DEF P1 DEF OPLU DEF BUFR DEF N2 SZB,RSS JMP YE?NO+1 TRY AGAIN FOR A RESPONSE * CLE CHECK HIGH HALF FIRST LDA BUFR CPA "/E" JMP EOUT YENO ALF,ALF AND B377 CPA "N" JMP NOUT CPA "Y" JMP YOUT * SEZ CHECK THE LOW HALF? JMP YE?NO,I ALREADY DID - NEITHER MATCHES LDA BUFR SWITCH EM ALF,ALF CCE JMP YENO CHECK THE LOW HALF * YOUT ISZ YE?NO NOUT ISZ YE?NO EOUT ISZ YE?NO JMP YE?NO,I * "N" OCT 116 "Y" OCT 131 "/E" ASC 1,/E SPC 4 * * READS TARGET RESPONSES, INCLUDING RE-ISSUING EXEC CALL * IN CASE OF TIME-OUTS. * TARGT NOP JSB EXEC GET REPONSE DEF *+5 DEF P1 DEF OPLU DEF BUFR DEF N8 SZB,RSS ANYTHING ENTERED? JMP TARGT+1 NO JMP TARGT,I YES, RETURN SKP * * CHECKS FOR A SPACE (PSEUDO CARRIAGE RETURN) FROM * THE OPERATOR. (B) IS THE LENGTH OF INPUT IN CHARACTERS * RETURN: (P+1) NOT A SPACE * (P+2) A SPACE (SO MAY USE DEFAULT VALUES) * DFLT NOP CPB P1 ONE CHARACTER RETURNED? RSS JMP DFLT,I NO, SO DON'T BOTHER CHECKING LDA BUFR AND B1774 CPA LBLNK ISZ DFLT GOT ONE JMP DFLT,I * LBLNK OCT 20000 SKP * * PARMP, PARAMETER PARSING ROUTINE (CONVERTED FROM NAMR,DLB) * PRODUCES A PARAMETER BUFFER 12 WORDS LONG * * THE TWELVE WORDS ARE DESCRIBED AS FOLLOWS: SPC 1 * WORD 1 = 0 IF TYPE = 0 (SEE BELOW) * = 16 BIT TWO'S COMPLEMENT NUMBER IF TYPE = 1 * = CHARS 1 & 2 IF TYPE = 3 * WORD 2 = 0 IF TYPE = 0 OR 1, CHARS 2 & 3 OR TRAILING SPACE(S) IF 3. * WORD 3 = SAME AS WORD 2. (TYPE 3 PARAM. IS LEFT JUSTIFIED) * WORD 4 = PARAMETER TYPE OF ALL 8 PARAMETERS IN 2 BIT PAIRS. * 0 = NULL PARAMETER * 1 = INTEGER NUMERIC PARAMETER * 2 = NOT IMPLEMENTED YET * 3 = LEFT JUSTIFIED 6 ASCII CHARACTER PARAMETER. * BITS FOR : P1 : P2 , P3 , P4 , P5 , P6 , P7 , P8 * 0,1 2,3 4,5 6,7 8,9 10,11 12,13 14,15 * WORD 5 = 1ST SUB-PARAMETER AND HAS CHARACTERISTICS OF WORD 1. * WORD 6 = 2ND SUB-PARAMETER DELIMETED BY COLONS AS IN WORD 5. * WORD 7 = 3RD SUB-PARAM. AS 5 & 6. (MAY BE 0, NUMBER OR 2 CHARS) * WORD 8 = 4TH " * WORD 9 = 5TH " * WORD 10 = 6TH " * WORD 11 = 7TH " * WORD 12 = 8TH " SPC 2 * * WHERE: * DNAME = TWELVE WORD DESTINATION PARAMETER BUFFER ADDRESS * INBUF = STARTING ADDRESS OF INPUT BUFFER CONTAINNING "NAMR". * PARML = CHARACTER LENGTH OF "INBUF". (MUST BE POSITIVE) * ISTRC = THE STARTING CHARACTER NUMBER IN "INBUF". THIS * PARAMETER WILL BE UPDATED FOR POSSIBLE NEXT CALL * TO "PARMP" AS THE START CHARACTER IN "INBUF". * CAUTION!!!! * ISTRC IS MODIFIED BY THIS ROUTINE, THEREFORE IT MUST * BE PASSED AS A VARIABLE (NOT A CONSTANT) FROM CALLER. * SKP * CHECK CALLERS PARAMETERS FOR CORRECTNESS SPC 1 INBUF NOP INPUT BUFFER ADDRESS PARML NOP TRANSMISSION LOG IN CHARACTERS ISTRC NOP CURRENT STARTING CHARACTER IN INBUF * PARMP NOP CCA SET TO NO COMMAS STA FRSTC CLA,INA STA ISTRC SET FIRST CHAR LDB \BUFA STB INBUF INPUT BUFFER ADDRESS LDB DNAME STB BPTR NOW CLEAR OUT DEST BUFFER LDA N12 GET DEST BUFFER LENGTH STA SUBCT SAVE IN TEMP CLA ZERO BUFFER STA B,I INB ISZ SUBCT JMP *-3 STA WORD4,I INITIALIZE THE TYPE WORD STA FILEW AND THE FILE FLAG LDA INBUF FORM STARTING CHARACTER CLE,ELA ADDRESS OF INPUT STA INBUF SAVE AS CHARACTER ADDRESS. LDB PARML GET CHARACTER LENGTH ADA B GET ADDRESS OF LAST+1 CHARACTER STA EOFBF AND SAVE FOR LATER USE LDA ISTRC GET START CHAR IN "INBUF" CMB,SSB,INB,SZB CHECK FOR 0 & NEG. CMA,INA,RSS >0, MAKE ISTRC NEG. + TEST FOR 0 CCE DI\DN'T PASS, SET FLAG CMA SUBTRACT 1 FROM ISTRC ADB A A-REG = ISTRC - PARML -1 CCA,SEZ TEST E FOR ERROR JMP PARMP,I RETURN A= -1 FOR ERROR LDA BPTR GET DESTINATION BUFFER LDB A ADB P3 SET ADDRESS OF TYPE WORD STB BPTR AND BUFFER POINTER LDB P3 GET LENGTH OF BUFFER (WORDS) JSB SCAN GET 1ST PARAMETER STA FILEW AND SAVE FILE TYPE(IF ANY) LDB FRSTC WAS A COMMA ENCOUNTERED SZB JMP MORE0 NO RAR,RAR YES, SKIP APPROPRIATE RAR,RAR POSITIONS IN WORD4,I STA WORD4,I FOR P1 AND P2 ISZ BPTR AND UPDATE DESTINATION ISZ BPTR POINTER JMP MORE1 MORE0 LDB N2 SET TO GET THE NEXT 2 PARAMETERS AFTER: STB SUBCT ISZ BPTR LDA BPTR CLB,INB JSB SCAN IOR WORD4,I SET BITS FOR SECURITY CODE (FIRST TIME THRU), RAR,RAR OR LABEL PARAMETER(SECOND TIME THRU) STA WORD4,I ISZ SUBCT RSS JMP MORE1 LDB FRSTC GOT A COMMA AFTER ONLY ONE COLON? SZB JMP MORE0+2 NO, A SECOND COLON ISZ BPTR UPDATE DESTINATION POINTER RAR,RAR AND TYPE BITS FOR NULL PARAMETER P2 STA WORD4,I MORE1 LDB N6 NOW SCAN FOR NEXT 6 SUB-PARAMS STB SUBCT MORE2 ISZ BPTR LDA BPTR GET DESTINATION BUFFER ADDRESS CLB,INB AND THE LENGTH JSB SCAN GET NEXT SUB PARAM IOR WORD4,I MERGE IN WITH PREV. RAR,RAR POSITION "PARAM TYPE BITS" STA WORD4,I AND PUT BACK ISZ SUBCT DONE WITH ALL EIGHT? JMP MORE2 NO, CONTINUE JMP PARMP,I SKP * SCAN ONE PARAMETER OR SUB-PARAM. FOR SETTING OF VARIOUS POINTERS * * * SOB , - 1 2 3 4 B , EOB * ^ ^ ^ ^ ^ ^ ^ ^ * INBFF ISTAR FSTCA FNMCA LNBCA LSTCA EOFBF INBFF+PARML SPC 1 * WHERE: * INBFF = START OF BUFFER (CHARACTER ADDRESS) * ISTAR = RELETIVE STARTING CHARACTER NUMBER IN "INBFF". * FSTCA = FIRST NON SPACE CHARACTER BEFORE DELIMETER. * FNMCA = FIRST NON "+" OR "-" AFTER "FSTCA". * LNBCA = LAST NON SPACE OR "B" CHARACTER BEFORE DELIMETER+1. * EOFBF = ENTERS AT "EOB" AND IS MOVED BACK TO 1ST AFTER "," DELIM. * INBFF+PARML = END OF BUFFER + 1 CHARACTER ADDRESS. SPC 1 EOFBF EQU PARML ADDRS. OF LAST CHAR+1,IN "INBFF" INBFF EQU INBUF ADDRS. OF "INPUT BUFFER TO SCAN" ISTAR EQU ISTRC ADDRS. OF START CHAR IN "INBFF" SPC 1 SCAN NOP A=DEST BUFFER ADDRS, B=LENGTH(WORDS) STA DESTA SAVE DESTINATION ADDRESS STB DESTL SAVE DEST. BUFFER LENGTH (WORDS) *- ADB A FORM LAST+1 ADDRESS *- STB FSTCA SAVE TEMP *- CLB ZERO OUT THE DESTINATION BUFFER *-ZMORE STB A,I *- INA *- CPA FSTCA DONE? *- CCB,RSS YES, CONTINUE *- JMP ZMORE NO, ZERO SOME MORE SPC 1 * SCAN UNTIL NON ASCII SPACE & SET "FSTCA" SPC 1 CCB GET MINUS ONE IN B-REG. ADB INBFF ADDRESS OF THE START ADB ISTAR CHARACTER AMORE STB FSTCA SAVE THE 1ST CHAR ADDRESS STB LSTCA AND LAST CHAR ADDRESS STB LNBCA SET LAST NON "B" CHAR. ADDRS. STB FNMCA SET 1ST NON "-" OR "+" CHAR ADDRS. CLA EXIT, A-REG = PARAMETER TYPE CPB EOFBF CHECK IF END OF BUFFER JMP SCAN,I NULL PARAMETER RETURN JSB GNC GET NEXT CHARACTER ISZ ISTAR ADVANCE CHARACTER POINTER CPA O40 IS IT EQUAL TO ASCII SPACE JMP AMORE YES, IGNORE IT STA FSTCR SET THE FIRST CHARACTER CPA PLUS CHECK IF 1ST CHAR RSS IS A PLUS OR MINUS CPA MINUS IF IT IS, BUMP ISZ FNMCA THE START CHAR FOR NUMB. CONV. SPC 1 * SCAN FOR DELIMETERS ":" & "," & "B" & END OF BUFFER. SKP SMORE CPA COLON COLON DELIMETER JMP CONVT NOW, GO CONVERT POSSIBLE # CPA COMMA CHECK IF COMMA JMP INCOM CHECK FOR FIRST COMMA CPA "B" CHECK THE TRAILING CHARACTER CCE,RSS FOR A "B". IF IT IS, STB LNBCA DON'T SET THE NON B CHAR ADDRS. LDA D10 SET THE BASE = 10 SEZ CHANGE TO B= 8, IF LAST CHAR LDA O10 IS EQUAL TO "B" STA BASE1 SET BASE OF NUMBER SYSTEM ADA O60 AND CALCULATE UPPER CMA,INA LIMIT CHECK WORD. STA BASE2 AND FOR LATER USE STB LSTCA AND IT'S ADDRESS+1 SIGNR CPB EOFBF REACHED END OF INBFF? JMP CONVT YES, SKIP NEXT CHAR JSB GNC GET NEXT CHARACTER ISZ ISTAR ADVANCE THE CHARACTER POINTER CPA O40 IGNORE TRAILING SPACES JMP SIGNR BY NOT ENCLUDING IN SCAN JMP SMORE GO CHECK IT SPC 2 INCOM ISZ FRSTC FIRST COMMA? NOP NO SPC 2 * CHECK IF ANY POSSIBLE ASCII NUMBERS TO CONVERT. SPC 1 CONVT CLA NOW TRY NUMBER CONVERSION LDB FSTCA GET 1ST CHAR ADDRESS CPB LSTCA IS IT = LAST CHAR ADDRESS? JMP SCAN,I YES, RETURN, NULL PARAMETER LDB FNMCA CHECK IF ANY DATA TO BE CPB LNBCA CONVERTED TO A JMP NOTNU NUMBER. SPC 1 * NOW CHECK IF NUMBER OR ASCII STRING & CONVERT TO NUMBER SPC 1 MMORE MPY BASE1 TRY CONVERSION STA DESTA,I ACCUMULATE NUMBER LDB FNMCA GET CURRENT CHAR ADDRESS SKIP1 JSB GNC GET THE NEXT CHARACTER STB FNMCA PUT BACK + 1 CPA O40 IGNORE ASCII SPACES JMP SKIP1 ADA BASE2 NO, CHECK IF ASCII NUMBER SEZ,CLE,RSS NUMBER MUST BE "0" TO "BASE" ADA BASE1 SEZ,CLE,RSS JMP NOTNU NOT NUMBER, MOVE BUFFER ADA DESTA,I ACCUMULATE THE NUMBER * SOC * CHECK OF OVERFLOWED? * CCA * YES, FORCE RESULT NEG. CPB LNBCA DONE? RSS YES, CONTINUE JMP MMORE SPC 1 * NOW CHECK SIGN OF NUMBER SPC 1 * SOC * TEST IF OVERFLOW? * RAL,CLE,ERA * CHANGE -1 TO 77777B IF OVERFLOW LDB FSTCR CHECK SIGN OF NUMBER CPB MINUS WAS IT NEG? * CMA,SEZ * YES. (*CHANGE TO CMA,INA) CMA,INA YES, MAKE NEG. * RSS * * INA * STA DESTA,I SAVE BACK IN DEST. BUFFER CLA,INA,RSS EXIT A=1 FOR PARAMETER TYPE EXIT3 LDA P3 EXIT A=3 FOR PARAMETER TYPE JMP SCAN,I RETURN DONE SPC 1 * NOT NUMBER, MOVE PARAM INTO DEST. BUFFER SPC 1 NOTNU LDB DESTA GET DEST BUFFER ADDRS CLE,ELB FORM CHARACTER ADDRESS STB FNMCA SAVE FOR NEAR USE ADB DESTL FORM LAST CHAR+1 ADDRESS ADB DESTL TIMES 2 FROM WORDS STB LNBCA SAVE FOR NEAR USE MSTOR LDB FSTCA GET FIRST CHAR. ADDRESS LDA O40 GET SPACE JUST IN CASE CPB LSTCA CHECK IF LAST CHARACTER ADDRESS JMP SKIP2 YES, SKIP GET CHAR FROM "INBFF" JSB GNC GET NEXT CHARACTER STB FSTCA SAVE NEXT CHAR ADDRESS SKIP2 LDB FNMCA GET DEST CHAR ADDRESS CPB LNBCA CHECK IF END OF DEST. BUFFER JMP EXIT3 YES, RETURN DONE ISZ FNMCA BUMP TO NEXT CHAR CLE,ERB CHANGE TO WORD ADDRESS SEZ,RSS POSITION ALF,SLA,ALF PACK XOR B,I AND XOR O40 STORE STA B,I BACK JMP MSTOR GO TRY NEXT CHAR SPC 1 FSTCR NOP FIRST NON SPACE CHARACTER IN BUFFER FSTCA NOP ADDRESS OF FSTCR LSTCA NOP ADDRESS OF LSTCR BASE1 NOP BASE OF NUMBER BASE2 NOP HI BASE TEST OF NUMBER FNMCA NOP CURRENT CHAR SCAN FOR CONVT LNBCA NOP DESTA NOP DESTINATION BUFFER ADDRESS DESTL NOP DEST. BUFFER LENGTH IN CHARACTERS SPC 1 GNC NOP GET NEXT CHARACTER CLE,ERB FORM WORD ADDRESS DESTROY E-REG LDA B,I GET WORD SEZ,RSS HI -OR- LO CHARACTER ALF,ALF AND O177 MASK DOWN TO 7 BITS ELB RESTORE B-REG INB BUMP THE B-REGISTER JMP GNC,I RETURN A= CHARACTER SPC 1 O177 OCT 177 "B" OCT 102 MINUS OCT 55 PLUS OCT 53 O60 OCT 60 O40 OCT 40 COMMA OCT 54 COLON OCT 72 FRSTC DEC -1 FIRST COMMA NOT IN YET O10 OCT 10 D10 DEC 10 SUBCT NOP HOLDS SUB-PARAM. COUNTER N12 DEC -12 SPC 4 WORD4 DEF *+5 ADDRESS FOR TYPE WORD DNAME DEF *+1 NAME BSS 3 FOR FILE NAME BSS 1 TYPE WORD BSS 8 PARAMETERS 1-8 ISECU EQU NAME+4 ICR EQU NAME+5 PARM3 EQU NAME+6 PARM4 EQU NAME+7 PARM5 EQU NAME+8 PARM6 EQU NAME+9 PARM7 EQU NAME+10 PARM8 EQU NAME+11 APARM EQU NAME FILEW NOP SKP * PYN - CHECKS FOR A "Y" OR "N" TURN-ON PARAMTER * A-REG = THE PARAMETER * B-REG = PRESENT STATE OF WORD 4,I * * RETURN:(P+1) NEITHER, OR NOT SPECIFIED * (P+2) GOT ONE, A-REG = 0 FOR NO, =1 FOR YES * PYN NOP STA TEMP1 SAVE THE PARAMETER RBR,RBR NEXT WORD4 POSITION SLB,RSS IS THIS PARAMETER SPECIFIED? JMP PYN,I NO * LDA B AND P3 CPA P3 ASCII? RSS JMP PYN,I NO STB TEMP2 SAVE CCB LDA TEMP1 ALF,ALF SHIFT TO LOW AND B377 CPA "N" CLB CPA "Y" CLB,INB SSB,RSS ISZ PYN MATCH SSB,RSS ISZ BATCH ONE MORE FOUND NOP LDA B RESTORE LDB TEMP2 JMP PYN,I SPC 3 B400 OCT 400 N72 DEC -72 P384 DEC 384 "!!" ASC 1,!! CLER2 OCT 177773 P192 DEC 192 P160 DEC 160 SKP * * * MAINLINE CODE FOR SWTCH * * THE PRECEDING CODE AND THE CODE UP TO BFULL IS OVERLAID * WHEN THE TRANSFER IS BEGUN * SWTCH NOP STB APARM JSB RMPAR DEF *+2 DEF APARM * * * SET UP THE OPERATOR'S LU * LDA APARM GET PARAMETER 1 SZA,RSS SPECIFIED? ISZ APARM NO,SO DEFAULT TO LU 1 AND B1774 SZA NUMERIC? JMP *+3 NO,ASCII - USE DEFAULT LU 1 LDA APARM STA OPLU SET THE LU * LDA OPLU SET ECHO BIT IN IOR B400 OPERATOR LU WORD. STA OPLU * LDA SYSTY GET I-O CHANNEL ADA P3 OF SYSTEM CONSOLE LDA A,I AND B77 STA HTTY * JSB \BLIN LDA P22 DISPLAY WARNING MESSAGES. LDB MES1 JSB \DSPL LDA P32 LDB MES2 JSB \DSPL * * * PARSE THE TURN-ON PARAMETERS * JSB GETST GET THE PARAMETER STRING DEF *+4 DEF BUFR DEF P48 DEF ERR * PARS SZB,RSS ANY THERE? JMP GTNAM NO RBL CONVERT TO CHARACTERS STB PARML SAVE # CHARACTERS JSB PARMP GO PARSE THEM CPA N1 JMP GTNAM COUL\DN'T * * RETRIEVE CHANNEL PARAMETER * LDB WORD4,I GET THE TYPE WORD INTO B SZB,RSS LDB FILEW FILE NAME ONLY SPECIFIED? SZB,RSS JMP GTNAM NO PARAMTERS BLF,BLF SWAP HIGH AND LOW BLF SLB,RSS CHECK BITS 5-4 JMP CP2 NOT SPECIFIED LDA B AND P3 CHECK TYPE CPA P1 RSS JMP CP2 NOT AN INTEGER LDA PARM3 STA \TCH GOT ONE - CHECK IT'S RANGE LATER ISZ BATCH * * RETRIEVE THE SUBCHANNEL/UNIT CP2 RBR,RBR GET BITS 7-6 TO LOW SLB,RSS JMP CP3 NOT SPECIFIED LDA B AND P3 CPA P1 MUST BE AN INTEGER RSS JMP CP3 NOT ONE LDA PARM4 STA \TSUB SAVE IT ISZ BATCH * * RETRIEVE PARAMETERS 5, 6, 7, AND 8 CP3 LDA PARM5 JSB PYN CHECK BITS 9-8 RSS NO GOOD STA AUTO LDA PARM6 JSB PYN CHECK BITS 11-10 RSS NO GOOD STA \SAVE LDA PARM7 JSB PYN CHECK BITS 13-12 RSS NO GOOD STA TYP6 LDA PARM8 JSB PYN CHECK BITS 15-14 RSS NO GOOD STA SUBI * LDA FILEW GET FILE TYPE CPA P3 ASCII FILE NAME? ISZ BATCH YES, NOP * CPA P3 FILE NAME? JMP VERIF YES, GO VERIFY IT GTNAM JSB \BLIN NO. LDA P14 LDB MES3 JSB \DSPL ASK FOR FILE NAME, SECUR, LABEL. * READN JSB EXEC READ INPUT. DEF *+5 DEF P1 DEF OPLU DEF BUFR DEF N72 * SZB,RSS JMP READN TRY AGAIN FOR RESPONSE STB PARML POSITIVE # CHARACTERS. * LDA BUFR WANT TO EXIT? CPA "!!" CHECK FOR !! JMP \XOUT YES * JSB PARMP PARSE THE STRING. SSA JMP GTNAM TRY AGAIN * VERIF JSB OPEN OPEN THE FILE. DEF *+7 DEF DCB DEF ERR DEF NAME DEF P0 DEF ISECU DEF ICR * SSA,RSS OPEN ERROR? JMP VERF1 NO. * ERRV LDA P9 YES. DISPLAY MSG AND RE-TRY. LDB MES4 JSB \DSPL JSB CLOSE DEF *+3 DEF DCB DEF ERR JMP GTNAM * VERF1 CPA P1 TYPE 1 FILE? JMP READH JMP ERRV NO * READH JSB READF READ FIRST THREE RECORDS. DEF *+5 DEF DCB DEF ERR DEF BUFR DEF P384 * SSA READ ERROR? JMP ERRV YES. * LDB \BUFA DOES THIRD RECORD LOOK LIKE ADB P256 STB BPTR A TRACK 0, SECTOR 0 BOOTSTRAP? JSB VT0S0 VERIFY IT JMP ERRV NOT ONE * * LDA DCB+5 SAVE FILE SIZE. ARS ADA N2 LESS TWO FOR HEADER RECORDS STA SIZE # 128-WORD SECTORS. * LDA DCB+9 SAVE DCB CONTENTS STA TEMP1 JSB CLOSE BEFORE CLOSING THE DEF *+3 ABSOLUTE OUTPUT FILE DEF DCB VIA FMP DEF ERR LDA TEMP1 NOW FUDGE THE DCB IN ORDER STA DCB+9 KEEP IT OPEN CLA CLEAR THE IN-BUFFER FLAGS STA DCB+13 (OLD DCB FORMAT) LDA DCB+7 AND CLER2 =177773 STA DCB+7 (NEW DCB FORMAT) SKP * * PROCESS HEADER RECORD * LDA BUFR+186 GET NEW SYSTEM INFO CPA N1 CHECK TYPE RSS JMP ERRV NOT AN RTE-IV+ SYSTEM LDA BUFR+187 STA \DSUB DESTINATION SUBCHANNEL LDA BUFR+189 STA #EQTS # EQT'S IN SYSTEM LDA BUFR+190 STA DPI DESTINATION PRIVILEGED INTERRUPT LDA BUFR+191 STA DTBG " TBG CHANNEL LDA BUFR+192 STA B AND SAVE AND B377 ISOLATE STA DTTY " TTY CHANNEL LDA B ALSO GET THE ALF,ALF AND B377 NUMBER OF STA #SUBC DEFINED SUBCHANNELS LDB \BUFA ADB BUFR+188 ADB P192 LDA B,I ALF,ALF AND B377 STA \DCH " SYSTEM DISK CHANNEL LDA B,I AND B377 STA DEQT " DISK TYPE(EQT) * LDA \BUFA MOVE THE TRACK MAP TABLE IMAGE LDB \TMT TO THE PERMANENT STORAGE AREA MVW P160 FROM HEADER RECORDS 1 AND 2 * * ROLLS IN THE CORRECT DISK DRIVER SEGMENT, DEPENDENT * UPON THE DESTINATION DISK TYPE * LDB SWAP5 ADDRESS OF 7905/7920 SEGMENT'S NAME LDA DEQT SLA LDB SWAP0 " 7900 " " STB SWAPA JSB EXEC ROLL IN THE SEGMENT - IT WILL DEF *+3 COME BACK TO \SWTM AFTER DEF P8 EXECUTING THE SEGMENT'S SWAPA NOP FRONT END CODE * * * DISPLAY DESTINATION I/O CONFIGURATION * \SWTM JSB \BLIN LDB MES5 LDA P15 JSB \DSPL "NEW SYSTEM I/O CONFIGURATION" JSB \BLIN * LDB P1 SET FOR \CVAS STB \CLEN LDA DPI SZA,RSS DEFINED? JMP OUT1 NO LDB MES6A JSB \CVAS LDA P18 LDB MES6 JSB \DSPL "SELECT CODE XX PRIVILEGED INTERRUPT" * OUT1 LDA DTBG LDB MES7A JSB \CVAS LDA P9 LDB MES7 JSB \DSPL "SELECT CODE XX TBG" * LDA #EQTS GET REMAINING EQT'S CMA,INA STA TEMP2 NEG. # EQT'S ST0 LDA #EQTS CMA,INA STA TEMP1 NEG. CURRENT EQT # LDB \BUFA ADB P192 STB TEMP4 POSITION IN EQT'S, LESS 1 * ST1 ISZ TEMP4 LDA TEMP4,I GET ENTRY ALF,ALF AND B377 AND ITS CHANNEL CPA CURCH NEXT CHANNEL? RSS JMP ST2 NOPE LDB MES8A YES,DISPLAY IT JSB \CVAS LDA TEMP4,I AND B377 LDB MES8B JSB \CVAS LDA P11 LDB MES8 JSB \DSPL "SELECT CODE XX TYPE YY" ISZ TEMP2 INCREMENT # FOUND RSS JMP ST4 ALL DONE * ST2 ISZ TEMP1 END OF EQT LIST? JMP ST1 NO ISZ CURCH CHANNEL NOT IN SYSTEM JMP ST0 SEARCH FOR NEXT * * * DISPLAY DESTINATION SYSTEM SUBCHANNEL DEFINITION * ST4 JSB \BLIN LDA \DCH GET DESTINATION SELECT CODE # LDB MES9A JSB \CVAS LDA \DSUB LDB MES9B JSB \CVAS LDA P24 LDB MES9 JSB \DSPL "NEW SYSTEM(LU 2) SELECT CODE=XX SUBCHANNEL=XX" * JSB \BLIN LDA DEQT SLA,RSS JMP D05 7905/7920 DESTINATION DISK * LDA \DSUB ADA B2060 ALF,ALF STA MES10+5 STORE PLATTER # IN MESSAGE LDA \DFTR CMA,INA LDB P2 SET FOR \CVAS STB \CLEN LDB MS10C " FIRST TRACK # " JSB \CVAS LDA \DNTR CMA,INA LDB MS10D " # TRACKS " JSB \CVAS LDA P21 LDB MES10 " LOGICAL SUBCHANNEL XX FIRST TRACK XXX JSB \DSPL # TRACKS XXX" JMP GETEM * D05 LDA P3 7905/7920 SUBCHANNEL DEFINITION STA \CLEN SET MAX CONVERSION LENGTH (WORDS) LDA \DSHD CMA,INA LDB MS41A JSB \CVAS STORE HEAD # IN MESSAGE LDA \DNTR CMA,INA LDB MS40A " # TRACKS " JSB \CVAS LDA \DUNT CMA,INA LDB MS42A JSB \CVAS " UNIT/ADD " LDA \DNSU CMA,INA LDB MS41B JSB \CVAS " # SURFACES " LDA \DFTR CMA,INA LDB MS40B " FIRST CYL " JSB \CVAS LDA \DNSP CMA,INA LDB MS42B JSB \CVAS " # SPARES " LDA \D#ST CMA,INA LDB MS43B JSB \CVAS " #SECTORS/TRACK " * LDA P17 LDB MES40 " #TRACKS NNNNN FIRST CYL CCCCC " JSB \DSPL LDA P17 LDB MES41 " HEAD # HHHHH #SURFACES SSSSS " JSB \DSPL LDA P17 LDB MES42 " UNIT/ADD UUUUU #SPARES PPPPP " JSB \DSPL LDA P17 LDB MES43 " #SECTORS TRACK KKKKK " JSB \DSPL * GETEM LDA SIZE GET SYSTEM LENGTH IN BLOCKS RAL CONVERT TO 64-WORD SECTORS CLB DIV \D#ST AND CONVERT TO # TRACKS SZB INA BUMP FOR PARTIAL TRACKS ADA P9 ADD THE 9 TRACK MINIMUM FREE TRACKS STA \STRK AND SAVE LDA \D#WT GET #WORDS TRACK AND CMA,INA COMPLEMENT STA ND#WT FOR DMA TRANSFER LENGTHS SKP * * CHECK TARGET CHANNEL * JSB \BLIN LDA \TCH GET TARGET CHANNEL SSA,RSS SPECIFIED? JMP CHCH YES, CHECK FOR VALIDITY ASKCH LDA P25 LDB MES12 JSB \DSPL "TARGET SELECT CODE FOR NEW SYSTEM?" * JSB TARGT READ ANSWER JSB DFLT CR? JMP ASK1 NO LDA \DCH YES, DEFAULT TARGET CHANNEL STA \TCH TO DESTINATION CHANNEL JMP GTSCH * ASK1 LDA P2 JSB GETOC CONVERT ANSWER JMP ASKCH ERROR-TRY AGAIN STA \TCH * CHCH ADA N8 CHECK FOR CORRECT SSA RANGE (10-77 OCTAL) JMP ASKCH < 10, TRY AGAIN ADA N56 SSA,RSS JMP ASKCH > 77, TRY AGAIN * * CONFIGURE THE DISK DRIVER DISKD TO THE TARGET CHANNEL * GTSCH JSB STDSK * * CHECK TARGET SUBCHANNEL OR UNIT * LDA \TSUB GET THE TARGET SUBCHANNEL SSA,RSS SPECIFIED? JMP CHSB YES, CHECK VALIDITY ASKSB JSB \BLIN LDA P25 LDB MES13 JSB \DSPL "TARGET PLATTER/UNIT FOR NEW SYSTEM?" * JSB TARGT READ ANSWER JSB DFLT CR? JMP ASK3 NO LDA DEQT SLA,RSS DEFAULT TO EITHER 7900 SUBCHANNEL OR 7905/7920 UNIT JMP ASK2 LDA \DSUB DEFAULT TARGET SUBCHANNEL TO DESTINATION SUBCHANNEL STA \TSUB JMP OKAY * ASK2 LDA \DUNT STA \TUNT DEFAULT TARGET UNIT TO DESTINATION UNIT JMP OKAY * ASK3 LDA P1 JSB GETOC CONVERT ANSWER TO OCTAL JMP ASKSB ERROR, TRY AGAIN STA \TSUB **TEMP** * CHSB ADA N8 SSA,RSS JMP ASKSB > 7, TRY AGAIN LDB \TSUB LDA DEQT FOR THE 7905/7920, SAVE THE ANSWER AS THE UNIT SLA,RSS STB \TUNT JMP OKAY SKP *CONSTANTS B37 OCT 37 B77 OCT 77 N56 DEC -56 P11 DEC 11 P18 DEC 18 P15 DEC 15 P21 DEC 21 P19 DEC 19 P23 DEC 23 P24 DEC 24 P25 DEC 25 P31 DEC 31 P256 DEC 256 * IOFF NOP IRB NOP IREC NOP JSEC NOP * SPC 2 * HOST => CURRENT SYSTEM UNDER WHICH SWTCH IS OPERATING * HSBCH NOP HOST SYSTEM DISK SUBCHANNEL HCH NOP " " " CHANNEL HEQT NOP " " " TYPE HUNIT NOP " " " UNIT (7905/6/20) HNHD NOP " " SUBCHANNEL STARTING HEAD (7905/6/20) HNSU NOP " " " # SURFACES HFTR NOP " " " STARTING TRACK/CYLINDER H#ST DEC 96 " " " SECTORS/TRACK (DEFAULT) HTTY NOP " " TTY CHANNEL SKP * * WE PASSED THE FIRST TEST!!! * * IF THE HOST AND TARGET SYSTEM'S ARE BOTH 7905/7920'S THEN WE'RE * GOING TO SEARCH $TB32 NOW BEFORE THE USER HAS AN OPPOR\TUNTY * TO INSERT A DIFFERENT SYSTEM DISC. THE HOST SUBCHANNEL DEFINITION * MUST BE DETERMINED IN ORDER TO CHECK FOR AN OVERLAY OF THE HOST * SYSTEM. * OKAY JSB EXEC GET I/O CHANNEL AND EQT TYPE OF LU 2 DEF *+6 DEF P13 DEF P2 DEF IEQT5 DEF IEQT4 DEF HSBCH * LDA IEQT4 GET CHANNEL AND B77 STA HCH STA B LDA IEQT5 GET HOST EQT TYPE ALF,ALF AND B77 STA HEQT CPA DEQT SLA SAME DISC TYPE - SEE WHICH JMP OKAYY 7900, NO PROBLEM CUZ CAN USE SUBCHANNEL * CPB \TCH SAME CHANNEL? RSS YES JMP OKAYY NO PROBLEM HERE * * GET THE TRACK MAP TABLE CONTAINING THE * HOST SYSTEM SUBCHANNEL DEFINITION IN BUFR. * IF THE HOST IS AN RTE-IV+ SYSTEM THEN A * SIMPLE EXEC CALL WILL RETURN THE TABLE. * OTHERWISE, SEARCH THE RESIDENT LIBRARY * ENTRY POINT LIST FOR $TB32. * LDB $BMON IF A NEW SYSTEM THEN SLB,RSS A CALL TO THE DRIVER CAN BE DONE JMP OLDSY ELSE SCAN LEP FOR $TB32 ADDRESS * JSB EXEC DEF *+7 DEF P1 DEF TMTSF DEF BUFR DEF P161 DEF P0 DEF P5 * * * GET HOST SUBCHANNEL DEFINITION FROM NEW FORMAT * LDA HSBCH MPY P5 LDB \BUFA RETRIEVE FROM TABLE: INB ADB A LDA B,I STA H#ST HOST SUBCHANNEL'S #SECTORS/TRACK INB LDA B,I STA HFTR " " FIRST CYLINDER INB LDA B,I AND B17 STA HUNIT " " UNIT# LDA B,I ALF,RAL RAL AND B77 STA HNSU " " # SURFACES LDA B,I ALF,ALF ALF AND B77  STA HNHD " " STARTING HEAD # JMP OKAYY SKP OLDSY LDA #LEP GET # OF LIBRARY ENTRY POINTS MPY P4 4 WORDS PER ENTRY STA LEPL SAVE SIZE OF L.E.P. LIST * LDA ALEP GET DISK ADDRESS OF LEP LIST LDB A ALF,ALF RAL AND B777 STA LTRK SAVE THE TRACK LDA B AND B177 F$T3 STA LSEC AND SECTOR ADA N89 DETERMINE IF THE SECTOR RESULTS IN SSA LESS THAN 512 WORDS LEFT ON TRACK JMP F$T1 <89 INA SEE HOW MANY SECTORS LESS MPY P64 CMA,INA AND SUBTRACT FROM ADA P512 512 MAX STA LLEN LENGTH OF READ JMP F$T0 F$T1 LDA LEPL JSB GTLEN GET READ LENGTH F$T0 JSB READD READ IT * CLB LDA LLEN DIV P4 GET THE # OF ENTRIES READ IN CMA,INA NEGATE STA LCNT LOOP COUNTER LDB \BUFA F$T2 STB BPTR * LDA $T CPA B,I A "$T"? INB,RSS JMP NOTIT NO LDA B3 CPA B,I A "B3"? INB,RSS JMP NOTIT NO LDA .2 XOR B,I AND B1774 A "2 "? SZA,RSS A MATCH ON $TB32? JMP F$T7 YES!! * NOTIT ISZ LCNT DONE WITH CURRENT BUFFER? RSS JMP F$T4 YES LDB BPTR ADB P4 JMP F$T2 * F$T4 LDA LLEN CMA,INA ADA LEPL STA LEPL NEW # LEFT * LDB LSEC DETERMINE IF TRACK CROSSING ADB N89 IF >= 88 THEN THERE WILL BE INB SSB JMP F$T5 NOPE * ISZ LTRK YES, INCREMENT TO NEXT TRACK CLB STB LSEC SET NEXT SECTOR TO 0 JMP F$T1 SET LENGTH OF READ * F$T5 LDA LSEC INCREMENT TO NEXT STARTING ADA P8 SECTOR JMP F$T3 SET LENGTH OF READ * F$T7 INB LDA B,I GET THE MEMORY ADDRESS LDB A,I CHECK FOR USER-DEFINED TMT INDICATED SSB,RSS IN WORD 1 - IF POSITIVE, INA THERE'S AN EXTRA WORD LDB \BUFA STB BPTR BUFFER POINTER MVW P98 STORE ENTIRE TMT IN BUFR * * OBTAIN HOST SUBCHANNEL DEFINITION FROM OLD $TB32 * LDA HSBCH MPY P3 LDB BPTR RETRIEVE FROM TABLE: INB ADB A LDA B,I STA HFTR HOST SUBCHANNEL'S FIRST CYLINDER # INB LDA B,I AND B17 STA HUNIT " " UNIT # LDA B,I ALF AND B17 STA HNSU " " # SURFACES LDA B,I ALF,ALF AND B17 STA HNHD " " STARTING HEAD # SKP * * * OPERATOR GIVEN OPPOR\TUNTY TO INSERT CORRECT CARTRIDGE * OKAYY LDA BATCH CMA,SSA,INA,SZA SKIP IF <= 0 JMP SAVE? NOT SO IN BATCH MODE JSB \BLIN CRLF LDA P23 LDB MES16 JSB \DSPL LDA P21 "NOW IS THE TIME TO INSERT CORRECT LDB MES17 CARTRIDGE IN TARGER SUBCHANNEL/UNIT" JSB \DSPL * JSB TARGT GET ANSWER JSB DFLT CHECK FOR " "CR JMP CRLF TRY AGAIN FOR ANSWER * * CHECK IF FILE STRUCTURE AT TARGET IS TO BE SAVED * SAVE? LDA \SAVE WAS IT SPECIFIED AT TURN-ON TIME? SSA,RSS JMP SAV?? YES * SAV1 LDA P16 NO, ASK THEM LDB MES18 JSB \DSPL "SAVE FILES AT TARGET? (Y OR N) * JSB YE?NO READ ANSWER JMP SAV1 INVALID REPLY JMP SAV1 INVALID REPLY CLA,RSS NO CLA,INA YES, SAVE IT STA \SAVE * SAV?? CPA P0 DO WE SAVE THE FILES ? JMP SUBI? NOPE * * CHECK THE SYSTEM AT THE TARGET * JSB VFYSY VERIFY THE SYSTEM OUT THERE! JMP SUBI? CAN'T SAVE THE FILES * LDA \STRK SIZE OF NEW SYSTEM (INCLUDING 9 TRACKS LDB \FFMP OF AVAILABLE TRACK SPACE) MUST BE CMA,INA < FIRST FMP TRACK OF TARGET ADA B SUBCHANNEL SSA,RSS JMP SAVE6 NO PROBLEM * LDA P19 WARN USER LDB MES19 JSB \DSPL "NEW SYSTEM WILL DESTROY SOME FMP FILES" JSB OK? "OK TO PROCEED?" * CCA SET TO PROCEED, BUT SAVE AS MANY FILES STA \SAVE AS POSSIBLE * * * CHECK IF TYPE 6 FILES ARE TO BE SAVED * SAVE6 LDA TYP6 SPECIFIED AT TURN-ON TIME? SSA,RSS JMP SUBI? YES * SAV6A LDA P15 NO, ASK THEM LDB MES22 JSB \DSPL "PURGE TYPE 6 FILES? (Y OR N)" * JSB YE?NO DECIPHER ANSWER JMP SAV6A INVALID REPLY * * DETERMINE IF ANY ADDITIONAL SUBCHANNELS ARE TO BE INITIALIZED * JMP SAV6A /E AN INVALID REPLY CLA,RSS NO CLA,INA YES STA TYP6 SKP SUBI? LDA SUBI SPECIFIED AT TURN-ON TIME? SZA,RSS JMP AUTO? ONLY THAT NOT WANTED CCB ADB #SUBC GET NUMBER OF SUBCHANNELS SZB,RSS ASIDE FROM SYSTEM SUBCHANNEL JMP AUTO?-1 NONE, SO SKIP QUERY * SSA,RSS YES, OR NOT-YET-SPECIFIED? JMP SUBBR YES, SO DON'T ASK AGAIN * SUBIA LDA P18 LDB MES34 JSB \DSPL "INITIALIZE SUBCHANNELS? (Y OR N)" JSB YE?NO DECIPHER ANSWER JMP SUBIA INVALID REPLY JMP SUBIA INVALID REPLY CLA,RSS NO CLA,INA YES STA SUBI SAVE SZA,RSS IF NO, THEN MOVE ON TO JMP AUTO? AUTO BOOT QUERY * SUBBR LDA "L" CHANGE MESSAGE STA MES34+11 LDA DEQT GET DISC TYPE SLA,RSS BRANCH TO REQUEST JMP SUBI5 7905/6/20 INITIALIZATIONS * * REQUEST INITIALIZATIONS OF ADDITIONAL 7900 SUBCHANNELS * CCB,RSS NXSUB LDB SUBIA GET LAST SUBCHANNEL DISPLAYED INB CPB \DSUB JMP NXSUB+1 CPB #SUBC JMP AUTO? DONE ASKING * STB SUBIA SAVE SUBCHANNEL # LDA \TMT POSITION INTO TRACK MAP TABLE ADA P8 BUFFER TO GET # OF ADA B TRACKS DEFINED FOR THIS SUBCHANNEL LDA A,I SZA,RSS ANY? JMP NXSUB+1 NO,TRY NEXT SUBCH ADB B2060 CONVERT TO ASCII STB MES34+12 AND STORE IN MESSAGE NXA LDA P18 LDB MES34 NOW ASK? JSB \DSPL "INITIALIZE SUBCHANNEL XX?" JSB YE?NO DECIPHER ANSWER JMP NXA INVALID REPLY JMP AUTO? /E SO EXIT JMP NXSUB NO INIT * ASKTS LDA P15 LDB MES35 ASK 'EM JSB \DSPL "TARGET PLATTER?" JSB TARGT GET RESPONSE JSB DFLT CR? JMP NASK NO LDA SUBIA DEFAULT IMPLIED, SO GO TO TMT JMP CSST GO COMPARE WITH SYS SUBCH TARGET * * GET TARGET PLATTER FOR 7900 SUBCHANNEL * NASK CLA,INA GET TARGET PLATTER JSB GETOC RESPONSE JMP ASKTS INVALID REPLY CSST CPA \TSUB SAME AS SYSTEM SUBCH'S? JMP ASKTS YES - NOT ALLOWED * LDB SUBIA GET THIS SUBCHANNEL # ADB \TMT AND OFFSET INTO THE TMT BUFFER ADB P16 PAST THE DEF'NS (16 WORDS) STA B,I SAVE TARGET PLATTER FOR THIS SUBCHANNEL ADB N16 BACK UP TO FIRST TRACK ENTRY LDA B,I AND MARK THE SUBCHANNEL IOR MSIGN TO ENABLE INITIALIZATION STA B,I JMP NXSUB NOW TRY THE NEXT ONE SKP * * REQUEST INITIALIZATIONS OF ADDITIONAL 7905/6/20 SUBCHANNELS * SUBI5 LDB MS36B SET MESSAGE BUFFER ADDRESS STB TEMP2 FOR STORAGE OF SUBCH #'S CLA CLEAR HEADER STA HDFLG FLAG INA SET ASCII CONVERSION LENGTH STA \CLEN TO 1 WORD - FOR \CVAS CLB STB TEMP1 FIRST SUBCHANNEL # * * DISPLAY THOSE SUBCHANNELS ON SAME UNIT AS SYSTEM SUBCHANNEL * SUB0 CPB \DSUB SAME AS SYS SUBCH? JMP SUB1 YES, SO NEEDED ASK RBL,RBL POSITION INTO TMT FOR ADB TEMP1 ADB \TMT THIS SUBCHANNEL'S ENTRY ADB P2 LDA B,I AND GET WORD 2 OF ENTRY AND B17 ISOLATE THE UNIT # CPA \DUNT SAME UNIT AS FOR SYS SUBCH? RSS YES JMP SUB1 NO - MOVE ON TO NEXT LDA TEMP1 GET SUB # CMA,INA (SIGNAL DECIMAL CONVERSION) LDB TEMP2 AND BUFFER ADDRESS JSB \CVAS CONVERT TO ASCII AND PUT IN MESSAGE LDA COMBL GET A COMMA AND PLACE ISZ TEMP2 AFTER THE # STA TEMP2,I IN THE MESSAGE ISZ TEMP2 NEXT BUFFER POSITION ISZ HDFLG INDICATE ONE 'FOUND' FOR THIS UNIT * SUB1 ISZ TEMP1 BUMP TO NEXT SUBCH # LDB TEMP1 CPB #SUBC LAST SUBCH DONE? RSS YES JMP SUB0 * LDA HDFLG ANY FOUND MATCHING \DUNT? SZA,RSS JMP OTHER NO * LDB \TUNT STORE THE UNIT # IN THE MESSAGE ADB B2060 STB MES36+7 * RAL SET # OF WORDS TO PRINT ADA P16 LDB MES36 GET BUFFER ADDRESS JSB \DSPL "TARGET UNIT XX FOR SUBCHANNELS ..." * LDA HDFLG SET LOOP COUNTER RAL CLEAR 2 WORDS PER SUBCH IN CMA,INA THE BUFFER ("XX, " FOR EACH) STA HDFLG LDB MS36B GET BUFFER ADDRESS LDA BLNK AND 2 ASCII BLANKS STA B,I STORE IN BUFFER INB ISZ HDFLG BUMP BUFFER COUNTER (0 WHEN DONE) JMP *-3 * * ASK IF SUBCHANNELS ON \TUNT ARE TO BE INITIALIZED * CCA STA TEMP2 ALLOW ALL MATCHES IN INIT? LDA \DUNT GET UNIT FOR TMT MATCHING LDB \TUNT AND PASS TARGET UNIT FOR THOSE SUBCH'S JSB INIT? * * DISPLAY SUBCHANNELS MATCHING EACH DEFINED UNIT * CLA INITIALIZE THE UNIT # STA TEMP5 OTHER LDB MS37B AND THE BUFFER POINTER STB TEMP2 CLB STB TEMP1 CLEAR THE SUBCH # CPA \DUNT SAME UNIT AS SYSTEM SUBCH? JMP NXUNT CAN'T ALLOW (ALREADY DONE) * OT1 RBL,RBL POSITION TO SUBCH'S ENTRY ADB TEMP1 ADB \TMT IN THE TMT BUFFER ADB P2 MOVE TO WORD 2 LDA B,I AND GET IT AND B17 CPA TEMP5 IS IT THE UNIT WE WANT? RSS YUP JMP NXTSB NO, TRY THE NEXT * INB POSITION TO WORD 3 LDA B,I AND GET THE # OF TRACKS SZA,RSS JMP NXTSB SKIP IF NO TRACKS ASSIGNED SSA OR IF ALREADY SPECIFIED JMP NXTSB * LDA TEMP1 GET SUBCH # CMA,INA (SIGNAL DECIMAL CONVERSION) LDB TEMP2 AND BUFFER POSITION JSB \CVAS STORE IN MESSGE LDA COMBL NOW PLACE A COMMA ISZ TEMP2 AFTER THE NAME STA TEMP2,I ISZ TEMP2 ISZ HDFLG BUMP COUNTER * NXTSB ISZ TEMP1 BUMP TO NEXT SUBCHANNEL LDB TEMP1 RETRIEVE IT CPB #SUBC AND SEE IF DONE RSS YES JMP OT1 NO, CONTINUE SCANNING * LDA HDFLG ANY FOUND? SZA,RSS JMP NXUNT NO, TRY NEXT UNIT LDB TEMP5 STORE UNIT IN MESSAGE ADB B2060 STB MES37+7 RAL DETERMINE LENGTH OF MESSAGE ADA P16 BY # OF SUBCH'S STORED IN IT LDB MES37 DISPLAY JSB \DSPL "DESTINATION UNIT XX FOR SUBCHANNELS ..." * LDA HDFLG CLEAR BUFFER CONTAINING RAL CLEAR 2 WORDS PER SUBCH CMA,INA SUBCH #'S STA HDFLG LDB MS37B BUFFER ADDR LDA BLNK BLANKS STA B,I CLEAR INB ISZ HDFLG BUMP JMP *-3 CONTINUE * * ASK FOR TARGET UNIT FOR THIS SET OF SUBCHANNELS * ASKTU LDA P14 ASK FOR TARGET UNIT LDB MES38 JSB \DSPL "TARGET UNIT? (XX OR " "CR, OR /E) JSB YE?NO GET RESPONSE JMP TDFLT CHECK DEFAULT JMP NXUNT /E JMP ASKTU NO, TRY A NUMBER JMP ASKTU YES, NEED A NUMBER TDFLT JSB DFLT CR? JMP GETU NO LDA TEMP5 GET DEFAULTED UNIT JMP CSSTU AND GO CHECK AGAINST TARGET SYS UNIT * GETU CLA,INA RETRIEVE TARGET UNIT # JSB GETOC FROM RESPONSE JMP ASKTU INVALID REPLY - ASK AGAIN CSSTU CPA \TUNT SAME AS SYS SUBCH UNIT? JMP ASKTU YES - CAN'T ALLOW * * REQUEST INITIALIZATION OF EACH SUBCHANNEL OF CURRENT SET * LDB A GET TARGET UNIT # LDA \DUNT SET FOR DISALLOWING STA TEMP2 \DUNIT REPONSES LDA TEMP5 GET DEST UNIT # JSB INIT? AND ASK FOR INITIALIZATIONS * NXUNT ISZ TEMP5 BUMP UNIT COUNTER LDA TEMP5 RETRIEVE IT CPA P8 AND CHECK IF DONE JMP AUTO? YES JMP OTHER NO - START SUBCH SCAN AGAIN SKP * * SCAN TRACK MAP TABLE (IN BUFFER) FOR SUBCHANNELS THAT MAY BE * INITIALIZED, BASED UPON THE 'MATCH' UNIT IN THE A-REG. THE TARGET * UNIT FOR THESE SUBCHANNELS (IF INITIALIZED) IS IN THE B-REG. * INIT? NOP STA TEMP3 SAVE TMT MATCH UNIT STB TEMP4 AND TARGET UNIT CLB INITIALIZE STB TEMP1 NEXT SUBCHANNEL # * INIT1 CPB \DSUB SYSTEM SUBCHANNEL? JMP NXS YES, SO SKIP RBL,RBL CONVERT TO TMT ENTRY # ADB TEMP1 ADB \TMT AND OFFSET INTO BUFFER ADB P2 LDA B INA IF WORD3 IS NEGATIVE LDA A,I THEN THIS SUBCH ALREADY SSA HAS BEEN SPECIFIED JMP NXS SO SKIP THIS ENTRY SZA,RSS JMP NXS ALSO SKIP IF NO TRACKS ASSIGNED TO IT * LDA B,I ISOLATE THE AND B17 UNIT CPA TEMP2 THIS UNIT MATCH DISALLOWED? JMP NXS YES, TRY NEXT SUBCH * CPA TEMP3 ONE WE'RE LOOKING FOR? RSS YES JMP NXS TRY NEXT ONE * STB TEMP6 SAVE BUFFER POSITION LDA TEMP1 GET SUBCH # CMA,INA LDB MS34A AND CONVERT TO ASCII JSB \CVAS AND STORE IN MESSAGE NXI LDA P18 NOW ASK 'EM LDB MES34 JSB \DSPL "INITIALIZE SUBCHANNEL XX?" JSB YE?NO DECIPHER ANSWER JMP NXI INVALID REPLY JMP INIT?,I /E SO EXIT JMP NXS NO REPLY * LDB TEMP6 GET BUFFER POSITION LDA B,I AND WORD 2 OF SUBCH'S ENTRY AND B1777 MASK OFF UNIT IOR TEMP4 AND ADD IN TARGET UNIT STA B,I RE-STORE INB NOW SET THE SIGN BIT LDA B,I FOR WORD 3 TO IOR MSIGN INDICATE A SPECIFIED ENTRY STA B,I * NXS ISZ TEMP1 BUMP SUBCHANNEL # LDB TEMP1 RETRIEVE IT AND CPB #SUBC AND SEE IF DONE JMP INIT?,I YES JMP INIT1 CONTINUE SCAN * SKP * * THE FOLLOWING CONDITIONS FOR AUTO BOOT-UP ARE CHECKED: * DESTINATION CHANNEL = TARGET CHANNEL * DESTINATION SUBCHANNEL/UNIT = TARGET SUBCHANNEL/UNIT * DESTINATION TBG CHANNEL = HOST TBG CHANNEL * DESTINATION TTY CHANNEL = HOST TTY CHANNEL * DESTINATION PI CHANNEL = HOST PI CHANNEL ( IF BOTH EXIST) * STB SUBI CLEAR INIT WORD IF NO SUBCH'S AUTO? LDA AUTO SPECIFIED AT TURN-ON TIME? SZA,RSS JMP CHPNT YES, ONLY THAT THEY DON'T WANT IT * LDA \DCH COMPARE DISC CHANNELS CPA \TCH RSS JMP CANT NO MATCH LDB DEQT SLB CHECK SUBCHANNELS OR UNITS JMP AUT0 LDA \DUNT CPA \TUNT JMP AUT1 JMP CANT NO MATCH ON 7905/7920 UNIT * AUT0 LDA \DSUB CPA \TSUB RSS JMP CANT NO MATCH ON 7900 SUBCHANNEL # * AUT1 LDA TBG GET HOST TBG CHANNEL CPA DTBG RSS JMP CANT TBG'S DON'T MATCH LDA HTTY CPA DTTY RSS JMP CANT TTY CHANNELS DON'T MATCH LDA PI GET HOST PI CHANNEL CPA P0 IF EITHER THE HOST OR JMP AUT2 LDB DPI CPB P0 DESTINATION PI IS 0, JMP AUT2 THEN DON'T CHECK CPA B RSS JMP CANT PI CHANNELS DON'T MATCH * * * AUTO BOOT-UP IS POSSIBLE * AUT2 LDA AUTO HAS IT BEEN SPECIFIED YET? SSA,RSS -1=NOT SPECIFIED, 1=YES JMP CHPNT YES, AND WANT IT AUT3 LDA P12 LDB MES24 JSB \DSPL "AUTO BOOT-UP? (Y OR N)" JSB YE?NO GET ANSWER JMP AUT3 INVALID REPLY JMP AUT3 INVALID REPLY CLA,RSS NO CLA,INA YES STA AUTO JMP CHPNT * * * WON'T BE BOOTING UP NEW SYSTEM * CANT LDA P25 LDB MES25 JSB \DSPL "PRESENT CONFIGURATION DOESN'T PERMIT AUTO BOOT-UP" CLA STA AUTO * * * DETERMINE IF WE'RE OVERLAYING PART OF THE HOST SYSTEM. * ALSO, DETERMINE IF WE CAN RETURN TO HOST SYSTEM AFTER * TRANSFER, OTHERWISE HALT * * CHPNT LDA HEQT GET HOST EQT TYPE CPA DEQT SAME AS NEW? RSS JMP GO LDA HCH GET HOST CHANNEL CPA \TCH REPLACING CURRENT? RSS MAYBE JMP GO LDB DEQT SLB,RSS JMP CHPT5 CHECK 7905/7920 SUBCHANNEL DEFN LDA HSBCH GET HOST SUBCHANNEL CPA \TSUB SAME 7900 SUBCHANNELS? RSS JMP GO NO,SO NO PROBLEM * * WILL BE REPLACING CURRENT SYSTEM * REPL CLA,INA STA PONRT SET "POINT OF NO RETURN" FLAG FOR THE LDA AUTO SZA JMP GO LDA P22 ERROR MESSAGE PROCESSING LDB MES26 JSB \DSPL "SYSTEM WILL HALT AFTER TRANSFER COMPLETION" JMP GO * * GOT 7905/7920 HOST SUBCHANNEL DEFINITION (VIA $TB32) AT OKAY * * 7905/7920 CHECKS FOR OVERWRITE OF HOST SYSTEM, USING HUNIT ONLY * CHPT5 LDA HUNIT CPA \TUNT SAME UNIT? JMP REPL YES - SO HALT IF NO AUTO-BOOT * * ALLOW OPERATOR ONE MORE OPPOR\TUNTY TO GET OUT * GO LDA BATCH NO MESSAGE IN BATCH MODE CMA,SSA,INA,SZA SKIP IF <= 0 JMP PURGF LDA P17 LDB MES32 JSB \DSPL "READY TO TRANSFER. OK TO PROCEED?" JSB YE?NO JMP GO INVALID REPLY JMP GO INVALID REPLY JMP \XOUT BAIL OUT JMP PURGF YES, GET WITH IT SKP * * PURGE ALL FILES FROM THE FILE DIRECTORY (AND THEIR EXTENTS) * THAT WERE OVERLAID BY THE NEW SYSTEM - LISTING THEM AT THE * SAME TIME. * PURGF JSB EXEC CORE LOCK - TO DEF *+3 PREVENT SWTCH FROM DEF P22 FROM BEING SWAPPED OUT DEF P1 * LDB \SAVE WERE THE FMP FILES TO BE \SAVED? SZB,RSS JMP XFER NO * LDA D.LT CONVERT LAST FMP LOGICAL ADDRESS STA \TRAK CLB STB \SECT LDA D.# STA TEMP4 SAVE FOR LOOP CHECKS * STB \INIT FOR DISKD LDA ND#WT STA \LNTH LDA \BUFA STA BPTR * LDA \SAVE SSA,RSS WERE ANY FMP FILES OVERLAID? JMP PUR6 NO,CHECK ON TYPE 6 FILES * LDA LWAM SET THE ADDRES OF THE ADA N3 FIRST FILE NAME ENTRY STA PENT * CLA,INA STA REWRT SET RE-WRITE FOR FD LDB \BUFA CCE SET FOR READ JMP BFULL * SPC 3 ****************************************************************************** * * THE FOLLOWING BSS ALLOWS FOR OVERLAY OF THE * PREVIOUS CODE, AND ADDS ADDITIONAL BSS'S FOR * AN AREA TOTALING 8192(DECIMAL) WORDS - MAXIMUM * WORDS PER TRACK. * BSS 8192+BUFR-* * ***************************************************************************** SPC 3 BFULL JSB DISKD FIRST FULL TRACK READ JSB \BLIN LDA P10 HEADING: LDB MES27 JSB \DSPL "OVERLAID FMP FILES:" CCA STA CURCH SET FOR PURGT LDA FDOFF POSITION TO FILE SPEC'N WORD 4 LDB \STRK AND STORE THE NEW FIRST STB A,I FMP TRACK * LDB FIRDE POSITION TO FIRST FILE ENTRY ON TRACK LDA FDT#E LOOP0 STA TCNT SET # ENTRIES TO SEARCH LOOP1 STB BPTR BUFFER POINTER LDA BPTR,I GET WORD 0 CPA N1 JMP INCRB ALREADY PURGED SZA,RSS JMP INCRB NOT AN ENTRY ADB P4 POSITION TO TRACK ADDRESS LDA B,I LDB \STRK COMPARE WITH LAST SYSTEM CMB,INB TRACK ADA B SSA WAS THE FILE IN THE NEW SYSTEM AREA? JSB PURGT PURGES,LISTS ENTRY * INCRB JSB UPDAT SET TO SEARCH NEXT ENTRY JMP LOOP1 CONTINUE IN SAME TRACK JMP PUR6 PURGE TYPE 6 FILES JMP LOOP0 CONTINUE IN NEW TRACK * FDOFF NOP SPEC'N ENTRY WORD 4 OFFSET INTO TRACK BUFFER FIRDE NOP BUFFER ADDRESS OF FIRST DIRECTORY ENTRY FDT#E NOP FIRST DIR TRACK'S # OF ENTRIES TO SEARCH SKP * PURGES ANY TYPE 6 FILES OF THE TARGET FMP FILE SYSTEM * PUR6 LDA TYP6 ARE WE TO PURGE ANY? SZA,RSS JMP XFER NO * CLA CLEAR THE STA REWRT REWRITE & FILES FLAGS STA CURCH FOR PURGT STA \SECT LDA D.# STA TEMP4 SET THE # DIRECTORY TRACKS TO SEARCH LDA D.LT FIRST DIRECTORY TRACK STA \TRAK LDB \BUFA STB BPTR CCE JSB DISKD READ IT * LDB FIRDE POSITION TO FIRST FILE DIR ENTRY LDA FDT#E LOOP2 STA TCNT # ENTRIES TO SEARCH LOOP3 STB BPTR BUFFER POINTER LDA BPTR,I GET WORD 0 CPA N1 JMP INCRE ALREADY PURGED SZA,RSS JMP INCRE NOT AN ENTRY ADB P3 POSITION TO FILE TYPE LDA B,I CPA P6 A TYPE 6? RSS JMP INCRE NOPE LDA HDRSW SZA JMP LOOP4 ISZ HDRSW JSB \BLIN LDA P10 PRINT HEADING: LDB MES28 JSB \DSPL "TYPE 6 FILES PURGED:" * LOOP4 JSB PURGT PURGE AND LIST ENTRY INCRE JSB UPDAT POSITION TO NEXT DIRECTORY ENTRY JMP LOOP3 CONTINUE IN SAME TRACK JMP XFER DONE WITH DIRECTORY JMP LOOP2 CONTINUE IN NEW TRACK SPC 2 B50 OCT 50 B62 OCT 62 B200 OCT 200 N6144 DEC -6144 HDRSW NOP HEADER SWITCH SKP * BEGIN THE TRANSFER, READING FROM THE ABSOLUTE FILE VIA READF * CALLS, AND WRITING OUT THE NEW SYSTEM VIA DISKD (TURNS OFF * THE INTERRUPT SYSTEM) * XFER CLA STA \TRAK SET DESTINATION TRACK 0 SECTOR 0 STA \SECT JSB IMESS "INSTALLING SYSTEM SUBCHANNEL XX" LDA MSINT NOW REPLACE THE 'INSTALLING' LDB MSINS WITH THE 'INITIALIZING' MVW P9 * * READ FROM THE NEW SYSTEM FILE * LDA \BUFA STA BPTR RESET TO BEG. OF BUFFER LDA DEQT LDB \INP0 SLA,RSS LDB \INP5 SET TO WRITE PROTECT AND INITIALIZE STB \INIT (FOR DISKD) * CLB LDA SIZE # 128-WORD SECTORS RAL CONVERT TO # 64-WORD SECTORS DIV \D#ST SIZE OF SYSTEM CMA,INA NOW MEANS THE SYSTEM SIZE IN TRACKS STA TEMP1 NEGATIVE STB TEMP2 REMAINING # OF SECTORS LDA \D#WT SET WORDS PER TRACK STA \LNTH AS TRANSFER LENGTH * JSB READF READ A TRACK STARTING WITH RECORD #3 DEF *+7 DEF DCB DEF ERR DEF BUFR DEF \LNTH DEF LLEN DEF P3 SSA READ ERROR? JMP RDERR YES * LDA PONRT SET TO INDICATE POSSIBLE OVERLAY CMA,INA RESULTING IN 0 OR -1 STA PONRT * * LDA \BUFA COMPUTE ADDRESS OF SYSTEM ADA P1024 COMMUNICATION AREA IN NEW ADA B50 BASE PAGE. LDB A POSITION TO LOCATION 1650. ADB P6 GET TAT ADDRESS AT 1656 WHILE LDB B,I WE'RE THERE. STB TAT * JMP WDISK WRITE TRACK TO DISK * * READ FROM ABSOLUTE DISK FILE * RDISK LDA \D#WT ISZ TEMP1 LAST FULL TRACK'S WORTH? JMP READ NO, CONTINUE LDA TEMP2 GET # OF LEFTOVER SECTORS SZA,RSS JMP DDONE NONE! MPY P64 CONVERT TO # WORDS ISZ EOFLG SET EOF FLAG * * CLEAR REMAINDER OF TRACK * STA \LNTH SAVE # WORDS TO BE READ CMA,INA DETERMINE # REMAINING ON TRACK ADA \D#WT CMA,INA LDB \BUFA GET STARTING ADDRESS ADB \LNTH WITHIN BUFFER JSB CLRBF AND CLEAR THE AREA TO FOLLOW RSS THE LAST RECORD READ IN * * READ ANOTHER TRACK FROM ABS FILE * READ STA \LNTH # WORDS TO READ JSB READF DEF *+5 DEF DCB DEF ERR DEF BUFR DEF \LNTH SSA READ ERROR? JMP RDERR YES * * WRITE TO THE TARGET * WDISK LDA \TRAK DISPLAY DESTINATION OTA 1 * LDA ND#WT STA \LNTH # WORDS TO READ/WRITE LDB \BUFA BUFFER(CORE) ADDRES CLE SET TO WRITE JSB DISKD AND DO IT. * LDA EOFLG DONE WITH TRANSFER? SZA NO JMP DDONE ISZ \TRAK INCREMENT DESTINATION JMP RDISK ADDRESS BY ONE TRACK * * * * TRANSFER COMPLETE. INITIALIZE THE NECESSARY DISK TRACKS * DDONE LDB \INT0 GET WRITE INITIALIZE BITS LDA DEQT SLA,RSS LDB \INT5 STB \INIT SET FOR DISKD * LDA \SAVE SZA,RSS JMP WHOLE INITIALIZE WHOLE REST OF SUBCHANNEL SSA JMP INIT2-1 INITIALIZE ONLY THE 9 AVAILABLE TRACKS * * INITIALIZE ONLY UP TO TARGET(EXISTING) FIRST FMP TRACK * LDA \FFMP COMPUTE NUMBER OF TRACKS UP TO FMGR AREA JMP LESS * * INITIALIZE REST OF SYSTEM SUBCHANNEL * WHOLE LDA \DNTR COMPUTE # TRACKS LEFT ON SUBCHANNEL LESS LDB \STRK ADB N9 CMB,INB ADA B CMA,INA JMP INIT2 * * INITIALIZE THE MINIMUM 9 TRACKS SINCE WE'RE OVERLAYING * SOME FMGR FILES AS IT IS. * N9 DEC -9 * LDA N9 INIT2 STA TEMP1 NEGATIVE # * * CLEAR ENTIRE BUFFER FIRST * LDB \BUFA STARTING ADDRESS LDA ND#WT AND SIZE JSB CLRBF DO IT * * SET FIRST TRACK * LDA \STRK ADA N9 AND B377 STA \TRAK NEXT TRACK TO WRITE IN1 OTA 1 LDB \BUFA CLE JSB DISKD ISZ \TRAK INCREMENT THE TRACK NUMBER LDA \TRAK ISZ TEMP1 DONE? JMP IN1 NO SKP * * ANY ADDITIONAL SUBCHANNELS TO BE INITIALIZED? * ISUBS LDA SUBI SHOULD WE INITIALIZE ANY SZA,RSS ADDITIONAL SUBCHANNELS? JMP UPTAT NO CLA SIGNAL A NON-SYSTEM LU STA \LU2 LDA \DSUB SAVE THE DESTINATION DISK SUBCHANNEL STA TEMP1 * LDB DEQT BRANCH ON THE SLB,RSS DISK TYPE JMP INS5 7905/6/20 * * INITIALIZE SPECIFIED 7900 SUBCHANNELS * LDB N6144 STB \D#WT SET TRANSFER LENGTH LDA \TSUB SAVE THE DESTINATION TARGET SUBCHANNEL STA TEMP2 LDB \INT0 SET THE WRITE INIT STB \INIT FLAG CLB INITIALIZE THE STB \DSUB SUBCHANNEL # TO SCAN INS0 ADB \TMT OFFSET INTO THE TMT FOR ENTRY LDA B,I IS THIS SUBCHANNEL SSA,RSS TO BE INITIALIZED? JMP INS1 NO AND B7777 STA \DFTR SET THE STARTING TRACK TO BE ADB P8 INITIALIZED LDA B,I STA \DNTR AND THE NUMBER OF TRACKS ADB P8 LDA B,I STA \TSUB THE TARGET PLATTER # JSB ILOOP GO INITIALIZE THAT SUBCHANNEL * INS1 ISZ \DSUB BUMP SUBCHANNEL # LDB \DSUB SEE IF DONE CPB #SUBC RSS YES JMP INS0 NO, CONTINUE SCAN OF TMT * LDB TEMP1 RESTORE THE SYSTEM SUBCHANNEL'S STB \DSUB SPECIFICATIONS ADB \TMT LDA B,I STA \DFTR THE STARTING TRACK # ADB P8 LDA B,I STA \DNTR THE NUMBER OF TRACKS LDA TEMP2 STA \TSUB AND THE TARGET PLATTER JMP UPTAT EXIT SKP * * INITIALIZE SPECIFIED 7905/6/20 SUBCHANNELS * INS5 LDA \TUNT SAVE THE TARGET UNIT FOR STA TEMP2 THE SYSTEM SUBCHANNEL LDB \INT5 SET THE WRITE INITIALIZE STB \INIT FLAG LDA \DSUB SAVE DESTINATION SYSTEM SUBCHANNEL STA \TSUB FOR USE AT ISPAR(SWSG2) CLB STB \DSUB INITIALIZE SUBCH # FOR SCAN * INS6 JSB \SETD GO SET UP \DSUB'S SPECS LDA \D#WT SET TRANSFER LENGTH CMA,INA NEGATE STA \LNTH LDA \DUNT SET THE TARGET UNIT STA \TUNT FROM THE ENTRY CCA RESET THE HEADING FLAG TO STA \BADH DISPLAY SUBCHANNEL # OF BAD/SPARED TRACKS SEZ INITIALIZE IT? JSB ILOOP YES * ISZ \DSUB BUMP SUBCHANNEL # LDB \DSUB DONE YET? CPB #SUBC RSS YES JMP INS6 TRY THE NEXT SUBCHANNEL * LDB TEMP1 RE-STORE THE STB \DSUB SYSTEM SUBCHANNEL'S DESTINATION LDB TEMP2 SUBCH , AND THE TARGET STB \TUNT UNIT JSB \SETD RESET SYSTEM SUBCH SPECS JMP BOOT? * SKP * * ILOOP NOP JSB IMESS PRINT INITIALIZING MESSAGE LDA \DNTR GET THE # OF TRACKS CMA,INA FOR THIS SUBCHANNEL STA TEMP3 AND SET AS THE LOOP COUNTER CLA SET THE STARTING TRACK # STA \TRAK TO INITIALIZE STA \SECT CLEAR SECTOR # * IL1 LDA \TRAK DISPLAY TRACK # OTA 1 IN SW REG LDB \BUFA GET BUFFER ADDRESS CLE SET TO WRITE JSB DISKD WRITE INIT THE TRACK ISZ \TRAK INCREMENT THE TRACK # ISZ TEMP3 AND THE LOOP COUNTER JMP IL1 CONTINUE JMP ILOOP,I DONE WITH THIS SUBCHANNEL SPC 4 IMESS NOP CLA,INA STA \CLEN SET CONVERSION LENGTH JSB \BLIN PRINT A BLANK LINE LDA \DSUB GET SUBCHANNEL TO BE INIT'D CMA,INA LDB MSIN1 JSB \CVAS CONVERT FOR MESSAGE * LDA P16 LDB MSINS PRINT: JSB \DSPL "INITIALIZING SUBCHANNEL XX" JMP IMESS,I * MSINS DEF *+1 ASC 16,INSTALLING SYSTEM SUBCHANNEL XX MSIN1 DEF MSINS+16 MSINT DEF *+1 ASC 9,INITIALIZING SKP * * UPDATE THE 7900 TAT FOR ANY BAD TRACKS ENCOUNTERED DURING * THE TRANSFER OR INITIALIZATION. * UPTAT CLA CLEAR THE WRITE STA \INIT INITIALIZE FLAG LDA N6144 STA \LNTH SET TRANSFER LENGTH LDA DEQT GET THE TARGET DISK TYPE SLA,RSS JMP BOOT? NO BAD ONES ON A 7905/7920 * LDA \FLGT GET ADDRESS OF BAD TRACK TABLE STA TEMP3 AND SAVE IT FOR RETRIEVAL LDA A,I GET THE FIRST BAD TRACK CPA N1 -1 MEANS END OF LIST JMP BOOT? NO BAD TRACKS * LDA TAT CONVERT THE TAT CORE ADDRESS ADA P128 TO TRACK # AND OFFSET CLB (ALLOW FOR T0S0 BOOTSTRAP) DIV P6144 STB TEMP1 TAT'S OFFSET INTO TRACK BUFFER STA TEMP2 TRACK CONTAINING THE TAT CMB,INB ADB P6144 SET THE # OF (POSSIBLE) TAT STB TYP6 ENTRIES ON TRACK TEMP2 * CMB,INB DETERMINE IF NEXT BAD TRACK IS ON LDA TEMP3,I THE TAT ENTRIES OF TRACK TEMP2 AND B1776 ALF,ALF ROTATE TRACK TO LOW A RAL ADB A SSB JMP RDTAT IT IS TRAK2 ISZ TEMP2 ADJUST VARIABLES FOR NEXT TRACK LDA TEMP1 CMA,INA ADA P6144 CONVERT NEW OFFSET TO NEG (BECAUSE CMA,INA OF LOGICAL BAD TRACK #'S) STA TEMP1 * RDTAT CLA STA REWRT CLEAR REWRITE FLAG STA \SECT LDA TEMP2 STA \TRAK LDB \BUFA CCE JSB DISKD GO READ IT! * SETBD LDA TEMP3,I GET THE BAD TRACK# AND B1776 INTO LOW A ALF,ALF RAL ADA TEMP1 ADD TAT OFFSET INTO TRACK BUFFER ADA \BUFA LDB MSIGN STB A,I SET THE TAT ENTRY ISZ REWRT SET TO REWRITE THE TRACK ISZ TEMP3 POINT TO NEXT BAD TRACK ENTRY * LDA TEMP3,I GET THE NEXT BAD TRACK CPA N1 END OF LIST? JMP TROUT YES AND B1776 ROTATE IT TO LOW A ALF,ALF RAL ADA TYP6 ADD # ENTRIES ON TEMP2 SSA,RSS TO SET IF ITS ON THIS TAT TRACK JMP SETBD ON TEMP2, SO GO SET IT * TROUT LDA REWRT IS TRACK TEMP2 TO BE RE-WRITTE? SZA,RSS JMP BOOT? NO LDA \INP0 STA \INIT LDB \BUFA GET THE BUFFER ADDRESS CLE CLEAR TO WRITE JSB DISKD AND DO IT * LDA TEMP3,I CPA N1 DONE NOW? RSS YES JMP TRAK2 NO,SET ENTRIES THAT ARE ON NEXT TRACK SKP * BOOT? JSB \BLIN LDA P6 INA LDB MES33 JSB \DSPL "SWTCH FINISHED" JSB \BLIN * LDB PONRT CAN WE REMOVE THE CORE LOCK? SZB JMP BOOTS NO * JSB EXEC REMOVE CORE LOCK DEF *+3 DEF P22 DEF P0 * BOOTS LDA AUTO ARE WE TO BOOT UP ? SZA JMP BOOT YES LDB PONRT CAN WE RETURN TO THE SZB,RSS CURRENT SYSTEM? JMP XOUTT YES * JSB $LIBR NOP NO HLT 77B HALT * * * BOOT THE NEW RTE! * BOOT JSB \BLIN LDA N128 STA \LNTH CLA SET FOR TRACK 0, SECTOR 0. STA \INIT STA \TRAK STA \SECT ISZ \BOOT SET SO DISKD WILL BRANCH LDB B2011 TO THE BOOTSTRAP LOADR CCE JSB DISKD LOAD THE SYSTEM LOADER. * B2011 OCT 2011 LWAM EQU 1777B SKP * ABNORMAL TERMINATION EXIT * \XOUT LDA P20 LDB MES15 JSB \DSPL * JSB EXEC REMOVE CORE LOCK DEF *+3 DEF P22 DEF P0 * XOUTT JSB EXEC TERMINATE DEF *+2 DEF P6 SPC 2 RDERR CMA,INA ABSOLUTE FILE READ ERROR STA ERR JSB CNUMD DEF *+3 DEF ERR DEF MS31A * LDA MS31A+2 SAVE ERROR CODE ONLY STA MS31A LDA P6 LDB MES31 JSB \DSPL JMP \XOUT * MSIGN OCT 100000 BAD TRACK IN TAT HED SWTCH SUBROUTINES. ******************************** * * CONTROLS CALLS TO THE CORRECT DISK DRIVER, * DEPENDENT UPON THE DESTINATION DISK TYPE * DISKD NOP DST ABREG SAVE 'EM LDA DEQT SLA JMP DISK1 DLD ABREG JSB \DSK5 CALL TO 7905/7920 DRIVER JMP DISKD,I * DISK1 DLD ABREG JSB \DSK0 CALL TO 7900 DRIVER JMP DISKD,I * ABREG BSS 2 A & B REGISTER SAVE AREA SPC 4 * * CLEAR A-REG NUMBER OF WORDS IN A BUFFER STARTING AT B-REG * CLRBF NOP STA TEMP2 AND SAVE CLA CLEAR STA B,I INB BUMP BUFFER ADDRESS ISZ TEMP2 AND LOOP COUNTER JMP CLEAR CONTINUE JMP CLRBF,I DONE SKP * * * UPDATES THE DIRECTORY POINTERS ( AND POSSIBLY TRACK # ) * WHEN PURGING FILES * * RETURN: (P+1) CONTINUE IN SAME DIRECTORY TRACK * (B) IS ADDRESS OF NEXT ENTRY * (P+2) DONE WITH THE DIRECTORY * (P+3) CONTINUE IN NEXT DIRECTORY TRACK * (B) IS ADDRESS OF NEXT ENTRY * (A) IS # ENTRIES TO SEARCH ON NEXT PASS * UPDAT NOP LDB BPTR SET TO SEARCH NEXT ENTRY ADB P16 DIRECTORY ENTRY ISZ TCNT DONE WITH TRACK? JMP UPDAT,I NO,CONTINUE ISZ UPDAT * LDA CURCH ARE WE PURGING EXTENTS? SZA,RSS JMP UPDTT NOPE * * SEARCH THE JUST COMPLETED DIRECTORY TRACK FOR THE EXTENTS * OF ANY OVERLAID FILES * LDA #PF ANY SO FAR? SZA,RSS JMP UPDTT NO, CONTINUE CMA,INA STA PCNT SAVE AS A COUNTER LDB LWAM GET ADDRESS OF 1ST ENTRY ADB N3 * PEXT0 LDA \BUFA AND ADDRESS OF BUFFER TO SEARCH STB TEMP3 PEXT1 STA BPTR SAV BOTH ADDRESS POINTERS * STA TEMP2 LDA TEMP2,I GET WORD 0 OF A FILE DIRECTORY ENTRY SSA JMP PEXT2 ALREADY PURGED SZA,RSS JMP PEXT2 NOT A VALID ENTRY CPA B,I CHARACTERS 1&2? INB,RSS JMP PEXT2 NO ISZ TEMP2 LDA TEMP2,I CPA B,I CHARS 3&4? INB,RSS JMP PEXT2 NO ISZ TEMP2 LDA TEMP2,I CPA B,I CHARS 5&6 RSS JMP PEXT2 NO CCA STA BPTR,I YES, SO PURGE THE EXTENT ISZ REWRT SET TO REWRITE THE DIRECTORY TRACK * PEXT2 LDA BPTR POINT TO NEXT FILE ENTRY ADA P16 LDB TEMP3 CPA DTEND DONE? RSS JMP PEXT1 NO CONTINUE WITH TRACK BUFFER ADB N3 MOVE TO NEXT LIST ENTRY ISZ PCNT DONE WITH FILE LIST? JMP PEXT0 JMP UPDTT YES * UPDTT LDA REWRT DOES THIS ONE NEED TO BE REWRITTEN? SZA,RSS JMP INCRT NO, NO ENTRIES WERE PURGED * LDB \BUFA REWRITE THE THIS DIRECTORY TRACK CLE JSB DISKD * INCRT ISZ TEMP4 DONE WITH THE DIRECTORY? RSS JMP UPDAT,I YES * CCA ADA \TRAK NO, UPDATE THE DISK ADDRESS STA \TRAK BUMP TO PREVIOUS TRACK ( THE CLA NEXT DIRECTORY TRACK) STA \SECT CCE LDB \BUFA JSB DISKD READ NEXT DIRECTORY TRACK CLA STA REWRT CLEAR LDA \D#ST SET LOOP COUNTER RAL,RAL CMA,INA LDB \BUFA AND BUFFER POINTER ISZ UPDAT JMP UPDAT,I * PCNT NOP LOOP COUNTER OF PURGED FILES DTEND NOP END OF DIRECTORY TRACK BUFFER N384 DEC -384 SKP * * PURGT PURGES AND DISPLAY FILE FOR ONE OF TWO REASONS: * A FILE OVERLAID BY THE NEW SYSTEM * A TYPE 6 FILE SPECIFIED BY THE USER TO BE PURGED * PURGT NOP LDB BPTR INSERT THE FILE LDA B,I NAME INTO THE STA MS29 OUTPUT MESSAGE INB BUFFER LDA B,I STA MS29+1 INB LDA B,I STA MS29+2 LDA P6 LDB MES29 JSB \DSPL OUTPUT THE FILE NAME * ISZ REWRT FLAG TO REWRITE DIRECTORY TRACK CCA STA BPTR,I SET WORD 0 OF ENTRY TO PURGE IT LDA CURCH SZA,RSS PURGE THE EXTENTS AND CLEAR THE SIZE WORD? JMP PURGT,I NO * * ENTERS THE FILE NAME SO ITS EXTENTS CAN LATER * BE SEARCHED FOR AND PURGED * & CLEAR THE SIZE WORD TO PREVENT RECOVERY OF DISC SPACE * LDB BPTR FIRST CLEAR THE SECTOR SIZE WORD ADB P6 SINCE OVERLAID FILES' SPACE CANNOT CLA BE RECOVERED STA B,I ADB N1 SEE IF THIS IS AN EXTENT FILE ENTRY LDA B,I IF SO, DON'T RE-ENTER THE FILE ALF,ALF NAME IN THE LIST AND B377 SZA JMP PURGT,I IT WAS ISZ #PF INCREMENT # ENTRIES IN FILE LDB PENT LDA MS29 STORE FILE NAME IN LIST STA B,I UPWARDS INB LDA MS29+1 STA B,I LDA MS29+2 INB STA B,I LDA PENT ADA N3 READY FOR NEXT ENTRY STA PENT JMP PURGT,I * PENT NOP ADDRESS OF NEXT ENTRY TO USE #PF NOP # OF PURGED FILE ENTRIES SKP \BLIN NOP OUTPUT A BLANK LINE. LDB DBLNK CLA,INA JSB \DSPL JMP \BLIN,I SPC 4 \DSPL NOP DISPLAY MESSAGE ON OPERATOR CONSOLE STA DSPL STB DSPB JSB EXEC DEF *+5 DEF P2 DEF OPLU DSPB NOP DEF DSPL JSB LOOP WAIT UNTIL DEVICE AVAILABLE JMP \DSPL,I TO RETURN * DSPL NOP SPC 4 LOOP NOP LOOPS ON A STATUS CHECK UNTIL LOOPS JSB EXEC THE DEVICE IS NO LONGER DEF *+5 BUSY DEF P13 DEF OPLU DEF IEQT5 DEF IEQT4 * LDA IEQT5 AND M1400 SZA JMP LOOPS JMP LOOP,I * M1400 OCT 140000 SKP * * CONVERT A TO ASCII AT B * * THE \CVAS SUBROUTINE CONVERTS THE CONTENTS OF A * INTO ASCII (DECIMAL OR OCTAL) AT THE LOCATION SPECIFIED * BY B. * * CALLING SEQUENCE: * \CLEN = MAXIMUM # WORDS IN ANSWER * A = NO. TO BE CONVERTED. IF THE SIGN OF A IS POS., * THE CONVERSION IS TO BE IN OCTAL; IF NEGATIVE, * IN DECIMAL. * B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT * JSB \CVAS * * RETURN: CONTENTS OF A AND B ARE DESTOYED. * \CVAS NOP STB CURAT SET MESSAGE ADDRESS LDB OPWRS GET ADDR OF OCTAL POWERS SSA SKIP IF OCTAL CONV REQUIRED LDB DPWRS GET ADDRESS OF DECIMAL POWERS SSA,RSS SKIP IF NEGATIVE (DECIMAL) CMA,INA CONVERT NUMBER TO NEGATIVE STA CTEMP PUT NUMBER IN TEMPORARY LDA \CLEN GET # WORDS CPA P1 IF ONLY 1 THEN ADB P2 ADVANCE 2 POWERS STB RANAD SET OWER RANGE ADDRESS LDB N2 ALSO SET LOOP COUNT CPA P1 INB ONCE FOR 2 WORDS STB TCNT LDB CTEMP NUMBER INTO B NEXTD JSB GETD GET NEXT DIGIT ALF,ALF ROTATE TO UPPER STA CURAT,I SAVE UPPER CHARACTER JSB GETD GET NEXT DIGIT IOR CURAT,I ADD UPPER CHAR STA CURAT,I SAVE NEXT 2 CHARACTERS ISZ CURAT INCR MESSAGE ADDRESS ISZ TCNT SKIP - 5 DIGITS IN JMP NEXTD NO - CONTINUE WITH NEXT DIGIT JMP \CVAS,I YES - RETURN * OPWRS DEF *+1 OCT 1000 M100 OCT 100 OCT 10 OCT 1 * DPWRS DEF *+1 DEC 1000 DEC 100 P10 DEC 10 P1 DEC 1 * \CLEN NOP MAXIMUM # WORDS IN ANSWER CURAT NOP BUFFER ADDRESS TCNT NOP TEMPORARY LOOP COUNTER CTEMP NOP SPC 6 * * GET DIGIT FOR \CVAS * * GETD PROVIDES THE ASCII CHARACTERS FOR \CVAS. * * CALLING SEQUENCE: * A = IGNORED * B = REMAINDER * JSB GETD * * RETURN: * A = ASCII DIGIT * B = IGNORED * GETD NOP CLA INCRA ADB RANAD,I ADD POWER CMB,SSB,INB,SZB SKIP - TRY NEXT HIGHER DIGIT JMP GET2 DIGIT FOUND INA INCR DIGIT CMB,INB RESTORE REMAINDER TO NEGATIVE JMP INCRA TRY HIGHER DIGIT GET2 ADB RANAD,I ADD POWER CMB,INB RESTORE REMAINDER ISZ RANAD INCR POWER LIST ADDRESS IOR B60 CONVERT TO ASCII JMP GETD,I RETURN WITH DIGIT IN A * RANAD NOP SKP * * CONVERT OCT ASCII TO BINARY * * THE GETOC SUBROUTINE CONVERTS THE NEXT CHARACTERS IN BUFR FROM * TO THEIR BINARY VALUE. * * CALLING SEQUENCE: * A = MAX. NO. OF CHARS IN CONVERSION REQUEST. * B = IGNORED * JSB GETOC * * RETURN: * (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION * (N+2): A = CONVERTED NO. * B = DESTROYED * GETOC NOP CMA,INA SET REQUEST COUNT TO NEGATIVE STA MAXC SET MAX NO. OF DIGITS CCB SET FOR HIGH CHAR STB BUFUL LDA \BUFA STA BPTR CLA STA OCTNO OCTNO = OCTAL NUMBER GETNX LDB BUFUL GET UPPER-LOWER FLAG IGNOR LDA BPTR,I GET CHAR FROM BUFFER SZB SKIP IF LOWER CHAR ALF,ALF ROTATE TO LOWER AND B377 ISOLATE LOWER CHAR CMB,SZB RESET U/L, SKIP IF UPPER CHAR ISZ BPTR INCR BUFFER ADDRESS STB BUFUL SAVE U/L FLAG CPA BLANK CHAR = BLANK? JMP IGNOR YES ADA L60 SUBTRACT 60B FROM CHAR STA TCHAR SAVE CHAR SSA SKIP IF VALID LOWER LIMIT JMP DGERR INVALID DIGIT ADA N8 ADD DIGIT RANGE CLE,SSA,RSS CLEAR E - SKIP IF VALID DIGIT JMP DGERR INVALID DIGIT LDA OCTNO GET PREVIOUS OCTAL NO. ADA A SET A = OCTNO X 2 ADA A SET A = OCTNO X 4 ADA A SET A = OCTNO X 8 ADA TCHAR SET A = NEW OCTAL NO. STA OCTNO SAVE NEW OCTAL NO. SEZ TEST FOR OVERFLOW JMP DGERR INVALID NO. ISZ MAXC SKIP IF ALL DIGITS PROCESSED JMP GETNX GET NEXT DECIMAL DIGIT ISZ GETOC INCR RETURN ADDRESS LDA OCTNO GET OCTAL EQUIVALENT DGERR JMP GETOC,I RETURN * TCHAR NOP TEMP CHAR SAVE AREA. OCTNO NOP OCTAL DIGIT. BLANK OCT 40 BUFUL NOP UPPER/LOWER CHARACTER = -1/0 MAXC NOP MAXIMUM # DIGITS IN CONVERSION L60 OCT -60 HED SWTCH CONSTANTS AND STORAGE. * DESTINATION => GENERATION-DEFINED SYSTEM * \DCH NOP DESTINATION SYSTEM DISC CHANNEL \DSUB NOP " " " SUBCHANNEL DEQT NOP " " " EQT TYPE \DUNT NOP " " " UNIT \DFTR NOP " " " FIRST TRACK/CYLINDER \DNTR NOP " " " NUMBER TRACKS \DSHD NOP " " " STARTING HEAD (7905/7920) \DNSU NOP " " " NUMBER SURFACES " \DNSP NOP " " " " SPARES " \D#ST NOP " " " SECTORS/TRACK \D#WT NOP " " " WORDS/TRACK DTTY NOP " TTY CHANNEL DPI NOP " PI CHANNEL DTBG NOP " TBG CHANNEL SPC 3 * TARGET => TEMPORARY STORAGE FOR NEW SYSTEM * \TCH DEC -1 TARGET DISC CHANNEL \TSUB DEC -1 " " SUBCHANNEL \TUNT DEC -1 " " UNIT (7905/7920) SKP * MES15 DEF *+1 ASC 20,TRANSFER CANCELLED AND SWTCH TERMINATED. MES27 DEF *+1 ASC 10,OVERLAID FMP FILES: MES28 DEF *+1 ASC 10,TYPE 6 FILES PURGED: MES29 DEF *+1 MS29 ASC 6, MES31 DEF *+1 ASC 5,FILE ERR - MS31A BSS 0 MES33 DEF *+1 ASC 7,SWTCH FINISHED SPC 3 \BOOT NOP "WE'RE BOOTING" FLAG FOR DISKD (0=NOT NOW) AUTO DEC -1 AUTO BOOT-UP FLAG (0=NO, 1=YES) \SAVE DEC -1 SAVE TARGET FILES(0=NO,1=YES,-1=OVERLAYS SOME) TYP6 DEC -1 PURGE TYPE 6 FILES FLAG (0=NO, 1=YES) SUBI DEC -1 INITIALIZE SUBCHANNELS FLAG," " BATCH DEC -6 BATCH MODE ( NO<=0, YES>=1 ) #EQTS NOP NUMBER OF DESTINATION EQT'S CURCH DEC 0 CURRENT CHANNEL COUNTER PONRT NOP "POINT-OF-NO-RETURN" FLAG (0=OK,1=WILL,-1=DONE) D.LT DEC -1 LAST DIRECTORY TRACK FROM TARGET'S CD D.# NOP # DIRECTORY TRACKS FROM TARGET'S CD TAT NOP DISK ADDRESS OF TAT IN NEW SYSTEM \FFMP NOP FIRST LOGICAL FMP TRACK AT TARGET #SUBC NOP NUMBER OF DEFINED DISK SUBCHANNELS HDFLG NOP HEADER FLAG \LU2 DEC -1 LU 2 OR 3 FLAG OLDNU NOP =0 OLD FMGR FORMAT, =1 NEW FORMAT ND#WT NOP NEGATIVE DEC # WORDS/TRACK * \LNTH NOP LENGTH OF READ/WRITE \INIT NOP DISKD COMMAND MASK \TRAK NOP DESTINATION DISK ADDRESS \SECT NOP \BUFA DEF BUFR BPTR NOP BUFR POINTER EOFLG NOP REWRT NOP RE-WRITE TRACK FLAG SIZE NOP # BLOCKS IN FILE \STRK NOP # TRACKS IN FILE (PLUS 8) * TEMP1 NOP TEMPORARY TEMP2 NOP " TEMP3 NOP " TEMP4 NOP " TEMP5 NOP " TEMP6 NOP " * PI EQU 1737B TBG EQU 1674B SYSTY EQU 1675B * IEQT4 NOP IEQT5 NOP SKP P0 DEC 0 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P8 DEC 8 P9 DEC 9 P13 DEC 13 P16 DEC 16 P22 DEC 22 P20 DEC 20 P32 DEC 32 P48 DEC 48 P64 DEC 64 P128 DEC 128 P1024 DEC 1024 P6144 DEC 6144 * N1 DEC -1 N2 DEC -2 N3 DEC -3 N6 DEC -6 N8 DEC -8 N16 DEC -16 N126 DEC -126 N128 DEC -128 * B17 OCT 17 B60 OCT 60 B377 OCT 377 B1776 OCT 177600 B1777 OCT 177760 B7777 OCT 77777 * OPLU DEC 1 DEFAULT OPER CONSOLE LU (MAY * BE OVERWRITTEN) CNTR NOP DBLNK DEF BLNK BLNK OCT 20040 * * DCB BSS 144 ERR NOP LLEN NOP * \TMT DEF *+1 BSS 160 * END EQU * * * END SWTCH