ASMB,R,L,C
*     NAME:   SNPDF 
*     SOURCE: 92070-18121 
*     RELOC:  92070-16121 
*     PGMR:   D.J.W.
* 
*  ***************************************************************
*  * (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.       *
*  ***************************************************************
* 
* 
      NAM SNPDF,7  92070-1X121  REV.1941  800325
* 
* 
*  THIS ROUTINE OPENS THE SNAPSHOT FILE.  IF NO FILE NAMR HAS 
*  YET BEEN SPECIFIED THE DEFAULT FILE NAMR  'SNAP:0:0' IS USED.
*  THE FILE IS OPENED AND THE HEADER RECORD INFORMATION READ AND
*  SAVED. 
* 
*  CALLING SEQUENCE:  JSB SNPDF 
* 
*  ON RETURN:         P+1:  A-REG = FMP ERROR CODE
*                     P+2:  NO ERROR
* 
* 
*  CHANGE 3/25/80 
*  A CHANGE WAS MADE TO CHECK THAT FREE SPACE WAS AVAILABLE 
*  BEFORE THIS FREE SPACE WAS WRITTEN INTO WITH THE SYSTEM
*  BASE PAGE VALUES.  BEFORE IF THE MEMORY WAS NOT THERE THE
*  LOADER COULD ABORT WITH A MEMORY PROTECT ERROR.
* 
* 
* 
      ENT SNPDF,STBND 
      EXT .MVW,#SENT,AB.RT,BGFW,FMPER 
      EXT FWAVB,FWSYB,FOPEN,I.ERR,LDRER 
      EXT LIMEM,LWAFS,PGLWA,POSNT,PROGT 
      EXT READF,ROM,SDCB,SNAMR,SYBP 
* 
A     EQU 0 
B     EQU 1 
* 
ASTYP DEF SNAMR+3   SNAPSHOT TYPE WORD (DIRECT) 
ASNAP DEF *+1       DEFAULT SNAPSHOT FILE NAMR
      ASC 3,SNAP    NAME
      DEC 3         TYPE WORD 
      BSS 2         SECURITY CODE AND CARTRIDGE NUMBER
ASBUF DEF *+1 
SBUF  BSS 12        SNAPSHOT LOCAL BUFFER 
COUNT BSS 1 
P2    DEC 2 
P3    DEC 3 
P6    DEC 6 
P144  DEC 144 
IOPTN OCT 1 
* 
* 
SNPDF NOP 
      LDA ASTYP,I   FIRST DETERMINE IF A SNAPSHOT HAS 
      CPA P3        BEEN NAMED
      JMP SNPD1     YES, HAS BEEN NAMED 
      LDA ASNAP     NO, MOVE DEFAULT NAMR INTO SNAMR
      LDB ASNAM 
      JSB .MVW
      DEF P6
      NOP 
* 
SNPD1 JSB FOPEN     OPEN THE FILE AND CHECK ERROR RETURN
      DEF *+5 
ASNAM DEF SNAMR+0 
      DEF SDCB+0
      DEF IOPTN 
      DEF P144
      JMP SNPDF,I   ERROR ON OPEN 
* 
*  READ SNAP HEADER RECORD INFORMATION. 
* 
      JSB READF     READ HEADER RECORD OFF SNAPSHOT 
      DEF *+6 
      DEF SDCB+0    SNAPSHOT DCB ADDRESS
      DEF I.ERR+0    ERROR PARAMETER
      DEF SBUF      SNAP BUFFER 
      DEF HDRLN     SNAP HEADER LENGTH
      DEF LEN       LENGTH READ 
* 
      SSA           FMP ERROR ? 
      JMP SNFMP     YES 
      LDB LEN       GET THE LENGTH READ 
      CPB HDRLN     IS IT THE PROPER NUMBER OF WORDS ?
      RSS           YES 
      JMP SNPIL     NO, ILLEGAL SNAP FILE 
* 
*  CALCULATE CHECKSUM VALUE AND MATCH 
* 
      LDB ASBUF     ADDRESS OF SBUF 
      LDA NSWRD     -VE NUMBER OF WORDS TO SUM
      STA COUNT     WORD COUNT
      CLA           INITIAL VALUE 
LOOP  ADA B,I       ADD VALUE INTO CHECKSUM 
      INB 
      ISZ COUNT     HAVE WE LOADED ALL ?
      JMP LOOP      NO, CONTINUE
      CPA B,I       YES, COMPARE TO CHECKSUM VALUE
      JMP OK        MATCH !!!!! 
* 
SNPIL LDA P3        CHECKSUM DOES NOT MATCH, ILLEGAL SNAPSHOT 
      JSB LDRER 
      JMP SNPDF,I   RETURN TO P+1 
* 
HDRLN DEC 12        SNAPSHOT HEADER LENGTH
NSWRD DEC -11       NEGATIVE NUMBER SNAP HEADER WORDS 
* 
OK    LDA ASBUF     SAVE THESE VALUES IN MAIN 
      LDB HEADR 
      JSB .MVW
      DEF HDRLN 
      NOP 
* 
      LDA SBUF+1    CALCULATE RECORD NUMBER OF BASE PAGE
      AND RHALF     AND THE RIGHT HALF
      LDB A 
      XOR SBUF+1    NOW GET RIGHT HALF
      ALF,ALF 
      ADA B 
      ADB SBUF      ADD IN THE NUMBER OF SYSTEM ENTRIES 
      ADB P2
      STB BPREC 
* 
* 
*  READ IN SYSTEM BASE PAGE AT END OF FREE AREA 
* 
      JSB LIMEM     GET LOADER'S MEMORY LIMITS
      DEF *+4 
      DEF ANOP
      DEF FWSYB     FIRST WORD AVAILABLE FREE SPACE 
      DEF ILMEM     NUMBER OF FREE WORDS
* 
      LDA FWSYB 
      ADA ILMEM 
      ADA N1
      STA LWAFS 
* 
      LDA FWSYB     SET A DUMMY POINTER INTO SYSTEM BASE PAGE 
      STA DMPTR 
      LDA M2000     DETERMINE AMOUNT OF SYSTEM BASE PAGE
      ADA SYBP
      STA AMNT      NEGATIVE AMOUNT VALUE 
* 
      LDB ILMEM     MAKE SURE THAT THIS MUCH IS THERE 
      ADB A 
      SSB           IF ASKED FOR MORE THAN WE HAVE AVAILABLE
      JMP ERROR     THEN USER HAS GOT TROUBLE 
* 
      CMA,INA 
      ADA FWSYB 
      STA FWAVB 
* 
      JSB POSNT     FIRST POSITION SNAP TO BASE PAGE VALUES 
      DEF *+5 
      DEF SDCB      SNAPSHOT DCB
      DEF I.ERR      ERROR PARAMETER
      DEF BPREC     RECORD NUMBER TO POSITION TO
      DEF P5        INDICATES NUR IS A RECORD NUMBER
      SSA           FMP ERROR ? 
      JMP SNFMP 
* 
REABP JSB READF     READ IN A BASE PAGE RECORD
      DEF *+6 
      DEF SDCB      SNAPSHOT DCB
      DEF I.ERR      ERROR PARAMETER
      DEF DMPTR,I   POINTER INTO FREE MEMORY
      DEF P128      LENGTH TO BE READ 
      DEF LEN       ACTUAL LENGTH READ
* 
      SSA           FMP ERROR ON READ ? 
      JMP SNFMP     YES 
* 
      LDA LEN       GET ACTUAL TRANSMISSION LOG 
      ADA AMNT      SUBTRACT VALUE FROM AMNT
      SZA,RSS       NONE LEFT TO BE READ ?
      JMP SDONE     CORRECT 
      SSA,RSS       HAVE WE READ MORE THAN EXPECTED ? 
      JMP ILSNP     YES, ILLEGAL SNAPSHOT 
      STA AMNT      NO, SET NEW REMAINING AMOUNT
      LDA DMPTR     INCREMENT DUMMY POINTER BO 200 OCTAL
      ADA P128
      STA DMPTR 
      JMP REABP     AND READ THE NEXT RECORD
* 
SDONE JSB STBND     CHECK OUT PROGRAM BOUNDS
      ISZ SNPDF     RETURN P+2
      LDA SNAMR+3 
      CCE 
      ALS,ERA 
      STA SNAMR+3 
      STA SNAMR+3 
      JMP SNPDF,I 
* 
SNFMP JSB FMPER 
      DEF SNAMR+0 
      JMP SNPDF,I 
* 
* 
ERROR LDA N5        OUTPUT THE 'OV SYM' ERROR MESSAGE 
      JSB LDRER 
      JMP AB.RT     GOT TO ABORT ON THIS ONE
N5    DEC -5
* 
ILSNP LDA P3
      JSB LDRER 
      JMP SNPDF,I 
* 
HEADR DEF #SENT+0 
ANOP  NOP 
DMPTR NOP           DUMMY POINTER VARIABLE
ILMEM NOP           NUMBER WORDS FREE MEMORY
RHALF OCT 377 
AMNT  NOP           AMOUNT BASE PAGE
BPREC NOP           FILE RECORD NUMBER OF SYSTEM BASE PAGE
P128  DEC 128 
M2000 OCT -2000 
N1    DEC -1
LEN   NOP           LENGTH READ 
P5    DEC 5 
      HED   SET UP  PROGRAM AND BASE PAGE BOUNDRIES 
* 
*  STBND SIMPLY CHECKS THE PROGRAM TYPE FLAG, 'PROGT' AND SETS
*  THE PROGRAM BOUNDRY VALUES ACCORDINGLY.  THE VALUES ARE
*       PGFWA 
*       PGLWA 
*       BPFWA 
*       BPLWA 
* 
*  CALLING SEQUENCE:
*                      JSB STBND
* 
BGPTR DEF ROM+0 
RTPTR DEF BGFW+0
ABNDS DEF PGLWA+0 
* 
STBND NOP 
      LDB PROGT     GET PROGRAM TYPE FLAG 
      LDA BGPTR     ASSUME BACKGROUND PROGRAM 
      SZB           IS THIS BACKGROUND ?
      LDA RTPTR     NO, REAL-TIME PROGRAM 
* 
*  SET PROGRAM BOUNDRIES, FIRST AND LAST WORDS
* 
      LDB ABNDS     DESTINATION ADDRESS IN MAIN 
      JSB .MVW
      DEF P5
      NOP 
* 
      JMP STBND,I 
      END 
                                                                                                                                                                                                                      