Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /1.1 OS8 BINARY MAP (BITMAP) V4 |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1972,1973,1974,1975 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/NO CHANGES MADE FOR OS/8 V3C | |
46 | ||
47 | VERSION= 4 | |
48 | SUBVER= 01 /LOCATED AT "VERLOC" AS 60+VERSION^100+SUBVER | |
49 | ||
50 | XR= 10 | |
51 | LOADXR= 11 | |
52 | XFIELD= 20 /HOLDS FIELD WE ARE "STORING" INTO | |
53 | ORIGIN= 21 /HOLDS CURRENT ORIGIN | |
54 | OUT= 22 | |
55 | B1= 23 | |
56 | B3= 24 | |
57 | C1= 25 | |
58 | COLCTR= 27 | |
59 | WD= 30 | |
60 | WD1= 31 | |
61 | WD2= 32 | |
62 | FILPTR= 33 | |
63 | FLDNO= 35 | |
64 | ||
65 | /OS/8 EQUIVALENCES | |
66 | ||
67 | MPARAM= 7643 | |
68 | JSBITS= 7746 | |
69 | MIFILE= 7617 | |
70 | PTP= 20 | |
71 | DCB= 7760 | |
72 | ||
73 | /BUFFER AND DEVICE HANDLER ASSIGNMENTS | |
74 | ||
75 | OUCTL= 4200 | |
76 | OUBUF= 6000 | |
77 | OUDEVH= 6400 | |
78 | \f FIELD 1 | |
79 | *2000 | |
80 | ||
81 | BITMAP, JMP CALLCD | |
82 | JMP NOCD /CHAINED ENTRY POINT | |
83 | NEXTCD, TAD I (MPARAM-1 | |
84 | SPA CLA | |
85 | JMP I (BUILD /ALTMODE TERMINATES INPUT, STARTS OUTPUT | |
86 | CALLCD, JMS I (200 | |
87 | 5 /COMMAND DECODE | |
88 | 0216 /DEFAULT EXTENSION IS .BN | |
89 | NOCD, TAD (LDRPCH | |
90 | DCA OUT | |
91 | ISZ ONCE | |
92 | JMP CDCOOL | |
93 | CLA CLL CMA RTL | |
94 | CDF 0 | |
95 | AND I (JSBITS /REMOVE "DON'T CARE ABOUT CD AREA" BIT | |
96 | DCA I (JSBITS | |
97 | CDF 10 | |
98 | JMS I (CTINIT | |
99 | CDCOOL, TAD I (MPARAM+1 | |
100 | AND (100 | |
101 | SZA CLA /IS /R SWITCH ON? | |
102 | JMS I (CTINIT /YES - RE-INITIALIZE LOADER TABLES | |
103 | LD7400, 7400 | |
104 | TAD (MIFILE | |
105 | DCA FILPTR | |
106 | JMP I (NEWFIL | |
107 | ONCE, -1 | |
108 | \f/SUBROUTINE TO "LOAD" A WORD. | |
109 | /INCREMENTS TWO-BIT QUANTITY CORRESPONDING TO THE WORD. | |
110 | /FIELD 0 IS MAPPED INTO WORDS 00000-01377,FIELD 1 INTO 01400-02777 | |
111 | /FIELDS 4-7 ARE MAPPED INTO 20000-25777 | |
112 | ||
113 | LOADWD, 0 /ENTER WITH LOW 4 BITS OF ORIGIN IN AC | |
114 | CLL RAL | |
115 | TAD (BITTBL-1 | |
116 | DCA LOADXR | |
117 | TAD I LOADXR /GET WORD IN THE 3-WORD SET | |
118 | DCA LDOFST /(WHICH MAPS 16 WORDS) | |
119 | TAD I LOADXR /GET THE LOW ORDER BIT OF THE PAIR | |
120 | DCA LDBIT /WHICH MAPS THIS WORD | |
121 | TAD ORIGIN /NOW FIND OUT WHICH TRIPLEWORD TO USE | |
122 | RTL | |
123 | RTL | |
124 | AND (7407 | |
125 | TAD XFIELD | |
126 | RTL | |
127 | RTL | |
128 | CDF 0 | |
129 | RTL | |
130 | RAL | |
131 | SZL | |
132 | CDF20Y, CDF 20 /NOP'ED IF NO FIELD 2 IN MACHINE | |
133 | CLL RTR /FIELDS 4-7 MAPPED IN FIELD 2 | |
134 | DCA LTEMP | |
135 | TAD LTEMP | |
136 | CLL RAL | |
137 | TAD LTEMP | |
138 | TAD LDOFST | |
139 | DCA LTEMP | |
140 | TAD LDBIT | |
141 | CLL RAL | |
142 | TAD LDBIT | |
143 | AND I LTEMP | |
144 | SNA CLA /IF COUNT IS AT 3 (MAX), | |
145 | JMP I LOADWD /DON'T INCREMENT IT | |
146 | TAD LDBIT | |
147 | CIA | |
148 | TAD I LTEMP | |
149 | DCA I LTEMP | |
150 | RDF | |
151 | CDF 10 | |
152 | SZA CLA | |
153 | DCA I (F4FLAG /SEARCH FIELD 2 IF WE STORED THERE | |
154 | JMP I LOADWD | |
155 | LDOFST, 0 | |
156 | LDBIT, 0 | |
157 | LTEMP, 0 | |
158 | \f/BIT TABLE FOR MAPPING | |
159 | ||
160 | BITTBL, 0;2000;0;400;0;100;0;20;0;4;0;1 | |
161 | 1;2000;1;400;1;100;1;20;1;4;1;1 | |
162 | 2;2000;2;400;2;100;2;20;2;4;2;1 | |
163 | PAGE | |
164 | \fNEWFIL, TAD (7001 | |
165 | DCA HANDLR | |
166 | TAD I FILPTR | |
167 | AND (7760 | |
168 | SZA /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256 | |
169 | TAD (17 | |
170 | CLL CML RTR | |
171 | RTR | |
172 | DCA RCDCNT | |
173 | TAD I FILPTR | |
174 | ISZ FILPTR | |
175 | SNA | |
176 | JMP I (NEXTCD /FILE POINTER = 0 MEANS NO MORE INPUT FILES | |
177 | JMS I (200 | |
178 | 1 /ASSIGN | |
179 | HANDLR, 7001 /LOAD INTO 7000 IF NOT ALREADY LOADED | |
180 | JMP I (IOERR | |
181 | TAD I FILPTR | |
182 | DCA RECNO | |
183 | ISZ FILPTR | |
184 | CLA CMA | |
185 | DCA CHCNT | |
186 | DCA REOF | |
187 | TAD I (MPARAM /TEST FOR /I | |
188 | AND (10 | |
189 | SNA CLA | |
190 | JMP I (LOADER /I IS NOT ON | |
191 | JMP I (OERR /NO! | |
192 | \fGETCH, 0 /GET-NEXT-INPUT-CHARACTER ROUTINE | |
193 | JMS I (CTCTST | |
194 | ISZ JMPGET | |
195 | ISZ CHCNT | |
196 | JMPX, JMP JMPGET | |
197 | TAD REOF | |
198 | SZA CLA | |
199 | JMP I GETCH /EOF REACHED BEFORE LOGICAL END - ERROR | |
200 | CLL | |
201 | TAD RCDCNT | |
202 | TAD (6 | |
203 | SNL | |
204 | DCA RCDCNT | |
205 | SZL | |
206 | ISZ REOF | |
207 | CLL CMA CML RTR | |
208 | RTR | |
209 | RTR | |
210 | TAD (1411 | |
211 | DCA RCTL | |
212 | CIF 0 | |
213 | JMS I HANDLR | |
214 | RCTL, 0 /READ RECORDS INTO FIELD 1 | |
215 | PBUFFR, BUFFER | |
216 | RECNO, 0 | |
217 | JMP RERROR | |
218 | TAD RECNO | |
219 | TAD (6 | |
220 | DCA RECNO | |
221 | TAD (-4401 | |
222 | DCA CHCNT | |
223 | TAD PBUFFR | |
224 | DCA CHPTR | |
225 | TAD JMPX | |
226 | DCA JMPGET | |
227 | JMP GETCH+1 | |
228 | \fJMPGET, JMP . | |
229 | JMP CHAR1 | |
230 | JMP CHAR2 | |
231 | TAD JMPX | |
232 | DCA JMPGET | |
233 | TAD I CHPTR | |
234 | AND (7400 | |
235 | CLL RTR | |
236 | RTR | |
237 | TAD CHTMP | |
238 | RTR | |
239 | RTR | |
240 | ISZ CHPTR | |
241 | JMP GCHCOM | |
242 | CHAR2, TAD I CHPTR | |
243 | AND (7400 | |
244 | DCA CHTMP | |
245 | ISZ CHPTR | |
246 | CHAR1, TAD I CHPTR | |
247 | GCHCOM, AND (377 | |
248 | ISZ GETCH | |
249 | JMP I GETCH | |
250 | RERROR, SPA CLA | |
251 | JMP I (IOERR /AN ACTUAL READ ERROR - AMAZING! | |
252 | ISZ REOF | |
253 | JMP RECNO+2 | |
254 | REOF, 0 | |
255 | CHCNT, 0 | |
256 | CHPTR, 0 | |
257 | CHTMP, 0 | |
258 | RCDCNT, 0 | |
259 | \fZTST, 0 /TEST A BLOCK OF THE BITMAP FOR ALL ONES | |
260 | DCA B3 /LENGTH OF THE BLOCK IN AC | |
261 | TAD LOADXR | |
262 | DCA XR | |
263 | STA | |
264 | JMS I (XCDF | |
265 | AND I XR | |
266 | ISZ B3 | |
267 | JMP .-2 | |
268 | CDF 10 | |
269 | CMA | |
270 | SZA | |
271 | JMP I ZTST | |
272 | TAD XR | |
273 | DCA LOADXR /UPDATE LOADXR IF ALL ZEROES | |
274 | JMP I ZTST | |
275 | PAGE | |
276 | \fITSOVR, JMS ASSEMB /GET THE CHECKSUM | |
277 | CIA | |
278 | TAD LCKSUM | |
279 | SZA CLA /IS IT GOOD? | |
280 | JMP I (BADCKS /NO | |
281 | TAD I (MPARAM+1 | |
282 | AND L40 | |
283 | SNA CLA /IF /S IS NOT SET, | |
284 | JMP I (NEWFIL /ONLY ONE PROGRAM PER FILE. | |
285 | LOADER, DCA LCKSUM | |
286 | JMS GETFLD | |
287 | DCA XFIELD | |
288 | TAD (200 | |
289 | DCA ORIGIN /INITIALIZE FOR PROGRAM | |
290 | JMS I (GETCH | |
291 | JMP I (NEWFIL | |
292 | SNA | |
293 | JMP .-3 | |
294 | TAD (-200 /FIND SOME LEADER | |
295 | SZA CLA | |
296 | JMP LOADER+1 | |
297 | LEADER, JMS I (GETCH | |
298 | JMP I (NEWFIL | |
299 | SNA | |
300 | JMP LOADER+1 | |
301 | TAD (-200 /FIND END OF LEADER | |
302 | SNA | |
303 | JMP LEADER | |
304 | NEWWD, SMA /FIELD SETTING? | |
305 | JMP FIELDW /YES | |
306 | TAD (200 | |
307 | DCA WD1 /STORE 1ST CHAR | |
308 | JMS I (GETCH | |
309 | JMP I (BADINP | |
310 | DCA WD2 /2D CHAR | |
311 | JMS I (GETCH | |
312 | JMP I (BADINP | |
313 | TAD (-200 /IF THIS IS LEADER, WE HAVE THE CHECKSUM | |
314 | SNA | |
315 | JMP ITSOVR | |
316 | DCA WD | |
317 | JMS ASSEMB | |
318 | SNL /ORIGIN OR DATA? | |
319 | JMP DATAWD /DATA | |
320 | DCA ORIGIN | |
321 | JMP GETNXT | |
322 | \fDATAWD, CLA | |
323 | TAD ORIGIN | |
324 | AND (17 | |
325 | JMS I (LOADWD /GO SET THE CORRECT BIT(S) | |
326 | CDF 10 | |
327 | ISZ ORIGIN | |
328 | L40, 40 | |
329 | GETNXT, TAD WD1 | |
330 | TAD WD2 | |
331 | TAD LCKSUM | |
332 | DCA LCKSUM | |
333 | TAD WD | |
334 | JMP NEWWD | |
335 | ||
336 | ASSEMB, 0 | |
337 | TAD WD1 | |
338 | CLL RTL | |
339 | RTL | |
340 | RTL | |
341 | TAD WD2 | |
342 | JMP I ASSEMB | |
343 | ||
344 | FIELDW, TAD (-32 | |
345 | SNA | |
346 | JMP CTLZ | |
347 | TAD (-46 | |
348 | SPA | |
349 | JMP NOTXP | |
350 | DCA WD1 | |
351 | TAD WD1 | |
352 | AND (7 | |
353 | SZA CLA | |
354 | JMP NOTXP | |
355 | TAD WD1 | |
356 | AND (70 | |
357 | DCA XFIELD | |
358 | JMS I (GETCH | |
359 | JMP I (BADINP | |
360 | TAD (-200 | |
361 | SZA | |
362 | JMP NEWWD | |
363 | NOTXP, CLA | |
364 | TAD LCKSUM | |
365 | SNA CLA | |
366 | JMP LOADER | |
367 | JMP I (BADINP | |
368 | LCKSUM, 0 | |
369 | ||
370 | CTLZ, TAD LCKSUM | |
371 | SZA CLA | |
372 | JMP I (BADINP | |
373 | JMP I (NEWFIL | |
374 | \fGETFLD, 0 /ROUTINE TO CHECK FOR OPTION 0-7 | |
375 | DCA C1 /AND RETURN LOWEST-NUMBERED VALUE | |
376 | TAD I (MPARAM+2 | |
377 | AND (1774 | |
378 | SNA | |
379 | JMP I GETFLD | |
380 | RTL | |
381 | RAL | |
382 | ISZ C1 | |
383 | SNL | |
384 | JMP .-3 | |
385 | CLA CMA | |
386 | TAD C1 | |
387 | CLL RTL | |
388 | RAL | |
389 | JMP I GETFLD | |
390 | PAGE | |
391 | \fERPCH, 0 | |
392 | AND (77 /GET LOW ORDER 6 BITS | |
393 | SZA | |
394 | JMP NZCHAR | |
395 | JMS ERR | |
396 | FILMSG, TEXT /, FILE 0/ | |
397 | JMP I (BITMAP | |
398 | NZCHAR, TAD (240 | |
399 | AND (77 | |
400 | TAD (240 | |
401 | JMS I OUT /PRINT | |
402 | JMP I ERPCH /AND RETURN | |
403 | ||
404 | LDRPCH, 0 | |
405 | TLS | |
406 | TSF | |
407 | JMP .-1 | |
408 | CLA | |
409 | JMP I LDRPCH | |
410 | ||
411 | ERR, 0 | |
412 | CLA | |
413 | CDF 10 | |
414 | TAD I (FILPTR /ZERO CHAR GETS REPLACED BY "FILE #" | |
415 | TAD (322 /MAGIC NUMBER | |
416 | CLL CML RAR /AC NOW CONTAINS " #" | |
417 | DCA FILMSG+3 | |
418 | ERRLUP, TAD I ERR | |
419 | SNA | |
420 | JMP EOMESG /MESSAGE MUST BE EVEN NUMBER OF CHARS LONG | |
421 | RTR | |
422 | RTR | |
423 | RTR | |
424 | JMS ERPCH | |
425 | TAD I ERR | |
426 | JMS ERPCH | |
427 | ISZ ERR | |
428 | JMP ERRLUP | |
429 | EOMESG, JMS I (ECRLF | |
430 | JMP I ERR /RETURN | |
431 | \fIOERR, JMS ERR | |
432 | TEXT %I/O ERROR% | |
433 | JMP I (BITMAP | |
434 | BADINP, JMS ERR | |
435 | TEXT /BAD INPUT/ | |
436 | JMP I (BITMAP | |
437 | BADCKS, JMS ERR | |
438 | TEXT / BAD CHECKSUM/ | |
439 | JMP I (BITMAP | |
440 | NULERR, JMS ERR | |
441 | TEXT /NO INPUT/ | |
442 | JMP I (BITMAP | |
443 | OUTERR, TAD (LDRPCH | |
444 | DCA OUT | |
445 | JMS ERR | |
446 | TEXT /ERROR ON OUTPUT DEVICE/ | |
447 | JMP I (CALLCD | |
448 | OERR, JMS ERR | |
449 | TEXT %NO /I!% | |
450 | JMP I (BITMAP | |
451 | \fCTINIT, 0 | |
452 | CLA CLL CML RTR | |
453 | DCA C1 | |
454 | DCA B1 | |
455 | DCA 0 /STRAIGHT-8 CROCK | |
456 | CTINLP, CDF 0 | |
457 | CLA CMA | |
458 | DCA I B1 | |
459 | CDF20X, CDF 20 | |
460 | STA | |
461 | DCA I B1 | |
462 | JMP CTFLD2 /*** THIS INSTR SKIPPED IF 8K PDP-8!!! | |
463 | DCA CDF20X /DUE TO BUG IN EXTENDED MEMORY CONTROLLER | |
464 | TAD ERR+1 /A CLA | |
465 | CDF 10 | |
466 | DCA I (CDF20Y | |
467 | CTFLD2, ISZ B1 | |
468 | ISZ C1 | |
469 | JMP CTINLP | |
470 | CDF 10 | |
471 | JMP I CTINIT | |
472 | PAGE | |
473 | \f/GENERAL OUTPUT ROUTINES | |
474 | ||
475 | /JMS I (OOPEN INITIALIZES THE OUTPUT ROUTINE | |
476 | /ERROR RETURN AC>0 IF NO OUTPUT DEVICE/FILE, AC<0 IF ERROR | |
477 | ||
478 | /JMS I (OCHAR OUTPUTS A CHARACTER | |
479 | /ERROR RETURN OUTPUT ERROR OR TOO MUCH OUTPUT | |
480 | ||
481 | /JMS I (OCLOSE CLOSES THE OUTPUT FILE | |
482 | /ERROR RETURN FILE TOO LARGE TO BE CLOSED OR OUTPUT ERROR | |
483 | ||
484 | /JMS I (OTYPE RETURNS DCB WORD OF OUTPUT DEVICE IN AC | |
485 | ||
486 | ||
487 | ||
488 | /PARAMETERS NEEDED: | |
489 | ||
490 | /OUBUF= ADDRESS OF OUTPUT BUFFER | |
491 | /OUCTL= OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE) | |
492 | /OUDEVH= ADDRESS OF PAGE FOR OUTPUT HANDLER | |
493 | ||
494 | /ASSUMES I/O MONITOR IS RESIDENT IN CORE. | |
495 | /CAN BE CALLED FROM ANY FIELD WITH BUFFERS IN ANY FIELD. | |
496 | ||
497 | OUFLD= OUCTL&70 | |
498 | \fOOPEN, 0 | |
499 | OU7600, 7600 | |
500 | TAD OU7601 | |
501 | DCA OUBLK | |
502 | TAD (OUDEVH+1 | |
503 | DCA OUHNDL | |
504 | CDF 10 | |
505 | TAD I (7604 | |
506 | SNA /IF OUTPUT HAS NO EXTENSION, | |
507 | TAD (1520 /GIVE IT THE EXTENSION .MP | |
508 | DCA I (7604 | |
509 | OUASGN, TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY | |
510 | AND (17 /STRIP OFF ANY LENGTH INFO | |
511 | SNA /IS THERE AN OUTPUT DEVICE? | |
512 | JMP USETTY /NO - INHIBIT OUTPUT | |
513 | JMS I (200 | |
514 | 1 /ASSIGN, FETCH HANDLER | |
515 | OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY | |
516 | HLT /HUH? | |
517 | OUENTR, TAD I OU7600 | |
518 | JMS I (200 | |
519 | 3 /ENTER OUTPUT FILE | |
520 | OUBLK, 7601 /REPLACED WITH STARTING BLOCK | |
521 | OUELEN, 0 /REPLACED WITH LENGTH OF HOLE | |
522 | JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH | |
523 | DCA OUCCNT | |
524 | JMS I (OUSETP | |
525 | CDF CIF 10 /RESTORE CALLING FIELDS | |
526 | JMP I OOPEN | |
527 | OEFAIL, TAD I OU7600 | |
528 | AND (7760 /GET REQUESTED LENGTH | |
529 | SNA CLA /WAS IT AN INDEFINITE REQUEST | |
530 | JMP I (OUTERR /YES - CANNOT ENTER THE FILE | |
531 | TAD I OU7600 | |
532 | AND (17 /MAKE THE REQUESTED LENGTH ZERO | |
533 | DCA I OU7600 | |
534 | JMP OUENTR /TRY, TRY AGAIN | |
535 | USETTY, DCA TTYNO | |
536 | JMS I (200 | |
537 | 12 | |
538 | 5524 | |
539 | TTYNO, 0 | |
540 | 0 | |
541 | HLT /NO TELETYPE! | |
542 | TAD TTYNO | |
543 | DCA I OU7600 | |
544 | JMP OUASGN | |
545 | \fOUTDMP, 0 | |
546 | DCA OUCTLW /STORE THE CONTROL WORD | |
547 | CDF 10 | |
548 | TAD OUCCNT | |
549 | SNA | |
550 | ISZ OUCTLW | |
551 | TAD OUBLK | |
552 | DCA OUREC /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER | |
553 | TAD OUCTLW | |
554 | CLL RTL | |
555 | RTL | |
556 | RTL | |
557 | AND (17 /COMPUTE THE NUMBER OF RECORDS | |
558 | TAD OUCCNT /UPDATE THE NUMBER OF BLOCKS IN THE FILE | |
559 | DCA OUCCNT | |
560 | TAD OUCCNT | |
561 | CLL CML | |
562 | TAD OUELEN | |
563 | SNL SZA CLA /DOES THE LENGTH EXCEED THE GIVEN LENGTH? | |
564 | JMP I (OUTERR /YES - SIGNAL OUTPUT ERROR | |
565 | CIF 0 | |
566 | JMS I OUHNDL | |
567 | OUCTLW, 0 | |
568 | OUBUF | |
569 | OUREC, 0 | |
570 | JMP I (OUTERR | |
571 | JMP I OUTDMP | |
572 | \fOCLOSE, 0 | |
573 | CDF 10 | |
574 | JMS I (OTYPE | |
575 | AND (770 | |
576 | TAD (-PTP /CHECK FOR PAPER TAPE PUNCH OUTPUT | |
577 | SZA CLA /AND SKIP ^Z OUTPUT IF TRUE | |
578 | TAD (232 /OUTPUT A ^Z | |
579 | JMS I (OCHAR | |
580 | JMS I (OCHAR | |
581 | FILLLP, JMS I (OCHAR | |
582 | JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE | |
583 | SPA CLA | |
584 | TAD (100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD | |
585 | TAD (77 /BOUNDARY - OTHERWISE A HALF-RECORD | |
586 | AND I (OUDWCT | |
587 | SZA CLA /UP TO THE BOUNDARY YET? | |
588 | JMP FILLLP /NO - FILL WITH ZEROS | |
589 | TAD I (OUDWCT /GET DOUBLEWORD COUNT LEFT | |
590 | TAD (OUCTL&3700 | |
591 | SNA /A FULL WRITE LEFT? | |
592 | JMP NODUMP /YES - DON'T DO IT - THE ^Z IS ALREADY OUT | |
593 | TAD (4000+OUFLD /PUT IN THE FIELD BITS AND THE WRITE BIT | |
594 | JMS OUTDMP | |
595 | NODUMP, TAD I OU7600 /GET THE DEVICE NUMBER | |
596 | JMS I (200 | |
597 | 4 /CLOSE THE OUTPUT FILE | |
598 | OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME | |
599 | OUCCNT, 0 | |
600 | JMP I (OUTERR | |
601 | CDF CIF 10 /RESTORE CALLING FIELDS | |
602 | JMP I OCLOSE | |
603 | PAGE | |
604 | \fOUCTMP= OUCTL&3700 | |
605 | OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS | |
606 | TAD (-OUCTMP /GET SIZE OF BUFFER IN DOUBLEWORDS | |
607 | DCA OUDWCT | |
608 | TAD (OUBUF | |
609 | DCA OUPTR /INITIALIZE WORD POINTER | |
610 | TAD OUJMPE | |
611 | DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH | |
612 | JMP I OUSETP | |
613 | ||
614 | OCHAR, 0 | |
615 | AND (377 | |
616 | DCA OUTEMP | |
617 | RDF | |
618 | TAD CDIF0 | |
619 | DCA OUCRET | |
620 | CDF OUFLD /SET DATA FIELD TO BUFFER'S FIELD | |
621 | ISZ OUJMP /BUMP THE CHARACTER SWITCH | |
622 | OUJMP, HLT /THREE WAY CHARACTER SWITCH | |
623 | JMP OCHAR1 | |
624 | JMP OCHAR2 | |
625 | OCHAR3, TAD OUTEMP | |
626 | CLL RTL | |
627 | RTL | |
628 | AND (7400 | |
629 | TAD I OUPOLD | |
630 | DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH | |
631 | TAD OUTEMP /ORDER 4 BITS OF THIRD CHAR | |
632 | CLL RTR | |
633 | RTR | |
634 | RAR | |
635 | AND (7400 | |
636 | TAD I OUPTR | |
637 | DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS | |
638 | TAD OUJMPE | |
639 | DCA OUJMP /RESET SWITCH | |
640 | ISZ OUPTR | |
641 | ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS | |
642 | JMP OUCRET | |
643 | TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE | |
644 | JMS I (OUTDMP /DUMP THE BUFFER | |
645 | JMS OUSETP /RE-INITIALIZE THE POINTERS | |
646 | JMP OUCRET | |
647 | OCHAR2, TAD OUPTR | |
648 | DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO | |
649 | ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD | |
650 | OCHAR1, TAD OUTEMP | |
651 | DCA I OUPTR | |
652 | OUCRET, HLT /RESTORE CALLING FIELDS | |
653 | JMP I OCHAR | |
654 | OUTEMP, 0 | |
655 | OUPOLD, 0 | |
656 | OUPTR, 0 | |
657 | OUJMPE, JMP OUJMP | |
658 | OUDWCT, 0 | |
659 | \fOTYPE, 0 | |
660 | RDF | |
661 | TAD CDIF0 | |
662 | DCA OTRTN | |
663 | CDF 10 | |
664 | TAD I (7600 | |
665 | AND (17 | |
666 | TAD (DCB-1 | |
667 | DCA OUTEMP | |
668 | TAD I OUTEMP | |
669 | OTRTN, HLT | |
670 | JMP I OTYPE | |
671 | ||
672 | DOBITS, 0 | |
673 | DCA B3 | |
674 | JMS I (XCDF | |
675 | TAD I LOADXR | |
676 | CDF 10 | |
677 | DCA B1 | |
678 | BITLP, TAD B1 | |
679 | CLL RTL | |
680 | DCA B1 | |
681 | TAD B1 | |
682 | CMA CML RAL | |
683 | AND (3 | |
684 | TAD (260 | |
685 | JMS I OUT | |
686 | ISZ COLCTR | |
687 | TAD COLCTR | |
688 | AND (7 | |
689 | SZA CLA | |
690 | JMP BITISZ | |
691 | TAD I (TTOFLG | |
692 | SNA CLA /IF OUTPUT IS NOT TO TTY, | |
693 | TAD (240 /PUT A SPACE AFTER EVERY GROUP OF 8 | |
694 | SZA | |
695 | JMS I OUT | |
696 | BITISZ, ISZ B3 | |
697 | JMP BITLP | |
698 | JMP I DOBITS | |
699 | \fCTCTST, 0 | |
700 | TAD (200 | |
701 | KRS | |
702 | TAD (-203 | |
703 | SNA CLA /IS THE TELETYPE BUFFER A ^C | |
704 | KSF /WITH THE TELETYPE FLAG ON? | |
705 | JMP I CTCTST /NO | |
706 | CDIF0, CDF CIF 0 /YES - GO TO MONITOR | |
707 | JMP I (7605 /THROUGH THE "DON'T SAVE CORE" RETURN | |
708 | ||
709 | PAGE | |
710 | \fBUILD, STA | |
711 | DCA SOMTHN | |
712 | TAD (-10 | |
713 | DCA FLDNO | |
714 | TAD MAPSKP | |
715 | DCA F4SKP /INITIALIZE ONCE-ONLY SKIP | |
716 | FLDLP, TAD FLDNO | |
717 | AND (4 | |
718 | CLL RTL | |
719 | TAD (CDF | |
720 | DCA CDFX /STORE A CDF 0 OR CDF 20 | |
721 | TAD FLDNO | |
722 | RTR | |
723 | SZL SPA CLA /IF FLDNO IS 0 OR 4, | |
724 | JMP NOT04 /INITIALIZE LOADXR TO 0 | |
725 | F4SKP, SKP | |
726 | F4FLAG, JMP MAPOVR /ZEROED IF INFO IN FIELD 2 | |
727 | DCA F4SKP | |
728 | STA | |
729 | DCA LOADXR | |
730 | NOT04, TAD (-1400 | |
731 | JMS I (ZTST | |
732 | SZA CLA /FIELD EMPTY? | |
733 | JMP NONEMP /NO | |
734 | FLDISZ, ISZ FLDNO | |
735 | JMP FLDLP | |
736 | MAPOVR, ISZ SOMTHN /WAS THERE ANY INPUT? | |
737 | MAPSKP, SKP | |
738 | JMP I (NULERR | |
739 | JMS I (ECRLF | |
740 | JMS I (ECRLF | |
741 | JMS I (OCLOSE | |
742 | CDF CIF 0 | |
743 | JMP I (7605 | |
744 | ||
745 | NONEMP, ISZ SOMTHN /HAVE WE OUTPUT ANYTHING YET? | |
746 | JMP NOTFST | |
747 | JMS I (OOPEN /NO - OPEN OUTPUT FILE NOW | |
748 | JMS I (OTYPE | |
749 | SNA CLA /SET MODE OF OUTPUT - /T INVERTS | |
750 | TAD (20 /NORMAL TTY/NO TYY DISTINCTION | |
751 | TAD I (MPARAM+1 | |
752 | AND (20 | |
753 | DCA I (TTOFLG | |
754 | TAD (OCHAR | |
755 | DCA OUT | |
756 | NOTFST, JMS I (EJECT1 /PAGE HEADING | |
757 | TAD (-100 | |
758 | DCA PAGECT | |
759 | PAGELP, TAD FLDNO | |
760 | TAD (270 | |
761 | JMS I OUT | |
762 | TAD PAGECT | |
763 | AND (70 | |
764 | CLL RTR | |
765 | RAR | |
766 | TAD (260 /OUTPUT LOC (HIGH 3 DIGITS) AT LEFT MARGIN | |
767 | JMS I OUT | |
768 | TAD PAGECT | |
769 | AND (7 | |
770 | TAD (260 | |
771 | JMS I OUT | |
772 | TAD (260 | |
773 | JMS I OUT | |
774 | TAD (260 | |
775 | JMS I OUT | |
776 | TAD (240 | |
777 | JMS I OUT | |
778 | DCA COLCTR | |
779 | TAD (-14 | |
780 | JMS I (ZTST /IF ALL 64 WORDS ARE ZERO, | |
781 | SNA CLA | |
782 | JMP NO1ND0 /DON'T PRINT LINE | |
783 | TAD (-4 | |
784 | DCA SOMTHN | |
785 | DOBTLP, TAD (-6 | |
786 | JMS I (DOBITS /OUTPUT 4 TRIPLEWORDS FOR 64 LOCATIONS | |
787 | TAD (-6 | |
788 | JMS I (DOBITS | |
789 | TAD (-4 | |
790 | JMS I (DOBITS | |
791 | ISZ SOMTHN | |
792 | JMP DOBTLP | |
793 | NO1ND0, JMS I (ECRLF | |
794 | CLA IAC | |
795 | AND PAGECT | |
796 | SZA CLA | |
797 | JMS I (ECRLF /SKIP A LINE EVERY PDP-8 PAGE | |
798 | TAD PAGECT | |
799 | TAD (41 | |
800 | SNA CLA | |
801 | JMS I (EJECT1 /NEW PAGE AT LOCATION 4000 | |
802 | ISZ PAGECT | |
803 | JMP PAGELP | |
804 | JMP FLDISZ | |
805 | PAGECT, 0 | |
806 | SOMTHN, 0 | |
807 | ||
808 | XCDF, 0 | |
809 | CDFX, HLT | |
810 | JMP I XCDF | |
811 | PAGE | |
812 | \fEJECT1, 0 | |
813 | TAD FLDNO | |
814 | TAD (4070 | |
815 | DCA FLDNUM | |
816 | TAD TTOFLG | |
817 | SZA CLA /TELETYPE STYLE OUTPUT? | |
818 | JMP EJKTTY /YES | |
819 | TAD (214 /NO - FORM FEED | |
820 | JMS I OUT | |
821 | PRTFLD, JMS I (ERR | |
822 | TEXT / BITMAP V/ | |
823 | *.-1 | |
824 | VERLOC, 60+VERSION^100+SUBVER /V5A, ETC... | |
825 | TEXT / FIELD/ | |
826 | *.-1 | |
827 | FLDNUM, TEXT / 0/ | |
828 | JMS ECRLF | |
829 | TAD TTOFLG | |
830 | SNA CLA /IF NOT TTY OUTPUT, | |
831 | JMP EJKLPT /DON'T PRINT HORIZONTAL GUIDE | |
832 | ||
833 | JMS I (ERR | |
834 | TEXT / 0000000011111111222222223333333344444444555555556666666677777777/ | |
835 | JMS I (ERR | |
836 | TEXT / 0123456701234567012345670123456701234567012345670123456701234567/ | |
837 | EJKLPT, JMS ECRLF | |
838 | JMP I EJECT1 | |
839 | \fEJKTTY, TAD (-13 | |
840 | DCA EJKTMP | |
841 | JMS ECRLF | |
842 | ISZ EJKTMP | |
843 | JMP ECRLFX | |
844 | JMS I (ERR | |
845 | TEXT /----/ | |
846 | JMS ECRLF | |
847 | JMP PRTFLD | |
848 | EJKTMP, 0 | |
849 | ||
850 | ECRLF, 0 | |
851 | TAD (215 | |
852 | JMS I OUT | |
853 | ECRLFX, TAD (212 | |
854 | JMS I OUT | |
855 | JMP I ECRLF | |
856 | ||
857 | TTOFLG, 0 /20 IF TTY-STYLE OUTPUT | |
858 | PAGE | |
859 | \f BUFFER=. | |
860 | $-$-$ | |
861 | \f |