ASMB,R,L,C
* 
*     NAME:   COPYL 
*     SOURCE: 92071-18247 
*     RELOC:  92071-16247 
*     PGMR:   C.H.W.,D.L.M. 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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 COPYL,0  92071-16247  REV.2041  800612
* 
* 
* 
      SUP 
* 
      EXT EXEC,RMPAR,LOGLU,LIMEM,FSTAT,CNUMD,KCVT 
* 
COPYL JSB RMPAR     GET "FROM" & "TO" LU'S
      DEF *+2 
      DEF LU1 
* 
      JSB LOGLU     GET TERMINAL LU 
      DEF *+2 
      DEF DUMMY 
      STA TERLU 
* 
      LDA LU1       "FROM" LU 
      JSB STATS     GET PARAMETERS
      LDA TYPE
      STA TYPE1     SAVE DEVICE TYPE
      LDA DVTPS+6 
      STA SC.TK     # SECTORS/TRACK 
      MPY DVTPS+5    * # OF TRACKS
      CMA,INA 
      STA TSIZE     SAVE NEG TOTAL SECTORS
* 
      LDA LU2 
      JSB STATS     GET PARAMETERS FOR "TO" DISC
      LDA TYPE
      XOR TYPE1 
      AND B374C 
      SZA           BOTH DISCS OF SAME TYPE?
      JMP ERR1       NO 
      LDA DVTPS+6 
      CPA SC.TK     SECTORS/TRACK MATCH?
      RSS            YES
      JMP ERR2       NO, ERROR
      MPY DVTPS+5 
      ADA TSIZE     CHECK TOTAL # OF SECTORS
      SSA           "TO" SIZE >= "FROM" SIZE? 
      JMP ERR2       NO 
* 
      JSB LIMEM     GET START & SIZE OF 
      DEF *+4        AVAILABLE MEMORY 
      DEF ZERO
      DEF BUFAD 
      DEF #SECT 
      CLB 
      LDA #SECT 
      DIV .128      COMPUTE MAX SECTORS WHICH'LL FIT
      SZA,RSS       ANY SPACE?
      JMP ERR4       NO 
      LDB SC.TK 
NXFIT STB #SECT     # OF SECTORS WE'RE
      CMB,CLE,INB     TRYING TO FIT IN CORE 
      ADB 0 
      LDB #SECT 
      SEZ           WILL THIS MANY FIT? 
      JMP FITED      YES! 
      SLB,ERB       SKIP IF DIVISIBLE BY 2
      LDB 0         ELSE USE ALL OF AVAIL MEMORY
      JMP NXFIT       TRY AGAIN 
* 
FITED CLA 
      ASL 7         TIMES 128 
      STB SIZE      LENGTH IN WORDS 
      STA TRACK     START AT TRACK 0, 
      STA SECTR      SECTOR 0 
* 
*  SEE IF "TO" DISC LU IS MOUNTED 
      JSB FSTAT     GET MOUNTED LU'S
      DEF *+2 
      DEF BUFAD,I   USE AVAIL. MEMORY 
* 
      LDB BUFAD 
NXCK  LDA 1,I       GET NEXT IN LIST
      SZA,RSS       END OF LIST?
      JMP NEXT       YES, OK SINCE NOT MOUNTED
      CPA LU2       "TO" LU?
      JMP ERR5       YES, ERROR 
      ADB .4
      JMP NXCK
* 
*  NOW MOVE THE DATA
NEXT  LDA TSIZE 
      SZA,RSS       MORE TO DO? 
      JMP DONE       NO 
      ADA #SECT 
      SSA           LESS THAN A FULL XFER?
      JMP REMND      NO 
      LDB TSIZE 
      CMB,INB       # OF SECTORS REMAINING
      CLA 
      ASL 7         SIZE IN WDS OF LAST XFER
      STB SIZE
REMND STA TSIZE 
* 
      LDA LU1       "FROM" LU 
      JSB XFER      READ FROM DISC
      DEC 1 
* 
      LDA LU2       "TO" LU 
      JSB XFER      WRITE TO DISC 
.2    DEC 2 
* 
      CLB 
      LDA SECTR 
      ADA #SECT     BUMP TO 1ST SECTOR OF 
      DIV SC.TK      NEXT TRANSFER
      ADA TRACK     COMPUTE TRACK 
      STA TRACK 
      STB SECTR      & SECTOR 
      JMP NEXT       & DO ANOTHER 
      SPC 3 
* 
DONE  JSB MSGX      PRINT SUCCESSFUL MSG & TERM 
      DEF MSGL
* 
ERR1  JSB MSGX      NOT A DISC
      DEF EMSG1 
* 
ERR2  JSB MSGX      DISC MISMATCH 
      DEF EMSG2 
* 
ERR4  JSB MSGX      INSUFFICIENT MEMORY 
      DEF EMSG4 
* 
ERR5  JSB MSGX      "TO" DISC MOUNTED 
      DEF EMSG5 
      SPC 3 
* 
*  SUBROUTINE TO PRINT MESSAGE & TERMINATE
MSGX  NOP 
      LDB MSGX,I
      STB MSPRM+1   STORE ADDR OF LENGTH
      INB 
      STB MSPRM     STORE ADDR OF MSG 
      JSB EXEC      WRITE TO TERMINAL LU
      DEF *+5 
      DEF .2
      DEF TERLU 
MSPRM DEC 0,0 
* 
      JSB EXEC      TERMINATE 
      DEF *+2 
      DEF .6
      SPC 3 
* 
*  SUBROUTINE TO GET DEVICE PARAMETERS
STATS NOP 
      IOR BIT12     SET Z-BIT 
      STA LU
* 
      JSB EXEC      DO EXEC(13,LU)
      DEF *+7 
      DEF .13 
      DEF LU
      DEF TYPE
      DEF DUMMY 
      DEF DVTPS     3 WORD "Z"-BUFFER 
      DEF .7
      LDA TYPE
      AND B340C     ISOLATE BITS 13-11
      CPA B140C     IS IT A DISC? 
      JMP STATS,I    YES
      JMP ERR1       NO,ERROR 
      SPC 3 
* 
*  SUBROUTINE TO DO A DISC READ OR WRITE
XFER  NOP 
      STA LU#       SAVE LU 
      IOR .2770 
      STA LU
      LDA =D-3      ALLOW THREE RETRIES 
      STA RETRY     IN COUNTER
* 
XFER1 JSB EXEC
      DEF *+7 
      DEF XFER,I    PASSED CODE 
      DEF LU
BUFAD NOP           AVAIL MEMORY
      DEF SIZE
      DEF TRACK 
      DEF SECTR 
* 
      CPB SIZE      XMISSION LOG OK?
      SLA            YES, ERROR FREE? 
      JMP DSCER      NO 
XFER2 ISZ XFER
      JMP XFER,I    RETURN
* 
* DISC ERROR ROUTINE
* 
DSCER JSB RMPAR     GET RESULTS 
       DEF *+2
       DEF DSTAT
      LDA DSTAT     GET THE ERROR CODE
      AND =B77      CHECK FOR RETRY 
      CPA =B77      ??
      RSS           YES 
      JMP DKER1     NO - HARD ERROR 
      ISZ RETRY     BUMP COUNTER
      JMP XFER1     AND TRY AGAIN 
DKER1 JSB KCVT      CONVERT 
       DEF *+2
       DEF LU#
      STA LU# 
      JSB CNUMD     CONVERT TRACK 
       DEF *+3
       DEF TRACK
       DEF TRK# 
      JSB CNUMD       AND SECTOR
       DEF *+3
       DEF SECTR
       DEF SECT#
      JSB CNUMD       AND SIZE
       DEF *+3
       DEF SIZE 
       DEF SZE# 
      JSB EXEC      AND WRITE TO TERMINAL 
       DEF *+5
       DEF .2 
       DEF TERLU
       DEF DKERM
       DEF DKERL
      JMP XFER2 
DKERM ASC 11, DISC ERROR****  LU =
LU#   BSS 1 
      ASC 5,, TRACK = 
TRK#  BSS 3 
      ASC 6,, SECTOR =
SECT# BSS 3 
      ASC 5,, SIZE =
SZE#  BSS 3 
DKERL ABS *-DKERM 
      SPC 3 
* 
*  DATA AREA
* 
RETRY NOP 
TYPE  NOP 
TYPE1 NOP 
DVTPS DEC 0,0,0,0,0,0,0 
TRACK EQU DVTPS 
SECTR EQU DVTPS+1 
#SECT EQU DVTPS+2 
SIZE  NOP 
TSIZE NOP 
SC.TK NOP 
LU1   DEC 0,0,0,0,0 
LU2   EQU LU1+1 
LU    EQU LU1+2 
TERLU EQU LU1+3 
DUMMY EQU LU1+4 
DSTAT BSS 5 
* 
ZERO  DEC 0 
.4    DEC 4 
.6    DEC 6 
.7    DEC 7 
.13   DEC 13
.128  DEC 128 
.2770 OCT 27700 
BIT12 OCT 10000 
B140C OCT 14000 
B340C OCT 34000 
B374C OCT 37400 
* 
MSGL  DEC 8 
      ASC 08, COPYL COMPLETE
EMSG1 DEC 16
      ASC 16, COPYL ABORTED - WRONG DEV TYPE
EMSG2 DEC 15
      ASC 15, COPYL ABORTED - SIZE MISMATCH 
EMSG4 DEC 18
      ASC 18, COPYL ABORTED - INSUFFICIENT MEMORY 
EMSG5 DEC 17
      ASC 17, COPYL ABORTED - "TO" DISC MOUNTED 
* 
      END COPYL 
                                                                                                                                                                                                                                      