13 /COPYRIGHT (C) 1972, 1973, 1974, 1975
14 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
18 /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
19 /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
20 /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER
21 /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
22 /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
23 /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
24 /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
27 /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
28 /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
29 /EQUIPMRNT COROPATION.
31 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
32 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
41 /COPYRIGHT C 1972, 1973, 1974
43 /DIGITAL EQUIPMENT CORPORATION
44 /MAYNARD,MASSACHUSETTS 01754
54 /ASSEMBLE AND LOAD AS FOLLOWS:
57 / *BLOAD,BLOAD<BLOAD.03
62 /NOTE DIFFERENCES FROM VERSION 1 BY TRUNCATING
63 /THE SOURCE AFTER TAG "IMAGE" AND THEN:
66 / *LPT:<BLOAD.01,BLOAD.03
69 /ALL CODE FOLLOWING TAG "IMAGE" IS NEW FOR VERSION 3
71 VERSON= 5 /VERSION WORD LOCATED AT TAG "VERLOC"
72 /LEFT HALF CONTAINS 60+VERSON
73 /RIGHT HALF CONTAINS PATCH LEVEL (A=01)
76 /CORRECTIONS MADE FOR V4 J.K 1975
77 / .MADE SWAP ROUTINE A REAL SWAP
78 / ./V FOR VERSION NUMBER
79 / ./C SO NON-BASIC SAVE FILES CAN CHAIN TO BASIC SAVE FILES
81 / .CORRECTED CCB FOR /K
82 / .CALCULATION OF DEFAULT CORE SIZE FOR PDP-8
83 / .TEST FOR BATCH RUNNIG
84 / .CHANGE ORDER OF CISTRT SO A CHAIN CAN BE
85 / CAN BE DONE FROM A .SV FILE WITH A
89 /JR 30-APR-77 UPDATE VERSION AND FIX ERROR IN MAKECI WHEN BATCH NOT
91 \f /OS8 BASIC COMPILER POST PROCESSOR
100 /DUMMY SECTIONS FOR COMPILER/RUNTIME COMMUNICATIONS
104 /BRTS COMMUNICATIONS REGION
133 /PAGE 0 LOCATIONS USED BY LOADER
165 /MORE COMPILER DEFINITIONS
177 STACKA= 7120 /MAIN STACK OF COMPILER
178 EDTBGN= 3212 /START OF EDITOR
179 EDTSIZ= 2100 /SIZE OF EDITOR
180 BRTBGN= 200 /START OF BRTS
181 BRTSIZ= 3400 /SIZE OF BRTS
183 JSW= 7746 /OS/8 JOB STATUS WORD
184 BIPCCL= 7777 /OS/8 SOFTWARE CORE SIZE AND BATCH FLAGS WORD
185 FSTOP1= 7 /ADDR OF BRTS EXIT ROUTINE
187 ENPUNCH /END OF DUMMY SECTIONS
191 LOADER, JMS I (IMAGE /CORE IMAGE FILE PATCH
192 TAD (7577 /EXECUTION RESUMES HERE
195 DCA SWPINF /SET SWAPPER FLAG TO INDICATE 17600 IS IN FIELD 1
196 DCA LINEH /CLEAR LINE NUMBER
198 TAD STACK /ANY UNCLOSED FOR'S ?
206 TAD HIFLD /NO CDF'S IF ONLY 8K
208 JMP NOPATCH /NO PATCHES
215 TAD (SKP /ALWAYS TWO WORDS
219 TAD I (DCB /CHECK FOR TD8E SYSTEM
220 AND (770 /ED FRIEDMAN GAVE ME THIS CODE
221 TAD (-210 /AND I'M TAKING IT ON FAITH
224 TAD I (7612 /IS IT A ROM SYSTEM ?
227 GOTTD, JMP NOTD8E /NO TD/8E OR ROM TD/8E
228 /PREV INSTR NOP'D OUT TO FORCE TD8E (IMAGE)
229 TAD (7377 /TD8E SYS WASTES 400 WORDS
231 STL RAR /SET SWAP INFO (17600 OUT NOW)
233 JMS I (FREEF /GET CDF TO HIGHEST FIELD
234 DCA SWPF1 /INTO 2 PLACES
237 JMS SWAP /MOVE OS8 OUT
242 JMP I (STSTUF /DO SYMBOL TABLE STUFF
243 \fSWAP, 0 /SWAP OS8 RESIDENT
245 AND SWPINF /IS IT A TD8E SYS ?
248 JMS SWPSUB /SWAP 17600 TO/FROM N7600
252 TD8ESYS,JMS SWPSUB /SWAP 17600 TO/FROM N7400
255 JMS SWPSUB /SWAP 27600 TO/FROM N7600
258 TDLIE, CLL CML RTL /FIX UP 07600 STUFF TO MATCH
259 TAD SWPF1 /CIF CDF N0
273 TAD I SWPSUB /GET FIELD
276 DCA SWP2 /ONCE FOR EACH DIRECTION
278 TAD I SWPSUB /GET HI FIELD ADDR
281 TAD L7600 /GET COUNT/POITER
284 TAD I TEMP2 /GET PART OF RESIDENT
286 SWPF1, JMP SWPRET /RETURN IF 8K ONLY
292 DCA I TEMP /INTO HI FIELD
293 ISZ TEMP /BUMP POINTER
294 NOP /JR PROTECT AGAINST WRAP AROUND
295 ISZ TEMP2 /AND PTR/CTR
302 JMS I (FREEF /SAVE FIELD
304 DCA CLRFLD /FOR ARRAY CLEARING
305 TAD FREELO /SAVE THIS ADDR
307 DCA CLREND /FOR END OF ARRAY CLEAR
308 ISZ FREELO /MAKE IT NEXT FREE + 1
310 DCA X10 /ALLOCATE STRING VARS
314 TAD I X10 /LOOK FOR DEFINED STRING VAR
315 DCA TEMP2 /SAVE SYMBOL NUMBER
318 TAD (4010 /IF UNDEF USE 16 CHARS
320 TAD TEMP2 /IS IT DEFINED ?
323 JMS SVSTOR /YES, CREATE ENTRY
326 CDF 10 /ALLOCATE STRING TEMPS
328 DCA STEMPF /INIT FIELD
329 TAD I (STEMPS /AND POINTER
331 STMLUP, TAD TEMP /LOOK AT NEXT ENTRY
333 JMP I (ALLOCA /DONE GO ALLOCATE ARRAYS
337 TAD I X10 /GET ADDR OF NEXT ENTRY
339 P7, TAD I X10 /AND ITS FIELD
341 ISZ X10 /SKIP TEMP NUMBER
342 TAD I X10 /GET SYM NUMBER
345 TAD (110 /GIVE IT MAX SIZE
347 JMS SVSTOR /ALOOCATE IT
349 SVSTOR, 0 /MAKE ST ENTRY FOR STRING VAR
350 TAD TEMP2 /FIND ST ADDR
355 TAD TEMP3 /NUMBER OF CHARS
358 DCA SUBLO /NUMBER OF WORDS
360 JMS SUB /FREEHI,LO=FREEHI,LO-SUBHI,LO
361 TAD FREELO /SAVE ADDR
363 JMS I (FREEF /AND FIELD
365 TAD TEMP3 /PUT IN MAX LENGTH
369 PSN, 0 /PRINT 3 DIGITS DECIMAL
373 PRNTSN, TAD WORD2 /GET NEXT DIGIT
374 CLL RTL /INTO THE LOW ORDER
375 RTL /THREE BITS AND THE LINK
376 DCA WORD2 /SAVE SHIFTED NUMBER
377 TAD WORD2 /NOW DO LAST SHIFT
379 AND (17 /ONLY FOUR BITS
381 JMP NOZERO /NOT A ZERO
382 TAD I (TTY /ANY DIGITS YET ?
384 JMP LEAD0 /NO, ITS A LEADING ZERO
385 NOZERO, TAD (60 /MAKE IT ASCII
386 JMS I (TTY /PRINT DIGIT
387 LEAD0, ISZ XLABEL /BUMP COUNT
388 JMP PRNTSN /MORE DIGIT(S)
390 SUB, 0 /DOUBLE SUBTRACT
391 TAD SUBLO /SUBTRACT LOWER
398 TAD FREEHI /SUBTRACT UPPER
399 DCA FREEHI /SAVE NEW UPPER
400 TAD FREEHI /DID IT FIT ?
403 TOOBIG, DCA LINEH /CLEAR LINE NUMBER
405 JMS I (ERMSG /WRITE MESSAGE
407 JMP I (ABORTL /ABORT RUN
409 TTX, 0 /PRINT CHAR ON TTY
410 TSF /WAIT FOR PREVIOUS CHAR
418 / THIS PAGE AND THE NEXT ONE ARE
419 / OVERLAYED BY THE INPUT BUFFER
420 / AS SOON AS THE ROUTINE "INWORD"
421 / IS CALLED. THIS FIRST HAPPENS
422 / AFTER THE TAG "RELCIT" .
424 STSTUF, TAD FREELO /SAVE START OF RESIDENT -1
426 DCA RESADR /USED TO COMPUTE AMOUNT OF MOVE
427 TAD VARCNT /GET NUMBER OF
431 TAD SVCNT /STRING VARIABLES
439 TAD SACNT /AND STRING ARRAYS
443 JMS I (FREEF /SAVE HIGH FIELD
445 TAD VARCNT /SUBTRACT SPACE FOR
446 CLL RAL /SCALAR TABLE (3 WORDS A PIECE)
448 TAD FREELO /DON'T BOTHER WITH A
449 DCA FREELO /DOUBLE PREC. SUBTRACTION
450 TAD FREELO /SAVE START OF SCALAR TABLE
453 TAD FREELO /CLEAR ALL VARIABLES
455 DCA I X10 /SCALAR TABLE
459 JMP .-4 /JUST TO BE NICE
460 CDF 10 /PREPARE TO MOVE
461 P1, TAD I (LITRL+1/THE NUMERIC LITERALS
462 DCA LFLD /INTO THE SCALAR TABLE
466 NLLOOP, TAD TEMP /ADDR OF NEXT LITERAL
468 JMP NONL /NO MORE NUMERIC LITERALS
472 TAD I X10 /GET ADDR OF NEXT LITERAL
474 P2, TAD I X10 /ALSO ITS FIELD
476 TAD I X10 /NOW ITS VALUE
482 TAD I X10 /NOW THE SYMBOL NUMBER
484 TAD TEMP2 /TIMES THREE
487 TAD FREELO /PLUS START
488 DCA X11 /GIVES STORE ADDR
490 TAD WORD1 /NOW PUT LITERAL INTO TABLE
496 JMP NLLOOP /DO NEXT LITERAL
497 NONL, TAD ACNT /ALLOCATE ARRAY TABLE
499 CLL RAL /FOUR WORDS PER
500 TAD FREELO /SUBTRACT FROM LOWER END
502 TAD FREELO /SAVE THIS
503 DCA NASTAD /START OF ARRAY TABLE
505 CLL RAL /STRING VAR TABLE
507 TAD FREELO /3 WORDS EACH
509 TAD FREELO /AND SAVE IT FOR THE INT
511 TAD SACNT /NOW SPACE FOR STRING
516 TAD FREELO /SAVE FOR INT
518 CDF 10 /PREPARE TO MOVE
520 DCA SLFLD /STRING LITERALS
524 SLLOOP, TAD TEMP /IS NEXT LIT THERE ?
526 JMP I (NOSL /NO, END OF THE LINE
529 JMS SFLD /SET THE FIELD
530 TAD I X10 /GET ADDR OF NEXT
532 P4, TAD I X10 /ALSO FIELD
534 TAD I X10 /THEN CHAR COUNT
536 JMP I (SLIT2 /DO REST OF STRING LIT
542 \fSLIT2, TAD NCHARS /COMPUTE WORD COUNT
545 TAD X10 /TO GET ADDR OF SYMBOL NUMBER
548 CLL RAL /SYM NUMBER TIMES 3
550 TAD SSTADR /PLUS BASE
551 DCA X11 /GIVES ST ADDR
552 TAD NCHARS /ALLOCATE SPACE FOR IT
555 DCA TEMP3 /(SAVE NUMBER OF WORDS)
559 DCA FREELO /BELOW THE SYMBOL TABLES
561 JMP TMSLIT /TOO MUCH STRING LITERALS
566 TAD FREELO /STICK THE ADDR
569 DCA I X11 /INTO THE ST ENTRY
570 JMS I (FREEF /ALSO THE FIELD
572 TAD NCHARS /ALSO THE SIZE
575 TAD FREELO /THIS IS WHERE IT GOES
577 TAD NCHARS /PUT IN THE LENGTH TOO
583 DCA I X11 /MOVE THE LITERAL TEXT
586 P5, TAD TEMP2 /PUT THE FIELD OF THE NEXT
587 DCA I (SLFLD /ENTRY WHERE IT DOES THE MOST GOOD
588 JMP I (SLLOOP /DO THE NEXT LITERAL
589 NOSL, TAD FREELO /SAVE TOP OF DATA LIST
591 TAD DATTOP /IF EMPTY MAKE TOP=BOTTOM
597 TAD FREELO /GET START OF DATA
600 JMP TMDATA /TOO MUCH DATA
607 TAD FREELO /USE X13 TO FILL LIST
612 DATLUP, TAD I X10 /ANY MORE DATA ELEMENTS ?
616 P8, TAD I X10 /GET NEW FIELD
618 P9, TAD DATAF1 /TWICE
620 TAD TEMP /START WITH NEW ELEMENT
623 TAD I TEMP /GET COUNT
625 DATMOV, TAD I X10 /GET NEXT WORD
627 DCA I X13 /MOVE INTO DATA AREA
631 JMP DATLUP /DO NEXT ELEMENT
632 TMDATA, DCA LINEL /ZERO LINE NUMBER
634 JMS I (ERMSG /PRINT ERROR MESSAGE
637 TMSLIT, DCA LINEH /CLEAR THE LINE NUMBER
639 JMS I (ERMSG /PRINT MESSAGE
643 PATLST, P1;P2;P3;P4;P5;P6;P7;P8;P9;0
646 \fALLOCA, TAD ACNT /ANY ARRAYS ?
649 TAD (ARAYST /ALLOCATE ARRAYS
654 TAD I X10 /GET NEXT ARRAY
656 TAD I X10 /GET FIRST DIM
658 TAD (12 /USE 10 IF NONE
659 IAC /ALLOCATE 0TH ELEMENT
661 TAD I X10 /GET SECOND DIM
666 TAD TEMP3 /GET READY TO SUBTRACT
671 AND TEMP /HOW MANY DIMS ?
674 TAD TEMP2 /PRODUCT OF DIMS
676 JMP TIMES3 /MULT BY 3
677 ONLY1, DCA TEMP3 /ZERO SECOND DIMENSION
680 TIMES3, TAD (3 /MULT SIZE BY 3
682 JMS I (SUB /SUBTRACT FROM FREE
684 DCA I X11 /SAVE ADDR IN S.T.
691 ISZ X10 /SKIP SYMBOL NUMBER
694 ALLOCS, TAD SACNT /ANY STRING ARRAYS
698 DCA X10 /ALLOCATE STRING ARRAYS
704 TAD (12 /USE 10 FOR DIM
709 TAD (10 /USE 16 IF NO SIZE SPEC
712 DCA SUBLO /PREPARE FOR MULT
715 TAD TEMP2 /GET NUM WORDS PER STRING
718 JMS I (MUL12 /GET ARRAY SIZE
719 JMS I (SUB /DO SUBTRACTION
720 TAD FREELO /SAVE ADDR
724 TAD TEMP2 /AND STRING SIZE
727 TAD TEMP3 /AND NUMBER OF STRINGS
729 ISZ X10 /SKIP NEXT NAME
730 ISZ X10 /AND NEXT SYM NUMBER
734 INWORD, 0 /READ FROM CODE FILE
735 ISZ ICOUNT /ANYTHING IN BUFFER
737 JMS I (7607 /READ NEXT BLOCK
739 1000 /NOTE: THIS OVERLAYS USED CODE
742 ISZ INBLOK /BUMP BLOCK COUNTER
743 TAD INBLOK-1/RESET BUFFER POINTER
745 TAD (-400 /AND COUNTER
747 NOREAD, TAD I INPTR /GET WORD
748 ISZ INPTR /BUMP POINTER
752 CIPAT, 0 /PATCH TO MAKECI
754 DCA I (JSW /CHANGE JSW
755 COPT, DCA I (CISTRT+1 /& TAKE CARE OF /C
759 \fRELCIT, TAD LOCTRL /FIND START OF CODE
761 DCA SUBLO /BY SUBTRACTING
763 TAD LOCTRH /AMOUNT FROM FREE
766 TAD FREELO /THIS IS THE START OF THE CODE
767 DCA CODBGN /MINUS ONE
768 TAD FREEHI /THIS IS THE FIELD NUMBER
770 TAD LOCTRL /SET UP PROG SIZE COUNT
772 DCA CODSZ1 /LOWER COUNT
776 DCA CODSZ2 /UPPER COUNT
777 TAD BLOCK /SET UP FOR READ AND WRITE
785 RELOOP, JMS I (INWORD /GET A WORD OF CODE
788 TAD TEMP /CHECK FOR OPCODE 5000 (GOTO)
792 TAD TEMP /REMOVE FIELD BITS
796 DCA LBLFLD /FIELD OF LABEL ENTRY
797 TAD TEMP /ZERO FIELD BITS
800 JMS I (INWORD /GET REST OF ADDR
802 JMS I (CHKLBL /CHECK FOR UNDEFINED LABEL
805 AND (7 /GET ADDR TO BE RELOCATED
810 TAD CODBGN /ADD BASE ADDR
812 DCA LOCLO /SAVE LOW PART OF JUMP
814 TAD CODCDF /GET HIGH PART
816 CLL RTL /PUT IT INTO CORRECT PLACE
819 TAD TEMP /PLUS INSTRUCTION
821 ISZ CODSZ1 /BUMP COUNTER
823 ISZ CODSZ2 /CAN'T BE LAST WORD
824 TAD LOCLO /OUTPUT LOW ORDER ADDR
826 NORELC, TAD TEMP /JUST OUTPUT IT
827 RELOUT, JMS I (OUTWRD
828 ISZ CODSZ1 /DOUBLE WORD ISZ BUMP
832 JMP I (LOADIT /DONE RELOCATING, GO LOAD
836 ERMSG, 0 /PRINT ERROR MESSAGE
838 TAD I ERMSG /GET CODE
839 CLL RTR /PRINT FIRST CHAR
843 TAD I ERMSG /PRINT SECOND CHAR
845 ISZ ERMSG /FIX RETURN ADDR
846 TAD (240 /PRINT SPACE
848 DCA TTY /USE TTY AS A SWITCH
849 TAD LINEH /PRINT HIGH ORDER
851 TAD LINEL /THEN LOW ORDER
852 JMS I (PSN /(LINE NUMBER NATCH !)
853 TAD (215 /PRINT CARRIAGE RETURN
855 TAD (212 /PRINT LINE FEED
859 TTY, 0 /CONVERT TO ASCII AND PRINT
863 JMS I (TTX /PRINT CHAR
867 \fLOADIT, JMS I (OUDUMP /DUMP LAST BLOCK
868 TAD LOCTRL /SET UP COUNTER
876 DCA TEMP /CODE BEGIN -1
877 TAD BLOCK /SET UP BLOCK NUMBER
881 TAD CODCDF /SET UP CODE CDF
888 LODLUP, ISZ TEMP /BUMP POINTER
889 JMP NOFJMP /FIELD IS OK
890 TAD CF /BUMP THE FIELD
893 NOFJMP, JMS I (INWORD /GET NEXT WORD
895 DCA I TEMP /SAVE THE WORD
897 ISZ CODSZ1 /MORE CODE ?
901 TAD CF /GET THE FIELD
902 DCA CLEARF /AND SAVE IT
903 CLRLUP, TAD CLREND /IS THIS THE END OF CLEAR ?
906 JMP MORCLR /NO, KEEP GOING
907 TAD CLRFLD /DO FIELDS MATCH ?
910 JMP DONCLR /YES, ARRAYS ARE CLEARED
911 MORCLR, ISZ TEMP /BUMP POINTER
912 JMP CLEARF /DON'T BUMP FIELD
913 TAD CLEARF /DO BUMP FIELD
917 DCA I TEMP /CLEAR THE WORD
919 DONCLR, TAD CLEARF /COPY THE FIELD
921 TAD TEMP /GET THE COUNT
922 TAD RESADR /OF HOW MUCH SYMBOL TABLE
924 TAD TEMP /PUT IT INTO AUTO XR'S
929 TAD I X11 /GET NEXT WORD OF ST
934 JMS MOVFIN /MOVE FINI PAGE INTO 7000-7177
935 JMP I (7000 /GO READ BRTS.SV
936 \fCHKLBL, 0 /CHECK LABEL FOR UNDEF
937 TAD I CHKLBL /GET FIELD
940 TAD I TEMP2 /GET FIRST WORD OF LABEL
942 JMP I CHKLBL /SIGN BIT IS DEFINED
943 CLL CMA RAL /GET ADDR OF LINE NUM
946 TAD I XLABEL /GET HIGH ORDER LINE
949 TAD I XLABEL /GET LOW ORDER
952 JMS I (ERMSG /PRINT MESSAGE
956 FREEF, 0 /MAKE A CDF FROM FREEHI
963 ABORTL, JMS MOVFIN /PUT FINI PAGE INTO 7000-7177
965 JMP I (ABORT-FINI+7000
967 MOVFIN, 0 /FINI PAGE MOVER
969 TAD (FINI-1 /MOVE INT READING CODE
974 DCA TEMP /PUT CORRECT COUNT HERE
982 \fFINI, TAD I XERMSG /ANY ERRORS ?
984 JMP ABORT /YES, DON'T RUN IT
985 TAD XINT /MOVE INT STUFF
987 TAD M12 /10 KEY LOCATIONS
989 TAD XSAVE /INTO A SAFE PLACE
997 TAD BRTS /READ IN BRTS
1006 TAD XINT /MOVE STUFF BACK
1014 TAD (JMP I FSTOP1 /PATCH ^C LOCATIONS
1018 JMP I (BRTBGN /GO START BRTS
1024 XSAVE, 7001+XSAVE-FINI
1026 MUL12, 0 /MULTIPLY 12BITS AND 24 BITS
1027 DCA AC3 /SAVE 12 BIT THING
1028 DCA AC2 /CLEAR REST OF AC
1030 TAD (-15 /ONLY TEST 12 BITS
1033 MULLUP, SNL /WAS BIT ON ?
1034 JMP NOADD /NO, DON'T ADD
1035 TAD SUBLO /ADD TO HIGH ORDER 2/3'S OF AC
1040 NOADD, TAD AC1 /SHIFT AC RIGHT
1049 FCNT, ISZ SC /BUMP SHIFT COUNTER
1051 TAD AC2 /ANSWER IS LOWER 2/3'S OF AC
1057 IOERR, DCA LINEL /ZERO LINE NUMBER
1058 JMS I XERMSG /PRINT MESSAGE
1060 ABORT, JMS I (SWAP /SWAP OS8 BACK
1061 JMS I (200 /CHECK OUT W/ CI BUILDER
1062 TAD (4207 /RESTORE ^C LOCATIONS
1066 TAD ABORTX /CALLED VIA CHAIN ?(FROM EDIT)
1068 JMP I (7600 /NO, RETURN TO OS8
1069 DCA EDTBLK /YES, SAVE EDITOR START
1070 JMS I X7607 /READ IN EDITOR
1076 JMP I (EDTBGN /GO START EDITOR
1078 OUTWRD, 0 /OUTPUT WORD TO TEMP FILE
1079 ISZ OCOUNT /ANY ROOM ?
1081 DCA OWTEMP /SAVE WORD
1082 JMS OUDUMP /WRITE BLOCK
1083 ISZ OUBLOK /BUMP BLOCK NUMBER
1084 TAD OUBLOK-1/RESET BUFFET POINTER
1087 DCA OCOUNT /AND COUNT
1088 TAD OWTEMP /RESTORE AC
1090 DCA I OUPTR /INTO BUFFER
1095 OUDUMP, 0 /WRITE BLOCK
1096 JMS I X7607 /WRITE BLOCK
1106 \f BLDCI=200 /PAGE INTO WHICH MAKECI GETS MOVED
1107 LOADBL=357 /LOC WHERE BCOMP LEAVES BLOAD BLOCK #
1110 TAD I (LOADBL /COME HERE TO CREATE CORE IMAGE
1111 TAD (6 /ALREADY HAVE THIS MUCH
1112 DCA I (LDRBLK /INIT BLOAD OVRLY READER
1114 TAD I (7644 /TEST FOR /V
1120 TAD I (7643 /GET OPTION BITS
1125 SNL CLA /HAVE K OPTION?
1126 JMP LSTART /NO: START LOADER
1129 SZL CLA /HAVE B OPTION?
1130 DCA I (FLGRTS /YES: FLAG IT
1131 TAD TEMP /TEST FOR /C
1140 AND (7 /WIPE ALT MODE
1142 CLL CML RTL /DEFAULT=12K FOR NOW
1145 TAD TEMP /MUST BE >1 HERE
1151 SNL CLA /WHICH HAS MORE CORE?
1152 JMP .+3 /TARGET MACHINE: TOUGH
1153 TAD TEMP /HOST MACHINE
1154 DCA HIFLD /FAKE OUT LOADER
1157 DCA I (FLDCNT /INIT CI BUILDER
1159 DCA I (MYCORE /AND CI STARTER
1161 DCA I (7646 /CLEAR =N BITS
1162 DCA I (7643 /AND EARLY OPTIONS
1163 TAD I (7644 /GET OPTION BITS
1166 SZL CLA /HAVE N SWITCH?
1167 JMP NOTDSY /NEVER SEES TD8E SYSTEM
1170 SNA CLA /HAVE OVER 8K CORE?
1173 DCA I (GOTTD /YES: FORCE SYS=TD8E
1174 CDF 10 /THE QUESTION IS,
1175 TAD I (DCB /WAS IT A LITTLE WHITE ONE
1183 JMP .+3 /IT WAS TRUTH!
1184 TAD (SWAP-LOADER+5600
1185 DCA I (TDLIE /LIES: MUST LIE TO SWAPPER ALSO
1187 NOTDSY, DCA I (TDFLAG /NOT 0 MEANS HAVE TD8E
1189 DCA I (ERMSG /FORCE LOAD ABORT
1190 LSTART, TAD (BLDCI-1 /MOVE CI BUILDER
1191 DCA X10 /INTO LOW CORE
1198 TAD HIFLD /START OF BLOAD V1
1200 JMP I IMAGE /RETURN TO LOADER
1203 CCLIST, 0 /1ST 4 WORDS OF CCB
1206 1000 /JOB STATUS WORD
1209 \f CCB=1000 /LOC TO START BUILDING CCB
1211 MAKECI, 0 /THIS PAGE GETS MOVED!
1213 JMP .-1 /SEE TAG "ABORT" IN BLOAD V1
1214 ISZ I (ERMSG /WHY ARE WE HERE?
1215 JMP BOSFIX /GENUINE ABORTION
1220 TAD I X11 /1ST FOUR WORDS OF CCB
1229 AND CODCDF /LOWEST FIELD USED
1232 SNL /THIS FIELD USED?
1233 JMP NOCODE /NO: BYPASS IT
1234 SZA CLA /IS IT FULL?
1236 TAD CODBGN /PROBABLY NOT
1249 SMA CLA /NEED TOP PAGE?
1250 TAD (3700 /NO: 37 PAGES
1251 TAD TEMP /YES: 40 PAGES
1256 ISZ FLDCNT /NEXT FIELD ZERO?
1257 JMP CCSEGS /NO: LOOP
1269 DCA I (CCB /NEGATE SEG COUNT
1270 JMS I (7607 /READ CI STARTER
1271 KP200, 200 /FROM END OF BLOAD.SV
1272 CISTRT /INTO HI CORE
1273 LDRBLK, 0 /INIT BY "IMAGE"
1274 BOSPT1, 7600 /CAN'T GET THIS ERROR
1276 TAD TDFLAG /PASS TD8E FLAG
1279 DCA I (RTSFLG /AND BRTS FLAG
1281 DCA I (NOCORE /AND CORE LIMIT
1282 TAD (17 /SAVE 10 KEY LOCATIONS
1290 JMS I (7607 /CALL SYS HANDLER
1292 CCB-200 /(AND PRECEDING PG)
1293 37 /INTO SCRATCH BLOCK
1294 K3777, 3777 /CAN'T GET THIS ERROR
1300 TDFLAG, 1 /0 MEANS TD8E IS DEATH AT RT
1301 FLGRTS, -1 /0 MEANS INCL BRTS IN CI
1303 BOSFIX, TAD I (BIPCCL
1306 JMP I MAKECI /BATCH NOT RUNNING
1310 DCA BOSCDF /CDF TO BATCH FIELD
1312 TAD I BOSPT1 /GET BATCH WRDS
1314 DCA I BOSPT2 /BACK INTO POSITION
1346 VTEXT, TEXT /BLOAD V/
1348 VERLOC, 100^VERSON+6001
1353 BSTART=200 /START ADDR FOR BRTS
1361 DCA I X10 /ZERO EDITOR
1363 DCA I X10 /AND LOADER BLOCK #S
1368 FINDSV, TAD I X11 /LOOKUP SOME SAVE FILES
1370 JMP LUBUF /GO LOOK FOR BASIC.UF
1371 DCA XXXXSV /SAVE POINTER TO NAME
1372 CLA IAC /THEY'RE ON SYS
1378 JMS I (ERRORX /ERROR
1379 TAD XXXXSV /GET STARTING BLOCK
1382 DCA I X10 /INTO INFO AREA
1387 JMS I (200 /LOOKUP BASIC.UF
1389 BUFN /(USER DEFINED FUNCTIONS)
1391 JMP .+3 /OK IF NOT THERE
1392 TAD .-3 /GET STARTING BLOCK +1
1395 DCA I X10 /INTO INFO BLOCK
1401 TAD I (7607 /GET BRTS STARTING BLK
1403 DCA I (BRTSST /INTO RTS READER
1411 BRTSN, FILENAME BRTS.SV
1412 BAFN, FILENAME BASIC.AF
1413 BSFN, FILENAME BASIC.SF
1414 BFFN, FILENAME BASIC.FF
1415 BUFN, FILENAME BASIC.UF
1421 SZA /IS THERE A SYSTEM VALUE?
1422 JMP I CORE /YES: USE IT
1448 CLA CMA /HI FIELD IS #FIELDS-1
1456 \fGETRTS, 0 /READ BRTS INTO 0-6777
1463 NOCORE, -1 /CAN'T GET THIS ERROR
1465 BINIT, ISZ RTSFLG /NEED BRTS?
1466 JMP BRTSIN /GOT IT: START IT
1471 SR2, 20 /CAN'T GET THIS ERROR
1472 BRTSIN, CDF 10 /WHAT ARE WE RUNNING ON?
1474 TAD I (DCB /CHECK FOR TD8E SYSTEM
1475 AND (770 /ED FRIEDMAN GAVE ME THIS CODE
1476 TAD (-210 /AND I'M TAKING IT ON FAITH
1479 TAD I (7642 /IS IT A ROM SYSTEM ?
1482 JMP PSADJ /NO TD/8E OR ELSE ROM TD/8E
1484 SNA CLA /IMAGE OK ON TD8E?
1485 JMS ERRORX /NO: DONT RUN IT
1503 TAD CDFTOP /PATCH MONITOR FIELD STUFF
1504 DCA I (7642 /CDF CIF HI CORE
1507 DCA I (7721 /CIF HI CORE
1511 JMS I (CORE /HOW MUCH CORE DO WE HAVE?
1512 TAD NOCORE /HOW MUCH DO WE NEED?
1514 JMS ERRORX /INSUFFICIENT CORE
1515 TAD I SR1 /RESTORE KEY LOCATIONS
1521 TAD (JMP I FSTOP1 /PATCH CTRL/C LOCS
1525 TAD SWPINF /TELL BRTS OS/8 PG 17600 OUT NOW
1529 JMP I (BSTART /START BRTS
1540 JMS GETRTS /YES: READ IT
1541 TAD (4207 /RESTORE ^C HOOKS
1545 JMP I (7600 /BACK TO OS8
1549 RTSFLG, -1 /0 MEANS BRTS IS IN CORE
1550 FLAGTD, 1 /1 IF TD8E IS OK AT RUNTIME