ASMB,R,L,C
      HED APLDR 91705-16108 REV A * (C) HEWLETT-PACKARD CO. 1976
      NAM APLDR,1,60 91705-16108 REV A 760224 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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 
* 
* APLDR 
* SOURCE: 91705-18108 REV.A 
* BINARY: 91705-16108 REV A 
* E. WONG, J. HARTSELL
* JULY 30, 1974 
* 
*     MODIFIED BY:  JEAN-PIERRE BAUDOUIN
*     DATE MODIFIED: DEC 1975 
* 
* 
*       RTE-C APLDR FOR SATELLITE OPERATION 
* 
      ENT APLDR 
      EXT EXEC,$LIBR,$LIBX,$PVCN
      EXT DEXEC,%LU,$XSIO,$LIST,$XEQ
      EXT %DNLD,%DLER,%PRMB 
      SUP 
* 
A     EQU 0 
B     EQU 1 
KEYWD EQU 1657B 
BPA1  EQU 1742B 
BPA2  EQU 1743B 
RTORG EQU 1746B 
RTCOM EQU 1747B 
AVMEM EQU 1751B 
BKLWA EQU 1777B 
      SUP 
* 
*   THIS VERSION OF APLDR WILL DOWN-LINK LOAD A PROGRAM 
*   FILE FROM CENTRAL IF THE LO COMMAND CONTAINS A FILE/PROG
*   NAME AND LU = 0.  IF SCHEDULED FROM CENTRAL, THE SIGN 
*   BIT OF PARAMETER 1 MUST BE SET. 
* 
*   APLDR IS SCHEDULED BY THE SYSTEM WHEN OPERATOR INPUTS 
*   ONE OF THE FOLLOWING: 
*        PL,LU
*        LO,PNAME,LU,FL,KB
*        RP,PNAME,LU,FL,KB
* 
*   THE SCHEDULE CALL PASSES THE PARAMETERS IN THE FOLLOWING
*   ORDER:
*        P1 - KEYBOARD LU # / FUNCTION CODE 
*        P2 - FILE NUMBER   / INPUT-OUTPUT LU # 
*        P3 - CHARACTER #1  / CHARACTER #2
*        P4 - CHARACTER #3  / CHARACTER #4
*        P5 - CHARACTER #5  / CHARACTER #6
* 
*   WHERE FUNCTION CODE IS: 
*        0 - PROGRAM LIST 
*        1 - LOAD PROGRAM 
*        2 - REPLACE PROGRAM
* 
* 
* 
* 
APLDR LDA DKBFN     GET ADDR OF BUFFER
      STA TEMP1     SAVE TEMPORARILY
      LDA MD5 
      STA TEMP2 
RMPLP LDA B,I       GET PARAM FROM ID SEG 
      STA TEMP1,I   SAVE IN BUFFER
      INB 
      ISZ TEMP1 
      ISZ TEMP2 
      JMP RMPLP 
* 
      CLA 
      LDB FILLU     GET FILE NO.&I/O LU 
      LSR 8          SAVE LEFT HALF 
      STB FILE       AS FILE NUMBER.
* 
      ALF,ALF       SAVE RIGHT HALF 
      STA LU         AS I/0 LU. 
* 
      CLA 
      LDB KBFUN     GET KYBD UNIT AND FUNC
      RRL 1         SIGN BIT SET IF SCHEDULED 
      XOR B1        FROM CENTRAL. SET IDEST.
      STA IDEST 
      CLE,ERB 
      LSR 8          SAVE LEFT HALF 
      SZB,RSS       IF ZERO,
      LDB CONSL      USE DEFAULT
      STB KYBDU      AS KEYBOARD UNIT.
* 
      ALF,ALF       GET FUNC FROM RIGHT HALF
      SZA,RSS       IS IT LIST?     0 
      JMP LIST
      CPA B1        IS IT LOAD?     1 
      JMP LOAD
      CPA B2        IS IT REPLACE?  2 
      JMP REPL
      JMP ABORT     NO, IT IS ERROR.
* 
DKBFN DEF KBFUN 
MD5   DEC -5
* 
      HED APLDR: LO PGM * (C) HEWLETT-PACKARD CO. 1976
LOAD  CLA 
      STA CBUSY 
      LDB %DLER      CLEAR ERROR NUMBER.
      JSB SYSET 
      JSB RMCHK     CHECK REMOTE/LOCAL LOAD.
      JMP LOAD1     LOCAL DEVICE. 
* 
      LDA NAM12     CENTRAL FILE. 
      STA FLNAM     SAVE ALL 6 CHAR AS FILE NAME. 
      LDA NAM34 
      STA FLNAM+1 
      LDA NAM50 
      STA FLNAM+2 
* 
      LDA MD5       BLANK TRAILING ASTERISKS IN 
      STA TEMP1     PROGRAM NAME PORTION (FIRST 
      LDA DFNAM     5 CHARACTERS).
      STA TEMP
      CCE 
* 
LOOP  LDA TEMP,I    PROGRAM NAME. 
      SEZ 
      ALF,ALF 
      AND B377
      CPA B52       CHECK NEXT CHAR FOR "*".
      RSS 
      JMP BUMP
* 
      LDA D10       FOUND. CONVERT TO BLANK., 
      SEZ 
      ALF,ALF 
      XOR TEMP,I
      STA TEMP,I
* 
BUMP  SEZ,RSS       GO TO NEXT CHARACTER. 
      ISZ TEMP
      CME 
      ISZ TEMP1 
      JMP LOOP
* 
LOAD1 LDA NAM12     IF NO NAME GIVEN
      SZA,RSS        SKIP DUPLIC NAME 
      JMP NODUP      CHECKING 
      JSB RMCHK     SKIP CHECK UNTIL LATER
      JMP *+2 
      JMP NODUP      IF REMOTE LOAD.
      JSB DUPID     CHECK IF DUPLICATE
       DEF NAM12     ID NAME. 
* 
NODUP JSB STRID     NOT DUPLI, FIND 
LOAD2 JSB SRCID      A BLANK
DFNUL  DEF ZERO      ID SEG.
       JMP LOADD    NO BLANK ID SEG.
       JMP LOAD2    KEEP LOOKING. 
      STA CURID     GOT IT, SAVE ADDR.
* 
LOAD3 JSB IHILO     INIT HI,LO ADDRS
      LDA DWRD1     INIT SPEC REC 
      STA WORD1      DUMMY ID ADDR. 
      LDA DWRD2 
      STA WORD2 
      LDA RSS       INITIALIZE SWITCH 
      STA ABS12     FOR SPEC. REC.
      STA LDRCT     INIT LEADER COUNT 
      STA IDOFS     INDICATE NO ABS YET.
* 
      JSB RMCHK     LEAVE LU ALONE IF 
      JMP *+2       DOWN-LINK LOAD. 
      JMP ABS0
* 
      LDA LU        GET LU PARAM, 
      SZA,RSS        IF ZERO
      LDA DINPT      USE DEFAULT
      IOR B2300      FOR THE ABS
      STA LU         INPUT UNIT.
* 
* 
* 
*       READ ABSOLUTE RECORD
* 
* 
ABS0  JSB RMCHK     CHECK FOR REMOTE/LOCAL INPUT. 
      JMP ABS03     LOCAL.
* 
      CLA           SIGNAL NEW LOAD.
      STA TEMP
      LDA %LU       LU OF CENTRAL.
      STA RMLU
      LDA XEQT,I    ID SEG ADDR OF APLDR. 
      STA IDSEG 
* 
ABS01 JSB %DNLD     REQUEST CORE IMAGE RECORD.
      DEF *+5 
      DEF TEMP      STATUS. 
      DEF ABSAD     ADDR OR ERROR CODE. 
      DEF ABSSZ     RETURNED SIZE.
      DEF FLNAM     CENTRAL FILE NAME.
* 
      LDA ABSAD     SET UP CORE ADDR FOR DATA READ. 
      STA CADR
      LDA TEMP      CHECK FOR ERRORS. 
      SSA,RSS 
      JMP ABS02     NONE. 
* 
      CPA M2
      JMP FMPER     ERROR FROM CENTRAL FMP. 
      CPA M3
      JMP STNBY     CENTRAL BUSY. 
      JMP ABS02 
* 
FMPER LDA ERR05     FMP ERROR.
      LDB ABSAD 
      CPB M6
      LDA ERR03 
      LDB DFILE 
      JSB ERROR 
      JMP ABORT 
* 
STNBY LDA CBUSY     ALREADY DISPLAYED MESSAGE?
      SZA 
      JMP ABS01     YES.
      LDA ERR06     NO. 
      LDB DFILE 
      JSB ERROR 
      CLA,INA 
      STA CBUSY 
      JMP ABS01     GO TRY AGAIN. 
* 
ABS02 CPA B1        CORE IMAGE RECORD COMING? 
      JMP ABS1      YES. CHECK BASE-PAGE/RT AREA BOUNDS.
* 
      LDB SBUF      POINT TO SPECIAL RECORD AREA. 
      STB CADR
      CPA B2        ID SEGMENT COMING?
      JMP ABS10     YES. WON'T COME BACK FOR MORE.
* 
      JMP IDERR     DONE, BUT NO ID SEG RECEIVED. 
* 
ABS03 JSB DEXEC     MAKE REQUEST
       DEF *+6       TO 
       DEF IDEST
       DEF B1        READ 
       DEF LU        ABS RECORD 
       DEF ABSBF     INTO BUF 
       DEF D64       OF MAX SIZE. 
* 
      AND B240      CHECK FOR EOF/EOT 
      SZA,RSS       IS IT EOF?
      JMP ABS0A      NO 
      LDA LDRCT      YES, IS IT 
      SZA,RSS         JUST LEADER?
      JMP LOAD5     IS EOF. 
      JMP ABS0      IGNORE LEADER 
* 
ABS0A SZB,RSS       ANYTHING TRANSMITTED? 
      JMP ABS0       NO 
* 
      STA LDRCT     SET LDRCT FOR EOT 
      LDB ABSCT     GET WORD COUNT. 
      BLF,BLF        SHIFT TO LOW BITS
      STB ABSSZ      SAVE REC SIZE
      CMB,INB 
      STB TEMP1     SAVE NEG COUNT
      LDB ABSAD     GET ADDR, START CKSM. 
      LDA DABSD 
      STA TEMP2     SET DATA ADDR.
ABS0B LDA TEMP2,I   GET A WORD
      ADB A          ADD TO CKSM
      ISZ TEMP2      BUMP TO NEXT 
      ISZ TEMP1      BUMP COUNT 
      JMP ABS0B      REPEAT TIL DONE. 
* 
      LDA TEMP2,I 
      CPA B         COMPARE CKSMS 
      JMP ABS1       MATCHES
      LDB ERR10     CHECKSUM ERROR- 
      JMP ERPR4      ERR MSG THEN ABORT 
* 
* 
* 
*       FIND WHERE ABSOLUTE RECORD FITS IN CORE 
* 
* 
ABS1  LDA ABSAD     OK, SO FETCH ADDR 
      CPA B2        IS IT SPECIAL RECORD? 
      JMP ABS12      YES
      AND BPMSK     IS IT BASE PAGE?
      CPA ABSAD 
      JMP ABS2       YES, BASE PAGE.
* 
      LDA RTORG     GET DEFAULT LOWEST ADDR 
      STA TEMP
      LDA AVMEM     GET DEFAULT HIGHEST ADDR
      STA TEMP1 
      LDA DMAIN     GET PTRS TO MAIN HI/LO
      LDB D22       SET OFFSET FOR MAIN 
      JMP ABS3       ADDRS IN ID SEG. 
* 
ABS2  LDA BPA1      GET DEFAULT LOWEST ADDR 
      STA TEMP
      LDA BPA2      GET DEFAULT HIGHEST ADDR
      STA TEMP1 
      LDA DBASE     GET PTRS TO BASE HI/LO
      LDB D24       SET OFFSET FOR BASE PAGE
* 
* 
* 
*       FIND THE HI AND LO MEMORY BOUNDS OF FREE CORE 
* 
* 
ABS3  STB IDOFS     SAVE OFFSET TO GET ADDRS
      STA TEMP4     SAVE ADDR OF LFREE
      ADA B2
      STA TEMP5     SAVE ADDR OF HFREE
      LDA TEMP
      CMA,INA       CHECK IF ABS REC < FWABP USER LINKS 
      ADA ABSAD 
      SSA 
      JMP ABS14     ABS < FWABP, ERROR
      LDA ABSAD 
      ADA ABSSZ 
      CMA,INA       CHECK IF ABS REC > LWAM USER SPACE
      ADA TEMP1 
      SSA 
      JMP ABS14     ABS > LWAM, ERROR 
      LDA TEMP4,I 
      CPA TEMP
      RSS           ADDRS ALREADY SET?
      JMP ABS6       YES, SKIP SEARCH FOR HI/LO 
* 
      JSB STRID     INIT ID SEARCH. 
ABS4  JSB SRCID     SEARCH EACH ID
       DEF ZERO      EXCEPT BLANK ONES, 
       JMP ABS6      FOR THE HI/LO
RSS    RSS           ADDRS WHICH
       JMP ABS4      DEFINE FREE CORE.
      CPA CURID     IS THIS ID FOR PRG? 
      JMP ABS4      YES, IGNORE THIS ID BOUNDS
      ADA IDOFS 
      STA TEMP      SET ADDR OF ID ADDR.
* 
      CMA           CHECK IF ID SEG > 22 WORDS
      ADA ADRID,I 
      SSA 
      JMP ABS4       NEG, IGNORE IF RTE ID SEG. 
      CLA 
      STA TEMP1     CLEAR OVERLAP FLAG
* 
      LDA TEMP,I    GET ID LOW
      CMA,INA 
      ADA ABSAD     IS ID LOW > ABS REC?
      SSA 
      JMP ABS4B      LOW>ABS, CHECK MORE
      ISZ TEMP1      LOW<=ABS, CHECK IF OVERLAP 
      JMP ABS5       BY CHECKING IF HI>=ABS 
* 
ABS4B LDA TEMP,I    GET ID LOW AGAIN
      CMA            SUBTRACT IT
      ADA TEMP5,I     FROM LAST HFREE 
      SSA             AND 
      JMP ABS5        IF IT IS
      LDA TEMP,I      LOWER THEN KEEP IT
       DST TEMP5,I    AS NEW HFREE
* 
ABS5  ISZ TEMP
      LDA TEMP,I    GET ID HIGH ADDR
      CMA,INA 
      ADA ABSAD 
      SSA,RSS       ID HIGH < ADDR OF REC?
      JMP ABS5B      HI<=ABS, CHECK MORE
      CLA,INA        HI>ABS, MIGHT OVERLAP
      CPA TEMP1     DOES ABS OVERLAP? 
      JMP ABS13      YES, GIVE OF ERR 
      JMP ABS4       NO, IGNORE 
* 
ABS5B LDA TEMP,I    GET ID HI 
      CMA,INA       SUBTRACT IT 
      ADA TEMP4,I    FROM LAST LFREE
      SSA,RSS        AND IF IT IS 
      JMP ABS4
      LDA TEMP,I     HIGHER, WE KEEP IT 
      DST TEMP4,I   AS NEW LFREE
      JMP ABS4       REPEAT FOR EACH ID 
* 
* 
* 
*       ALREADY GOT MEMORY BOUNDS; SEE IF ABS CAN FIT 
* 
* 
ABS6  LDA ABSAD     GET ADDR OF ABS REC 
      LDB ABSSZ 
      ADB A         GET ADDR OF END OF ABS REC
      JSB CKBND     CHECK BOUNDS WITH LFREE,HFREE 
       JMP ABS13     ERROR. 
* 
* 
* 
*       COPY ABS RECORD TO CORE IF WITHIN BOUNDS
* 
* 
ABS10 JSB RMCHK     CHECK FOR REMOTE/LOCAL INPUT. 
      JMP AB10A     LOCAL.
* 
      LDA %PRMB     PARMB ADDRESS 
      ADA D33       ADDR OF TIME-TAGS 
      STA TAGAD     PASS AS 2ND OPT. PARAM
* 
      JSB $LIBR     SWITCH TO PRIVILEDGED MODE. 
      NOP 
* 
      LDA ABSSZ     SET UP DATA LENGTH. 
      STA ABLEN 
* 
      CLA           PRIVILEDGED MODE. 
      STA $PVCN 
      LDA DEFX      SET UP SUSPENSION ADDR. 
      STA XSUSP,I 
* 
      JSB $XSIO     READ CORE IMAGE RECORD. 
RMLU  NOP           LU OF CENTRAL.
      DEF COMPL 
      NOP           LIST POINTER. 
      OCT 301       READ. 
CADR  NOP           "BUFFER" - BASE PG OR RT AREA.
ABLEN NOP           WORD LENGTH.
      RSS           RETURN POINT
TAGAD NOP           2ND OPT. PARAMETER= TAGS ADDRESS
* 
      LDA B102      SET UP FOR I/O SUSPEND. 
      STA FCNCD 
XLIST JSB $LIST     CALL LIST PROCESSOR.
FCNCD OCT 0         FUNCTION CODE.
IDSEG NOP           ID SEG ADDR OF APLDR. 
* 
      JMP $XEQ      GIVE UP CPU.
* 
COMPL LDA B101      SET UP FOR SCHEDULE LIST. 
      STA FCNCD 
      JMP XLIST 
* 
RETN  CLA,INA       SIGNAL CONTINUING LOAD. 
      STA TEMP
* 
      LDA CADR      IF THIS WAS DUMMY ID SEG, 
      CPA SBUF
      JMP ABS12     CALL IT QUITS, ELSE 
      JMP ABS01     GO GET MORE DATA. 
* 
AB10A LDA ABSSZ     SET UP ABSSZ
      CMA,INA        FOR TRANSFER 
      STA TEMP       OF RECORD. 
      LDA DABSD     SET UP BUFFER 
      STA BADDR      ADDR OF DATA WORDS.
      LDB ABSAD     SET UP CORE ADDR. 
ABS11 LDA BADDR,I   GET A DATA WORD.
      JSB SYSET     PUT INTO CORE.
      INB 
      ISZ BADDR 
      ISZ TEMP
      JMP ABS11     REPEAT UNTIL DONE.
      JMP ABS0      GO GET ANOTHER RECORD 
* 
* 
* 
*       PROCESS SPECIAL TRAILER RECORDS.
* 
* 
ABS12 RSS           NOP-ED AFTER 1ST ENTRY.!
      JMP AB12D     SO ONLY DO THIS ONCE. 
      LDA MD28
      STA TEMP1     SET COUNTER 
      LDB DDMID      TO CLEAR OUT 
      CLA 
AB12A STA B,I        SPECIAL RECORDS
      INB 
      ISZ TEMP1 
      JMP AB12A 
      STA ABS12     NOP SWITCH
* 
      JSB RMCHK     CHECK FOR REMOTE/LOCAL LOAD.
      JMP AB12D     LOCAL.
* 
      LDA SBUF      REMOTE: THE 18-WORD SPECIAL RECORD
      STA ABSD1     HAS BEEN READ.
      LDA M9
      STA TEMP1 
AB12B DLD ABSD1,I   MOVE TO DUMMY ID SEG AREA.
      STA WORD1,I 
      STB WORD2,I 
      ISZ ABSD1 
      ISZ ABSD1 
      ISZ WORD1 
      ISZ WORD2 
      ISZ TEMP1 
      JMP AB12B 
      JMP LOAD6     GO WIND IT UP.
* 
AB12D DLD ABSD1     PICK UP 2 DATA WORDS
      STA WORD1,I    PUT 1ST INTO DUMMY ID. 
      STB WORD2,I    PUT 2ND INTO DUMMY ID. 
      ISZ WORD1     BUMP DUMMY ID 
      ISZ WORD2      LOCATIONS. 
      JMP ABS0
* 
* 
* 
*       REACHED END-OF-FILE ON PROGRAM INPUT
* 
* 
LOAD5 LDB IDOFS     CHECK IF ANY ABS
      CPB RSS        WAS READ YET.
      JMP IDERR     ERROR IF NONE.
      LDA WORD1     SPEC REC MUST BE AT END 
      CPA DWRD2     WAS IT THERE? 
      JMP LOAD6      YES. 
IDERR LDA B5         NO.
      LDB ERR13     NO SPECIAL RECORDS, 
      JMP ERPR4     PRINT ERR MSG/ABORT 
* 
LOAD6 DLD NAM12     NAME GIVEN IN COMMAND?
      SZA,RSS 
      JMP LOAD7     NO, USE NAME FROM SPEC REC
      DST PNM12     YES, USE NAME FROM COMMAND
      LDA NAM50      GET 5TH CHAR 
      STA PNM50 
      JSB RMCHK     IF REMOTE LOAD, CHECK NAME NOW. 
      JMP LOAD8     LOCAL. DID DUP CHECK ALREADY. 
      JSB DUPID     REMOTE. NAME GIVEN IN COMMAND.
       DEF NAM12
      JMP LOAD8 
LOAD7 JSB DUPID     NAME GIVEN IN SPECIAL RECORD, 
       DEF PNM12      CHECK FOR DUPLICATE.
* 
LOAD8 LDB SZCOM     GET SIZE OF COMMON
      SZB,RSS 
      JMP LOD8A     SKIP CHECK IF NO COMMON 
      LDA FWAC      GET FWA COMMON
      CMA           SUBTR FROM
      ADA RTORG      FWA REAL-TIME COMMON 
      SSA,RSS       FWAC<RTORG? 
      JMP LOADE      YES, ERROR 
      ADB FWAC      FIND END OF COMMON
      CMB,INB        SUBTRACT FROM
      ADB AVMEM      FWA SYS MEM
      SSB           (FWAC+SZCOM)>AVMEM? 
      JMP LOADE     YES, ERROR. 
* 
LOD8A LDA DMAIN     GET FREE AREA POINTERS
      STA TEMP4      FOR THE MAIN AREA
      DLD PRGMN     GET FINAL BOUNDS OF PROG
      JSB CKBND      SEE IF FIT. (IN CASE BSS USED) 
       JMP LOADC     ERROR. 
* 
      LDA DBASE    GET FREE AREA POINTERS 
      STA TEMP4     FOR THE BASE PAGE AREA
      DLD PRGBP    GET FINAL BOUNDS OF PROG 
      JSB CKBND     SEE IF FIT. (IN CASE BSS USED)
       JMP LOADC     ERROR. 
* 
* 
* 
*       MOVE ID SEGMENT TO SYSTEM AREA
* 
* 
LOD8B LDA PNM50     GET 5TH CHAR
      AND LHALF      MASK OUT TYPE
      INA            FORCE TO TYPE 1
      STA PNM50 
      LDA MD28     DONE LOAD, COPY ID SEG.
      STA TEMP     SET UP COUNT.
      LDA DDMID     SET UP ADDR 
      STA BADDR      FOR DATA WORDS.
      LDB CURID     SET ADDR FOR CORE LOC.
      JMP *+3       DON'T MOVE LINKAGE WORD 
* 
LOAD9 LDA BADDR,I 
      JSB SYSET     MOVE A WORD TO ID SEG 
      INB 
      ISZ BADDR 
      ISZ TEMP
      JMP LOAD9     REPEAT TILL DONE. 
* 
      LDA MSG1+1    SET UP DONE 
      STA BUF        MESSAGE WITH 
      LDA MSG1+2     PROG NAME
      STA BUF+1 
      LDA DASH      INSERT DASH.
      STA BUF+2 
      LDB DWRD1+1   GET ADDR OF PROG NAME 
      LDA LINE2     GET ADDR IN MSG FOR NAME
      INA 
      CLE 
      JSB MVNAM     MOVE NAME TO MSG
      LDA D10 
      STA TEMP3 
      JSB DSPLA     DISPLAY MESSAGE 
      JMP STOP      END APLDR.
* 
* 
*      ERROR RETURNS FROM LOADING SECTION 
* 
ABS13 JSB REMER     MEMORY ERROR
      JSB IHILO     CLEAR HI,LO ADDR
      JSB RMCHK 
      JMP ABS1      GO RE-ESTABLISH HI/LO.
      JMP ABS0
* 
ABS14 LDB ERR12     ABS<FWAM OR ABS>LWAM
      JMP ERPR4      SO ABORT 
* 
LOADC LDA B,I       GET NAM12 FROM ID 
      SZA,RSS       PROG REMOVED YET? 
      JMP LOD8B      YES. 
      JSB REMER     FINAL MEMORY ERROR
      JMP LOD8A     CHECK AGAIN 
* 
LOADD LDA DBLNK     NO BLANK
      STA MT.ID+1    ID SEG 
      LDA A00       SET ZEROES IN MSG 
      STA MT.ID+2 
      LDA D11 
      LDB MT.ID     SET UP MESSAGE
ERMPR JSB STUFP     PRINT MESSAGE 
      JMP ABORT     THEN ABORT. 
* 
LOADE LDB ERR11     ABS USED TOO MUCH COMMON
ERPR4 LDA B2        GET COUNT TO
      JMP ERMPR     PRINT ERR MSG, ABORT
      SKP 
* ****************************
*       SUBROUTINES USED IN LOAD AND ABSOLUTE RECORD PROCESSORS 
* ****************************
* 
*       DUPID CHECKS FOR DUPLICATE PROGRAM NAME, ISSUES ERROR 
*       MESSAGE AND ATTEMPTS TO CHANGE PROGRAM NAME.  ABORTS IF 
*       STILL NOT UNIQUE. 
*         JSB DUPID 
*         DEF PNAME 
*         <RETURN A,B DESTROYED>
* 
DUPID NOP           SEARCH FOR DUPLICATE
      LDA DUPID,I    ID NAME. 
      STA DUPNM     SAVE ID NAME. 
      ISZ DUPID 
DUP1  JSB STRID     INIT ID SCANNER.
DUP2  JSB SRCID     FIND ID SEG 
DUPNM  NOP           WITH SAME NAME 
       JMP DUPID,I  NO DUPLICATE. 
       JMP DUP2     REPEAT TIL DONE.
      LDA ERR02     DUPLIC. PROG ERR
      LDB DUPNM 
      JSB ERROR 
* 
      LDA C$$       CHANGE NAME ONLY ONCE 
      CPA DUPNM,I    IF NAME ALREADY CHANGED, 
      JMP ABORT      THEN ABORT,
      STA DUPNM,I    ELSE SEARCH AGAIN. 
      JMP DUP1
* 
* ****************************
* 
*       SYSET SETS A WORD INTO A CORE LOCATION. 
*         LDA WORD
*         LDB ADDR
*         JSB SYSET 
*         <RETURN A,B UNCHANGED>
* 
SYSET NOP           SYSTEM WORD SETTER. 
      JSB $LIBR     TURN OFF THE
       NOP           INTER. SYS.
      STA B,I       STORE WORD INTO SYS.
      JSB $LIBX     RESTORE INTER SYS 
       DEF SYSET     AND RETURN.
* 
* *********************************** 
* 
*       IHILO INITIALIZES DEFAULT HIGH AND LOW BOUNDS 
*       OF FREE MEMORY. 
*         JSB IHILO 
*         <RETURN A,B DESTROYED>
* 
IHILO NOP           INITIALIZE HI/LO ADDRS
      LDA BKLWA      TO FIND HIGHEST
      STA HMAIN      AND LOWEST 
      LDA B1647 
      STA HBASE      ADDRS OF UNUSED
      LDA RTORG      CORE WHICH MAY BE
      STA LMAIN      USED FOR LOADING 
      LDA BPA1
      STA LBASE      ABS PROGRAMS 
      CLA 
      STA LMID
      STA HMID
      STA LBID
      STA HBID
      JMP IHILO,I   RETURN
* 
* ******************************* 
* 
*       CKBND CHECKS PROGRAM BOUNDS AGAINST THAT OF FREE
*       CORE (TEMP4 POINTS TO FREE CORE POINTERS).
*         LDA PRGLO     LOW ADDR OF CORE USED 
*         LDB PRGHI     HI ADDR 
*         JSB CKBND 
*         <ERROR RETURN>
*         <NORMAL RETURN A,B DESTROYED> 
* 
CKBND NOP           CHECK BOUNDS OF PROG
      DST TEMP       AGAINST BOUNDS OF FREE CORE
      DLD TEMP4,I   GET LFREE 
      CMA,INA        SUBTR FROM 
      ADA TEMP       LOW ADDR 
      SSA           ADDR>=LFREE?
      JMP CKBND,I    NO, ERROR
* 
      LDA TEMP4 
      ADA B2
      DLD A,I       GET HFREE 
      CMA            SUBTR FROM 
      ADA TEMP1      HI ADDR
      SSA           ADDR<=HFREE?
      ISZ CKBND     RETURN TO P+2 IF NO ERROR 
      JMP CKBND,I   RETURN TO P+1 IF ERROR
* 
* **************************
* 
*       REMER ISSUES "REM XXX" ERROR MESSAGE IF NEED TO REMOVE
*       A PROGRAM TO GET SPACE IN CORE, THEN SUSPENDS APLDR.
*       IF SPACE BELONGS TO THE SYSTEM, APLDR IS ABORTED. 
*         LDB PNAME     PROG WHICH MUST BE REMOVED
*         JSB REMER 
*         <RETURN A,B DESTROYED>
* 
REMER NOP           -REM XXXXX- ERROR 
      SZB,RSS       MEMORY ERROR. 
      JMP ABS14      OUTSIDE AVAILABLE MEM
      LDA ERR01     GIVE -REM XXXXX- MESSAGE
      JSB ERROR 
* 
      LDA IDEST     ABORT IF SCHED BY CENTRAL.
      SZA,RSS 
      JMP ABORT 
* 
      JSB RMCHK     IF DOWN-LOAD, SEND STOP.
      JMP SUSP
      LDA %LU       GET LU
      AND B77       CLEAN FOR STOP
      STA CNWD
      JSB EXEC
      DEF *+3 
      DEF B3
      DEF CNWD      SEND STOP 
* 
SUSP  JSB EXEC      CALL EXEC 
       DEF *+2        TO SUSPEND
       DEF B7         THE APLDR.
      JMP REMER,I   RETURN
* 
* ******************************
* 
* CHECK FOR DOWN-LINK LOAD FROM CENTRAL STATION DISC. 
* IF NAME GIVEN ON LO COMMAND, AND LU = 0, TAKE P+2 RETURN
* (REMOTE FILE), ELSE P+1 RETURN (LOCAL DEVICE).
* 
RMCHK NOP 
      STA TEMP7 
      LDA KBFUN     P+1 IF NOT LO COMMAND.
      AND B377
      CPA B1
      RSS 
      JMP RMCK
      LDA NAM12 
      SZA,RSS 
      JMP RMCK      P+1 IF NO NAME. 
      LDA LU
      SZA,RSS 
      ISZ RMCHK     P+2 IF LU = 0.
RMCK  LDA TEMP7 
      JMP RMCHK,I 
* 
* ******************************
* 
* 
MD28  DEC -28 
* 
B52   OCT 52        ASTERISK. 
B101  OCT 101 
B102  OCT 102 
B377  OCT 377 
B240  OCT 240 
B1647 OCT 1647
B2300 OCT 2300
* 
* 
D24   DEC 24
D33   DEC 33
D64   DEC 64
* 
XEQT  OCT 1717      ADDR OF ID SEGMENT ADDRESS. 
XSUSP OCT 101730    SUSPENSION ADDRESS. 
BPMSK OCT 1777
C$$    ASC 1,$$       NAME CHANGE CHAR. 
DASH  ASC 1,- 
* 
ABSSZ NOP 
FILE  NOP 
CURID NOP 
IDOFS NOP 
BADDR NOP 
LDRCT NOP 
WORD1 NOP 
WORD2 NOP 
DEFX  DEF RETN      POINT OF SUSPENSION FOR APLDR.
DFILE DEF FLNAM 
FLNAM BSS 3 
* 
*       DO NOT CHANGE ORDER OF FOLLOWING
* 
LMAIN NOP 
LMID  NOP 
HMAIN NOP 
HMID  NOP 
LBASE NOP 
LBID  NOP 
HBASE NOP 
HBID  NOP 
DMAIN DEF LMAIN     ADDR OF HI/LO ADDR FOR MAIN 
DBASE DEF LBASE     ADDR OF HI/LO ADDR FOR BASE PAGE
* 
* 
DWRD2 DEF DWR2,I
DWRD1 DEF *+1,I     DUMMY ID ADDRESSES
      DEF PNM12     NAM12 
      DEF PNM50     NAM50/TYPE
      DEF RESML     RESOL/MULT
      DEF HRS       HR
      DEF SEC       SEC 
      DEF PRGMN     LOW MAIN
      DEF PRGBP     LOW BASE
      DEF FWAC      FWA COMMON
DDMYD DEF JMPXF     JMP XFER
* 
DWR2  DEF PNM34     NAM34 
      DEF PRIOR     PR
      DEF SPAR1     SPARE WORD
      DEF MIN       MIN 
      DEF MSEC      MSEC
      DEF PRGM2     HMAIN 
      DEF PRGB2     HBASE 
      DEF SZCOM     SIZE COMMON 
      DEF XFER      XFER ADDR 
* 
      HED APLDR: RP PGM * (C) HEWLETT-PACKARD CO. 1976
REPL  LDA NAM12     IS IT A 
      SZA,RSS        BLANK NAME?
      JMP REPNO      YES, ERROR 
* 
REP00 JSB STRID     INIT ID SEARCH
REP01 JSB SRCID      TO FIND ID SEG 
DFNAM  DEF NAM12     WITH SAME NAME 
       JMP REPNO    NO SUCH PROG
       JMP REP01
      STA CURID     GOT IT, SAVE ID ADDR
      STB TEMP       SAVE ADDR OF ID NAME 
* 
      JSB $LIBR     TURN OFF INT. SYS.
       NOP
      ADA D8
      LDA A,I       POINT OF SUSPENSION 
      SZA            IS ZERO? 
      JMP REP03      NO, SUSPEND APLDR
      ADB B3
      LDA B,I 
      SZA           IS STATUS DORMANT?
      JMP REP03      NO, SUSPEND APLDR
      ADB B2
      LDA B,I 
      ALF,CLE,ERA 
      SEZ           IN TIME LIST? 
      JMP REP03      YES, SUSPEND APLDR 
* 
      DLD ZERO      CLEAR OUT NAME
      DST NAM12     -IN CALL SO WE CAN
      STA NAM50      USE NAME FROM ABS PROG 
      DST TEMP,I    CLEAR ID SEGMENT
      LDB TEMP
      ADB B2        FOR REPLACEMENT 
      STA B,I       BY THE RP COMMAND 
      JSB $LIBX     RESTORE INT SYS 
       DEF *+1
       DEF *+1
* 
      LDB B5        DEFAULT LU TO 5.
      LDA LU
      SZA,RSS 
      STB LU
      JMP LOAD3     GO LOAD PROGRAM.
* 
*       ERROR RETURNS FROM REPLACE
* 
REP03 JSB $LIBX     RESTORE INT SYS 
       DEF *+1
       DEF *+1
      LDA ERR04     PUT NAME INTO 
      LDB DFNAM      -OF  XXXXX- BECAUSE
      JSB ERROR      NON-ZERO SUSP OR T-LIST
* 
      LDA IDEST      ABORT IF SCHED BY CENTRAL. 
      SZA 
      JMP ABORT 
* 
      JSB EXEC      SUSPEND APLDR 
       DEF *+2
       DEF B7 
      JMP REP00     TRY TO REPLACE AGAIN
* 
REPNO LDA ERR03     NO SUCH PROG
      LDB DFNAM      PUT NAME IN ERR MSG
      JSB ERROR      PRINT ERR MSG
      JMP ABORT      THEN ABORT 
                                                                                                                