ASMB,R,L
      HED READ ABS BIN FILE AND WRITE TO MEMORY 6/17/77 JCB 
* 
* *ON,PATCH,<TERM LU>,<FILE NAMR> 
* 
* FILE NAMR MUST BE ABS BINARY (TYPE 7) 
* INTERNAL CHECKSUM IS COMPUTED AND MUST MATCH CHECKSUM WORD
* 
      NAM PATCH,3,1 PROGRAM TO WRITE PATCHES INTO MEMORY FROM ABS FILE
      EXT IPUT,EXEC,OPEN,CLOSE,READF,NAMR,GETST 
A     EQU 0 
B     EQU 1 
START NOP 
      JSB GETST     GET STRING PASSED BY OPERATOR 
      DEF R1
      DEF BUFIN     INPUT BUFFER
      DEF M80       = 80 CHARACTERS (M80=-80) 
      DEF LOG 
R1    LDA D1
      STA STR       SET POINTER TO START OF BUFIN FOR NAMR
      JSB NAMR
      DEF R2
      DEF TERM      PARAMETER BUFFER
      DEF BUFIN     INPUT BUFFER
      DEF LOG 
      DEF STR 
R2    SSA 
      JMP ERR2      PARAMETER INPUT ERROR 
* 
      LDA TERM+3    GET PARAMETER TYPE
      AND D3
      CPA D1        INTEGER LU? 
      RSS           YES 
      JMP ERR2      NO PARAMETER ERROR
* 
      JSB NAMR
      DEF R3
      DEF NAME      PARMETER BUFFER 
      DEF BUFIN 
      DEF LOG 
      DEF STR 
R3    SSA 
      JMP ERR3      PARMETER INPUT ERROR
* 
      LDA NAME+3    GET PARAMETER TYPE
      AND D3
      CPA D3        ASCII FILE NAME?
      RSS           YES 
      JMP ERR2      NO. PARAMETER ERROR 
* 
      JMP BEGIN     BEGIN PROGRAM 
* 
TERM  NOP           TERMINAL LU 
NAME  NOP           FILE NAME 
      NOP 
      NOP 
PTR   NOP           POINTER TO WORD IN ABS BINARY RECORD
SEC   NOP           SECURITY CODE 
CR    NOP           CARTRIDGE REFERENCE 
VALU  NOP           VALUE OF WORD TO STORE IN MEMORY
ADDR  NOP           ADDRESS TO STORE IT AT! 
LEN   NOP           LEN OF ABS BINARY REC RETURNED HERE 
WCTR  NOP           WORD COUNT IN BINARY REC (NEG 2'S COMP) 
BEGIN JSB OPEN      COME HERE AFTER WE HAVE ALL PARAMETERS
      DEF R4        AND OPEN THE FILE 
      DEF DCB 
      DEF ERROR 
      DEF NAME
      DEF ZERO
      DEF SEC 
      DEF CR
R4    LDA ERROR 
      CPA D7        MUST BE TYPE 7 FILE (ABSOLUTE BINARY) 
      RSS 
      JMP ERR4      CLOSE FILE AND REPORT ERROR 
* 
RD    JSB READF     GET A RECORD FROM THE FILE
      DEF R5
      DEF DCB 
      DEF ERROR 
      DEF BUFIN 
      DEF D500
      DEF LEN 
R5    LDA ERROR 
      SZA 
      JMP ERR5
* 
      LDA LEN 
      SZA,RSS 
      JMP RD        IGNORE ZERO LENGTH RECORDS
* 
      SSA           EOF?
      JMP FINI      YES 
* 
      CMA,INA 
      ADA D500
      SZA,RSS       DID WE TRUNCATE THE INPUT TO THE BUF SIZE?
      JMP ERR7      YES!
* 
      LDA BUFIN+1 
      STA ADDR      SET STARTING ADDRESS FOR TARGET IN MEMORY 
      LDA BUFIN 
      ALF,ALF       GET RECORD LENGTH 
      CMA,INA 
      STA WCTR      SET WORD COUNTER NEGATIVE 
      STA B         SAVE FOR CHECKSUM COMPUTATION 
      LDA BPTR
      STA PTR       SET POINTER IN INPUT BUFFER 
      LDA ADDR      START CHECKSUM COMPUTATION
      ADA PTR,I 
      ISZ PTR 
      INB,SZB 
      JMP *-3 
* 
      CPA PTR,I     DOES CHECKSUM MATCH?
      RSS           YES 
      JMP ERR6      NO
* 
      LDA BPTR      RESET 
      STA PTR       THE BUFFER POINTER
NEXT  LDA PTR,I     GET WORD FROM INPUT BUFFER
      STA VALU
      JSB IPUT
      DEF *+3 
      DEF ADDR
      DEF VALU
      ISZ ADDR
      ISZ PTR 
      ISZ WCTR
      JMP NEXT
* 
      JMP RD
* 
ERR7  ISZ N         RECORD TOO LARGE
ERR6  ISZ N         CHECKSUM DOESN'T COMPUTE! 
ERR5  ISZ N         NOT USED
ERR4  ISZ N         FILE TYPE NOT 7 (ABS BINARY)
ERR3  ISZ N         2ND PARM NOT ASCII FILE NAME
ERR2  ISZ N         1ST PARM NOT INTEGER LU 
ERR1  ISZ N         NOT USED
      LDA N 
      ADA A60       OCTAL 60 = BASE FOR ASCII NUMBER
      STA ERN       ERROR NUMBER TO REPORT
      JSB EXEC
      DEF FINI
      DEF D2        WRITE REQUEST 
      DEF TERM      TO THIS TERMINAL
      DEF MESS      ERROR MESSAGE 
      DEF D9
FINI  JSB CLOSE 
      DEF DONE
      DEF DCB 
      DEF ERROR 
DONE  JSB EXEC
      DEF *+2 
      DEF D6
ZERO  NOP 
D1    DEC 1 
D2    DEC 2 
D3    DEC 3 
D6    DEC 6 
D8    DEC 8 
D9    DEC 9 
D7    DEC 7 
D14   DEC 14
D15   DEC 15
D500  DEC 500 
LOG   NOP 
N     NOP           ERROR # STORED HERE 
M80   DEC -80 
A60   ASC 1, 0   *
ERROR NOP 
STR   NOP 
MESS  ASC 8, PATCH ERROR :                   *
ERN   NOP           ERROR NUMBER STORED HERE IN ASCII 
BPTR  DEF BUFIN+2   START OF DATA IN ABSOLUTE BINARY RECORD 
DCB   BSS 144 
BUFIN BSS 500 
      END START 
      END$
              