A large commit.
[pdp8.git] / sw / os8 / v3d / sources / devext / dectapes / dectape1 / ccldrv.ma
diff --git a/sw/os8/v3d/sources/devext/dectapes/dectape1/ccldrv.ma b/sw/os8/v3d/sources/devext/dectapes/dectape1/ccldrv.ma
new file mode 100644 (file)
index 0000000..558cd7b
--- /dev/null
@@ -0,0 +1,267 @@
+/OVRDRV - OVERLAY DRIVER FOR CCL
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C)  1977,1978 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f
+/OVERLAY DRIVER
+/FOR LINKER PROGRAM MODULES
+/VERSION=V3A
+
+
+/THIS SECT IS TWO LOCATIONS AND CONTAINS THE TRANSFER VECTOR TO SWAPER
+/AND A FLAG THAT INDICATES WHETHER A JMP (1) OR JMS (0) WAS PERFORMED
+/TO THE TRANSFER VECTOR
+
+/      .SECT   XFERV,Z
+/      0                       /FLAG, 1=JMP, 0=JMS
+/      SWAPER                  /TRANSFER VECTOR TO SWAP ROUTINE
+
+/THIS IS THE MAIN DRIVER SECTION
+
+       .SECT   SWAPER,R
+       .GLOBAL SWPTAB,TRANVC
+
+       .ZTERNAL XFERV
+       FIELD   1
+
+SWAP,  6102                    /VERSION NUMBER
+       DCA     AC              /SAVE CALLING AC
+       RAL
+       DCA     LINK            /AND LINK
+       RDF                     /GET CALLING DF
+       TAD     (CDF            /FORM CDF
+SWAP0, JMP     ONCE            /DO ONCE ONLY CODE - REPLACED BY DCA EXIT
+       CDF     .               /CHANGE TO THIS DATA FIELD
+       TAD I   SWAP            /GET OVERLAY,LEVEL,FIELD
+       DCA     BINDAT          /SAVE
+       ISZ     SWAP            /BUMP POINTER
+       TAD I   SWAP            /GET SUBROUTINE ADDRESS
+       DCA     XITLOC          /SAVE
+       TAD     BINDAT          /FORM CDF TO CALLED SUBROUTINE
+       AND     (7
+       RAL CLL
+       RTL
+       TAD     (CDF
+       DCA     SWAP1A          /SAVE
+       TAD     SWAP1A          /FORM CIF TO CALLED SUBROUTINE
+       IAC
+       DCA     EXIT+1          /SAVE FOR EXIT
+\f/LOAD OVERLAY OF CALLED SUBROUTINE
+
+LOAD,  TAD     BINDAT
+       AND     (1600           /EXTRACT LEVEL OF CALLED SUBROUTINE
+       RTR CLL                 /5 RIGHT
+       RTR
+       RAR
+       DCA     PNTR            /SAVE
+       TAD     PNTR
+       TAD     (SWPTAB         /COMPUTE ENTRY INTO SWAP TABLE
+       DCA     FLD             /POINTS TO FIELD OF OVERLAY
+       TAD     PNTR            /COMPUTE ENTRY INTO CURRENT OVERLAY TABLE
+       RTR CLL
+       TAD     (CURTAB
+       DCA     PNTR
+       TAD     BINDAT          /EXTRACT DESIRED OVERLAY NUMBER
+       AND     (170
+       RTR CLL                 /RIGHT 3
+       RAR
+       CIA                     /NEGATE
+       DCA     TEMP
+       TAD     TEMP
+       TAD I   PNTR            /COMPARE WITH CURRENT OVERLAY NUMBER FOR LEVEL
+       SNA CLA                 /SAME?
+       JMP     SWAP1           /YES, NO READING NEEDED
+LOAD1, TAD     TEMP            /NO, SET TO NEW
+       CIA
+       DCA I   PNTR            /OVERLAY NUMBER
+       TAD     FLD             /SET UP POINTERS TO
+       IAC
+       DCA     ADDRES          /ADDRESS
+       TAD     ADDRES
+       IAC
+       DCA     RELBLK          /RELATIVE BLOCK NUMBER
+       TAD     RELBLK
+       IAC
+       DCA     LENGTH          /LENGTH OF OVERLAY
+       TAD     TEMP            /TEST OVERLAY NUMBER
+       SNA CLA                 /0?
+       JMP     LOAD2           /YES, NO MULTIPLICATION NEEDED
+       TAD I   LENGTH          /BLOCK NUMBER = (LENGTH OF OVERLAY)
+       JMP I   .+1             /TIMES (THE NUMBER OF THE OVERLAY)
+       PATCH
+LOAD2, TAD I   RELBLK          /PLUS (RELATIVE BLOCK OF LEVEL)
+       TAD     STRBLK          /PLUS (STARTING BLOCK OF PROGRAM)
+       DCA     REDBLK          /SAVE IN CALL LOCATION
+       TAD I   ADDRES          /GET ADDRESS TO LOAD
+       DCA     REDADD          /SAVE IN CALL LOCATION
+       TAD I   FLD             /GET FIELD
+       AND     (7              /MASK
+       RTR CLL
+       RAR                     /POSITION
+\f      TAD I   LENGTH          /GET LENGTH
+       RTL
+       RTL
+       RTL
+       DCA     REDCNT          /FORM CONTROL WORD
+       CIF     0
+       JMS I   (7607           /CALL SYSTEM HANDLER TO READ IN OVERLAY
+REDCNT,        7756                    /FUNCTION CONTROL WORD (POINTS TO MREAD-1 FOR "ONCE"
+REDADD,        -7607                   /BUFFER ADDRESS (CONTAINS SYS: ENTRY POINT FOR "ONCE"
+REDBLK,        0                       /STARTING BLOCK NUMBER
+       HLT                     /ERROR RETURN ADDRESS
+
+SWAP1, TAD     XFERV           /GET JMP-JMS FLAG
+       SZA CLA                 /SET?
+       JMP     SWAP2           /YES, EXECUTE A JMP
+       CLA CLL CMA RTL         /-3
+       TAD     SWAP            /BACK UP TO CALLER'S PC
+       DCA     SWAP
+       TAD I   SWAP
+SWAP1A,        0                       /CDF TO CALLED SUBROUTINE
+       DCA I   XITLOC          /SAVE IN CALLED SUBROUTINE
+       ISZ     XITLOC          /BUMP TRANSFER ADDRESS
+       CDF     .
+       TAD     (ISZ XFERV
+       DCA I   SWAP            /SET BACK UP ENTRY IN XFER VECTOR TABLE
+SWAP2, DCA     XFERV           /CLEAR FLAG
+       TAD     LINK            /RESTORE LINK AND AC
+       RAR CLL
+       TAD     AC
+EXIT,  0                       /SET DF TO CALLING FIELD
+       0                       /SET IF TO CALLED FIELD
+       JMP I   XITLOC          /GO TO CALLED SUBROUTINE
+
+\f/VARIABLE LOCATIONS
+/SOME OF THE FOLLOWING LOCATIONS CONTAIN
+/ONCE ONLY CODE TO SET UP STARTING BLOCK
+/AND CHECK THAT FILE CAME FROM SYS:
+CURTAB=.                       /CURRENT OVERLAY IN LEVEL TABLE (8 ENTRIES)
+STRBLK=.                       /ENTRY 0 IS USED TO HOLD STARTING BLOCK OF FILE
+ONCE,  DCA     EXIT            /SAVE CALLING FIELD
+                               /ALSO ENTRY 0
+       TAD     .-1             /SET UP SO WON'T BE EXECUTED AGAIN
+                               /ALSO ENTRY 1
+       DCA     SWAP0
+                               /ALSO ENTRY 2
+       CDF     0
+                               /ALSO ENTRY 3
+       TAD I   FLD             /GET STARTING BLOCK FROM "SOFSET"
+                               /ALSO ENTRY 4
+       SNA
+                               /ALSO ENTRY 5
+       HLT                     /ERROR, K.M. PATCHES NOT IN
+                               /ALSO ENTRY 6
+       DCA     STRBLK          /SAVE
+                               /ALSO ENTRY 7
+       TAD I   REDCNT          /CHECK FILE CAME FROM SYS:
+       TAD     REDADD
+
+BINDAT,                                /CONTAINS OVERLAY,LEVEL,FIELD OF DESIRED SUBROUTINE
+       SNA CLA                 /FROM SYS: ?
+XITLOC,                                /CONTAINS LOCATION TO GO TO IN DESIRED SUBROUTINE
+       JMP     SWAP0+1         /YES, OK
+PNTR,                          /POINTS INTO CURTAB
+       HLT                     /NO, ERROR
+TEMP,                          /TEMP STORAGE
+       JMP     .-1             /DON'T ALLOW CONTINUE
+FLD,                           /POINTS TO FIELD WORD IN SWPTAB
+       7747                    /POINTER TO "SOFSET"
+
+ADDRES=REDADD                  /POINTS TO ADDRESS WORD IN SWPTAB
+RELBLK=REDBLK                  /POINTS TO RELATIVE BLOCK WORD IN SWPTAB
+LENGTH=REDCNT                  /POINTS TO LENGTH WORD IN SWPTAB
+
+AC,    0                       /SAVED AC
+LINK,  0                       /SAVED LINK
+
+       PAGE
+\f
+/PATCH TO FIX BLOCK POSITION CALCULATION
+PATCH, IAC             /CONVERT PAGES TO BLOCKS
+       CLL RAR
+       DCA     PTEMP
+       TAD     PTEMP   /MULTIPLY BLOCK LENGTH
+       ISZ I   PPNT    /BY OVERLAY NUMBER
+       JMP     .-2
+       JMP I   .+1
+       LOAD2
+PPNT,  TEMP
+PTEMP, 0
+
+
+
+/THIS AREA CONTAINS OVERLAY DATA FOR MAIN AND THE 7 LEVELS
+/THE FORMAT OF EACH ENTRY IS:
+/WORD1:        FIELD OF LEVEL
+/WORD2:        ADDRESS OF LEVEL
+/WORD3:        RELATIVE BLOCK OF 1ST OVERLAY IN LEVEL
+/WORD4:        LENGTH OF THE LEVEL (ANY AND ALL OVERLAYS-EACH)
+/      (ALL OVERLAYS IN A LEVEL ARE THE SAME LENGTH)
+
+SWPTAB,
+
+       *.+40
+
+/THIS AREA CONTAINS THE TRANSFER VECTORS FOR EACH ENTRY POINT
+/IN ALL THE OVERLAYS IN ALL THE LEVELS
+/ITS SIZE SHOULD BE MODIFIED BY THE USER
+/TO FIT THE MAXIMUM NUMBER OF TRANSFER VECTORS NEEDED
+/EACH TRANSFER VECTOR OCCUPIES 4 LOCATIONS
+/THE TABLE IS INITIALLY SET UP FOR 24(DEC) (30(OCT)) VECTORS
+/THE MAXIMUM SIZE THIS TABLE CAN BE IS 3774 (OCT) LOCATIONS FOR
+/511 (DEC) (777 (OCT)) VECTORS
+/THE FORMAT OF EACH VECTOR ENTRY IS:
+/WORD1:        ISZ     XFERV
+/WORD2:        JMS I   XFERV+1
+/WORD3:        LEVEL/OVERLAY/FIELD
+/WORD4:        ADDRESS
+
+TRANVC,
+
+       SIZE=53.        /MODIFY THIS LINE TO CHANGE THE SIZE OF THE TABLE
+                       /SET FOR 24(DEC)
+
+       *SIZE^4+.
+
+
+\f