11 /COPYRIGHT (C) 1971,1972,1973,1974,1975,1977 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
46 /BUILD IS THE SYSTEM CONFIGURATOR FOR THE OS/8 PROGRAMMING
47 /SYSTEM. WITH BUILD, THE DEVICES WITHIN A PARTICULAR
48 /SYSTEM CAN BE RAPIDLY AND EASILY CHANGED. BUILD ALSO
49 /PROVIDES THE FACILITY FOR CREATING AN INITIAL OS/8 SYSTEM
50 /FROM BINARY PAPER TAPES OR CASSETTES.
54 /0. MADE BUILD SUPPORTABLE
55 /1. ADDED VE COMMAND (CURRENT VERSION # IS 3X WHERE X IS PATCH LEVEL)
56 /2. FIXED PROBLEM WITH Z'S AND 9'S IN FILENAMES
57 /3. CHANGED LENGTH OF DF32
58 /4. FIXED PROBLEM WITH RK8 BOOTSTRAP RECORD.
59 /5. ON LOAD, NULL EXTENSION FIRST SEARCHES FOR .BN
60 /6. CR TO $ DOESN'T GIVE ERROR
61 /7. FIXED BUG WITH BUILDING ROM SYS
62 /8. RUBOUTS TO BOL GIVE $
64 /10. ASSUME DSK: IF NO DEV GIVEN WITH LOAD
65 /11. NO DOT IS PRINTED IF NO EXTENSION
68 /14. ADDED EXAMINE COMMAND
69 /15. FIXED BUG RE ACCESSING USR TABLE VIA POINTER
70 /16. CLEANED UP MOVE ROUTINE
71 /17. CLEANED UP NUMBER TOO BIG CHECKER
72 /18. OVERFLOW ERROR MESSAGE CHANGED TO 'BAD ORIGIN'
73 /19. DON'T ALLOW NAMES OVER 6 CHARS TO SPILL INTO EXTENSION;
74 / DON'T ALLOW MULTIPLE EXTENSIONS
75 /20. INCREASED NUMBER OF ALLOWABLE ENTRY PTS/HANDLER TO 16 (DEC)
76 /21. CLEANED UP SYMBOL PRINT ROUTINE
77 /22. GOT NAMES IN TABLE TO LINE UP.
78 /23. INSERT GRPNAME <CR> INSERTS FIRST HANDLER
79 /24. INSERT GRP,DEV1,DEV2,DEV3,...
80 /25. INSERT GRP,DEV1-5,...
81 /26. SAME FOR DELETE AND REPLACE
82 /27. COUNT DEVICES AND SLOTS ONLY ON BOOT
83 /28. FIXED BUG RE SYS RF08=4023
84 /29. GENERAL SUPPORT OF 2-PAGE SYS HANDLERS
86 /31. SETS SA=00200, JSW=0
87 /32. UNLOAD UNLOADS AND DELETES
88 /33. ADDED DSK COMMAND
90 /35. PRINT TELLS YOU ABOUT DSK
91 /36. TOOK OUT LOC DEPENDENT CHECK FOR SYSTEM HANDLERS
92 /37. INSERT ALLOWS SETTING # OF PLATTERS
93 /38. HANDLER HEADER LOADS DIRECTLY INTO DESCRIPTOR TABLE
94 /39. USES EXTRA CORE IF AVAILABLE (ALSO CHECKS SOFTWARE CORE SIZE)
95 /40. STOPS ECHOING ON INPUT LINE OVERFLOW
96 /41. *'S SYSTEM DEVICE
97 /42. REMEMBERS SYS ACROSS A BOOT
98 /43. 'Y' INSTEAD OF 'YE'
99 /44. BO CHECKS DCB IN CORE TO SEE IF NEED REWRITE MONITOR
100 /45. ALLOW UNLOADING ENTRY POINT NAMES
102 /47. EACH COMMAND HAS ITS OWN MAXIMUM INPUT LINE SIZE
103 /48. ADDED CORE COMMAND
104 /49. FIXED ^U TO WRITE ZERO DIRECT MSG BUG
105 /50. HIT CONTINUE AFTER 'SYS ERR' TO RETRY
106 /51. PRESERVED DATE ACROSS BOOT
107 /52. MULTIPLE LOADS AND UNLOADS
108 /53. LOAD FROM SCRATCH USES INTERNAL ACTIVE HANDLERS
109 /54. CASSETTE SUPPORT
110 /55. SETS CORE CONTROL BLOCK
112 /CHANGES SINCE FIELD RELEASE
114 /A 'NO ROOM' DOESN'T PRINT 'BAD LOAD'
115 /B NO. OF ENTRY POINTS NOW CORRECTLY CHECKED FOR
116 /C FIXED BUG RE BUILDING TD8E FROM TD8E
117 /D BOOT CMD DISABLES BUILD CMD
118 /E JSW SET TO 1 BEFORE CHAINING TO ABSLDR
121 /H LENGTH OF INPUT LINE SYMBOLIC
122 /I SOFCOR STUFF OPTIMIZED
123 /J QL DOESN'T PRINT SPACE BETWEEN SYS'S GRP:NAME
125 /L PAPER TAPE PUTS HLT IN 7600
129 /? DIES IF DATA OCCURS BEFORE *0
131 /? GET 2-PAGE BIT OF CURRENT SYSTEM
133 /CHANGES FOR MAINTENANCE RELEASE V3C:
137 /1. CHANGED VERSION NUMBER TO V5
138 /2. INCORPORATED PATCH SEQ #1 (DSN APRIL 1975)
139 / ZERO LOCATION SOFSET WHILE BUILDING
140 /3. INCORPORATED PATCH SEQ #2 (DSN NOV. 1974)
141 / DISMISS USR AFTER ?NAME ERROR
142 /4. INCORPORATED PATCH SEQ #3 (DSN MARCH 1975)
143 / DECREASE SYSTEM SIZE BY 5 (FOR ABSLDR) WHEN BUILDING FROM PAPER TAPE
144 /5. INCORPORATED PATCH SEQ #4 (DSN APRIL 1975)
145 / ADDED 'SIZE' COMMAND TO BUILD
146 /6. FIXED BUG WHICH CAUSES SYSXY.RS NOT FOUND TO BE PRINTED
147 / ON BOOTXY.RS COMMAND
153 /1. FIXED PROBLEM WITH CASSETTE BUILD (JSW WAS SET WRONG)
154 /2. ALLOWED SAVING OF HIGH-ORDER DATE BITS
157 HLT /SAFETY HALT AND PATCH SPACE
159 SAV2, 0 /SAVES GROUP NAME
160 *10 /AUTO INDEX REGISTERS
161 XR1, 0 /GENERAL PURPOSE REGISTERS
164 XR4, 0 /USED TO BUILD IMAGE TABLES
171 COUNT, 0 /GENERAL COUNTER LOCATION
172 CHAR, 0 /CHARACTER BUFFER
179 DEVBUF=0400 /FIRST HANDLER AT 10400
180 /FOR REASONS TOO LONG TO GO INTO HERE,
181 /BUT WHICH HAVE TO DO WITH CURIOUS
182 /PROPERTIES OF THE NUMBER 0,
183 /HANDLERS CAN'T START AT 0.
184 /THEY COULD HAVE STARTED AT 200.
185 SOFSET=7747 /SYSTEM OFFSET. (CURRENTLY =0)
186 PG7600=BUFFER /RECORD 0 (IMAGES OF BOTH 7600'S)
188 LDRCTL=4113 /CHECK OS/8 ASSEMBLY
189 NAME1, 0 /NAME1-4 HOLDS FILE AND DEVICE NAMES
193 TABLMT, DSCTAB /HIGH CORE END OF DESCRIPTORS
196 HNDPTR, DEVBUF /POINTS TO FIRST FREE LOCATION IN HANDLER TABLE
198 BLDSAV=75 /**** WILL DESTROY PREVIOUS FILES
199 /START OF 40 BLOCK TO SAVE BUILD IN
200 HDRSIZ=10 /NUMBER OF ITEMS IN A DESCRIPTOR
201 DSCPTR, DSCTAB /ALWAYS POINTS TO BEGIN OF CURRENT DESCRIPTOR
203 DSKG1, 0 /NAME OF 'DSK'
209 NEWCOR, 0 /NEW CORE MAX
210 SAVDAT, 0 /REMEMBERS DATE ACROSS A BOOT
212 FLAG2, 1 /0 IF PREVIOUS SYSTEM HAD A 2-PAGE HANDLER
213 /SAMSYS, 1 /0 IF DIDN'T SPECIFY NEW SYS
218 /BOOTDV, 0 /HANDLER ADDRESS OF DEVICE WE'RE BOOTSTRAPPING TO
219 SAVHID, 0 /HIGH-ORDER DATE (BITS 3-4)
220 \f/BEGLIN: 72 CHAR LINE BUFFER
222 /NEW BUILD CORE ALLOCATION:
224 /0000-5177 BUILD (ABSLD MUST BE ABOVE 4177)
225 /5400-5777 DEVICE HANDLER FOR LOAD
226 /5200-5377 PAPER TAPE/INIT/LINE BUFFER
227 /6000-6377 INPUT BUFFER FOR LOAD (TEMP LOC OF USR)
228 /6400-7577 DESCRIPTOR TABLE (DSCTAB)
230 /BINARY MUST FOLLOW BUFFER
231 /FIELD 1: HANDLERS (0400-7577)
232 /10000-10377 BLOK66 BUFFER
235 SKP CLA /ENTRY FROM 'R BUILD'
236 HLT /CHAIN ENTRY ADDRESS
237 TAD I [7600 /SEE IF SYSTEM ALREADY EXISTS
240 SZA CLA /IF NOT, BUILD SYSTEM FROM PAPER TAPE
241 CLA IAC /NOTE FACT THAT OS/8 AINT AROUND
244 DCA I (AMTCOR /FIGURE OUT HOW MUCH CORE WE HAVE
245 JMS I (GOOD /DO SOME INITIALIZATION; IT'LL DO YA GOOD
247 DCA I (ECHOFLG /ALLOW TYPING
249 DOLR, TAD ["$ /OUTPUT A $ BECAUSE I'M JEWISH
251 DCA I [SWAPER /USE CURRENT HANDLER, NO SWAP ON ^C.
253 JMS I [GTEXT /READ TTY LINE
255 JMS I [GNAME /INTERPRET THE COMMAND
259 DCA CHAR /ENABLE TEST TO WORK
260 \f JMS I [TEST /LOOK FOR THE COMMAND IN LIST
261 -1417;LOAD /LOAD DEVICE HANDLER BINARY
262 -2205;REPLACE /REPLACE IN SYSTEM
263 -1601;NAME /ALTER PERMANENT NAME
264 -0114;ALTER /CHANGE DEVICE HANDLER LOCATION
265 -2022;PRINT /SYSTEM STATUS
266 -2331;SYSTEM /SPECIFY SYSTEM DEVICE
267 -0217;BOOT /BOOTSTRAP THE NEW SYSTEM
268 -2516;UNLOAD /DELETE INACTIVE HANDLER
269 -0405;DELETE /DELETE ACTIVE HANDLER
270 -1116;INSERT /INSERT HANDLER IN SYSTEM
271 -2605;VERS /TYPE VERSION #
272 -0530;EXAMINE /EXAMINE LOCATION
273 -2114;QLIST /QUICK LIST
279 BD, -0225;BUILD /BUILD
280 0 /MUST TERMINATE LIST WITH 0
281 JMP I [WHAT /DIDN'T FIND COMMAND
286 / DEVICE PERMANENT NAME
287 / DCB (R/W,TYPE,MAX # OF PLATTERS)
288 / 1/2 PAGE, SYSTEM BIT, CORES BIT, REL ENTRY PT
322 GETEM, /POINTS INTO DSCTAB
325 DCA CORSIZ /MAKE RE-USABLE
327 DCA CORX /MAKE ROUTINE REUSABLE ON 32K MACHINE
355 JMP I RELCOR /LEAVE WITH HIGHEST EXISTENT BANK
360 \f/GET GETS DESCRIPTOR ITEM FROM CURRENT DESCRIPTOR
363 /PUT PUTS DESCRIPTOR ITEM IN AC BACK IN SPECIFIED ITEM
364 /OP IN CURRENT DESCRIPTOR
368 /ACTIVE BIT 0=1 MEANS ENTRY POINT HAS BEEN INSERTED (IS ACTIVE)
369 /PERM1 PERMANENT NAME (FIRST 2 CHARS)
371 /TWOPAG BIT 0=1 MEANS 2-PAGE HANDLER, BIT 4 IGNORED, BITS 5-11 RELATIVE ENTRY POINT
372 /PAGRES BITS 7-11 GIVE PAGE OF START OF HANDLER WHEN ROTATED 6 RT
373 /GRPNM1 GROUP NAME (DEVICE NAME) FIRST 2 CHARS
375 /DEVSIZ GIVES SIZE OF 1 PLATTER
376 /PLATNUM # OF PLATTERS IN BITS 2-4
377 /DSKBIT BIT 1 IS FLAG FOR 'DSK' (USED TEMPORARILY BY BUILD)
378 /MAXPLT MAXIMUM NUMBER OF PLATTERS ALLOWED (IN BITS 9-11)
379 /DCB D.C.B. BIT 0: FILESTRUCTURED, BITS 3-8 DEVICE TYPE
380 / BITS 9-11 MAX NO. OF PLATTERS
381 /CORES BIT 2 MEANS ENTRY PT IS CORESIDENT WITH SYS HANDLER
382 /SYSBIT BIT 1 IS A 1 IF THE DEVICE HAS NAME 'SYS' AND IS A SYS DEVICE
384 /IF FIRST ENTRY OF A DESCRIPTOR IS GE 7600, THEN THIS
385 /ENTRY IS A BOOTSTRAP ENTRY.
386 /IT STARTS WITH THE NEGATIVE OF THE NUMBER OF WORDS IN THE
387 /BOOTSTRAP (FOR THE PRECEDING DEVICE), FOLLOWED BY THAT MANY WORDS
404 \f/READ A LINE OF TEXT RETURN 1 IS ^U RETURN
405 GTEXT, 0 /ROUTINE TO COLLECT TTY INPUT
406 TAD (-BEGLIN /AC IS NON-ZERO
408 DCA I (RUBFLG /INITIALIZE RUBOUT TO \
410 RDTX, DCA LXR /BUFFER ADD. TO INDEX
411 RDTXT, JMS I [TTYIN /READ BLOODY TELETYPE
413 DCA NAME1 /SETUP FOR TEST AGAIN
416 -212;LFEED /LINE FEED..ECHO CURRENT COMMAND
417 -215;CARRET /LINE TERMINATOR
418 -233;ALTMOD /ALT MODE IN SEVERAL FLAVORS
421 -200;RDTXT /IGNORE BLANKS
422 -217;RDTXT /AS WELL AS ^O
423 -203;CTRLC /BACK TO CURRENT SYSTEM
425 0 /IF NOT ONE OF THESE, PUT IN BUFFER
429 JMP RDTXT /LINE OVERFLOW, STOP ECHOING
430 JMS I [PRNT /PRINT THE CHARACTER
432 DCA I LXR /AND PUT IN LINE BUFFER
433 JMP RDTXT /NO PROBLEMS YET
434 \fRBOUT, TAD LXR /IS THERE TEXT TO RUB OUT?
437 JMP RBCR /NO..SO DON'T DO ANYTHING
438 TAD ["\ /YES..ECHO BACKSLASH?
439 ISZ I (RUBFLG /IF = -1, NO
441 CLA CMA /IGNORE CONSECUTIVE RUBOUTS
446 JMS I [TTYOUT /ECHO LAST CHAR
448 TAD LXR /MOVE INDEX BACK ONE
450 CARRET, JMS I [CRLF /GENERATE 215,212
452 DCA I LXR /GUARD AGAINS CMD <CR>
454 DCA GNMXR /SETUP FOR GNAME ROUTINE
455 ISZ GTEXT /TAKE NORMAL RETURN
458 LFEED, DCA I LXR /A 0 TO MARK END
466 JMP XRBACK /YES..REPOSITION LXR
470 ALTMOD, TAD ["$ /ALT MODE ECHOES AS $
475 JMS I [TTYOUT /GENERATE ^U
480 JMP I GTEXT /TAKE ERROR RETURN
481 \f GETCHR=JMS I [GETC
485 GETNUM, 0 /PICKS UP NUMBER FROM LINE BUFF
486 /DELIM CHAR PUT IN 'CHAR'
487 /PRINTS ERROR MESSAGE IF GT 4095
488 /IF NO NUMBER, TAKES RETURN 1
489 /IF NUMBER, TAKES RET 2 WITH # IN 'SIZE'
491 DCA GOTSW /HAVEN'T FOUND ANY DIGITS YET
494 ISZ GOTSW /FOUND A DIGIT
498 JMP I [BADARG /NUMBER .GT. 4095
501 RAL /BUILD UP THE DIGIT
507 TAD [-240 /IGNORE SPACES
510 TAD (-30 /TEST LIMITS
512 TAD [10 /MUST BE BETWEEN 0 AND 7
515 TAD (260 /RESTORE CHAR
516 NUMOUT, DCA CHAR /SAVE AWAY THIS DELIMETER
517 TAD GOTSW /DID WE GET ANY DIGITS?
520 JMP I GETNUM /NO, RETURN
521 \fGETC, 0 /GET THE NEXT CHARACTER, ADVANCE SCAN PAST IT
525 GOTSW, /1 MEANS GOT A DIGIT
526 BAKC, 0 /BACK UP SCAN TO THE CHARACTER JUST LOOKED AT
536 / JMS PRMNAM /SEARCH TABLE FOR A PERMANENT NAME
537 /GIVEN IN NAME1-NAME2
538 /POINT TO DESCRIPTOR FOR THIS NAME
539 / JMS ACTNAM /SAME BUT PERMANENT NAME MUST BE ACTIVE
540 / JMS BIGNAM /SEARCHES FOR PERM & GRP NAME (GRP NAME IN SAV1,SAV2)
541 / JMS GRPNAM /SAME BUT SEARCH FOR GROUP NAME
545 CHKLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
546 ADVBOT /ADVANCE OVER ANY BOOTSTRAP
547 JMP NFOUND /NO MORE- ERROR
549 NM1, GRPNM1 /GET GROUP OR PERMANENT NAME
552 SZA CLA /DO FIRST WORDS MATCH?
553 JMP CHKLUP /NO, TRY AGAIN
555 NM2, GRPNM2 /GET 2ND WORD
558 SZA CLA /2ND WORD MATCH?
561 SNA CLA /WANT BOTH GROUP AND PERM NAME?
575 NOBIG, TAD ACTSW /FOUND MATCH
576 SNA CLA /MUST HANDLER BE ACTIVE?
577 JMP I CHKNAM /NO, RETURN
580 SMA CLA /IS IT ACTIVE?
581 JMP CHKLUP /NO, TRY AGAIN
582 JMP I CHKNAM /YES, RETURN
584 TAD (GRPNM1 /WANT TO SEARCH FOR GROUP NAME
588 DCA ACTSW /NEED NOT BE ACTIVE
590 JMS CHKNAM /GO SEARCH
593 ACTSW, 0 /1 MEANS HANDLER MUST BE ACTIVE
596 DCA ACTSW /AC MAY BE NON ZERO (TO MEAN ACTIVE ONLY)
597 TAD (PRMNM1 /WANT TO SEARCH FOR PERMANENT NAME
602 JMS CHKNAM /GO SEARCH
606 CLA IAC /THEY MUST BE ACTIVE
621 /SOMETIMES CHKNAM CAME FROM DSKASK INSTEAD OF GETSYS ****
623 BIGFLG, 0 /SET TO 1 TO CHECK GROUP & PERMANENT NAME
624 \fNFOUND, JMS I [PRNAME
631 DCA I TABLMT /RESTORE SENTINEL 0
638 /BUILD CORE CONTROL BLOCK
640 BLDCCB, -2 /2 SEGMENTS
648 /GOES INTO WORDS 200-377 OF BLOCK 37
649 \fOK, STA /NOW USE ORIGIN TO TELL US HOW BIG A
650 TAD I (ORIGIN /HANDLER WAS LOADED
652 TAD [200 /REMEMBER THAT ORIGIN IS ONE GREATER
653 DCA HNDPTR /THAN ACTUAL LAST LOCATION.
654 /BETTER TO USE 2-PAGE BIT
656 DCA TABLMT /SET NEW TABLE TOP
657 DCA I TABLMT /NEED 0 AT END
661 \f/LOAD A 1- OR 2-PAGE HANDLER INTO BUFFER
666 DCA FILPTR /POINT TO FILENAME AREA
667 TAD (BUFFER+1 /LOAD 2 PAGE HANDLER INTO 'BUFFER'
668 DCA DRIVER /SET UP ASSIGN DEVICE HANDLER
669 JMS I [GNAME /GET DEVICE NAME
676 JMP I (BLDLOD /WHEN LOADING STANDALONE, USE INTERNAL HANDLERS
680 JMP I (SETDSK /USE 'DSK ' IF NO DEVICE GIVEN
684 DCA DVNM1+1 /LOOKUP DEVICE NAME
687 JMS I [200 /FETCH HANDLER
692 DVNUM, 0 /NAME GOES IN HERE
694 JMP I (KICKM /NO DEVICE. RELEASE MONITOR
697 JMS I [GNAME /PICK UP FILE NAME
698 TAD DVNM1+1 /DEVICE NUMBER
699 JMS I (DTYPE /SEE IF FILE STRUCTURED
700 TAD NAME1 /IF FILE STRUCTURED WITH NO NAME
701 SNA CLA /IT IS AN ERROR
703 TAD NAME4 /SAVE ORIGINAL EXTENSION
707 TAD (0216 /TRY .BN FIRST
709 TAD DVNUM /GET DEVICE NUMBER
711 JMS I [200 /DO LOOKUP OF FILENAME
715 JMP LDEXT /DIDN'T FIND FILE. DO SOMETHING
717 JMS I [200 /KICK OUT MONITOR
720 LOADIN, DCA I [DVICE /ENTRY POINT OF HANDLER
721 JMS I (IOPEN /IF HERE, IT WILL FIT
723 \fLOAD, JMS SETUP /SET UP FOR INPUT
724 JMP I [NODEV /NO LOAD DEVICE
725 STA CLL RAL /-2 DO A HANDLER LOAD
728 TAD I TABLMT /SEE IF HEADER INFORMATION IS OK
731 TAD (20 /ALLOW 16 HANDLERS/BINARY
733 JMP I [BADINP /TOO MANY
735 DCA LODTMP /# OF LOOPS TO EXECUTE
737 TAD [PAGRES+1 /POINT TO FIRST 'PAGRES' WORD
738 DCA HDPTR /GO THERE FOR DESCRIPTORS
741 DCA TEMP /PAGE OF RESIDENCE
743 DCA I HDPTR /INSERT PAGE OF RESIDENCE
751 DCA HDPTR /POINT TO AFTER DESCRIPTORS
757 TAD I HDPTR /NO, MAYBE A BOOTSTRAP RECORD
771 \fHDPTR, 0 /POINTS INTO NEW HEADER
773 /DESCRIPTOR TABLE DESCRIPTION:
775 /'TABLMT' ALWAYS POINTS TO FIRST FREE LOCATION
776 /'DSCPTR' ALWAYS POINTS TO BEGIN OF CURRENT HEADER BLOCK
777 /ITEMS ARE OF 3 FORMS:
778 /(A) GROUP COUNT: IN RANGE -1 TO -20 (IGNORED AND HAS NO MEANING)
779 / IT IS THERE FOR COMPATIBILITY WITH OLD BUILD
780 /(B) HEADER BLOCK STARTS WITH NUMBER IN RANGE 0-7577
781 / CONSISTS OF 'HDRSIZ' CONSECUTIVE WORDS
782 / DESCRIBED ELSEWHERE
783 /(C) BOOTSTRAP BLOCK: STARTS WITH NUMBER IN RANGE 7600-7757
784 / THIS IS THE NEGATIVE OF THE NUMBER OF WORDS TO FOLLOW
785 \f/NON-SYSTEM HEADER INFO:
787 / - NUMBER OF ENTRY POINTS
789 /FOR EACH ENTRY POINT:
792 /2,3 ENTRY POINT NAME (PERMANENT NAME)
793 /4 R/W FILE-STR, DEVICE TYPE, MAX # OF PLATTERS
794 /5 1/2 PAGE, REL ENTRY PT, SYSBIT, CORES
795 /6* PAGE OF HANDLER, ACTIVE BIT, # OF PLATS, DSKBIT
800 LDEXT, TAD TEMP /DIDN'T FIND FILE
802 JMP I (KICKM /NO RESORT
804 JMP TRYAGN /TRY NULL EXTENSION
807 JMS I [200 /DISMISS USR FROM CORE
811 \fREPLACE,JMS I (DEL /DELETE PERMANENT NAME SPECIFIED NEXT
814 SZA CLA /AFTER ALL DELETIONS, MUST FIND A "="
815 JMP I [SYNTAX /IF NOT, WARN THE GUY
816 JMS INS /IF FOUND IT, NOW PERFORM INSERTIONS
817 JMP I [CONFIG /THE GUY HAS BEEN HUMORED
820 TSTEOL, TAD CHAR /THERE SHOULDN'T BE ANYTHING AFTER EOC
822 JMP I [CONFIG /THERE WASN'T
823 JMP I [SYNTAX /WARN BLOKE ABOUT EXTRA STUFF
825 DELETE, JMS I (DEL /DELETE PERMANENT NAMES SPECIFIED
828 SYSTEM, JMS INS /SYS IS SAME AS INSERT
832 SPA SZL CLA /BUT SYSBIT OR CORES SHOULD BE ON
833 JMP TSTEOL /JUST TO HUMOR IT'S NAME
834 TWOSYS, JMS I [PRWD /AND FOR COMPATIBILITY REASONS
839 DCA I (ACTION /SET 'ACTION' FOR INSERTIONS
840 JMS I [TSTNAM /LOOK FOR A NAME
841 JMS I [GRPNAM /GET GROUP NAME
849 INSNAM, JMS I [TSTNAM /GRAB A NAME
850 INSGN, JMS I [BIGNAM /GET PERMANENT NAME WITH SPECIFIED GROUP NAME
856 JMP I [NFOUND /MAKE SURE PERMANENT NAME FOUND
857 GET /HAS GROUP NAME PREVIOUSLY SPECIFIED
863 ACT, JMS I (SETACT /SET ACTIVE BIT
870 \fINPLAT, JMS I [GETNUM /AN "="
874 JMP I [BADARG /=0 ILLEGAL
877 AND [7 /GET MAXIMUM # OF PLATTERS ALLOWED
881 TAD SIZE /COMPARE WITH USER'S REQUEST
882 SZL CLA /IS HIS REQUEST OKAY?
883 JMP BADPLT /REQUEST-SHMEST. TOO MANY PLATTERS
890 TAD SIZE /STORE AWAY HIS STATED NUMBER OF PLATTERS
891 PUT /FOR FUTURE USE BY 'BOOT'
893 JMP COM /REJOIN PROCESSING
900 DCA SAV1 /SAVE GROUP NAME
911 TAD DETEM /GET CHAR AFTER HYPEN
912 SNA CLA /REACHED IT YET?
913 JMP IGET /YES, WELL TRY FOR MORE STUFF
914 BAKCHR /NO, PUT IT BACK FOR FUTURE USE
915 ISZ NAME2 /FORM NEXT SEQUENTIAL NAME
916 JMP INSGN /GO INSERT IT
917 /DO WE REALLY HAVE TO START SEARCH AT CURRENT DESCR?
932 ACTIVE /GET ACTIVATION BIT
934 ACTION, STL RAR /ACTIVATE IT (SET TO 'CLL RAR' TO DEACT)
942 DELNAM, JMS I [TSTNAM /PARSE OFF A NAME
943 DELGN, JMS I [ACTNAM /FIND IT AS AN ACTIVE PERMANENT NAME
944 JMS SETACT /DEACTIVATE IT
947 AND [6177 /SET # OF PLATTERS TO 0
963 SNA CLA /REACHED FINAL NAME?
965 BAKCHR /NO, PUT FINAL LETTER BACK
966 ISZ NAME2 /YES, BUMP TO NEXT NAME
968 JMP DELGN /DELETE NEXT ONE IN SUCCESSION
973 TTYIN, 0 /TTY INPUT ROUTINE
977 SNA /LOW LEVEL BLANK IGNORE
979 AND [177 /HANDLE PARITY
983 \f/DSK=ACTIVE PERMANENT NAME
984 /DSK=GROUPNAME:PERMANENT NAME
985 /DSK=<CR> MEANS NO DSK SPECIFIED, USE 'SYS'
987 /JUST REMEMBERS NAME (NOTHING ELSE)
989 DSK, JMS I [GNAME /GET A NAME
997 SZA CLA /IS IT FOLLOWED BY A ":"?
998 JMP I [SYNTAX /NO, ASSUME HE'S GIVING AN ACTIVE PERMANENT NAME
999 /THIS IS FOR COMPATIBILITY WITH OLD BUILD
1000 / JMS I [GRPNAM /YES, ITS A GROUP NAME
1005 JMS I [TSTNAM /GET PERMANENT NAME
1007 DCA DSKP1 /DON'T WORRY NOW IF IT'S AROUND
1015 NODSK, DCA DSKG1 /FIRST WORD 0 MEANS NONE SPECIFIED
1018 NOCOL, JMS I [ACTNAM /IT MUST BE AN ACTIVE HANDLER
1026 \fSETDSK, TAD L0423 /DS
1032 KICKM, CIF 10 /RELEASE MONITOR AND RELOAD
1033 JMS I [200 /OUR DEVICES
1039 JMS I [7700 /LOCK IN MONITOR
1041 CIF 10 /RESET RESIDENT HANDLER TABLE
1045 \f/ CODE FOR USING INTERNAL HANDLERS ON STANDALONE LOAD:
1047 BLDLOD, DCA I (FILPTR /LOAD DEV
1048 JMS I [ACTNAM /MUST BE ACTIVE
1050 DCA HNDLOK /LOCATION OF HANDLER
1063 TAD PBUFFER /GET ENTRY POINT OF HANDLER
1066 BLDCB, 0 /CONTAINS DCB OF CURRENT LOAD HANDLER
1075 /FORMAT: NAME OLDNAME=NEWNAME
1077 NAME, JMS TSTNAM /SEE IF ARGUMENT SUPPLIED
1078 /SEARCH PERMANENT TABLES
1079 JMS I [ACTNAM /GET ACTIVE PERMANENT NAME DESCRIPTOR
1081 TAD MEQL /CHECK FOR =
1084 JMS TSTNAM /GET NEW DEVICE NAME
1085 TAD NAME1 /REPLACE THE NAME
1094 JMS I [TSTNAM /ALTER ALLOWS MODS TO A PARTICULAR
1095 JMS I [GRPNAM /HANDLER'S ACTUAL CODE.
1096 /LOOK AT DEVICE TYPE ENTRY
1097 JMS GETPG /GET PAGE OF RESIDENCE
1099 JMS I [GETNUM /GET RELATIVE LOC TO ALTER
1100 JMP I [SYNTAX /NO NUMBER
1102 P2PAG, TWOPAG /IS THIS A 2-PAGE HANDLER?
1105 TAD [7600 /ALLOW 200 OR 400 MAXIMUM
1107 TAD SIZE /IS THE # TO ALTER TOO LARGE?
1109 JMP I [BADARG /I GUESS IT IS
1111 TAD PAGAD /GET ABSOLUTE LOCATION
1114 SZA CLA /EXAMINE OR ALTER?
1119 JMS EXAMSB /YES, GIVE GUY OLD VALUE FIRST
1120 ODTL, TAD ["/ /ODT LIKE
1125 GETVAL, JMS I [GETNUM /GET NEW CONTENTS
1126 JMP I (TSTEOL /NO NUMBER
1129 DCA I PAGAD /REPLACE THAT LOC.
1130 JMP I [CONFIG /AND GET OUT
1133 /ALTER GROUPNAME,LOC=NEWVALUE
1134 /ALTER GROUPNAME,LOC
1135 /EXAMINE GROUPNAME,LOC
1143 SIZCM, TAD (3 /SIZE COMMAND V3C
1144 DCBCM, TAD [-1 /EXAMINE DCB WORD
1145 CTLCM, TAD P2PAG /EXAMINE CONTROL WORD
1149 JMS I [TSTNAM /GET A NAME
1150 JMS I [ACTNAM /IT MUST BE ACTIVE
1156 INPDCB, JMS I [GETNUM
1157 JMP I [CONFIG /IGNORE = NOTHING
1160 XSWTCH, /0 MEANS ALTER, 1 MEANS EXAMINE
1162 JMP I [CONFIG /THE USER LIVES DANGEROUSLY
1172 JMP INPDCB /NOW PARSE OFF THE REPLY
1178 TAD I PAGAD /GET CURRENT CONTENTS
1180 JMS PUTNUM /PRINT IT
1183 PUTNUM, 0 /PRINT AN OCTAL NUMBER
1204 JMS I [GNAME /COLLECT NAME
1205 TAD NAME1 /IF NO NAME FOUND, GIVE ERROR
1212 \f/PRINT FUNCTION TYPES OUT THE STATUS OF BUILD ON COMMAND
1213 /AN * BESIDE A DEVICE INDICATES THAT IT IS CURRENTLY MARKED
1214 /FOR INSERTION IN THE SYSTEM BEING BUILT.
1218 DCA OLDPAG /SET ILLEGAL OLD PAGE
1220 ISZ I (LINEUP /MAKE THINGS LINE UP
1221 PRLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
1222 ADVBOT /ADVANCE PAST A BOOTSTRAP (IF ANY)
1224 JMS I [GETPG /GET PAGE OF NEW HANDLER
1228 TAD OLDPAG /COMPARE WITH LAST HANDLER'S PAGE
1231 JMS I [CRLF /NO, GO TO NEXT LINE
1237 PRTPER, GET /GET ACTIVE BIT
1239 SPA CLA /IS IT ACTIVE?
1240 TAD ("*-STA /YES, PRINT *
1241 TAD TTY240 /NO, PRINT SPACE
1243 JMS PNAME /PRINT PERMANENT NAME
1249 JMS I (PRINTE /PRINT GROUP NAME
1256 \fDONE, DCA I (LINEUP /NO MORE LINE-UP
1260 JMS I [CRLF /TELL GUY ABOUT 'DSK'
1276 JMP I [CONFIG /NO SPECIFIED CORE LIMIT
1282 CORMSG, TEXT /CORE= /
1287 QLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
1288 ADVBOT /ADVANCE OVER ANY BOOTSTRAP IF NECESSARY
1289 JMP DONE /GO AWAY WHEN NO MORE
1291 ACTIVE /GET ACTIVE BIT
1292 SMA CLA /IS IT ACTIVE?
1293 JMP QLUP /NO, IGNORE IT
1297 SPA CLA /IS IT 'SYS'?
1298 JMS PGNAME /YES, PRINT GROUP NAME TOO
1299 JMS PNAME /NO, PRINT PERMANENT NAME ONLY
1317 TEXT /?/ /FOR WHEN A COMMAND ERROR OCCURS
1321 DTYPE, 0 /RETURNS TYPE OF OUTPUT
1323 DCA DT /ENTRY AC HAD DEVICE #
1325 TAD I DT /IF FILE DEVICE, LINK=0
1327 CMA RAL /ALSO, IF FILE AC=0 ON EXIT
1331 TAD [-6 /PUT IN DATA BREAK FILLERS
1338 JMS I [SYS /WRITE NEW CCB
1343 \fTOOMANY,JMS I [PRWD
1350 DCA I TABLMT /RESTORE SENTINEL 0
1352 \fTEST, 0 /TEST CHAR AGAINST ARGUMENTS
1353 TAD I TEST /PICK UP ARGUMENT FROM LIST
1356 TAD CHAR /SEE IF THEY COMPARE =
1357 AND (3777 /COMPARE ONLY LOW ORDER, THUS ALLOWING '4000' TO MEAN '0'
1359 JMP TSTOVR /THEY DO..DISPATCH TO TABLE
1362 JMP TEST+1 /THEY DON'T. KEEP GOING
1368 K7750, 7750 /DATA BREAK FILLERS
1375 SYS, 0 /SAVES A FEW WORDS IN SYSTEM CALLS
1376 DCA SYCTL /SAVE FUNCTION WORD
1378 DCA SYBUF /BUFFER BEING USED
1382 ISZ SYS /THERE IS NO ERROR RETURN
1383 /IF SWAPER SET AND BOOTDV SET, USE SPECIAL BOOT HANDLER HERE
1392 HLT /IF USER IS DARING, HIT CONTINUE TO RETRY
1396 \f/*****************
1398 / SYS HANDLER IS 2-PAGES LONG IF LOCATION 7612 IS A 3
1405 TAD [-200 /ZERO OUT 5200-5377
1413 ORGLIM, 0 /THIS ROUTINE MAKES CERTAIN THAT
1414 DCA CLRTBL /THE ORIGIN FOR LDABS IS WITHIN
1415 TAD CLRTBL /THE BOUNDS SPECIFIED BY SIZE
1416 TAD [7600 /AND THE CONTENTS OF HNDPTR
1418 JMP BADORG /ORIGIN BELOW 200
1420 TAD [400 /IS ORIGIN WITHIN UPPER BOUND?
1424 TAD [7600 /NOW GIVE BACK RELATIVE BUFFER
1425 TAD HNDPTR /ADDRESS IN FIELD 1
1431 JMP I (NOROOM /CAN'T 'ORIGIN' INTO PAGE 7600
1439 /SOMEWHERE TEST IF HE GAVE US A 2-PAGE BUT REQ A 1-PAGE
1442 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L
1444 RECZRO, 0 /READS FIELD 1 CODE, EVEN FOR 12K TD8E
1446 JMS I [SYS /READ RECORD 0
1448 0 /THAT NORMALLY CONTAINS FIELD 1
1450 JMS I [SYS /READ RECORD 66
1453 TAD FLAG2 /DID PREVIOUS SYSTEM HAVE A 2-PAGE HANDLER?
1467 \fUNLOAD, JMS I [TSTNAM /PULL OFF A NAME
1468 JMS I [GRPNAM /IT HAD BETTER BE A GROUP NAME
1475 UNLPRM, JMS I (SAVNAM /UNLOAD PARTICULAR HANDLER
1476 UNLNAM, JMS I [TSTNAM
1478 TAD DSCPTR /DELETE A SINGLE DESCRIPTOR
1479 DCA SAVPTR /DON(T DELETE HANDLER
1480 TAD DSCPTR /OR BOOTSTRAP
1481 TAD [HDRSIZ /NO RELOCATION NECESSARY
1485 \fUNLGRP, JMS I [GETPG /GET PAGE OF RESIDENCE
1486 DCA TOMOV /START OF HANDLER
1488 TWOPAG /IS IT A 1- OR 2- PAGE HANDLER?
1493 TAD TOMOV /DELETE HANDLER AND MOVE ALL FOLLOWING DOWN
1495 DCA FROMOV /GET FIRST LOCATION AFTER HANDLER
1496 TAD HNDPTR /GET NEXT FREE LOCATION FOR HANDLER
1498 TAD FROMOV /GET NUMBER OF LOCS TO MOVE
1503 TOMOV, 0 /UPDATE POINTERS; SEARCH DESCRIPTORS
1504 TAD UNSIZE /FOR REFS TO MOVED HANDLERS AND DECREASE
1505 CIA /THOSE REFS BY -UNSIZE
1507 DCA HNDPTR /FREES SOME BUFFER SPACE
1509 DCA OLDTOP /REMEMBER ORIGINAL TOP OF STACK
1510 STA /BACK UP OVER GROUP COUNT
1512 DCA SAVPTR /REMEMBER THIS LOCATION
1519 DCA LSTPTR /'LSTPTR' POINTS TO FIRST DESCRIPTOR BEING MOVED
1520 \f/COMPRESS THE DESCRIPTORS ABOVE THIS ONE
1522 ADV, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
1523 JMP BADV /ENCOUNTERED A BOOTSTRAP RECORD
1524 JMP NOMORE /NO MORE, THROUGH
1525 GT, JMS I [GETPG /GET PAGE OF THIS DESCRIPTOR
1527 TAD TOMOV /COMPARE WITH PAGE OF DELETED HANDLER
1529 JMP SAMPAG /THEY'RE THE SAME
1530 SZL /THEY'RE NOT THE SAME. WHICH IS HIGHER?
1531 JMP ADV /IT WAS BELOW HANDLER. NO SWEAT.
1532 GET /IT WAS ABOVE HANDLER, HAVE TO ACCOUNT FOR THIS
1533 PAGRES /POINT TO NEW HANDLER LOCATION
1540 DCA LSTPTR /NOTE LOCATION OF NEXT DESCRIPTOR
1542 /ADVANCE PAST BOOTSTRAP OR DELETE IT AS NECESSARY
1546 SZA CLA /IS THIS BOOT PART OF GROUP BEING UNLOADED?
1552 DCA LSTPTR /SET 'LSTPTR' TO BEGIN OF NEXT DESCRIPTOR
1553 BDV, ADVBOT /ADVANCE OVER BOOTSTRAP
1555 JMP GT /GO ON TO NEXT DESCRIPTOR
1556 \f/ALL DESCRIPTORS FOR THE SAME HANDLER ARE CONSECUTIVE
1557 /MOVE DOWN DESCRIPTORS
1561 TAD LSTPTR /MINUS # OF WORDS TO MOVE
1564 LSTPTR, 0 /FIRST DESCRIPTOR NOT CONSIDERED
1566 SAVPTR, 0 /POINTS TO INITIAL DESCRIPTOR BEING DELETED
1569 TAD SAVPTR /GET NUMBER OF WORDS DELETED
1571 DCA TABLMT /UPDATE TABLMT
1572 DCA I TABLMT /MUST HAVE 0 AT TABLE END SO DON'T THINK IT'S A BOOTSTRAP
1576 OLDTOP, /ORIGINAL TOP OF DESCRIPTORS
1584 /RETURN TO CONFIG IF EOL, OR BACK IN-LINE IF COMMA
1595 \fBOOTQ, SZA CLA /MAY BE OVERLAID
1597 DCA I (DRECT /DON'T TOUCH DIRECTORY IF DIDN'T COPY SYS
1600 SAMEE, JMS I (SYSCPY /OR IF OLD DEV=NEW DEV
1610 JMS I [ACTNAM /LOOK UP 'SYS'
1618 TAD [4207 /RESTORE 7600 TO NORMAL
1623 DCA I [SA /SET SA=00200
1626 DCA I (JSW /SET JOB STATUS WORD=0
1630 TAD I [7612 /FUDGE FOR 12K TD8E
1631 DCA FLAG2 /SET FLAG2=0 IF PREV SYSTEM WAS 2 PAGE
1633 \fPACK, ISZ PROTECT /OK TO PACK IT?
1636 DCA PROTECT /INHIBIT OTHER PACKS ALSO
1638 PACKOK, ISZ SWIT /PACK LEFT OR RIGHT
1642 JMS I [ROTL /ROTATE 6 LEFT
1643 DCA I TEMP /STORE THE CHARACTER
1645 RIGHT, CLA CMA /RESET FLIP FLOP
1651 ISZ TEMP /POINT TO NEXT WORD
1653 PROTECT,0 /-1 MEANS DON'T ACCEPT CHAR, IGNORE IT
1657 TAD (-3 /NOW ALLOW ONLY A 2-CHAR EXTENSION
1661 ISZ DOTCNT /HAD WE SEEN A DOT BEFORE?
1665 DOTCNT, -1 /-1 MEANS HAVEN'T SEEN A DOT
1670 GNAME, 0 /COLLECT A WORD IN NAME1-NAME4
1671 /LEAVE DELIMITING CHAR IN 'CHAR'
1673 TAD [-7 /MAX 6 CHARACTERS
1675 DCA NAME1 /FIRST CLEAR OUT COLLECTION AREA
1680 DCA SWIT /L-R PACKING SWITCH
1682 DCA DOTCNT /ALLOW ONLY ONE DOT PER NAME
1686 SNA /A 0 ENDS THE SEARCH
1690 TAD (-"A /GET ONLY A-Z OR 0-9
1694 JMP PACK /YES..PACK IT AWAY
1701 JMS I [TEST /TEST FOR DELIMITING CHARS
1702 -".;DOT /ADVANCE POINTERS
1705 \fSYNTAX, JMS I [PRWD
1712 \f SRES=BEGLIN+60 /RESIDENCY TABLE
1713 SDCB=BEGLIN+100 /DCB
1714 SHND=BEGLIN+120 /SLOT ASSSIGNED?
1715 SNAME=BEGLIN+140/NAME
1716 SBUFF=BEGLIN+160/ADDRESS OF HANDLER
1723 /PDNT PERMANENT DEVICE NAME TABLE (SNAME)
1724 / POINTED TO BY LOCATION 10036 IN USR
1725 / CONTAIN HASH CODE OF DEVICE NAME
1726 / ADD TWO WORDS OF NAME TOGETHER AND TURN ON BIT 0
1727 / IF SECOND WORD WAS NON-ZERO
1728 / AN ENTRY OF 0 MEANS THERE IS NO DEVICE FOR THAT ENTRY
1730 /DHIT DEVICE HANDLER INFORMATION TABLE (SHND)
1731 / POINTED TO BY LOCATION 10037 IN USR
1732 / BIT 0 =1 IF THIS IS A TWO-PAGE HANDLER
1733 / BITS 1-4 RELATIVE BLOCK LOCATION OF HANDLER ON SYSTEM DEVICE
1734 / (BLOCK SLOT). ADD 15 TO GET ACTUAL BLOCK #.
1735 / BITS 5-11 RELATIVE ENTRY POINT OF HANDLER
1738 /DHRT DEVICE HANDLER RESIDENCY TABLE (SRES)
1739 / IN LOCATIONS 17647-17665
1740 / ACTUAL ENTRY POINT OF HANDLER
1741 / WE ONLY CARE ABOUT IT IF THE HANDLER IS RESIDENT.
1742 / OTHERWISE IT'S ZERO.
1743 / THE SYSTEM HANDLER AND ALL HANDLERS CORESIDENT WITH
1744 / IT ARE ALWAYS RESIDENT IN CORE AND HAVE THIS ENTRY NON-0.
1747 /DCWT DEVICE CONTROL WORD TABLE (SDCB)
1748 / RESIDES IN LOCATIONS 17760-17776
1749 / BIT 0 1 IF DEVICE IS FILE STRUCTURED
1750 / BIT 1 1 IF THE DEVICE IS READ ONLY
1751 / BIT 2 1 IF THE DEVICE IS WRITE-ONLY
1752 / BITS 3-8 PHYSICAL DEVICE TYPE
1753 / BITS 9-11 DIRECTORY BLOCK # (WE SET TO 0)
1754 \f/PRE-ASSIGNED DEVICE TYPES
1757 /1 HIGH SPEED PAPER TAPE READER
1758 /2 HIGH SPEED PAPER TAPE PUNCH
1760 /4 LINE PRINTER (ANY TYPE)
1763 /7 RF08 (2 PLATTERS)
1764 /10 RF08 (3 PLATTERS)
1765 /11 RF08 (4 PLATTERS)
1766 /12 DF32 (1 PLATTER)
1767 /13 DF32 (2 PLATTERS)
1768 /14 DF32 (3 PLATTERS)
1769 /15 DF32 (4 PLATTERS)
1773 /21 TD8E DECTAPE (12K OR ROM)
1777 /30 VR12 (PDP-12 SCOPE)
1780 DCA SLOT /START ASSIGNING AT BLOCK SLOT 16 (16-25)
1781 TAD (-17 /ALLOW 16 ACTIVE HANDLERS NOT COUNTING DSK
1783 JMS I (CLRTBL /CLEAR OUT IN-CORE TABLES
1784 TAD (SHND+1 /ASSIGN SLOTS, COUNT ACTIVE HANDLERS
1785 DCA XR1 /XR1 POINTS TO SLOT TABLE (DHIT)
1787 DCA XR2 /XR2 POINTS TO DCB TABLE
1789 DCA XR3 /XR3 POINTS TO PERMANENT DEVICE NAME TABLE
1791 DCA XR4 /XR4 POINTS TO HANDLER BUFFER ADDRESSES
1793 DCA XR5 /XR5 POINTS TO RESIDENCY TABLE
1795 DCA OLDPAG /SET 'OLDPAG' TO A RIDICULOUS VALUE
1797 SLTLUP, ADVDSC /GO TO NEXT DESCRIPTOR
1798 ADVBOT /ADVANCING OVER ANY BOOTSTRAPS
1799 JMP BOOT2X /ALL DONE CREATING INTERNAL COPIES OF TABLES
1802 SMA CLA /IS IT ACTIVE?
1804 ISZ COUNT /YES, UPDATE COUNT
1806 JMP I (TOOMANY /TOO MANY ACTIVE HANDLERS
1808 BOOT2X,/ TAD I (SNAME /SEE IF SYS WAS SPECIFIED
1809 / DCA SAMSYS /0 IF DIDN'T SPECIFY NEW SYS
1814 / TAD I (7760 /DIDN'T SPECIFY SYS SO USE CURRENT SYS
1819 /CHKDSK, TAD DSKG1 /WAS DSK SPECIFIED?
1821 / JMP I (BOOT3 /YES, ALREADY SET UP
1829 JMS I [GETPG /GET PAGE OF RESIDENCE
1833 SNA CLA /SAME OR PREVIOUS PAGE?
1834 JMP I CHKRES /YES, SAME PAGE
1836 GET /NO, A NEW PAGE, NEEDS NEW SLOT, ETC.
1839 SPA CLA /IS THIS ALLOWED TO START A NEW GROUP?
1840 JMP I (TWOSYS /NO, IT MAY ONLY BE CORESIDENT WITH SOMETHING EARLIER
1843 DCA OLDPAG /GOT NEW 'OLDPAG'
1850 SPA CLA /IS IT A 'SYS' HANDLER?
1853 JMS I (SETSLT /SET BLOCK SLOT
1856 HNDLOC, DCA I XR4 /STORE AWAY ADDRESS OF HANDLER (OR 0 IF PREVIOUSLY USED)
1861 DCA TEMP /SAVE 2ND WORD
1864 TAD TEMP /ADD 2 WORDS
1867 SNA CLA /WAS 2ND WORD 0?
1869 TAD TMP1 /NO, FORCE BIT 0 ON
1873 NO4C, TAD TMP1 /TAKE CODED NAME
1874 DCA I XR3 /SET PERMANENT NAME TABLE
1877 RTL /GET CORESIDENT BIT
1878 SMA CLA /IS IT RESIDENT?
1881 ENTPT /GET RELATIVE ENTRY POINT
1883 TAD [7600 /CORESIDENT ENTRY POINTS TO SYS MUST BE ON PAGE 7600
1884 NORE, DCA I XR5 /SET RESIDENCY TABLE
1885 INACT, GET /BUT MAYBE IT'S 'DSK'
1889 JMP SLTLUP /NO, IT'S TO BE IGNORED
1890 JMS I (SLOTDSK /YES ASSIGN 'DSK''S LOCATION SLOT
1891 GET /GET RID OF DSK BIT
1897 JMP SLTLUP /REITERATE
1898 \fSAMPG, TAD SLOT /ALREADY HAVE SLOT
1907 \f/ STEPS IN BOOTSTRAPPING:
1909 /1. ASSIGN DSK, IF SPECIFIED, MAKE SURE NFS [BOOT2]
1910 /2. ASSIGN SLOTS [BOOT2A]
1911 /3. GIVE ERROR IF TOO MANY ACTIVE OR TOO MANY SLOTS [BOOT2A]
1912 /4. BUILD INTERNAL COPIES OF DCB, SLOT, NAME, RES [BOOT2A]
1913 /5. ALSO BUILD HANDLER ADDRESS TABLE, CONTAINS [BOOT2A]
1914 / HANDLER ADDRESS IF NOT PREVIOUSLY WRITTEN OUT
1915 /6. COMPARE DCB'S OF NEW AND OLD SYSTEM, IF DIFF, [BOOT3]
1916 / COPY SYSTEM OVER. LEAVE NEW SYSTEM HANDLER
1918 /7. ASK GUY ABOUT NEW DIRECTORY [BOOT4]
1919 /8. READ IN USR, UPDATE ITS TABLES, WRITE OUT USR [BOOTC]
1920 / NAME TABLE, DHIT (SLOT, 2-PAGE,ENTPT)
1921 /9. READ IN CURRENT PAGE 7600 IMAGES [BOOT5]
1922 / SET UP AS FOLLOWS:
1924 / PG7600/H: 07600 IMAGE
1925 / BLOK66/L: 17600 IMAGE
1926 / BLOK66/U: 27600 IMAGE
1927 / THIS IS ACCOMPLISHED VIA:
1930 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L
1931 /10. MOVE DCB AND RESIDENCY TABLES INTO 17600 IMAGE [BOOT6]
1932 /11. MOVE BOOTSTRAP INTO PAGE 7600 IMAGES (2 PLACES) [BOOT7]
1933 /12. WRITE OUT HANDLERS [BOOT8]
1934 /13. ZERO DIRECTORY IF REQUESTED [BOOTD]
1935 /14. PUT SYS, DATA BREAK, CORE LIM IN 07600 IMAGE [BOOTE]
1936 /15. WRITE 7600 IMAGES BACK OUT ONTO TAPE [BOOTF]
1937 / IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L
1940 /16. READ BACK PAGE 7600 IMAGES. MOVE IN FIELD 1 STUFF
1941 / EXCEPT FOR CD AREA, RESTORE TODAY'S DATE,
1944 ISZ SLOT /USE NEXT SLOT
1952 BOOT, ISZ I (RETSW /***?
1954 DCA I (BD /DISABLE 'BUILD' CMD
1955 /SEE IF ARGUMENT WAS GIVEN; TREAT IT AS BOOT DEVICE,
1956 /SAVE HANDLER ADDRESS (MUST BE AN ACTIVE HANDLER)
1957 JMS I (LOCSYS /IN CASE DSK=SYS
1961 / DCA BOOTDV /CHECK THAT # IS GT 7600
1962 BOOT2, TAD DSKG1 /FIND OUT ABOUT 'DSK'
1972 JMS I [BIGNAM /FIND IT IN TABLES
1975 SMA CLA /IS IT FILE-STRUCTURED?
1980 STL RTR /TURN ON BIT 1
1988 AND [7 /GET # OF PLATTERS
1997 AND [7770 /MASK OFF USEFUL INFO
2010 TAD (5723 /'DSK' HASHED
2014 RTL /SYSBIT TO L, CORES BIT TO AC0
2015 SNL SMA CLA /IS IT EITHER SYS OR CORESIDENT WITH SYS?
2016 JMP NORE2 /NO, SO IT'S NOT CORE-RESIDENT
2017 GET /YES, RESIDENT AT ALL TIMES IN 07600
2021 NORE2, DCA I (SRES+1
2026 / JMS SETSLT /NO BLOCK SLOT
2029 DCA I (SDCB /SET DCB
2033 TAD (4631 /HASH CODING FOR 'SYS'
2035 /CHECK THAT NAME IS 'SYS'
2038 /CHECK REL ENTRY PT IS 7
2054 JMP I SETSLT /SYS &CORES HANDLERS GET 0 ENTRY (UNFORTUNATELY)
2061 \f USRBLK=13 /BLOCK OF USR ON SYSTEM DEVICE
2062 USRNPT=36 /POINTS TO USR PTR TO PERMANENT DEVICE NAME TABLE
2063 USRHPT=37 /POINTS TO USR PTR TO DEVICE HANDLER INFORMATION TABLE
2065 BOOTC, TAD [200 /READ FIRST BLOCK OF USR
2069 TAD I [BUFFER+USRNPT /GET POINTER TO NAME TABLE
2070 TAD [BUFFER-400 /ADD IN OFFSET FOR RELOCATION
2071 DCA T1AD /ASSUME BOTH TABLES OCCUR IN THE SECOND
2072 TAD I [BUFFER+USRHPT /BLOCK OF THE USR
2074 DCA T2AD /GET POINTER TO DHIT
2075 TAD [400 /READ BLOCKS 2 AND 3 OF USR
2076 JMS I [SYS /INTO BUFFER,BINARY
2080 JMS I [MOVE /MOVE IN PERMANENT DEVICE NAME TABLE
2085 / TAD SAMSYS /WAS SYS SPECIFIED?
2088 / TAD I T2AD /NO, USE CURRENT SYS INFO
2091 / SZA CLA /WAS DSK SPECIFIED?
2093 / TAD I T2AD /MAKE SAME AS SYS
2095 MVSHND, TAD [-17 /NOW PUT IN SLOT WORDS (DHIT)
2102 TAD [4400 /RE-WRITE USR
2107 IFNZRO BUFFER-5400 <ERRRR,XX>
2108 \fBOOTD, TAD DRECT /WANT NEW DIRECTORY?
2111 TAD L5400 /YEP. WRITE ONE
2118 TAD SAVHID /V3D SET NEW H.O. DATE WORD
2119 DCA I [7777 /SET UP NEW CORE LIMIT
2120 TAD SYSLOC /MOVE IN FRESH COPY OF SYS HANDLER
2129 TAD [-200 /PUT SYS HANDLER INTO REC 0 BUFF. ???
2134 PG7600+200 /RESIDENT F0 CODE
2135 JMS I (WRITCC /WRITE CCB AND DATA BREAK FILLERS
2137 TAD SYSLOC /MOVE IN COPY OF 27600 AGAIN
2147 DRECT, -1 /1 MEANS WRITE A ZERO DIRECTORY
2148 /0 MEANS DON'T TOUCH DIRECTORY
2149 /-1 MEANS ASK GUY FOR OPTION
2150 \f/SEE IF NEW SYSTEM HAS SAME DCB AS CURRENT SYSTEM
2151 /THIS MAY WELL CAUSE EXTRA I/O WHEN GOING FROM RF08=K TO RF08=M
2155 DCA SAVDAT /SAVE TODAY'S DATE FOR FUTURE REFERENCE
2156 TAD I (DCBTBL /GET DCB OF CURRENT SYSTEM
2161 TAD SAVLOC /DON'T COPY IF DID 'BUILD'
2162 SNA CLA /WAS THE 'BU' COMMAND USED?
2163 TAD [-10 /NO, USE 'SZA CLA'
2164 TAD SNACLA /YES, USE 'SNA CLA'
2172 /NOTE: THIS PROCEDURE DOESN'T COPY BOOTSTRAP IF NEW DEV=OLD DEV.
2173 / THEREFORE YOU CAN'T CHANGE BOOTSTRAPS
2174 / CHECK ON AFFECT FOR TD8E/ROM INTERACTION
2180 JMS I [GETPG /GET PAGE OF SYS HANDLER
2181 DCA SYSLOC /PAGE OF START OF NEW SYSTEM HANDLER
2189 SMA CLA /IS IT 1- OR 2-PAGES?
2190 JMP ONEPG /GUESS WHAT THIS MEANS [HINT LOOK AT LABEL]
2194 JMP I (NOTNUF /WE CAN'T RUN IN 8 K
2198 SYSLOC, HLT /MOVE SYSTEM HANDLER
2200 SAVLOC, 0 /TO 10000-10377
2203 \f/ASSUMES NEW PROPOSED SYSTEM HANDLER IS IN 10000-10377
2205 /CAN'T DESTROY OS/8, IE. CAN'T USE PG 0 TEMPS
2207 SYSWP, 0 /ROUTINE TO MOVE SYS HANDLER AROUND
2208 ISZ SWAPER /DIDDLE SWAP INDICATOR
2209 CLA CMA /-1 MEANS NEW HANDLER IS IN
2213 SNA CLA /DO WE HAVE 8K?
2214 JMP SWAPLW /YES, DON'T SWAP WITH FIELD 2
2215 TAD L7600 /NO, CAN'T HURT TO SWAP FIELD 2
2221 DCA STEMP /SWAP ENTIRE PAGE (EXCEPT LAST 4 LOCATIONS)
2222 SWAP3, CDF 10 /SWAP 27600 & 2ND PAGE OF HANDLER
2240 DCA OUT /7607 ALWAYS TARGET DESTINATION
2244 TAD (7607-7743-1/ONLY 7607-7743 GETS MOVED
2248 DCA SYSQ /TEMP STORE
2263 AMTCOR, 1 /HIGHEST CORE BANK
2264 SAVLC, 0 /MUST BE ABOVE 3577
2266 IN, 0 /POINTS TO HANDLER AREA AT ONE NAMED SYS
2267 OUT, 0 /POINTS TO 7607 HANDLER
2268 SWAPER, 0 /-1 MEANS NEW HANDLER IN
2269 \f/MUST BE ABOVE OS/8, NO PAGE 0 LITERALS
2274 ISZ JMPGET /POINT TO CORRECT CHAR
2275 ISZ CHCNT /NEED WE READ?
2276 JMPX, JMP JMPGET /NOT YET
2277 TAD REOF /YES. DID LAST YIELD EOF?
2279 JMP I (BADINP /SOMETHING IS WRONG.
2281 P200, 0200 /READ INTO FIELD 0
2284 JMP RERROR /READ ERROR
2285 RECNO2, ISZ RECNO /POINT TO NEXT RECORD
2287 DCA CHCNT /NEW CHARACTER COUNT
2291 DCA JMPGET /RESET JUMP SWITCH
2294 JMPGET, JMP . /IF WE GET CAUGHT HERE, WE KNOW IT
2295 JMP CHAR1 /ASSEMBLE FIRST CHAR
2296 JMP CHAR2 /SECOND CHAR
2297 TAD JMPX /THIRD CHAR HERE
2298 DCA JMPGET /RESET SWITCH
2303 TAD CHTMP /ADD IN THE LAST TEMP STORE
2306 ISZ CHPTR /TO NEXT CHAR
2308 \fCHAR2, TAD I CHPTR
2310 DCA CHTMP /SAVE FOR THIRD CHAR
2314 ISZ ICHAR /PASS UP ERROR RET
2316 RERROR, SPA CLA /FATAL, OR EOF?
2318 ISZ REOF /END OF FILE
2319 JMP RECNO2 /BACK TO MAINSTREAM
2328 \f/BLOCK 0 OF DEVICE CONTAINS INITIAL IMAGE
2329 /OF 17600 FOLLOWED BY 07600
2331 /17600-17646 CD AREA INITIALLY CONTAINS BOOTSTRAP
2332 /17647-17665 RESIDENCY TABLE
2334 /17667-17677 PART OF OS/8 KBM
2335 /17700-17740 PART OF OS/8 USR
2336 /17741-17757 USER DEVICE NAME TABLE/ODT
2337 /17760-17776 CONTROL WORD TABLE (DCB)
2340 /07600-07606 PART OF OS/8 CODE
2341 /07607-07743 SYSTEM HANDLER
2342 /07744-07745 STARTING ADDRESS
2343 /07746 JOB STATUS WORD (JSW)
2344 /07747 MUST BE 0 (SOFSET)
2345 /07750-07755 DATA BREAK LOCATIONS RESERVED FOR HARDWARE
2346 /07756-07775 KBM AND ODT
2347 /07776 MUST BE 0 (SBLOCK)
2348 /07777 SOFTWARE CORE SIZE, BATCH FLAGS
2350 /IF SYSTEM HANDLER IS TWO PAGES LONG, THEN WE HAVE INSTEAD:
2352 /BLOCK 66 (LOWER) CONTAINS 17600 IMAGE
2353 /BLOCK 66 (UPPER) CONTAINS 27600 IMAGE (MUST END WITH 4 ZERO'S)
2354 /BLOCK 0 (LOWER) CONTAINS BOOTSTRAP
2355 /BLOCK 0 (UPPER) CONTAINS 07600 IMAGE
2356 \fDSCADV, 0 /ADVANCE TO NEXT DESCRIPTOR
2357 /RETURN 2 MEANS NO MORE
2358 /RETURN 1 MEANS NOW AT BOOTSTRAP BLOCK
2363 JMS I (SKPCRD /SKIP A POSSIBLE GROUP COUNT
2368 JMP I DSCADV /TAKE RETURN1 UPON REACHING BOOTSTRAP RECORD
2372 ISZ DSCADV /TAKE RETURN 2 IF ADVANCED TO END
2375 /RETURN 1 MEANS NO MORE DESCRIPTORS
2379 IAC /COUNT IS ONE MORE
2381 DCA DSCPTR /POINT TO BEGIN OF NEXT DESCRIPTOR
2387 JMP BOTADV+1 /WIERD CASE OF CONSECUTIVE BOOTSTRAPS
2390 ISZ BOTADV /TAKE RETURN1 IF ADVANCED TO END
2393 /WIERD CASES CAN OCCUR IF GUY DELETES ALL ENTRY POINTS IN A GROUP SEPARATELY
2395 /DESCRIPTOR ENTRIES:
2398 / 0 MEANS END OF TABLE
2399 / -1 TO -20 MEANS GROUP COUNT (NOT NECESSARILY ACCURATE)
2400 / -21 TO -400 APPROX MEANS BOOTSTRAP RECORD COUNT
2401 / OTHER MEANS DESCRIPTOR
2402 \fSYSCPY, 0 /COPY OS/8 SYSTEM
2411 JMS I [SYSWP /SWAP IN NEW SYS HANDLER
2413 JMS I [SYS /SAVE PART OF BUILD TO MAKE A BIG BUFFER
2415 27 /SAVE IN BLOCK 27
2416 JMS I [SYSWP /GET BACK ORIGINAL HANDLER
2418 JMS COPY /COPY BLOCK 0
2427 JMS COPY /COPY 51-66
2435 JMS I [SYSWP /GET BACK NEW HANDLER FOR A MOMENT
2436 TAD (3410 /RESTORE CORE WE SAVED
2440 JMS I [SYSWP /RESTORE ORIGINAL SYS HANDLER
2446 DCA COPREC /ARG 1 CONTAINS FIRST BLOCK TO COPY
2448 DCA CPREC2 /MAKE TWO COPIES
2449 STL RAR /CONVERT 'WRITE' TO READ
2451 JMS I [SYS /READ FROM ORIGINAL DEVICE
2456 JMS I [SYS /WRITE ON NEW DEVICE
2459 JMS I [SYSWP /LEAVE WITH ORIGINAL SYSTEM HANDLER STILL IN SYSTEM
2460 JMP I COPY /FALL THROUGH RECORD NUMBER
2463 GET /GET LENGTH OF DEVICE
2465 JMS I [ROTL /GET NUMBER OF PLATTERS
2476 STA /4096 BECOMES 4095
2480 TAD [70 /LEAVE ROOM FOR OS/8
2484 DPROPR, -1 /INITIAL EMPTY DIRECTORY
2506 /EXTRA (DON'T WANT TO COPY):
2513 /SET FIELD 2 IF 12K OR MORE AND SKIP *'ED ITEMS
2515 /1. MOVE NEW SYS HANDLER TO 0,200
2516 /2.* SAVE 34 PAGES STARTING AT 10400 IN BLOCK 27 OF NEW DEVICE
2517 /3. COPY BLOCKS 7-15
2519 /5. COPY BLOCKS 51-66
2521 /7.* RESTORE 34 PAGES
2522 \f/THE FOLLOWING ROUTINES AND VARIABLES MUST BE ABOVE THE LOCATIONS
2523 /IN WHICH OS/8 AND CD LOAD INTO, BECAUSE THEY ARE CALLED BY LDABS.
2524 /FURTHERMORE, NONE OF THESE ROUTINES MAY USE PAGE 0 LITERALS
2525 /OR MAY USE ANY PAGE 0 TEMPORARIES, EXCEPT THAT SOME MAY USE
2526 /PAGE ZERO TEMPORARIES IF THE STORE INTO THEM FIRST
2527 /(EXCEPT THOSE COMMENTED OTHERWISE, WHICH MUST PRESERVE
2528 /THE NEW PAGE 0 AT ALL COSTS, UNTIL IT IS WRITTEN OUT
2552 \f SYDCB=7760 /LOCATION OF SYS,DSK DCB WORDS
2554 BOOT5, JMS I (RECZRO
2556 JMS I [MOVE /PUT RESIDENT FIELD 1 TABLES INTO
2566 BLOK66+47 /COULD SET USER DEVICE NAMES HERE IF DESIRED
2567 BOOT7, JMS I (LOCSYS
2569 / SZA CLA /SAME SYSTEM?
2571 BLOOK, ADVDSC /SEARCH FOR BOOTSTRAP
2572 JMP FNDBOT /FOUND BOOTSTRAP RECORD AMONGST DESCRIPTORS
2573 HLT /IT WASN'T THERE!
2574 JMP BLOOK /KEEP LOOKING
2577 IAC /POINT TO BOOTSTRAP
2579 TAD I DSCPTR /LENGTH OF BOOTSTRAP
2580 /CHECK THAT'S IT'S LE 47 LOCS IF 1-PAGE SYSTEM
2586 TAD [-47 /MOVE FIRST 47 LOCS INTO CD AREA IN 17600 IMAGE
2601 DCA DVBUF /LOCATION OF HANDLER
2606 JMP CN /NO BLOCK SLOT
2607 TAD L15 /CONVERT TO ACTUAL BLOCK #
2619 SYSSIZ, 0 /MINUS MEANS 2-PAGE SYS HANDLER
2620 \fCTRLC, KCC /CLEAR ^C FLAG
2621 TAD I (SWAPER /DO WE HAVE TO SWITCH?
2623 JMS I (SYSWP /YES. INSERT OLD HANDLER
2627 L15, 15 /NOTHING MEANS 0
2631 JMP I [BADARG /MUST BE BETWEEN 0 AND 7
2632 JMS I (RELCOR /FIND REAL AMOUNT OF CORE
2636 JMP I (NOTNUF /MUST BE .LE. REAL AMT OF CORE
2643 \f/ IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L
2648 SMA CLA /IS NEW SYS TWO PAGES?
2650 JMS I [MOVE /YES, NULL MOVE
2664 / JMS I (RECZRO /SIMULATE BOOTSTRAP
2665 TAD [-131 /MOVE UP FIELD 1 CODE
2679 \f/MOVE MOVES CORE AROUND (CALLABLE FROM ANY FIELD)
2681 / TAD (-# OF LOCS TO MOVE
2684 / FROM BUFFER LOCATION START
2688 /MUSTN'T DESTROY OS/8 LOCS, NO PAGE 0 TEMPS!
2695 TAD I MOVE /GET CDF FROM-FLD
2697 ISZ MOVE /POINT TO FROM-BUF
2698 TAD I MOVE /GET LOC TO MOVE
2700 ISZ MOVE /POINT TO TO-CDF
2702 DCA MVDF /GET CDF TO FIELD OF DESTINATION
2703 ISZ MOVE /POINT TO TARGET AREA
2706 ISZ MOVE /POINT TO RETURN
2709 JMP MOVRET /NOTHING TO MOVE
2710 MVCDF2, CDF 0 /GETS ALTERED TO PICK UP F1
2714 ISZ MVTM1 /BUMP POINTERS TO AREAS
2719 MOVRET, HLT /RETURN TO CALLING FIELD
2723 TAD MV7600 /ALLOW FOR PARITY
2731 IOPEN, 0 /PREPARE TO READ INPUT
2734 TAD I (JMPX /RESTORE SWITCH
2736 TAD I (FILPTR /RESULTS OF LOOKUP
2740 DCA I (XFIELD /SETUP LDABS FOR FIELD 0
2742 \fBOOT4, TAD I (DRECT
2744 JMP I (BOOTC /HE'S SPECIFIED ABOUT DIRECTORY ZERO
2745 JMS I [PRWD /YES, NO NEED TO COPY SYSTEM
2746 TEXT /WRITE ZERO DIRECT?/
2747 TAD [-10 /DON'T WANT TO DESTROY PRECIOUS TABLES
2748 JMS I [GTEXT /GET REPLY
2756 DCA I (DRECT /NO; COULD HAVE SAVED LOCATION BUT I FEEL SAFER THIS WAY
2772 \fTTYOUT, 0 /YOU GUESSED IT
2775 SZA CLA /ARE WE ECHOING?
2782 JMS I (CTCTST /TEST FOR ^C.
2789 TAD MV20 /A GROUP COUNT MUST BE IN THE RANGE -1 TO -20
2792 ISZ DSCPTR /IT'S A DARN GROUP COUNT, GO PAST IT
2793 JMP SKPCRD+1 /WIERD CASE OF CONSECUTIVE GROUP COUNTS
2795 ECHOFL, 0 /1 MEANS NOT ECHOING, SAW ^O
2799 DCA SAVHID /SAVE HIGH ORDER DATE BITS
2802 \fPRNAME, 0 /ROUTINE TO PRINT NAME1-NAME4
2808 JMS PRINTE /TYPE OUT CHARS
2810 ISZ COUNT /EXHAUSTED ALL?
2814 JMP I PRNAME /NO . IF NO EXTENSION
2823 TAD CHTMP2 /EXTRACT LEFT HAND SIDE
2831 SNA /IF NULL, GET OUT
2837 SNA CLA /STOP ECHOING?
2848 SNA CLA /PRINT SPACE?
2861 JMP I PRWD /LEAVE IF LAST WORD ENDED WITH 00
2875 LINEUP, 0 /NON-ZERO MEANS PRINT NULLS AS SPACES
2876 \fOVER, JMS ASSEMB /EXTENSION OF LDABS.
2878 TAD I LCKSUM /CHECKSUM OK?
2880 JMP BADINP /SOORY ABOUT THAT
2882 JMP OVROUT /SKIP ERROR EXIT
2886 OVROUT, TAD I (LDABS
2890 ASSEMB, 0 /ASSEMBLE TWO 6 BIT WORDS
2892 JMS I PROTL /INTO A SINGLE 12 BIT WORD
2909 PRNT, 0 /CHARACTER PRINT ROUTINE
2910 TAD ("\ /IF NOT RUBOUT, AND IF RUBOUT WAS
2911 ISZ RUBFLG /LAST, ECHO \.
2917 RUBFLG, 0 /RUBOUT FLAG
2919 \f/LDABS DOES A REAL LIVE ABSLOAD IF AC=0
2920 /IF AC=-2 THEN IT IS LOADING A HANDLER, THIS IS DONE AS FOLLOWS:
2922 /THEN LOAD CONSEC WORDS INTO DESCRIPTOR TABLE
2923 /AT NEXT ORIGIN, LOAD WORDS INTO HANDLER AREA (ALLOW ORIGINS)
2925 /CAN'T USE PAGE 0 LITERALS IN CASE LOADING OS/8
2928 DCA LODTST /-2 IF HANDLER, 0 IF OS8
2931 DCA CKSUM /CLEAR CHECKSUM
2932 JMS I (ICHAR /GET A BUFFER CHAR
2933 JMP I LDABS /NO INPUT FOUND
2935 JMP .-3 /IGNORE BLANKS
2937 SZA CLA /IS IT LEADER?
2938 JMP I (BADINP /WASN'T 200..PROBABLY NOT BINARY
2939 LEADER, JMS I (ICHAR
2940 JMP I LDABS /STRANGE....ALL LEADER!!!
2942 JMP LDABS2 /START OVER.BLANKS AFTER LEADER
2943 TAD (-200 /IS IT STILL LEADER?
2946 NEWWD, SMA /IS IT < 200?
2947 JMP FIELDW /NO.TEST FOR FIELD SEETING
2948 TAD (200 /RESTORE CHARACTER
2951 JMP I (BADINP /EOF BETWEEN WORDS. HOW NICE!
2955 TAD (-200 /200 FINISHES US UP
2959 JMS I (ASSEMB /ASSEMBLE LAST WORD READ
2960 SZL /IS IT AN ORIGIN?
2962 XFIELD, HLT /GETS CDF N
2963 DCA I ORIGIN /STORE THIS WORD
2965 ISZ ORIGIN /SHOULD NEVER SKIP, BUT...
2968 TAD (200 /GIVE ERROR IF ORIGIN ADVANCES TO 7600
2972 TAD WD2 /MAKE UP CHECKSUM
2977 \fORGTST, DCA ORGX /TEST FOR ORIGIN
2978 TAD LODTST /GET POINTER TO PROPER ORIGIN
2981 TAD ORGX /OS/8 - USE REAL ORIGIN
2982 ORI, DCA ORIGIN /BUFFER AREA
2983 TAD LODTST /HANDLER LOAD?
2986 TAD ORGX /DON'T START LOAD UNTIL *0 IS FOUND
2989 DCA .-1 /FOUND *0..DO THE LOAD
2990 ISZ LODTST /YES. BUMP LODTST TO LOAD HANDLER NEXT
2995 JMS FIRST /FIRST TIME THROUGH
2996 /DO THIS BETTER; ALSO MAKE SURE HANDLER DOESN(T HAVE A FILED PSEUDO
2998 DCA XFIELD /AT THIS POINT, WE START
2999 CLA CMA /LOADING THE HANDLER INTO THE
3000 DCA LODTST /AREA SPECIFIED BY HNDORG+1
3001 /CHECK 'ORIGIN' TO SEE IF HEADER WAS RIGHT SIZE
3002 /ALSO ELSEWHERE, CAN CHECK ORIGIN WHEN BUMPING TO SEE
3003 /IF WE HIT ANY MAGIC LOCATIONS
3004 TAD ORGX /SEE IF LEGAL RE ORIGIN
3006 DCA ORIGIN /ACTUAL FIELD 1 ORIGIN
3007 / TAD SNACLA /LOADING FIELD 1..TEST ORIGINS
3010 FIELDW, TAD (-100 /LESS THAN 300 FAILS
3017 JMP I (BADINP /DISECT WORD TO CATCH GARBAGE
3018 TAD LODTST /IF LOADING HANDLER, IGNORE FIELD
3022 AND (70 /EXTRACT FIELD SETTING
3025 FIELD2, JMS I (ICHAR
3040 /-2: LOADING HEADER OF HANDLER
3041 /-1: LOADING HANDLER
3046 JMP ORI /HANDLER - USE HANDLER SPACE
3055 NEWLIM, 0 /NEW END OF DESCRIPTORS
3056 RETSW, 0 /0 MEANS RAN FROM OS/8, 1 MEANS RAN STANDALONE
3059 BEGLIN, ZBLOCK LNLNGT
3062 /CTCFAK, .+1 /^C MUST NOT RETURN TO ANY SYSTEM.
3063 / JMP I CTCFAK /CTCFAK MARKS OUR PLACE DURING
3064 / /SYSGEN, AND ^C WILL RETURN TO THAT PLACE.
3065 /*** THIS STUFF GOES AWAY ON A BOOT
3068 TAD I [7200 /HAS SPECIAL CODE BEEN OVERLAID BY HANDLERS?
3072 JMP I (NOROOM /YES, TOO BAD
3077 TAD [6600 /SAVE OLD SYSTEM HANDLER IN 16600
3097 SNA CLA /NOT IF FROM SCRATCH
3098 JMS I (SYSWP /GET OLD HANDLER IF ANY BACK IN
3106 JMS I (SYSWP /PUT IN NEW HANDLER
3110 JMS I (LDABS /PAST HERE PAGE 0 IS GONE
3122 0 /ONLY LOADED FROM PAPER TAPE.
3125 0 /SET SOFTWARE CORE SIZE TO 'UNKNOWN'
3128 0 /FORCE ABSLDR TO LOAD THIS PAGE
3144 BINARY /MOVE ONESELF DOWN
3146 JMP I (LDR /EXECUTE IN FIELD 0
3147 LDR, JMS LEDER /PUNCH 72 FRAMES OF 200
3148 DCA CHECK /0 CHECKSUM
3168 JMS I (GETNUM /GET LOWER LIMIT
3172 JMS I (GETNUM /GET UPPER LIMIT
3207 \fLEDER, 0 /PUNCH LEADER/TRAILER
3241 JMS I (PNCH /FIELD 0
3244 JMS I (CKSUMM /*7600
3252 JMS I (CKSUMM /*7777
3272 DIRLOC=1400 /FROM OS/8 ASSEMBLY
3279 1234 /MAGIC NUMBER WHICH IF NOT HERE, MEANS HANDLERS OVERLAID
3284 JMS I (MOVE /SAVE CURRENT 7600
3289 TAD (-7 /MOVE 6600 TO 7600
3296 TAD (-34 /FINISH MOVING FIELD 0
3304 TAD (5 /V3C SUBTRACT OFF LENGTH OF ABSLDR
3305 TAD I (DLENGTH /FILL IN INITIAL LENGTH
3307 DCA I (DIRLOC+14 /OS8 HAS INITIAL DIRECTORY
3308 \f CIF 0;WRITE;4200;7400;0;ERR /INITIAL REC.0
3309 CIF 0;WRITE;4200;7400;66;ERR /ALSO WRITE RECORD 66
3310 CIF 0;WRITE;4210;DIRLOC;1;ERR /INITIAL DIRECTORY
3311 CIF 0;WRITE;5000;0;7;ERR /KBM
3312 CIF 0;WRITE;4610;0;13;ERR /USR
3313 CIF 0;WRITE;4111;3400;26;ERR /ENTER OVERLAY
3314 CIF 0;WRITE;4701;2000;54;ERR /SAVE, DATE, MON ERROR, CHAIN OVERLAYS
3315 CIF 0;WRITE;4101;LDRCTL;70;ERR /ABSLDR CORE CONTROL BLOCK
3316 CIF 0;WRITE;5010;2000;71;ERR /ABSLDR
3320 SNA CLA /SCRATCH BUILD?
3322 TAD Z7600 /YES /MOVE 17600 UP THERE
3333 /RELATIONSHIP BEWTWEEN OS/8 CORE IMAGE AND BLOCKS ON SYSTEM DEVICE:
3335 /ITEM CORE LOC BLOCKS
3338 /OVERLAYS 2000-3577 54-57
3340 /ABSLDR CCB LDRCTL- 70
3341 /INIT BLOCK 0 7400-7777 0
3342 /USR 10000-11377 13-15
3343 /ABSLDR 12000-13777 71-74
3344 /ENTER 13400-13577 26
3345 /SYS 06600-06606 PART OF 07600
3348 CIF 0;WRITE;4600;0;51;ERR /CD
3349 CIF 0;WRITE;5011;0;60;ERR /ODT
3358 /SPECIAL CODE TO CHAIN TO ABSLDR, TO READ IN MCPIP
3361 10 /LOCK USR IN CORE
3362 TAD R7600 /ZERO CD AREA
3370 STL CLA RAR /ALTMODE
3378 TAD CDN /TAKE DEVICE NUMBER
3379 DCA I (7617 /STORE DEVICE NUMBER OF CASSETTE
3380 ISZ I (7620 /V3C FORCE BLOCK 1
3383 DCA I (7746 /SET JSW SO CHAIN DOESN'T DO USROUT
3385 JMS I (200 /CHAIN TO ABSLDR
3389 CIF 0;READ;3701;0;BLDSAV;ERR
3390 CIF 0;READ;3510;0;BLDSAV+20;ERR /RESTORE BUILD
3392 \f WRITE=JMS I (7607
3399 DCA I (DRECT /HAVE TO KEEP DIRECTORY LATER
3401 CIF 0;WRITE;7701;0;BLDSAV;ERR
3402 CIF 0;WRITE;7510;0;BLDSAV+20;ERR
3411 7000 /RESTORE OLD PAGE 7600
3415 \fWRERR, 0 /WRITE ERROR
3416 HLT CLA /HIT CONTINUE TO RETRY
3419 DCA WRERR /POINT BACK TO CIF OF CALL
3422 /RELATIONSHIP BETWEEN CD CORE IMAGE AND BLOCKS ON SYSTEM DEVICE:
3424 /ITEM CORE LOC BLOCKS
3425 /CD 00000-01377 51-63
3426 /ODT 10000-11777 60-63
3428 CSA, 0 /CASSETTE HANDLER ENTRY PT
3436 CLA IAC /IF BLOCK 0, CHANGE TO 1
3439 SNA CLA /BUILDING FROM SCRATCH?
3441 TAD I (BLDCB /YES, GET DCB OF LOAD HANDLER
3443 TAD M270 /CASSETTE DEVICE CODE=27
3445 JMP I CASIT /NOT A CASSETTE
3447 DCA CSA /GET HANDLER ENTRY POINT
3451 3 /SKIP TO NEXT FILE
3454 R7600, 7600 /IGNORE ERRORS
3457 100 /DUMMY READ A PAGE
3458 BINARY /TO SKIP HEADER
3460 SKP CLA /WANT AN ERROR
3461 HLT /A GOOD READ IS BAD!