1 /12 OS8 MONITOR SYSTEM OS8 VERS. 3D
11 /COPYRIGHT (C) 1970,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
45 \f/13-APRIL-1977 RL/EF/HJ/SR
48 /THIS VERSION OF OS/8 IS THE BATCH OPERATING SYSTEM
49 /AS WELL AS THE STANDARD KEYBOARD SYSTEM. THIS SYSTEM
50 /IS EXTERNALLY COMPATIBLE WITH ALL PREVIOUS OS/8-PS/8
51 /USER PROGRAMS. HOWEVER, INTERNALLY THE SYSTEMS ARE
52 /QUITE DIFFERENT. THE MARCH 1972 OS/8 WILL NOT RUN BATCH.
53 /THIS VERSION IS COMPATIBLE WITH CCL.
55 / SYMBOLIC REFERENCES TO VARIOUS OVERLAYS:
57 MEOVLY=26 /DIRECTORY OVERFLOW OVERLAY FOR "ENTER"
58 MCDREC=51 /COMMAND DECODER
59 MSOVLY=54 /"SAVE W. ARGS" OVERLAY
60 MSOVL2=55 /SECOND PART OF SAVE W. ARGS
61 MERRTN=56 /MONITOR ERROR ROUTINE
62 MRUNRC=57 /"CHAIN" OVERLAY
64 MFREE=70 /BEGINNING OF FILE STORAGE
76 /2. FIXED KILLER CLOSE BUG
77 /3. ADDED VERSION NUMBER
78 /4. ^U, RO TO BOL, AND LF ALL PRINT '.' AGAIN
79 /5. CALL TO USR WITH CODE OF 0 GIVES ERROR
80 /6. MONITOR ERROR MESSAGES NOW GIVE EXPLANATION
81 /7. ENTER NOW MOVES 7 FILES TO MAKE ROOM INSTEAD OF HALF SEGMENT
82 /8. DIRECTORY VERIFICATION HAS IMPROVED
87 /2. PUT IN SELF-STARTING STUFF
88 /3. FIXED CCB BUG FOR 17600
90 /FIXES TO FIELD RELEASE
92 /1. ABSLDR CHECKS PAGE 0 LITERALS
93 /2. FIXED BUG RE MONITOR ERROR MESSAGES
94 /3. ADDITIONAL INFO FIX
97 /FIXES FOR MAINTENANCE RELEASE:
99 /1. CHANGED VERSION NUMBER OF MONITOR TO V3M
100 /2. INCORPORATED PATCH RE LOC 13121 AFTER MONITOR ERROR
101 / [SEQ #1, DSN APRIL 1975]
102 /3. ALLOW CHAIN TO WORK ON FULL FIELD SAVES
103 / [SEQ #2, DSN JUNE 1975]
104 /4. ALLOW ABSLDR/I TO WORK ON FULL FIELD CORE IMAGES
105 / [SEQ #1, DSN OCTOBER 1975]
106 /5. ADDED INTERNAL VERSION NUMBER TO ABSLDR AT LOCATION 2200
107 / MAINT. RELEASE VERSION # IS V4
108 /6. SET INITIAL ABSLDR DATE TO 1-NOVEMBER-1975
110 /V3D AND OS/78 CHANGES:
112 /1. ACCEPT DEC STANDARD DATE FORMAT FOR INPUT (DD-MMM-YY)
113 /2. CHANGED VERSION NUMBER TO V3Q
114 /3. ADDED DATE/78 CHANGES
115 /4. FIXED BUG ABOUT WAITING FOR TTY FLAG & BATCH
116 /5. ADDED STUFF FOR LINKER [USES SOFSET]
117 /6. CHANGED ABSLDR DATE TO 1-JUNE-77
118 /7. DISALLOW RUN OF PROGRAM WITH BIT 4 OF JSW ON [OS/78 ONLY]
119 /8. ASSIGNED RESIDENT BITS FOR SCOPE AND OS/78
120 /9. ALLOW @ IN KBM COMMAND
121 /10. COULD RUN INIT.CM ON SYSTEM START-UP
122 /11. CHANGED BAD CORE IMAGE MSG TO CORE IMAGE ERR
123 /12. CHANGED ABSLDR/I SO THAT IT SETS UP JSW AND SA
124 \f /KEYBOARD MONITOR FOR OS/8 SYSTEM - UNCOMMENTED AT PRESENT
127 MTHREE=CLA CLL CMA RTL
129 PRINT, JMP I PRNAME /MUST BE AT 200 FOR BATCH
130 JMP .+3 /****GETS CIF CDF N FOR BATCH*****
131 TSF /****GETS JMP I .+1******
132 JMP .-1 /*GETS BOSPRT*****
217 IFNZRO .-330 <CCLTRB,ERRR>
252 SNA /ARE THERE ARGUMENTS?
253 JMP I KSV2A /NO..USE CCB
254 JMS I [SHNDLR /READ IN ARGUMENT OVERLAY
258 JMP KMONER /NORMAL RETURN IS TO 400
260 KMNTRY, JMP I HANDAD /V3
263 IFNZRO .-403 <BTCHER,XXXX>
266 TAD [BEGLN-1 /ADDRESS REFERENCED BY INIT
270 XXX=[PRINTQ /NEED LITERAL IN SAME PLACE
271 NOP /V3D ALLOW @ IN NAME
281 IFNZRO .-431 <SEECCL,ZZZ>
285 CCLSW, PRQMRK /MODIFIED FOR CCL TO 'GETCCL'
286 IFNZRO CCLSW-435 <SEECCL,ZZ>
293 JMP ASGN2+1 /NO USER DEV. DO A DEASSIGN
294 TAD NM2 /SEE IF WE HASH IT
296 JMP ASGN2 /DON'T HASH..ONLY 1 OR 2 CHARS
298 RAL /LINK BECOMES 4000 IF NECESSARY
344 MOVBUF /USED AS POINTER TO FIELD 1 SR
358 SAVE, TAD [SAVE12 /CHANGE ERROR RETURN ADDRESS AS WE WILL DESTROY CORE
362 CIF 10 /MOVE THE LINE BUFFER TO 1600 DURING
363 JMS I PGNAME+1 /A SAVE, AS HANDLER WIPES IT OUT
364 TAD LXR /LET'S MOVE THE REGISTER AROUND
373 HNDLAD, /REPLACED WITH 1001 BY SAVE
375 WRCTLB, 7001 /WRITE OVERLAY AND CCB
382 \f *573 /LOADS SYSTEM ODT OVER THE MONITOR
388 /LOCATION 600 IN ODT IS A HLT (ERROR RETURN)
402 JMS I [RESET /RESET ONLY IF NO START ADR SPECIFIED
404 STCOMN, DCA I [MSTADR
406 JMP .-1 /WAIT FOR PRINTER TO FINISH
426 DCA I [OLDT9 /ZERO OUT "DIRECTORY IN CORE" KEY
437 FILE, 0 /READ IN THE HEADER BLOCK
438 JMP KMONER /ERROR WHILE READING HEADER BLOCK
440 JMS I [CCBTST /TEST FOR VALID CORE CONTROL
443 JMS I KRCHK /V3D CAN'T RUN SYSTEM CUSP UNDER OS78
447 DCA I [MSTADR /MOVE THE STARTING ADDRESS INTO UPPER CORE
452 TAD I [CCB+3 /SET UP THE JOB INFORMATION AREA
453 JMS I [RESET /AND CLEAR INFORMATION ABOUT "RUN" HANDLER
455 DCA I [MSWITC /SET MSWITC TO INHIBIT LOADING 7400
456 GETSW, SKP /SKP FOR GET, NOP FOR RUN
461 DCA I [MSTADR /IF A GET, SET STARTING ADDRESS TO RETURN
464 CLL CMA RAL /POINT TO LAST DOUBLEWORD IN CCB
466 DCA TM1 /TM1 POINTS TO SEG. ADDRESS
467 TAD I TM1 /STORE ADDRES TO READ POSSIBLE OVERLAY
469 ISZ TM1 /POINT TO SEGMENT CONTROL WORD
470 TAD DEVHND /IF THE HANDLER IS IN 7600, OR
471 TAD [200 /IF THE SEGMENT DOES NOT LOAD OVER
472 CLA RAL /7000, NO OVERLAY IS NEEDED. ALSO IF
473 TAD I TM1 /THE SEGMENT IS IN FIELDS 1-7.
476 JMP I [RUN6 /NO PROBLEMS.. READ STUFF IN
477 TAD I [MREAD+2 /SEE IF WE OVERLAY 7000
479 TAD I TM1 /ADD IN CONTROL WORD
481 SPA /IF NEGATIVE, 7000 IS NOT OVERLAYED
483 TAD [7600 /GETS 0, 100, 200, OR 300
484 SMA /IF POSITIVE READ 3 PAGE OVERLAY
485 ISZ I [PGNAME+1 /POINT TO NEXT TO LAST RECORD
489 CMA /GET RECORD TO READ OVERLAY FROM
492 JMS I DEVHND /READ OVERLAY FROM THE FILE INTO PAGES
494 6200 /THEN WRITE THE WHOLE MESS OUT
497 JMS I [WRCTLB /WRITE OUT THE OVERLAY+CCB
498 DCA .-1 /BUT ONLY ONCE!!
500 DCA I [MSWITC /ENABLE READ OF OVERLAY
501 TAD RDCNT /SEE IF THIS SEG IS EXHAUSTED
505 ISZ I [CCB /ARE WE DONE ALL SEGMENTS?
506 SKP /NOT YET. LOOP UNTIL DONE
508 RUN5, DCA I TM1 /SAVE ALTERED CONTROL WORD
511 / DCA I TM1 /THIS COULD BE OPTIMIZED
515 KMER1, JMS I [PRNAME /DEVICE NOT AVAILABLE
517 TEXT / NOT AVAILABLE/
519 /MUST BE AT 1000 FOR BATCH
520 BEGLN, 0 /LINE BUFFER COULD BECOME "@
525 KMINIT, CDF 10 /INITIALIZATION - DESTROYED BY LINE BUFFER
526 ISZ I [7700 /LOC 17700=7777 IF I/O MONITOR IS KNOWN
527 JMP .+3 /TO BE IN CORE, SO SET UP
528 TAD [200 /THE INITIAL POINTER FOR CALLS TO THE MONITOR
529 DCA SYSTEM /ACCORDINGLY
543 TAD I PDBUF+1 /SEE IF BATCH IS SET
544 RAL /IF YES, GO TO PAGE 0 TO CONTINUE
545 SMA CLA /IF IT ISN'T, CONTINUE NORMALLY
546 JMP INTGO /NORMAL KEYBOARD SYSTEM
547 DCA I RTWTPT /DON'T WAIT ON TTY FLAG IF BATCH IS RUNNING
548 TAD I [JSBITS /IS BOS IN PLACE?
551 JMP BATCH /NO. GO READ IT IN.
552 JMP BCHGO /YES. START IT UP.
556 SNA CLA /IS THERE A ^C IN THE READER BUFFER
557 KSF /WITH THE FLAG ON?
558 JMP I ERRET /NO - PRINT CRLF AND PERIOD
560 /CCLADR, GETCCL /V3D DIDN'T SEEM TO BE USED
564 PMSRST, SHNDLR&177+4200 /JMS SHNDLR
568 HLT /CONTAINS SECOND COPY OF OS/78 BIT
577 MOVBUF, 7777 /USED IN BATCH SETUP
578 TAD I MVT1 /MOVE THE LINE BUFFER FROM 1000
593 INIT, CDF 10 /V3D (INITIALIZATION)
595 DCA I ROT /RESTORE LOC 7677 TO '400'
597 DCA KMINIT /END LINE WITH 0
599 JMP I CRLF /FAKE OUT KBM AS IF USER TYPED @INIT
633 ROT, 7677 /V3D NEEDED FOR INIT
641 \fDEAS, TAD [UDNAME-1
657 CRLF, KEYMON+1 /V3D NEEDED FOR INIT
670 /TELETYPE INPUT ROUTINE
671 XGLINE, KEYMON+1 /MUST BE AT 1200 FOR BATCH & CCL
677 DCA AMFLAG /ZERO ALTMODE FLAG
688 -375;ALTMOD /THIS AREA GETS MODIFIED BY SET
693 -217;CHLOOP /IGNORE ^O
694 -203;CTRLC /MUST BE JUST BEFORE 0
695 /MUST BE HERE FOR CCL
712 \f/THIS PAGE GETS MODIFIED BY SET COMMANDS (FOR REAL SCOPE RUBOUTS)
736 ISZ AMFLAG /NOTE ALTMODE
742 TAD ["\ /MUST BE HERE
779 PRQMRK, JMS I [PRNAME
781 IFNZRO PRQMRK-1357 <SEECCL,ZZXX>
782 ZBLOCK 1 /A FREE LOCATION!
784 IFNZRO .-1362 <FIXCCL,ERRRR>
788 TAD [67 /CCL OVERLAY BLOCK IS BLOCK 67 ***
793 JMP I [CCLSW-1 /USED TO BE JMP GETCCL
794 DATE2, JMS I [SHNDLR /READ IN DATE OVERLAY
802 SAVE2A, JMS I [SHNDLR
812 JMS I [CCBTST /CHECK TM1 FOR VALID CCB
814 TAD I XR /GET THE I/O CONTROL WORD OF THIS SEGMENT
815 JMS I PROTAT /EXTRACT THE LENGTH FROM IT
817 DCA CLENGT /UPDATE THE LENGTH OF THE FILE
819 JMP SAVE3A /LOOP FOR ALL SEGMENTS OF THE FILE
820 TAD CLENGT /USE THIS LENGTH WHEN ENTERING THE FILE
828 0 /LENGHT UNIMPORTANT
834 NM1 /NAME FOR "CLOSE"
835 CLENGT, 1 /CLOSING LENGTH
839 JMS I PGTOUT /KICK THE I/O MONITOR OUT IF NECESSARY
842 CMA /IF JOB LOADS INTO LOCS 0-1777,
843 SNL SMA CLA /BUT NOT INTO LOCS 10000-11777,
844 JMS LOADF0 /LOAD 0-1777 INTO 10000-11777 NOW
847 JMS SWRITE /WRITE OUT CONTROL BLOCK
855 SZL SPA CLA /DOES THIS SEGMENT START BELOW 2000?
856 JMP SAVE8 /NO - NOTHING TO WORRY ABOUT
860 JMP SAVE8 /NO - SAVE AS IS
861 SAVE6, JMS LOADF0 /LOAD THE FIELD 0 SAVE AREA OVER THE I/O MONITOR
867 SZL SPA CLA /CHECK WHETHER UPPER LIMIT IS ABOVE 2000
868 JMP SAVE7A /IT IS - MUST MAKE 2 WRITES
869 TAD SCTL /TOTALLY CONTAINED IN 0-1777
870 TAD [10 /CHANGE FIELD 0 TO FIELD 1 AND CONTINUE
872 SAVE7A, TAD SCTL /WRITE IN 2 PARTS -
875 CIA /FIRST PART FROM FIELD 1, EVERYTHING BELOW 2000
882 TAD SCTL /SECOND PART FROM FIELD 0, EVERYTHING ABOVE 2000
886 SMA /FULL FIELD SAVE IN F0 MAKES THIS +
887 TAD [4000 /COMPENSATE FOR THAT CASE
892 SAVE12, JMS I [SHNDLR
895 MONTOR /FORCE THE I/O MONITOR BACK INTO CORE
896 JMP KMONER /(OY VEH!)
899 DCA I [7700 /TELL THE KEYBOARD MONITOR THAT ITS IN CORE
900 JMP I [7605 /*** DEPENDS ON 7605 BEING A CDF CIF 10 ***
903 ISZ F0OVLY /HAS THE FIELD 0 OVERLAY BEEN LOADED BEFORE?
904 JMP I LOADF0 /EVIDENTLY
907 F0OVLY, -1 /WILL BE 0 IF WE EXECUTE THIS CODE, OF COURSE
921 DCA SWFILE /BUMP RECORD NUMBER
923 SAVERR, JMS I [PRMESG
929 CCBTST, 0 /EXAMINE COUNT WORD OF CCB FOR VALIDITY
930 /ASCII AND BINARY FILES USUALLY FAIL THIS TEST
934 JMP I CCBTST /IT WAS VALID
936 DCA ERRET /RELOAD MONITOR ON THIS ERROR
937 JMS I [PRMESG /IT WASN'T - TELL THE USER
938 TEXT /CORE IMAGE ERR/
939 GETOUT, 0 /SUBROUTINE TO KICK MONITOR OUT IF NECESSARY
944 SZL SPA CLA /IS THE SYSTEM IN CORE AND SHOULD IT BE?
946 CIF 10 /YES AND NO - KICK IT OUT
957 /NEXT 112 LOCATIONS DESTROYED BY THE LINE BUFFER DURING A SAVE
961 DCA I [JSBITS /MARK AREAS FOR I/O OPTOMIZATION
965 13 /RESET DEVICE HANDLERS AND OUTPUT FILES
966 /V3D CDF 0 /THIS INSTRUCTION SEEMS UNNECESSARY
971 AND [200 /CAN'T ALLOW BOTH OS78 BIT AND SYSTEM CUSP BIT
974 JMP CIERR /V3D CAN'T FALL INTO KMER3
975 /BECAUSE HAVE TO RELOAD KBM TO RESET 'PGNAME'
979 RUN6, TAD I TM1 /STORE CONTROL WORD FOR LAST SEG.
981 TAD RUNSW /IS THIS R OR RUN?
984 TAD I RFILE /V3D FOR LINKER
985 DCA I RCTL /V3D SAVE BLOCK NUMBER IN 'SOFSET'
988 DCA RUNFIL /STORE STARTING BLOCK NUMBER
992 DCA RUNHND /STORE DEVICE HANDLER ENTRY IN THIS PAGE
997 JMP I .+1 /AND GO TO IT
1001 ADCNT, RUN8&177+7600
1002 \fRUN8, ISZ I R7400 /IS THIS THE LAST PARAMETER PAIR?
1003 JMP RUN9 /NO - KEEP LOADING
1005 DCA I RMRD3 /MOVE THE RECORD NUMBER INTO THE FINAL READ
1007 RUNTWT, JMP .-1 /WAIT FOR THE TELETYPE TO DIE DOWN (RF08 IS FAST!)
1009 MREAD /READ THE LAST SEGMENT AND START UP
1011 DCA RADR /SET UP THE LOADING ADDRESS OF THE CURRENT SEGMENT
1014 DCA RCTL /AND THE READ CONTROL WORD
1016 RCTL, SOFSET /V3D THESE ARE STORED INTO ONLY AFTER MOVING
1019 JMP RERR /INPUT ERROR READING THE PROGRAM
1021 JMS ROTAT /GET THE BLOCK LENGTH OF THIS SEGMENT
1023 DCA RUNFIL /UPDATE THE BLOCK NUMBER FROM IT
1025 JMP RUN8 /BACK FOR ANOTHER ONE
1030 0 /TOTALLY MEANINGLESS
1036 IFNZRO ROTAT-SVLNBF-112&4000 <ERROR>
1037 *1765 /MUST BE AT TOP OF PAGE
1049 \f /OVERLAY TO KEYBOARD MONITOR FOR "SAVE" WITH ARGUMENTS
1050 *2000 /GOES INTO 400
1057 TAD (SGETOUT-RSOVL2 /POINTER TO NEW GETOUT
1059 DCA PGTOUT /LIKEWISE "GETOUT"
1063 MTEMP+10 /READ IN CONTROL BLOCK
1065 JMS LXRBAK /RESET LXR TO LOOK AT FIRST CHAR
1069 JMP SDLOOK /NO NUMBER - GET DELIMETER
1076 SNA CLA /WAS THERE A LOWER LIMIT?
1077 JMS DASHSB /NO - SET LOWER LIMIT TO UPPER LIMIT
1081 SZA CLA /ARE THE FIELDS THE SAME?
1082 JMP KMER5 /NO - ERROR
1090 SZL CLA /IS UPPER LIMIT > LOWER LIMIT?
1091 JMP KMER5 /NO - ERROR
1098 DCA I X1 /CREATE A TRIPLET(FIELD, LOW LIMIT, HIGH LIMIT)
1099 /IN THE TABLE IN FIELD 1
1100 ISZ TM1 /BUMP ENTRY COUNT
1113 JMP I (SSBITS-RSOVL1
1114 KMER5, JMS I [PRMESG
1128 JMP KMER5 /NULL STARTING ADR - ERROR
1135 DCA I (1601 /STORE AWAY STARTING FIELD
1137 DCA I (1602 /AND STARTING ADDRESS
1151 \fSGTNUM, 0 /GET A NUMBER ROUTINE
1152 DCA DIGFLG /CLEAR DIGIT COLLECTED FLAG
1155 JMS I (STARTX-RSOVL1
1160 JMS LXRBAK /SHOVE INDEX BACK
1161 TAD DIGFLG /IS DIGIT PRESENT?
1166 \f *2200 /LOADS INTO 600
1167 SSBITS, JMS I (SGTNUM-RSOVL1
1172 JMP I (SDLOOK-RSOVL1
1173 SVEND, JMS I [SHNDLR
1176 MSOVL2 /READ IN SECOND PART OF OVERLAY
1180 JMP I (MOVECB-RSOVL2
1184 /NOW SORT THE ENTRIES IN THE SEGMENT TABLE ON
1185 /DECREASING FIELD AND INCREASING ADDRESS
1192 JMP I (SORTED-RSOVL2 /RIDICULOUS TO SORT ONE ITEM
1207 JMP TIE /FIELDS ARE EQUAL - SORT ON ADDRESS IN FIELD
1209 JMP SWITCH /WRONG ORDER - SWITCH 'EM
1212 DCA P2 /INDEX TO NEXT ENTRY
1217 DCA P1 /ELEMENT IS IN PLACE - GO TO NEXT POSITION
1220 JMP I (SORTED-RSOVL2 /SORT COMPLETE - CHECK FOR CONSISTENCY
1224 SZL CLA /TEST FOR ADRESSES IN ASCENDING ORDER
1225 JMP TIENTY /YES - DONT HAVE TO SWAP
1231 DCA P1 /RESET FIRST POINTER
1232 JMP SWNTRY /AND DONT BUMP 2D POINTER, AS WE HAVE JUST BUMPED IT
1247 TAD I LXR /ANYTHING LEFT?
1249 JMP I STARTX /NO.. TAKE EMPTY RETURN
1253 CLL /SEE IF THIS IS A DIGIT
1256 JMP AONUM /NO.. GET OUT
1265 JMP ADGTLP /KEEP LOOKING
1271 CLL RAL /WE NEED THIS BECAUSE THE HANDLER
1272 DCA TEMP2 /WIPED THE FIRST COPY (MAYBE!!!)
1278 \f *2400 /LOADS INTO 400 ON TOP OF SAVE1A
1281 SNA /IS THERE ONLY ONE ITEM IN THE LIST?
1282 JMP MERGED /YES - DON'T COMPRESS FURTHER
1288 /NOW CHECK THE SORTED FILE FOR CONSISTENCY
1289 /OVERLAPPING SEGMENTS ARE ERRORS,
1290 /ABUTTING SEGMENTS ARE TO BE CONDENSED IN
1291 /THE INTERESTS OF SPEED
1296 JMP NOCMPR /DIFFERENT FIELDS - INCOMPARABLE
1303 JMP BUTTNG /UPPER LIMIT(2)=LOWER LIMIT(1) - ABUTTING SEGMENTS
1305 JMP NXTONE /UPPER LIM(2)<LOWER LIM(1) - NORMAL CASE
1306 CDF 0 /UPPER LIM(2) > LOWER LIM(1) - ERROR
1313 DCA I X1 /SET UPPER LIM(2) = UPPER LIM(1)
1317 JMP .-5 /AND COMPRESS OUT THE LOWER ENTRY
1318 ISZ I (1600 /DECREMENT THE ENTRY COUNT (CAN'T OVERFLOW)
1319 JMP SORTED /START OVER FROM BEGINNING
1326 JMP MRGLP /NOW ALL THAT REMAINS IS TO TRANSFORM OUR TRIPLETS
1327 /INTO THE FORMAT WHICH THE RUN LOADER EXPECTS; I.E.
1328 /DEVICE-HANDLER ARGUMENTS
1336 DCA I (1603 /INITIALIZE STATUS BITS TO NO OVERLOADS
1345 DCA I X1 /STORE ADDRESS
1348 TAD I LXR /FORM UPPER LIM - LOWER LIM
1351 TAD TEMP2 /ADD IN FIELD
1353 RTL /ROTATE WHOLE MESS INTO PLACE
1357 SZL SPA CLA /IS THE LOWER LIMIT < 2000?
1361 SZA CLA /YES- IS THE FIELD 0 OR 1?
1366 AND I (1603 /AND OUT THE PROPER OVERLOAD BIT
1376 CBMOVE, CDF 10 /FINAL CODE TO MOVE NEW CONTROL BLOCK
1377 TAD I LXR /INTO PAGE 600 OF FIELD 0
1382 JMP I (SAVE3 /EXIT TO SAVE PROCESSOR
1384 \fSGETOUT,0 /REPLACES "GETOUT" WHICH WE'VE STORED OVER
1386 RAL /ONLY PERFORMS THOSE FUNCTIONS THAT "SAVE" NEEDS
1392 DECIMB, JMP I SGETOUT /DECIMB ONLY CALLED BY NEXT PAGE
1393 /PART OF NEXT PAGE'S ROUTINE:
1394 TAD NM2 /ALL NEW FOR V3D
1395 TAD NM4 /ONLY ALLOW 2 CHARS FOR MM
1403 \f *2600 /DATE PROCESSOR - LOADS IN 400, RUNS IN 600
1409 JMP BADNUM /DAY > 31
1411 L30, 30 /NOTHING FOUND WILL GIVE ERROR LATER
1412 / DCA NUM1 /NUM1 IS INITIALLY 0
1418 JMP BADNUM /SYMBOLIC MONTH NOT FOUND
1420 SNA CLA /SKIP IF FIRST 2 LETTERS DON'T MATCH
1424 JMP NEWLUP /SECOND 2 LETTERS DON'T MATCH
1425 /*** TEST DELIMETER HERE
1434 DCA DDELIM /MAKE END-OF-LINE THE DELIMITER
1436 TAD (-106 /SCALE DOWN TO RANGE 1970-1999
1438 JMP BADNUM /DIDN'T MAKE THE RANGE
1441 AND L30 /ISOLATE EXTENSION DATE BITS
1446 AND L7177 /STORE THEM INTO BITS RESERVED FOR THIS PURPOSE
1448 TSLUP, DCA I (BIPCCL
1451 TAD NUM2 /COMBINE WITH MONTH AND DAY
1453 DCA I (MDATE /STORE IN SYSTEM DATE CELL
1454 TSF /7605 SETS THE DF
1455 JMS L7177 /TIME OUT A BIT
1456 JMP I [7605 /IN CASE RUNNING UNDER BATCH
1457 L7177, 7177 /JMS IS LONGER THAN JMP
1458 ISZ DDELIM /DDELIM IS 0 AT END
1459 JMS TSLUP /WAIT FOR TELETYPE TO DIE DOWN (RF08)
1460 JMP I [7605 /RETURN TO MONITOR
1463 /WOULD LIKE TO BRANCH TO CCLSW-1 IF DATE ENDED WITH ALTMODE
1478 M40, -40 /NOTHING THERE (LOGIC WILL CAUSE ERROR LATER)
1480 TAD DDELIM /COMPARE AGAINST DESIRED DELIMETER
1481 SNA CLA /DASH OR NULL
1482 JMS I (DECIMB-2400+400
1483 JMP BADNUM /DELIMETER BAD
1497 BADNUM, CLA /CRAP IN AC
1502 NUM1, 0 /MONTH NUMBER (MUST BE 0 INITIALLY)
1527 MONPTR, MONS-2600+600-1 /RELOCATES TO PAGE 600
1531 \f *3000 /MONITOR ERROR PROCESSOR - LOADS INTO 11400
1537 ISZ I (ZERO-1400 /V3C
1539 JMP DLYLPX /WAIT FOR TELEPRINTER (WITHOUT CDF'S)
1547 MERCMN, TAD (MERRXR-1400
1574 JMP NOEXPL /NO EXPLANATION FOR USER ERRORS
1576 TAD (EXPLTBL-1401 /PRINT EXPLANATION
1577 DCA T1 /GET ADDRESS INTO MESSAGE TABLE
1582 TAD I T1 /GET ADDRESS OF MESSAGE
1598 DCA I (JSBITS /SET THE CURRENT JOB UNSTARTABLE
1636 \f *3200 /LOADS INTO 1600
1638 MERRXR, TEXT \MONITOR ERROR 0 AT \
1641 UERRXR, TEXT \USER ERROR 0 AT \
1652 MON1, TEXT \CLOSE ERROR\
1653 MON2, TEXT \DIRECTORY I/O ERROR\
1654 \fMON3, TEXT \DEVICE HANDLER NOT IN CORE\
1655 MON4, TEXT \ILLEGAL USR CALL\
1656 MON5, TEXT \I/O ERROR ON SYS:\
1657 MON6, TEXT \DIRECTORY OVERFLOW\
1658 MON7, TEXT \RESERVED\
1659 \f /EXECUTION TIME LOADER FOR MONITOR "CHAIN" COMMAND
1660 *3400 /EXECUTES IN FIELD 0 IN PAGE 7400
1661 MCHNX, DCA MCHREC /STORE STARTING RECORD #
1663 DCA I (SOFSET /V3D SAVE STARTING ADDRESS
1666 13 /RESET ALL DEVICE ASSIGNMENTS
1667 0 /BUT DON'T CLEAR OUTPUT FILES
1670 11 /KICK MONITOR OUT AND RESTORE CORE IF NECESSARY
1671 JMS MCHRD /PARAMETERS PRESET TO READ CONTROL BLOCK INT0 7200
1672 TAD I (7200 /TEST FOR SAVE FILE!
1673 CMA /TEST FOR VALID CCB
1678 DCA I (MSTCDF /TRANSFER INFORMATION FROM CONTROL BLOCK
1681 DCA I (MSTADR /TO PAGE 7600
1704 DCA MCHADR /SET UP COMMAND TO READ NEXT SEGMENT
1710 JMP MCHN1 /LOOP ON NUMBER OF SEGMENTS
1713 MCHCTL, 0101 /1 RECORD INTO FIELD 0 STARTING FORWARDS
1716 JMP CHERR /CHAIN ERROR
1723 TAD (40 /0 MEANS FULL 4K READ
1730 MCHFJM, MSTCDF&177+5200 /"JMP MSTCDF"
1733 JMP CHERR /LET TTY DIE DOWN
1738 JMP I (7600 /DONE..BACK TO MONITOR
1743 ISZ CHTADC /NEXT LETTER
1747 CHARS, "C;"H;"A;"I;"N;" ;"E;"R;"R;215;212;0
1749 \f *4000 /SYSTEM GENERATOR - WRITES STUFF OUT USING SHNDLR
1751 JMS SYSSWP /SWAP SYSTEM DEVICE HANDLER INTO 7600
1753 WRITE; 4200; 7400; 0; JMP BERR /BOOTSTRAP
1757 WRITE; 4210; DCOUNT; 01; JMP BERR /DIRECTORY
1758 WRITE; 5001; 0000; 07; JMP BERR /KEYBOARD MONITOR
1759 WRITE; 4610; 0000; MONTOR; JMP BERR /USR
1760 WRITE; 4111; 3400; MEOVLY; JMP BERR /"ENTER" OVERLAY
1761 WRITE; 4701; 2000; MSOVLY; JMP BERR /SAVE OVERLAY,
1762 /ERROR ROUTINE AND "CHAIN"
1766 WRITE; 4101; LDRCTL; MFREE; JMP BERR /ABSLDR CONTROL BLOCK
1767 WRITE; 5010; 2000;MFREE+1; JMP BERR /ABSLDR
1768 JMS I (4200 /OUTPUT THE DEVICE HANDLERS
1770 JMS SYSSWP /SWAP BACK PAGE 7600
1797 /CONTROL BLOCK FOR ABSOLUTE LOADER
1798 LDRCTL, 7777 /ONE CONTIGUOUS LOAD
1799 6213 /STARTING ADDRESS IN FIELD 1
1800 2000 /STARTING LOCATION=12000
1801 6003 /DOES NOT LOAD OVER EITHER MONITOR AREA
1802 /ALSO DOES NOT USE THESE AREAS AT COMMAND TIME - TRUE
1803 /ONLY FOR FIRST CALL TO COMMAND DECODER
1804 2000 /FIRST(AND ONLY) SEGMENT STARTS AT 2000
1805 1010 /IN FIELD 1 AND IS 10 PAGES LONG
1807 IFNZRO LDRCTL-4113 <BLDER,XQX>
1818 /UPPER PAGE OF FIELD 1 - CHOCK FULL OF GOODIES
1819 /LIKE THOUSANDS OF TABLES AND THE MONITOR CALL LOCATION
1821 MOFILE, ZBLOCK 17 /OUTPUT FILE TABLE - 7600-7616 (3 ENTRIES MAX)
1822 /5 WORDS PER ENTRY - DEVICE # AND FILE NAME
1823 MIFILE, ZBLOCK 24 /INPUT FILE TABLE - 7617-7642 (10 ENTRIES MAX)
1824 /2 WORDS PER ENTRY - DEVICE # AND RECORD #
1826 /LAST WORD IN TABLE CONTAINS TERMINATION INDICATOR
1827 /(0 FOR CR, 1 FOR ALTMODE) AND HIGH ORDER
1828 /PART OF NUMERICAL ARGUMENT
1830 MPARAM, ZBLOCK 4 /PARAMETER TABLE - 7643-7646
1831 /FIRST 3 WORDS - MASK OF SWITCHES(A-Z,0-9).
1832 /FOURTH WORD - CONTAINS THE LOW ORDER BITS OF
1833 /THE NUMERICAL ARGUMENT
1837 /TABLE OF DEVICE HANDLERS PRESENTLY IN CORE
1838 DVHNDL, 7607;7607;0;0;0;0;0
1840 MDATE, 0 /HOLDS THE CURRENT DATE- 4 BIT MONTH,
1841 /5 BIT DAY, 3 BIT YEAR FROM 1970
1843 JMS SHNDLR /INST FIELD IS 0
1844 1000 /READ 4 RECORDS INTO FIELD 0
1846 7 /KEYBOARD MONITOR FOLLOWS DIRECTORY
1847 PJSBTS, JSBITS /SERVES AS A HALT (WATCH IT!)
1850 KMNTRY /V3D GETS CHANGED TO INIT
1852 DCA MARG1 /SAVE AC AS IT MAY CONTAIN AN ARGUMENT
1853 RDF /GET CALLING FIELD
1860 SZL CLA /DOES JOB USE LOCS 10000-11777?
1861 JMP MONRD /NO - DONT SAVE THEM
1873 SCOPE, HLT /BIT 4 IS A 1 IF CONSOLE IS A SCOPE
1874 JMP MSTART /START THE MONITOR UP IN PAGE 0
1877 1010 /READ 10 RECS INTO FIELD 1
1879 MTEMP /TEMP REGION ON SYS
1880 HLT /SYS HAS PROBLEMS
1884 /TABLE OF USER DEVICE NAMES
1885 /ALSO USED BY SYSTEM ODT
1887 UDNAME, 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
1888 \fDCB, ZBLOCK 17 /DEVICE CONTROL BLOCK - SET IN "CONFIG"
1898 /********************************************************
1899 / MAP OF SYSTEM DEVICE AS OF 2/21/73
1900 /********************************************************
1901 / * 256 WORD RECORDS *
1902 /********************************************************
1907 / 0 MONITOR BOOTSTRAP
1908 / 1- 6 SYSTEM DIRECTORIES
1909 / 7-12 KEYBOARD MONITOR
1910 / 13-15 I/O MONITOR(CALLABLE MONITOR)
1911 / 16-25 DEVICE HANDLER RECORDS
1912 / 26 MONITOR "ENTER" OVERLAY
1913 / 27-50 MONITOR SCRATCH AREA FOR SAVING CORE
1914 / 51-53 COMMAND DECODER
1915 / 54-55 "SAVE WITH ARGUMENTS" AND "DATE" OVERLAYS
1916 / 56 MONITOR ERROR ROUTINE
1917 / 57 "CHAIN" PROCESSOR
1919 / 64 RESERVED FOR EXPANSION
1920 /65 CCL REMINISCENSES
1921 / 66 USED BY TWO-PAGE SYS HANDLER
1922 / 67 USED BY CCL (CCL OVERLAY)
1923 / 70-END FILE STORAGE
1924 \f SHNDLR=7607 /ENTRY POINT TO SYSTEMS HANDLER
1931 /SYSTEM HANDLER AND FIELD 0 UPPER PAGE
1932 /INCLUDES BOOTSTRAP AND PART OF MONITOR CALL ROUTINE
1933 DVHORG=16 /DEVICE HANDLER RECORDS
1937 5000 /SAVE MONITOR CORE - WRITE 5 RECORDS FROM FIELD 0
1938 0 /(LOCATIONS 0-1777)
1940 7602 /TROUBLE WITH SYSTEM DEVICE
1942 JMP MGET /NOW GO READ IN THE KEYBOARD MONITOR
1943 \f *6744 /INFORMATION ABOUT CURRENT JOB
1947 JFIELD, 6203 /A CDF CIF N INSTRUCTION TO START THE JOB
1948 JSTART, 7600 /THE STARTING ADDRESS
1949 JSBITS, 1000 /VARIOUS STATUS BITS - USED FOR OPTIMIZATION
1950 /BIT 4000 - JOB DID NOT LOAD INTO 00000-01777
1951 /BIT 2000 - JOB DID NOT LOAD INTO 10000-11777
1952 /BIT 1000 - JOB IS NOT RESTARTABLE
1953 /BIT 400 - DOESN'T DESTROY BATCH MONITOR
1954 /BIT 2 - JOB DOES NOT USE LOCS 00000-01777
1955 /BIT 1 - JOB DOES NOT USE LOCS 10000-11777
1956 SOFSET, 0 /FOR FUTURE(AND MAYBE PRESENT) USE
1958 /DATA BREAK FILLERS FOR SYSTEM BOOTSTRAP
1965 /MONITOR PATCH TO HELP BLEEP LOADER
1966 0 /ADDRESS OF HANDLER FOR DEVICE USED
1972 MSWITC, JMP .+6 /ZEROED IF PG 7000 (HANDLER) MUST BE READ OVER
1975 7000 /THIS AREA MODIFIED BY ODT
1977 OS78, HLT /BIT 4 IS A 1 IF OS/78 IS RUNNING
1979 TCF /EXIT WITH A CLEAR CONSCIENCE(ALSO A CLEAR FLAG)
1983 BIPCCL, 0 /MORE STATUS BITS.
1984 /BIT 1: 1=> BATCH IS IN PROGRESS
1985 /BITS 6-8: FIELD OF BATCH MONITOR
1986 /HIGHEST CORE FIELD USED BY OS/8
1987 /OR 0 TO MEAN OS/8 MAY USE ALL OF CORE
1989 VERSNO /OS/8 VERSION 3
1996 /THE FOLLOWING REGISTERS ARE SET TO VITAL INITIAL VALUES. TO ALTER
1997 /THESE VALUES IS TO BRING DISASTER DOWN UPON YOUR HEAD!
2000 X1, MSWITC /THESE TWO ARE USED AT INITIALIZATION.
2002 ADR2, RUN8&177+7377 /USED DURING R, AND RUN COMMANDS
2004 AMFLAG, 0 /1 MEANS SAW ALTMODE
2005 /MUST NOT MOVE FOR CCL AND BATCH
2008 RBFLAG, 0 /MUST BE AT LOCATION 20
2015 FUDJMP, MSTCDF&177+5200
2017 TMP, PATCHLEV /MONITOR PATCH LEVEL MUST BE AT LOC 31 FOR CCL
2019 ERRET, PCRLF /MUST BE AT 33 FOR CCL
2021 /THE FOLLOWING LOCS. ARE TEMPORARIES. HOWEVER, THERE IS NOW
2022 /VITAL ONCE ONLY CODE TO HELP THE BATCH PROCESSOR. THIS CODE IS
2023 /READ IN EVERY TIME THE KEYBOARD MONITOR IS RE-READ.
2025 NM1, 203 /THIS MUST BE A 203!
2026 BATCH, /ENTRY TO READ NEW BATCH MONITOR
2027 NM2, JMS I [7607 /THE BATCH INITIALIZER ALTERS SOME VALUES
2028 NM3, 610 /IN THIS LIST...THIS ONE**********
2029 NM4, 0 /THIS ONE*****GETS ADDRESS OF BOS.
2030 TEMP1, 13 /******GETS RECORD OF BOS*****
2031 TM1, SKP CLA /ERROR. DON'T RUN BATCH
2033 NMCT, DCA I KM1 /CLEAR BATCH FLAG.
2040 SENTER, KMINIT /GETS ENTRY POINT (BOS)
2044 /OS/8 MONITOR - MONITOR ROUTINES
2045 /THIS MONITOR IS CALLED INTO CORE BY A JMS 7700 IN FIELD 1
2046 /IT REPLACES CORE FROM 200-1777
2047 /AND INTERPRETS THE WORDS AFTER THE JMS AS A MONITOR FUNCTION
2048 /MONITOR FUNCTIONS ARE ASSIGN,LOOKUP,ENTER,ETC.
2051 MONITO, 0 /MONITOR SUBROUTINE
2052 DCA MACARG /STORE AC ARG
2053 DCA USERFG /SET FLAG TO INDICATE WE WERE CALLED DIRECTLY
2054 RDF /GET CALLING FIELD
2058 DCA FPUTX /FOR LOADING AND STORING CALLING SEQUENCE
2059 JMS FGET /GET FIRST ARGUMENT[AND SET DATA FIELD 1)
2066 DCA .+1 /BRANCH TO APPROPRIATE ROUTINE WITH LINK ON
2067 FGET, 0 /MUST PRESERVE LINK
2071 /MONITOR COMMAND DISPATCH TABLE MUST BE JAMMED BEFORE 'FPUT'
2084 FPUT, 0 /MUST FOLLOW LAST ADDRESS IN JUMP TABLE
2103 \fMCD, CLA CLL CML RAR
2104 JMS CDSWAP /SWAP OUT CORE IF NECESSARY
2119 JMS CDSWAP /RESTORE THE SWAPPED CORE IF NECESSARY
2120 STL /LINK MUST BE ON AT MRESET
2121 JMP I MRSETP /AFTER CD, RESET DEVICE AREA
2123 DCA T1 /BUFFER THE ARGUMENT
2130 TAD T1 /LOAD THE BUFFERED ARGUMENT
2146 SZL SPA CLA /RESTORE CORE IF USERFG=1 AND JSW[11]=0
2158 TAD ME1000 /FORM READ OR WRITE OPERATION
2164 SZL CLA /IS IT NECESSARY TO SAVE CORE?
2177 ME1000, 1000 /ENTER OVERLAY LOADS OVER ENTER (NATCH)
2182 /ASSIGN PROCESSOR - TRANSLATE DEVICE NAME INTO DEVICE NUMBER
2183 /(IF NECESSARY),GET DEVICE HANDLER INTO CORE(IF NECESSARY)
2184 /AND ADJUST TABLES(IF NECESSARY). IS THIS REALLY NECESSARY?
2188 SZA /IS DEVICE NUMERIC OR SYMBOLIC?
2190 JMS I [FGET /GET HIGH ORDER 2 CHARS OF NAME
2193 JMP I [MRTRN+1 /FIRST WORD OF NAME MUST BE NON-ZERO
2196 SNA /IS NAME >2 CHARACTERS LONG?
2197 JMP NOHASH /NO - DON'T HASH
2200 CLL CML RAR /FORCE SIGN BIT OF HASH NAME ON
2202 NOHASH, TAD [UDNAME-1 /SEARCH USER NAME TABLE FIRST
2214 SMA CLA /WHICH TABLE DID WE JUST SEARCH?
2215 JMP I [MRTRN+1 /SYSTEM TABLE - ERROR
2217 JMP DSRCH /GO SEARCH SYSTEM TABLE
2220 JMS I [FPUT /PUT NUMBER INTO CALLING SEQUENCE
2221 JMS I [FGET /GET IT BACK IN AC, BUMPING POINTER
2223 DFOUND, JMS I [MCKDEV /DETERMINE ITS VALIDITY (NON-ZERONESS)
2225 SNA /IS THE DEVICE HANDLER IN CORE?
2227 SNA /DOES A HANDLER EXIST FOR THE DEVICE?
2228 JMP I [MLNOTF /NO - SAME AS THE DEVICE NOT EXISTING
2229 CMA RAL /GET THE COMPLEMENT OF THE HIGH ORDER BIT INTO THE LINK
2230 SNL CLA /TWO PAGE HANDLER?(IF HANDLER IS IN CORE,
2231 /THIS TEST IS RANDOM BUT WE DON'T CARE)
2232 TAD [100 /YES - FORCE A TWO-PAGE READ
2236 DCA T7 /SAVE T1 AS WE WILL DESTROY IT LATER
2239 SZA CLA /DOES HE ACTUALLY WANT US TO LOAD THE SILLY THING?
2240 JMP AFINIS /NO - HE MUST HAVE TASTE.
2241 JMS I [FGET /FETCH PAGE IN WHICH HANDLER IS TO BE LOADED
2242 RAR /GET THE LINK, WHICH HAS BEEN UNTOUCHED SINCE WE
2243 /PUT THE "TWO PAGE HANDLER" FLAG INTO IT
2244 SNL SMA /IF THIS HANDLER IS TWO-PAGE, IS HE ALLOWING IT TO BE?
2245 JMP I [MLNOTF /NO - GIVE AN ERROR RETURN
2246 RAL /YES - ROTATE BACK
2247 AND [7600 /MAKE IT LEGAL
2253 DVHCTL, 0 /READ ONE OR TWO PAGES INTO FIELD 0
2256 JMP I [MIOERR /SYSTEM DEVICE ERROR
2257 /NOW GO THROUGH THE TABLE OF AVAILABE HANDLERS
2258 TAD [-17 /AND MARK OFF THOSE WHICH ARE NOW IN CORE
2261 JMS I [MCKDEV /LOW ORDER BITS OF T4 GO THROUGH 1-17
2265 TAD DVHCTL /IF A HANDLER ENTRY POINT IS WITHIN 200 WORDS OF THE
2266 SMA CLA /LOADING ADDRESS (400 FOR A TWO-PAGE HANDLER)
2267 DCA I T1 /MARK IT AS WIPED
2280 JMP I [MRTRN /STORE HANDLER ADDRESS AND EXIT
2282 TAD I T2 /GET RECORD OF DEVICE HANDLER
2285 RTL /EXTRACT THE RECORD NUMBER
2287 TAD [DVHORG-1 /ADD THE BASE OF DEVICE HANDLER STORAGE
2290 MCKDEV, 0 /MUST PRESERVE LINK
2293 JMP I [MERROR /DEVICE 0 IS ILLEGAL
2296 TAD [SDVHND-1 /FORM POINTER INTO HANDLER IMAGE TABLE
2303 DCA T8 /FORM POINTER TO DCB ENTRY FOR DEVICE
2307 IFNZRO .-564 <REASSEMBLE CONFIG>
2308 SDNAME, ZBLOCK 17 /SYSTEM DNAME TABLE - SET UP BY "CONFIG"
2309 \f IFZERO .+200&1000 <*600>
2310 /LOOKUP PROCESSOR - GETS THE STARTING BLOCK OF AN INPUT FILE
2311 /ON A SPECIFIED DEVICE.SKIPS IF FILE WAS FOUND OR DEVICE
2312 /IS NOT FILE ORIENTED
2313 MLOOKUP,CLL /SET RDCAT MODE TO INPUT
2315 JMP ERETRN /NON-FILE STRUCTURED DEVICE
2316 JMS MDSRCH /SEARCH THE DIRECTORY FOR THE FILE
2317 JMP MRTRN+1 /NOT FOUND - TAKE ERROR RETURN
2320 TAD I [DORG /CONVERT T5 TO A RECORD NUMBER
2324 CIA /STORE FILE LENGTH AS A NEGATIVE NUMBER
2325 MRTRN, JMS I [FPUT /THIS CODE IS JUMPED TO BY SEVERAL ROUTINES
2326 MRTRN2, ISZ I [MONITO
2331 JMP MRDREN /NOT THE FIRST SEGMENT - DON'T SET UP POINTERS
2332 DCA T5 /ZERO STARTING BLOCK NUMBER
2333 DCA T6 /ZERO FILE LENGTH
2334 TAD MACARG /GET DEVICE NUMBER FROM AC
2335 JMS I [MCKDEV /CHECK LEGALITY AND FORM POINTERS
2337 JMP I [MERROR+1 /DEVICE HANDLER IS NOT IN CORE - ERROR
2338 DCA T9 /ADDRESS OF DEVICE HANDLER
2340 DCA T4 /STORE THE POINTER TO THE FILE NAME IN T4
2343 RTR /FORM A MASK OF 2000 OR 1000 DEPENDING ON LINK
2345 SZA CLA /TEST FOR READ-ONLY(L=1) OR WRITE-ONLY(L=0)
2346 JMP MRTRN+1 /FAILED THE TEST - ERROR RETURN
2349 JMP I MRDCAT /DEVICE IS NOT FILE-ORIENTED
2352 MRDREN, DCA MCATRC /STORE SEGMENT NUMBER
2353 TAD T9 /USE LOW ORDER BITS
2354 AND [177 /OF DEVICE HANDLER ENTRY POINT
2355 CLL RTL /AND THE REQUESTED SEGMENT NUMBER
2356 RAL /TO FORM A "UNIQUE" KEY
2357 TAD MCATRC /FOR THIS SEGMENT OF THIS DIRECTORY
2358 /(THE UNIQUENESS DEPENDS ON EACH HANDLER HAVING A DIFFERENT
2359 /STARTING OFFSET IN ITS PAGE)
2361 TAD OLDT9 /COMPARE KEY AGAINST KEY OF CURRENT SEGMENT
2362 SNA /ARE THEY THE SAME?
2363 JMP INLRDY /YES - DON'T READ SEGMENT, ITS IN CORE
2366 DCA OLDT9 /STORE THE KEY OF THE NEW IN-CORE SEGMENT
2367 CLA CLL CML RAR /CHANGE WRITE TO READ
2369 INLRDY, TAD I [DCOUNT
2373 CMA CML RAR /NEW V3 DIRECTORY VERIFYER
2374 DCA NFILES /FIRST WORD IN CATALOG = -# OF FILES IN CATALOG
2376 DCA XR /SET XR TO POINT TO FIRST FILE ENTRY
2377 JMP I MRDCAT /RETURN TO BUMPED ADDRESS
2380 SNA CLA /EMPTY SPACES HAVE A ONE WORD ZERO DIRECTORY ENTRY
2381 JMP SKPMTF /SO SKIP THE 4 WORD COMPARE ON THEM
2393 SZA CLA /COMPARE ENTRY AGAINST ARGUMENT(8 CHARACTERS)
2398 JMS BUMPXR /SKIP GARBAGE WORDS
2401 JMP SKPMTF+1 /UNCLOSED OUTPUT FILES DONT COUNT
2403 DCA T6 /STORE FILE LENGTH
2408 JMS BUMPXR /SKIP REST OF NAME AND GARBAGE WORDS
2409 SKPMTF, TAD I XR /GET LENGTH OF THIS ENTRY
2411 DCA T5 /ADD TO BLOCK STARTING ADDRESS
2414 DCA T5 /RE-INITIALIZE BLOCK NUMBER FOR NEXT SEGMENT
2415 TAD I [DLINK /DIRECTORY EXHAUSTED - ANY MORE?
2420 BUMPXR, 0 /ROUTINE TO SKIP (DWASTE+AC) WORDS
2423 CIA /DWASTE IS NEGATIVE AND SO IS AC
2433 CATCTL, 4210 /WRITE 2 RECORDS FROM FIELD 1
2436 JMPME2, JMP I [MERROR+2 /CANNOT REWRITE CATALOG
2439 IFNZRO .-772 <REASSEMBLE CONFIG> /USED TO BE 766
2440 SDVHND, ZBLOCK 17 /DEVICE HANDLER INFORMATION TABLE - SET BY CONFIG
2441 \f IFZERO 1000&. <*1000>
2442 /ENTER PROCESSOR FOR MONITOR
2443 /FIND A HOLE IN THE DIRECTORY LARGE ENOUGH TO ACCOMODATE THE FILE
2444 /AND STICK IT IN. MAKE A NOTE THAT WE DID SO FOR THE
2446 MENTER, DCA EPASS /SET UP FOR PASS 1
2447 JMS I [MRDCAT /READ CATALOG AND SET UP NFILES AND XR
2448 JMP I [ERETRN /NON-FILE-STRUCTURED DEVICE
2450 DCA T2 /INTIIALIZE STARTING BLOCK NUMBER COUNTER
2452 DCA XR /RESTORE XR (CONSOLIDATOR DESTROYED IT)
2456 AND [377 /GET REQUESTED LENGTH FROM AC BITS 0-7
2458 DCA T3 /T3=REQUESTED LENGTH. IF T3=0, MEANS RETURN
2459 /LARGEST EMPTY SPACE ON TAPE. IF T3<>0, MEANS RETURN
2460 /SMALLEST BLOCK OF LENGTH =>T3.
2461 TAD I T8 /GET FCB ENTRY
2463 SZA CLA /ANY ACTIVE TENTATIVE FILES ON THIS DEVICE?
2464 JMP I [MRTRN+1 /YES - TAKE ERROR RETURN
2467 JMP MEMPTY /EMPTY SPACE - LOOK AT LENGTH
2468 MTHREE /OCCUPIED - IGNORE
2472 DCA T2 /UPDATE T2 TO STARTING BLOCK # OF NEXT ENTRY
2474 JMP MELOOP /GO TO NEXT ENTRY
2476 /DIRECTORY BLOCK EXHAUSTED
2478 SZA CLA /WHAT PASS ARE WE IN?
2479 JMP EFINUP /SECOND PASS - THIS IS FOR KEEPS
2480 TAD I [DLINK /FIRST PASS
2481 SZA /ANY MORE SEGMENTS?
2482 JMP I [MRDREN /YES - CONTINUE
2485 /DONE - SEE IF OUR BEST IS GOOD ENOUGH.
2488 SZA CLA /CHECK THAT FIRST WORD OF NAME IS NON-ZERO
2490 SNA CLA /AND THAT WE FOUND WHAT WE WANTED
2491 JMP I [MRTRN2 /OTHERWISE GIVE ERROR RETURN
2492 TAD ASFLAG /GET NUMBER OF BEST SEGMENT
2493 ISZ EPASS /AND RESTART THE ALGORITHM IN PASS 2
2494 JMP I [MRDREN /(TAKES LESS SPACE THAN SAVING XR AND NAME)
2496 /EVERYTHING IS SET UP - PERFORM THE ACTUAL ENTRY OPERATION
2504 TAD XR /CATALOG MUST HAVE ROOM FOR ONE MORE FILE
2505 TAD [-1772 /AFTER THIS FILE IS ENTERED
2506 SMA CLA /WILL NEW ADDITION OVERFLOW CATALOG?
2507 JMP I [EOVFLO /YUP - CALL OVERLAY TO EXTEND DIRECTORY
2508 MELP2, TAD I T1 /MOVE REST OF CATALOG UP
2509 DCA I XR /TO CREATE SPACE FOR NEW ENTRY
2519 SZA CLA /HAVE WE PUSHED UP EVERYTHING?
2520 JMP MELP2 /NO, KEEP PUSHING
2522 DCA T1 /NOW MOVE THE USERS FILE NAME
2526 JMS I [FGETW /[IN THE USERS FIELD, OF COURSE)
2529 ISZ T1 /INTO THE EMPTY SPACE JUST CREATED
2531 TAD I [MDATE /PUT DATE OF CREATION INTO FILE NAME
2532 DCA I XR /THIS WILL BE DESTROYED IF DWASTE=0
2533 IAC /ADJUST XR BUMP BECAUSE OF DATE STORE
2535 DCA I XR /GIVE THE NEWLY ENTERED FILE A LENGTH OF 0
2536 TAD XR /PUT A POINTER TO THE LENGTH WORD OF THE
2537 DCA I [DFLAG /NEW ENTRY INTO THE DIRECTORY HEADER
2540 DCA I [DCOUNT /INCREASE THE FILE COUNT BY 1
2543 DCA I T8 /SIGNAL AN OPEN OUTPUT FILE ON THIS DEVICE
2544 JMS I [MWRCAT /WRITE THE ALTERED CATALOG BACK OUT
2545 JMP I [LRETRN /STORE ARGS BACK JUST LIKE "LOOKUP"
2548 DCA T1 /SAVE LENGTH OF CURRENT ENTRY
2551 CLA /LINK NOW EQUALS BEST LENGTH>=DESIRED LENGTH
2554 CML /IF DESIRED LENGTH=0 WE ALWAYS WANT MAXIMUM
2556 CLA CML /LINK IS NOW ON IF DESIRED LENGTH IS NOT IN BETWEEN
2557 /BEST LENGTH AND CURRENT LENGTH
2561 SZL SNA CLA /TAKE EITHER MIN OR MAX OF BEST AND CURRENT LENGTHS,
2562 /DEPENDING ON WHETHER LINK IS ON OR OFF
2563 JMP MNOCHG /MIN(MAX)=BEST - NOTHING TO DO
2565 DCA T6 /MAKE CURRENT ENTRY NEW "BEST"
2568 DCA NAME /REMEMBER CATALOG LOCATION
2570 DCA ASFLAG /ALSO DIRECTORY SEGMENT NUMBER
2572 DCA T5 /AND STARTING BLOCK NUMBER
2575 JMP MELEND /GO UPDATE THE BLOCK NUMBER
2576 \f /CLOSE PROCESSOR - CLOSES AN OUTPUT FILE WHICH WAS OPENED
2577 /BY THE "ENTER" CALL -- ARGUMENTS ARE THE DEVICE NUMBER AND THE
2578 /CLOSING LENGTH OF THE FILE. PERFORMS A DIRECTORY CLEANUP AFTER
2579 /CLOSING THE FILE. IF AN ENTRY ALREADY EXISTS WITH THE NEW FILE'S
2580 /NAME IT IS DELETED. (CLOSE MAY BE USED AS A "DELETE" COMMAND
2581 /ONLY IF NO OUTPUT FILE WAS ENTERED). AN ERROR RETURN IS
2582 /GIVEN IF THE CLOSING LENGTH IS TOO BIG OR IF THERE WAS NEITHER
2583 /AN ACTIVE TENTATIVE FILE OR AN OLD FILE TO DELETE.
2585 MCLOSE, JMS I [MRDCAT /GET THE CATALOG
2586 JMP CRETRN /NON-FILE STRUCTURED DEVICE - RETURN NORMALLY
2587 CLA IAC /GET THE NEXT WORD IN THE CALLING SEQUENCE
2589 DCA T1 /GET CLOSING LENGTH AND STORE IT AWAY
2590 JMS I [MDSRCH /SEARCH FOR THE OLD COPY
2591 JMP NODLET /NO OLD COPY
2594 JMS SQUISH /SQUISH OUT 3+#WASTE WORDS OF THE OLD COPY
2595 DCA I XR2 /AND MAKE THE OTHER TWO INTO AN EMPTY
2596 TAD T6 /FILE ENTRY WITH THE SAME LENGTH
2598 DCA I XR2 /AS THE OLD COPY
2601 SNA /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE
2602 JMP EOCLOS /NO - FINISH UP AND GET OUT
2603 CIA /GET THE SEGMENT NUMBER WE WANT
2608 JMS I [MWRCAT /NO - WRITE OUT THE ONE WE SQUISHED
2609 TAD I [DFLAG /GET LOCATION OF TENTATIVE FILE
2612 SZL CLA /IS THE ENTRY TO BE CLOSED ABOVE THE ONE
2613 JMP .+3 /WE JUST DELETED?
2614 MTHREE /YES - MOVE THE POINTER DOWN
2615 TAD I [DWASTE /TO COMPENSATE FOR THE SQUISHING
2616 TAD I [DFLAG /THE POINTER WILL NOW POINT
2617 DCA I [DFLAG /TO THE LENGTH WORD.
2618 /(THIS WAS WASTED WORK UNLESS THE CORRECT SEGMENT IS IN CORE)
2622 SNA /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE?
2623 JMP I [MRTRN+1 /WHAT DID HE CALL US FOR? - ERROR
2624 JMS I [MRDCAT /YES - READ IN THE CORRECT SEGMENT
2626 DCA T4 /T4 POINTS TO THE LENGTH OF THE TENTATIVE ENTRY
2628 CIA /IF T1=0, NEW ENTRY WILL BE DELETED AUTOMATICALLY
2629 DCA I T4 /DURING CONSOLIDATION
2634 TAD I T4 /SUBTRACT CLOSING LENGTH FROM FREE BLOCK ADJACENT TO ENTRY
2636 JMP I [MERROR+3 /THIS CREEP HAS GONE AND DESTROYED HIS TAPE
2638 EOCLOS, JMS CONSOL /CONSOLIDATE THE DIRECTORY
2643 CRETRN, TAD [7600 /DO A WRITE OF 0 PAGES. (MAGTAPE)
2647 \f /CONSOLIDATOR - CHECKS FOR ENTRIES OF LENGTH 0 AND DELETES THEM.
2648 /ALSO CHECKS FOR ADJACENT FREE AREAS AND COMBINES THEM.
2653 DCA T7 /T7 = FILE COUNT
2655 SNA CLA /EMPTY FILE?
2656 JMP CONMTF /YES - GO CHECK FOR NULL AND 2 IN A ROW
2658 JMS I [BUMPXR /GET PAST THE GARBAGE WORDS
2660 SZA CLA /WOULD THIS HAPPEN TO BE A NULL FILE?
2661 JMP CONLPT /NAH, GO TO NEXT ONE
2662 TAD [-5 /YEAH, REMOVE IT ENTIRELY
2663 TAD I [DWASTE /INCLUDING THE WASTE WORDS
2665 ISZ I [DCOUNT /BUMP DOWN FILE COUNT IN DIRECTORY
2666 ISZ NFILES /AS WELL AS THE TEMPORARY ONE IN PAGE 0
2668 JMP CONSOL+1 /REPEAT ENTIRE CONSOLIDATION - THIS DELETION MAY
2669 /HAVE BROUGHT TWO FREE ENTRIES TOGEHER
2670 / THE ABOVE NOP FIXES THE KILLER CLOSE BUG
2672 JMP CONLP /MORE FILES - KEEP PLUGGING
2673 JMP I CONSOL /RETURN FROM CONSOLIDATOR
2674 CONMTF, TAD I XR /IS THIS FREE ENTRY NULL?
2676 JMP SQTRIV /YES - SQUASHITLIKEABUG
2677 DCA T2 /NO - SAVE LENGTH
2679 DCA SQUISH /SAVE POSITION OF LENGTH WORD
2680 ISZ T7 /WAS IT THE LAST FILE?
2681 SKP /NO, THEN THERE IS ONE AFTER IT(GOOD THINKING!)
2682 JMP I CONSOL /YES - RETURN FROM CONSOLIDATOR
2684 SZA CLA /TWO EMPTIES IN A ROW?
2685 JMP CONLP+3 /NO - SLIP BACK INTO LOOP
2687 TAD T2 /YES - COMBINE LENGTHS
2688 DCA I SQUISH /STORE BACK IN FIRST LENGTH WORD AND SQUISH SECOND ENTRY
2689 SQTRIV, CLA CMA CLL RAL
2690 JMP SQCOMN /SQUISH OUT 2 WORDS
2695 /LINK MUST BE ON AT THIS POINT
2697 SZL CLA /ZERO ALL DEVICE HANDLER SLOTS THAT AREN'T RESIDENT
2704 DCA I T8 /DELETE THE "FILE CURRENTLY OPEN" FLAG IF ASKED
2709 /SUBR TO COLLAPSE DIRECTORY AFTER A POINT
2715 DCA XR2 /SET UP XR2 FOR CHANGING SQUISHED ENTRY
2717 DCA I XR1 /MOVE DOWN ONE WORD
2720 SZA CLA /AT END YET?
2721 JMP SQLOOP /NO, KEEP GOING
2724 /INITIAL DIRECTORY FOR MONITOR
2725 /DEFINES OS/8 ABSOLUTE LOADER (ABSLDR.SV)
2727 DCOUNT, -2 /TWO ENTRIES
2728 DORG, MFREE /FILE STORAGE STARTS AT BLOCK "MFREE"
2729 DLINK, 0 /THIS IS THE ONLY DIRECTORY RECORD
2730 DFLAG, 0 /THERE ARE NO OPEN OUTPUT FILES ON THIS DEVICE
2731 DWASTE, -1 /# OF WASTED WORDS PER ENTRY
2736 3017 /V3D ENCODING FOR 1-JUN-77
2737 -5 /FIVE BLOCKS LONG( 1 BLOCK = 256 WORDS)
2739 -1 /OVERLAYED BY DEVICE DEPENDENT PART WITH LENGTH
2741 IFNZRO .-1415 <CNFER,QQQ>
2742 \f *3400 /"ENTER" OVERLAY TO USR - RUNS IN 11000
2744 MSEGLM, -7 /# DIRECT. SEGS
2746 MEOVLP, TAD I [DLINK
2748 JMP MELAST /LAST SEGMENT - MUST CREATE A NEW ONE
2749 ISZ I [DCOUNT /BUMP ENTRY COUNT DOWN
2750 JMS I [MWRCAT /WRITE OUT THIS SEGMENT
2751 JMS MSKIPF /FIND END OF SHORTENED DIRECTORY
2752 DCA MEFCNT /PREPARE TO TRANSFER LAST ENTRY
2754 DCA XR1 /INTO NEXT DIRECTORY SEGMENT
2757 ISZ MEFCNT /THROUGH A BUFFER AT LOC 11200
2760 TAD T1 /T1 WAS SET UP BY "ENTER"
2763 TAD I T1 /GET LENGTH OF MOVED ENTRY
2766 JMS I [MRDCAT /READ NEXT SEGMENT
2767 JMS I [CONSOL /MAKE SURE IT IS AT ITS SMALLEST
2770 DCA I [DORG /BUMP FILE ORIGIN DOWN
2771 JMS MSKIPF /FIND LAST LOC IN NEW SEGMENT
2776 DCA METMP2 /PREPARE TO PUSH ALL ENTRIES UP
2778 DCA I METMP2 /DO THE PUSHING
2784 SZA CLA /ARE WE THROUGH?
2787 DCA XR /PREPARE TO MOVE THE SAVED ENTRY INTO THE
2788 CLA CMA /NEW SEGMENT
2790 DCA I [DCOUNT /INCREASE ENTRY COUNT OF NEW SEGMENT
2793 MECOMN, DCA MEFCNT /STORE NUMBER OF WORDS TO MOVE
2799 JMP .-3 /MOVE THE ENTRY IN
2802 DCA T1 /T1=LAST LOC IN SEGMENT
2807 SMA CLA /HAVE WE MADE THIS SEGMENT TOO BIG?
2808 JMP MEOVLP /YES - LOOP UNTIL WE GET IT RIGHT
2809 JMS I [MWRCAT /WRITE OUT NEW SEGMENT
2810 JMP MEOXIT /READ IN ENTER AND CONTINUE
2813 DCA METMP1 /LENGTH OF NEW SEGMENT
2817 SMA /WERE THERE "NEWLEN+1"
2818 JMP MWRONG /NO - SET OUR SIGHTS LOWER
2819 DCA I [DCOUNT /ADJUST LENGTH OF OLD SEGMENT
2820 JMS MSKIPF /FIND BOUNDARY LOC BETWEEN SEGMENTS
2823 DCA I [DLINK /LINK THE OLD LAST SEGMENT TO
2824 TAD I [DLINK /THE NEWLY CREATED ONE
2827 JMP I (MEOERR /PROVIDED THAT THERE IS ROOM FOR ANOTHER
2828 JMS I [MWRCAT /WRITE OUT THE NEXT-TO-LAST SEGMENT
2829 ISZ I [MCATRC /BUMP RECORD NUMBER FOR NEXT WRITE
2830 ISZ OLDT9 /LIKEWISE BUMP DIRECTORY KEY
2836 DCA I [DORG /SET UP PARAMETERS OF THE NEW SEGMENT
2837 DCA I [DLINK /MARK IT AS THE NEW LAST SEGMENT
2839 TAD [-1777 /SET UP COUNT OF WORDS TO SLIDE DOWN
2840 JMP MECOMN /USE COMMON CODE TO SLIDE WORDS AND EXIT
2842 MSKIPF, 0 /SUBR TO FIND LAST LOC USED IN A SEGMENT
2843 /ALSO FINDS NUMBER OF BLOCKS USED BY SEGMENT
2848 DCA MEOCNT /INITIALIZE POINTER(XR) AND COUNT(MEOCNT)
2853 TAD I [DWASTE /BUMP POINTER TO LENGTH WORD OF FILE ENTRY
2868 MEOVLS=1200 /DESTROYS PART OF "CLOSE" OP FOR BUFFER
2871 /ABSOLUTE LOADER FOR OS/8 - VERSION 4A
2890 ABSLDR, JMS I (CTINIT
2894 NEXTCD, JMS I (NEXFIL
2897 0216 /ASSUMED EXTENSION IS .BN
2900 DCA I [JSBITS /SET JSBITS TO SAVE CD AREA NEXT TIME
2904 SZA CLA /IS /R SWITCH ON?
2905 JMS I (CTINIT /YES - RE-INITIALIZE LOADER TABLES
2909 JMS I (SETADR /GET THE STARTING ADDRESS IF IT APPEARS ON THE LINE
2914 SZA /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256
2922 JMP NEXTCD /FILE POINTER = 0 MEANS NO MORE INPUT FILES
2925 HANDLR, 7001 /LOAD INTO 7000 IF NOT ALREADY LOADED
2933 TAD I [MPARAM /TEST FOR /I
2936 JMP I (LOADER /I IS NOT ON
2937 ISZ OFLG /IS /I ALLOWED?
2940 \fGETCH, 0 /GET-NEXT-INPUT-CHARACTER ROUTINE
2953 JMP I GETCH /EOF REACHED BEFORE LOGICAL END - ERROR
2956 0210 /READ 2 RECORDS INTO FIELD 1
2994 JMP I (IOERR /AN ACTUAL READ ERROR - AMAZING!
3002 OFLG, -1 /SWITCH FOR /O OPTION
3005 PUTWD, 6402 /ABSLDR VERSION NUMBER
3007 AND I B2 /AND OUT THE PAGE SLOT IN THE PAGE TABLE
3014 SZA CLA /TEST FOR FIELDS 0 OR 1
3015 JMP PUTIT /NEITHER - STORE AS IS
3025 ISZ I (OVLYFG /SET FLAG THAT LOADER IS BEING OVERLAYED
3026 TAD (2400 /LOADER OVERLAYS GO IN MTEMP+11 - MTEMP+14
3040 WRIBUF, CLA /MODIFIED..IF NOT /O GETS SZA CLA
3045 1400 /USE CATALOG SPACE
3048 DONTWR, DCA OLDT9 /MARK THE CATALOG DESTROYED
3057 TAD ORIGIN /IGNORE LOCATIONS ABOVE 17600
3062 TAD [7770 /CONSTRUCT CDF N FOR PROPER FIELD
3070 FLD0, TAD ORIGIN /CHECK FOR STUFF IN PAGE 7000
3072 SNL CLA /IF NON ZERO,OVERLAY
3074 TAD [7400 /FORM RECORD NO. FOR OVERLAY
3075 ISZ PG7400 /SET OVERLAY FLAG
3076 JMP LCOMPR /FORM RECORD NO.
3088 /BAD I/O ON SYSTEM DEVICE
3092 JMS WRBUF /WRITE WHATEVER
3102 CORTAB, ZBLOCK 30 /ONCE-ONLY CODE INSERTED HERE KATER
3103 ZBLOCK 2 /EXTRA NEEDED BY ONCE-ONLY CODE
3104 /NOT USED BY CORE TABLE
3117 DCA I (OFLG /CANCEL FURTHER /I'S
3131 LEADER, JMS I (GETCH
3155 DCA I (LOADWD /ZERO 'DATA LOADED' FLAG V3
3157 \fDATAWD, JMS I (LOADWD
3220 BUILD, TAD (CORTAB+25
3243 SMA CLA /IGNORE 07600 AND 17600 IN CCB /V3
3244 CMA /IN THE CORE MAP
3283 \fFLDOVR, TAD FIELDB
3296 TAD I [MPARAM+1 /CLOBBER BATCH?
3298 TAD I (MPARAM+2 /AH ED, BUG IF YOU SPEC /P/1 TO LOADER
3312 JMP NOORG /V3 ALLOW EXPLICIT START ADDR TO OVERRIDE DEFAULT
3313 TAD I (LOADWD /V3 NO EXPLICIT START ADDR
3314 CLA /REPLACE BY 'SZA CLA' TO ALLOW SELF-STARTING STUFF
3315 /* SZA CLA /V3 IS IT SELF STARTING BIN FORMAT?
3321 NOORG, DCA I (CTLBLK+2
3322 JMP I (LGTOUT /WRITE CONTROL BLOCK AND EXIT
3327 SNA /IS THERE A STARTING ADDRESS SPECIFIED?
3356 DCA CTL2 /MOVE THINGS INTO THIS PAGE
3358 DCA CTL3 /SO WE CAN REFERENCE THEM WITH DF=0
3365 SPA CLA /ARE WE OVERLAYING THE I/O MONITOR?
3368 DCA I [JSBITS /YES - SET JSBITS TO FORCE A READ
3371 13 /RESET I/O DEVICES AND FILES
3373 11 /KICK MONITOR OUT
3374 /********************************************
3375 /NO PAGE ZERO REFERENCES AFTER THIS POINT
3376 /PAGE ZERO MAY CONTAIN USER CODE
3377 /********************************************
3378 DCA I ZOFILE /ZERO OUT COMMAND DECODER AREA
3386 DCA I (MSTADR /SET UP STARTING ADDRESS IN FIELD 0
3388 \fLNOGO, TAD CTL3 /ABOVE COMMENT DOESN'T APPLY TO NEXT 9 LINES
3389 SPA CLA /ARE WE OVERLAYING THE KEYBOARD MONITOR?
3390 TAD (5 /NO - RETURN TO NON-SAVING ENTRY
3398 DCA I (7700 /SET 7700 TO -1 IF NO GO
3401 DCA I (JFIELD /SET UP PARAMETERS IN FIELD 0
3411 JMP LMOVLP /MOVE THE READ OF THE LOADER OVERLAY INTO FIELD 0
3415 JMP I (MREAD /LOADER OVERLAYED - GO READ OVERLAY
3416 JMP I (MSTCDF /LOADER NOT OVERLAYED - WHY READ?
3420 MREAD-1&177+4600 /JMS I .-1
3423 MTEMP+11 /LOCATION OF SCRATCH BLOCKS FOR LOADER OVERLAY
3425 MSTCDF&177+5200 /JMP MSTCDF
3456 AND (77 /GET LOW ORDER 6 BITS
3460 FILMSG, TEXT /, FILE 0/
3463 TAD (240 /CONVERT TO ASCII
3465 JMP I ERPCH /AND RETURN
3485 JMP I SHFT /NOTE: SHFT LEAVES AC NON-ZERO
3486 \fERR, ONCE /CAN'T USE PAGE 0 LITERALS
3489 TAD I (FILPTR /ZERO CHAR GETS REPLACED BY "FILE #"
3490 TAD (322 /MAGIC NUMBER
3491 CLL CML RAR /AC NOW CONTAINS " #"
3495 JMP EOMESG /MESSAGE MUST BE EVEN NUMBER OF CHARS LONG
3504 EOMESG, TAD (215 /TERMINATE MESSAGE WITH CR-LF
3508 ERTRN, JMP I (ABSLDR /RETURN TO LOADER STARTING ADDRESS
3514 TEXT / BAD CHECKSUM/
3520 TEXT /SYSTEM I-O ERROR/
3525 CALONC, JMS I ERR /CALL ONCE-ONLY CODE
3535 DCA I (LSTADR /V3 SET INITIAL STARTING ADDRESS TO 0
3544 /CODE FOR OVERLAY OPTION IS HERE.IF /I IS NOT
3545 /USED IMMEDIATELY, THIS CODE WILL PROBABLY BE DESTROYED,
3546 /AS IT IS USED FOR A BUFFER
3549 DCA I (OFLG /RE ENABLE /I
3551 DCA GLONK /ENTRY POINT TO HANDLER
3555 JMS I GLONK /READ IN CORE CONTROL BLOCK
3559 JMP I (OERR /DATA FAILURE
3560 TAD I CCBPTR /NO. SEGMENTS
3561 CMA /TEST FOR BAD CORE IMAGE
3564 JMP I (BADINP /NOT CORE IMAGE
3567 TAD I SGSTAD /THIS CODE IS NEW FOR V3D
3568 / AND [70 /GET FIELD
3576 TAD I SGSTAD /GET JSW FROM SAVE FILE
3578 DCA TEMP /PRESERVE /P
3584 AND (3 /PRESERVE LAST 2 BITS
3591 NEWSEG, TAD I SGSTAD /SEGMENT START ADDRESS
3593 TAD I SGFDLT /FIELD AND LENGTH
3603 SMA CLA /NO.. IS TWO PAGE SEGMENT LEFT?
3604 TAD [7600 /YES..-400 TO WORD COUNT
3605 TAD [7600 /NO.. -200 TO WORD COUNT
3608 TAD [7600 /BUMP DOWN LENGTH LEFT
3611 ISZ CCBLOK /POINT TO NEXT DATA RECORD
3614 DCA OLDT9 /MARK DIRECTORY DESTROYED
3616 JMS I GLONK /READ THE DATA RECORD IN
3621 JMP I (IOERR /DATA FAILURE
3625 TAD (1200 /SET UP INPUT POINTER
3629 JMS I (LOADWD /MOST OF THE WORK
3632 ISZ WDCT /FINISHED THIS BLOCK?
3634 JMS I (WRBUF /YES.. WRITE THE STUFF OUT
3635 DCA I (BUFREC /SO THAT WRBUF DOESN'T SCREW US UP
3636 TAD SEGLTH /V3C (REARRANGED)
3637 SMA SZA /ALL PAGES DONE?
3638 JMP TWOPG /NO, NEXT! (IF DONE, FALL INTO 'GTSEG')
3639 ISZ SEGCNT /YES, ANY MORE SEGMENTS
3641 JMP RENEW /RESET CCB POINTER FOR NEXT /I
3647 DCA SGFDLT /POINT TO NEXT CCB ENTRIES
3650 GLONK, 0 /HANDLER ENTRY POINT HERE
3656 SGFDLT, CTLBLK+5 /FIELD AND LENGTH WORD
3657 SGSTAD, CTLBLK+1 /SEGMENT START ADDRESS
3660 RENEW, 7740 /USED TO CLEAR AC
3661 L77, 77 /MIGHT OR MIGHT NOT SKIP
3668 \f *CORTAB /ONCE-ONLY CODE
3670 ONCE, 0 /ONCE-ONLY CODE TO CHECK FOR CORRECT MONITOR
3671 DCA I WRBUF /DON'T CALL AGAIN
3679 JMP I ONCE /THEY AGREE
3682 JMS I PERR /THEY DON'T
3683 TEXT /INCOMPATIBLE/ /MUST BE AN EVEN # OF CHARS LONG
3690 \f /PAGE 0 - TEMPORARIES AND LITERALS.
3691 /LOCATIONS 0-3 ARE RESERVED FOR POINTERS TO KEY LOCATIONS
3692 /IN THE MONITOR (SO THE CUSPS CAN GET AT THESE LOCATIONS)
3694 /LOCATIONS 4-6 ARE RESERVED FOR SYSTEM ODT FIELD 1 BREAKPOINTS
3697 OLDT9, 0 /POINTER TO DEVICE HANDLER OF DIRECTORY IN CORE
3703 *20 /ENTRY TO MONITOR FROM A CALL TO 17700 -
3704 /CAN BE DESTROYED AFTER IT IS EXECUTED
3710 DCA I T2 /FAKE A CALL TO "MONITO"
3716 SNA CLA /CHECK FOR A CALL FROM 10000-11777
3717 JMP I [MERROR /YES - GIVE ERROR IMMEDIATELY
3718 JMP I T4 /NO - SLIDE INTO MONITOR CODE
3720 *36 /POINTERS TO INTERNAL MONITOR LOCATIONS FOR "BUILD"
3721 SDNAME /SYSTEM DEVICE NAME TABLE
3722 SDVHND /DEVICE HANDLER ENTRY TABLE
3723 \f *40 /LOCATIONS 20-37 RESERVED FOR CUSP SCRATCH SPACE
3724 USERFG, 1 /MUST BE IN 40 - SEE CD LISTING
3725 T1, MARG1 /MUST BE AT 41
3740 MEOXIT, CIF 0 /RETURN FROM ENTER OVERLAY
3744 MONTOR+2 /RESTORE LOCS 1000-1377 OF USR
3747 MENTER /RESTART ENTER OPERATION COMPLETELY