.TITLE XVM/DOS SYSTEM GENERATOR - V1A000 / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. .EJECT / /EDIT #039 JULY 17, 73 /EDIT #040 JULY 30, 73 UC15 SPOOLER AREA UPDATE /EDIT #041 AUG 30, 73 UC15 SPOOLER AREA BUG FIX AT TAG A.5D1 /EDIT #042 NOV 12, 73 LA30 ON/OFF MOD /EDIT #043 JUN 22, 74 SKIP IOT CHECK AND SPOOLER SIZE LOWER LIM /EDIT #044 JUL 14, 74 CHANGE SIGNON NUMBER /EDIT #045 RKH 22-JUL-74 CORRECT SETTING OF X4K AND UC BITS IN / .SCOM+20 AND GENERAL COMMENT CLEAN UP / 046 SK 6-DEC-74 REMOVE QUERIES SPOOLER START BLOCK # / & SIZE + ADD QUERY POLLER ON/OFF? / V3B000 / 047 SK 20-DEC-74 SPR:15-E903 BUG FIX. CHANGE INST. AT / B.2TB+3 FROM LAC P2 TO LAC P3 / 048 BLR 30-JUN-75 ADD HANDLERLESS DEVICE CAPABILITY / 049 BLR 10-JUL-75 XVM UPGRADE / 050 BLR 10-JUL-75 TAB,FILL,UC15,XVM ENTRIES ADDED, / X4K DELETED / 051 BLR 11-JUL-75 BAD SKIP VS. BAD IOT CODE ADDED / COMMAND TABLE UPDATED / 052 BLR 12-JUL-75 PCODE CHECK ADDED / 053 BLR 12-JUL-75 MEMSIZ ADDED / 054 BLR 13-JUL-75 QAREA SIZE CODE REWRITTEN / 055 BLR 23-JUN-75 AUTO-DELETE OF SKIPLESS-HANDLERLESS DEV. / 056 BLR 4-AUG-75 GIVE ERROR FOR UC15 OFF ON RK-BASED SYS / 057 MJH 20-AUG-75 DISCLAIMER / 058 GAR 3-OCT-75 CHANGE SO THAT THE SY AND CM HANDLERS / ARE SKIPPED OVER DURING ANY MODIFICATION / OPERATIONS IN THE SAME MANNER AS TTA. / /EAG:059 / 059 9-OCT-75 EAG DO .INIT TO .DAT -14 BEFORE /EAG:059 / POINTING ^C TRAP VECTOR TO /EAG:059 / OURSELVES, SO THAT IF AN IOPS12 /EAG:059 / OCCURS BECAUSE OF UC15 OFF /EAG:059 / A ^C WILL SUCCESSFULLY EXIT /EAG:059 / TO THE NON-RESIDENT MONITOR. /EAG:059 / 060 10-OCT-75 BLR FIX HANDLER NUMBER BUG IN FHAN / / .DAT SLOT -14 MUST BE ASSIGNED TO THE SYSTEM DEVICE / / INSTALL WITH THE FOLLOWING PATCH COMMAND / >READR 16122 SGEN / / PARAMETER ASSIGNMENTS: / DEFINE BIN=0 FOR LINKING LOADER BINARY / .SCOM=100 /SYSTEM COMMUNICATION TABLE .IFDEF BIN .IODEV -14 .ENDC .TITLE INITIALIZATION / / / START JMS SECTN /IDENTIFY ITSELF; STATE VERSION; SET ^P .SIXBT 'SGEN XVM V1A000<@' LAC* (.SCOM+42 /CHECK IF LOGGED IN UNDER MIC SPA JMP GUIC /LOGGED IN UNDER MIC JMS TERMER .SIXBT '_SYSTEM PROTECTED<@' GUIC .USER -14,IOS /FOR USE IN DELETING HANDLER FILES .INIT -14,0,0 /SET UP SKIP CHAIN ETC. .INIT -3,1,200000+ENDGEN / WIRE ^C TRAP VECTOR /EAG:059 / TO OURSELVES SO WE CAN DELETE /EAG:059 / TEMPORARY FILES AND THE LIKE /EAG:059 / ON ^C'S. /EAG:059 LAC (A1) / PUT IN TRANSFER VECTOR FRESH DAC DEVICE /IN CASE OF ^P RETURN .FSTAT -14,A1 /A1 .SIXBT 'DOSGENDMP' UNIT=.-2 DEVICE=.-1 /PICK OUT UNIT # FROM CAL CODE AND /PICK DEVICE # FROM BITS 0-2 /OF TRANSFER VECTOR TO FILE NAME SNA /IF FILE DOSGENDMP IS PRESENT DELETE IT JMP STRTNP /NOT PRESENT .DLETE -14,A1 /DELETE DOSGEN DMP .EJECT STRTNP LAC DEVICE /UNPACK DEVICE # FROM .FSTAT AND (700000 /BITS 0-2 ARE DEVICE # SAD (200000 /RF DISK? JMP RFDSK /YES. GO SETUP DEVICE CODE SAD (500000 /RK DISK? JMP RKDSK /YES. SETUP DEVICE CODE SAD (300000 /RP DISK? JMP RPDSK /YES. SETUP DEVICE CODE BADDEV JMS TERMER /TERMINAL ERROR; INTEGRITY OF DISK .SIXBT '.DAT -14 NOT XVM/DOS SYSTEM<@' /SYSTEM IN DOUBT RFDSK LAC LDK /STORE DK MNEMONIC JMP RKDSK+1 RPDSK LAC LDP /STORE DP MNEMONIC DAC LITDEV LAC DPMFD /GET BLOCK '47040' JMP .+4 RKDSK LAC LRK /STORE RK MNEMONIC DAC LITDEV LAC RFMFD /GET BLOCK '1777' JMS TRANIN /SUBROUTINE TO .TRAN INTO CORE LAC (SAT /FIRST ADDRESS OF CORE BUFFER IS SAT LAC SAT+2 /WORD 2 OF DISK BLOCK CONTAINS FIRST SAD (-1 /BLOCK OF 3 BLOCK SEQUENCE OF SYSTEM JMP BADDEV /PARAMETER BLOCKS (SYSBLK-COMBLK /AND SGNBLK). IF -1 THEN DISK IS NOT /A SYSTEM DEVICE AND HAS NO SYSTEM /BLOCKS. ANNOUNCE ERROR IF NOT SYSTEM. DAC SYSBL1 /STORE BLOCK # OF SYSBLK IAC /BUMP BLOCK # TO COMBLK (BR-049) DAC COMBL1 /STORE BLOCK # OF COMBLK; ACTUALLY /SYSBLK AND COMBLK BUILD TOWARD /EACH OTHER AND OCCUPY THE TWO BLOCKS /TOGETHER. IAC /BUMP BLOCK # TO SGNBLK (BR-049) DAC SGNBL1 /STORE AWAY FOR USE BY READ /ROUTINE TO INITIALIZE TEMPORARY SYSTEM /FILE TO STATE OF OLD SYSTEM. .EJECT DZM NOSATB /INITIALIZE ACCUMULATOR FOR # /SAT BLOCKS LAC* (.SCOM+2 /ALLOCATE FREE CORE FOR SAT BLOCK TABLE DAC SATABP DAC BTABP DAC BPTR LAC SAT+3 /FIND FIRST BLOCK OF SAT FROM 4TH AND (77777 /WORD OF MFD BITS 3-17 SKP /ENTER ALGORITHM IN MIDDLE FSAT1 LAC SAT+377 /FETCH NEXT BLOCK # OF SAT SAD (-1 /IF NONEXISTENT THEN WE ARE THROUGH JMP FSAT2 /FINISHED JMS DACFRE /STORE INTO SAT BLOCK TABLE BTABP /AND CHECK FOR OVERFLOW OF FREE CORE ISZ NOSATB /INCREMENT # OF SAT BLOCKS IN SYSTEM JMS TRANIN /.TRAN IN SAT BLOCK FOR NEXT LAC (SAT JMP FSAT1 /ITERATE FSAT2 LAC NOSATB /COMPUTE -# OF SAT BLOCKS TCA DAC DECT1 AAC -3 /SUBTRACT 3 (BR-049) DAC ALCT1 /# OF BLOCKS OF DUMMY DUMP MODE FILE LAC BTABP /SET UP LOOP POINTERS DAC P1 TAD NOSATB DAC ODATB /START OF OLD .DAT SLOT TABLE IN FREE DAC ODATE /CORE TCA TAD* (.SCOM+3 /DOES IT FIT SPA JMP OVFLO1 /NO; ANNOUNCE TERMINAL ERROR .EJECT / / WRITE DUMMY FILE TO CONTAIN SYSTEM INFORMATION /UNTIL IT IS READY TO BE SUBSTITUTED FOR OLD SYSTEM INFORMATION. /THIS IS DONE THIS WAY SO THAT IF A PERSON MAKES A MISTAKE /WHILE SYSTEM GENERATING NO HARM WILL BE DONE UNLESS HE /COMPLETES THE WHOLE PROCESS WITHOUT DISCOVERING HIS ERROR OR /ABORTING THE OPERATION THROUGH SOME TERMINAL ERROR DISCOVERED /BY THE SYSTEM GENERATOR. / .INIT -14,0,0 /.INIT DISK HANDLER .ENTER -14,A1 /WRITE FILE 'DOSGEN DMP' /SAT TO TEMPORARY FILE TO # OF SAT BLOCKS PRE1 -14&777+4000 /.WRITE IN DUMP MODE 11 SAT /ANY BUFFER WILL DO THAT IS LEGAL MEMORY -376 /ONE BLOCK ISZ ALCT1 /COUNT UP TO # DESIRED JMP PRE1 /ITERATE UNTIL DESIRED # OF BLOCKS WRITTEN .CLOSE -14 /RECORD THE FILE IN THE DIRECTORY LAW -1 /THIS SETS UP A COUNTER TO SIGNAL DAC BCTR /THAT THE SYSTEM BLOCKS ARE TO /READ AFTER THE SAT BLOCKS HAVE BEEN /RECORDED LAC (NOP /SET UP SWITCH DAC PRE4 .INIT -14,0,0 /GET READY TO FIND OUT BLOCK NUMBERS .EJECT .FSTAT -14,A1 /BY .FSTAT TO FILE AND TRANSFERING SNA /SYSTEM BLOCKS AT THE SAME TIME JMP BADDEV /A 0 AC INDICATES THE FILE IS MISSING /WHICH MAKES NO SENSE; TERMINATE SKP /JUMP INTO ALGORITHM WITH FIRST BLOCK PRE3 LAC ALFA /THE LINK TO THE NEXT BLOCK THAT /IS IN THE DUMMY FILE IS USED FOR THE DAC* P1 /NEXT BLOCK OF THE BIT MAP AND RECORDED SAD (-1 /CHECK FOR NON-EXISTENT BLOCK JMP BADDEV /BAD SYSTEM JMS TRANIN /IN THE BLOCK TABLE; THE BLOCK LAC (SAT /IS BROUGHT INTO CORE FOR THE LINK BLOCK LAC SAT+377 /# WHICH IS SAVED IN ALFA AS BEFORE DAC ALFA /FOR USE LATER WHEN THE NEXT ITERATION LAC* BPTR /NEEDS A BLOCK; NOW THE NEXT BLOCK IS JMS TRANIN /BROUGHT INTO CORE AND WRITTEN ONTO LAC (SAT /THE DUMMY BLOCK FOUND LAST ITERATION LAC* P1 /THIS IS STILL THE BLOCK JMS TRANOT /.TRAN OUT LAC (SAT ISZ BCTR /A COUNT IS TAKEN OF THE BLOCKS WRITTEN JMP PRE2 /AND ON THE FIRST BLOCK THE # BLOCKS LAC SAT /IN THE SYSTEM IS TAKEN FROM THE DAC NOBSYS /FIRST WORD OF THE SAT AND STORED LAC SAT+1 /INTO NOBSYS; THE #BLOCKS IN EACH DAC NOBPSB /MAP IS RECORDED IN NOBPSB TCA /AND COMPLEMENT DAC CNOBPS /IN CNOBPS DZM SATMOD /THE BLOCK IN CORE IS INDICATED AS /UNMODIFIED PRE2 ISZ P1 /BUMP DUMMY SAT BLOCK TABLE POINTER ISZ BPTR /BUMP THE SAT BLOCK TABLE POINTER ISZ DECT1 /COUNT THE SAT BLOCKS UNTIL FINISHED JMP PRE3 /NOT FINISHED; ITERATE .EJECT PRE4 NOP /USED AS SWITCH FOR SECOND SEQUENCE /WHEN SYSTEM BLOCKS BEING PUT INTO DUMMY /FILE LAC (JMP PRE5 /SET SWITCH SO THAT NEXT SEQUENCE FINISHES DAC PRE4 LAW -3 /THERE ARE 3 SYSTEM BLOCKS TO BE TRANSFERED DAC DECT1 LAC (SYSBL1 /SET UP THE POINTERS FOR THE SYSTEM BLOCKS DAC BPTR /POINTER TO ACTUAL SYSTEM BLOCKS LAC (SYSBL2 /POINTER TO DUMMY SYSTEM BLOCK TABLE DAC P1 JMP PRE3 /JMP BACK INTO ROUTINE AND REUSE PRE5 JMS BINSGK /BRING IN SGNBLK TO CHECK DEVICE CODE LAC LITDEV /IS THIS THE SYS DEV SAD SDEV1 /IS THIS SYSTEM BLOCK APPROPRIATE SKP /YES; CHECK IS SATISFIED JMP BADDEV /NO; SYSTEM INTEGRITY IN QUESTION DAC PRE6 /PUT INTO INFORMATION MESSAGE IAC /MAKE INTO A HANDLER NAME (BR-049) DAC SYHAN /AND PUT INTO WORD WHICH INSURES /THAT THIS HANDLER WILL NOT BE DELETED AAC 13 /COMPUTE DKL OR DPL (BR-049) DAC LDKL /AND STICK INTO .DAT SLOT CONSTANT /FOR .DAT-7 LAC UNIT /COMPUTE UNIT # OF DISK IN QUESTION RCR /MOVE 3 BITS TO THE RIGHT RTR AND (070000 /CLEAN OFF UNIT # XOR L0A /PUT INTO INFORMATION MESSAGE DAC PRE7 JMS QUERY /STATE THE OPERATION BEING PERFORMED .SIXBT 'SYSTEM UPDATE ON ' PRE6 XX PRE7 .SIXBT '0<@' .EJECT / / GET OLD .DAT SLOT CONTENTS AND COMPUTE DEVICE HANDLER NAMES /SO THAT IF THE DEVICES ARE INSERTED AND NEW NUMBERS ARE /ASSIGNED TO HANDLERS THE DEFAULT .DAT SLOT CONTENTS WILL BE PRESERVED / LAC SGNDAT /PICK UP LIST HEAD FOR ITERATIVE DAC P2 /ALGORITHM PRE8 LAC P2 /EXAMINE POINTER TO SEE IF THE TABLE SAD SGNUFD /HAS BEEN FULLY EXAMINED AND BUILT JMP PRE10 /FINISHED WITH TRANSFER LAC* P2 /PICK UP DEVICE # AND UNIT # SAD (100000 /STORE AS IS IF SPECIAL SLOT JMP PRE9 /SPECIAL SLOTS ARE NOT MODIFIED /BY THE SYSTEM GENERATOR AND (77777 /CLEAN OFF UNIT # JMS FIONM /FIND CORRESPONDING HANDLER NAME JMP BADDEV /IF HANDLER MISSING THEN SYSTEM IS /SUSPECT PRE9 JMS DACFRE /PLACE INTO TABLE AND INCREMENT ODATE /END POINTER AND CHECK IF FREE /CORE IS OVERFLOWED ISZ P2 /BUMP TABLE POINTER JMP PRE8 /ITERATE UNTIL TABLE EXHAUSTED PRE10 LAC ODATE /SET UP DELETED HANDLER TABLE POINTER DAC DELPT1 /AND FALL INTO SECTION A .TITLE A. ALTER SYSTEM PARAMETERS / / / A.0 JMS SECTN /PRINT SECTION HEAD QUESTION AND SET ^P .SIXBT 'A. ALTER SYSTEM PARAMETERS<@' LAC (1 JMS YW0 /THE DEFAULT ANSWER TO ALL SECTION LAC (1 /QUESTIONS IS NO JMP A.0 /TYPE QUESTION OVER ON SYNTAX ERROR JMP B.0 /NO; SKIP SECTION JMS BINSGK /YES; BRING IN SGNBLK AND SET TABLE /POINTERS / / API? (DOES SYSTEM HAVE API HARDWARE) / A.1 JMS QUERY /ASK QUESTION .SIXBT 'API<@' /API? (X) LAC SCOM4 /GET DEFAULT INTO ACCUMULATOR JMS YW1 /FETCH ANSWER WHICH WILL SET BIT /TO 1 IF YES; THIS ROUTINE TYPES /OLD VALUE IN PARENTHESIS TO INDICATE /DEFAULT VALUE LAC (400000 /BIT 0 OF .SCOM+4 CONTAINS API BIT JMP A.1 /REPEAT QUESTION ON AN ERROR NOP /NO; AC CONTAINS NEW .SCOM+4 CONTENTS DAC SCOM4 /YES; STORE NEW .SCOM+4 CONTENTS / / TAB SIM? (X) (DOES SYSTEM NEED TAB SIMULATION FOR DECWRITER AND ASR33 / TYPE DEVICES) (BR-050) / A.2 JMS QUERY /ASK QUESTION FOLLOWING .SIXBT 'TAB SIMULATION<@' /QUESTION (BR-050) LAC SCOM4 /GET DEFAULT INTO AC FOR ANSWER RECEIVER JMS YW0 /IF YES SET BIT TO 0 IN .SCOM+4 LAC (100000 /BIT 2 JMP A.2 /REPEAT ON BAD SYNTAX NOP /NO; AC CONTAINS NEW CONTENTS OF .SCOM+4 DAC SCOM4 /YES; STORE NEW CONTENTS OF .SCOM+4 / / FILL CHARS. (X) (DOES SYSTEM NEED FILL CHARACTERS TO BUFFER CARRIAGE / RETURNS - FOR LA30 LIKE DEVICES) (BR-050) / A.2A JMS QUERY .SIXBT /FILL CHARACTERS<@/ /(BR-050) LAC SCOM4 /SET BIT 10 OF SCOM+4 TO 1 IF YES (BR-050) JMS YW1 LAC (000200 /BIT 10 OF SCOM4 (BR-050) JMP A.2A /BAD SYNTAX NOP /NO - NOTHING DONE (BR-050) DAC SCOM4 /YES. SAVE (BR-050) / / MIC? [XXX] (WHAT IS TO BE THE MONITOR IDENTIFICATION CODE?) / A.3 LAC MIC /PICK OUT OLD MIC FROM SGNBLK AND DAC MIC1 /STORE IT INTO QUESTION AS DEFAULT JMS QUERY /ASK QUESTION: 'MIC[XXX]' .SIXBT 'MIC[' MIC1 XX .SIXBT '] <@' CLA /RECEIVE ANSWER WHICH IS NOT Y OR N JMS ANS /THIS ANSWER WILL BE A SINGLE /SYMBOL TERMINATED BY CARRIAGE RETURN /OR ALTMODE JMP A.3 /REPEAT QUESTION IF BAD SYNTAX JMP A.4 /DEFAULT MEANS DO NOTHING JMP ALTBAD /$ IS MEANINGLESS SO ANNOUNCE ERROR SKP /SYMBOL IS ONLY MEANINGFUL ANSWER JMP NUMBAD /OCTAL # IS BAD SYNTAX SAD (3 /MUST BE 3 CHARACTERS JMP A.3A /3 CHARACTERS N3CHR JMS RERR /ANNOUNCE ERROR .SIXBT 'NOT 3 CHAR<@' /NOT EXACTLY 3 CHARACTERS A.3A LAC ANSWER /SYMBOLS ARE STORED IN ANSWER AND DAC MIC /ANSWER+1; PUT ANSWER IN MIC / / DEFAULT # BUFFERS[XX] (DEFAULT # OF BUFFERS TO ASSIGN WHEN / USING EXECUTE OR THE LINKING LOADER) / A.4 JMS QUERY /ASK QUESTION .SIXBT 'DEFAULT # BUFFERS[<@' LAC FILES /PRINT OLD # FOR DEFAULT ANSWER JMS NUMSUP /SUPRESS LEADING ZEROES JMS OUT /TYPE FINAL CHARACTERS .SIXBT '] <@' CLA /ANSWER MUST BE SINGLE SYLABLE JMS ANS /MUST BE TERMINATED BY C.R. OR ALTMODE JMP A.4 /REPEAT QUESTION ON SYNTAX ERROR JMP A.5 /DEFAULT MEANS DO NOTHING JMP ALTBAD /$ IS UNDEFINED JMP SYMBAD /SYMBOL IS MEANINGLESS SPA /NUMBER MUST BE POSITIVE JMP ANBAD /BAD NUMBER DAC FILES /STORE AWAY IN SGNBLK .EJECT / / # OF WORDS/BUFFER (THE NUMBER OF WORDS IN OCTAL WHICH IS /NEEDED TO DO SEQUENTIAL I/O ON A FILE ORIENTED MASS STORAGE DEVICE /PER FILE / A.5 JMS QUERY /ASK QUESTION .SIXBT '# WORDS/BUFFER[<@' LAC X1 /TYPE OLD SYSTEM # AS DEFAULT JMS NUMSUP /SUPRESS LEADING ZEROES JMS OUT /TYPE REMAINING FEW CHARACTERS OF QUESTION .SIXBT '] <@' CLA /ANSWER MUST BE TERMINATED BY C.R. OR ALTMODE JMS ANS /RECEIVE ANSWER ROUTINE JMP A.5 /REPEAT QUESTION ON BAD SYNTAX JMP A.5B /DEFAULT MEANS DO NOTHING JMP ALTBAD /$ IS MEANINGLESS JMP SYMBAD /SYMBOLS ARE MEANINGLESS TAD (-440 /CHECK # FOR BEING LESS THAN 440 OCTAL SMA JMP A.5A /GOOD SIZED NUMBER NUMSM JMS RERR .SIXBT 'IS TOO SMALL<@' A.5A LAC NUMBER /PUT NUMBER INTO SGNBLK (X1) DAC X1 / / UC15 CONFIG? COMMENT CHANGE - RKH 22-JUL-74 / A.5B JMS QUERY /FIND OUT .SIXBT 'UC15 CONFIG<@' LAC SCOM4 /DEFAULT WORD (.SCOM+4) (BR-050) JMS YW1 /IF UC15 CONFIG BIT16 OF .SCOM+4 (BR-050) LAC (000002 /WILL BE SET TO 1 (BR-050) JMP A.5B /BAD SYNTAX SKP /NO. CORRECT UC BIT SETTING - RKH - 22-JUL-74 JMP A.5C /YES - SAVE IT (BR-056) DAC SCOM4 /SAVE (BR-050) LAC LITDEV /GET SYSTEM DEVICE CODE (BR-056) SAD LRK /IS IT AN RK SYSTEM (BR-056) SKP /YES - GIVE AN ERROR(BR-056) /SINCE RK BASED SYS MUST HAVE UC15 (BR-056) JMP A.7 /SKIP OVER POLLER QUESTION (BR-050) JMS OUT /PRINT ERROR MESSAGE (BR-056) .SIXBT '>@>(INVALID REPLY FOR RK BASED UC15 SYSTEM)<@' JMP A.5B /GO TRY AGAIN (BR-056) / /IF UC15 CONFIG., FIND OUT: POLLER ON/OFF? / A.5C DAC SCOM4 /SAVE IT (BR-056) JMS QUERY /END OF UC BIT FIX - RKH - 22-JUL-74 .SIXBT 'POLLER<@' /POLLER? (X) LAC SCOM4 /GET DEFAULT INTO AC (BR-050) JMS YW1 /FETCH ANSWER WHICH WILL SET BIT TO 1 /IF YES; THIS ROUTINE TYPES OLD VALUE IN /PARAENTHESIS TO INDICATE DEFAULT VALUE LAC (000004 /BIT 15 OF SCOM4 CONTAINS POLLER FLAG (BR-050) JMP A.5C /REPEAT QUESTION ON ERROR NOP /NO. AC CONTAINS NEW VALUE OF .SCOM+4 DAC SCOM4 /SAVE IN SGNBLK (BR-050) / .EJECT / / DEFAULT PROTECT CODE[X] (RECEIVE THE DEFAULT PROTECT /CODE FOR DISK FILES) : / 1 UNPROTECTED / 2 READ/NO WRITE / 3 NO READ/ NO WRITE / /THIS ROUTINE WILL ACCEPT 1 DIGIT ONLY; IT WILL CHECK (BR-052) /TO SEE THAT THE NUMBER IS ONE OF THE 3 LEGAL DIGITS / A.7 JMS QUERY /ASK QUESTION .SIXBT 'DEFAULT FILES PROTECTION CODE[<@' LAC PROTCT /TYPE OLD VALUE AS DEFAULT JMS NUMSUP /SUPRESS LEADING ZEROES JMS OUT /TYPE REMAINING PORTION OF QUESTION .SIXBT '] <@' CLA /SINGLE ANSWER TERMINATED BY CAR. RET JMS ANS /OR ALT MODE JMP A.7 /REPEAT QUESTION IF BAD SYNTAX JMP A.8 /DEFAULT MEANS DO NOTHING JMP ALTBAD /$ UNDEFINED JMP SYMBAD /SYMBOL MEANINGLESS LAC NUMBER /GET VALUE OF NEW PCODE (BR-052) SAD (1 /IS IT ONE (BR-052) JMP A.7A /YES-PUT INTO SGNBLK (BR-052) SAD (2 /NO-IS IT TWO (BR-052) JMP A.7A /YES-PUT INTO SGNBLK (BR-052) SAD (3 /NO-IS IT THREE (BR-052) JMP A.7A /YES-PUT INTO SGNBLK (BR-052) JMS RERR /NOT A VALID PCODE;RECOVERABLE ERROR (BR-052) .SIXBT 'INVALID P-CODE: USE 1,2 OR 3<@' /(BR-052) A.7A DAC PROTCT /SAVE IN PCODE SLOT OF SGNBLK (BR-052) .EJECT / / RESIDENT PATCH AREA SIZE[XX] (THIS QUESTION ALLOWS THE /USER TO SPECIFY A SMALL AREA IN THE RESIDENT MONITOR PORTION OF /THE SYSTEM FOR HIS OWN RESIDENT MONITOR PATCH AREA. THIS AREA /IS OF SIGNIFICANT SIZE AND IS POINTED TO BY THE REGISTER 101 /IN THE CORE IMAGE OF .SYSLD EXAMINED BY PATCH. IF THE USER /INDICATES A NUMBER OF REGISTERS HE MAY START PATCHING THE /SYSTEM LOADER BEGINNING WITH THIS FIRST WORD AND ENDING WHEN HE /EXHAUSTS HIS SPECIFIED PATCH AREA. SYSTEMS FROM THE LIBRARY /HAVE NO PATCH AREA OF THIS KIND SPECIFIED. / A.8 JMS QUERY /ASK QUESTION .SIXBT 'RESIDENT PATCH AREA SIZE[<@' LAC PCHSZ /PRINT OLD VALUE AS DEFAULT JMS NUMSUP /SUPRESS LEADING ZEROES JMS OUT /TYPE REMAINDER OF QUESTION .SIXBT '] <@' CLA /SINGLE ANSWER ENDING IN /CAR. RET. OR ALTMODE JMS ANS /RECIEVE ANSWER JMP A.8 /BAD SYNTAX MEANS REPEAT QUESTION JMP A.9 /DEFAULT MEANS CHANGE NOTHING JMP ALTBAD /$ IS MEANINGLESS JMP SYMBAD /SYMBOLS ARE MEANINGLESS SPA /NUMBER MUST BE POSITIVE JMP NUMSM /NUMBER IS TOO SMALL TAD (-5001 SPA JMP A.8A /5000(8) REGISTERS IS MAXIMUM JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS >> 5000<@' A.8A LAC NUMBER /PUT NEW PATCH AREA NUMBER IN SGNBLK DAC PCHSZ .EJECT / / PAGE MODE SYSTEM (DOES THE SYSTEM START OUT IN PAGE MODE /OR BANK MODE) / A.9 JMS QUERY /ASK QUESTION .SIXBT 'PAGE MODE SYSTEM<@' LAC SCOM4 /FETCH DEFAULT FROM SGNBLK JMS YW0 /YES WHEN BIT IS 0 LAC (100 /BIT 11 IS BIT IN .SCOM+4 JMP A.9 /REPEAT QUESTION ON SYNTAX ERROR NOP /NO; NEW .SCOM+4 IN AC DAC SCOM4 /YES; STORE INTO .SCOM+4 CONTENTS IN /SGNBLK / / XVM MODE SYSTEM? (X) (WILL USER PROGRAMS RUN IN XVM MODE) / A.9A JMS QUERY /ASK QUESTION (BR-050) .SIXBT 'XVM MODE SYSTEM<@' /(BR-050) LAC SCOM4 /BIT 17 OF SCOM4 CONTAINS XVM MODE BIT (BR-050) JMS YW1 /YES SETS BIT TO 1 (BR-050) LAC (000001 /INDICATE BIT 17 TO YW1 ROUTINE (BR-050) JMP A.9A /ERROR - BAD SYNTAX (BR-050) NOP /NO (BR-050) DAC SCOM4 /YES - SAVE RESULT (BR-050) / .EJECT / / MEMORY SIZE ? (X) MUST BE LEQ 128K AND GEQ 24K / ANSWER IN FORM NNNK / A.9B LAC SCOM20 /GET SYSTEM MEMORY SIZE (BR-053) IAC /SYSTEM MEM SIZE IS NNNK-1 SO ADD 1 TO /SO ADD 1 TO MAKE IT EVEN K (BR-053) JMS MAKEK /PRODUCE DECIMAL NR IN K (BR-053) DAC MSZ1 /PUT IT IN QUESTION (BR-053) JMS QUERY /ASK ABOUT SYSTEM MEMORY SIZE (BR-053) .SIXBT 'SYSTEM MEMORY SIZE [' MSZ1 XX /SLOT FOR MEMSIZ NR. (BR-053) .SIXBT 'K] <@' /END OF MESSAGE (BR-053) CLA /REQUEST SINGLE ANSWER WITH CR. (BR-053) JMS ANS /ASK FOR ANSWER (BR-053) JMP A.9B /BAD SYNTAX - TRY AGAIN (BR-053) JMP A.10 /DEFAULT - DO NOTHING (BR-053) JMP ALTBAD /ALT NOT ALLOWED (BR-053) JMP A.9B1 /SYMBOL (NNNK) ONLY GOOD ANSWER (BR-053) JMP KBAD /OCTAL NUMBER - NO GOOD (BR-053) A.9B1 AAC -5 /TEST NR. OF CHAR FOR MAX OF 4 (BR-053) SMA /SKIP IF LEQ 4 (BR-053) JMP KBAD /ERROR-TOO MANY CHAR (BR-053) JMS KTOOCT /CONVERT ANSWER,ANSWER+1 TO BIN K NR.(BR-053) AAC -30 /TEST FOR NR. LESS THAN 24K (BR-053) SPA /SKIP IF GEQ 24 (BR-053) JMP KBAD1 /LESS THAN 24K - ERROR (BR-053) AAC 30 /RESTORE NUMBER (BR-053) CLL /SET UP SHIFT (BR-053) ALS 12 /MULT BY 1024 (BR-053) AAC -1 /PRODUCE NNNK-1 (BR-053) DAC SCOM20 /SAVE IN SCOM (BR-053) JMP A.10 /CONTINUE (BR-053) .EJECT / / ROUTINE TO TAKE SIXBT NNNK AND PRODUCE OCTAL NUMBER IN AC / NNNK FOUND IN ANSWER,ANSWER+1 / VALUE CHECKED FOR MULT OF 8K AND LEQ 128K / ERROR RETURNS USE RECOVERABLE ERROR EXITS TO LAST QUERY / KTOOCT 0 /ENTRY TO NNNK TO OCTAL K ROUTINE (BR-053) DZM OLDVAL /CLEAR INITIAL OLD VALUE (BR-053) DZM ANSCNT /INITIALIZE ANSGET ROUTINE (BR-053) LOOPKO JMS ANSGET /GET CHARACTER FROM ANSWER,ANSWER+1 (BR-053) AAC -60 /TEST FOR DECIMAL DIGIT (BR-053) DAC TEMP /SAVE POSSIBLE DIGIT (BR-053) SPA /SKIP IF STILL POSSIBLE (BR-053) JMP NOTNR /NOT A DECIMAL DIGIT - END LOOP (BR-053) AAC -13 /CHECK IF TOO LARGE A CHAR (BR-0539 SMA /SKIP IF DECIMAL DIGIT (BR-053) JMP NOTNR /NOT A DECIMAL DIGIT - END LOOP (BR-053) LAC OLDVAL /GET OLD VALUE (BR-053) MUL /MULTIPLY BY TEN (BR-053) 12 /(BR-053) LACQ /GET RESULT (BR-053) TAD TEMP /ADD IN NEW DIGIT (BR-053) DAC OLDVAL /AND SAVE (BR-053) AAC -201 /TEST FOR LARGER THAN 128K (BR-053) SMA /SKIP IF LESS THAN 128K - VALUE OK (BR-053) JMP KBAD2 /ERROR - VALUE TOO LARGE (BR-053) JMP LOOPKO /GET NEXT POSSIBLE DIGIT (BR-053) NOTNR LAC TEMP /GET CHARACTER-60 (BR-053) SAD (-45 /IS CHAR 'K' (BR-053) SKP /YES - CONTINUE PROCESSING (BR-053) JMP KBAD /NO - ERROR (BR-053) LAC OLDVAL /GET NUMBER (BR-053) CLL /SET UP IDIV (BR-0539 IDIV /TEST FOR A MULT OF 8K (BR-053) 10 /(BR-053) SZA /SKIP IF NO REMAINDER - THUS MULT OF 8K (BR-053) JMP KBAD3 /NOT A MULT OF 8K - ERROR (BR-053) LAC OLDVAL /RELOAD AC WITH NUMBER (BR-053) JMP* KTOOCT /RETURN TO CALLER (BR-053) .EJECT / / ROUTINE TO TAKE OCTAL NUMBER AND PRODUCE SIXBT DECIMAL NR / IN AC - NUMBER MUST BE INTEGER AND LEQ THREE DIGITS X 1024 / RESULT IS NUMBER/1024 / MAKEK 0 /ENTRY FOR OCTAL TO DECIMAL K ROUTINE (BR-053) CLL /SET UP SHIFT (BR-053) LRS 12 /DIVIDE BY 1024 (BR-053) IDIV /GET ONE'S VALUE (BR-053) 12 /(BR-053) AAC 60 /REMAINDER IS ONE'S - MAKE SIXBT (BR-053) DAC TEMP /SAVE CHAR (BR-053) LACQ /GET TEN'S,HUNDRED'S (BR-053) IDIV /GET TEN'S (BR-053) 12 /(BR-053) AAC 60 /REMAINDER IS TEN'S - MAKE SIXBT (BR-053) CLL /SET UP SHIFT (BR-053) ALS 6 /POSITION CHAR (BR-053) TAD TEMP /COMBINE CHARS (BR-053) DAC TEMP /SAVE (BR-053) LACQ /GET HUNDREDS (BR-053) SNA /SKIP IF ANY HUNDRED'S (BR-053) LAW -20 /IF ZERO THEN MAKE CHAR A BLANK (BR-053) AAC 60 /MAKE SIXBT CHAR (BR-053) CLL /SET UP SHIFT (BR-053) ALS 14 /POSITION CHAR (BR-053) TAD TEMP /PRODUCE 3 CHAR RESULT (BR-053) JMP* MAKEK /RETURN TO CALLER (BR-053) .EJECT / 60 CPS? (X) (IS THE LINE VOLTAGE 60 CYCLES OR 50 CYCLES) /THIS QUESTION IS NEEDED FOR THE CLOCK IN THE RESIDENT MONITOR /WHICH KEEPS TIME / A.10 JMS QUERY /ASK QUESTION .SIXBT '60 CPS<@' LAC CLKCON /COMPUTE DEFAULT SAD (-74 /60 CPS? CLA /YES; CLEAR AC JMS YW0 /AC IS STILL MINUS IF 50 CPS LAC (400000 /AC SIGN INDICATES DEFAULT JMP A.10 /REPEAT QUESTION ON BAD SYNTAX JMP A.10A /NO MEANS 50 CPS LAC (-74 /- # OF TICKS IN SECOND FOR 60 CPS SKP A.10A LAC (-62 /- # OF TICKS IN SECOND FOR 50 CPS DAC CLKCON /STORE AWAY INTO SGNBLK A.11 JMS POTSGK /SAVE SGNBLK .TITLE B. ALTER I/O DEVICES AND HANDLERS / / / B.0 JMS SECTN /ANOUNCE SECTION QUESTION AND SET ^P .SIXBT 'B. ALTER I/O DEVICES OR HANDLERS<@' LAC ODATE /CLEAR OUT LIST OF DELETED HANDLERS DAC DELPT1 /ON A ^P OR INITIALLY LAC (1 JMS YW0 /DEFAULT ANSWER IS NO LAC (1 JMP B.0 /REPEAT IF BAD SYNTAX JMP C.0 /IGNORE SECTION IF NO JMS BINSGK /BRING IN SGNBLK LAC CMD /(GAR-058) (.SIXBT 'CMD') JMS FHAN /GO PAST PERMANENT ENTRIES IN SGNBLK JMP BADDEV /(GAR-058) CMD PSEUDO-DEVICE CAN NOT BE MISSING /DISK SYSTEM INTEGRITY IN QUESTION .EJECT / / DELETE DISCARDED HANDLERS? (Y) (THIS QUESTION ALLOWS /THE USER TO DELETE ANY UNNEEDED HANDLERS FROM THE SYSTEM AUTOMATICLY /WHEN HE DELETES THEM FROM THE LEGAL DEVICE HANDLER TABLE. /THE DEFAULT ANSWER IS YES BECAUSE ONE WOULD NORMALLY WANT TO DO THIS. / B.0A JMS QUERY /ASK QUESTION .SIXBT 'DELETE DISCARDED HANDLERS<@' LAC (1 JMS YW1 /DEFAULT ANSWER YES LAC (1 JMP B.0A /REPEAT ON BAD SYNTAX JMP B.0B /NO LAC (SKP /YES SKP B.0B LAC (NOP DAC SKPDEL /SKP IF DELETE FLAG .EJECT / / SECTION TO GO THROUGH SGNBLK AND MODIFY DEVICE TABLE / JMS QUERY /ANNOUNCE SEQUENCE OF QUESTIONS .SIXBT 'TO BE KEPT:_<@' /Y MEANS KEEP IN SYSTEM B.2A0 JMS NHAN /GET FIRST HANDLER WHICH MAY BE DELETED JMP B.4 /NO HANDLERS THAT CAN BE DELETED B.2A1 LAC P1 /PUT ADDRESS OF FIRST HANDLER NAME B.2A DAC P2 /INTO POINTER P2 LAW 17700 /FETCH DEVICE CODE FOR THIS HANDLER AND* P2 /BY STRIPPING OFF HANDLER LETTER SNA /SKIP IF NOT START OF SKIPS (BR-048) JMP B.2B00 /JUMP TO HANDLER LESS ROUTINE (BR-048) DAC B.2B /DEPOSIT IN QUESTION; USED LATER ALSO B.2C JMS QUERY /DT? ($) EXAMPLE; DEFAULT IS $ B.2B .SIXBT '@@@<@' JMS ALTMOD /$ DEFAULT JMP B.2C /REPEAT ON BAD SYNTAX JMP B.2B1 /$ MEANS GO TO NEXT DEVICE /AND LEAVE THIS DEVICE UNALTERED JMP B.2BNO /NO; SET FLAG LAC (SKP /YES; SET FLAG TO SKP JMP B.2BYS B.2BNO LAC B.2B /CANNOT DELETE SYSTEM DEVICE SAD SDEV1 SKP JMP B.2BN1 /NOT SYSTEM DEVICE JMS OUT /ANNOUNCE RECOVERABLE ERROR .SIXBT "_>@>(CAN'T DELETE SYSTEM DEVICE)<@" JMP* BADSYN B.2B00 LAC P2 /UPDATE P3 TO FAKE OUT NORMAL ACTION (BR-048) DAC P3 /USING P2 (BR-048) JMS QUERY /ASK IF ANY ACTION TO TAKE (BR-048) .SIXBT 'HANDLERLESS DEVICE<@' /(BR-048) JMS ALTMOD /ALLOW ALT AS DEFAULT (BR-048) JMP B.2B00 /SYNTAX ERROR (BR-048) JMP B.2B01 /DEFAULT-GO TO NEXT ITEM (BR-048) JMP B.2P /DELETE -GET RID OF THIS DEVICE (BR-048) JMP B.2L1 /EXAMINE SKIPS (BR-048) B.2B01 LAC P2 /FAKE OUT NHAN ROUTINE (BR-048) AAC -1 /BY POINTING TOO FAR BACK (BR-048) DAC P1 /USING P1 (BR-048) JMP B.2A0 /ENTER NORMAL NEXT ITEM STREAM (BR-048) .EJECT B.2BN1 LAC (NOP /SET FLAG TO NOP B.2BYS DAC B.2KEF /STORE IN FLAG TO SKP IF DETAILED QUESTIONS LAC P2 /START GOING THROUGH HANDLERS DAC P3 /BUT SAVE ORIGIN OF ENTRY FOR LATER /TESTS FOR COMPLETE DELETION OF DEVICE B.2D1 LAC* P2 /GET NEXT HANDLER FROM TABLE DAC B.2E /STORE IN QUESTION SAD SYHAN /KEEP IF THIS HANDLER SYSTEM HANDLER JMP B.2H /TO KEEP HANDLER WITHOUT QUESTION B.2KEF XX /SKP TO ASK QUESTION JMP B.2F1 /AUTOMATICLY DELETE ALL HANDLERS B.2D2 JMS QUERY /ASK QUESTION ABOUT HANDLER B.2E .SIXBT '@@@<@' /EX. DTA? (Y) LAC (1 JMS YW1 /DEFAULT ANSWER IS Y (KEEP HANDLER) LAC (1 JMP B.2D2 /REPEAT ON SYNTAX ERROR JMP B.2F1 /DELETE HANDLER B.2H ISZ P2 /GO TO NEXT HANDLER AND SAVE PREVIOUS B.2H1 LAW 17700 /TEST WHETHER HANDLER IS THERE AND* P2 /BY CHECKING IF FIRST 2 CHARACTERS PRESENT SZA JMP B.2D1 /NON-ZERO MEANS NOT DEFAULT FILES .EJECT / / ASK FOR NEW HANDLERS / B.2M XCT B.2KEF /IF DELETING DEVICE OMIT ASKING FOR NEW JMP B.2L /HANDLERS B.2M1 JMS QUERY /ANOUNCE SECTION FOR NEW HANDLER INPUT .SIXBT 'NEW HANDLERS:_<@' B.2K CLC /FETCH HANDLERS SEPERATED BY JMS MULANS /COMMA, ALTMODE OR CR JMP MULBAD /DO NOT RETYPE HEAD QUESTION ON SYNTAX /ERROR JMP B.2L /STOP ADDING HANDLERS WHEN RECEIVE DEFAULT /ANSWER JMP ALTBAD /$ UNDEFINED JMP B.2ON /SYMBOL ONLY LEGAL ANSWER JMP NUMBAD /OCTAL # IS BAD B.2K1 CLC /MAY BE MORE ON LINE JMS MORANS /FETCH NEXT NEW HANDLER ON LINE JMP MULBAD /SYNTAX ERROR JMP MULBAD JMP MULBAD JMP B.2ON /SYMBOL ONLY LEGAL ANSWER JMP NUMBAD /# ILLEGAL B.2ON SAD (3 /# OF CHARACTERS MUST BE 3 JMP B.2O2 /QUALIFIES B.2O3C JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T 3 CHAR<@" B.2O2 JMS DELIM /CHECK FOR LEGAL DELIMITER 0 /CARRIAGE RETURN OR ALT MODE JMP B.2O1 JMS DELIM 54 /COMMA JMP B.2O1 JMP OPBAD /ILLEGAL DELIMITER B.2O1 LAW 17700 /CHECK IF SAME DEVICE CODE AS DEVICE AND ANSWER SAD B.2B JMP B.2KA /SAME DEVICE CODE B.2BDC JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'HAS BAD DEVICE CODE<@' B.2KA LAC ANSWER /3RD CHAR MAY NOT BE OCTAL # AND (70 /OR IT WILL BE CONFUSED WITH UNIT # SAD (60 SKP /ERROR; THIRD CHARACTER OCTAL # JMP B.2KA1 /GOOD SO FAR JMS RERR /ANNOUNCE RECOVERABLE SYNTAX ERROR .SIXBT 'HAS 3RD CHAR OCTAL #<@' B.2KA1 LAC ANSWER /IS HANDLER NAME ALREADY PRESENT JMS FHAN JMP B.2KC /NO; ADD TO TABLE B.2HAP JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS NOT NEW<@' B.2KC LAC ENDSBK /ADD TO TABLE BY MOVING REST DOWN 1 DAC P1 ISZ ENDSBK /FIRST FREE WORD IN SGNBLK INCREMENTED AAC -1 /SET UP POINTERS FOR MOVE (BR-049) DAC P4 B.2I LAC P1 /CHECK FOR END OF ITERATION SAD P2 JMP B.2J /FINISHED MOVING REST DOWN LAC* P4 /MOVE NEXT ENTRY DAC* P1 /WORD LAC P4 /MOVE POINTERS UP ONE DAC P1 AAC -1 /SUBTRACT 1 (BR-049) DAC P4 JMP B.2I B.2J LAC ANSWER /PUT IN NEW DEVICE HANDLER NAME DAC* P2 ISZ P2 /BUMP PAST NAME JMS DELIM /BRANCH ON DELIMITER 0 JMP B.2K /GO GET ANOTHER ENTRY JMP B.2K1 /GO GET ANOTHER HANDLER ON SAME LINE B.2F1 LAC P2 /DELETE HANDLER DAC* (11 /SET UP AUTO INCREMENT REGISTER TO AAC -1 /MOVE REST OF TABLE UP (BR-049) DAC* (10 LAW -1 /FIRST FREE WORD IN SGNBLK COMES UP 1 TOO TAD ENDSBK DAC ENDSBK B.2G LAC* (11 /MOVE ENTRIES UP SAD ENDSBK /FINISHED? JMP SKPDEL /YES; SHOULD HANDLER BE DELETED LAC* 11 /FROM THE SYSTEM; MOVE ENTRY UP DAC* 10 JMP B.2G /ITERATE UNTIL FINISHED SKPDEL XX /SKP IF DELETE HANDLER FILE JMP B.2H1 /DON'T DELTE FILE LAC B.2E /ADD TO DELTE HANDLER LIST JMS DACFRE /IN FREE CORE AND CHECK FOR OVERFLOW DELPT1 JMP B.2H1 /GO BACK FOR MORE B.2B1 LAC P2 /GO TO NEXT DEVICE DAC P1 B.2B2 JMS NHAN /GO TO NEXT HANDLER JMP B.4 /NONE LEFT IN SYSTEM LAW 17700 /CHECK DEVICE CODE AND* P1 SAD B.2B /NEW DEVICE CODE JMP B.2B2 /NO ITERATE JMP B.2A1 /YES; PROCESS NEW DEVICE B.2L LAC P2 /ARE THERE ANY HANDLERS LEFT FOR DEVICE? SAD P3 JMP B.2P /NO; DELETE DEVICE SKIPS ALSO DAC P3 /SAVE FOR LATER B.2L1 LAC* P2 /GET # OF SKIPS IN OLD ENTRY (BR-048) CMA /COMPUTE -#-1 DAC MCTR1 /DEPOSIT IN COUNTER B.2T ISZ MCTR1 /IS THIS LAST OLD SKIP? JMP B.2TS /NO JMP B.2U /YES; ACCEPT NEW SKIPS B.2TS LAC P3 /UNSAVE P2 TO EXTRACT NEXT SKP DAC* (10 /PUT INTO AUTOINCREMENT REGISTER LAC* 10 /PUT SKIP MNEMONIC INTO QUESTION DAC B.2TA LAC* 10 DAC B.2TA+1 .EJECT / / ASK ABOUT OLD SKIPS / JMS QUERY /ASK QUESTION ABOUT SKIPS B.2TA .SIXBT '@@@@@@=<@' LAC* 10 /IF IOT IS POSITIVE THEN IT IS TO BE SPA /ONE'S COMPLEMENTED AND PRECEEDED BY - JMP B.2TA1 /NEGATIVE CMA /ONE'S COMPLEMENT DAC NUMOUT /STORE TEMPORARILY LAW 55 /PRINT MINUS JMS KLPUT /PACK INTO BUFFER LAC NUMOUT /UNSAVE IOT B.2TA1 JMS NUMOUT /DO NOT SUPPRESS LEADING ZEROES LAC (1 JMS YW1 /DEFAULT ANSWER IS YES LAC (1 JMP B.2TS /REPEAT ON BAD SYNTAX JMP B.2TB /NO; DELETE IOT FROM SGNBLK LAC P3 /YES; KEEP SKIP AND GO TO NEXT AAC 3 /ENTRY IN TABLE FOR CURRENT DEVICE (BR-049) DAC P3 /BY UPDATING POINTER TO NEXT SKIP JMP B.2T /ITERATE B.2TB LAW -1 /DELETE THIS SKIP TAD* P2 /BY SUBTRACTING FROM # OF SKIPS DAC* P2 /FOR THIS ENTRY LAC P3 /SK:047**SPR:15-E903**AND MOVING REST OF TABLE UP 3 DAC* (10 /AUTOINCREMENT REGISTER 10 AAC 3 /ADD 3 (BR-049) DAC* (11 B.2TB1 LAC* (11 /DONE? IAC /COMPENSATE FOR AUTOINCREMENT (BR-049) SAD ENDSBK /BY LOOKING FOR END OF SGNBLK JMP B.2TB2 /YES; UPDATE NEW END OF TABLE LAC* 11 DAC* 10 JMP B.2TB1 /ITERATE B.2TB2 LAC* (10 /NEW END OF SGNBLK IAC /ADD 1 (BR-049) DAC ENDSBK JMP B.2T /GO TO NEXT SKIP .EJECT / / ASK FOR NEW SKIPS / B.2U JMS QUERY /ASK FOR NEW SKIPS TO BE ADDED .SIXBT 'NEW SKIPS:_<@' /JUST HEADER FOR MULTILINE SEQUENCE B.2U1 CLC /NOT JUST SIMPLE ANSWER JMS MULANS /EX. SKPDC=702103 JMP MULBAD /DO NOT RETYPE FOR ERRORS IN MULTILINE /SEQUENCE JMP B.2S /DEFAULT ADDS NOTHING JMP ALTBAD /$ UNDEFINED JMP B.2U2 /SYMBOL IS ONLY ACCEPTABLE ANSWER JMP NUMBAD /OCTAL # IS ILLEGAL B.2U3 CLC /MAY BE MORE ON LINE JMS MORANS /FETCH NEXT MNEMONIC ON SAME LINE JMP MULBAD /SYNTAX ERROR JMP MULBAD JMP MULBAD JMP B.2U2 /SYMBOL ONLY LEGAL ANSWER JMP NUMBAD /# ILLEGAL B.2U2 JMS DELIM /TEST FOR LEGAL DELIMITER 75 /= SKP /DELIMITER IS = JMP OPBAD /OTHER DELIMITERS ARE SYNTAX ERRORS JMS FSKPM /TEST WHETHER IOT IS NEW JMP B.4H /NEW; OK B.4J JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS USED MNEMONIC<@' B.4H JMS SAVANS /PUT ANSWER AWAY FOR SAFE KEEPING CLC /MAY BE MORE ON LINE JMS MORANS /OR ALT MODE JMP MULBAD /MULTILINE RECOVERY FOR SYNTAX ERRORS JMP CRBAD /NO DEFAULT CASE JMP ALTBAD /$ UNDEFINED JMP SYMBAD /SYMBOL ILLEGAL HERE SMA /# MUST BE 1'S COMPLEMENT IF POSITIVE AAC -1 /SUBTRACT 1 (BR-049) DAC SKPIOT /SAVE AWAY SMA /CHECK IF # IS IOT CMA /NEGATIVE SKIPS MUST BE COMPLEMENTED AND (770011 /MASK OFF INSTRUCTION BITS AND /SKP AND AC CLEAR BITS (BR-43) SAD (700001 /SKIP IOT ? (BR-43) JMP B.4H1 /YES AND (770010 /TEST FOR ILLEGAL IOT (BR-051) SAD (700000 /SKIP IF NOT LEGAL IOT (BR-051) JMP B.4H1A /LEGAL IOT - BAD SKIP (BR-051) JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ILLEGAL IOT<@" /NOT IOT OR CLEAR AC BIT SET (BR-051) SKPIOT 0 /NEW SKIP IOT B.4H1 JMS DELIM /CHECK FOR LEGAL DELIMITER 0 /CARRIAGE RETURN OR ALT MODE JMP B.4I JMS DELIM 54 /COMMA JMP B.4I JMP OPBAD /ILLEGAL DELIMITER B.4I LAC SKPIOT /IS IT OLD SKP? JMS FSKPN JMP B.4I1 /NO; OK JMS RERR /YES; ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS USED SKIP IOT<@' B.4I1 ISZ* P2 /ADD NEW SKIP INTO COUNT FOR /FOR THIS DEVICE LAC ENDSBK /ADD 3 TO SIZE OF SGNBLK AAC 3 /ADD 3 (BR-049) DAC ENDSBK B.4I2 AAC -1 /PUSH EVERYTHING 3 DOWN (BR-049) DAC P1 /UPDATE PUSH POINTERS AAC -3 /3 WORD DIFFERENCE (BR-049) DAC P4 SAD P2 /ARE WE AT THE END? JMP B.4I3 /YES LAC* P4 /PUSH NEXT WORD DOWN DAC* P1 LAC P1 /GET POINTER INTO AC FOR UPDATE JMP B.4I2 /ITERATE B.4I3 LAC P2 /ADD SKIP TO TABLE DAC* (10 /AUTOINCREMENT REGISTER LAC ANSTMP /SKIP MNEMONIC DAC* 10 LAC ANSTMP+1 DAC* 10 LAC SKPIOT /SKIP IOT DAC* 10 LAC P3 /GO TO NEXT SKIP AAC 3 /ADD 3 (BR-049) DAC P3 JMS DELIM /GO TO APPROPRIATE PLACE FOR NEXT 0 /SKIP IOT JMP B.2U1 /READ ANOTHER LINE JMP B.2U3 /KEEP GOING ON SAME LINE / / B.4H1A JMS OUT /SAY BAD SKIP (BR-051) .SIXBT '>NOT A STANDARD SKIP IOT<@' /BIT 17 NOT SET (BR-051) JMS QUERY /ASK IF ACCEPT ANYWAY (BR-051) .SIXBT 'DO YOU WISH IT ACCEPTED<@' JMS NO /NO IS THE DEFAULT (BR-051) JMP B.4H1A /SYNTAX ERROR (BR-051) JMP ALTBAD /ALTMODE BAD ANSWER (BR-051) JMP B.2U1 /DUMP IT (BR-051) JMP B.4H1 /USE IT (BR-051) / / / DELETE DEVICE / B.2P LAC* P2 /COMPUTE # OF WORDS TO BE DELETED RCL /MULTIPLY BY 3 TAD* P2 IAC /AND ADD 1 FOR WORD CONTAINING # OF SKIPS (BR-049) TAD P2 /ADD TO BEGINNING OF SKIP TABLE DAC P4 B.2Q LAC P4 /TEST IF FINISHED SAD ENDSBK JMP B.2R /YES; FINISHED LAC* P4 /MOVE ENTRY UP DAC* P2 ISZ P4 ISZ P2 JMP B.2Q /BUMP TO NEXT ENTRY AND ITERATE B.2R LAC P2 /UPDATE ENDSBK (END OF SGNBLK) DAC ENDSBK /FIRST FREE ADDRESS IN SGNBLK CLA!SKP B.2S LAC (1 /IS THIS LAST SKIP IN SGNBLK TAD P3 /P3 IS COMPENSATED FOR AUTOINCREMENT SAD ENDSBK JMP B.4 /YES; GO TO NEXT SECTION JMP B.2A /NO; ITERATE B.4 LAC CMD /START SEARCH FOR HANDLRLSS DEV AT CMD (BR-055)(GAR-058) JMS FHAN /FIND CMD (BR-055)(GAR-058) JMP BADDEV /FATAL ERROR - IF NO CMD (BR-055) (GAR-058) LOOP JMS NHAN /FIND NEXT HANDLER (BR-055) JMP B.5 /NO MORE HANDLERS - DONE (BR-055) LAC P1 /GET ADDRESS OF FIRST HANDLER LOC (BR-055) DAC P2 /SAVE IN POINTER (BR-055) LAW 17700 /SET UP TEST FOR HANDLERLESS DEV (BR-055) AND* P2 /IS IT A HANDLERLESS DEVICE (BR-055) SZA /SKIP IF A HANDLERLESS DEV (BR-055) JMP LOOP /GET NEXT HANDLER AND TRY AGAIN (BR-055) LAC* P2 /GET SKIP COUNT (BR-055) SZA /SKIP IF NO SKIPS (BR-055) JMP B.4Z1 /IT HAS SKIPS - GO TO NEXT HANDLER (BR-055) LAC P2 /GET POINTER TO FIRST HANDLER ENTRY (BR-055) IAC /POINT TO START OF NEXT HANDLER (BR-055) DAC P4 /SAVE POINTER (BR-055) LOOP1 LAC P4 /GET POINTER TO NEXT ENTRY TO MOVE UP (BR-055) SAD ENDSBK /ARE WE DONE MOVING UP (BR-055) JMP B.4Z /YES - SET UP TO GET NEXT HANDLER (BR-055) LAC* P4 /GET NEXT TABLE ENTRY (BR-055) DAC* P2 /MOVE IT UP ONE (BR-055) ISZ P2 /POINT TO NEXT ENTRY (BR-055) ISZ P4 /POINT TO NEXT SOURCE (BR-055) JMP LOOP1 /MOVE NEXT WORD UP (BR-055) B.4Z LAC ENDSBK /GET END OF SGNBLK POINTER (BR-055) AAC -1 /PUSH IT UP ONE ENTRY (BR-055) DAC ENDSBK /AND SAVE IT (BR-055) B.4Z1 LAC P1 /GET POINTER TO DELETED DEV (BR-0559 AAC -1 /DECREMENT (BR-055) DAC P1 /SAVE - THIS CAUSES SEARCH TO FIND NEXT DEVICE /WHICH HAS BEEN MOVED UP ONE (BR-055) JMP LOOP /GO FIND DEVICE (BR-055) B.5 JMS POTSGK /RECORS SGNBLK IN DUMMY BLOCK (BR-055) .TITLE C. ADD NEW DEVICE / / / C.0 JMS SECTN /ANOUNCE NEW SECTION AND SET ^P ADDRESS .SIXBT 'C. ADD NEW DEVICE<@' LAC (1 JMS YW0 /DEFAULT NO LAC (1 JMP C.0 /REPEAT IF SYNTAX ERROR JMP C.6 /NO; SKIP SECTION JMS BINSGK /YES; BRING IN SGNBLK / / ASK FOR DEVICE CODE FOR NEW HANDLER / C.1 JMS QUERY /ASK QUESTION .SIXBT 'DEVICE CODE[] <@' CLA /REPLY IS SINGLE SYMBOL ENDED BY CAR. RET JMS ANS /OR ALT MODE JMP C.1 /REPEAT QUESTION IF SYNTAX ERROR JMP CRBAD /NO DEFAULT CASE JMP ALTBAD /$ UNDEFINED JMP C.2 /SYMBOL IS ONLY LEGAL REPLY JMP NUMBAD /# IS MEANINGLESS C.2 SAD (2 /MUST BE EXACTLY 2 CHARACTERS JMP C.3 JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T 2 CHAR<@" C.3 LAC ANSWER /PUT DEVICE CODE IN QUESTION TO JMS FDEV /FAKE OUT SECTION B ROUTINES JMP C.5 /AND CHECK WHETHER DEVICE IS NEW JMS RERR /DEVICE SAME AS OLD ONE; ANNOUNCE ERROR .SIXBT "ISN'T NEW DEVICE<@" C.5 LAC ENDSBK /ADD TO END OF SGNBLK TABLE DAC P2 DZM P3 /ZAP P3 TO ALLOW HANDLERLESS DEV. (BR-048) ISZ ENDSBK /PUT IN # OF SKIPS; 0 HANDLERS DZM* P2 JMP B.2M1 /JMP INTO SECTION B CODE C.6 JMS BINSGK /BRING IN SGNBLK TO ANNOUNCE MISSING LAC CMD /(GAR-058) HANDLERS; GO PAST PERMANENT HANDLER JMS FHAN JMP BADDEV /(GAR-058) CMD PSEUDO-DEVICE MUST BE THERE CLC /PRINT HEADING ONCE ONLY IF NEEDED DAC CSW CSW XX /PUTS ITSELF INTO AC C.7 JMS NHAN /GET NEXT HANDLER JMP D.0 /NONE LEFT AND (17700 SNA JMP C.71 LAC* P1 DAC I.2DEL /STORE INTO FILE NAME DAC C.7CK /STORE INTO MESSAGE .FSTAT -14,I.2DEL /CHECK IF ON SYSTEM SZA /THERE JMP C.7 /ITERATE ISZ CSW /CHECK SWITCH JMP C.8 /ALREADY PRINTED HEADIN JMS QUERY /PRINT HEADING .SIXBT 'MISSING HANDLERS:<@' C.8 JMS QUERY /PRINT ERROR LINE C.7CK .SIXBT '@@@.<@' JMP C.7 C.71 LAC P1 AAC -1 /SUBTRACT 1 (BR-049) DAC P1 JMP C.7 .TITLE D. CHANGE SKIP CHAIN / / / D.0 JMS SECTN /ANOUNCE SECTION HEAD AND SET ^P ADDRESS .SIXBT 'D. CHANGE SKIP CHAIN<@' LAC (1 JMS YW0 /DEFAULT NO LAC (1 JMP D.0 /REPEAT ON BAD SYNTAX JMS SUPSEC /NO TAKE DEFAULT ANSWERS AND SUPRESS /QUESTIONS / / DISPLAY SKIP CHAIN? (Y) (TYPE SKIP CHAIN /IN DEFAULT ORDER) THE SKIP CHAIN IS ORDERED IN THIS SECTION. WHILE /IT IS BEING ORDERED THEY CAN OF COURSE BE OUTPUT TO THE TELETYPE. /OLD PERMANENT SKIPS CORRESPONDING TO THE PSEUDO HANDLER NONE ARE /KEPT ONLY IF THEY WERE IN THE OLD SKIP CHAIN. THEY MAY BE ADDED /AT ANY TIME INTO A NEW SKIP CHAIN WITHOUT HAVING TO SPECIFY THEM /FOR A DEVICE. / D.1 JMS QUERY /ASK QUESTION .SIXBT 'DISPLAY SKIP CHAIN<@' LAC (1 JMS YW1 /DEFAULT YES LAC (1 JMP D.1 /REPEAT FOR SYNTAX ERROR JMS SUPSEG /NO; SEGMENT SUPRESSION; SEGMENT /SUPRESSION MEANS THAT AS SOON AS /THE ORDERING OF THE SKIP CHAIN IS /THROUGH ALL FURTHER TELETYPE I/O /WILL BE OUTPUT PROVIDING SECTION /SUPRESSION IS NOT IN FORCE JMS BINSGK /YES; BRING IN SGNBLK LAC SGNSKP /GO THROUGH OLD SKIP CHAIN AND DAC P2 /RETAIN ALL SKIPS FOR UNDELETED DEVICES JMS QUERY /STATE THE FOLLOWING IS A LIST OF SKIPS .SIXBT 'DEFAULT SKIP CHAIN ORDER:<@' D.2 LAC P2 /IS THIS THE LAST ENTRY SAD DEVSBK / JMP D.3 /YES LAC* P2 /PICK UP SKIP JMS FSKPN /FIND IN TABLE JMP D.2D /NOT IN TABLE; DELETE D.2M LAC* P1 /FOUND IT; KEEP IN CHAIN AND PRINT DAC D.2DIS /IN TABLE OF SKIPS ISZ P1 LAC* P1 /PICK UP SECOND HALF OF MNEMONIC DAC D.2DIS+1 ISZ P2 /BUMP PAST SKIP D.2L JMS QUERY /PRINT SKIP MNEMONIC D.2DIS .SIXBT '@@@@@@<@' JMP D.2 /GO BACK FOR MORE D.2D LAC P2 /SET UP LOOP TO MOVE REST OF SGNBLK UP DAC* (10 AAC -1 /SUBTRACT 1 (BR-049) DAC* (11 D.2DL LAC* (10 /FINISHED MOVING? IAC /ADD 1 (BR-049) SAD ENDSBK JMP D.2DF /YES LAC* 10 DAC* 11 /MOVE WORD JMP D.2DL /ITERATE D.2DF AAC -1 /UPDATE DEVICE TABLE END AND BEGINNING (BR-049) DAC ENDSBK /POINTERS LAC DEVSBK AAC -1 /SUBTRACT 1 (BR-049) DAC DEVSBK JMP D.2 /ITERATE .EJECT / / LOOK THROUGH DEVICE TABLE FOR SKIPS NOT YET IN SKIP CHAIN / D.3 LAW -1 /INITIALIZE NSKP TO LOOK THROUGH DAC SKPC /DEVICE TABLE FOR SKIPS NOT IN CHAIN LAC CMD /(GAR-058) YET AND PUT THEM IN LAST; JMS FHAN /SKIP OVER PERMANENT SKIPS JMP BADDEV /(GAR-058) CMD PSEUDO-DEVICE MISSING INDICATES /(GAR-058) SYSTEM PROBLEM D.3N JMS NSKP /FIND NEXT SKIP JMP D.4 /NONE LEFT DAC ANSTMP /TEMPORARILY STORE SKIP IOT LAC SGNSKP /CHECK IF ALREADY IN CHAIN DAC P3 D.3L LAC P3 /HAVE WE EXHAUSTED THE CURRENT LIST SAD DEVSBK /OF SKIPS IN CHAIN JMP D.3S /YES; PUT IN NEW SKIP LAC* P3 /FETCH SKIP SAD ANSTMP /IS THIS SKIP THE SAME? JMP D.3N /YES; IGNORE THIS SKIP ISZ P3 /MOVE DOWN SKIP CHAIN JMP D.3L /ITERATE FOR NEXT SKIP D.3S LAC ENDSBK /MOVE DEVICE TABLE DOWN 1 TO FIT NEW IAC /SKIP IN CHAIN (BR-049) DAC ENDSBK D.3SL AAC -1 /START FROM END (BR-049) DAC P3 /UPDATE POINTERS SAD DEVSBK /FINISHED? JMP D.3SF /YES; PUT IN NEW IOT AAC -1 /SUBTRACT 1 (BR-049) DAC P4 LAC* P4 /MOVE WORD DOWN DAC* P3 /ONE LAC P3 /ITERATE JMP D.3SL D.3SF LAC ANSTMP /PUT IOT IN PLACE DAC* P3 ISZ DEVSBK /INCREMENTEND OF SKIP TABLE POINTER ISZ P1 /INCREMENT PLACE IN DEVICE TABLE LAC P1 /GET MNEMONIC AND PRINT DAC* (10 LAC* P1 /FETCH FIRST WORD DAC D.3DIS LAC* 10 DAC D.3DIS+1 /SECOND WORD JMS QUERY /PRINT MNEMONIC D.3DIS .SIXBT '@@@@@@<@' JMP D.3N .EJECT / /D.4 CHANGE SKIP CHAIN ORDER / D.4 LAC (SKP /REMOVE SEGMENT SUPRESSION DAC IOSEG SAD IOSEC /SECTION SUPRESSION? SKP JMP D.4K /YES; OMIT SECTION JMS CRLF JMS QUERY /ASK USER TO TYPE SKIP CHAIN .SIXBT 'SKIP MNEMONICS IN ORDER:_<@' LAC SGNSKP DAC P2 D.4H CLC /MNEMONICS SEPERATED BY COMMAS JMS MULANS /BY CAR. RET. OR ALT MODE JMP MULBAD /BAD SYNTAX DOES NOT REPEAT SECTION HEAD JMP D.4T /DEFAULT TERMINATES BUILDING OF SKIP CHAIN JMP D.4A /$ MEANS TAKE NEXT SKIP IN DEFAULT ORDER JMP D.4H2 /SYMBOL IS APPROPRIATE JMP NUMBAD /# ILLEGAL AS SKIP MNEMONIC D.4H1 CLC /FETCH NEXT SKIP ON LINE JMS MORANS JMP MULBAD /BAD SYNTAX JMP MULBAD JMP MULBAD JMP D.4H2 /SYMBOL APPROPRIATE JMP NUMBAD /# ILLEGAL D.4H2 JMS DELIM /CHECK DELIMITERS 0 /CARRIAGE RETURN OR ALTMODE JMP D.4H3 JMS DELIM 54 /COMMA JMP D.4H3 JMP OPBAD /ILLEGAL DELIMITER D.4H3 JMS FSKPM /FIND SKIP IN DEVICE TABLE JMP D.4M /IF NOT THERE ANOUNCE ERROR DAC ANSTMP /SAVE JMP D.4N D.4M JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T SKIP MNEMONIC<@" D.4N LAC SGNSKP /HAS SKIP BEEN PUT INTO CHAIN ALREADY DAC P3 D.4NL LAC P3 /ARE WE TO THE NEW SECTION YET SAD P2 JMP D.4NE /NOT IN BUILT CHAIN YET LAC* P3 /EXAMINE THIS SKIP ISZ P3 /BUMP TO NEXT SAD ANSTMP /IS IT THE SAME AS CURRENT ENTRY SKP /YES JMP D.4NL /NO; ITERATE JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS REPEAT<@' D.4NE SAD DEVSBK /IS SKIP IN CHAIN AT ALL? /THE REST OF THE CHAIN IS TENTATIVE /AND REPRESENTS THE DEFAULT FOR /THE $ COMMAND. THE SKIP SPECIFIED /COULD BE A REPEAT OF PERMANENT SKIPS /ELIMINATED FROM THE SKIP CHAIN BY A /PREVIOUS SYSTEM GENERATION; IF SO /THEY WILL BE PUT INTO THE CHAIN AND /THE REST OF SGNBLK MOVED DOWN. JMP D.4NO /NO; PUT INTO SKIP CHAIN LAC* P3 /EXAMINE ENTRY SAD ANSTMP /IS IT THE SAME AS CURRENT ANSWER JMP D.4YES /YES; MOVE INTERVENING DOWN ISZ P3 /NO; MOVE TO NEXT ENTRY LAC P3 JMP D.4NE /ITERATE D.4YES LAC P3 /MOVE EVERYTHING DOWN ONE UP UNTIL /THIS ENTRY AND INSERT THIS ENTRY /NEXT IN CHAIN SAD P2 /HAVE ALL ENTRIES BEEN MOVED JMP D.4Y1 /YES; PUT IN SKIP NOW AAC -1 /SUBTRACT 1 (BR-049) DAC P4 LAC* P4 /MOVE THIS WORD DOWN DAC* P3 LAC P3 /MOVE POINTERS UP ONE AAC -1 /SUBTRACT 1 (BR-049) DAC P3 JMP D.4YES /AND ITERATE D.4Y1 LAC ANSTMP /INSERT SPECIFIED SKIP NOW DAC* P3 D.4HS ISZ P2 /BUMP END OF ESTABLISHED CHAIN ONE JMS DELIM /DISPATCH ON DELIMITER 0 /CARRIAGE RETURN OR ALTMODE JMP D.4H /ITERATE JMP D.4H1 /READ ON SAME LINE D.4NO LAC ENDSBK /MOVE DEVICE TABLE DOWN 1 IAC /IN ORDER TO INSERT PERMANENT SKIP (BR-049) DAC ENDSBK D.4NOL AAC -1 /SUBTRACT 1 (BR-049) DAC P3 SAD DEVSBK /FINISHED? JMP D.4NOE /YES; INSERT SKIP AT AAC -1 /SUBTRACT 1 (BR-049) DAC P4 LAC* P4 /MOVE WORD DOWN DAC* P3 LAC P3 /CHECK FOR COMPLETION JMP D.4NOL /AND ITERATE D.4NOE LAC ANSTMP /PUT SKIP IN AT END OF TABLE AND THEN DAC* P3 /GO THROUGH PROCESS AS IF ALWAYS THERE ISZ DEVSBK /NEW BEGINNING OF DEVICE TABLE JMP D.4N /TRY AGAIN D.4A LAC P2 /ARE THERE ANY MORE SKIPS TO ADD? SAD DEVSBK JMP D.4T /NO; GO ON TO NEW SECTION LAC* P2 /PRINT OUT SKIP MNEMONIC TO JMS FSKPN /DECLARE THE SKIP OBTAINED JMP BADDEV /PROGRAM ERROR OR HARDWARE FAILURE /AS THE SKIP SHOULD BE THERE LAC P1 /FETCH MNEMONIC DAC* (10 LAC* P1 DAC D.4DIS /FIRST WORD LAC* 10 DAC D.4DIS+1 /SECOND WORD JMS OUT D.4DIS .SIXBT '@@@@@@_<@' ISZ P2 /BUMP PAST CURRENT ADDITION TO CHAIN JMP D.4H /GO BACK FOR MORE .EJECT D.4T LAC DEVSBK /TERMINATE BUILDING OF SKIP CHAIN DAC P4 /AND MOVE ANY DELETED ENTRIES OUT LAC P2 /CHANGE BEGINNING OF DEVICE SAD SGNSKP /DO NOT ALTER SKIP CHAIN IF NO JMP D.4K /SKIPS SPECIFIED FOR SKIP CHAIN SAD DEVSBK /TABLE TO REFLECT ANY DELETED SKIPS JMP D.4K /NO DELETED SKIPS DAC DEVSBK D.4TL LAC P4 /MOVE DEVICE TABLE UP TO FILL SAD ENDSBK /IN VACANT ENTRIES JMP D.4TLF /FINISHED LAC* P4 /MOVE WORD UP DAC* P2 ISZ P4 /BUMP POINTERS ISZ P2 JMP D.4TL /ITERATE D.4TLF LAC P2 /NEW END OF SGNBLK DAC ENDSBK D.4K JMS POTSGK /OUTPUT SGNBLK TO DUMMY BLOCK .TITLE E. ALTER SPECIAL DEVICE PARAMETERS / / / E.0 JMS SECTN /ANNOUNCE SECTION HEAD AND SET ^P .SIXBT 'E. ALTER DEVICE PARAMETERS<@' LAC (1 JMS YW0 /DEFAULT NO LAC (1 JMP E.0 /BAD SYNTAX JMS SUPSEC /NO; TAKE DEFAULT ANSWERS JMS BINSGK /YES; BRING IN SGNBLK E.1 LAC LMT /(.SIXBT 'MT' ; DOES SYSTEM HAVE JMS FDEV /MAGNETIC TAPE? JMP E.1B /NO; IGNORE QUESTION AND CLEAR BITS E.1A JMS QUERY /ASK QUESTION .SIXBT '7 CHANNEL MAGTAPE<@' LAC SCOM4 /DEFAULT IS OLD VALUE JMS YW0 /7 CHANNEL IS ASSUMED IF BIT LAC (4000 /6 IS 1 JMP E.1A /REPEAT FOR BAD SYNTAX NOP /NO; ANSWER IS IN AC JMP E.1C /YES; NEW .SCOM+4 CONTENTS IN AC E.1B LAC SCOM4 /CLEAR OUT BIT 6 OF .SCOM+4 AND (773777 E.1C DAC SCOM4 /DEPOSIT NEW VALUE OF .SCOM+4 E.2 LAC LLP /(.SIXBT 'LP' DOES SYSTEM HAVE JMS FDEV /A LINE PRINTER? JMP E.2B /NO; CLEAR OUT BITS FOR LINE PRINTER LAC SCOM4 /OLD VALUE IN .SCOM+4 RTR /BITS 12,13; RIGHT ADJUST INTO AC RTR /BITS 16,17 AND (3 /CLEAN SNA /0 MEANS NO DEFAULT VALUE JMP E.2Q /NO DEFAULT VALUE TAD (LAC LVT /MAKE INSTRUCTION TO FETCH DEFAULT DAC .+1 /MESSAGE XX DAC E.2DEF /PUT DEFAULT MESSAGE INTO REPORT E.2Q JMS QUERY /ASK QUESTION .SIXBT 'LINE PRINTER LINE SIZE(80,120, OR 132)[' E.2DEF .SIXBT '@@@] <@' CLA /ANSWER IS ALONE ON LINE AND TERMINATED JMS ANS /BY A CAR. RET. OR ALT MODE JMP E.2Q /REPEAT ON SYNTAX ERROR JMP E.3 /DEFAULT ACCEPTS OLD ANSWER JMP ALTBAD /$ UNDEFINED NOP /SYMBOL LAC ANSWER+1 /#; MUST BE ONLY 3 OR FEWER CHARACTERS SZA JMP ANBAD /MORE THAN THREE CHARACTERS E.2A LAC ANSWER /CHECK THAT ANSWER IS ONE OF 3 SMA /ALL ANSWERS ARE MINUS JMP ANBAD SAD LS80 /80? LAC (20 /YES; BIT 13 ON ONLY SAD LS120 /120? LAC (40 /YES; BIT 12 ON ONLY SAD LS132 /132? LAC (60 /YES; BITS 12,13 ON SPA JMP ANBAD /NOT ONE OF 3 POSSIBLE ANSWERS SKP E.2B CLA /CLEAR BITS XOR SCOM4 /PUT INTO .SCOM+4 AND (60 XOR SCOM4 /BITS 12,13 DAC SCOM4 E.3 LAC LVT /(.SIXBT 'VT'; DOES SYSTEM HAVE JMS FDEV /A VT SCOPE JMP E.3C /NO; CLEAR BITS .EJECT E.3A JMS QUERY /ASK QUESTION .SIXBT 'VT ON<@' LAC SCOM33 /.SCOM+33 BIT 2 = 1 WHEN YES JMS YW1 /IS GIVEN LAC (100000 JMP E.3A /REPEAT ON BAD SYNTAX NOP /NO; ANSWER IN AC DAC SCOM33 /YES; NEW CONTENTS OF .SCOM+33 IN AC E.3D JMS QUERY /ASK QUESTION .SIXBT 'HALF ON<@' LAC SCOM33 /.SCOM+33 BIT 0=1 WHEN YES JMS YW1 /IS GIVEN LAC (400000 JMP E.3D /REPEAT IF BAD SYNTAX NOP /NO; ANSWER IN AC DAC SCOM33 /YES; ANSWER IN AC (NEW .SCOM+33 JMP E.4 E.3C DZM SCOM33 /ZERO .SCOM+33 IF NO VT E.4 JMS POTSGK /RECORD NEW SGNBLK .TITLE F. ALTER .DAT SLOTS / / / F.0 JMS SECTN /ANNOUNCE SECTION HEAD AND SET ^P .SIXBT 'F. ALTER .DAT SLOTS<@' LAC (1 JMS YW0 /DEFAULT NO LAC (1 JMP F.0 /BAD SYNTAX CAUSES REPEAT JMS SUPSEC /NO; TAKE DEFAULT JMS BINSGK /YES; BRING IN SGNBLK LAC SGNDAT /UPDATE DEFAULT CONTENTS OF .DAT DAC P3 LAC ODATB /REFER TO LIST IN FREE CORE OF OLD NAMES DAC P4 F.0A LAC P3 /GO THROUGH LIST AND GET NEW HANDLER /NUMBERS FOR OLD NAMES SAD SGNUFD /DONE? JMP F.1 /YES LAC* P3 /COMPUTE NEXT HANDLER NUMBER SAD (100000 /DO NOTHING IF PERMANENT SLOT JMP F.0B /PERMANENT SLOT LAC* P4 /GET NAME AND CONVERT JMS FHAN JMP F.0A1 /IF NAME GONE, CHANGE TO NONE XOR* P3 /LEAVE UNIT NUMBERS THE SAME AND (77777 /BY MERGING WITH OLD CONTENTS XOR* P3 SKP F.0A1 CLA /0 IS NONE DAC* P3 /STORE BACK INTO SGNBLK F.0B ISZ P4 /BUMP TO NEXT SLOT ISZ P3 JMP F.0A /ITERATE / / FIND # OF POSITIVE .DAT SLOTS / F.1 JMS QUERY /ASK QUESTION .SIXBT '# OF POSITIVE .DAT SLOTS[<@' LAC NODAT /PRINT OLD # RCR /DIVIDE BY 2 AAC -16 /SUBTRACT NEGATIVE AND 0 (BR-049) DAC ONPDAT /STORE FOR FUTURE JMS NUMSUP /PRINT WITH 0 SUPRESSION JMS OUT /PRINT REMAINDER OF MESSAGE .SIXBT '] <@' CLA /ANSWER IS ALONE AND TERMINATED JMS ANS /BY CAR. RET OR ALT MODE JMP F.1 /REPEAT IF BAD SYNTAX JMP F.2 /IGNORE IF DEFAULT; (SAME) JMP ALTBAD /$ ILLEGAL JMP SYMBAD /SYMBOL ILLEGAL SPA!SNA /# MUST BE POSITIVE AND NOT =0 SKP JMP F.1A /POSITIVE # JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T POSITIVE, NONZERO #<@" F.1A AAC -100 /IS IT TOO LARGE? (BR-049) SPA JMP F.1B /NO JMS RERR /YES; ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T << 100<@" F.1B LAC ONPDAT /DECIDE WHETHER NEW NUMBER IS GREATER TCA /THAN OLD NUMBER BECAUSE TWO DIFFERENT TAD NUMBER /ALGORITHMS ARE NEEDED SNA /CATCH THE CASE WHEN SAME JMP F.2 /IN WHICH CASE DO NOTHING SMA /LARGER? JMP F.1G /YES .EJECT / / .DAT SLOTS ILLIMINATED FROM SYSTEM / TAD SGNUFD /FEWER; COMPUTE NEW SGNUFD DAC P3 /SAVE TAD NUMBER /COMPUTE BEGINNING OF SKIP TABLE AAC 16 /INCLUDING .UFD ENTRIES FOR NEGATIVE (BR-049) /AND 0 SLOTS DAC P4 /SAVE LAC SGNUFD /MOVE REST OF TABLE UP DAC P2 LAC P3 /PUT IN NEW BEGINNING OF UFD TABLE DAC SGNUFD F.1L1 LAC P3 /FINISHED? SAD P4 JMP F.1C /YES LAC* P2 /MOVE ENTRY UP DAC* P3 ISZ P3 /UPDATE TO NEW ENTRY ISZ P2 /OVERLAYING OLD DELETED .DAT SLOTS JMP F.1L1 /ITERATE F.1C LAC SGNSKP /IGNORE DELETED .UFD SLOTS DAC P2 LAC P3 /UPDATE BEGINNING OF SKIP TABLE DAC SGNSKP TAD NOSKP /UPDATE BEGINNING OF DEVICE TABLE DAC DEVSBK F.1L2 LAC P2 /MOVE UP REST OF SGNBLK SAD ENDSBK /END OF TABLE REACHED? JMP F.1D /YES LAC* P2 /MOVE ENTRY DAC* P3 ISZ P3 /BUMP TO NEXT ENTRY ISZ P2 JMP F.1L2 /ITERATE F.1D LAC P3 /UPDATE NEW END OF DEVICE TABLE DAC ENDSBK JMP F.2 /GO TO NEXT PART .EJECT / / .DAT SLOTS ADDED TO SYSTEM / F.1G DAC ANSTMP /SAVE RCL /MULTIPLY BY 2 DAC ANSTMP+1 /SAVE TAD ENDSBK /COMPUTE NEW END OF DEVICE TABLE DAC P4 /SAVE F.1L3 LAC ENDSBK /LAST ENTRY MOVED? SAD SGNSKP JMP F.1H /YES AAC -1 /SUBTRACT 1 (BR-049) DAC ENDSBK /NEXT ENTRY IN SKIP OR DEVICE TABLE TAD ANSTMP+1 /BUMP TO NEW LOCATION DAC P3 LAC* ENDSBK /MOVE ENTRY DAC* P3 JMP F.1L3 /ITERATE F.1H TAD ANSTMP /COMPUTE NEW BEGINNING OF SKIP TABLE DAC P3 /START OF NEW PART OF .UFD SLOTS TAD ANSTMP DAC P5 /NEW BEGINNING OF SKIP TABLE F.1L4 LAC ENDSBK /MOVE .UFD TABLE DOWN SAD SGNUFD /FINISHED? JMP F.1I /YES AAC -1 /UPDATE TO NEXT ENTRY (BR-049) DAC ENDSBK TAD ANSTMP DAC DEVSBK LAC* ENDSBK /MOVE .UFD ENTRY DOWN DAC* DEVSBK JMP F.1L4 /ITERATE F.1I TAD ANSTMP /UPDATE NEW START OF .UFD TABLE DAC SGNUFD F.1L5 LAC ENDSBK /CHECK FOR LAST ADDED SLOT SAD SGNUFD /THIS IS NOT LAST+1 JMP F.1L6 /THIS IS LAST +1; END OF LOOP DZM* ENDSBK /ASSIGN 'NONE' TO ADDED SLOT ISZ ENDSBK /BUMP TO NEXT SLOT JMP F.1L5 /ITERATE UNTIL DONE F.1L6 LAC P3 /IS THIS THE LAST ADDED .UFD ENTRY SAD P5 /NO JMP F.1I2 /YES; TERMINATE PROCESS LAC LUIC /(.SIXBT 'UIC' DAC* P3 /SET UP .UFD ENTRY ISZ P3 /BUMP TO NEXT SLOT JMP F.1L6 /ITERATE F.1I2 DAC SGNSKP /NEW BEGINNING OF SKIP TABLE TAD NOSKP /AND DEVICE TABLE START DAC DEVSBK /AND LAC P4 DAC ENDSBK /END .EJECT / / DISPLAY .DAT SLOTS? (Y) / F.2 JMS QUERY /ASK QUESTION .SIXBT 'DISPLAY .DAT SLOTS<@' LAC (1 JMS YW1 /DEFAULT YES LAC (1 JMP F.2 /BAD SYNTAX JMP F.3 /NO DOES NOTHING LAW -15 /YES; START WITH .DAT -15 DAC NUMBER LAC SGNDAT /POINTER TO CORRESPONDING .DAT SLOT DAC P2 /CONTENTS IN SGNBLK LAC SGNUFD /CORRESPONDING .UFD SLOT DAC P3 JMS OUT /PRINT HEADING .SIXBT '_>.DAT>DEVICE>UIC_<@' F.2L JMS OUT /TAB .SIXBT '><@' LAC NUMBER /PRINT .DAT SLOT NUMBER JMS SOCT /AS A SIGNED OCTAL NUMBER LAC NUMBER /CHECK IF IT IS SPECIAL CASE SAD (-7 /.DAT -7 JMP F.2M7 /YES SAD (-3 JMP F.2M3 /.DAT-3 SAD (-2 /.DAT-2? JMP F.2M3 LAC* P2 /PRINT DEVICE HANDLER SNA /SPECIAL CODE FOR NONE JMP F.2M4 AND (77777 JMS FIONM /GET NAME FROM NUMBER IN AC JMP BADDEV /MISSING INDICATES BAD DISK DAC F.2OUT /STORE TEMPORARILY LAC* P2 RTR /COMPUTE UNIT # RAR /GET INTO PLACE AND (070000 /CLEAN SNA /SPECIAL CODE FOR UNIT 0 JMP F.2M5 XOR L0R /COMBINE WITH REST OF MESSAGE F.2C DAC F.2OUT+1 LAC* P3 /PUT IN UIC DAC F.2OUT+2 JMS OUT .SIXBT '>' /TAB F.2OUT .SIXBT '@@@@@@@@@_<@' F.2B ISZ P2 /BUMP TO NEW SLOT ISZ P3 ISZ NUMBER SKP /NOT .DAT 0 JMP F.2B /IGNORE .DAT 0 LAC P2 /END SAD SGNUFD JMP F.3 /YES JMP F.2L /NO; ITERATE F.2M7 LAC LDKL /(.SIXBT 'DKL' F.2M2 DAC F.2OUT /STICK INTO MESSAGE F.2M5 LAC LR /(.SIXBT '>' JMP F.2C F.2M3 LAC LTTA /(.SIXBT 'TTA' JMP F.2M2 F.2M4 LAC LNONE /PRINT 'NONE' FOR NONE DAC F.2OUT LAC LET /(.SIXBT 'E>' JMP F.2C LET .SIXBT 'E>' LR .SIXBT '>' .EJECT / / F.3 ALTER .DAT SLOTS: / F.3 JMS QUERY /MAKE STATEMENT .SIXBT 'NEW ASSIGNMENTS:_<@' F.3A CLC /MORE ON LINE MAYBE JMS MULANS /MULTILINE ANSWER HANDLER JMP EXAM /BAD SYNTAX YIELDS EXAMPLE JMP F.4 /DEFAULT GOES ON JMP ALTBAD /$ UNDEFINED SKP /SYMBOL ONLY LEGAL ANSWER JMP F.3A1 /# BAD LAC ANSWER /CHECK FOR COMMAND .SIXBT 'A' SAD (10000 JMP F.3B /YES; GOOD SO FAR F.3A1 JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT /ISN'T 'A'<@/ F.3B JMS DELIM /DELIMITER MUST BE SPACE 40 JMP F.3C /GOOD JMP OPBAD /BAD OPERATOR F.3W JMS DELIM / 76 JMP F.3Y /YES JMP OPBAD F.3V CLC /MAY BE MORE ON LINE JMS MORANS /FETCH SOME MORE JMP EXAM JMP EXAM JMP EXAM JMP F.3Z /SYMBOL F.3AF AAC 15 /#; ADD MAXIMUM NEGATIVE (BR-049) DAC P3 SMA /MUST BE POSITIVE OR ILLEGAL .DAT SLOT JMP F.3AA BSN JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS BAD SLOT #<@' F.3AA TAD SGNDAT /COMPUTE TRANSFER VECTOR TO SGNBLK WORD DAC P2 LAC SGNUFD /COMPUTE TRANSFER VECTOR TO UFD WORD TAD P3 DAC P3 TCA /COMPUTE WHETHER TOO LARGE TAD SGNSKP SPA!SNA JMP BSN /ILLEGAL .DAT SLOT SKPDEV NOP /SKIP IF DEVICE SPECIFIED JMP SKPUIC /DEVICE NOT SPECIFIED LAC* P2 /IS SLOT MODIFIABLE SAD (100000 SKP /NO JMP F.3AC /YES JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T MODIFIABLE SLOT<@" F.3AC LAC ANSTMP /PUT INTO .DAT SLOT DAC* P2 SKPUIC NOP /SKIP IF UIC SPECIFIED JMP F.3AB /NOT SPECIFIED LAC ANSTMP+1 /PUT INTO .UFD SLOT DAC* P3 F.3AB JMS DELIM /CHECK DELIMITER 0 /CARRIAGE RETURN JMP F.3A /GO BACK TO BEGINNING JMS DELIM 54 /, COMMA READ ANOTHER SLOT JMP F.3Y JMS DELIM 57 / '/' READ ANOTHER DEVICE OR UIC JMP F.3C JMP OPBAD /BAD OPERATOR F.3Y CLC /MORE ON LINE JMS MORANS /FETCH ANOTHER SYLLABLE JMP EXAM JMP EXAM JMP EXAM JMP SYMBAD JMP F.3AF /# IS ONLY LEGAL SYNTAX HERE EXAM JMS OUT /TYPE EXAMPLE .SIXBT '_>@>EX:_>@>@>>A DK<> 7,10/TTA 4<@' JMP MULBAD F.4 JMS POTSGK /PUT OUT SGNBLK LAC DELPT1 /CLEAR TABLE OF CHANGED SYS FILES DAC CGEND .TITLE G. CHANGE SYS FILES / / / G.0 JMS SECTN /ANNOUNCE NEW SECTION AND SET ^P .SIXBT 'G. CHANGE SYS FILES<@' JMS RESTOR /RESTORE PREVIOUS STATE OF BITMAPS LAC (1 /ON A ^P JMS YW0 /DEFAULT NO LAC (1 JMP G.0 /REPEAT ON SYNTAX ERROR JMP H.0 /GO TO NEXT SECTION ON NO JMS BINSBK /YES; BRING IN SYSBLK / / NUMBER OF BLOCKS IN ^Q AREA / G.1 LAC QBLK+1 /# OF BLOCKS IN OLD ^Q AREA DAC P6 SZA!CLL /TEST IF THERE IS A ^Q AREA JMP G.1B /^Q AREA PRESENT LAC LNONE /(.SIXBT 'NONE' DAC G.1D LAC LNONE+1 DAC G.1D+1 JMP G.1A G.1B RTR /DIVIDE BY 16 RTR AAC -4 /IS ^Q AREA IN LEGAL RANGE (BR-049) SPA JMP BADDEV /NO; MUST BE BAD DEVICE AAC -41 /SUBTRACT 5 (BR-049) SMA JMP BADDEV /NO; MUST BE BAD DEVICE LAC QBLK+1 /GET # OF BLOCKS IN OLD Q AREA (BR-054) CLL /SET UP SHIFT (BR-054) ALS 10 /CONVERT # BLOCKS INTO # OF WORDS (BR-054) JMS MAKEK /MAKE DECIMAL SIXBT (BR-054) DAC G.1D /STORE IN QUESTION (BR-054) LAC LKSPC /GET 'K] ' AND STORE IN QUESTION (BR-054) DAC G.1D+1 /IN CASE OF RESTART (^P) (BR-054) G.1A JMS QUERY /ASK QUESTION .SIXBT '^Q AREA SIZE(NONE,NNNK)[' /(BR-054) G.1D .SIXBT '@@@K] <@' /TO BE FILLED IN ABOVE (BR-054) G.1C CLA /ALONE ON LINE JMS ANS /ANSWER TERMINATED BY CAR. RET. OR /ALT MODE JMP G.1A /BAD SYNTAX REPEAT JMP G.2 /DEFAULT MEANS LEAVE SAME JMP ALTBAD /$ UNDEFINED SKP /SYMBOL 'NNNK' ONLY GOOD NEW REPLY (BR-054) JMP KBAD /OCTAL # NO GOOD (BR-054) LAC ANSWER /GET FIRST 3 CHAR (BR-054) SAD LNONE /IS IT 'NON' (BR-054) SKP /SKIP IF 'NON' - POSSIBLE 'NONE' (BR-054) JMP G.1E /NOT 'NON'-TRY NNNK (BR-054) LAC ANSWER+1 /TEST FOR 'E ' (BR-054) SAD LNONE1 /SKIP IF NOT 'E ' (BR-054) SKP!CLA /SKIP AND CLEAR AC IF 'NONE' (BR-054) G.1E JMS KTOOCT /CONVERT ANSWER,ANSWER+1 TO OCTAL K (BR-054) SZA /SKIP IF NO QAREA (BR-054) JMP G.1I /NON-ZERO=QAREA (BR-054) DZM QBLK+1 /ZERO BLOCKS IN QAREA (BR-054) DZM QSZE /ZERO MEMORY TO BE DUMPED (BR-054) JMP G.1F /DEALLOCATE IF NEEDED (BR-054) G.1I CLL /SET UP MULTIPLY (BR-054) RTL /CONVERT K TO BLOCKS (BR-054) SAD QBLK+1 /SAME AS OLD ENTRY? (BR-054) JMP G.2 /YES - DO NOTHING (BR-054) DAC QBLK+1 /NO - UPDATE NR OF BLOCKS (BR-054) CLL /SET UP SHIFT (BR-054) ALS 10 /MAKE INTO WORD COUNT (BR-054) AAC -5 /WORDS 0-4 NOT DUMPED (BR-054) DAC QSZE /SAVE IN WORD COUNT (BR-054) G.1F LAC P6 /DEALLOCATE OLD ^Q AREA SZA /UNLESS IT IS NONEXISTENT JMS DEALOC LAC QBLK LAC QBLK+1 /ALLOCATE NEW ^Q AREA SNA /ONLY IF THERE IS ONE JMP G.1H JMS ALLOC JMP DSKFUL /ERROR; DISK FULL G.1H DAC QBLK /STORE INTO ^Q AREA FIRST BLOCK JMP G.2 /PROCEEED ON DSKFUL JMS OUT DSKFL2 .SIXBT '>@>(NO DISK SPACE)<@' JMP* CNTLP /GO TO ^P ADDRESS .EJECT / / TO BE KEPT: / G.2 JMS QUERY /MAKE STATEMENT .SIXBT 'TO BE KEPT:_<@' LAC COMBK1 /BEGIN AT TOP OF COMBLK AND WORK DOWN SKP /JMP INTO MIDDLE OF LOOP G.2A LAC P3 /GO TO ANOTHER ENTRY DAC P2 SAD (ENDCOM /FINISHED WITH COMBLK JMP G.END /YES DAC* (17 TAD* P2 /SET UP FOR NEXT ENTRY NOW DAC P3 /SAVE LAC* P2 /SAVE # OF WORDS IN ENTRY DAC G.2TP LAC* 17 /PUT NAME OF ENTRY IN DISPLAY WORDS DAC G.2DP LAC* 17 DAC G.2DP+1 G.2B JMS QUERY /MAKE QUESTION G.2DP .SIXBT '@@@@@@<@' JMS ALTMOD /DEFAULT $ JMP G.2B /BAD SYNTAX JMP G.2A /$ MEANS KEEP ALL SAME JMP G.2D /NO; DELETE EVERYTHING G.2G LAC* 17 /YES; GET NEXT OVERLAY DAC G.2DS /PUT INTO DISPLAY AND (770000 /IS IT OVERLAY NAME OR DEFAULT BUFFS SNA JMP G.3 /DEFAULT BUFFS COMMAND TERMINATES /OVERLAY NAEMS LAC* 17 /PICK UP SECOND HALF OF NAME DAC G.2DS+1 G.2F JMS QUERY /ASK QUESTION ABOUT OVERLAY G.2DS .SIXBT '@@@@@@<@' LAC (1 JMS YW1 /DEFAULT YES LAC (1 JMP G.2F /REPEAT ON SYNTAX ERROR SKP /NO JMP G.2G /YES; MOVE TO NEXT OVERLAY LAC* (17 /MOVE PRECEEDING PART OF COMBLK DOWN G.2H DAC P4 AAC -2 /2 WORDS DOWN (BR-049) DAC P5 IAC /ADD 1 (BR-0499 SAD COMBK1 /FINISHED JMP G.2I /YES LAC* P5 /MOVE WORD DAC* P4 /DOWN LAW -1 TAD P4 /MOVE TO PREVIOUS ENTRY JMP G.2H /ITERATE G.2I AAC 2 /NEW BEGINNING OF COMBLK (BR-049) DAC COMBK1 ISZ P2 ISZ P2 LAW -2 TAD* P2 DAC* P2 /MODIFY # OF WORDS IN CURRENT COMBLK ENTRY JMS DELSYS /DELETE UNNEEDED SYS FILES FROM SYSTEM JMP G.2G /ITERATE .EJECT / / DELETE PROGRAM FROM COMBLK / G.2D LAC P2 /MOVE ALL PREVIOUS ENTRIES DOWN SAD COMBK1 /FINISHED MOVE JMP G.2ER /CAN'T REMOVE XVM/DOS G.2C SAD COMBK1 /REAL LOOP TERMINATION TEST JMP G.2J /YES; FINISHED MOVE AAC -1 /SUBTRACT 1 (BR-049) DAC P5 TAD G.2TP /# OF WORDS IN ENTRY DAC P4 LAC* P5 DAC* P4 /MOVE NEXT WORD LAC P5 /ITERATE JMP G.2C G.2J LAC P4 /UPDATE BEGINNING OF COMBLK DAC COMBK1 JMS DELSYS /DELETE UNEEDED SYS FILES JMP G.2A /ITERATE G.2ER JMS OUT /CAN'T DELETE XVM/DOS .SIXBT "_>@>(DOS15 CAN'T BE DELETED)<@" JMP* BADSYN G.2TP 0 /# OF WORDS IN CURRENT COMBLK ENTRY .EJECT / / OVERLAY NAME / G.3 JMS QUERY /ASK QUESTION .SIXBT 'OVERLAY NAME[] <@' CLA /ONE SYLABLE ENDING IN CAR. RET OR JMS ANS /ALTMODE JMP G.3 /BAD SYNTAX JMP G.4 /DEFAULT MEANS GO ON JMP ALTBAD /$ UNDEFINED SNA /SYMBOL JMP NUMBAD /# BAD JMS MATCH /MUST BE UNIQUE JMS SAVANS /SAVE ANSWER TEMPORARILY LAC (ANSWER /SEE IF ALREADY IN SYSBLK JMS FSYSK SKP /NOT IN SYSBLK YET JMP G.3A /ALREADY IN SYSBLK LAC ENDSYS /PUT IN NEW ENTRY INTO SYSBLK AAC -1 /SUBTRACT 1 (BR-049) DAC* (15 AAC 10 /ADD 10 (BR-049) DAC ENDSYS /NEW END OF SYSBLK JMS SYSOVF /IS THIS TOO MUCH TO ADD LAC ANSTMP /PUT IN NEW NAME DAC* 15 LAC ANSTMP+1 DAC* 15 .EJECT / / NUMBER OF BLOCKS / G.3B JMS QUERY /ASK QUESTION .SIXBT '# OF BLOCKS[] <@' CLA /SINGLE SYLABLE ENDING IN CAR. RET. JMS ANS /OR ALT MODE JMP G.3B /REPEAT IF SYNTAX ERROR JMP CRBAD /NO DEFAULT ANSWER JMP ALTBAD /$ UNDEFINED JMP SYMBAD /SYMBOL ILLEGAL SPA!SNA /# MUST BE POSITIVE AND NONZERO JMP ANBAD JMS ALLOC /ALLOCATE DISK SPACE SKP /NO ROOM JMP G.3C /ROOM AVAILABLE G.3BS JMS OUTP /NO DISK SPACE LAC (DSKFL2 JMP* BADSYN /BAD SYNTAX G.3C DAC* 15 /FB LAC NUMBER /NB DAC* 15 .EJECT / / PUT INTO COMBLK BY MOVEING TOP UP / G.3A LAC COMBK1 /INITIALIZE LOOP AAC -2 /SUBTRACT 2 (BR-049) DAC COMBK1 /UPDATE BEGINNING OF COMBLK AAC -1 /SUBTRACT 1 (BR-049) DAC* (14 AAC 2 /ADD 2 (BR-049) DAC* (13 JMS SYSOVF /CHECK FOR OVERFLOW OF COMBLK G.3E LAC* (13 /FINISHED? IAC /ADD 1 (BR-049) SAD* (17 JMP G.3D /YES LAC* 13 DAC* 14 /MOVE WORD JMP G.3E G.3D LAC ANSTMP /PUT NAME IN COMBLK DAC* 14 LAC ANSTMP+1 DAC* 14 LAW -2 /BEGINNING OF ENTRY HAS CHANGED TAD P2 DAC P2 LAC* P2 /ADD 2 TO ENTRY SIZE AAC 2 /ADD 2 (BR-049) DAC* P2 JMP G.3 /ASK FOR MORE .EJECT / / BUFFS[XX] / G.4 JMS QUERY /ASK QUESTION .SIXBT 'BUFFS[<@' LAC G.2DS /OLD # BY DEFAULT JMS NUMSUP /PRINT DEFAULT JMS OUT /FINISH QUESTION .SIXBT '] <@' CLA /SINGLE SYLABLE ANSWER ENDING IN JMS ANS /CAR. RET. OR ALT MODE JMP G.4 /BAD SYNTAX JMP G.5 /DEFAULT MEANS CONTINUE JMP ALTBAD /$ UNDEFINED JMP SYMBAD /SYNBOL MEANINGLESS AND (770000 /# MUST NOT BE TOO LARGE SZA JMP NUMBIG /TOO BIG LAC* (17 /COMPUTE POSITION TO PUT BUFFS # AAC -1 /SUBTRACT 1 (BR-049) DAC* (14 LAC NUMBER DAC* 14 /PUT IN NEW BUFFS COMMAND # .EJECT / / .DAT SLOTS FOR CUSP / G.5 LAC* (17 /FETCH NEXT .DAT SLOT IAC /COMPENSATE FOR AUTOINCREMENT (BR-049) SAD P3 /EXHAUSTED? JMP G.6 /YES; ACCEPT NEW SLOTS LAC* 17 /GET NEXT .DAT SLOT DAC P7 /SAVE SAD (-1 /ALL? JMP G.5E /YES AND (400 SZA 777000 XOR P7 DAC P7 JMS LEGAL /LEGAL .DAT SLOT? JMP G.5B /NO; DELETE SLOT AUTOMATICALLY G.5A JMS QUERY /ASK QUESTION .SIXBT '.DAT SLOT <@' LAC P7 /PRINT SLOT IN OCTAL WITH 0 SUPRESSION JMS SOCT /WITH - SIGN IF NEGATIVE LAC (1 JMS YW1 /DEFAULT YES LAC (1 JMP G.5A /BAD SYNTAX JMP G.5B /NO JMP G.5 /YES; FETCH NEXT SLOT G.5B LAC* (17 /DELETE SLOT BE MOVING TABLE DOWN G.5C DAC P4 SAD COMBK1 /END? JMP G.5D /YES AAC -1 /COMPUTE POINTERS TO NEXT WORD (BR-049) DAC P5 LAC* P5 /MOVE WORD DAC* P4 LAW -1 TAD P4 JMP G.5C /ITERATE G.5D ISZ COMBK1 /ONE LESS WORD IN COMBLK ISZ P2 /AND ENTRY LAW -1 TAD* P2 DAC* P2 JMP G.5 /ITERATE G.5E JMS QUERY /SPECIAL QUERY FOR ALL POSITIVE .SIXBT 'ALL + .DAT SLOTS<@' JMS YES /DEFAULT YES JMP G.5E /SYNTAX ERROR JMP ALTBAD /$ UNDEFINED JMP G.5B /NO JMP G.5 /YES / / .DAT SLOTS: / G.6 JMS QUERY /ASK QUESTION .SIXBT '.DAT SLOTS:_<@' G.6F CLC /.DAT SLOT NUMBERS SEPERATED BY COMMA, JMS MULANS /CAR. RET. OR ALT MODE JMP MULBAD /MULTILINE ERROR RECOVERY JMP G.2A /DEFAULT MEANS GO ON JMP ALTBAD /$ UNDEFINED JMP G.6A /SYMBOL G.6F2 JMS LEGAL /# MUST BE LEGAL .DAT SLOT JMP G.6B /NOT LEGAL SLOT LAC NUMBER /CLIP OF TOP HALF AND (777 DAC NUMBER JMP G.6C /LEGAL SLOT G.6B JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T LEGAL<@" G.6F1 CLC /FETCH NEXT SLOT ON LINE JMS MORANS JMP MULBAD /BAD SYNTAX JMP MULBAD JMP MULBAD JMP G.6A /SYMBOL JMP G.6F2 /# .EJECT G.6C JMS DELIM /CHECK DELIMITERS 0 /CARRIAGE RETURN OR ALTMODE JMP G.6C1 JMS DELIM 54 /COMMA JMP G.6C1 JMP OPBAD /ILLEGAL DELIMITER G.6C1 LAC COMBK1 /PUT INTO COMBLK AAC -1 /BY MOVING FIRST PART UP 1 (BR-049) DAC COMBK1 /UPDATE FIRST WORD POINTER DAC* (13 AAC -1 /SUBTRACT 1 (BR-049) DAC* (14 JMS SYSOVF /ERROR IF NO ROOM LEFT IN COMBLK G.6D LAC* (13 /DONE? SAD* (17 JMP G.6E /YES LAC* 13 /MOVE WORD UP DAC* 14 JMP G.6D /ITERATE G.6E LAC NUMBER /PUT IN .DAT SLOT DAC* 14 /STORE IN COMBLK LAW -1 /INCREMENT # OF WORDS IN CURRENT ENTRY TAD P2 DAC P2 ISZ* P2 JMS DELIM 0 /CARRIAGE RETURN OR ALT MODE JMP G.6F /ITERATE AND READ IN ANOTHER LINE JMP G.6F1 /CONTINUE READING ON SAME LINE G.6A SAD (3 /CHECK FOR ALL + SKP JMP SYMBAD /NOT 3 CHARACTERS LAC ANSWER SAD LALL /(.SIXBT 'ALL' SKP!CLC /YES JMP SYMBAD DAC NUMBER JMP G.6C G.END JMS POTSBK /SAVE SYSBLK .TITLE H. ADD SYSTEM PROGRAMS / / / H.0 JMS SECTN /ANNOUNCE SECTION QUESTION AND SET ^P .SIXBT 'H. ADD SYS PROG<@' JMS RESTOR /RESTORE PREVIOUS STATE OF BITMAPS LAC (1 /ON A ^P JMS YW0 /DEFAULT NO LAC (1 JMP H.0 /BAD SYNTAX JMP I.0 /NO; CLEAN UP AND EXIT JMS BINSBK /YES; BRING IN SYSBLK / / PROGRAM NAME / H.1 JMS QUERY /ASK QUESTION .SIXBT 'PROG NAME[] <@' CLA /SINGLE SYLLABLE ENDING IN CAR. RET. JMS ANS /OR ALT MODE JMP H.1 /BAD SYNTAX JMP CRBAD /NO DEFAULT JMP ALTBAD /$ UNDEFINED JMP H.1A /SYMBOL ONLY LEGAL ANSWER JMP NUMBAD /# ILLEGAL H.1A SNA /MUST HAVE AT LEAST ONE CHARACTER JMP ANBAD JMS MATCH /TEST TO MAKE SURE NO CONFLICTS JMS SAVANS /WITH OTHER NAMES IN SYSTEM LAC (ANSWER /SEE IF IN COMBLK JMS FCOMK JMP H.1B /NOT IN COMBLK JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS USED NAME<@' .EJECT H.1B LAC (ANSWER /IN SYSBLK? JMS FSYSK JMP H.1C /NO JMP H.1D /YES H.1C LAC ENDSYS /PUT IN NEW SYSBLK ENTRY AAC -1 /SUBTRACT 1 (BR-049) DAC* (15 AAC 10 /ADD 10 (BR-049) DAC ENDSYS /NEW END OF SYSBLK JMS SYSOVF /CHECK FOR SYSBLK OVERFLOW LAC ANSTMP /PUT IN NAME DAC* 15 LAC ANSTMP+1 DAC* 15 .EJECT / / ASK FOR # OF BLOCKS / H.1E JMS QUERY /ASK QUESTION .SIXBT '# OF BLOCKS[] <@' CLA /SINGLE SYLLABLE ENDING IN CAR. RET. JMS ANS /OR ALT MODE JMP H.1E /BAD SYNTAX JMP CRBAD /NO DEFAULT JMP ALTBAD /$ UNDEFINED JMP SYMBAD /SYMBOL ILLEGAL SPA!SNA /# MUST BE POSITIVE AND NONZERO JMP ANBAD JMS ALLOC /ALLOCATE STORAGE JMP G.3BS /NO ROOM DAC* 15 LAC NUMBER /PUT IN # OF BLOCKS DAC* 15 H.1D LAC COMBK1 /PUT INTO COMBLK AAC -4 /SUBTRACT 4 (BR-049) DAC COMBK1 AAC -1 /SUBTRACT 1 (BR-049) DAC* (14 AAC 4 /ADD 4 (BR-049) DAC* (13 JMS SYSOVF /CHECK FOR OVERFLOW H.1F LAC* (13 /IS THIS LAST ENTRY? IAC /ADD 1 (BR-049) SAD (ENDCOM JMP H.1G /YES LAC* 13 /MOVE COMBLK UP DAC* 14 /WORD JMP H.1F /ITERATE H.1G DAC P3 /FOR SECTION G ROUTINE AAC -1 /SUBTRACT 1 (BR-049) DAC* (17 LAC (4 /ENTRY SIZE DAC* 14 LAC* (14 DAC P2 LAC ANSTMP DAC* 14 /PUT IN NAME LAC ANSTMP+1 DAC* 14 DZM* 14 /0 DEFAULT BUFFS COMMAND DZM G.2DS /FOR SECTION G ROUTINE DEFAULT BUFFS JMP G.3 /FETCH OVERLAYS BY RENTERING SECTION G .TITLE CLEANUP AND TERMINATION / / / I.0 DZM CNTLP /IGNORE ^P -3&777 /IGNORE ^C 1 200000 0 JMS OUT /ANNOUNCE SECTION IS CLEANUP AND /THAT CONTROL CHARACTERS ARE ILLEGAL .SIXBT '_>@>MODIFYING SYSTEM(^P,^C IGNORED)_<@' I.1 LAC SATABP /NEW SAT INTO PLACE DAC BPTR LAC NOSATB /# OF SAT BLOCKS TCA DAC DECT1 LAC BTABP DAC P1 LAC (NOP DAC I.1A I.1B LAC* P1 /OUTPUT NEXT SAT BLOCK JMS TRANIN LAC (SAT LAC* BPTR JMS TRANOT LAC (SAT ISZ P1 /BUMP TO NEXT SAT BLOCK ISZ BPTR ISZ DECT1 /DONE? JMP I.1B /NO; ITERATE I.1A NOP /SWITCH GETS SET TO JMP I.1C LAC (JMP I.1C /DON'T DO THIS TWICE DAC I.1A LAW -3 /3 SYSTEM BLOCKS DAC DECT1 LAC (SYSBL1 DAC BPTR LAC (SYSBL2 DAC P1 JMP I.1B /JMP INTO REUSED ROUTINE I.1C CLC /SET ONCE ONLY TYPING OF DELETED DAC CSW /HANDLERS HEADING IF NEEDED LAC ODATE /POINTER TO BEGINNING OF LIST DAC P2 /OF DELETED HANDLERS I.10 LAC P2 /FINISHED? SAD DELPT1 JMP I.12 /YES LAC* P2 /PICK UP HANDLER NAME ISZ P2 /INCREMENT TO NEXT NAME DAC I.2DEL /STICK INTO FILE NAME DAC I.10CK /AND MESSAGE .FSTAT -14,I.2DEL SNA JMP I.10 /DO NOT DELETE IF NOT THERE ISZ CSW /PRINT HEADING? JMP I.11 /ALREADY HAVE JMS QUERY /HEADING .SIXBT 'DELETED HANDLERS:<@' I.11 JMS QUERY /PRINT HANDLER DELETED I.10CK .SIXBT '@@@.<@' .DLETE -14,I.2DEL JMP I.10 /ITERATE I.2DEL .SIXBT '@@@.@@BIN' I.12 JMS OUT /ANOUNCE SGEN COMPLETE .SIXBT '_>@>SGEN COMPLETE_<@' JMP ENDGEN .TITLE TELETYPE OUTPUT ROUTINE / / ENTRY POINTS OUT AND OUTP /THE FOLLOWING ILLUSTRATES THE USES OF THIS ROUTINE / JMS OUT /MESSAG .SIXBT '_>HOW ARE YOU<@' /THIS PRINTS THE TEXT STRING HOW ARE YOU AND STOPS RETURNING /CONTROL TO THE POINT AFTER THE MESSAGE. THE FOLLOWING ROUTINE /ILLUSTRATES THE USE OF OUTP ENTRY: / JMS OUTP / LAC (MESSAG / /RETURN HERE ON COMPLETION /BOTH THESE ROUTINES PERFORM EXACTLY THE SAME FUNCTION. THE /CHARACTERS '_','>', AND '<' WHEN NOT DOUBLED ARE INTERPRETED /AS CARRIAGE RETURN, TAB (HORIZONTAL), AND END OF MESSAGE. THE /END OF MESSAGE CHARACTER MUST BE FOLLOWED BY AN @ SIGN. IF THEY /APPEAR DOUBLED THEY WILL BE PRINTED ONCE AND THE SECOND ONE /IGNORED. QUADRUPLED WILL PRINT TWICE ETC. / OUTP XX XCT* OUTP /FETCH TRANFER VECTOR TO MESSAGE DAC OUT /STORE IN OUT FOR MESSAGE PRINTING LAC (JMP* OUTP /FETCH EXIT INSTRUCTION JMP OUT1 /JUMP INTO OUT ROUTINE KLCNT 0 TVCNT 0 LASCR 0 /PREVIOUS CHARACTER WHICH IS WAITING TO BE OUTPUT KLCNTB 0 OUT 0 /POINTS TO FIRST WORD OF MESSAGE LAC (JMP* OUT /FETCH RETURN INSTRUCTION OUT1 DAC OUTEX /STORE AWAY RETURN INSTRUCTION DZM LASCR /PREVIOUS CHARACTER AT FIRST IS NULL LAW -1 /SET UP FOR BEGINNING DAC KLCNT DZM KLPUT /.INIT BUFFER JMS OUTLIN MSNXTC ISZ KLCNT /IS THIS THE FIRST CHARACTER JMP KLFSXT /NO LAC* OUT /YES; FETCH NEW WORD ISZ OUT /BUMP POINTER DAC TVCNT /STORE LAW -3 /3 CHAR. PER WORD DAC KLCNT KLFSXT LAC TVCNT /FETCH OUTPUT RTL /6 LEFT RTL RTL DAC TVCNT /STORE FOR NEXT CHAR RAL /GET LINK INTO AC 17 AND (77 /CLEAN DAC KLCNTB /SAVE AND (40 SNA!STL /IS CHAR. IN NEED OF 100? CLL LAC KLCNTB SNL!SZA!CLL XOR (100 /YES DAC KLCNTB /STORE AWAY TEMPORARILY SAD LASCR /IS THIS THE SAME AS THE LAST CHARACTER? STL /YES; LINK IS 0 FROM ABOVE LAC LASCR /PRINT LAST CHARACTER SNL JMP KLFS1 /NOT ONE OF THE SPECIAL CHARACTERS SAD (137 /CHECK IF SPECIAL CHARACTER DZM KLCNTB /YES; PRINT ONCE AND STOP SAD (76 /> DZM KLCNTB SAD (74 /< DZM KLCNTB JMP KLFS3 /OMIT CHECKING FOR SPECIAL CHARACTERS KLFS1 SAD (137 /_ MEANS CAR. RET. LF JMP MSCRLF SAD (74 /< MEANS END OF MESSAGE JMP MPEND SAD (76 /> MEANS TAB LAC (11 KLFS3 SZA /@ MEANS IGNORE JMS KLPUT /PUT IN OUTPUT BUFFER KLFS2 LAC KLCNTB /PUT NEW CHARACTER INTO LAST CHARACTER DAC LASCR JMP MSNXTC /GET ANOTHER CHARACTER MSCRLF JMS OUTLIN /OUTPUT LINE JMS CRLF /GIVE A CAR.RET.LF JMP KLFS2 /START NEW LINE MPEND JMS OUTLIN /OUTPUT LINE IF NECESSARY OUTEX XX /EXIT INSTRUCTION COMPUTED .EJECT / /IOPS ASCII PACKING ROUTINE / KLPUTP 0 KL57 0 KLCHR2 0 KLLIT JMP KLJ57 KLPUT 0 AND (177 /CLEAN OFF DAC KLCHR2 /SAVE CLL LAC KL57 /GET CHARACTER POSITION TAD KLLIT /COMPUTE JMP DAC .+2 LAC KLCHR2 XX /MODIFIED JMP KLJ57 JMP KL571 /CHAR1 JMP KL572 /CHAR2 JMP KL573 /CHAR3 JMP KL574 /CHAR4 JMP KL575 /CHAR5 KL571 RTR /8 RIGHT RTR RTR RTR KL571A DZM* KLPUTP /CLEAR WORD JMP KLND57 KL572 RTL /4 LEFT RTL JMP KLND57 .EJECT KL573 RTR /FIRST 4 CHAR RAR AND (17 /CLEAN OFF XOR* KLPUTP DAC* KLPUTP ISZ KLPUTP /LAST WORD OF PAIR LAC KLCHR2 /2ND HALF RTR /4 RIGHT RTR AND (700000 JMP KL571A KL574 RTL /8 LEFT RTL RTL RTL JMP KLND57 KL575 RAL DZM KL57 /START WITH NEW WORD PAIR SKP KLND57 ISZ KL57 /BUMP CHAR. POINTER XOR* KLPUTP DAC* KLPUTP LAC KL57 SNA ISZ KLPUTP /2ND WORD COMPLETE JMP* KLPUT .EJECT / /OUTPUT A LINE IF NECESSARY / OUTLIN 0 LAC KLPUT /HAS ANYTHING BEEN PACKED SNA JMP OUTL /NO EXIT LAC (175 /PACK FINAL ALT MODE JMS KLPUT DZM KLPUT /CLEAR PACKING FLAG JMS IOSUP /IS I/O SUPRESSION ON JMP OUTL /YES DO NOT OUTPUT CAL 2775 /.WRITE -3 IOPS ASCII 11 TYOBFP TYOBUF /BUFFER ADDRESS -46 .WAIT -3 /WAIT FOR COMPLETION OUTL LAC TYOBFP /SET UP BUF POINTERS AAC 2 /ADD 2 (BR-049) DAC KLPUTP DZM KL57 JMP* OUTLIN .EJECT / /PRINT AC IN OCTAL WITH 0 SUPRESSION / NUMSUP 0 DZM SUP ISZ SUP JMS SUPOCT JMP* NUMSUP SUPOCT 0 DAC SUPO1 /SAVE AC LAW -6 /6 DIGITS DAC SUPO2 TYPE61 LAC SUPO1 /UNSAVE # RTL /ROTATE 3 LEFT RAL DAC SUPO1 /STORE FOR NEXT TRY RAL /GET FROM LINK AND (7 /CLEAN SNA JMP .+3 DZM SUP /FIRST NON-ZERO DIGIT SKP SAD SUP /SUPRESSION ON? JMP TYPE62 /NO LAW -1 /YES, LAST 0? SAD SUPO2 SKP!CLA /YES PRINT JMP .+3 /NO OMIT TYPE62 XOR (60 JMS KLPUT /PACK ISZ SUPO2 JMP TYPE61 JMS OUTLIN /OUTPUT NUMBER JMP* SUPOCT SUP 1 SUPO1 0 SUPO2 0 .EJECT / /PRINT AC WITHOUT 0 SUPPRESSION / NUMOUT 0 DZM SUP JMS SUPOCT JMP* NUMOUT / /PRINT AC AS SIGNED NUMBER WITH 0 SUPPRESSION / SOCT 0 SMA JMP SOCT1 TCA /FORM TWO'S COMPLEMENT DAC SUPOCT /STORE TEMPORARILY LAW 55 JMS KLPUT /STORE MINUS INTO OUTPUT BUFFER LAC SUPOCT /UNSAVE NUMBER SOCT1 JMS NUMSUP /PRINT NUMBER WITH ZERO SUPRESSION JMP* SOCT /EXIT .TITLE TABLE SEARCH ROUTINES / / / FIND PROGRAM NAME IN COMBLK / AC CONTAINS ADDRESS OF NAME / JMS FCOMK / JMP NOT IN COMBLK / JMP THERE /ADDRESS IN AC & P1 / FCOMTP 0 /FIRST HALF OF NAME POINTER FCOMT1 0 /SECOND HALF OF NAME POINTER FCOMK 0 DAC FCOMTP /FIRST HALF POINTER DAC FCOMT1 /SECOND HALF POINTER ISZ FCOMT1 LAC COMBK1 FCOM1 DAC P1 /NEXT ENTRY SAD (ENDCOM /END? JMP* FCOMK /YES; UNSUCCESSFUL EXIT 1 DAC* (10 LAC* 10 /FIRST HALF OF NAME SAD* FCOMTP /MATCH? SKP /YES JMP FCOM2 /NO LAC* 10 /SECOND HALF SAD* FCOMT1 /MATCH? JMP FCOM3 /YES; HIT FCOM2 LAC P1 /ITERATE FOR NEXT ENTRY TAD* P1 JMP FCOM1 FCOM3 ISZ FCOMK /BUMP TO SUCCESSFUL RETURN LAC P1 /ADDRESS IN AC JMP* FCOMK COMBK1 XX /ADDRESS OF FIRST ENTRY IN COMBLK .EJECT / / FIND PROGRAM NAME IN SYSBLK / AC CONTAINS ADDRESS OF NAME / JMS FSYSK / FIRST RETURN /MISSING FROM SYSBLK / SECOND RETURN /AC CONTAINS ADDRESS OF ENTRY AND SO DOES / /P6 / P6 0 /POINTER TO ENTRY IN SYSBLK FSYSP1 0 /FIRST HALF OF NAME POINTER FSYSP2 0 /SECOND HALF OF NAME POINTER FSYSK 0 DAC FSYSP1 /FIRST WORD POINTER DAC FSYSP2 ISZ FSYSP2 /SECOND WORD POINTER LAC (SYSBLK+1 /START AT BEGINNING FSYS1 DAC P6 /POINTS TO ENTRY SAD ENDSYS /END? JMP* FSYSK /YES; UNSUCCESSFUL EXIT DAC* (11 LAC* P6 /FIRST HALF NAME SAD* FSYSP1 /MATCH? SKP /YES JMP FSYS2 /MISS LAC* 11 /SECOND HALF SAD* FSYSP2 /MATCH? JMP FSYS3 /SCORE FSYS2 LAC P6 /NEXT ENTRY AAC 7 /7 WORD ENTRIES (BR-049) JMP FSYS1 /ITERATE FSYS3 ISZ FSYSK /BUMP TO SUCCESSFUL EXIT LAC P6 /AC CONTAINS ADDRESS OF ENTRY JMP* FSYSK ENDSYS XX /POINTER TO FIRST FREE WORD IN SYSBLK .EJECT / / SUBROUTINE TO SEARCH SYSBLK FOR FILES WHICH DO NOT EXIST /IN COMBLK AND DELETE THEM FROM THE SYSTEM. / JMS DELSYS / /RETURN / DLTMP1 0 /FIRST HALF OF NAME BEING CONSIDERED DLTMP2 0 /SECOND HALF OF NAME BEING CONSIDERED DLTMP3 0 /FIRST BLOCK OF SYS FILE BEING CONSIDERED DLTMP4 0 /# OF BLOCKS OF SYS FILE BEING CONSIDERED P11 0 /POINTER TO COMBLK ENTRY P10 0 /POINTER TO SYSBLK ENTRY DELSYS 0 LAC (SYSBLK+26 /SKIP OVER PERMANENT ENTRIES DL1 DAC P10 /NEXT ENTRY IN SYSBLK SAD ENDSYS /END OF SYSBLK? JMP* DELSYS /YES; EXIT DAC* (16 LAC* P10 /PUT NAME INTO NEW REGISTERS DAC DLTMP1 LAC* 16 DAC DLTMP2 LAC* 16 /FB DAC DLTMP3 LAC* 16 /NB DAC DLTMP4 LAC COMBK1 DL2 DAC P11 /SEARCH COMBLK NEXT ENTRY SAD (ENDCOM /FINISHED? JMP DL3 /YES; DELETE ENTRY FROM SYSBLK DAC* (15 DL6 LAC* 15 SAD DLTMP1 /MATCH FIRST WORD JMP DL4 /YES AND (770000 /NO; IS IT BUFFS COMMAND SNA JMP DL5 /YES; GO TO NEXT ENTRY LAC* 15 /IGNORE SECOND WORD JMP DL6 /ITERATE DL4 LAC* 15 /DOES SECOND WORD MATCH? SAD DLTMP2 JMP DL7 /MATCH; ENTRY IS GOOD JMP DL6 /NO; ITERATE DL5 LAC P11 /GO TO NEXT ENTRY IN COMBLK TAD* P11 JMP DL2 DL3 LAC P10 /DELETE SYS FILE FROM SYSBLK AAC -1 /SUBTRACT 1 (BR-049) DAC* (15 AAC 7 /ADD 7 (BR-049) DAC* (14 DL8 LAC* (14 /FINISHED IAC /ADD 1 (BR-049) SAD ENDSYS JMP DL9 /YES LAC* 14 /MOVE WORD DAC* 15 JMP DL8 /ITERATE DL9 AAC -7 /UPDATE END OF SYSBLK POINTER (BR-049) DAC ENDSYS LAC DLTMP4 /DELETE FILE FROM SAT JMS DEALOC LAC DLTMP3 /FB LAC P10 JMP DL1 DL7 LAC P10 /GO TO NEXT SYS FILE AAC 7 /ADD 7 (BR-049) JMP DL1 .EJECT / / ROUTINE TO CHECK FOR OVERFLOW OF SYSBLK-COMBLK / JMS SYSOVF / /RETURN / SYSOVF 0 LAC ENDSYS TCA TAD COMBK1 SMA JMP* SYSOVF JMS OUT .SIXBT '>@>(SYSBLK OVERFLOW)<@' JMP* CNTLP /GO TO ^P ADDRESS .EJECT / / GET HANDLER NAME FROM HANDLER NUMBER / LAC NO /PUT NUMBER IN AC / JMS FIONM /FETCH NAME / JMP TOO BIG /NUMBER IS TOO BIG / JMP NAME /NAME IS IN AC / FIONM 0 DAC HANNO /STORE CMA DAC HANNAM LAW -1 TAD DEVSBK DAC P1 FIO1 JMS NHAN /GET NEXT HANDLER JMP* FIONM /RUN OUT OF HANDLERS ISZ HANNAM /COUNT? JMP FIO1 /NO; NEXT ISZ FIONM /YES; THIS IS IT JMP* FIONM /EXIT WITH NAME IN AC / / FIND DEVICE IN DEVICE TABLE / LAC DEVICE CODE (S .SIXBT CHARACTERS LEFT JUSTIFIED / JMS FDEV / JMP NEW /NOT IN TABLE / JMP OLD /IN TABLE / FDEV 0 DAC B.2B /DEVICE QUESTION LAW -1 /SET UP NHAN TAD DEVSBK DAC P1 FDL JMS NHAN /GET NEXT HANDLER JMP* FDEV /NONE LEFT AND (777700 /EXTRACT DEVICE CODE SZA /SKIP IF HANDLERLESS (BR-048) JMP FDL1 /NOT HANDLERLESS (BR-048) LAW -1 /FAKE OUT P1 SO THAN NHAN WILL WORK (BR-048) TAD P1 /MAKE IT POINT 1 BACK (BR-048) DAC P1 /SAVE IT (BR-048) JMP FDL /AND GO TO NEXT (BR-048) FDL1 SAD B.2B /SAME? (BR-048) SKP /YES; SCORE JMP FDL /NO ITERATE ISZ FDEV /BUMP FOR SUCCESSFUL EXIT JMP* FDEV /EXIT .EJECT / / ROUTINE TO CHECK PROGRAM NAMES IN ANSWER AND ANSWER+1 /FOR MATCHES TO MONITOR OR PATCH COMMANDS / JMS MATCH / /RETURN IF NO MATCH / P7 0 /POINTER TO SYSTEM COMMAND TABLE ENTRY MATCH 0 LAC (FULCMD /MONITOR COMMAND TABLE DAC P7 MAT1 LAC* P7 /NEXT COMMAND SNA JMP MAT2 /FIRST 0 MEANS END OF ABREVIATIONS AND (770000 /MATCH FIRST LETTER SAD ANSWER JMP MATAB /YES LAC* P7 /MATCH WHOLE ISZ P7 /BUMP BEFORE TEST SAD ANSWER JMP MAT3 /YES; TRY FOR MORE JMP MAT4 /NO MAT3 LAC* P7 /SECOND WORD SAD ANSWER+1 JMP MATM /MATCH MAT4 ISZ P7 ISZ P7 /BUMP TO NEXT COMMAND JMP MAT1 /ITERATE MATAB JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS ABREV. FOR MONITOR COMMAND<@' MATM JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT 'IS MONITOR COMMAND<@' MAT2 ISZ P7 /END OF ABREVIATIONS MAT6 LAC P7 /NEXT ENTRY SAD (PATCOM /END? JMP MAT5 /END OF OTHER MONITOR COMMANDS LAC* P7 /DOES FIRST WORD MATCH ISZ P7 /INCREMENT BEFORE TEST SAD ANSWER JMP MAT7 /YES JMP MAT8 /NO MAT7 LAC* P7 /SECOND WORD? SAD ANSWER+1 JMP MATM MAT8 ISZ P7 JMP MAT6 /ITERATE MAT5 LAC P7 /PATCH COMMANDS SAD (PATND /FINISHED? JMP* MATCH /YES; NO MATCH LAC* P7 /FIRST WORD ISZ P7 /INCREMENT BEFORE TEST SAD ANSWER JMP MAT9 /YES JMP MAT10 MAT9 LAC* P7 SAD ANSWER+1 JMP MATP /MATCH MAT10 ISZ P7 JMP MAT5 /ITERATE MATP JMS RERR /ANNOUNCE ERROR .SIXBT 'IS PATCH COMMAND<@' .TITLE SYSTEM COMMAND TABLES / / MONITOR COMMAND TABLE / FULCMD .SIXBT 'LOG@' 0 .SIXBT 'LOGW@' 0 .SIXBT 'SCOM@' 0 .SIXBT 'INSTRUCT@' .SIXBT 'REQUEST@' .SIXBT 'ASSIGN@' .SIXBT 'PROTECT@' .SIXBT 'KEEP@' 0 .SIXBT 'DATE@' 0 .SIXBT 'TIME@' 0 .SIXBT 'QDUMP@' 0 .SIXBT 'HALT@' 0 .SIXBT 'GET@' 0 .SIXBT 'LOGIN@' 0 .SIXBT 'GETP@' 0 .SIXBT 'GETT@' 0 .SIXBT 'GETS@' 0 .SIXBT 'PUT@' 0 .SIXBT 'LOGOUT@' .SIXBT 'MICLOG@' .SIXBT 'HALF@' 0 .SIXBT 'VT@@' 0 .SIXBT 'LP@@' 0 .SIXBT 'TAB@' /(BR-051) 0 .SIXBT 'API@' 0 .SIXBT 'BATCH@' 0 .SIXBT 'BANK@' 0 .SIXBT 'PAGE@' 0 .SIXBT 'MODE@' /(BR-051) 0 .SIXBT 'POLLER@' /(BR-051) .SIXBT 'XVM@' /(BR-051) 0 .SIXBT 'FILL@' /(BR-051) 0 .SIXBT 'MEMSIZ@' /(BR-051) .SIXBT 'UC15@' /(BR-051) 0 .EJECT .SIXBT 'BUFFS@' 0 .SIXBT 'CHANNEL@' .SIXBT 'TIMEST@' .SIXBT 'EXECUT@' 0 /END OF ONE LETTER COMMANDS / / FOLLOWING COMMANDS TAKE UP T2 WORDS APIECE / .SIXBT 'FOCAL@' .SIXBT 'LOAD@' .SIXBT 'GLOAD@' .SIXBT 'DDT@' .SIXBT 'DDTNS@' .SIXBT 'USER@' .SIXBT 'ERRORS' .EJECT / / LIST OF PERMANENT PATCH COMMANDS (2 WORD APIECE) / PATCOM .SIXBT 'B' 0 .SIXBT 'B+' 0 .SIXBT 'B-' 0 .SIXBT 'L' 0 .SIXBT 'LR' 0 .SIXBT 'READ' .SIXBT 'READR' .SIXBT 'EXIT' .SIXBT 'FB' 0 .SIXBT 'NB' 0 .SIXBT 'FA' 0 .SIXBT 'PS' 0 .SIXBT 'SA' 0 PATND=. /END OF PATCH COMMAND TABLE .EJECT /FIND HANDLER IN AC / JMS FHAN / NOT IN TABLE RETURN / IN TABLE RETURN / HANNO CONTAINS HANDLER # / P1 POINTS TO ENTRY / DEVSBK 0 /FIRST ENTRY IN DEVICE TABLE ENDSBK 0 /FIRST FREE ENTRY WORD IN SBNBLK HANNO 0 HANNAM 0 FHAN 0 DAC HANNAM /SAVE HANDLER NAME LAC DEVSBK /SET UP NHAN AAC -1 /SUBTRACT 1 (BR-049) DAC P1 DZM HANNO FHAN1 JMS NHAN /GET NEXT HANDLER JMP* FHAN /END REACHED - NOT THERE SAD HANNAM /IS THIS THE ONE JMP FHEXIT /YES AND (777700 /IS THIS A HANDLER LESS DEVICE? (BR-060) SZA /SKIP IF HANDLERLESS (BR-060) JMP FHAN2 /REAL HANDLER - TRY AGAIN (BR-060) LAC P1 /GET CURRENT ITEM POINTER (BR-060) AAC -1 /AND BACK IT UP ONE (BR-060) DAC P1 /AND SAVE IT (BR-060) SKP /DON'T INCREMENT HANO. (BR-060) FHAN2 ISZ HANNO /INCREMENT HANDLER NR. (BR-060) JMP FHAN1 FHEXIT ISZ FHAN /BUMP RETURN LAC HANNO /PUT # IN AC JMP* FHAN /EXIT P1 0 /GET NEXT HANDLER NHAN 0 /GO TO NEXT REG. DZM SKPFLG /ZAP SET OF SKIPS COUNTER (BR-048) NHAN2 ISZ P1 /GO TO NEXT REG. LAC P1 SAD ENDSBK /END? JMP* NHAN /YES LAC* P1 /BEGINNING OF SKIPS AND (777700 SNA JMP NHAN1 /YES LAC* P1 /NO EXIT ISZ NHAN JMP* NHAN NHAN1 LAC SKPFLG /GET NUMBER OF SKIP SET COUNTER (BR-048) SZA /SKIP IF THIS IS THE FIRST SET (BR-048) JMP NHAN3 /SECOND SET-HANDLERLESS DEVICE (BR-048) ISZ SKPFLG /FIRST SET - SET ONCE ONLY SWITCH (BR-048) LAC* P1 /MUL. BY 3 RCL TAD* P1 TAD P1 /SKIP OVER SKIPS DAC P1 JMP NHAN2 NHAN3 ISZ NHAN /POINT TO NORMAL EXIT (BR-048) JMP* NHAN SKPFLG 0 /COUNTER FOR SETS OF SKIPS IN A ROW (BR-048) .EJECT / /FIND SKIP IN TABLE COR. TO SYMBOL IN ANSWER /AND ANSWER +1 / JMS FSKPM / MISSING RETURN / FOUND RETURN (WITH IOT IN AC) / SKPC 0 FSKPM 0 JMS INSKP /SET UP NSKP ROUTINE FSKP1 JMS NSKP /GET NEXT SKIP JMP* FSKPM /END OF TABLE - MISSING LAC* P1 /DOES IT COMPARE SAD ANSWER SKP JMP FSKP1 /NO LAC P1 DAC* (16 LAC* 16 SAD ANSWER+1 SKP /YES JMP FSKP1 /NO ISZ FSKPM /BUMP EXIT LAC* 16 /PUT IOT IN AC JMP* FSKPM / /INITIALIZE NSKP / INSKP 0 LAW -3 TAD DEVSBK DAC P1 LAW -1 DAC SKPC JMP* INSKP .EJECT / / FIND SKIP FROM IOT / JMS FSKPN WITH IOT IN AC / NOT IN TABLE RETURN (WITH IOT IN AC / AND P1 POINTING TO MNEMONIC) / FSKPN 0 DAC FSKPM JMS INSKP /INITIALIZE SKIP SEARCH FSKPN1 JMS NSKP /FIND NEXT SKIP JMP* FSKPN /LAST ENTRY - NOT HERE SAD FSKPM /IS ENTRY EQUAL TO IOT SKP /YES JMP FSKPN1 /NO - ITERATE ISZ FSKPN /BUMP POINTER JMP* FSKPN / /FIND NEXT SKIP IN TABLE / JMS NSKP / END OF TABLE RETURN / SUCCESSFUL RETURN / (RETURNS WITH IOT IN AC AND P1 / POINTING TO ENTRY FOUND) / NSKP 0 LAC P1 /GO TO NEXT POSSIBLE ENTRY AAC 3 /ADD 3 (BR-049) DAC P1 NSKP4 ISZ SKPC /ARE THERE ANY MORE SKIPS /FOR THIS DEVICE JMP NSKP1 /YES NSKP3 LAC P1 /NO; HAVE WE REACHED END OF SAD ENDSBK /TABLE JMP* NSKP /YES EXIT LAW 17700 /IS THIS ENTRY A HANDLER NAME? AND* P1 SNA JMP NSKP2 /NO ISZ P1 /YES; GO PAST JMP NSKP3 /TRY AGAIN NSKP2 LAC* P1 /GET # OF SKIPS CMA /NEGATE AND SUBTRACT 1 DAC SKPC /STORE COUNTER ISZ P1 /GO PAST # TO FIRST SKIP ENTRY JMP NSKP4 NSKP1 LAC P1 /FOUND SKIP - GET IOT (3RD WORD) IAC /ADD 1 (BR-049) DAC* (16 LAC* 16 ISZ NSKP /BUMP EXIT JMP* NSKP .TITLE DISK I/O ROUTINES / / ALL DISK I/O IN SGEN GOES TO .DAT -14 AND CONSISTS OF /.TRANS. A TRAN OUT ALWAYS IS READ CHECKED BY THE HANDLER. /EACH .TRAN IS FROM OR TO THE 256 WORD BLOCK NUMBER IN THE AC. THE /FOLLOWING ARGUMENT (TO JMS TRANIN OR JMS TRANOT) IS AN /INSTRUCTION TO LOAD THE FIRST ADDRESS OF THE CORE AREA INVOLVED /INTO THE AC. / CALLING SEQUENCE: / LAC BLKNO /LOAD BLOCK # / JMS TRANIN /OR JMS TRANOT / LAC (FIRST /FIRST CORE LOCATION / /RETURN / TRANIN 0 DAC BLKIN /STORE AWAY BLOCK 3 IN MACRO XCT* TRANIN /PICK UP THE FIRST CORE LOCATION DAC FRADIN /STORE AWAY IN .TRAN MACRO -14&777+10000 /.INIT TO READ CHECK 1 0 0 -14&777 /.TRAN IN 13 BLKIN XX /BLOCK # FRADIN XX /FIRST CORE ADDRESS NWDIN -400 /256 WORDS .WAIT -14 JMP* TRANIN /EXIT TRANOT 0 DAC BLKOT /STORE AWAY BLOCK # IN MACRO XCT* TRANOT /PICK UP FIRST CORE ADDRESS DAC FRADOT -14&777+11000 /.INIT TO WRITE CHECK 1 0 0 -14&777+1000 /TRAN OUT -14 13 BLKOT XX /BLOCK # FRADOT XX /FIRST ADDRESS NWDOT -400 /256 WORDS .WAIT -14 JMP* TRANOT .TITLE BLOCK ALLOCATION ROUTINES / / / IMPORTANT VARIABLES / BMASK 0 /ALL 0'S EXCEPT A 1 WHERE BLOCK IS IN BITMAP SATWP 0 /POINTER TO WORD IN SAT IN CORE NBLOCK 0 /CORRESPONDING BLOCK NUMBER SATBLP 0 /BLOCK # OF SAT IN CORE SATMOD 0 /0 IF SAT IN CORE NOT MODIFIED NOBPSB 0 /# OF BLOCKS REPRESENTED IN EACH SAT BLOCK CNOBPS 0 /-# OF BLOCKS REPRESENTED IN EACH SAT BLOCK NOBSYS 0 /# OF BLOCKS IN SYSTEM ALNB 0 /# OF BLOCKS TO BE ALLOCATED ALCT2 0 /-# OF BLOCKS TO BE ALLOCATED ALFB 0 /FIRST BLOCK OF ALLOCATED AREA ALCT1 0 /-# OF FREE BLOCKS MORE NEEDED / / LAC NB /AC NUMBER OF BLOCKS / JMS ALLOC /TO BE ALLOCATED / JMP NORUM /NO ROOM FOR IMAGE / DAC FB /AC CONTAINS FIRST BLOCK # / ALLOC XX DAC ALNB /SAVE NB TCA /COMPUTE -# DAC ALCT1 /SAVE DAC ALCT2 CLA JMS FINDB /FIND FIRST BLOCK JMP* ALLOC /NO ROOM JMP ALLOC2 ALLOC1 JMS FNB /FIND NEXT BLOCK JMP* ALLOC /NO ROOM ALLOC2 SNA /FREE? JMP ALLOC3 /YES LAC ALCT2 /TAKEN; START ALL OVER DAC ALCT1 JMP ALLOC1 ALLOC3 ISZ ALCT1 /IS THIS THE LAST JMP ALLOC1 /NO LAC NBLOCK /COMPUTE FIRST BLOCK TAD ALCT2 IAC /ADD 1 (BR-049) DAC ALFB /SAVE LAC ALNB /ALLOCATE THE STORAGE JMS XORSAT SNA /ALLOCATE LAC ALFB /FIRST BLOCK ALLOC4 ISZ ALLOC /BUMP RETURN JMP* ALLOC /FIRST BLOCK IN AC .EJECT / / LAC NB /AC CONTAINS NUMBER OF BLOCK TO BE / JMS DEALOC /DEALLOCATED / LAC FB /FIRST BLOCK / /RETURN / DEFB XX /FIRST BLOCK TO BE DEALOCATED DENB XX /NUMBER OF BLOCKS TO BE DEALLOCATED DEALOC 0 DAC DENB /SAVE XCT* DEALOC /PICK UP TEST DAC DEFB LAC DENB /FLIP BITS IN MAP JMS XORSAT SZA /SHOULD BE CLEARED LAC DEFB JMP* DEALOC / / ROUTINE TO RESTORE TEMPORARY SAT TO CONDITION WHEN SECTION /BEGAN. / JMS RESTOR / / A TABLE IS BUILT IN FREE CORE BEGINNING AT THE ADDRESS STORED /IN DELPT1 CORRESPONDING TO ADDED OR DELETED SYS FILES. /EACH ENTRY CONSISTS OF 2 WORDS. THE SECOND ENTRY WORD CONTAINS /THE FIRST BLOCK OF THE FILE AND THE FIRST ENTRY CONTAINS THE NUMBER /OF BLOCKS IN THE FILE. CGEND POINTS TO THE FIRST FREE WORD IN THE /TABLE. RESTOR XX LAC DELPT1 /FIRST ENTRY POINTER DAC P5 REST1 SAD CGEND /END? JMP REST2 /YES LAC* P5 /DELETE NEXT ISZ P5 /BUMP JMS XORSAT /XOR BITS SKP /IGNORE TEST LAC* P5 /FIRST BLOCK ISZ P5 LAC P5 /ITERATE JMP REST1 REST2 LAC DELPT1 /CLEAR LIST DAC CGEND JMP* RESTOR /EXIT .EJECT / / ROUTINE TO XOR BIT IN SAT / LAC NB /PUT NUMBER OF BLOCKS IN AC / JMS XORSAT /CALL XORSAT / XX /TEST INSTRUCTION WHICH SKIPS / /WHEN STATE OF BIT IS CORRECT / /SKP WHEN DON'T CARE / /SNA WHEN ALLOCATING / /SZA WHEN DEALLOCATING XORCT XX /-# OF BLOCKS TO BE ALLOCATED OR /DEALOCATED FB1 XX /FIRST BLOCK TO BE ALLOCATED OR /DEALLOCATED NB1 XX /# OF BLOCKS TO BE ALLOCATED OR /DEALLOCATED XORSAT XX DAC NB1 /SAVE TCA /COMPUTE -NB DAC XORCT LAC* XORSAT /PICK UP TEST INSTRUCTION ISZ XORSAT /BUMP TO NEXT ARGUMENT DAC XORIN LAC* XORSAT /PICK UP INSTRUCTION DAC .+1 XX /PICK UP FIRST BLOCK DAC FB1 /FIRST BLOCK SAVE LAC (SKP /IF PUTTING THINGS BACK DON'T MESS SAD XORIN /WITH TABLE OF CHANGES JMP XORS1 LAC NB1 /ADD TO TABLE JMS DACFRE CGEND LAC FB1 JMS DACFRE CGEND XORS1 LAC FB1 /FIND FIRST BLOCK JMS FINDB JMP MAPER /NON-EXISTENT JMP XORS3 /JMP INTO MIDDLE OF ALGORTHM XORS2 JMS FNB /FIND NEXT BLOCK JMP MAPER /NON-EXISTENT XORS3 JMS XORB /XOR BIT FOR BLOCK XORIN XX /TEST IF BIT MAP CORRECT JMP MAPER /ERROR ISZ XORCT /DONE? JMP XORS2 /NO; ITERATE JMS WBWN /WRITE OUT BLOCK IF MODIFIED JMP* XORSAT /EXIT MAPER JMS TERMER /TERMINAL ERROR; BIT MAP CONTAMINATED .SIXBT 'BAD SAT<@' .EJECT / / FIND NEXT BLOCK ALGORTHM / JMS FNB / /RETURN / /RETURN SUCCESSFUL WITH AC / /CONTAINING BIT FROM MAP / FNB 0 ISZ NBLOCK /BUMP BLOCK COUNT LAC NBLOCK JMS FINDB /FIND BLOCK JMP* FNB /NON-EXISTENT ISZ FNB /BUMP TO SUCCESSFUL JMP* FNB /EXIT .EJECT / / FIND BLOCK IN AC / LAC BLOCKNO / JMS FINDB / /RETURN NON-EXISTENT BLOCK / /RETURN AC CONTAINS SAT BIT BCTR XX /COUNTER WPTR XX /WORD IN SAT STARTING FROM 0 BPTR XX /# OF SAT BLOCK STARTING FROM 0 FINDB XX DAC NBLOCK DZM BPTR TCA /TEST FOR LEGAL BLOCK # TAD NOBSYS /# OF BLOCKS IN SYSTEM SPA!SNA /BLOCK # TOO HIGH? JMP* FINDB LAC NBLOCK ISZ FINDB /BUMP TO SUCCESSFUL EXIT FIN1 TAD CNOBPS /COMPUTE BIT MAP SPA JMP FIN2 /FOUND ISZ BPTR /NEXT BIT MAP JMP FIN1 /ITERATE FIN2 TAD NOBPSB /FIND WORD DZM WPTR /FIRST WORD FIN3 AAC -22 /18 BITS PER WORD (BR-049) SPA JMP FIN4 ISZ WPTR JMP FIN3 /ITERATE FIN4 DAC BCTR /CALCULATE MASK OF BIT IN SAT CLA!STL RAL ISZ BCTR JMP .-2 DAC BMASK /STORE MASK LAC (SAT+3 TAD WPTR DAC SATWP /POINTER TO WORD FOR BLOCK IN QUESTION LAC BTABP TAD BPTR SAD SATBLP /BLOCK ALREADY IN CORE JMP FIN5 /YES JMS WBWN /WRITE OUT OLD BLOCK IF CHANGES LAC BTABP /CALCULATE BLOCK POINTER FOR RIGHT /SAT BLOCK IN DUMMY TABLE TAD BPTR DAC SATBLP LAC* SATBLP /BRING IN BLOCK JMS TRANIN LAC (SAT FIN5 LAC* SATWP /EXIT WITH WORD IN AC AND BMASK /CONTAINING BIT IN MAP JMP* FINDB /EXIT / / WRITE OUT SAT BLOCK IF MODIFIED / JMS WBWN / /RETURN / WBWN 0 ISZ SATMOD /BLOCK MODIFIED JMP* WBWN /NO LAC* SATBLP /OUTPUT BLOCK JMS TRANOT LAC (SAT JMP* WBWN /EXIT / / XOR BIT IN SAT / XORB 0 LAW -1 DAC SATMOD /SAT MODIFIED LAC* SATWP /FIP BIT XOR BMASK /BY XORING DAC* SATWP /STORE BACK INTO SAT AND BMASK /CLEAN OFF SZA!CLC /COMPUTE WHETHER BLOCK ADDED OR DELETE LAC (1 TAD SAT+2 DAC SAT+2 LAC* SATWP AND BMASK /LEAVE WITH BIT MASKED IN AC JMP* XORB .EJECT / / DEPOSIT INTO FREE CORE AND INCREMENT FREE CORE POINTER / JMS DACFRE / POINTER /TV CONTAINING ADDRESS OF FREE CORE / /POINTER / AC RESTORED ON EXIT / DACTV 0 DACTMP 0 DACFRE 0 DAC DACTMP /SAVE AC LAC* DACFRE DAC DACTV /PERFORM 1 LEVEL OF INDIRECTION LAC* DACTV /PICK UP CONTENTS ISZ* DACTV /INCREMENT CONTENTS DAC DACTV /PERFORM ANOTHE LEVEL OF INDIRECTION TCA TAD* (.SCOM+3 /CHECK FOR OVERFLOW OF FREE CORE SMA JMP DACF1 /OK OVFLO1 JMS TERMER /ANNOUNCE TERMINAL ERROR .SIXBT 'NO CORE<@' DACF1 LAC DACTMP /PUT INTO TABLE DAC* DACTV ISZ DACFRE /BUMP TO EXIT JMP* DACFRE /EXIT .TITLE SAVE AND REFRESH SYSTEM BLOCKS ROUTINES / / ROUTINES TO BRING IN SYSBLK-COMBLK AND SGNBLK / / BRING IN SYSBLK / JMS BINSBK / /RETURN / BINSBK XX LAC SYSBL2 /DUMMY SYSBLK JMS TRANIN /.TRAN IN LAC (SYSBLK LAC COMBL2 /COMBLK JMS TRANIN LAC (SYSBLK+400 LAC (SYSBLK TAD SYSBLK DAC ENDSYS /FIRST FREE WORD IN SYSBLK LAC (SYSBLK TAD COMBLK DAC COMBK1 /BEGINNING OF COMBLK JMP* BINSBK / / PUT OUT SYSBLK / JMS POTSBK / /RETURN / POTSBK 0 LAC DELPT1 /NULL PREVIOUS TABLE DAC CGEND LAC (SYSBLK TCA TAD ENDSYS DAC SYSBLK /UNRELOCATED FREE REG. IN SYSBLK LAC (SYSBLK TCA TAD COMBK1 DAC COMBLK /UNRELOCATED BEG. OF COMBLK LAC SYSBL2 /.TRAN OUT SYSBLK-COMBLK JMS TRANOT LAC (SYSBLK LAC COMBL2 JMS TRANOT LAC (SYSBLK+400 JMP* POTSBK /EXIT .EJECT / / BRING IN SGNBLK / BINSGK XX LAC SGNBL2 /.TRAN IN SGNBLK JMS TRANIN LAC (SGNBLK LAC NOPAR TAD (NOPAR DAC SGNDAT /FIRST ENTRY .DAT AND .UFD TABLE TAD NODAT DAC SGNSKP /FIRST ENTRY SKIP CHAIN ORDER TAD NOSKP DAC DEVSBK /FIRST ENTRY DEVICE TABLE LAC SGNBLK TAD (SGNBLK DAC ENDSBK /FIRST FREE ENTRY IN SGNBLK LAC NODAT RCR TAD SGNDAT DAC SGNUFD /FIRST ENTRY IN .UFD TABLE JMP* BINSGK /EXIT .EJECT / / PUT OUT SGNBLK / JMS POTSGK / /RETURN / POTSGK XX LAC (SGNBLK TCA TAD ENDSBK DAC SGNBLK /UNRELOCATED FIRST FREE ADRESS IN SGNBLK TAD (-401 /TOO BIG SPA JMP POT1 /NO JMS OUT /ANNOUNCE ERROR .SIXBT '>@>(SGNBLK TOO BIG)<@' JMP* CNTLP /GO TO ^P ADDRESS POT1 LAC SGNSKP TCA TAD DEVSBK DAC NOSKP /# SKIP IOTS IN SKIP CHAIN LAC SGNDAT TCA TAD SGNSKP DAC NODAT /# OF ENTRIES IN .DAT AND .UFD TABLES LAC (NOPAR TCA TAD SGNDAT DAC NOPAR /# OF PARAMETERS LAC SGNBL2 /.TRAN OUT SGNBLK JMS TRANOT LAC (SGNBLK JMP* POTSGK /.EXIT .TITLE IMPORTANT VARIABLES AND CONSTANTS / / / SYSBL1 XX /BLOCK # OF SYSBLK IN SYSTEM COMBL1 XX /BLOCK # OF COMBLK IN SYSTEM SGNBL1 XX /BLOCK # OF SGNBLK IN SYSTEM SYSBL2 XX /BLOCK # OF DUMMY SYSBLK COMBL2 XX /BLOCK # OF DUMMY COMBLK SGNBL2 XX /BLOCK # OF DUMMY SGNBLK RFMFD 1777 /BLOCK # OF RF MASTER FILE DIRECTORY DPMFD 47040 /BLOCK # OF DP MASTER FILE DIRECTORY SATABP XX /POINTER TO LIST OF SAT BLOCKS IN /FREE CORE BTABP XX /POINTER TO SAT BLOCK LIST IN CORE(DUMMY) NOSATB XX /# OF SAT BLOCKS LITDEV XX /STORAGE FOR SYS DEV MNEMONIC SYHAN 0 /SYSTEM A HANDLER NAME ODATB 0 /HANDLER NAMES FOR OLD .DAT SLOTS TABLE /POINTER ODATE 0 /DELETED HANDLER NAME BEGINNING POINTER DELPT1 0 /ADDED OR DELETED SYS FILES SINCE /LAST REFRESHMENT OF SYBLK-COMBLK /TABLE POINTER CGEND 0 /END OF ABOVE TABLE ONPDAT 0 /OLD # OF POSITIVE .DAT SLOTS P2 0 /POINTER P3 0 /POINTER P4 0 /POINTER P5 0 /POINTER ALFA 0 /NEXT BLOCK # MCTR1 0 /COUNTER DECT1 0 /COUNTER SGNDAT 0 /POINTER TO .DAT SLOT TABLE IN /SGNBLK SGNSKP 0 /POINTER TO SKIP CHAIN TABLE IN /SGNBLK SGNUFD 0 /POINTER TO .UFD SLOT TABLE IN /SGNBLK TEMP 0 OLDVAL 0 /LAST CALCULATED VALUE OF NNNK (BR-053) .EJECT / / .SIXBT CONSTANTS / CMD .SIXBT 'CMD' /(GAR-058) LTTA .SIXBT 'TTA' LDONE .SIXBT 'DONE' A1 .SIXBT 'DOSGENDMP' LDP .SIXBT 'DP' LDK .SIXBT 'DK' LRK .SIXBT 'RK' L0A .SIXBT '0<@' LMT .SIXBT 'MT' LLP .SIXBT 'LP' LVT .SIXBT 'VT' LS80 .SIXBT '80' LS120 .SIXBT '120' LS132 .SIXBT '132' LUIC .SIXBT 'UIC' L0R .SIXBT '0>' LDKL .SIXBT 'DKL' LNONE .SIXBT 'NONE] ' /TABLE L16K .SIXBT '16K' L20K .SIXBT '20K' L24K .SIXBT '24K' L28K .SIXBT '28K' L32K .SIXBT '32K' /END OF TABLE LALL .SIXBT 'ALL' LKSPC .SIXBT 'K] ' /SECOND HALF OF QAREA MESSAGE (BR-054) LNONE1 .SIXBT 'E@@' /USED TO COMPARE FOR 'NONE' (BR-054) .TITLE YES, NO, AND $ ANSWER ROUTINES / / THE YES NO TYPE OF QUESTION IN SGEN HAS BEEN DIVIDED UP INTO /5 ROUTINES FOR TYPING THE ENDING QUESTION MARK, THE DEFAULT ANSWER /IN PARENTHESIS, AND WAITING FOR THE REPLY. CARRIAGE RETURN /PRECEEDED ONLY BY SPACES MEANS TO ACCEPT THE DEFAULT ANSWER AS DOES /THE FACT THAT I/O SUPRESSION HAS BEEN PUT INTO AFFECT. A ALT MODE /ALONE ON A LINE OR PRECEEDED ONLY BY SPACES IS ECHOED AS '$' /AND SIGNIFIES THE ANTIDEFAULT CASE WHEN DEFINED FOR A YES NO /QUESTION. THIS DOES NOT NECESSARYILY AND USUALLY DOES NOT MEAN /A SIMPLE YES OR NO, BUT SIGNIFIES AN ALTERNATIVE PROCEEDURE TO /FOLLOW(Q.V. SGEN OPERATING MANUAL). MANY YES NO QUESTIONS /IN SGEN RESULT IN THE SETTING OF A BIT IN AN .SCOM REGISTER. TO /FACILITATE THIS TYPE OF OPERATION THE TWO SUBROUTINE ENTRIES /YW0 AND YW1 HAVE BEEN INSTITUTED. THE AC ON ENTRY CONTAINS THE /.SCOM WORD FROM THE SYSTEM BEING UPDATED, AND THE FIRST /ARGUMENT IS AN INSTRUCTION TO LOAD THE ACUMULATOR WITH A WORD /WITH ALL ZERO BITS ACCEPT THE BIT POSITION TO BE SET BY THE /QUESTION. ON EXIT THE NEW WORD TO BE PLACED IN THE .SCOM REGISTER /IS IN THE AC. THE ROUTINES PRINT '? (X) ' AND WAIT FOR AN ANSWER. /THE X STANDS FOR THE STATE OF THE SYSTEM AS INDICATED BY THE /AC ON ENTRY. IF I/O SUPRESSION EXISTS THE WORD WILL BE UNCHANGED /ON EXIT AND ALL I/O IS NATURALLY AVOIDED. TYPING AN $ IS BAD /SYNTAX IN THESE QUESTIONS AND RESULTS IN A LIST OF THE PROPER /RESPONES TO THE TELETYPE(CONSOLE) . THE FIRST EXIT IS TAKEN IN CASE /BAD SYNTAX IS FOUND. THE NEXT EXIT IF FOR A 'N' ANSWER AND /THE LAST FOR A 'Y' ANSWER. THE FOLLOWING IS AN EXAMPLE: / LAC SCOM4 /LOAD AC WITH WORD TO BE ALTERED / JMS YW0 /THE RESPONSE IS YES WHEN THE BIT IS 0 / LAC (1000 /THE BIT IS BIT 8 / JMP REPEAT /BAD SYNTAX CAUSES QUESTION TO BE REPEATED / JMP NO /ANSWER IS NO; AC CONTAINS NEW WORD / JMP YES /ANSWER IS YES; AC CONTAINS NEW WORD / / ABVIOUSLY IF A BIT IS NOT INVOLVED, THESE ROUTINES ARE NOT /OPTIMAL AND THE FOLLOWING ROUTINE ENTRIES ARE USED; / JMS YES /DEFAULT ENTRY IS YES / JMS NO /DEFAULT ENTRY IS NO / JMS ALTMOD /DEFAULT ENTRY IS $ / /THESE ROUTINES HAVE 4 EXITS INSTEAD OF 3. THE FOLLOWING IS AN EXAMPLE: / JMS YES /POWER OF POSITIVE THINKING / JMP REPEAT /BAD SYNTAX / JMP ALTMOD /TAKE ANTIDEFAULT ROUTE / JMP NO /ANSWER IS NO / JMP YES /ANSWER IS YES / / ALL THESE ROUTINES TAKE A COMPUTED EXIT WHEN THE ANSWER /IS CARRIAGE RETURN PRECEEDED ONLY BY SPACES; THEREFORE A DEFAULT /EXIT IS NOT EXPLICITLY GIVEN. THE ROUTINE ENTRY POINTS SHOW THE /DEFAULT EXIT PLAINLY AS ABOVE. THE ROUTINES PRINT THE DEFAULT /ANSWER EXACTLY AS DO THE 2 .SCOM BIT COMPUTATION ENTRIES. / YWTMPS XX /STATE WHEN YES YWTMP XX /BIT AFFECTED BY THE ROUTINES YWTMP1 XX /WORD TO BE CHANGED IF NECESSARY YW1 XX /YES WHEN ONE; YES WHEN BIT IS 1 ENTRY DAC YWTMP1 /STORE WORD TO BE CHANGED XCT* YW1 /PICK UP BIT TO BE CHANGED DAC YWTMPS /STORE THIS AWAY TOO LAC YW1 /PICK UP RETURN PC AND PUT INTO YW0 DAC YW0 JMP YW01 /JMP INTO ROUTINE YW0 XX /YES WHEN 0; YES WHEN BIT IS 0 DAC YWTMP1 /STORE ARGUMENT 1 DZM YWTMPS /0 WHEN YES YW01 XCT* YW0 /PICK UP BIT AFFECTED DAC YWTMP /STORE TEMPORARILY ISZ YW0 /BUMP TO BAD SYNTAX RETURN LAC SYNCON /OMIT ERROR MESSAGE ON BAD SYNTAX DAC SYNER /THIS EFFECTIVELY REMOVES THE ERROR /MESSAGE IN THE MORE BASIC ROUTINES /TO BE USED WHICH ACCEPT ALL ANSWERS LAC YWTMP /COMPUTE OLD STATE AND YWTMP1 SAD YWTMPS /IS DEFAULT ANSWER YES? JMP YWYES /YES! JMS NO /NO! JMP BADSY /BAD SYNTAX EVEN HERE JMP BADSY /EVEN ALT MODE IS BAD SYNTAX JMP ANNO /NO RETURN JMP ANYES /YES RETURN ANNO LAC YWTMP /COMPLEMENT STATE WHEN YES TO MAKE XOR YWTMPS /STATE WHEN NO DAC YWTMPS JMP ANNO1 /TAKE COMMON EXIT YWYES JMS YES /DEFAULT ANSWER IS YES JMP BADSY /BAD SYNTAX JMP BADSY /BAD SYNTAX ALSO JMP ANNO /NO ANYES ISZ YW0 /BUMP EXIT TO YES RETURN ANNO1 LAC YWTMP /MASK OFF OLD BIT CMA AND YWTMP1 XOR YWTMPS /PUT IN NEW ISZ YW0 /BUMP PAST BAD SYNTAX DAC YWTMP1 /SAVE JMP YW02 /GO TO EXIT BADSY JMS OUT /OUTPUT ERROR MESSAGE .SIXBT '_>@>(Y-N-C.R.)<@' YW02 LAC CRER /PUT BACK ERROR MESSAGE IN BASIC ROUTINE DAC SYNER LAC YWTMP1 /RESTORE ANSWER TO AC JMP* YW0 /EXIT ALTMOD 0 /BASIC ROUTINE WHEN ANSWER DEFAULT IS $ JMS OUT .SIXBT '? ($) <@' /PRINT DEFAULT ANSWER LAC ALTMOD DAC YES /STICK EXIT PC IN YES LAC (JMP YNALT /COMPUTED DEFAULT INSTRUCTION JMP YNENT /JMP INTO MIDDLE OF YES NO 0 /BASIC ROUTINE ENTRY WHEN DEFAULT IS NO JMS OUT .SIXBT '? (N) <@' /DEFAULT ANSWER IS NO LAC NO /STICK RETURN PC IN YES DAC YES LAC (JMP NO1 /ANSWER IS DEFAULT NO JMP YNENT /JMP INTO MIDDLE OF YES YES 0 /DEFAULT ANSWER IS YES JMS OUT /TYPE DEFAULT ANSWER .SIXBT '? (Y) <@' /DEFAULT ANSWER IS YES LAC (JMP YES1 /COMPUTED DEFAULT INSTRUCTION YNENT DAC YNDEF /STICK AWAY DEFAULT INSTRUCTION LAC YES /SYNTAX ERROR RETURN PC DAC BADSYN JMS IOSUP /I/O SUPPRESSION IN FORCE? JMP YNDEF /YES; TAKE DEFAULT ANSWER JMS BATCH /BATCH MODE? SKP /YES JMP YNNON1 /NO; READ IN IMAGE CLA /BATCH MODE READ WITH NO MORE ON LINE JMS ANS /ACCEPT ANSWER JMP SYNER /SYNTAX ERROR JMP YNDEF /DEFAULT ANSWER JMP YNALT /$ ANSWER SKP /SYMBOL IS ONLY OTHER LEGAL EXIT JMP SYNER /NUMBER IS BAD SYNTAX SAD (1 /# OF CHARACTERS MUST BE 1 SKP JMP SYNER /SYNTAX ERROR LAC ANSWER /TEST ANSWER SAD (310000 /Y? JMP YES1 SAD (160000 /N? JMP NO1 JMP SYNER /MUST BE Y OR N YNNON1 JMS TYIMG /READ IN IMAGE JMP SYNER /SYNTAX ERROR JMP YNDEF /DEFAULT (C.R.) JMP YNALT /ALT MODE $ JMP NO1 /NO YES1 ISZ YES /YES NO1 ISZ YES /NO YNALT ISZ YES /$ SYNCON JMP* YES /EXIT SYNER JMS OUT .SIXBT '_>@>(Y-N-$-C.R.)<@' /BAD SYNTAX JMP* BADSYN YNDEF XX /DEFAULT INSTRUCTION COMPUTED FROM ENTRY .EJECT / / SUBROUTINE TO READ TELETYPE IN IMAGE MODE IN ORDER TO SPEAD /UP USE OF SYSTEM GENERATOR IN NON BATCH MODE. LEADING SPACES WILL /BE IGNORED. / CALLING SEQUENCE / JMS TYIMG /ACCEPT ANSWER IN IMAGE / JMP REPEAT /REPEAT MESSAGE / JMP DEFAULT /DEFAULT ANSWER / JMP ALTMOD /ANTIDEFAULT ANSWER $ / JMP NO /NO / JMP YES /YES / TYIMG 0 TYI1 CAL 3776 /.READ -2 IN IMAGE .ASCII 10 TYIBUF -3 .WAIT -3 LAC TYIBUF+2 AND (177 /PICK UP FIRST CHARACTER SAD (40 /IS IT SPACE JMP TYI1 /YES; IGNORE SAD (116 /IS IT N? JMP TYIN /YES TAKE APPROPRIATE EXIT SAD (131 /IS IT Y? JMP TYIY /YES TAKE APPROPRIATE EXIT SAD (175 /IS IT ALT MODE? JMP TYDOL /YES TAKE APPROPRIATE ACTION SAD (44 /$ JMP TYDOL1 SAD (33 /ANOTHER LEGAL CODE FOR ALTMODE JMP TYDOL /TYPE $ SAD (176 /ANOTHER LEGAL CODE FOR ALTMODE JMP TYDOL /TYPE $ AND EXIT SAD (15 /CARRIAGE RETURN? JMP TYCR /TAKE DEFAULT EXIT SAD (137 /_ ISZ TYIMG JMS CRLF /NO; BAD SYNTAX; GIVE C.R. LF JMP* TYIMG /TAKE DBAD SYNTAX EXIT TYIY ISZ TYIMG TYIN ISZ TYIMG JMS CRLF /ECHO CRLF TO KEEP THINGS THE SAME TYDOL1 ISZ TYIMG /IN NON-BATCH MODE TYCR ISZ TYIMG JMP* TYIMG /EXIT TYDOL JMS OUT .SIXBT '$<@' /ECHO $ FOR ALTMODE JMP TYDOL1 .EJECT / / SUBROUTINE TO CHECK WHETHER IN BATCH MODE / JMS BATCH / JMP YES / JMP NO / BAT1 0 BATCH XX DAC BAT1 /SAVE AND RESTORE AC LAC 17777 SMA ISZ BATCH /SKIP IF NONBATCH MODE LAC BAT1 JMP* BATCH /EXIT WITH AC RESTORED .TITLE FETCH ANSWER ROUTINE / / FETCH ANSWER HAS 3 ENTRY POINTS (ANS,MULANS,MORANS). /A ZERO AC FILTERS OUT ANSWERS WHICH DO NOT CONSIST OF A /SYLABLE ENDING WITH CARRIAGE RETURN OR ALTMODE /OTHER TERMINATORS ARE '<','>','/',',','=', AND SPACE. /THE TERMINATOR IN .ASCII WILL BE STORED IN OP. THE ANSWER WILL BE /STORED AS 6 .SIXBT CHARACTER PADDED WITH @ INTO ANSWER AND /ANSWER +1. AN OCTAL NUMBER WILL BE STORED INTO NUMBER. A MINUS /SIGN ENCOUNTERED ANYWHERE IN AN OCTAL NUMBER WILL NEGATE THE /NUMBER (2'S COMPLEMENT). A + SIGN IN A NUMBER WILL BE IGNORED. /IF THE ANSWER IS AN OCTAL NUMBER, THE CONTENTS OF ANSWER AND /ANSWER+1 SHOULD BE IGNORED. IF THE ANSWER IS A ALT MODE /PRECEEDED BY 0 OR MORE SPACES, A $ WILL BE ECHOED ON THE TELETYPE /AND A SPECIAL EXIT TAKEN. $ ITSELF IS EQUIVALENT TO ALT MODE /ITSELF IN ORDER TO AVOID CONFUSION. IF THE ANSWER IS A CARRIAGE RETURN /OR _ PRECEEDED ONLY BY 0 OR MORE SPACES THEN A SPECIAL EXIT IS TAKEN /(THE DEFAULT EXIT). IF THE ANSWER IS NOT A LEGAL OCTAL /NUMBER, THE SYMBOL EXIT WILL BE TAKEN. IF THE ANSWER IS A LEGAL /OCTAL NUMBER, THE NUMBER EXIT WILL BE TAKEN. THE ROUTINE CHECKS /FOR ANSWERS THAT ARE TOO LONG OR WHICH CONTAIN ILLEGAL .ASCII /CHARACTERS AND OUTPUTS AN APPROPRIATE MESSAGE. ALL BAD SYNTAX /ERRORS TAKE THE SAME EXIT. MULANS IS USED TO FETCH THE NEXT /ANSWER IN A MULTILINE ANSWER SEQUENCE. MORANS IS USED /TO FETCH THE NEXT ANSER ON THE SAME INPUT LINE. ALL INPUT IS IN /IOPS .ASCII. IF NO MORE INPUT IS PRESENT ON THE LINE, MORANS TAKE /THE BAD SYNTAX EXIT OR $ EXIT OR DEFAULT EXIT. THE AC ON A SYMBOL /EXIT CONTAINS THE NUMBER OF NON-NULL CHARACTERS IN THE SYMBOLIC ANSWER /THE AC ON OCTAL NUMBER EXIT CONTAINS THE OCTAL NUMBER. IF /NEGFLG IS NON-ZERO, THE NUMBER INPUT CONTAINED A MINUS SIGN. THE /NUMBER OF DIGITS INPUT IS STORED IN CNTDIG. THE NUMBER OF CHARACTERS /IN A SYMBOLIC ANSWER IS CONTAINED IN CNTCHR. NUMFLG IS ZERO, IF /THE INPUT WAS AN OCTAL NUMBER. / CALLING SEQUENCE: / CLC /OR CLA; CLA TO LOCK OUT TERMINATORS / /INDICATING MORE ON LINE / JMS ANS /OR MULANS OR MORANS / JMP QUES /BAD SYNTAX / JMP DEFALT /DEFAULT ANSWER / JMP ALTMOD /ANTIDEFAULT ANSWER / JMP SYMBOL /SYMBOLIC ANSWER / JMP NUMBR /OCTAL NUMBER ANSWER / ANS 0 DAC OPFLG /STORE FLAG INDICATING MORE ON LINE LAC ANS JMP ANSENT /JMP INTO ROUTINE MULANS 0 /ENTRY INDICATING MULTILINE SEQUENCE DAC OPFLGS /STORE INTO TEMPORARY FOR MORE ON LINE MULBAD JMS OUT /OUTPUT GO AHEAD .SIXBT '_>@>><@' LAC OPFLGS /PUT MORE ON LINE FLAG INTO SAVE REGISTER DAC OPFLG LAC MULANS /GET RETURN PC ANSENT DAC ANS /STORE RETURN PC INTO ANS DAC BADSYN /FIRST EXIT IS BAD SYNTAX ISZ ANS /BUMP PAST BAD SYNTAX JMS IOSUP /I/O SUPPRESSION? JMP* ANS /YES; TAKE DEFAULT EXIT LAC (TYIBUF+2 /UNPACK ANSWER DAC ANSP1 CAL 2776 /.READ -2 IN IOPS .ASCII 10 TYIBUF -46 .WAIT -2 LAW -1 /SET UP TO START UNPACKING FROM DAC KLGET5 /THE BEGINNING JMP MULSKP MORANS 0 /ENTRY POINT TO BEGIN UNPACKING DAC OPFLG /FROM WHERE LEFT OFF ON LINE LAC MORANS /STICK RETURN PC INTO ANS DAC ANS DAC BADSYN /BAD SYNTAX EXIT ISZ ANS /BUMP TO DEFAULT EXIT JMS IOSUP /I/O SUPRESSION? HLT /THIS PART OF SGEN SHOULD NEVER BE REACHED LAC OP SNA /IS THERE MORE ON LINE JMP* BADSYN /NO; BAD SYNTAX MULSKP DZM CNTCHR /# OF CHARACTERS SET ORIGINALLY TO 0 DZM CNTDIG /# OF OCTAL DIGITS ALSO DZM NEGFLG /# NOT NEGATED DZM NUMBER /# ORIGINALLY 0 DZM NUMFLG /# IS A NUMBER TO START WITH DZM OP / OPERATOR IS CARRIAGE RETURN OR ALT MODE /UNLESS FOUND TO THE CONTRARY DZM ANSWER /ANSWER IS ORIGINALLY NOT THERE DZM ANSWER+1 /ALSO SECOND HALF LAC (ANSWER /SET UP TO GET FIRST HALF OF ANSWER DAC ANS1 ANS2 LAW -3 /ANSWER IS TO BE PACKED IN .SIXBT DAC SIXTMP /SET UP TO PUT IN FIRST CHARACTER ANS17 ISZ KLGET5 /IS THIS THE BEGINNING OF A 5/7 PAIR JMP KL5GET /NO; UNPACK ANOTHER LAC* ANSP1 /GET NEXT PAIR DAC KLWD1 ISZ ANSP1 LAC* ANSP1 DAC KLWD2 ISZ ANSP1 LAW -5 /SET UP TO UNPCK ANOTHER FIVE DAC KLGET5 KL5GET LAW -10 /SHIFT WORD PAIR 7 TIMES DAC KLWD3 KL6GET LAC KLWD2 /STANDARD UNPACKING ROUTINE RAL ISZ KLWD3 SKP JMP KL6G1 DAC KLWD2 LAC KLWD1 RAL DAC KLWD1 JMP KL6GET KL6G1 AND (177 /CLEAN DAC KLWD4 /SAVE AND (170 /LEGAL OCTAL DIGIT SAD (60 SKP /YES JMP KL6G2 /NO ISZ CNTDIG /COUNT DIGITS IN NUMBER LAC NUMBER /MULTIPLY PREVIOUS VALUE BY 8 RCL RTL XOR KLWD4 /MERGE DIGIT INTO LAST POSITION AND (777770 XOR KLWD4 DAC NUMBER JMP ANS3 /GO PUT INTO SYMBOL ALSO JUST IN CASE KL6G2 LAC KLWD4 /TEST FOR SPECIAL CHARACTER SAD (55 /-? JMP ANS7 /YES NEGATE NUMBER SAD (40 /SPACE JMP ANS16S /YES; IGNORE IF LEADING SAD (137 /_ JMP ANS40 SAD (74 // JMP ANS16G SAD (54 /,? JMP ANS16 SAD (53 /+? JMP ANS3 SAD (175 /ALTMODE JMP ANS8 SAD (15 /C.R.? JMP ANS9R SAD (75 /=? JMP ANS16 SAD (57 /'/'? JMP ANS16 SAD (44 /$ JMP ANS99 ANS100 ISZ NUMFLG AND (77 DAC KLCNTB /COMPUTE IF CHARACTER IS LEGAL IN .SIXBT AND (40 SNA!STL CLL LAC KLCNTB SNL!SZA XOR (100 SAD KLWD4 JMP ANS3 /LEGAL CRER JMS OUT /ILLEGAL .SIXBT '>@>(NON-PRINTING CHAR)<@' JMP* BADSYN /BAD SYNTAX ANS7 ISZ NEGFLG /SET NEGATE FLAG ANS3 LAC KLWD4 /GET CHARACTER AND (77 /STRIP TO .SIXBT ISZ CNTCHR /COUNT CHARACTERS IN SYMBOL ISZ SIXTMP /DETERMINE WHETHER SYMBOL IS FIRST JMP ANS4 /SECOND OR THIRD IN .SIXBT WORD XOR* ANS1 /THIRD DAC* ANS1 /STORE AWAY ISZ ANS1 /START WITH NEXT WORD JMP ANS2 /GO FOR MORE ANS4 ISZ SIXTMP /TEST AGAIN JMP ANS12 /LAST CHARACTER CLL RTL /SECOND CHARACTER RTL RTL XOR* ANS1 DAC* ANS1 LAW -1 /LAST CHARACTER NEXT JMP ANS2+1 ANS12 LAC CNTCHR /FIRST CHARACTER; TEST WHETHER LEGAL AAC -7 /IS THE NUMBER OF CHARACTERS 7 (BR-049) SMA JMP ANS2 /YES; IGNORE FURTHER CHARACTERS LAC KLWD4 /PICK UP CHARACTER AND (77 /CLEAN TO .SIXBT RCR RTR RTR RTR DAC* ANS1 /FIRST WORD IGNORES PREVIOUS CONTENTS LAW -2 JMP ANS2+1 /SECOND CHARACTER NEXT ANS16 DAC OP /STORE OPERATOR OR DELIMITER AND (77 /CLEAN OFF TO .SIXBT ANS16I DAC OP1 /STORE IN BAD OPERATOR MESSAGE ANS16T LAC OPFLG /TEST IF THIS KIND OF DELIMITER SZA /IS GOOD SYNTAX HERE JMP ANS9 /YES OPBAD JMS OUT /BAD DELIMITER .SIXBT '>@>("' OP1 XX .SIXBT '" IS BAD DELIMITER)<@' JMP* BADSYN /BAD SYNTAX ANS16L DAC OP /SPECIAL DELIMITERS IN THAT THEY LAC LESTH /MUST BE DOUBLED IN ORDER TO PRINT JMP ANS16I ANS16G DAC OP LAC GRTH JMP ANS16I LESTH .SIXBT '<<' GRTH .SIXBT '>>' LSALT .SIXBT 'ALT' LSCRT .SIXBT 'CR' ANS8 LAC CNTCHR /IS ALT MODE ALONE? SNA JMP ANS10 /YES; ECHO $ AND TAKE $ EXIT JMS CRLF /GIVE CARRIAGE RETURN LINE FEED LAC LSALT /INDICATE ALT MODE AS DELIMITER SKP ANS9CR LAC LSCRT /INDICATE CARRIAGE RETURN AS DELIMITER DAC OP1 ANS9 LAC NUMFLG /EXIT; IS THE NUMBER LEGAL SNA JMP ANSNM1 /YES ANSYM LAC CNTCHR /SYMBOL TOO LARGE? AAC -7 /SUBTRACT 7 (BR-049) SPA JMP ANSSOK /NO JMS OUT /SYMBOL TOO LARGE .SIXBT '>@>(SYMBOL >> 6 CHAR)<@' JMP* BADSYN /BAD SYNTAX ANS99 LAC CNTCHR /HAVE ANY CHARACTERS PRECEEDED SNA JMP ANS15 /NO; TREAT LIKE DEFAULT LAC KLWD4 /YES JMP ANS100 ANSSOK LAC ANSWER /CHECK FOR DONE SAD LDONE /(.SIXBT 'DONE' SKP JMP ANSOK7 /NO MATCH LAC ANSWER+1 /SECOND WORD SAD LDONE+1 JMP* ANS /MATCH; DEFAULT EXIT ANSOK7 LAC CNTCHR /PUT # OF CHARACTERS IN AC ANSOK1 ISZ ANS /BUMP FOR SYMBOL EXIT ANS15 ISZ ANS /BUMP FOR $ ANSWER JMP* ANS /EXIT ANSNM1 LAC CNTDIG /ARE DIGITS ENOUGH SNA JMP ANSYM /NO; MUST BE SYMBOL AAC -7 /TOO MANY DIGITS (BR-049) SPA JMP ANSNOK /NO; EXIT JMS OUT /YES .SIXBT '>@>(# >> 6 DIGITS)<@' JMP* BADSYN /BAD SYNTAX ANSNOK LAC NEGFLG /IS NUMBER TO BE NEGATED SNA /SKIP IF # NEGATIVE JMP ANSNK1 /NUMBER NOT PRECEEDED BY MINUS SIGN LAC NUMBER /FORM TWO'S COMPLEMENT OF NUMBER TCA DAC NUMBER /AND STORE BACK IN NUMBER ANSNK1 LAC NUMBER /PUT # IN AC ON EXIT ISZ ANS /BUMP TO NUMBER RETURN JMP ANSOK1 ANS10 JMS OUT /ALT MODE ALONE; ECHO $ .SIXBT '$<@' JMP ANS15 ANS40 LAC CNTCHR /IF ALONE INDICATES DEFAULT SNA JMP* ANS /DEFAULT EXIT LAC LAR DAC OP1 JMP OPBAD /BAD OPERATOR LAR .SIXBT '__' ANS16S DAC OP /STORE AWAY OPERATOR DAC OP1 LAC CNTCHR /IGNORE LEADING SPACES SZA JMP ANS16T DZM OP JMP ANS17 /SPACES ARE NOT OPERATORS WHEN LEADING ANS9R LAC CNTCHR /CARRIAGE RETURN IS DEFAULT ONLY SZA /WHEN ALONE JMP ANS9CR /NOT ALONE; PROCESS AS USUAL JMP* ANS /TAKE DEFAULT EXIT SYMBAD JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T OCTAL #<@" KBAD JMS RERR /ANNOUNCE RECOVERABLE ERROR:NR NOT NNNK (BR-053) .SIXBT 'IS BAD ENTRY - MUST BE OF FORM NNNK<@' /(BR-053) KBAD1 JMS RERR /ANNOUNCE RECOVERABLE ERROR:NR LESS 24K (BR-053) .SIXBT 'TOO SMALL - MUST BE GEQ 24K<@' /(BR-053) KBAD2 JMS RERR /ANNOUNCE RECOVERABLE ERROR:NR GTR 128K (BR-053) .SIXBT 'TOO LARGE - MUST BE LEQ 128K<@' /(BR-053) KBAD3 JMS RERR /ANNOUNCE RECOVERABLE ERROR:NOT MULT 8K (BR-053) .SIXBT 'NOT MULTIPLE OF 8K<@' /(BR-053) NUMBIG JMS RERR /ANNOUNCE RECOVERABLE ERROR : TO BIG (BR-053) .SIXBT 'NUMBER TOO BIG<@' /(BR-053) NUMBAD JMS RERR /ANNOUNCE RECOVERABLE ERROR .SIXBT "ISN'T SYMBOL<@" ALTBAD JMS OUT /ALT MODE NONACCEPTABLE ANSWER .SIXBT '_>@>("$" BAD HERE)<@' JMP* BADSYN /BAD SYNTAX CRBAD JMS OUT /DEFAULT CASE IS ILLEGAL .SIXBT '>@>(NO DEFAULT CASE)<@' JMP* BADSYN /BAD SYNTAX .TITLE SMALL SUBROUTINES / / ROUTINE TO CHECK THAT # IN AC CORRESPONDS TO LEGAL .DAT SLOT / JMS LEGAL / JMP NO / JMP YES /LEGAL / LEGAL 0 SAD (-7 /PERMANENT SLOTS JMP* LEGAL SAD (-3 JMP* LEGAL SAD (-2 JMP* LEGAL SNA /0 NOT LEGAL .DAT SLOT JMP* LEGAL AAC 15 /ADD 15 (BR-049) SPA /TOO NEGATIVE JMP* LEGAL /YES TAD SGNDAT TCA TAD SGNUFD SPA!SNA JMP* LEGAL /TOO BIG ISZ LEGAL /LEGAL .DAT SLOT JMP* LEGAL / / SUPPRESS SEGMENT / JMS SUPSEG / SUPSEG XX LAC (NOP DAC IOSEG JMP* SUPSEG / / SUPPRESS SECTION / JMS SUPSEC / SUPSEC XX LAC (NOP DAC IOSEC JMP* SUPSEC .EJECT / / START NEW SECTION AND SET ^P / JMS SECTN / .SIXBT 'MESSAGE<@' / SECTN XX JMS RIOSUP /REMOVE ALL I/O SUPRESSION LAW -1 /COMPUTE ^P ADDRESS TAD SECTN AND (77777 DAC CNTLP JMS CRLF /.INIT -3 JMS CRLF JMS OUTP /TYPE MESSAGE LAC SECTN JMP* OUT /EXIT RIGHT AFTER MESSAGE / / ASK QUESTION OR MAKE STATEMENT / JMS QUERY / .SIXBT 'MESSAGE<@' / QUERY XX JMS OUT .SIXBT '_><@' JMS OUTP LAC QUERY JMP* OUT /EXIT RIGHT AFTER MESSAGE / / SAVE CONTENTS OF ANSWER TEMPORARILY / JMS SAVANS / ANSTMP 0 /ANSWER SAVED HERE 0 SAVANS XX LAC ANSWER DAC ANSTMP LAC ANSWER+1 DAC ANSTMP+1 JMP* SAVANS .EJECT / / SUBROUTINE TO TEST IF OP EQUAL TO FOLLOWING LOCATION / CALLING SEQUENCE: / JMS DELIM / OPERATOR /CONTENTS OF FOLLOWING LOCATION / /IS THE OPERATOR IN .ASCII / JMP YES /MATCH EXIT / JMP NO /NO MATCH EXIT / /RESTORES AC ALWAYS / DELIM 0 /TEST IF DELIMITER IS CORRECT DAC SAVAC /WITHOUT ALTERING THE AC LAC OP SAD* DELIM /TEST SKP /SKIP IF OK ISZ DELIM /BUMP OVER MATCH EXIT ISZ DELIM LAC SAVAC JMP* DELIM / / SUBROUTINE TO PRINT SYMBOL IN ANSWER / JMS PANS / PANS 0 JMS OUT .SIXBT '>@>("' ANSWER 0 0 .SIXBT '" <@' JMP* PANS .EJECT / / SUBROUTINE TO FETCH CHARACTERS ONE AT A TIME FROM ANSWER,ANSWER+1 / / INITIALIZE WITH DZM ANSCNT / / SIXBT CHARACTER RETURNED: STARTING LEFT TO RIGHT ANSWER,ANSWER+1 / / CALLING SEQUENCE : JMS ANSGET / RESULT IN AC / ANSGET 0 /ENTRY-GET NXT CHAR FROM ANSWER ROUTINE (BR-053) LAC ANSWER+1 /GET ANSWER+1 (BR-053) LMQ /PUT IN MQ REGISTER (BR-0539 LAC ANSCNT /GET CHAR COUNTER (BR-053) AAC -6 /TEST IF 6 CHAR ALREADY SENT (BR-053) SMA!CLA /SKIP IF LESS THAN 6 SENT (BR-053) JMP* ANSGET /RETURN TO USER WITH 0 IN AC (BR-053) LAC ANSCNT /RESTORE ANSCNT (BR-053) TAD (SHFTAB /COMPUTE SHIFT INSTRUCTION ADR (BR-053) DAC SHFTAD /SAVE ADDRESS (BR-053) LAC ANSWER /LOAD AC WITH ANSWER /AC=ANSWER,MQ=ANSWER+1 (BR-053) XCT* SHFTAD /EXECUTE SHIFT (BR-053) AND (000077 /MAKE SINGLE SIXBT CHAR (BR-053) ISZ ANSCNT /INCREMENT CHAR COUNTER (BR-053) JMP* ANSGET /RETURN TO CALLER (BR-053) SHFTAD SHFTAB /ADDRESS OF SHIFT INSTRUCTION (BR-053) SHFTAB LRS 14 /FIRST CHAR (BR-053) LRS 6 /SECOND CHAR (BR-053) NOP /THIRD CHAR (BR-053) LLS 6 /FOURTH CHAR (BR-053) LLS 14 /FIFTH CHAR (BR-053) LLS 22 /SIXTH CHAR (BR-053) ANSCNT 0 /CHAR SENT COUNTER (BR-053) .EJECT / / SUBROUTINE TO PRINT NUMBER / NUMBER 0 PNUM 0 JMS OUT .SIXBT '>@>("<@' LAC NEGFLG /WAS THE NUMBER NEGATED ON INPUT SNA JMP PNUM1 /NO; DO NOT OUTPUT EVER AS NEGATIVE LAC NUMBER /YES; IS NUMBER NEGATIVE? SPA JMP PNUM2 /YES; OUTPUT AS SIGNED NEGATIVE # LAW 55 /NO; OUTPUT AS POSITIVE # PRECEEDED JMS KLPUT /BY MINUS SIGN LAC NUMBER TCA JMP PNUM3 PNUM1 LAC NUMBER /IS # NEGATIVE NOW SMA JMP PNUM3 /NO; OUTPUT WITH ZERO SUPRESSION JMS NUMOUT /YES; OUTPUT WITHOUT ZERO SUPRESSION SKP PNUM2 JMS SOCT /OUTPUT AS SIGNED OCTAL # WITH ZERO SUP SKP PNUM3 JMS NUMSUP JMS OUT .SIXBT '" <@' JMP* PNUM .EJECT / / TEMPORARY STORAGE / KLGET5 0 KLWD1 0 KLWD2 0 KLWD3 0 KLWD4 0 OP 0 /CURRENT OPERATOR IN EXPRESSION ANS1 0 /POINTER TO WORD IN ANSWER RECEIVING CHARACTERS NEGFLG 0 /0 WHEN # BEING ACCUMULATED WAS NOT PRECEEDED /BY A MINUS SIGN NUMFLG 0 /0 WHEN SYLABLE CURRENTLY BEING FORMED IS OCTAL # OPFLG 0 /0 WHEN CURRENT SYLABLE MUST END WITH CAR. RET. /OR ALT MODE OPFLGS 0 /TEMPORARY STORAGE OF OPFLG IN MULTILINE SEQUENCE BADSYN 0 /CONTAINS PC FOR BAD SYNTAX RETURNS FROM ANSWER /ROUTINES ANSP1 0 CNTCHR 0 /ACCUMULATOR FOR # OF CHARACTERS IN SYLLABLE CNTDIG 0 /ACCUMULATOR FOR # OF OCTAL DIGITS IN # SIXTMP 0 /COUNTER SAVAC 0 /SAVE LOCATION FOR AC / / SUBROUTINE TO GIVE A CARRIAGE RETURN LINE FEED ON TELETYPE /IF I/O SUPRESSION IS NOT IN FORCE / CRLF XX JMS IOSUP JMP* CRLF /EXIT IF I/O SUPRESSION CAL 775 /.INIT -3 1 CNTLP XX /CONTROL P ADDRESS 0 .WAIT -3 JMP* CRLF .EJECT / / SUBROUTINE TO CHECK FOR I/O SUPRESSION. AC,L NOT TOUCHED / JMS IOSUP / IOSUP XX IOSEG SKP /NOP IF SUPRESSION ON A SEGMENT JMP* IOSUP IOSEC SKP /NOP IF SUPRESSION ON A SECTION BASIS JMP* IOSUP ISZ IOSUP JMP* IOSUP / / TERMINAL ERROR ROUTINE / TERMER 0 JMS RIOSUP /LIFT I/O SUPRESSION ON TERMINAL ERROR JMS OUTP /OUTPUT ERROR MESSAGE ARGUMENT LAC TERMER /POINTED TO BY ROUTINE JMS OUT .SIXBT ' ABORT_<@' ENDGEN .INIT -14,0,0 .FSTAT -14,A1 SNA JMP TERM1 /FILE NOT PRESENT .DLETE -14,A1 TERM1 .EXIT .EJECT / / RECOVERABLE ERROR / JMS RERR / .SIXBT 'MESSAGE<@' / RERR 0 LAC NUMFLG /IS IT # SNA JMP .+3 /YES; NUMBER JMS PANS /SYMBOL SKP JMS PNUM JMS OUTP /PRINT ERROR MESSAGE LAC RERR JMS OUT /PRINT ENDING .SIXBT ')<@' JMP* BADSYN /GO BACK TO SYNTAX EXIT / REMOVE I/O SUPRESSION / RIOSUP 0 LAC (SKP DAC IOSEG DAC IOSEC JMP* RIOSUP / .TITLE BUFFERS .LTORG PATCH .BLOCK 50 /PATCH AREA TYOBUF 23000 /OUTPUT BUFFER 0 TYIBUF=.+44 .TITLE SGNBLK / / THIS SECTION IS NOT PART OF THE CORE IMAGE. IT DEFINES /THE LOCATION OF SGNBLK AND VARIOUS PARAMETERS IN IT. /SGNBLK IS NEVER IN CORE THE SAME TIME AS SYSBLK-COMBLK AND /IT OCUPIES THE SAME CORE LOCATIONS. / SGNBLK=TYIBUF+50 /END OF I/O DEVICE TABLE NOPAR=SGNBLK+1 /# OF SYSTEM PARAMETERS NODAT=SGNBLK+2 /# OF .DAT SLOTS * 2 NOSKP=SGNBLK+3 /# OF SKIPS IN SKIP CHAIN SDEV1=SGNBLK+4 /SYSTEM DEVICE CODE SCOM4=SGNBLK+5 /.SCOM+4 DEFAULT CONTENTS SCOM20=SGNBLK+6 /.SCOM+20 DEFAULT CONTENTS X1=SGNBLK+7 /# WORDS/FILES BUFFER FILES=SGNBLK+10 /DEFAULT BUFFS COMMAND FOR LINKING LOADER AND /EXECUT MIC=SGNBLK+11 /MONITOR IDENTIFICATION CODE SCOM33=SGNBLK+12 /CONTENTS OF .SCOM+33 PROTCT=SGNBLK+13 /DEFAULT FILES PROTECTION CODE (.SCOM+54) PCHSZ=SGNBLK+14 /SIZE OF RESIDENT MONITOR PATCH AREA CLKCON=SGNBLK+15 /-# OF TICKS IN SECOND / /(GAR-058) DELETED UNUSED DIRECT ASSIGNMENTS: /(GAR-058) SCOM76=SGNBLK+16 /(GAR-058) SCOM77=SGNBLK+17 / .TITLE SYSBLK-COMBLK / / THIS TABLE CONTAINS SYSBLK-COMBLK. IT OVERLAPS SGNBLK /TABLE AS THEY NEVER COEXIST IN CORE. / SYSBLK=SGNBLK /POINTER TO FIRST FREE WORD IN SYSBLK E1=SYSBLK+1 E2=E1+7 E3=E2+7 QBLK=E3+2 /FIRST BLOCK OF ^Q AREA QSZE=E3+5 /SIZE IN WORDS OF ^Q AREA COMBLK=SYSBLK+777 /POINTER TO FIRST WORD OF COMBLK ENDCOM=COMBLK .TITLE SAT / / THIS IS THE BUFFER FOR THE STORAGE ALLOCATION TABLE / SAT=SGNBLK+1000 SATND=SAT+400 /SATND SHOULD EQUAL 17637 .IFDEF BIN .LOC SATND .ENDC / .END START