558cd7b9a30b773c3a8c025132e6b1047bc69d45
[pdp8.git] / sw / os8 / v3d / sources / devext / dectapes / dectape1 / ccldrv.ma
1 /OVRDRV - OVERLAY DRIVER FOR CCL
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1977,1978 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
26 /
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 \f
46 /OVERLAY DRIVER
47 /FOR LINKER PROGRAM MODULES
48 /VERSION=V3A
49
50
51 /THIS SECT IS TWO LOCATIONS AND CONTAINS THE TRANSFER VECTOR TO SWAPER
52 /AND A FLAG THAT INDICATES WHETHER A JMP (1) OR JMS (0) WAS PERFORMED
53 /TO THE TRANSFER VECTOR
54
55 / .SECT XFERV,Z
56 / 0 /FLAG, 1=JMP, 0=JMS
57 / SWAPER /TRANSFER VECTOR TO SWAP ROUTINE
58
59 /THIS IS THE MAIN DRIVER SECTION
60
61 .SECT SWAPER,R
62 .GLOBAL SWPTAB,TRANVC
63
64 .ZTERNAL XFERV
65 FIELD 1
66
67 SWAP, 6102 /VERSION NUMBER
68 DCA AC /SAVE CALLING AC
69 RAL
70 DCA LINK /AND LINK
71 RDF /GET CALLING DF
72 TAD (CDF /FORM CDF
73 SWAP0, JMP ONCE /DO ONCE ONLY CODE - REPLACED BY DCA EXIT
74 CDF . /CHANGE TO THIS DATA FIELD
75 TAD I SWAP /GET OVERLAY,LEVEL,FIELD
76 DCA BINDAT /SAVE
77 ISZ SWAP /BUMP POINTER
78 TAD I SWAP /GET SUBROUTINE ADDRESS
79 DCA XITLOC /SAVE
80 TAD BINDAT /FORM CDF TO CALLED SUBROUTINE
81 AND (7
82 RAL CLL
83 RTL
84 TAD (CDF
85 DCA SWAP1A /SAVE
86 TAD SWAP1A /FORM CIF TO CALLED SUBROUTINE
87 IAC
88 DCA EXIT+1 /SAVE FOR EXIT
89 \f/LOAD OVERLAY OF CALLED SUBROUTINE
90
91 LOAD, TAD BINDAT
92 AND (1600 /EXTRACT LEVEL OF CALLED SUBROUTINE
93 RTR CLL /5 RIGHT
94 RTR
95 RAR
96 DCA PNTR /SAVE
97 TAD PNTR
98 TAD (SWPTAB /COMPUTE ENTRY INTO SWAP TABLE
99 DCA FLD /POINTS TO FIELD OF OVERLAY
100 TAD PNTR /COMPUTE ENTRY INTO CURRENT OVERLAY TABLE
101 RTR CLL
102 TAD (CURTAB
103 DCA PNTR
104 TAD BINDAT /EXTRACT DESIRED OVERLAY NUMBER
105 AND (170
106 RTR CLL /RIGHT 3
107 RAR
108 CIA /NEGATE
109 DCA TEMP
110 TAD TEMP
111 TAD I PNTR /COMPARE WITH CURRENT OVERLAY NUMBER FOR LEVEL
112 SNA CLA /SAME?
113 JMP SWAP1 /YES, NO READING NEEDED
114 LOAD1, TAD TEMP /NO, SET TO NEW
115 CIA
116 DCA I PNTR /OVERLAY NUMBER
117 TAD FLD /SET UP POINTERS TO
118 IAC
119 DCA ADDRES /ADDRESS
120 TAD ADDRES
121 IAC
122 DCA RELBLK /RELATIVE BLOCK NUMBER
123 TAD RELBLK
124 IAC
125 DCA LENGTH /LENGTH OF OVERLAY
126 TAD TEMP /TEST OVERLAY NUMBER
127 SNA CLA /0?
128 JMP LOAD2 /YES, NO MULTIPLICATION NEEDED
129 TAD I LENGTH /BLOCK NUMBER = (LENGTH OF OVERLAY)
130 JMP I .+1 /TIMES (THE NUMBER OF THE OVERLAY)
131 PATCH
132 LOAD2, TAD I RELBLK /PLUS (RELATIVE BLOCK OF LEVEL)
133 TAD STRBLK /PLUS (STARTING BLOCK OF PROGRAM)
134 DCA REDBLK /SAVE IN CALL LOCATION
135 TAD I ADDRES /GET ADDRESS TO LOAD
136 DCA REDADD /SAVE IN CALL LOCATION
137 TAD I FLD /GET FIELD
138 AND (7 /MASK
139 RTR CLL
140 RAR /POSITION
141 \f TAD I LENGTH /GET LENGTH
142 RTL
143 RTL
144 RTL
145 DCA REDCNT /FORM CONTROL WORD
146 CIF 0
147 JMS I (7607 /CALL SYSTEM HANDLER TO READ IN OVERLAY
148 REDCNT, 7756 /FUNCTION CONTROL WORD (POINTS TO MREAD-1 FOR "ONCE"
149 REDADD, -7607 /BUFFER ADDRESS (CONTAINS SYS: ENTRY POINT FOR "ONCE"
150 REDBLK, 0 /STARTING BLOCK NUMBER
151 HLT /ERROR RETURN ADDRESS
152
153 SWAP1, TAD XFERV /GET JMP-JMS FLAG
154 SZA CLA /SET?
155 JMP SWAP2 /YES, EXECUTE A JMP
156 CLA CLL CMA RTL /-3
157 TAD SWAP /BACK UP TO CALLER'S PC
158 DCA SWAP
159 TAD I SWAP
160 SWAP1A, 0 /CDF TO CALLED SUBROUTINE
161 DCA I XITLOC /SAVE IN CALLED SUBROUTINE
162 ISZ XITLOC /BUMP TRANSFER ADDRESS
163 CDF .
164 TAD (ISZ XFERV
165 DCA I SWAP /SET BACK UP ENTRY IN XFER VECTOR TABLE
166 SWAP2, DCA XFERV /CLEAR FLAG
167 TAD LINK /RESTORE LINK AND AC
168 RAR CLL
169 TAD AC
170 EXIT, 0 /SET DF TO CALLING FIELD
171 0 /SET IF TO CALLED FIELD
172 JMP I XITLOC /GO TO CALLED SUBROUTINE
173
174 \f/VARIABLE LOCATIONS
175 /SOME OF THE FOLLOWING LOCATIONS CONTAIN
176 /ONCE ONLY CODE TO SET UP STARTING BLOCK
177 /AND CHECK THAT FILE CAME FROM SYS:
178 CURTAB=. /CURRENT OVERLAY IN LEVEL TABLE (8 ENTRIES)
179 STRBLK=. /ENTRY 0 IS USED TO HOLD STARTING BLOCK OF FILE
180 ONCE, DCA EXIT /SAVE CALLING FIELD
181 /ALSO ENTRY 0
182 TAD .-1 /SET UP SO WON'T BE EXECUTED AGAIN
183 /ALSO ENTRY 1
184 DCA SWAP0
185 /ALSO ENTRY 2
186 CDF 0
187 /ALSO ENTRY 3
188 TAD I FLD /GET STARTING BLOCK FROM "SOFSET"
189 /ALSO ENTRY 4
190 SNA
191 /ALSO ENTRY 5
192 HLT /ERROR, K.M. PATCHES NOT IN
193 /ALSO ENTRY 6
194 DCA STRBLK /SAVE
195 /ALSO ENTRY 7
196 TAD I REDCNT /CHECK FILE CAME FROM SYS:
197 TAD REDADD
198
199 BINDAT, /CONTAINS OVERLAY,LEVEL,FIELD OF DESIRED SUBROUTINE
200 SNA CLA /FROM SYS: ?
201 XITLOC, /CONTAINS LOCATION TO GO TO IN DESIRED SUBROUTINE
202 JMP SWAP0+1 /YES, OK
203 PNTR, /POINTS INTO CURTAB
204 HLT /NO, ERROR
205 TEMP, /TEMP STORAGE
206 JMP .-1 /DON'T ALLOW CONTINUE
207 FLD, /POINTS TO FIELD WORD IN SWPTAB
208 7747 /POINTER TO "SOFSET"
209
210 ADDRES=REDADD /POINTS TO ADDRESS WORD IN SWPTAB
211 RELBLK=REDBLK /POINTS TO RELATIVE BLOCK WORD IN SWPTAB
212 LENGTH=REDCNT /POINTS TO LENGTH WORD IN SWPTAB
213
214 AC, 0 /SAVED AC
215 LINK, 0 /SAVED LINK
216
217 PAGE
218 \f
219 /PATCH TO FIX BLOCK POSITION CALCULATION
220 PATCH, IAC /CONVERT PAGES TO BLOCKS
221 CLL RAR
222 DCA PTEMP
223 TAD PTEMP /MULTIPLY BLOCK LENGTH
224 ISZ I PPNT /BY OVERLAY NUMBER
225 JMP .-2
226 JMP I .+1
227 LOAD2
228 PPNT, TEMP
229 PTEMP, 0
230
231
232
233 /THIS AREA CONTAINS OVERLAY DATA FOR MAIN AND THE 7 LEVELS
234 /THE FORMAT OF EACH ENTRY IS:
235 /WORD1: FIELD OF LEVEL
236 /WORD2: ADDRESS OF LEVEL
237 /WORD3: RELATIVE BLOCK OF 1ST OVERLAY IN LEVEL
238 /WORD4: LENGTH OF THE LEVEL (ANY AND ALL OVERLAYS-EACH)
239 / (ALL OVERLAYS IN A LEVEL ARE THE SAME LENGTH)
240
241 SWPTAB,
242
243 *.+40
244
245 /THIS AREA CONTAINS THE TRANSFER VECTORS FOR EACH ENTRY POINT
246 /IN ALL THE OVERLAYS IN ALL THE LEVELS
247 /ITS SIZE SHOULD BE MODIFIED BY THE USER
248 /TO FIT THE MAXIMUM NUMBER OF TRANSFER VECTORS NEEDED
249 /EACH TRANSFER VECTOR OCCUPIES 4 LOCATIONS
250 /THE TABLE IS INITIALLY SET UP FOR 24(DEC) (30(OCT)) VECTORS
251 /THE MAXIMUM SIZE THIS TABLE CAN BE IS 3774 (OCT) LOCATIONS FOR
252 /511 (DEC) (777 (OCT)) VECTORS
253 /THE FORMAT OF EACH VECTOR ENTRY IS:
254 /WORD1: ISZ XFERV
255 /WORD2: JMS I XFERV+1
256 /WORD3: LEVEL/OVERLAY/FIELD
257 /WORD4: ADDRESS
258
259 TRANVC,
260
261 SIZE=53. /MODIFY THIS LINE TO CHANGE THE SIZE OF THE TABLE
262 /SET FOR 24(DEC)
263
264 *SIZE^4+.
265
266
267 \f