ASMB,Q,R,C
      HED SWTCH - TRANSFERS FILE CONTAINING RTE-IV SYSTEM GENERATED ONLINE
      NAM SWTCH,3,10 92067-16513 REV.2001 791022
      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-18513 
*     BINARY:         92067-16513 
*     WRITTEN BY:     KFH,JJC 
* 
****************************************
      SPC 2 
* 
* TURN - ON SEQUENCE: 
* 
*  RU,SWTCH,FNAME:SC:CR,CHAN/DISC LU,SUBCH/UNIT/ADDR,AUTO,FILES,TYPE6,INIT
* 
*  WHERE: 
* 
*  FLNAME:SC:CR  IS THE ABSOLUTE OUTPUT FILE NAME OF THE NEW SYSTEM 
*  CHAN          7900 DISC ONLY: <OCTAL TARGET SELECT CODE>"B"
*                OR 
*  DISC LU       7905/05/20/25(H) DISCS: DUMMY LU THAT POINTS AT DRIVER 
*  SUBCH         IS THE TARGET 7900 SUBCHANNEL
*                OR 
*  UNIT          IS THE TARGET 7905/06/20/25 UNIT 
*                OR 
*  ADDR          IS THE HPIB SELECT ADDRESS 
*  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 
*  INIT          IS Y/N, FOR INITIALIZING ANY ADDITIONAL SUBCHANNELS
     SPC 2
* 
* 
* THE ON-LINE RTE GENERATOR PRODUCES AN FMP FILE CALLED THE 
* ABSOLUTE OUTPUT FILE WHICH CONTAINS A COMPLETE RTE-IV+
* SYSTEM FOR THE SPECIFIC DISC CONFIGURATION AS SPECIFIED AT
* GENERATION TIME.  SWTCH COPIES THE FILE ONTO THE SPECIFIED
* DISC SELECT CODE AND SUBCHANNEL FOR 7900 TYPE DISCS. SWTCH
* CONFIGURES ITS OWN DRIVER TO THIS SELECT CODE.  IN THE CASE OF
* ALL TYPE 32 DISCS (IE. 7905/05/20/25 (H)) SWTCH REQUIRES A
* DUMMY DISC LU WHICH POINTS AT THE CORRECT DRIVER IN THE HOST
* SYSTEM. SWTCH THEN CALLS THE ON-LINE DRIVER VIA THE DRIVER
* LIBRARY SUBROUTINES TO DO THE NECESSARY I/O TO THE TARGET DISC. 
* 
* 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,\TDLU,\TSUB,\DUNT,\D#ST,\D#WT 
      ENT \INIT,\LNTH 
      ENT \BUFI,\BUFA,\XOUT,\SAVE 
      ENT \TRAK,\SECT 
      ENT \CVAS,\CLEN,\DSPL,\BLIN,\RDIN,\DFLT 
      ENT \FFMP,\STRK 
      ENT \BOOT,\TMT,\LU2,\MODE 
* 
*  EXTERNAL ENTRY POINTS
* 
      EXT RMPAR,EXEC,$LIBR,SEGLD
      EXT OPEN,READF,LOCF,CLOSE 
      EXT $LIBR,$LIBX 
* 
      EXT \DSK0,\DSK5 
      EXT \INP0,\INT0 
      EXT \STD0 
      EXT CNUMD,GETST 
      EXT \RET
      EXT \FLGT,\SETD,\BADH 
      EXT EQTRQ,\GDMA,\RDMA,$DATC 
* 
      SPC 2 
A     EQU 0 
B     EQU 1 
      SUP 
      SKP 
*                HEADER RECORD #1 FORMAT
* 
* FOR A 7905/6/20/25(H) SYSTEM: 
* 
*        ------------------------------------ 
*        !     # 64-WORD SECTORS/TRACK      ! 
*        ------------------------------------ 
*        !       FIRST CYLINDER #           !        ONE 5-WORD 
*        ------------------------------------ 
*        ! # SUFACES ! STARTING HEAD!UNIT/AD!        ENTRY FOR
*        ------------------------------------ 
*        !       NUMBER OF TRACKS           !        SUBCHANNELS
*        ------------------------------------ 
*        !100!UNIT(3)!00 !    #SPARES(8)    !        0 THRU 31
*        ------------------------------------ 
*        <- HPIB DISCS -> 
*               ONLY
* 
* FOR A 7900 SYSTEM:
* 
*        ------------------------------------ 
*        !       FIRST TRACK #              !        SUBCHANNEL 0 
*        ------------------------------------ 
*                        .                           SUBCHANNELS 1
*                        .
*                        .                           THRU 7 
*        ------------------------------------ 
*        !       NUMBER OF TRACKS           !        SUBCHANNEL 0 
*        ------------------------------------ 
*                        .                           SUBCHANNELS 1
*                        .
*                        .                           THRU 7 
      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  !1! SYSTEM SUBCHANNEL# BIT 15=HPIB ! 
*        ------------------------------------ 
*    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 #63
*        ------------------------------------ 
      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 
IBBUF BSS 16        COMMAND BUFFER FOR DRIVER LIBRARY 
BUFR  BSS 128       BUFFER FOR MAXIMUM SIZE TRACK (8192 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 512+BUFR-*   NEED TO READ IN 4 RECORDS AT VERF1 
      SPC 2 
MES3  DEF *+1 
      ASC 14,FILE NAME OF NEW RTE SYSTEM? 
MES4  DEF *+1 
      ASC 16,ILLEGAL FILE NAME - FMP ERR XXXX 
MES4A DEF MES4+15 
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 4,ILLEGAL 
MS12  ASC 25,TARGET SELECT CODE FOR NEW SYSTEM?  (XX OR " "CR)
MES12 DEF MS12
MSS12 DEF *+1 
      ASC 25,TARGET DISC LU FOR NEW SYSTEM?  (XX) 
MES13 DEF *+1 
      ASC 18,TARGET ADDRESS/UNIT/PLATTER FOR NEW
      ASC 10,SYSTEM? (X OR " "CR) 
MES16 DEF *+1 
      ASC 23,NOW IS THE TIME TO INSERT CORRECT CARTRIDGE IN 
MES17 DEF *+1 
      ASC 25,TARGET ADDRESS/UNIT/PLATTER.   (" "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 23, INFORMATION STORED ON ADDRESS/UNIT/PLATTER XX 
      ASC 13, OF TARGET SELECT CODE  XX 
MS23A DEF MES23+23
MS23B DEF MES23+36
MS23C DEF *+1 
      ASC 9, WILL BE DESTROYED
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,DISC IN HOST SYSTEM DRIVE WILL BE OVERLAID.
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 20,TARGET ADDRESS/UNIT XX FOR SUBCHANNELS 
MS36A ASC 24, 
      ASC 20, 
      ASC 24, 
COMBL ASC 1,, 
MS36B DEF MS36A 
MES37 DEF *+1 
      ASC 20,DESTN. ADDRESS/UNIT XX FOR SUBCHANNELS 
MS37A ASC 24, 
      ASC 20, 
      ASC 24, 
MS37B DEF MS37A 
MES38 DEF *+1 
      ASC 18,TARGET ADDRESS/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,ADDR/UNIT         #SPARES
MS42A DEF MES42+6 
MS42B DEF MES42+16
MES43 DEF *+1 
      ASC 17,#SECTORS/TRACK 
MS43B DEF MES43+16
MES46 DEF *+1 
      ASC 12,OUTDATED SYSTEM SOFTWARE 
* 
SWAP0 DEF *+1 
      ASC 3,SWSG1   7900 DISK DRIVER SEGMENT
SWAP5 DEF *+1 
      ASC 3,SWSG2   TYPE 32(13037 CTRLR) & HPIB DRIVER SEGMENT
      SKP 
*  CONSTANTS
* 
B177  OCT 177 
B777  OCT 777 
B2060 OCT 20060 
* 
N6    DEC -6
N7    DEC -7
N8    DEC -8
N31   DEC -31 
N64   DEC -64 
N89   DEC -89 
N128  DEC -128
* 
P7    DEC 7 
P12   DEC 12
P13NA OCT 100015    DECIMAL 13 +100000B (NO ABORT BIT)
P14   DEC 14
P31   DEC 31
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 D1 
     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 
      INA 
      STA \MODE   SET TYPE 32 DRIVER MODE TO REG R/W
      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 D0        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 CLA,INA 
      STA \CLEN 
* 
      LDA \TSUB 
      LDB DEQT
      SLB,RSS 
      LDA \TUNT 
      LDB MS23A 
      JSB \CVAS 
* 
      LDB DEQT
      LDA \T32C     SELECT CODE IF TYPE 32 DISC 
      SLB 
      LDA \TDLU     SELECT CODE IF TYPE 31 DISC 
      LDB MS23B 
      JSB \CVAS 
      LDA P36 
      LDB MES23     "INFORMATION STORED ON ADDRESS/UNIT/... 
      JSB \DSPL     OF TARGET SELECT CODE YY WILL BE DESTROYED" 
      LDA P9
      LDB MS23C 
      JSB \DSPL 
* 
      JSB OK?       CHECK ANSWER
* 
      CLA 
      STA \SAVE     DON'T \SAVEFILES
      STA TYP6      "     "   PURGE TYPE 6'S
      JMP VFYSY,I 
* 
P36   DEC 36
* 
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 
* 
      LDA DSIB?     IS THIS AN HPIB SYSTEM??
      SLA           DSIB?=1/0=HPIB/NOT HPIB 
      JMP IBISY     YES-IBI SYSTEM
* 
      LDB BPTR
      ADB B155
      LDA P5        # WORDS FOR CHECKSUM
      JSB CHKSM 
      CPA MAGIC     DOES IT MATCH THE BOOT'S CHECKSUM 
      ISZ VT0S0     YES - INCR RETURN ADDR. 
      JMP VT0S0,I   RETURN
* 
*     CHECK OUT THE ICD BOOT EXTENSION IN THE FILE
* 
IBISY LDB BPTR
      ADB B277      OFFSET INTO THE BOOT TO 'BENTR' 
      LDA P5        # WDS FOR CHECKSUM
      JSB CHKSM     COMPUTE 5 WD CHECKSUM 
      CPA MAGIC     DOES IT MATCH MAGIC WORD??
      ISZ VT0S0       YES- INCR RETURN
      JMP VT0S0,I   RETURN
* 
* 
* 
B155  OCT 155 
B277  OCT 277 
* 
MAGIC OCT 101707    THE CHECKSUM OF 5 INSTRUCTIONS IN 
*                   THE BOOT EXTENSION
      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 
      LDA N2
      LDB \BUFI 
      JSB \RDIN     RETRIEVE ANSWER IN IBBUF
* 
      CLE           CHECK HIGH HALF FIRST 
      LDA IBBUF 
      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 IBBUF      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 
      LDA N8        MAX INPUT LENGTH
      LDB \BUFI 
      JSB \RDIN     GET RESPONSE
      JMP TARGT,I   YES, RETURN 
      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 \BUFI 
      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 
                                                                                                                                                