1 /1.1 OS8 BINARY MAP (BITMAP) V4
11 /COPYRIGHT (C) 1972,1973,1974,1975 BY DIGITAL EQUIPMENT CORPORATION
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.
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.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
45 \f/NO CHANGES MADE FOR OS/8 V3C
48 SUBVER= 01 /LOCATED AT "VERLOC" AS 60+VERSION^100+SUBVER
52 XFIELD= 20 /HOLDS FIELD WE ARE "STORING" INTO
53 ORIGIN= 21 /HOLDS CURRENT ORIGIN
73 /BUFFER AND DEVICE HANDLER ASSIGNMENTS
82 JMP NOCD /CHAINED ENTRY POINT
83 NEXTCD, TAD I (MPARAM-1
85 JMP I (BUILD /ALTMODE TERMINATES INPUT, STARTS OUTPUT
88 0216 /DEFAULT EXTENSION IS .BN
95 AND I (JSBITS /REMOVE "DON'T CARE ABOUT CD AREA" BIT
99 CDCOOL, TAD I (MPARAM+1
101 SZA CLA /IS /R SWITCH ON?
102 JMS I (CTINIT /YES - RE-INITIALIZE LOADER TABLES
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
113 LOADWD, 0 /ENTER WITH LOW 4 BITS OF ORIGIN IN AC
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
132 CDF20Y, CDF 20 /NOP'ED IF NO FIELD 2 IN MACHINE
133 CLL RTR /FIELDS 4-7 MAPPED IN FIELD 2
144 SNA CLA /IF COUNT IS AT 3 (MAX),
145 JMP I LOADWD /DON'T INCREMENT IT
153 DCA I (F4FLAG /SEARCH FIELD 2 IF WE STORED THERE
158 \f/BIT TABLE FOR MAPPING
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
168 SZA /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256
176 JMP I (NEXTCD /FILE POINTER = 0 MEANS NO MORE INPUT FILES
179 HANDLR, 7001 /LOAD INTO 7000 IF NOT ALREADY LOADED
187 TAD I (MPARAM /TEST FOR /I
190 JMP I (LOADER /I IS NOT ON
192 \fGETCH, 0 /GET-NEXT-INPUT-CHARACTER ROUTINE
199 JMP I GETCH /EOF REACHED BEFORE LOGICAL END - ERROR
214 RCTL, 0 /READ RECORDS INTO FIELD 1
251 JMP I (IOERR /AN ACTUAL READ ERROR - AMAZING!
259 \fZTST, 0 /TEST A BLOCK OF THE BITMAP FOR ALL ONES
260 DCA B3 /LENGTH OF THE BLOCK IN AC
273 DCA LOADXR /UPDATE LOADXR IF ALL ZEROES
276 \fITSOVR, JMS ASSEMB /GET THE CHECKSUM
283 SNA CLA /IF /S IS NOT SET,
284 JMP I (NEWFIL /ONLY ONE PROGRAM PER FILE.
289 DCA ORIGIN /INITIALIZE FOR PROGRAM
294 TAD (-200 /FIND SOME LEADER
301 TAD (-200 /FIND END OF LEADER
304 NEWWD, SMA /FIELD SETTING?
307 DCA WD1 /STORE 1ST CHAR
313 TAD (-200 /IF THIS IS LEADER, WE HAVE THE CHECKSUM
325 JMS I (LOADWD /GO SET THE CORRECT BIT(S)
374 \fGETFLD, 0 /ROUTINE TO CHECK FOR OPTION 0-7
375 DCA C1 /AND RETURN LOWEST-NUMBERED VALUE
392 AND (77 /GET LOW ORDER 6 BITS
396 FILMSG, TEXT /, FILE 0/
402 JMP I ERPCH /AND RETURN
414 TAD I (FILPTR /ZERO CHAR GETS REPLACED BY "FILE #"
415 TAD (322 /MAGIC NUMBER
416 CLL CML RAR /AC NOW CONTAINS " #"
420 JMP EOMESG /MESSAGE MUST BE EVEN NUMBER OF CHARS LONG
446 TEXT /ERROR ON OUTPUT DEVICE/
455 DCA 0 /STRAIGHT-8 CROCK
462 JMP CTFLD2 /*** THIS INSTR SKIPPED IF 8K PDP-8!!!
463 DCA CDF20X /DUE TO BUG IN EXTENDED MEMORY CONTROLLER
473 \f/GENERAL OUTPUT ROUTINES
475 /JMS I (OOPEN INITIALIZES THE OUTPUT ROUTINE
476 /ERROR RETURN AC>0 IF NO OUTPUT DEVICE/FILE, AC<0 IF ERROR
478 /JMS I (OCHAR OUTPUTS A CHARACTER
479 /ERROR RETURN OUTPUT ERROR OR TOO MUCH OUTPUT
481 /JMS I (OCLOSE CLOSES THE OUTPUT FILE
482 /ERROR RETURN FILE TOO LARGE TO BE CLOSED OR OUTPUT ERROR
484 /JMS I (OTYPE RETURNS DCB WORD OF OUTPUT DEVICE IN AC
490 /OUBUF= ADDRESS OF OUTPUT BUFFER
491 /OUCTL= OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE)
492 /OUDEVH= ADDRESS OF PAGE FOR OUTPUT HANDLER
494 /ASSUMES I/O MONITOR IS RESIDENT IN CORE.
495 /CAN BE CALLED FROM ANY FIELD WITH BUFFERS IN ANY FIELD.
506 SNA /IF OUTPUT HAS NO EXTENSION,
507 TAD (1520 /GIVE IT THE EXTENSION .MP
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
514 1 /ASSIGN, FETCH HANDLER
515 OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY
520 OUBLK, 7601 /REPLACED WITH STARTING BLOCK
521 OUELEN, 0 /REPLACED WITH LENGTH OF HOLE
522 JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH
525 CDF CIF 10 /RESTORE CALLING FIELDS
528 AND (7760 /GET REQUESTED LENGTH
529 SNA CLA /WAS IT AN INDEFINITE REQUEST
530 JMP I (OUTERR /YES - CANNOT ENTER THE FILE
532 AND (17 /MAKE THE REQUESTED LENGTH ZERO
534 JMP OUENTR /TRY, TRY AGAIN
546 DCA OUCTLW /STORE THE CONTROL WORD
552 DCA OUREC /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER
557 AND (17 /COMPUTE THE NUMBER OF RECORDS
558 TAD OUCCNT /UPDATE THE NUMBER OF BLOCKS IN THE FILE
563 SNL SZA CLA /DOES THE LENGTH EXCEED THE GIVEN LENGTH?
564 JMP I (OUTERR /YES - SIGNAL OUTPUT ERROR
576 TAD (-PTP /CHECK FOR PAPER TAPE PUNCH OUTPUT
577 SZA CLA /AND SKIP ^Z OUTPUT IF TRUE
578 TAD (232 /OUTPUT A ^Z
582 JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE
584 TAD (100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD
585 TAD (77 /BOUNDARY - OTHERWISE A HALF-RECORD
587 SZA CLA /UP TO THE BOUNDARY YET?
588 JMP FILLLP /NO - FILL WITH ZEROS
589 TAD I (OUDWCT /GET DOUBLEWORD COUNT LEFT
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
595 NODUMP, TAD I OU7600 /GET THE DEVICE NUMBER
597 4 /CLOSE THE OUTPUT FILE
598 OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME
601 CDF CIF 10 /RESTORE CALLING FIELDS
605 OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS
606 TAD (-OUCTMP /GET SIZE OF BUFFER IN DOUBLEWORDS
609 DCA OUPTR /INITIALIZE WORD POINTER
611 DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH
620 CDF OUFLD /SET DATA FIELD TO BUFFER'S FIELD
621 ISZ OUJMP /BUMP THE CHARACTER SWITCH
622 OUJMP, HLT /THREE WAY CHARACTER SWITCH
630 DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH
631 TAD OUTEMP /ORDER 4 BITS OF THIRD CHAR
637 DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS
639 DCA OUJMP /RESET SWITCH
641 ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS
643 TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE
644 JMS I (OUTDMP /DUMP THE BUFFER
645 JMS OUSETP /RE-INITIALIZE THE POINTERS
648 DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO
649 ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD
652 OUCRET, HLT /RESTORE CALLING FIELDS
692 SNA CLA /IF OUTPUT IS NOT TO TTY,
693 TAD (240 /PUT A SPACE AFTER EVERY GROUP OF 8
703 SNA CLA /IS THE TELETYPE BUFFER A ^C
704 KSF /WITH THE TELETYPE FLAG ON?
706 CDIF0, CDF CIF 0 /YES - GO TO MONITOR
707 JMP I (7605 /THROUGH THE "DON'T SAVE CORE" RETURN
715 DCA F4SKP /INITIALIZE ONCE-ONLY SKIP
720 DCA CDFX /STORE A CDF 0 OR CDF 20
723 SZL SPA CLA /IF FLDNO IS 0 OR 4,
724 JMP NOT04 /INITIALIZE LOADXR TO 0
726 F4FLAG, JMP MAPOVR /ZEROED IF INFO IN FIELD 2
732 SZA CLA /FIELD EMPTY?
736 MAPOVR, ISZ SOMTHN /WAS THERE ANY INPUT?
745 NONEMP, ISZ SOMTHN /HAVE WE OUTPUT ANYTHING YET?
747 JMS I (OOPEN /NO - OPEN OUTPUT FILE NOW
749 SNA CLA /SET MODE OF OUTPUT - /T INVERTS
750 TAD (20 /NORMAL TTY/NO TYY DISTINCTION
756 NOTFST, JMS I (EJECT1 /PAGE HEADING
766 TAD (260 /OUTPUT LOC (HIGH 3 DIGITS) AT LEFT MARGIN
780 JMS I (ZTST /IF ALL 64 WORDS ARE ZERO,
782 JMP NO1ND0 /DON'T PRINT LINE
786 JMS I (DOBITS /OUTPUT 4 TRIPLEWORDS FOR 64 LOCATIONS
797 JMS I (ECRLF /SKIP A LINE EVERY PDP-8 PAGE
801 JMS I (EJECT1 /NEW PAGE AT LOCATION 4000
817 SZA CLA /TELETYPE STYLE OUTPUT?
819 TAD (214 /NO - FORM FEED
824 VERLOC, 60+VERSION^100+SUBVER /V5A, ETC...
830 SNA CLA /IF NOT TTY OUTPUT,
831 JMP EJKLPT /DON'T PRINT HORIZONTAL GUIDE
834 TEXT / 0000000011111111222222223333333344444444555555556666666677777777/
836 TEXT / 0123456701234567012345670123456701234567012345670123456701234567/
857 TTOFLG, 0 /20 IF TTY-STYLE OUTPUT