ASMB,R,L,C
      HED SWTCH - TRANSFERS FILE CONTAINING RTE-IV SYSTEM GENERATED ONLINE
      NAM SWTCH,3,10 92067-16010 REV.1926 790425
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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-IV
*     SOURCE:         92067-18010 
*     BINARY:         92067-16010 
*     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
      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 
      EXT $LIBR,$LIBX 
* 
      EXT \DSK0,\DSK5 
      EXT \INP0,\INP5 
      EXT \INT0,\INT5 
      EXT \STD0,\STD5 
      EXT CNUMD,GETST 
      EXT \FLGT,\SETD,\BADH 
* 
      IFN 
      EXT DBUG
      XIF 
* 
      SPC 2 
A     EQU 0 
B     EQU 1 
      SUP 
      SKP 
*                HEADER RECORD #1 FORMAT
* 
*        ------------------------------------ 
*        !1!     SYSTEM SUBCHANNEL #        ! 
*        ------------------------------------ 
*        !       SYSTEM EQT #               ! 
*        ------------------------------------ 
*        !       NUMBER OF EQT'S            ! 
*        ------------------------------------ 
*        !       PRIV. INT. CHANNEL         ! 
*        ------------------------------------ 
*        !       TBG CHANNEL                ! 
*        ------------------------------------ 
*        ! # SUBCHANNELS  !   TTY CHANNEL   ! 
*        ------------------------------------ 
*        !   CHANNEL #    !   EQT TYPE      !        FOR EQT #1 
*        ------------------------------------ 
*        !   CHANNEL #    !   EQT TYPE      !        FOR EQT #2 
*        ------------------------------------ 
*                         .                               . 
*                         .                               . 
*                         .                               . 
*        ------------------------------------ 
*        !    CHANNEL #   !   EQT TYPE      !        FOR EQT #N 
*        ------------------------------------ 
      SPC 2 
*                HEADER RECORD #2 FORMAT
* 
* FOR A 7905/6/20 SYSTEM: 
* 
*        ------------------------------------ 
*        !       FIRST CYLINDER #           !        ONE 4-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 6144 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 
MES11 DEF *+1 
      ASC 20, HEAD# X   #TRACKS    XXXX   #SURFACES X 
MS11C DEF *+1 
      ASC 20, UNIT# X   FIRST CYL# XXXX   #SPARES   X 
MS11A DEF MES11+12
MS11B DEF MS11C+12
MS11D DEF MS11C+20
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) 
MES14 DEF *+1 
      ASC 20,NEW SYSTEM WILL OVERWRITE FILE  XXXXXX.
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)
* 
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
P64   DEC 64
P98   DEC 98
P512  DEC 512 
* 
      SKP 
* 
* 
*  F$TB  SEARCHES THE RESIDENT LIBRARY ENTRY POINT
*        LIST FOR THE APPROPRIATE TRACK MAP TABLE,
*        $TB31 OR $TB32 (DEPENDENT UPON THE SOURCE
*        DISK TYPE), AND RETURNS IT IN BUFR.
* 
*  CALLING SEQUENCE:  JSB F$TB
*                     DEF .1 OR .2
* 
F$TB  NOP 
      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 F$TB,I
      LDA A,I       GET "1" OR "2"
      XOR B,I 
      AND B1774 
      SZA,RSS       A MATCH?
      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      SEE IF ALL WERE SEARCHED
      CMA 
      ADA LEPL
      SSA           IF WE'VE GONE THRU THE ENTIRE LEP 
      JMP ABF$       THEN ITS NOT THERE, SO ABORT SWTCH 
      INA 
      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  STB LCNT      TEMPORARY SAVE
      LDB P17       DETERMINE IF WE'RE TO READ
      LDA SEQT       IN A $TB31 (17 WORDS), OR
      SLA,RSS        A $TB32 (98 WORDS) 
      LDB P98 
      STB LLEN
* 
      LDB LCNT      RESTORE ENTRY POINTER 
      LDA B,I       DETERMINE IF ENTRY IS AT A
      INB 
      AND P1        MEMORY ADDRESS, OR A DISK 
      SZA           BY CHECKING BIT 0 OF WORD 3 
      JMP F$T9      DISK ADDR 
* 
      LDA B,I       GET THE MEMORY ADDRESS
      LDB SEQT      DETERMINE IF USER-DEFINED TMT 
      SLB,RSS       DIFFERENT CHECKS FOR 7900-7905/7920 
      JMP F$T10     7905/7920 
      LDB A,I       GET WORD 1
      SSB           IF NEGATIVE, THERE'S AN EXTRA WORD
      INA 
* 
F$T11 LDB LLEN      # WORDS TO GET
      CMB,INB 
      STB LCNT      LOOP COUNTER
      LDB \BUFA 
      STB BPTR      BUFFER POINTER
      RSS 
F$T8  ISZ BPTR      NEXT LOCATION 
      LDB A,I 
      STB BPTR,I    STORE WORD
      INA           INCRMENT MEMORY ADDRESS 
      ISZ LCNT      DONE? 
      JMP F$T8      NO
      LDA \BUFA 
      STA BPTR
      ISZ F$TB
      JMP F$TB,I
* 
F$T10 LDB A,I       CHECK WORD 1
      SSB,RSS       IF POSITIVE,THERE'S AN EXTRA WORD 
      INA 
      JMP F$T11 
* 
F$T9  LDA B,I       TRANSLATE THE DISK
      ALF,ALF        ADDRESS TO 
      RAL 
      AND B377
      STA LTRK       TRACK AND
      LDA B,I 
      AND B177
      STA LSEC       SECTOR 
* 
      JSB READD     READ IT 
      LDA \BUFA 
      INA           SKIP EXTRA WORD 
      STA BPTR
      ISZ F$TB
      JMP F$TB,I
* 
ABF$  LDA P28 
      LDB MES30 
      JSB \DSPL 
      JMP \XOUT      TERMINATE SWTCH
      SPC 3 
#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
.1    ASC 1,1 
.2    ASC 1,2 
MES30 DEF *+1 
      ASC 28,SOURCE SUBCHANNEL NOT FOUND ON A SYSTEM TRACK MAP TABLE
      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) 
*      VERIFY THAT A FILE DIRECTORY SPECIFICATION ENTRY 
*             EXISTS ON THIS TRACK
*      VERIFY THAT A TRACK 0 SECTOR 0 BOOTSTRAP EXISTS
*             AT THE FIRST PHYSICAL TRACK/CYLINDER OF 
*             DESTINATION SYSTEM
* 
* 
*      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 CARTRIDGE 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 NOTFS     LU WORD < 0 
      LDB N64 
      ADB A 
      SSB,RSS 
      JMP NOTFS     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 NOTFS     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 NOTFS     INVALID 
      ISZ TEMP2 
      JMP CHCD2     CHECK NEXT WORD 
      ISZ BPTR      NEXT ENTRY WORD 0 
      ISZ TEMP1     LAST ENTRY (31)?
      JMP CHCD0     NO,CONTINUE 
* 
CHCD3 LDA D.LT      (WAS INITIALLY -1)
      SSA 
      JMP NOTFS     NEVER SET BY A LU 2 
      LDA BF124 
      SZA 
      JMP NOTFS     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 
* 
      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 
      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 
      RSS            IN CD FOR LU 2 
      JMP NOTFS     INVALID 
* 
      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 
* 
* 
*  VERIFY THAT A TRACK 0 SECTOR 0 BOOTSTRAP EXISTS AT THE 
*  DESTINATION SYSTEM'S PHYSICAL LOCATION OF LOGICAL TRACK 0
*  SECTOR 0 
* 
      LDB \BUFA     READ(HOPEFULLY) THE TRACK 0,SECTOR 0
      STB BPTR       BOOTSTRAP
      CCE 
      CLA 
      STA \TRAK 
      STA \SECT 
      JSB DISKD 
* 
      CCA 
      JSB VT0S0     VERIFY ITS EXISTENCE
      JMP NOTFS     NO GOOD 
* 
      LDA BF99        TBASE (WORD 100 OF BOOTSTRAP) IS THE
      CPA \DFTR        PHYSICAL LOCATION (TRACK OR CYLINDER) OF 
      RSS              TRACK 0 AT THE TARGET - MUST BE EQUAL
      JMP NOTFS        TO THAT OF DESTINATION TRACK 0 
* 
      LDA DEQT      FURTHER CHECKS FOR A 7905/7920 SYSTEM 
      SLA            REPLACEMENT
      JMP VOUT
* 
      LDA BF97        GET NUMBER OF SURFACES
      CPA \DNSU      SAME AS DESTINATION? 
      RSS 
      JMP NOTFS     NO
      LDA BF98        GET STARTING HEAD # 
      CPA \DSHD      SAME AS DESTINATION? 
      RSS 
      JMP NOTFS     NO
* 
VOUT  ISZ VFYSY     LOOKS VALID 
      JMP VFYSY,I 
      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
BF97  EQU BUFR+147B  # SURFACES IN 7905 BOOT EXTENSION
BF98  EQU BUFR+150B  STARTING HEAD IN 7905 BOOT EXTENSION 
BF99  EQU BUFR+143B  FIRST TRACK IN BOOT EXTENSION
BF124 EQU BUFR+124
      SKP 
*  VERIFIES THE EXISTENCE OF A TRACK 0, SECTOR 0 BOOTSTRAP
* 
*  CALLING SEQUENCE:  (A) = -1 WHERE II/III/IV BOOT EXTENSION IS OKAY 
*                         =  0 WHERE RTE-IV BOOT EXTENSION IS REQUIRED
* 
* 
*  RETURN: (P+1)  NOT A BOOTSTRAP 
*          (P+2)  YES, ONE EXISTS 
* 
VT0S0 NOP 
      STA STDSK     SAVE FLAG IN TEMPORARY
* 
      LDB BPTR      TRY FOR AN RTE-IV SYSTEM FIRST
      ADB B155      COMPARE WORDS:
      LDA B,I 
      CPA WD155     WORD 155
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD156     WORD 156
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD157     WORD 157
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD160     WORD 160
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD161     WORD 161
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      INB           SKIP WORD 162 
      LDA B,I 
      CPA WD163     WORD 163
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD164     WORD 164
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD165     WORD 165
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD166     WORD 166
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD167     WORD 167
      INB,RSS 
      JMP BE23      NO, TRY A II/III
      LDA B,I 
      CPA WD170     WORD 170
      RSS 
      JMP BE23      NO, TRY A II/III
      ISZ VT0S0     FOUND ONE 
      JMP VT0S0,I   SO EXIT 
* 
BE23  ISZ STDSK     IS A II/III EXTENSION ALLOWED?
      JMP VT0S0,I   NO, SO TAKE FAILURE EXIT
* 
      LDB BPTR      CHECK MATCH ON WORDS 3,4,5(ALL SAME),6,7
      ADB P2
      LDA B,I        14,15,16,17,20 
      CPA WD345     WORD 3
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD345     WORD 4
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD345     WORD 5
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD6       WORD 6
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD7       WORD 7
      RSS 
      JMP VT0S0,I   NO
      ADB P5
      LDA B,I 
      CPA WD14      WORD 14 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD15      WORD 15 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD16      WORD 16 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD17      WORD 17 
      INB,RSS 
      JMP VT0S0,I   NO
      LDA B,I 
      CPA WD20      WORD 20 
      RSS 
      JMP VT0S0,I   NO
      ISZ VT0S0 
      JMP VT0S0,I   OK!!!!! 
      SPC 2 
WD345 OCT 017506    BOOTSTRAP WORDS 3,4,& 5 
WD6   OCT 124003        "     WORD 6
WD7   OCT 002011        "     WORD 7
WD14  OCT 003304        "     WORD 14 
WD15  OCT 040001        "     WORD 15 
WD16  OCT 005225        "     WORD 16 
WD17  OCT 106702        "     WORD 17 
WD20  OCT 106602        "     WORD 20 
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
                                                                                                                                                                                                                                  