/ THE NEW IMPROVED P?S MONITOR XLIST OFF /TURN OFF LISTING IFNDEF OFF IFNDEF ON XLIST ON; IFZERO 1 < LAST EDIT: 12-DEC-1986 18:00:00 CJL MUST BE ASSEMBLED WITH '/J' SWITCH SET. P P P P ? ? ? S S S 8 8 8 P P ? ? S S / 8 8 P P ? S / 8 8 P P P P ? S S S / 8 8 8 P ? S / 8 8 P S S / 8 8 P ? S S S 8 8 8 THIS SYSTEM IS DEDICATED TO THE DECTAPE VERSION OF THE DEC DISK MONITOR SYSTEM WITHOUT WHICH IT DOES NOW AND ALWAYS HAS RUN. > XLIST ON / EQUATED SYMBOLS. ADRLST= 7603 /ZAP ADDRESS LIST IN I/O ROUTINES BATBLK= 0201 /BATCH SYSTEM BLOCK BATCORE=2600 /BATCH CODE ADDRESS BATLEN= 0001 /BATCH SYSTEM LENGTH BATMEM= 7400 /BATCH SYSTEM ADDRESS BATSGA= 3400 /BATCH SYSTEM GENERATION ADDRESS BBLEN= 0043 /LENGTH OF SLURP LOADER WHICH IS THE BOOTSTRAP BCIF= 7746 /SLURP LOADER CIF CDF STARTUP ADDRESS BINADR= 0020 /DEFAULT BINARY SCRATCH AREA (%) BINBLK= 0203 /BLOCK NUMBER OF BIN SYSTEM BINGEN= 4000 /BIN SYSTEM GENERATION ADDRESS BINIT= 0020 /BIN SYSTEM SLURP INITIALIZE ROUTINE BINITLN=0020 /LENGTH OF SLURP INITIALIZE CODE BINIT2= 0031 /INITIALIZE PART TWO BINLEN= 0013 /BINARY LOADER LENGTH (FOR LOADING) BISTRT= 7776 /DEFAULT STARTING ADDRESS IF /I OR /V IN EFFECT BRLGEN= 2^10+4200 /BATCH RECOVERY GENERATION FIELD AND ADDRESS BSGRP= 0003 /(1984-1960)%8 IS BASE GROUP VALUE BSTART= 0200 /STARTING ADDRESS OF BIN SYSTEM BTRLBLK=0115 /BATCH RECOVERY BLOCK BTRLEN= 0005 /TOTAL BATCH RECOVERY LENGTH BZIP= 0000 /LOWEST LOADING ADDRESS IN BIN CALADR= 0020 /EQUATED FROM CONSOLE OVERLAY! CALFLD= 0021 /EQUATED FROM CONSOLE OVERLAY! CATADR= 7000 /USER CATALOG ADDRESS CHANGE= 1600 /STARTING ADDRESS OF CHANGE SYSTEM CHKCNT= 0043 /EQUATED FROM CONSOLE OVERLAY! CHKPTR= 0044 /EQUATED FROM CONSOLE OVERLAY! CHNGBLK=0241 /LOADING BLOCK FOR CHANGE/FIND CHNGLEN=0003 /LENGTH OF CHANGE/FIND CNTLST= 7615 /I/O ZAP ORIGINAL CONTENTS LIST CONINT= 0000 /EQUATED FROM CONSOLE OVERLAY! CONOFF= 0100 /EQUATED FROM CONSOLE OVERLAY! DEVWRD= 0104 /EQUATED FROM CONSOLE OVERLAY! DIR= 0015 /FIRST OF TWO USER DIRECTORY BLOCKS DOLBLK= 0040 /DEFAULT ASCII SCRATCH AREA ($) DSPBLB= 0024 /BLURB DISPLAY ROUTINE IN I/O OVERLAY DUMBLK= 0232 /DUMP SYSTEM BLOCK DUMGEN= 2^10+6000 /DUMP GENERATION FIELD AND ADDRESS DUMLEN= 0007 /DUMP SYSTEM LENGTH DUMSTRT=1400 /DUMP STARTING ADDRESS ERRTRP= 0046 /EQUATED FROM CONSOLE OVERLAY! ESTATUS=0077 /EQUATED FROM CONSOLE OVERLAY! EXHGEN= 1^10+4000 /EXTENDED HANDLER GENERATION FIELD AND ADDRESS EXHRUN= 1^10+6000 /EXTENDED HANDLER INITIAL LOADING FIELD AND ADDRESS EXIGEN= 1^10+3400 /EXTENDED HANDLER INITIALIZE GENERATION FIELD, ADDRESS EXIRUN= 0^10+5400 /EXTENDED HANDLER INITIALIZE LOADING FIELD, ADDRESS EXTCAT= 0067 /EXTENDED CATALOG BLOCK EXTLEN= 0003 /LENGTH OF EXTENDED USER CATALOG FILBEG= 3000 /FILE BUFFER FILBLB= 0023 /BLURB FILL ROUTINE IN I/O OVERLAY FILSIZE=0020 /LENGTH OF USER FILE FIND= 1200 /STARTING ADDRESS OF FIND SYSTEM FNDGEN= 2^10+2000 /FIND/CHANGE GENERATION FIELD AND ADDRESS FUDWRD= 0105 /EQUATED FROM CONSOLE OVERLAY! GET= 0600 /STARTING ADDRESS OF GET SYSTEM HANDBLK=0122 /HANDLER INFORMATION BLOCK HANDMAX=0040 /NUMBER OF BLOCKS ALLOCATED FOR HANDLER IMAGES HBLOCK= 0101 /FIRST INITIALIZATION BLOCK IN EXTENDED SYSTEMS HIDWRD= 7600 /SYSTEM HANDLER ID NUMBER WORD IBLOCK= 0060 /I BLOCK IGEN= 2^10+4000 /I GENERATION FIELD AND ADDRESS INCON= 0031 /EQUATED FROM CONSOLE OVERLAY! INFLAG= 0025 /EQUATED FROM CONSOLE OVERLAY! INTFLGS=0002 /EQUATED FROM CONSOLE OVERLAY! INTLST= 0003 /EQUATED FROM CONSOLE OVERLAY! IOTRAP= 0045 /EQUATED FROM CONSOLE OVERLAY! IOWAIT= 0047 /EQUATED FROM CONSOLE OVERLAY! JMPIC= JMP I . /CURRENT PAGE JUMP INDIRECT DEFINITION KEPRADX=0040 /"KEEP CURRENT RADIX" BIT LCMODE= 0006 /EQUATED FROM CONSOLE OVERLAY! LINFLAG=0030 /EQUATED FROM CONSOLE OVERLAY! LOWBLK= 0201 /LOWEST BLOCK FOR USER CATALOG LPMODE= 0004 /EQUATED FROM CONSOLE OVERLAY! LPTFLAG=0027 /EQUATED FROM CONSOLE OVERLAY! MOVBLB= 0022 /ERROR BLURB MOVE ROUTINE IN I/O OVERLAY NL0001= CLA IAC /SET AC TO ONE NL0002= CLA CLL CML RTL /SET AC TO TWO NL2000= CLA CLL CML RTR /SET AC TO TWO THOUSAND NL3777= CLA CLL CMA RAR /SET AC TO THREE SEVEN SEVEN SEVEN NL4000= CLA CLL CML RAR /SET AC TO FOUR THOUSAND NL5777= CLA CLL CMA RTR /SET AC TO FIVE SEVEN SEVEN SEVEN NL7775= CLA CLL CMA RTL /SET AC TO SEVEN SEVEN SEVEN FIVE NL7776= CLA CLL CMA RAL /SET AC TO SEVEN SEVEN SEVEN SIX NL7777= CLA CMA /SET AC TO SEVEN SEVEN SEVEN SEVEN NOSCAN= 0100 /"DON'T SCAN FILENAMES" BIT ODSTRT= 3000 /ODT STARTING ADDRESS ODTBLK= 0163 /ODT SYSTEM BLOCK ODTGEN= 1^10+0000 /ODT GENERATION FIELD AND ADDRESS ODTLEN= 0016 /ODT SYSTEM LENGTH OUTFLAG=0026 /EQUATED FROM CONSOLE OVERLAY! OUTLPT= 0035 /EQUATED FROM CONSOLE OVERLAY! OUTCON= 0033 /EQUATED FROM CONSOLE OVERLAY! OVID= 0106 /EQUATED FROM CONSOLE OVERLAY! OVRWRD= 0111 /EQUATED FROM CONSOLE OVERLAY! REVISIO="Z&77 /REVISION NUMBER OF MONITOR RUBBLK= 0017 / BLOCK RUBPAGE=7400 /WHERE CODE, ETC. IS LOADED RUNBLK= 0072 /"R" BLOCK NUMBER RUNGEN= 2^10+0000 /"R" COMMAND GENERATION FIELD AND ADDRESS RUNLEN= 0004 /"R" LENGTH SBOOT= 7600 /SYSTEM BOOTSTRAP ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP UNIT WORD SFILES= 7757 /FILE ARGUMENTS PASSED TO SYSTEMS STARTING HERE SLOAD= 7632 /SYSTEM LOADER CALL IS HERE SLPBLK= 0100 /SLURP LOADER BLOCK SLPGEN= 2^10+4400 /SLURP LOADER GENERATION FIELD AND ADDRESS SLUPAGE=BINLEN^200 /SLURP LOADER PAGE IN BIN SOUTFLS=7607 /OUTPUT FILE COUNT SPARM= 7756 /SYSTEM EQUALS PARAMETER ADDRESS START= 0400 /STARTING ADDRESS OF START SYSTEM SWAL= 7604 /PASSED SWITCHES /A-/L SWAPIN= 1200 /ADDRESS TO SWAP CODE INTO SWMX= 7605 /PASSED SWITCHES /M-/X SWY9= 7606 /PASSED SWITCHES /Y-/9 SWPLEN= 0004 /PAGE SWAP COUNT FOR EXTENDED COMMAND PROCESSOR SYSCAT= 0063 /SYSTEM CATALOG BLOCK SYSCGEN=2^10+5000 /SYSTEM CATALOGUE GENERATION FIELD AND ADDRESS SYSLEN= 0004 /LENGTH OF SYSTEMS CATALOGUE TCSIZE= 2702 /SIZE OF DEFAULT SYSTEM I/O DEVICE TRAPIO= 1041 /I/O TRAP ENTRY POINT IN HANDLER AUXILIARY CODE TRPBLK= 0113 /I/O TRAP BLOCKS TRPERR= 1200 /I/O ERROR TRAP ENTRY POINT IN AUXILIARY HANDLER CODE TRPGEN= 2^10+1000 /I/O TRAP GENERATION FIELD AND ADDRESS TTY= 0003 /DEVICE CODE OF MONITOR KEYBOARD DEVICE VERSION="8&77 /VERSION NUMBER OF SYSTEM VTMODE= 0005 /EQUATED FROM CONSOLE OVERLAY! WAITIO= 1110 /AUXILIARY HANDLER CODE ENTRY POINT FOR I/O WAIT TRAPS WRITE= 4000 /SYSIO WRITE BIT XCMBLK= 0061 /EXTENDED COMMAND PROCESSOR BLOCK XCMGEN= 2^10+1400 /EXTENDED COMMAND GENERATION FIELD AND ADDRESS XIOMON= 0102 /EQUATED FROM CONSOLE OVERLAY! ZAPLST= 7627 /ZAP LIST FOR ZAPPED ADDRESSES IN HANDLER / DEPENDENT DEFINITIONS. KEYCODE=TTY^10+6000 /SKELETON KEYBOARD CODE PRTCODE=TTY+1^10+6000 /SKELETON PRINTER CODE KRBIOT= KEYCODE+6 /LOAD AC WITH CHARACTER, CLEAR FLAG, START READER KSFIOT= KEYCODE+1 /SKIP ON KEYBOARD FLAG TFLIOT= PRTCODE+0 /SET TELEPRINTER FLAG TLSIOT= PRTCODE+6 /LOAD PRINTER BUFFER, CLEAR FLAG, START PRINT CYCLE TSFIOT= PRTCODE+1 /SKIP ON TELEPRINTER FLAG / MEMORY LAYOUT OF THE P?S/8 STARTER SYSTEM. / BLOCK GENERATION CORE LOADING CORE MAJOR SYSTEM FUNCTION / N. A. 06600-07377 N. A. SYSTEM GENERATION ROUTINES / 000 07400-07577 07600-07777 BOOTSTRAP, SYSTEM I/O, ETC. / 001-013 00000-02577 00000-02577 KEYBOARD MONITOR / 014 02600-02777 02600-02777 THE "EDIT" COMMAND / 015-016 01000-01377 07000-07377 USER CATALOG / (03000-03377) / 017 03000-03177 07400-07577 TTY: EDITING FEATURES, ETC. / (03400-03577) / 020-037 N. A. N. A. "%" SCRATCH FILE / 040-057 N. A. N. A. "$" SCRATCH FILE / 060 24000-24177 N. A. /I BLOCK / 061-062 21400-21777 01200-01577 EXTENDED COMMAND PROCESSOR / 063-066 25000-25777 03000-03777 SYSTEMS CATALOG / (01600-02177) / 067-071 01000-01577 04000-04577 EXTENDED USER'S CATALOG / 072-075 20000-20777 04600-05577 "R", "RU" COMMAND PROCESSOR / 076-077 N. A. N. A. RESERVED FOR EXPANSION / 100 24400-24577 02600-02777 SLURP LOADER BLOCK / (07600-07756) / (00031-00050) / 101-102 13400-13777 05400-05777 EXTENDED HANDLER INITIALIZATION / 103-112 14000-15777 16000-17777 EXTENDED HANDLER CODE / 113-114 21000-21377 (RELOCATABLE) I/O HANDLER TRAP BLOCKS / 115 24200-24377 03000-03177 BATCH RECOVERY BLOCK / 116 N. A. 02600-02777 ACTIVE COPY OF BATCH SAVED IN THIS BLOCK / (3200-3377) / 117 N. A. 07400-07577 LAST BATCH BUFFER SAVED IN THIS BLOCK / (3400-3577) / 120 N. A. 07600-07777 SYSTEM I/O, SWITCHES, FILES SAVED HERE / (3600-3777) / 121 N. A. 00000-00177 PAGE ZERO USER SETTINGS SAVED HERE / (4000-4177) / 122 N. A. N. A. RESERVED FOR HANDLER INFORMATION / 123-162 N. A. N. A. RESERVED FOR HANDLERS / 163-200 10000-13377 00000-03377 ODT SYSTEM / 201 03400-03577 07400-07577 BATCH SYSTEM ONCE-ONLY CODE / 202 03600-03777 02600-02777 BATCH CODE / 203-215 04000-06577 00000-02577 BIN/GET/START SYSTEM / 216-231 N. A. N. A. SCRATCH AREA FOR VIRTUAL LOADER / 232-240 26000-27577 00000-01577 DUMP SYSTEM / 241-243 22000-22577 01200-01777 CHANGE/FIND SYSTEM / 244 N. A. N. A. FIRST FREE BLOCK FOR USER CATALOG *0 IFNZRO . UNIT, 0 /UNIT NUMBER FOR UNITIO; MAY BE CHANGED BY BOOTSTRAP TPTR1, JMP I L7600/[SBOOT] /BOOTSTRAP ON POWER RESTART OR INTERRUPT FNAME, 7700; SETPCS; 0 /DEFAULT FILE NAME; AVAILABLE AT STARTUP TIME PSETPCS=.-2 /POINTER FOR STARTUP CORE SIZING ROUTINE L3, 3 /USED TO TERMINATE FNAME; MUST BE LESS THAN 0100 L100, /CONSTANT 0100 PTEMP1, TEMP1 /POINTER TO TEMP1 TPTR2, -10 /TEMPORARY; INITIALIZED FOR BOOTSTRAP TTY: TIMEOUT *10 /DEFINE AUTO-INDEX AREA L2, 2 /CONSTANT 0002; MUST BE POSITIVE! L7741, 7741 /CONSTANT 7741 L7766, 7766 /CONSTANT 7766 L7772, 7772 /CONSTANT 7772 L7774, 7774 /CONSTANT 7774 RADXSW, -12 /RADIX SWITCH XR1, FILBEG-1 /AUTO-INDEX NUMBER ONE; INITIALIZED FOR STARTUP XR2, CATADR-1 /AUTO-INDEX NUMBER TWO; INITIALIZED FOR STARTUP *20 /GET PAST AUTO-INDEX AREA IFNZRO 20-. CHAR, VERSION^100+REVISION /INPUT BUFFER; ALSO USED AS A TEMPORARY BY SOME BUFEND, FILBEG+3775 /FILE BUFFER BUFINFO,FILBEG+3774 /POINTERS DIREND, CATADR+377 /POINTER TO DIRECTORY END ECHOSW, 0 /ECHO SWITCH FIZZ1, FILBEG+3776 /FILE LINE NUMBER POINTER GETNDX, .-. /DON'T MOVE THIS UNLESS YOU KNOW WHY FIZZ2, FILBEG+3777 /FILE TEXT POINTER FLIPECH,ECHOFLP /POINTER TO ECHO FLIPPER GETBASE,0 /GET HALFWORD BASE; INITIALIZED FOR SIZE-UP ROUTINE GLINE, XGLINE /GET A LINE OF INPUT ROUTINE INPUT, TTYR /MASTER INPUT POINTER L7757, 7757 /CONSTANT 7757 PCMDSUB,CMDSUB /POINTER TO COMMAND SUBROUTINE SLINUM, .-. /STARTING LINE NUMBER UNITIO, 4 /UNIT FIXUP I/O ENTRY; INITIALIZED FOR ONCE-ONLY CODE IFNZRO 40-. L7770, 7770 /CLA WITH HARMLESS SKIP (MAYBE) L15, 15 /HARMLESS AND TO PROTECT SKIP TAD UNITIO /STORE CALLING ADDRESS DCA I SSYSIO/[SYSIO] /IN REAL ENTRY POINT ISZ UNITIO /BUMP TO FUNCTION WORD TAD I UNITIO /GET FUNCTION WORD L40, AND L7770/[7770] /NO UNIT BITS L1000, /CONSTANT 1000 PR6BIT, TAD UNIT /ADD ON CURRENT UNIT DCA I UNITIO /PUT BACK IN FUNCTION WORD JMP I PRELIO/[SYSIO+1]/NOW DO REAL I/O BEGLINE,INPBUF /INPUT BUFFER POINTER EDLIN, .-. /EDIT COMMAND TEMPORARY; USED BY STARTUP ROUTINES NAME, XNAME /POINTER TO NAME ROUTINE PTTYR, TTYR /POINTER TO TTY: INPUT TABCNT, 0 / STOP COUNTER WHATMOR,XWHATMORE /POINTER TO WHATMORE ENTRY IFNZRO 60-. PUTNDX, SETPMORE /PUT HALFWORD INDEX; INITIALIZED FOR STARTUP LIMITS, XLIMIT /POINTER TO LIMITS CHECK LINENO, XLINENO /POINTER TO LINE NUMBER ROUTINE L12, 12 /CONSTANT 0012 L37, 37 /CONSTANT 0037 L7756, 7756 /CONSTANT 7756 NAMPRT, XPRTNAM /NAME PRINT ROUTINE OLDRAD, -12 /OLD RADIX OLDUNIT,.-. /OLD UNIT PBEGIN, BEGIN /POINTER TO BEGINNING PSLOAD, SLOAD /POINTER TO SYSTEM LOADER RST, SCMORE /EXTENDED COMMAND OVERLAY ADDRESS; MODIFIED BY BATCH TABSW, 0 / SWITCH TAPREC, .-. /TAPE BLOCK TEMPORARY TUNIT, XTUNIT /POINTER TO :UNIT TEST ROUTINE LOOKSW, 0 /LOOKUP CREATE/COMPLAIN SWITCH; DON'T MOVE THIS IFNZRO 100-. TEMP1, 177 /TEMPORARY; INITIALIZED FOR STARTUP ROUTINES TEMP2, -3 /TEMPORARY; INITIALIZED FOR STARTUP ROUTINES TEMP3, .-. /TEMPORARY L77, TEMP1-1 /PUT THIS AFTER TEMP3 TO TERMINATE GETHAF, XGETHAF /POINTER TO GET A HALFWORD ROUTINE L200, /CONSTANT 0200 LNOPRT, XLNOPRT /POINTER TO LINE NUMBER PRINT ROUTINE LNSRCH, XLNSRCH /LINE NUMBER SEARCH ROUTINE PRINT, XPRINT /POINTER TO PRINT ROUTINE TSPACE, XTSPACE /POINTER TO TEST FOR (OR ) WHAT, XWHAT /POINTER TO WHAT MESSAGE PRINTER IFNZRO 112-. MESSAGE,GETBASE /MESSAGE PRINT ROUTINE; INITIALIZED FOR STARTUP L7600, 7600 /CLEAR AC WITH CONSTANT DCA ECHOSW /FORCE ECHO ON SCRIB1, TAD MESSAGE /GET POINTER TO STRING DCA I SCRIBE/[XSCRIBE] /MAKE THINGS LOOK LIKE JMS JMP I SCRIB1/[SCRIBE+1] /AND GO TO WORK SEQSW, 0 /AUTOMATIC NUMBERING SWITCH SWAPSW, 0 /EXTENDED COMMAND OVERLAY SWAP SWITCH IFNZRO 122-. TCNT1, -600 /COUNT TEMPORARY; INITIALIZED FOR STARTUP COLUMN, .-. /COLUMN COUNTER INCHAR, .-. /KEYBOARD INPUT BUFFER PINSERT,INSERT /POINTER TO INSERT ROUTINE PLRST, XGLINE+1 /POINTER TO GLINE RESTART PMOVE, MOVE /POINTER TO MOVE ROUTINE PRELIO, SYSIO+1 /FIRST REAL INSTRUCTION WITHIN I/O ROUTINES PUTBASE,.-. /PUT HALFWORD BASE ADDRESS PUTHAF, XPUTHAF /PUT A HALFWORD ROUTINE TCNT2, .-. /COUNT TEMPORARY NEWCAT, -7 /NEW CATALOG ROUTINE; INITIALIZED FOR STARTUP JMS I TUNIT/[XTUNIT] /TEST FOR :UNIT L7740, SMA SZA CLA /NONE FOUND JMS I PLODCAT/[LODCAT] /:UNIT FOUND, GET A NEW CATALOG LOADED JMP I NEWCAT /RETURN RESET, .-. /RESET ROUTINE FOR CERTAIN CONTROL CHARACTERS DCA ECHOSW /FORCE ECHO ON DCA SEQSW /FORCE SEQUENCE MODE OFF JMS I RESMORE /DO ANY ADDITIONAL STUFF RESEND, .-. /NORMAL RESET ENDING ROUTINE JMP I RESET /RETURN TO ORIGINAL CALLER RESMORE,RESEND /**** EDIT MODE **** EDCANCEL CATCORE,CATADR /CATALOG POINTER DOLLSW, 0 /"$" FILE STATUS WORD; 1=WRITE $ LINLEN, INPBUF&177+7600^2 /INPUT BUFFER LENGTH IN CHARACTERS LNO, .-. /LINE NUMBER TEMPORARY LOOKUP, XLOOKUP /POINTER TO LOOKUP ROUTINE LOWLIM, .-. /LOWER LIMIT L11, 11 /CONSTANT 0011 L6, 6 /CONSTANT 0006 L7761, 7761 /CONSTANT 7761 PBUTIO, BUTIO /POINTER TO BOOTSTRAP UNIT-ORIENTED I/O ROUTINES PCHLOOP,CHLOOP /POINTER TO CHLOOP PCTRLPR,CTRLPRT /POINTER TO CONTROL-CHARACTER PRINT ROUTINE PFILNAM,FILNAME /POINTER TO FILENAME ROUTINE PLODCAT,LODCAT /LOAD A NEW CATALOG ROUTINE PROMPT, ".&177 /PROMPT CHARACTER PSBTFUN,SBTFUN /POINTER TO BOOTSTRAP UNIT WORD PSCRSIZ,SCRSIZE /POINTER TO CORE SIZE WORD SCRIBE, XSCRIBE /POINTER TO SCRIBE ROUTINE SSYSIO, SYSIO /SYSTEM I/O ENTRY POINT UPLIM, .-. /UPPER LIMIT L10, 10 /CONSTANT 0010 ZBLOCK 177-. /EMPTY SPACE IFNZRO 177-. L7, 7 /CONSTANT 0007 IFNZRO 200-. XLNOPRT,JMP I XLINENO /FOR GENASYS DCA XLINENO /SAVE NUMBER TAD BEGLINE/[INPBUF]/POINT TO THE DCA PUTBAS /INPUT BUFFER L60I, DCA PUTNDX /CLEAR OUTPUT INDEX NL7775 /INITIALIZE COUNT TO DCA UNITIO /PRINT FOUR DIGITS DIVLUP, DCA I TUNIT/[XTUNIT] /ZERO QUOTIENT TAD UNITIO /COPY THE DCA TEMP1 /COUNT NL7777 /ASSUME RADIX^0 DIVLP2, DCA TSTINT /SAVE IT TAD RADXSW /\ DCA NEWCAT / \ TAD TSTINT / >MULTIPLY BY RADIX ISZ NEWCAT / / JMP .-2 // ISZ TEMP1 /RAISE TO A HIGHER POWER? JMP DIVLP2 /SEE IF WE RAISE AGAIN DCA TSTINT /SET DIVISOR JMP .+3 /JUMP INTO IT PRTDIG, DCA XLINENO /CLEAR OR SAVE REMAINDER ISZ I TUNIT/[XTUNIT] /BUMP QUOTIENT TAD TSTINT /SUBTRACT A POWER CLL /CLEAR LINK FOR TEST TAD XLINENO /ADD ON REMAINDER SZL /SKIP IF IT UNDERFLOWED JMP PRTDIG /GO DO IT AGAIN MNUM, -"0!200 /CONSTANT 7720; THIS CLEARS THE AC L7700A, 7700 /CONSTANT 7700; THIS CAN'T SKIP TAD I TUNIT/[XTUNIT] /GET QUOTIENT SZA /TEST FOR LEADING ZEROES JMP .+4 /JUMP IF SIGNIFICANT DIGIT ZROFIL, TAD L40/[" &177] /\ JMS I PINSERT/[INSERT]/ >BLANK LEADING ZEROS JMP .+4 // TAD L60I/("0&177) /MAKE IT ASCII JMS I PINSERT/[INSERT]/NOW INSERT INTO BUFFER NL4000 /FORCE SIGNIFICANCE ISZ UNITIO /ANY DIGITS LEFT? JMP DIVLUP /YES...GO GET EM TAD XLINENO /GET LAST DIGIT TAD L60I/("0&177) /MAKE IT ASCII JMS I PINSERT/[INSERT]/PUT IT IN TAD L37/[37] /GET A JMS I PINSERT/[INSERT]/INSERT AND PRINT JMP I XLNOPRT /RETURN XLINENO,GENASYS /INITIALIZED FOR GENASYS PURPOSES ONLY JMS I TSPACE/[XTSPACE]/THROW AWAY ANY BLANKS JMS TSTINT /GO FIND A DIGIT JMP I XLINENO /NONE FOUND JUST RETURN LINUM1, DCA XLNOPRT /SAVE IT ISZ GETNDX /BUMP INDEX JMS TSTINT /TRY TO FIND ANOTHER JMP LINUM2 /NO CAN DO DCA TEMP1 /SAVE TEMPORARILY TAD RADXSW /SETUP TO MULTIPLY DCA UNITIO /BY RADIX CLL /CLEAR MAGIC LINK TAD XLNOPRT /\ SZL / \ JMP I WHAT/[XWHAT] / >MULTIPLY BY RADIX AND TEST FOR OVERFLOW ISZ UNITIO / / JMP .-4 // TAD TEMP1 /ADD DIGIT SNL /TEST FOR OVERFLOW JMP LINUM1 /IF NONE THEN GET NEXT DIGIT JMP I WHAT/[XWHAT] /ERROR IF OVERFLOWED LINUM2, NL7777 /INDICATE ONLY ONCE ALLOWED JMS I TSPACE/[XTSPACE]/IS CHARACTER A OR ? TAD XLNOPRT /GET NUMBER CMA /TEST FOR 7777 SNA /SKIP IF NOT JMP I WHAT/[XWHAT] /ERROR IF IT IS STL CMA /RESTORE NUMBER, SET LINK=1 ISZ XLINENO /BUMP RETURN ADDRESSS TO DO A JMP I XLINENO /SKIP RETURN TSTINT, .-. /TEST IF INTEGER JMS I GETHAF/[XGETHAF]/GET THE CHARACTER TAD MNUM/(-"0!200) /REMOVE ZONE BITS STL /INITIALIZE TEST TAD RADXSW /COMPARE TO CURRENT LIMIT SNL CLA /SKIP IF LEGAL JMP I TSTINT /FAIL RETURN JMS I GETHAF/[XGETHAF]/GET THE CHARACTER BACK TAD MNUM/(-"0!200) /WITHOUT ASCII ZONE BITS ISZ TSTINT /BUMP FOR JMP I TSTINT /SKIP RETURN / COMES HERE ON ERROR. XWHAT, JMS MESSAGE /TELL THEM WHATMG /THEY GOOFED XWHATMO,JMP I PBEGIN/[BEGIN] /RESTART JMP I L7600/[SBOOT] /GETS HERE IF ERRORS SHOULD BOOTSTRAP RUNGO, JMS I PBUTIO/[BUTIO] /READ IN SYSTEM'S EXTENDED COMMAND OVERLAY SWAPIN /START LOADING HERE SWPLEN^100 /UNIT BITS WILL BE FILLED IN XCMBLK /EXTENDED COMMAND RESIDES ON THIS BLOCK JMP I .-3/(SWAPIN) /GO START IT UP MOVE, TRYNXT /MOVE ROUTINE; INITIALIZED FOR STARTUP DCA TCNT1 /SAVE NUMBER OF WORDS TO MOVE NL7777 /\ TAD I MOVE / \SETUP AUTO-INDEXED ISZ MOVE / /"FROM" POINTER DCA XR1 // NL7777 STL /\ TAD I MOVE / \SETUP AUTO-INDEXED ISZ MOVE / /"TO" POINTER DCA XR2 // MONSTRT,TAD I XR1 /FETCH DCA I XR2 /STORE ISZ TCNT1 /TEST JMP .-3 /LOOP JMP I MOVE /RETURN WITH CLEAR LINK XPUTHAF,.-. /PUT A HALF-WORD ROUTINE DCA CHAR /SAVE THE PASSED VALUE TAD PUTNDX /GET HALF-WORD INDEX CLL RAR /SHIFT WHICH HALF BIT INTO LINK TAD PUTBASE /ADD BASE TO INDEX/2 DCA MOVE /SAVE POINTER TAD I MOVE /GET BOTH CURRENT HALF-WORDS AND L7700A/(7700) /RETAIN EVEN HALF IN CASE WE NEED IT TAD CHAR /PUT LATEST INTO LOW-ORDER HALF SZL /SKIP IF EVEN HALF BEING STORED JMP .+4 /ELSE LEAVE IT ALONE STL RTL;STL RTL;STL RTL /SHIFT LEFT WITH GARBAGE DCA I MOVE /STORE BACK JMP I XPUTHAF /RETURN PAGE NEWBUF, TAD BUFBEG/(FILBEG) /\ DCA I FIZZ1/[FILBEG+3776] / \RESET THE TWO TAD BUFINFO/[FILBEG+3774] / /FILE POINTERS DCA I FIZZ2/[FILBEG+3777] // TAD BUFBEG/(FILBEG) /\ DCA I BUFINFO/[FILBEG+3774] / \CREATE AN INITIAL LINE NL7777 / /INFORMATION ENTRY DCA I BUFEND/[FILBEG+3775] // JMS CLEAR /CLEAR BUFFER PLRTN, TAD L7/["G&37] /DING-DONG JMS I PRINT/[XPRINT] /AVON CALLING JMP I PBEGIN/[BEGIN] /BEGIN TO DO SOME WORK SCRATCH,JMS I GETHAF/[XGETHAF] /GET NEXT CHARACTER SNA CLA /SKIP IF NOT JMP NEWBUF /DO WHOLE SCRATCH IF NO ARGUMENTS JMS I LIMITS/[XLIMIT] /LOOK FOR VALID LIMITS JMP I WHAT/[XWHAT] /FORGET IT JMS REMOVE /DELETE SPECIFIED LINE OR SECTION JMP PLRTN /GO RING THE AND KEEP GOING / COMES HERE IF MONITOR WAS SWAPPED OUT FOR EXTENDED EXECUTION PROCESSOR. SWAPIT, TAD OLDUNIT /RESTORE BUFBEG, DCA UNIT /TAPE UNIT TAD OLDRAD /RESTORE DCA RADXSW /RADIX JMS I PBUTIO/[BUTIO] /\ SWAPIN / \RESTORE SWAPPED SWPLEN^100 / /PART OF MONITOR SWAPIN%200+1 // DCA SWAPSW /CLEAR SWAP SWITCH SKP /DON'T TEST FOR UNIT AGAIN SYS, JMS I TUNIT/[XTUNIT] /TEST FOR ":UNIT" NOP /DON'T CARE JMS I PLODCAT/[LODCAT] /LOAD IN NEW CATALOG BEGIN, TAD SWAPSW /IS MONITOR SWAPPED OUT? SZA CLA /SKIP IF NOT JMP SWAPIT /JUMP IF SO JMP I PBEGN0/(BEGIN0) /CONTINUE THERE XGETHAF,.-. /GET A HALF-WORD ROUTINE TAD GETNDX /GET HALF-WORD INDEX CLL RAR /SHIFT WHICH HALF BIT INTO LINK TAD GETBASE /ADD BASE TO INDEX/2 DCA LODCAT /SAVE POINTER TAD I LODCAT /GET BOTH HALVES SZL /SKIP IF EVEN HALF WANTED JMP .+4 /ELSE LEAVE IT ALONE RTR;RTR;RTR /GET EVEN HALF AND L77/[77] /JUST SIX BITS JMP I XGETHAF /RETURN LODCAT, .-. /LOAD A CATALOG ROUTINE JMS UNITIO /\ CATADR / \READ IN USERS CATALOG 2^100 / /INTO CATALOG AREA DIR // JMP I LODCAT /RETURN CLEAR, .-. /CLEAR CORE ROUTINE TAD I FIZZ2/[FILBEG+3777] /\ CIA / \ TAD I FIZZ1/[FILBEG+3776] / \COMPUTE AND TEST LENGTH SNA / /OF UNUSED SECTION JMP I CLEAR / / DCA TCNT1 // NL7777 /\ TAD I FIZZ1/[FILBEG+3776] / >SETUP POINTER DCA XR1 // DCA I XR1 /\ ISZ TCNT1 / >CLEAR IT JMP .-2 // JMP I CLEAR /RETURN IFNZRO .&7600-400 XTSPACE,7777 /CHECK FOR OR ; CHECKED BY BATCH DCA REMOVP /SAVE PASSED COUNT JMS I GETHAF/[XGETHAF] /GET NEXT CHARACTER TAD L7740/[-" !200] /IS IT A ? SZA /SKIP IF IT IS IAC /IS IT ? SZA CLA /SKIP IF OR JMP I XTSPACE /RETURN ISZ GETNDX /THROW IT AWAY ISZ REMOVP /DONE ENOUGH? JMP XTSPACE+2 /NO, GO BACK JMP I XTSPACE /RETURN REMOVE, .-. /REMOVE A LINE ROUTINE NL7776 /\ TAD UPLIM / >POINTER TO LINE INFORMATION AFTER UPPER LIMIT DCA TPTR1 // TAD I TPTR1 /\ DCA REMOVP / \SET UP POINTERS TO "FROM" TAD I LOWLIM / /AND "TO" POINTERS DCA REMOVP+1 // TAD I FIZZ1/[FILBEG+3776] /\ CMA / >COMPUTE LENGTH OF MOVE TAD I TPTR1 // JMS I PMOVE/[MOVE] /\ REMOVP, .-. / >MOVE THE TEXT DOWN .-. // TAD XR2 /RESET FILES NEXT DCA I FIZZ1/[FILBEG+3776] /LINE POINTER TAD UPLIM /\ CIA / \ TAD I FIZZ2/[FILBEG+3777] / >LINE INFORMATION MOVE COUNT STL RAR / / DCA TCNT1 // TAD I TPTR1 /\ CIA / \COMPUTE RELOCATION FACTOR TAD I LOWLIM / /FOR INFORMATION WORDS DCA TEMP1 // REMOV1, TAD I TPTR1 /FETCH POINTER TO LINE TAD TEMP1 /ADD RELOCATION FACTOR DCA I LOWLIM /RESTORE POINTER TO LINE ISZ TPTR1 /BUMP "FROM" POINTER ISZ LOWLIM /BUMP "TO" POINTER TAD I TPTR1 /FETCH LINE NUMBER DCA I LOWLIM /RESTORE LINE NUMBER NL7775 /\ TAD TPTR1 / >ADJUST "FROM" POINTER DCA TPTR1 // NL7775 /\ TAD LOWLIM / >ADJUST "TO" POINTER DCA LOWLIM // ISZ TCNT1 /TEST FOR COMPLETION AND JMP REMOV1 /JUMP BACK NL0002 /\ TAD LOWLIM / >RESET FILES NEXT INFORMATION POINTER DCA I FIZZ2/[FILBEG+3777] // JMS CLEAR /CLEAR UNUSED SECTION JMP I REMOVE /RETURN PBEGN0, BEGIN0 /POINTER TO BEGIN0 PAGE HALT, HLT /HALT FOR NOW JMP I PBEGIN/[BEGIN] /CONTINUE THERE FILNAME,.-. /LOCATE FILE NAME ROUTINE DCA LOOKSW /SET LOOK SWITCH JMS I NAME/[XNAME] /IS THERE A NAME? JMP TRYDOL /NO BUT IT MIGHT BE "$" JMS NEWCAT /READ NEW CATALOG IF NECESSARY NL7775 /SET UP FOR THREE WORDS JMS I PMOVE/[MOVE] /MOVE THEM TEMP1 /FROM HERE FNAME /TO HERE TAD L3/[3] /SET BUMP FACTOR DCA TCNT1 /TO THREE WORDS TAD I DIREND/[CATADR+377] /FIND OUT WHERE USERS DCA TAPREC /FIRST FILE BEGINS TAD CATCORE/[CATADR] /POINT TO USER CATALOG JMS I LOOKUP/[XLOOKUP] /TRY TO FIND NAME JMP I FILNAME /RETURN TRYDOL, JMS I GETHAF/[XGETHAF] /GET THE CHARACTER TAD L7734/(-"$!200) /COMPARE TO "$" CLL RAR /MAKE "$" OR "%" COMPARE SZA CLA /SKIP IF EITHER JMP TRYOLD /NOT EITHER, TRY DEFAULT NAME SZL /SKIP IF "$" TAD L7760/(20-40) /ADD ON -20 IF "%" TAD L40/[40] /ADD ON 40 FOR "$" DCA I PRINT/[XPRINT] /SAVE IT FOR LATER ISZ GETNDX /BUMP TO NEXT CHARACTER JMS NEWCAT /READ NEW CATALOG IF NECESSARY JMS I TSPACE/[XTSPACE] /CHECK FOR A SPACE TAD L7700B/("?^100) /DESTROY THE DCA FNAME /DEFAULT NAME TAD I PRINT/[XPRINT] /FETCH BLOCK NUMBER OF "$" OR "%" FILE JMP I FILNAME /RETURN TRYOLD, JMS I GETHAF/[XGETHAF] /GET THE CHARACTER AGAIN SZA /SKIP IF TAD L7706A/(-":!200) /ELSE TRY ":" SZA CLA /SKIP IF EITHER JMP I WHAT/[XWHAT] /ELSE COMPLAIN NL7775 /SET UP TO MOVE THREE WORDS JMS I PMOVE/[MOVE] /MOVE THEM FNAME /FROM HERE TEMP1 /TO HERE JMP FILNAME+4 /TRY AGAIN ECHOFLP,.-. /ECHO FLIPPING ROUTINE NL4000 /\ TAD ECHOSW / >INVERT ECHO STATUS DCA ECHOSW // JMP I ECHOFLP /RETURN SAVCAT, .-. /SAVE A CATALOG ROUTINE JMS UNITIO /\ CATADR / \WRITE USER'S CATALOG 2^100+WRITE / /BACK ONTO HIS TAPE DIR // JMP I SAVCAT /RETURN XLOOKUP,.-. /LOOKUP ROUTINE DCA TPTR1 /SAVE POINTER TO CATALOG TAD I TPTR1 /\ SNA CLA / >TEST FOR END OF CATALOG JMP NOTFND // NL7777 /\ TAD TPTR1 / >SETUP AUTO-INDEXED POINTER TO FILE ENTRY DCA XR1 // TAD L77/[TEMP1-1] /SETUP AUTO-INDEXED DCA XR2 /POINTER TO NAME NL7775 /SET NAME LENGTH DCA TCNT2 /OF THREE WORDS TAD I XR1 /GET FILE WORD CIA /INVERT FOR TEST TAD I XR2 /COMPARE TO NAME WORD SZA CLA /SKIP IF IT MATCHES JMP NOTHIS /JUMP IF NOT ISZ TCNT2 /DONE ALL YET? JMP .-6 /NO, KEEP GOING TAD TAPREC /GET CORRESPONDING RECORD JMP I XLOOKUP /RETURN NOTHIS, TAD TAPREC /GET CURRENT RECORD TAD L20/(FILSIZE) /UPDATE TO NEXT FILE DCA TAPREC /STORE BACK TAD TPTR1 /GET CURRENT SEARCH POINTER TAD TCNT1 /ADD ON BUMP FACTOR JMP XLOOKUP+1 /GO DO IT AGAIN NOTFND, TAD TEMP1 /\ TAD L100/[-"?^100] / >CHECK FOR ASSUMED DEFAULT NAME SZA CLA // ISZ LOOKSW /DO WE CREATE AN ENTRY? JMP LOOKNG /NO... TAD I DIREND/[CATADR+377] /\ DCA TAPREC / >INITIALIZE POINTERS TAD CATCORE/[CATADR] // LOOKMT, DCA LOOKPT /RESTORE POINTER TAD LOOKPT /CHECK TAD I CATTOP/(CATADR+375) /FOR L7700B, SMA CLA /FULL JMP FULL /CATALOG TAD I LOOKPT /\ SZA / \ CMA / >BRANCH ON OR HOLE SNA CLA / / JMP SAVNAME // TAD TAPREC /\ TAD L20/(FILSIZE) / >ELSE BUMP BLOCK NUMBER DCA TAPREC // TAD LOOKPT /\ TAD TCNT1 / >BUMP POINTER AND JUMP BACK JMP LOOKMT // SAVNAME,NL7775 /\ JMS I PMOVE/[MOVE] / \MOVE THE FILE NAME TEMP1 / /INTO THE ENTRY LOOKPT, .-. // JMS SAVCAT /RESTORE USER'S CATALOG TAD TAPREC /FETCH BLOCK NUMBER JMP I XLOOKUP /RETURN LOOKNG, DCA ECHOSW /FORCE ECHO ON JMS I NAMPRT/[XPRTNAM] /\ TEMP1 / \ JMS MESSAGE / >PRINT FILE NAME, "NOT FOUND" AND RESTART NFMSG / / JMP I WHATMORE/[XWHATMO] // FULL, JMS MESSAGE /COMPLAIN OF FULMSG /NO ROOM AND FULLZAP,JMP I PBEGIN/[BEGIN] /RESUME MONITOR MODE /**** R COMMAND **** JMP I WHATMORE/[XWHATMORE] CATTOP, CATADR+375 /POINTER TO ABSOLUTE END OF CATALOG IFZERO .-1000&4000 UPCMSG, TEXT "^C" /"^C" MESSAGE L20, 20 /CONSTANT 0020; THIS TERMINATES UPCMSG L7706A, 7706 /CONSTANT 7706 L7734, 7734 /CONSTANT 7734 L7760, 7760 /CONSTANT 7760 PAGE IFNZRO 1000-. XPR6BIT,.-. /PRINT SIX-BIT ROUTINE L7440, SZA /SKIP ON NEW LINE CHARACTER JMP PR6BT1 /JUMP TAD L15/["M&37] /FETCH CARRIAGE RETURN JMS I PRINT/[XPRINT] /PRINT IT TAD L12/["J&37] /TAKE A JMS I PRINT/[XPRINT] /PRINT IT DCA COLUMN /RESET COLUMN JMP I XPR6BIT / RETURN PR6BT1, ISZ XPR6BIT /BUMP RETURN ADDRESS TAD L7741/[-37] / CHARACTER? SNA /NO...SKIP JMP PR6TAB /YES...GO TAB OUT AND L77/[77] /TRIM AND TAD L37/[37] /RESTORE TO 7-BIT ASCII JMS I PRINT/[XPRINT] /PRINT IT JMP I XPR6BIT /RETURN PR6TAB, TAD TABSW /FETCH SWITCHES CLL RAL /SAVE TTY: MODE TAD COLUMN /GET PRESENT COLUMN SPA /SKIP IF ENABLED NL7777 /FUDGE IF TURNED OFF IFNZRO .&177-GETNDX L177, AND L7/[7] /MODULO EIGHT TAD L7770/[-10] /NEGATIVE SPACES TO STOP DCA TABCNT /SAVE IT SZL /SKIP IF MOD33 JMP PR6TB1 /JUMP IF MOD35 TAD L40/[" &177] /FETCH A JMS I PRINT/[XPRINT] /PRINT IT ISZ TABCNT /SKIP IF STOP HAS BEEN REACHED JMP .-3 /ELSE JUMP BACK JMP I XPR6BIT /RETURN PR6TB1, TAD TABCNT /GET NEGATIVE COUNT ISZ TABCNT /SKIP IF COUNT EQUALS ONE TAD L7774/[-4] /ELSE ADD FUDGE STL RAR /SIGNED HALVE STL RAR /ONCE MORE TO QUARTER IT DCA TABCNT /NOW SAVE IT TAD L11/["I&37] /GRAB AN JMS I PRINT/[XPRINT] /OUTPUT IT ISZ TABCNT /SKIP IF ALL DONE JMP .-2 /ELSE OUTPUT A TAD COLUMN /GET CURRENT COLUMN TAD L10/[10] /ROUND UP AND L7770/[7770] /JUST STOP JMP PR6BT1-2 /GO LEAVE FROM THERE XTUNIT, .-. /TEST FOR UNIT CONSTRUCTION JMS I GETHAF/[XGETHAF]/\ TAD L7706/(-":!200) / \ SZA CLA / >TEST FOR ":" JMP I XTUNIT / / ISZ GETNDX // JMS I GETHAF/[XGETHAF]/\ TAD L7720/(-"0!200) / \ STL / \ TAD L7770/["0-"8] / \SET UP NEW UNIT SNL / /COMPLAIN IF BAD JMP I WHAT/[XWHAT] / / AND L7/[7] / / DCA UNIT // ISZ GETNDX /BUMP GET INDEX ISZ XTUNIT /BUMP RETURN ADDRESS JMS I TSPACE/[XTSPACE]/CHECK FOR A SPACE JMP I XTUNIT /RETURN L7706, -":!200 /CONSTANT 7706 L7720, -"0!200 /CONSTANT 7720 XPRTNAM,.-. /PRINT NAMES ROUTINE TAD XPRTNAM /PRETEND THAT WE DCA XSCRIBE /CAME INTO SCRIBE TAD L7440/(SZA) /SET SCRIBE FLAG DCA SCRIBR+1 /TO A SZA TAD L7772/[-6] /MAXIMUM OF SIX CHARACTERS SKP /SKIP XSCRIBE,.-. /SCRIBE OUTPUT ROUTINE IFNZRO 1112-. DCA XPRTNAM /SET MAXIMUM CHARACTER COUNT TAD I XSCRIBE /FETCH MESSAGE ADDRESS ISZ XSCRIBE /BUMP PAST POINTER DCA GETBASE /SET GET BASE POINTER DCA GETNDX /ZERO GET INDEX SCRIBR, JMS I GETHAF/[XGETHAF]/FETCH A SIX-BIT CHARACTER NOP /THIS IS THE SCRIBE FLAG JMS I PR6BIT/[XPR6BIT]/PRINT THE CHARACTER JMP SCRIBG /EXIT ON ISZ GETNDX /BUMP GET INDEX ISZ XPRTNAM /MAXIMUM CHARACTER TEST JMP SCRIBR /BACK FOR MORE SCRIBG, TAD CATCORE/[NOP] /RESET SCRIBE FLAG DCA SCRIBR+1 /TO A NOP JMP I XSCRIBE /RETURN XLNSRCH,.-. /SEARCH FOR LINE NUMBER DCA TEMP1 /SAVE LINE NUMBER DCA BUTIO /CLEAR LIMIT COUNTER TAD BUFEND/[FILBEG+3775] /POINTER TO FIRST ENTRY LSRLUP, DCA TPTR1 /SAVE POINTER TAD I TPTR1 /GET TEST NUMBER STL CIA /NEGATE AND SET MAGIC LINK TAD TEMP1 /ADD LINE NUMBER SNA /NOT IT ISZ XLNSRCH /SKIP RETURN IF FOUND SNA SZL CLA /SKIP IF NOT DONE JMP LSRFND /JUMP IF FOUND OR PASSED NL7776 /BACKUP THE TAD TPTR1 /SEARCH POINTER ISZ BUTIO /LOOKED TOO MANY TIMES? JMP LSRLUP /NO, KEEP GOING CLA CLL /CLEAN UP JMP I XLNSRCH /TAKE FAILURE RETURN LSRFND, NL7777 /BRING BACK POINTER TAD TPTR1 /TO LINE INFO >= REQUEST JMP I XLNSRCH /FOUND THEN L=1 ELSE L=0 BUTIO, .-. /BOOTSTRAP UNIT-ORIENTED I/O ROUTINES TAD BUTIO /GET OUR CALLER DCA I SSYSIO/[SYSIO] /MAKE IT THEIRS ISZ BUTIO /BUMP TO FUNCTION WORD TAD I PSBTFUN/[SBTFUN] /GET OUR BOOTSTRAP UNIT AND L7/[7] /JUST UNIT BITS DCA XLNSRCH /STORE FOR NOW TAD I BUTIO /GET FUNCTION WORD AND L7770/[7770] /REMOVE OLD UNIT BITS TAD XLNSRCH /ADD ON NEW ONES DCA I BUTIO /STORE BACK JMP I PRELIO/[SYSIO+1] /NOW START IT UP NFMSG, TEXT " NOT FOUND!" / THE FOLLOWING FOUR PAGES WILL BE SWAPPED OUT BY THE EXTENDED COMMAND CODE. PAGE IFNZRO .-1200 XGLINE, BEGIN1 /GET A LINE OF INPUT; INITIALIZED FOR RELOAD TAD BEGLINE/[INPBUF]/POINT PUTBASE TO DCA PUTBASE /BEGINING OF INPUT BUFFER GL60, DCA PUTNDX /ZERO INDEX TAD SEQSW /AUTO SEQUENCE MODE? L7640, SZA CLA /SKIP IF NO JMP NOPRMPT /JUMP IF YES TAD UNIT /GET CURRENT UNIT TAD GL60/("0&177) /MAKE IT ASCII NOUNPRM,CLA /**** ENABLED **** JMS I PRINT/[XPRINT] TAD PROMPT /TAKE A PERIOD (OR OTHER) JMS I PRINT/[XPRINT] /NOW PRINT IT JMP CTLKREM /NOW BYPASS NUMBER NOPRMPT,TAD SLINUM /GET LINE NUMBER JMS I LNOPRT/[XLNOPRT]/PRINT IT CTLKREM,TAD PUTNDX /SAVE FOR THE DCA EDLIN /<^K> COMMAND CHLOOP, JMS I INPUT /FETCH SEVEN-BIT ASCII CHARACTER DCA TEMP1 /PRESERVE CHARACTER TAD PCHTBL/(CHTBL-2)/TABLE POINTER JMS I PCMDSUB/[CMDSUB]/CALL LOOKUP ROUTINE TAD TEMP1 /RESTORE CHARACTER TAD L7640/(-140) /SEE IF LOWER CASE SMA /SKIP IF NOT TAD L7740/[-40] /CONVERT TO UPPER CASE TAD L101/(101) /RESTORE CHARACTER SPA SNA /SKIP IF GOOD CHARACTER SKP CLA /ELSE CLEAR AND SKIP NEXT TABCH, TAD L37/[37] /RESTORE CHARACTER AND L77/[77] /TRIM TO SIX-BIT SNA /SKIP IF VALID JMP I PCHLOOP/[CHLOOP]/ELSE IGNORE IT JMP I PNEXT /GO WHERE YOU SHOULD / COMES HERE IF IN NORMAL MODE. GOTCR, JMS I PINSERT/[INSERT]/INSERT INTO BUFFER AND PRINT JMP I PCHLOOP/[CHLOOP]/CONTINUE L101, 101 /CONSTANT 0101 PCHTBL, CHTBL-2 /POINTER TO CHARACTER TABLE PNEXT, GOTCR /POINTER TO NEXT ROUTINE; MODIFIED BY EDIT MODE CHTBL, -177; BACKSP / -137; BACKSP / -33; GOTESC / -"Z!300;EOSEQ /<^Z> -"U!300;DELETL /<^U> -"T!300;REW /<^T> -"R!300;REW /<^R> -"M!300;GOTCR / -"K!300;CTRLK /<^K> -"J!300;LFVIEW / -"I!300;TABCH / -"H!300;BACKSP / EDENABL,0; CTRLA /**** EDIT MODE **** -"A!300 <^A> -"F!300;SRCHX /<^F> -"G!300;NEWSCH / 0 /THIS TERMINATES THE LIST INSERT, .-. /INSERT A LINE ROUTINE AND L77/[77] /CLEAN UP HIGH ORDER BITS SNA /? JMP PUTCH /YES DCA CHAR /NO, SAVE IT TAD PUTNDX /GET CURRENT INDEX TAD LINLEN/[INPBUF&177+7600^2] /SEE IF LINE IS TOO LONG SMA CLA /SKIP IF NOT JMP I INSERT /IGNORE IT IF SO TAD CHAR /RETRIEVE CHARACTER PUTCH, JMS I PUTHAF/[XPUTHAF] /PUT CHARACTER INTO BUFFER TAD CHAR /GET IT AGAIN JMS I PR6BIT/[XPR6BIT] /NOW TRY TO ECHO IT JMP GLINGO /JUMP IF ISZ PUTNDX /BUMP INDEX JMP I INSERT /RETURN GLINGO, TAD PUTNDX /IS ANYTHING IN THE BUFFER? SNA CLA /YES... JMP I PLRST /NO... IGNORE NULL LINES TAD BEGLINE/[INPBUF] /\ DCA GETBASE / >SETUP GET POINTERS DCA GETNDX // JMP I XGLINE /RETURN / REWIND ROUTINE. 0 /EXTRA WORD FOR REWIND PURPOSES REWIND, ZBLOCK .!177-. /EMPTY SPACE JMP I PCHLOOP/[CHLOOP] /CONTINUE PAGE NUMNUM, .-. /GET NUMERICAL ARGUMENTS JMS I LINENO/[XLINENO] /\ TAD L144/(144) / >LOOK FOR LINE NUMBER DCA SLINUM // JMS I LINENO/[XLINENO] /\ TAD L12/[12] / >LOOK FOR ANOTHER ONE DCA SEQSW // JMP I NUMNUM /RETURN SEQ, JMS NUMNUM /SCAN ARGUMENTS JMP I PBEGIN/[BEGIN] /NOW GO USE THEM RESEQ, JMS NUMNUM /SCAN ARGUMENTS TAD BUFEND/[FILBEG+3775] /START WITH FIRST LINE NUMBER RESLUP, DCA TPTR1 /SAVE POINTER TO LINE NUMBER TAD I TPTR1 /FETCH NEXT LINE NUMBER CMA /\ SZA CLA / \ JMP .+3 / >IF 7777 THEN DONE DCA SEQSW / / JMP LAST // TAD SLINUM /ELSE SET IT TO A DCA I TPTR1 /NEW LINE NUMBER TAD SLINUM /\ TAD SEQSW / >BUMP LINE NUMBER DCA SLINUM // NL7776 /\ TAD TPTR1 / >BUMP POINTER AND JUMP BACK JMP RESLUP // LAST, TAD I BUFEND/[FILBEG+3775] /\ CMA / \IF NULL FILE SNA CLA / /THEN DO NOTHING JMP LASTCR // NL0002 /\ TAD I FIZZ2/[FILBEG+3777] / >POINT TO LAST ENTRY DCA XR1 // TAD I XR1 /GET LAST LINE NUMBER JMS I LNOPRT/[XLNOPRT] /PRINT IT OUT LASTCR, JMS I PR6BIT/[XPR6BIT] /DO A , JMP I PBEGIN/[BEGIN] /GO BACK FOR MORE R, JMP .+4 /**** ENABLED **** JMS I PBUTIO/[BUTIO] FILBEG /WRITE ACTIVE FILE FILSIZE^100+WRITE /IN "$":[BOOTSTRAP UNIT] DOLBLK /BEFORE DOING "R" JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES FILBEG /READ IN CATALOGUES AND CODE SYSLEN+EXTLEN+RUNLEN^100 /INTO FILE AREA SYSCAT /STARTING FROM SYSTEMS CATALOGUE JMP I .+1/(RSTART) /GO START IT UP RSTART /THROUGH HERE PUNCH, NL7777 /INDICATE PUNCH MODE LIST, DCA TEMP2 /SAVE MODE JMS I LIMITS/[XLIMIT] /TEST FOR VALID LIMITS JMP I PBEGIN/[BEGIN] /NO... FORGET IT LISLUP, TAD I LOWLIM /\ DCA LISTPT / >FETCH POINTER TO LINE ISZ LOWLIM // TAD TEMP2 /\ SZA CLA / >BYPASS IF IN PUNCH MODE JMP NOLNUM // TAD I LOWLIM /ELSE FETCH LINE NUMBER JMS I LNOPRT/[XLNOPRT] /AND PRINT IT NOLNUM, JMS I SCRIBE/[XSCRIBE] /NOW PRINT LISTPT, .-. /THE LINE NL7775 /\ TAD LOWLIM / >BUMP POINTER DCA LOWLIM // TAD UPLIM /GET UPPER LIMIT CIA /INVERT IT TAD LOWLIM /ADD ON LOWER LIMIT SPA CLA /SKIP IF NOT FINISHED JMP LASTCR /JUMP IF FINISHED JMP LISLUP /KEEP GOING TAB, JMS I LINENO/[XLINENO] /LOOK FOR A NUMBER JMP TABNO /IF NONE FOUND THEN SET NOFILL MODE SNA /IF ZERO JMP TABOFF /GO TURN OFF TAD L7773/(-5) /\ SNA / >IF 5 SET MOD35 JMP TAB35 // TAD L2/[-3+5] /\ SNA CLA / >IF 3 SET MOD33 JMP TABSET // JMP I WHAT/[XWHAT] /ELSE BARF TABNO, STL /ENTRY FOR NOFILL TAB35, NL0001 /ENTRY FOR MOD35 TABOFF, RTR /ENTRY FOR OFF TABSET, DCA TABSW /SET SWITCH JMP I PBEGIN/[BEGIN] /NOW RETURN ECHO, JMS I LINENO/[XLINENO] /SCAN FOR A NUMBER JMP ECHFLP /JUST FLIP IF NONE FOUND RAR /\ CLA RAR / >ON IF ODD, OFF IF EVEN DCA ECHOSW // ECHFLP, JMS I FLIPECHO/[ECHOFLP] /FLIP IT FROM WHAT IT WERE JMP I PBEGIN/[BEGIN] /RETURN TO O/S LEFT, TAD LF7764/(-14) /GET MESSAGE LENGTH JMS I SCRIBE/[XSCRIBE] /TELL THEM LEFMSG /OUR MESSAGE TAD I FIZZ1/[FILBEG+3776] /\ CIA / >COMPUTE WORDS LEFT TAD I FIZZ2/[FILBEG+3777] // CLL RAL /*2 FOR CHARACTERS JMS I LNOPRT/[XLNOPRT] /PRINT OUT THE NUMBER JMP LASTCR /FINISH IT THERE EOSEQ, JMS RESET /RESET ECHO AND CLEAR SEQUENCE MODE, ETC. JMS I SCRIBE/[XSCRIBE] /TELL THEM ZAPMSG /<^Z> MESSAGE JMP I PLRST /RESTART INPUT CMDSUB, .-. /LOOKUP ROUTINE DCA XR1 /STASH POINTER CMDLUP, ISZ XR1 /BUMP PAST ROUTINE ADDRESS TAD I XR1 /FETCH TRIAL SNA /SKIP IF GOOD JMP I CMDSUB /RETURN TAD TEMP1 /IS THIS IT? SZA CLA /SKIP IF YES JMP CMDLUP /BACK IF NO TAD I XR1 /GET ADDRESS DCA TPTR1 /SAVE IT JMP I TPTR1 /BRANCH TO IT L144, 144 /CONSTANT 0144 L7773, 7773 /CONSTANT 7773 LF7764, 7764 /LENGTH OF LEFMSG LEFMSG, TEXT "CHARACTERS: " PAGE CAT, JMS NEWCAT /READ NEW CATALOG IF NECESSARY TAD CATCORE/[CATADR] /SET UP POINTER DCA CATPTR /TO CATALOG CATLUP, TAD L7774/[-4] /SET COUNT TO DCA TCNT1 /FOUR NAMES PER LINE TAD I CATPTR /\ SNA / >TEST FOR END OF CATALOG JMP I CATEND/(LASTCR) // CMA /\ SNA CLA / >TEST FOR HOLE JMP CATHOLE // JMS I NAMPRT/[XNAMPRT] /PRINT FILE NAME CATPTR, .-. /POINTER STORED HERE CATGO, TAD L3/[3] /\ TAD CATPTR / >BUMP POINTER TO NEXT ENTRY DCA CATPTR // ISZ TCNT1 /IF LINE IS DONE THEN SKIP JMP .+3 /ELSE JUMP JMS I PR6BIT/[XPR6BIT] /DO A , JMP CATLUP /DO ANOTHER LINE TAD L37/[37] /GRAB A JMS I PR6BIT/[XPR6BIT] /PRINT IT HLT /THIS IS ALWAYS SKIPPED! JMP CATLUP+2 /CONTINUE LINE CATHOLE,JMS I NAMPRT/[XPRTNAM] /INDICATE EMPTY SLOT FREMSG / JMP CATGO /GO BACK FOR MORE CATEND, LASTCR /WHERE TO FINISH UP CATALOG COMMAND LOAD, JMS I PFILNAME/[FILNAME] /LOOK FOR FILE NAME DCA LODBLK /SAVE BLOCK NUMBER JMS UNITIO /\ FILBEG / \READ USER FILE FILSIZ^100 / /INTO CORE LODBLK, DOLBLK // JMP I PBEGIN/ BEGIN] /RETURN RADIX, TAD RADXSW /GET CURRENT RADIX DCA OLDRADIX /SAVE IT TAD L7766/[-12] /SETUP FOR DCA RADXSW /DECIMAL RADIX RIGHT NOW JMS I LINENO/[XLINENO] /IS ARGUMENT PRESENT? JMP RADFLP /NO, FLIP THE RADIX TAD L7766/[-12] /COMPARE TO DECIMAL VALUE SNA /SKIP IF OTHER JMP I PBEGIN/[BEGIN] /JUST GO BACK IF DECIMAL ASKED FOR TAD L2/[-10+12] /COMPARE TO OCTAL VALUE SZA CLA /SKIP IF IT MATCHES THAT JMP I WHAT/[XWHAT] /ELSE COMPLAIN OF BAD VALUE TAD L7766/[-12] /SETUP FOR CHANGE TO OCTAL SKP /DON'T USE CURRENT VALUE RADFLP, TAD OLDRADIX /GET OLD RADIX CIA /INVERT IT TAD L7756/[-12-10] /ADD ON MAGIC SUM DCA RADXSW /STORE NEW RADIX VALUE JMP I PBEGIN/[BEGIN] /GO BACK FOR MORE SAVE, NL7777 /SET CREATE FLAG JMS I PFILNAME/[FILNAME] /LOOK FOR FILE NAME OR CREATE DCA SAVBLK /SAVE BLOCK NUMBER JMS UNITIO /\ FILBEG / \SAVE THE USER'S FILSIZ^100+WRITE / /FILE ONTO TAPE SAVBLK, .-. // JMP I PBEGIN/[BEGIN] /RETURN DELETE, JMS I PFILNAME/[FILNAME] /LOOK FOR FILE NAME CLA /CLEAN UP TAD I XR1 /\ SZA CLA / \IF NEXT ENTRY IS ZERO THEN NL7777 / /ZERO THIS ONE ELSE SET TO "??" DCA I TPTR1 // JMS I PSAVCAT/(SAVCAT) /WRITE USERS CATALOG BACK JMP I PBEGIN/[BEGIN] /RETURN PLEASE, JMS I FLIPECHO/[ECHOFLP] /REVERSE ECHO JMS I SCRIBE/[XSCRIBE] /NOW MAYBE PRINT INPBUF /THE INPUT BUFFER JMS I FLIPECHO/[ECHOFLP] /RESTORE ECHO TAD L7/["G&37] /GRAB A JMS I PRINT/[XPRINT] /PRINT IT JMS I PTTYR/[TTYR] /WAIT FOR ANY CHARACTER JMP ENTER+2 /CLEAN UP THERE ENTER, NL7777 /SET CREATE FLAG JMS I PFILNAME/[FILNAME] /ENTER NAME IN CATALOG CLA /THROW IT AWAY JMP I PBEGIN/[BEGIN] /RETURN XLIMIT, .-. /ESTABLISH LINE LIMITS TAD BUFINFO/[FILBEG+3774] /ASSUME LOWER LIMIT DCA LOWLIM /TO BE FIRST LINE JMS I TSPACE/[XTSPACE] /THROW AWAY BLANKS AND TABS JMS I GETHAF/[XGETHAF] /\ TAD L7723/(-"-!200) / >TEST FOR DASH SNA CLA // JMP LIMIT1 /JUMP IF FOUND JMS I LINENO/[XLINENO] /TEST FOR LINE NUMBER JMP LIMIT1+2 /JUMP IF NOT FOUND JMS I LNSRCH/[XLNSRCH] /\ NOP / >GET POINTER TO LINE INFO DCA LOWLIM // CMA RAL /-1 IF IT EXISTS DCA TEMP1 /-2 IF IT DOESN'T JMS I TSPACE/[XTSPACE] /THROW AWAY AND JMS I GETHAF/[XGETHAF] /\ TAD L7723/(-"-!200) / >TEST FOR DASH SNA CLA // JMP LIMIT1 /JUMP IF FOUND ISZ TEMP1 /DID LINE EXIST? JMP I XLIMIT /NO...TAKE FAILURE EXIT TAD LOWLIM /YES...FUDGE UPPER LIMIT JMP LIMIT2 /SAME AS LOWER LIMIT LIMIT1, ISZ GETNDX /BUMP PAST DASH JMS I LINENO/[XLINENO] /TEST FOR LINE NUMBER NL7776 /IF NONE FOUND THEN ASSUME 7776 JMS I LNSRCH/[XLNSRCH] /GET POINTER TO LINE INFO TAD L2/[2] /+2 IF IT DOESN'T EXIST LIMIT2, DCA UPLIM /SAVE AS UPPER LIMIT TAD UPLIM /\ CIA / >IS RANGE POSITIVE? TAD LOWLIM // SMA CLA /SKIP IF NOT ISZ XLIMIT /ELSE SETUP SKIP RETURN JMP I XLIMIT /RETURN L7723, 7723 /CONSTANT 7723 PSAVCAT,SAVCAT /POINTER TO SAVE CATALOG ROUTINE FREMSG, TEXT "" TBMSG, TEXT "FILE FULL" PAGE BEGIN0, JMS I GLINE/[XGLINE] /GET A LINE OF INPUT BEGIN1, JMS I LINENO/[XLINENO] /IS THERE A LINE NUMBER? JMP COMAND /NOPE... ITS A COMMAND DCA LNO /YES... SAVE LINE NUMBER TAD SLINUM /\ TAD SEQSW / >INCREMENT LINE NUMBER DCA SLINUM // TAD LNO /GET LINE NUMBER JMS I LNSRCH/[XLNSRCH] /DOES IT EXIST? JMP NEWLIN /NO... CREATE IT DCA LOWLIM /\ TAD LOWLIM / >YES... SETUP DELETION LIMITS DCA UPLIM // JMS I PREMOVE/(REMOVE) /DELETE LINE SKP /SKIP NEWLIN, DCA UPLIM /SET UPLIM TAD GETNDX /\ CIA / >COMPUTE LENGTH OF TEXT TAD PUTNDX // SNA /SKIP IF SOMETHING THERE JMP I PPLRTN/(PLRTN) /IF NULL ACKNOWLEDGE REMOVAL OF OLD LINE TAD L2/[2] /FUDGE FOR CLL RAR /DIVIDE BY TWO TO GET DCA TEMP1 /LENGTH IN WORDS NL0002 /TWO INFO WORDS TAD TEMP1 /PLUS LENGTH TAD I FIZZ1/[FILBEG+3776] /\ CMA CLL / >TEST IF IT WILL FIT TAD I FIZZ2/[FILBEG+3777] // SZL CLA /SKIP IF NO ROOM JMP .+4 /JUMP IF IT WILL FIT JMS MESSAGE /PRINT NO ROOM MESSAGE TBMSG /NO SPACE LEFT JMP I PLWAIT/(PLEASE+4) /WAIT FOR OPERATOR DECISION TAD I FIZZ1/[FILBEG+3776] /\ CMA / \COMPUTE NUMBER OF WORDS TAD I UPLIM / /OF CHARACTERS TO MOVE DCA TCNT1 // TAD I FIZZ1/[FILBEG+3776] /SET UP FROM DCA TPTR1 /POINTER TAD TPTR1 /\ TAD TEMP1 / >SET UP TO POINTER DCA TPTR2 // TAD TPTR2 /RESET FILES NEXT DCA I FIZZ1/[FILBEG+3776] /LINE POINTER INSRT1, TAD I TPTR1 /FETCH DCA I TPTR2 /STORE NL7777 /\ TAD TPTR1 / >BACKUP "FROM" POINTER DCA TPTR1 // NL7777 /\ TAD TPTR2 / >BACKUP "TO" POINTER DCA TPTR2 // ISZ TCNT1 /TEST IF DONE JMP INSRT1 /LOOP BACK NL0002 /\ TAD UPLIM / \ CIA / \COMPUTE NUMBER OF LINE TAD I FIZZ2/[FILBEG+3777] / /INFO ENTRIES TO MOVE STL RAR / / DCA TCNT1 // NL7777 /\ TAD I FIZZ2/[FILBEG+3777] / >SETUP FROM POINTER DCA XR1 // NL7776 /\ TAD XR1 / >SETUP TO POINTER DCA XR2 // TAD XR2 /\ IAC / >RESET FILES NEXT INFO POINTER DCA I FIZZ2/[FILBEG+3777] // INSRT2, TAD I XR1 /\ TAD TEMP1 / >MOVE AND RELOCATE DCA I XR2 // TAD I XR1 /MOVE LINE DCA I XR2 /NUMBER ISZ TCNT1 /TEST FOR END JMP INSRT2 /LOOP BACK TAD I UPLIM /SETUP PUT DCA PUTBASE /POINTER TAD PUTNDX /\ CMA / \COMPUTE NUMBER OF TAD GETNDX / /CHARACTERS TO MOVE DCA TCNT1 // DCA PUTNDX /CLEAR PUT INDEX INSRT3, JMS I GETHAF/[XGETHAF] /FETCH CHARACTER JMS I PUTHAF/[XPUTHAF] /STORE CHARACTER ISZ GETNDX /BUMP GET INDEX ISZ PUTNDX /BUMP PUT INDEX ISZ TCNT1 /TEST FINISH JMP INSRT3 /LOOP BACK ISZ UPLIM /\ TAD LNO / >SHOVE LINE NUMBER INTO INFO ENTRY DCA I UPLIM // JMP I PBEGIN/[BEGIN] /CONTINUE COMAND, JMS I NAME/[XNAME] /VALID NAME? JMP I WHAT/[XWHAT] /NO... BARF TAD PCMNDS/(CMNDS-2)/SETUP POINTER TO COMMAND TABLE JMS I PCMDSUB/[CMDSUB]/CALL LOOKUP ROUTINE JMP I FUDGE/(RUNGO) /TRY TO RUN IT DELETL, JMS I SCRIBE/[XSCRIBE]/TELL THEM UPUMSG /<^U> MESSAGE JMP I PLRST /RESTART INPUT REW, TAD TEMP1 /GET CONTROL CHARACTER TAD L7761/[-17] /REDUCE TO OFFSET FROM <^O> JMS I PCTRLPR/[CTRLPR]/PRINT "^R" OR "^T" JMP I .+1/(REWIND) /GO DO REWIND CODE REWIND /THROUGH HERE LNFEED, TAD L12/[12] /GET A JMS I PRINT/[XPRINT] /JUST PRINT IT JMP I PCHLOOP/[CHLOOP]/KEEP GOING FUDGE, RUNGO /STARR PCMNDS, CMNDS-2 /POINTER TO COMMANDS PLWAIT, PLEASE+4 /POINTER TO OPERATOR WAIT ROUTINE PPLRTN, PLRTN /RING BELL ROUTINE PREMOVE,REMOVE /POINTER TO LINE REMOVAL ROUTINE UPUMSG, TEXT "^U" /MAIN <^U> MESSAGE UPU2MSG,TEXT " ZAP!";0;0;0 /REST OF <^U> MESSAGE; 10 CHARACTERS MAXIMUM ZAPMSG, TEXT "^Z" /MAIN <^Z> MESSAGE ZP2MSG, TEXT " ZAP!";0;0 /REST OF <^Z> MESSAGE; 8 CHARACTERS MAXIMUM PAGE XNAME, .-. /SCAN A NAME ROUTINE TAD GETNDX /SAVE DCA TPTR1 /INDEX NAMTST, JMS I GETHAF/[XGETHAF]/\ SZA / \TEST CHARACTER FOR TAD L7741/[-37] / /A - Z , [ , \ , ] , ^ SPA // JMP NAMOK /YES...GOOD ENOUGH TAD L7757/[-"0+237] /\ SPA / >NG IF BELOW NUMERIC RANGE NL2000 // TAD L7766/[-12] /\ NAMOK, SMA CLA / >NG IF ABOVE NUMERIC RANGE JMP NAMNG // ISZ GETNDX /BUMP TO NEXT CHARACTER JMP NAMTST /AND TEST IT NAMNG, TAD GETNDX /\ CIA / \DID WE FIND ANY TAD TPTR1 / /GOOD CHARACTERS? SNA // JMP I XNAME /NO...FAILURE EXIT TAD L6/[6] /\ SPA / \ CLA / >SET -7SETUP TO MOVE TO TEMP1, 2, 3 DCA TEMP2 / / DCA TEMP3 // NAMLUP, JMS I GETHAF/[XGETHAF]/FETCH JMS I PUTHAF/[XPUTHAF]/STORE ISZ GETNDX /BUMP ISZ PUTNDX /BUMP ISZ TCNT1 /TEST JMP NAMLUP /LOOP TAD PUTNDX /\ RAR / \ZERO RIGHT HALF SZL CLA / /WORD IF NECESSARY JMS I PUTHAF/[XPUTHAF]// TAD TPTR2 /POINT TO TERMINATING DCA GETNDX /CHARACTER AGAIN ISZ XNAME /BUMP RETURN ADDRESS JMS I TSPACE/[XTSPACE]/IS CHARACTER A OR ? JMP I XNAME /RETURN / CONSOLE OUTPUT ROUTINE. XPRINT, .-. /TTY: OUTPUT ROUTINE DCA TTYR /SAVE PASSED VALUE XPRAGN, JMS TCHECK /CHECK FOR <^C>, ETC. FIRST TAD ECHOSW /SHOULD WE PRINT? SPA CLA /SKIP IF SO JMP XPROFF /JUMP IF NOT TAD TTYR /GET THE CHARACTER JMS P7OUT /TRY TO OUTPUT IT JMP XPRAGN /DIDN'T, TRY INPUT WHILE WAITING XPROFF, JMS TCHECK /CHECK FOR <^C>, ETC. TAD TTYR /GET THE CHARACTER AGAIN AND I NAMNG/[177] /REDUCE TO SEVEN-BIT FORM TAD L7740/[-" !200] /COMPARE TO SMALLEST PRINTING CHARACTER SMA CLA /SKIP IF NON-PRINTING CONTROL CHARACTER ISZ COLUMN /ELSE BUMP COLUMN COUNTER JMP I XPRINT /RETURN / CONSOLE INPUT ROUTINE. TTYR, .-. /TTY: INPUT TTYRLP, JMS TCHECK /CHECK FOR INPUT TAD INCHAR /GET INPUT BUFFER SNA /SKIP IF ANYTHING THERE JMP TTYRLP /ELSE GO WAIT AGAIN JMP I TTYR /RETURN WITH CHARACTER TCHECK, .-. /CHARACTER CHECK ROUTINE JMS CCHECK /CHECK FOR <^C> AND GET A CHARACTER SZA /SKIP IF NOTHING CAME IN TAD L7757/[-"Q!300] /CHECK FOR LOOSE <^Q> SNA /SKIP IF OTHER JMP TCLEAR /IGNORE <^Q> WITHOUT <^S> TAD L2/[-"O+"Q] /CHECK FOR <^O> SNA /SKIP IF OTHER JMP OFLIP /FLIP ECHO STATE IF <^O> TAD L7774/[-"S+"O] /CHECK FOR <^S> SZA CLA /SKIP IF <^S> JMP I TCHECK /RETURN IF SOMETHING ELSE JMS CCHECK /CHECK FOR <^C> AND GET A CHARACTER TAD L7757/[-"Q!300] /CHECK FOR <^Q> SZA CLA /SKIP IF <^Q> JMP .-3 /GO BACK IF ANYTHING ELSE (INCLUDING NOTHING) TCLEAR, DCA INCHAR /OBLITERATE HIDDEN CHARACTERS JMP I TCHECK /RETURN OFLIP, JMS I PCTRLPR/[CTRLPR]/PRINT "^O" JMS I FLIPECH/[ECHOFL]/REVERSE ECHO STATE JMP TCLEAR /OBLITERATE <^O> AND RETURN P7OUT, .-. /OUTPUT ROUTINE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP I P7OUT /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP I P7OUT ISZ P7OUT /BUMP RETURN ADDRESS JMP I P7OUT /TAKE SKIP RETURN CCHECK, .-. /<^C> CHECK ROUTINE CLA /CLEAN UP KSFIOT /**** CONSOLE **** CIF MCS+10 JMP I CCHECK /**** CONSOLE **** JMS INCON KRBIOT /**** CONSOLE **** JMP I CCHECK AND I NAMNG/[177] /TRIM TO SEVEN-BIT DCA INCHAR /SAVE IT NL7775 /SET -3 TAD INCHAR /COMPARE TO CHARACTER SNA CLA /SKIP IF NOT <^C> JMP CTLC /JUMP IF <^C> TAD INCHAR /GET THE CHARACTER JMP I CCHECK /RETURN CTLC, JMS RESET /RESET ECHO AND CLEAR SEQUENCE MODE, ETC. TAD CATCORE/[NOP] /RESET THE DCA I PSCFLAG/(SCRIBR+1) /SCRIBE FLAG CTCPZAP,JMS MESSAGE /TELL THEM UPCMSG /<^C> WAS HIT CTCZAP, JMP I PBEGIN/[BEGIN] /**** BATCH RUNNING **** JMP I PECTLC/(ECTLC) PECTLC, ECTLC /POINTER TO BATCH <^C> ROUTINE PSCFLAG,SCRIBR+1 /POINTER TO SCRIBE FLAG FULMSG, TEXT "CATALOG FULL!" PAGE CTRLPRT,.-. /CONTROL CHARACTER PRINT ROUTINE DCA MESSAGE /SAVE OFFSET FROM "^O" TAD L136/("^&177) /GET AN "^" JMS I PP7OUT/(P7OUT) /PRINT IT JMP .-1 /WAIT FOR IT TAD L7761/("O-"^) /ADJUST TO "O" TAD MESSAGE /ADD OFFSET TO DESIRED JMS I PP7OUT/(P7OUT) /PRINT IT JMP .-1 /WAIT FOR IT CLA /CLEAN UP JMP I CTRLPRT /RETURN L136, 136 /CONSTANT 0136 PP7OUT, P7OUT /POINTER TO P7OUT ROUTINE WHATMG, TEXT "WHAT?" / COMMAND DISPATCH TABLE CMNDS, -"C^100-"A+300; CAT /LIST CATALOG -"E^100-"C+300; ECHO /CHANGE ECHO STATUS -"E^100-"D+300; EDCMND, EDCOM /EDIT A LINE -"E^100-"N+300; ENTER /ENTER FILENAME IN CATALOG -"E^100-"R+300; SCRATCH /ERASE LINES -"F^100-"E+300; LOAD /FETCH FILE -"H^100-"A+300; HALT /HALT -"K^100-"I+300; DELETE /KILL FILENAME FROM CATALOG -"L^100-"A+300; LAST /PRINT LAST LINE NUMBER -"L^100-"C+300; SYS /LOAD NEW CATALOG INTO CORE -"L^100-"E+300; LEFT /PRINT WORDS LEFT -"L^100-"I+300; LIST /LIST BUFFER -"L^100-"N+300; SEQ /LINE NUMBERS -"L^100-"T+300; PUNCH /LIST NO NUMBERS -"M^100-"O+300; SBOOT /BOOTSTRAP TO NEW MONITOR -"P^100-"L+300; PLEASE /PLEASE -"R^100-"A+300; RADIX /CHANGE RADIX -"R^100-"E+300; RESEQ /RESEQUENCE BUFFER -"R^100-"U+300; R /RUN COMMAND -"R^100; R /R COMMAND -"T^100-"A+300; TAB /CHANGE MODE -"W^100-"R+300; SAVE /WRITE FILE -"^^100-"^+300; BEGIN /^^ COMMENT COMMAND 0 /THIS ENDS THE TABLE / THIS CODE RESIDES IN THE INPUT BUFFER AND WILL BE DESTROYED! INPBUF, TAD I PSBTFUN/[SBTFUN] /GET BOOTSTRAP FUNCTION WORD AND L7/[7] /JUST UNIT BITS DCA UNIT /SAVE AS BOOTSTRAP UNIT NL0002 /SET "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SZA CLA /SKIP IF OFF JMP OVRCHK /JUMP IF ON TTYTST, TSFIOT /FLAG UP? JMP TTIMOUT /NO, GO TIME IT OUT TFLIOT /RESET FLAG ON DECMATE OVRCOMM,ISZ I TSPACE/[XTSPACE] /IS BATCH RUNNING? JMP BATRLD /YES, GO DO SOMETHING ABOUT IT SZA CLA /SKIP IF NO <^C> FROM CONSOLE OVERLAY JMP GOTUPC /JUMP IF <^C> FROM CONSOLE OVERLAY TAD I PSCRSIZE/[SCRSIZE] /GET CORE WORD AGAIN RTR /"C" BIT TO LINK, "<^C>" BIT TO AC[0] SPA CLA /SKIP IF NO SOFTWARE <^C> BIT SET JMP GOTUPC /JUMP IF SOFTWARE <^C> BIT SET SNL /SKIP IF "C" BIT SET KSFIOT /HARDWARE FLAG UP? JMP NOTUPC /NO, FORGET IT KRBIOT /YES, GET THE CHARACTER AND TEMP1/[177] /TRIM TO SEVEN-BIT TAD TEMP2/[-"C!300] /COMPARE TO <^C> SZA CLA /SKIP IF IT MATCHES JMP NOTUPC /JUMP IF NOT GOTUPC, JMS I NAMPRT/[XPRTNAME] /TELL THEM UPCMSG /"^C" NOTUPC, JMS I PR6BIT/[XPR6BIT] /DO A , NL7776 /SETUP "<^C>" BIT MASK AND I PSCRSIZE/[SCRSIZE] /REMOVE THE BIT DCA I PSCRSIZE/[SCRSIZE] /STORE IT BACK JMP I NXTADR /DO "ERASE" OR "FETCH $" BATRLD, DCA OVRCNT /STORE <^C> INDICATOR JMS I PBUTIO/[BUTIO] /\ PBATRL, BATRL / \READ IN THE BTRLEN^100 / /BATCH RECOVERY ROUTINE BTRLBLK // TAD OVRCNT /GET <^C> INDICATOR JMS I PBATRL/(BATRL) /CALL BATCH RECOVERY ROUTINES TTIMOUT,ISZ INPBUF /WAITED ENOUGH? JMP TTYTST /NO, TRY AGAIN ISZ TPTR2 /WAITED TOO LONG? JMP TTYTST /NO, TRY AGAIN TLSIOT /YES, SET THE FLAG JMP OVRCOMMON /CONTINUE THERE OVRCHK, CDF 10 /WILL BE CDF OVERLAY FIELD TAD I OVRPTR /GET A WORD ISZ OVRPTR /BUMP TO NEXT ISZ OVRCNT /CHECKED ENOUGH? JMP .-3 /NO, KEEP GOING CDF 00 /BACK TO OUR FIELD TAD OVRSUM /COMPARE TO MAGIC VALUE SNA CLA /SKIP IF WRONG JMP OVRLOADED /JUMP IF APPARENTLY OK JMS I SSYSIO/[SYSIO] /CALL I/O ROUTINES 0000 /RELOAD ADDRESS OVRFUN, .-. /READ FUNCTION FOR OVERLAY OVRBLK, .-. /BLOCK NUMBER FOR OVERLAY OVRLOAD,CIF 10 /WILL BE CIF OVERLAY FIELD JMS XIOMON /INITIALIZE MONITOR AND GET <^C> INDICATOR / JMP OVRCOMMON /CONTINUE THERE NXTADR, NEWBUF /OR LOAD+2 IF "SET DOLLAR FETCH" OVRCNT, .-. /OVERLAY CHECK AREA COUNTER OVRPTR, .-. /OVERLAY CHECK AREA POINTER OVRSUM, .-. /OVERLAY CHECK WORD PAGE EDITIT= . /EDIT COMMAND LOADS INTO THIS BLOCK SAVSLI, .-. /SAVED STARTING LINE NUMBER IFNZRO .-XGLINE-1&177 SAVSEQ, .-. /SAVED OLD SEQUENCE VALUE EDCOM, TAD SLINUM /SAVE OLD DCA SAVSLI /SEQUENCE NUMBER TAD SEQSW /AND THE DCA SAVSEQ /OLD INCREMENT TAD (EWHAT) /FUDGE THE WHAT ROUTINE DCA WHAT/[XWHAT] /TO RETURN TO EDIT NL7777 /TAD (-"A!300) /GET <^A> VALUE DCA I (EDENABLE) /FIX COMMAND TABLE TAD (EREST) /CHANGE THE DCA PLRST /RESTART ADDRESS TAD (EDCANCEL) /SETUP THE DCA RESMORE /RESET ROUTINE JMS I LINENO/[XLINENO] /LOOK FOR A LINE NUMBER JMP EWHAT /ERROR IF NONE DCA SLINUM /SAVE FOR GLINE TAD SLINUM /RETRIEVE LINE NUMBER JMS I LNSRCH/[XLNSRCH] /SEE IF IT EXISTS JMP EWHAT /ERROR IF IT DOESN'T DCA LINST /ELSE SAVE POINTER JMS I LINENO/[XLINENO] /ANOTHER ARGUMENT? SKP CLA /NO DCA SLINUM /YES, SAVE AS LINE NUMBER ISZ SEQSW /FOR GLINE FUDGE EREST, TAD I LINST /GET POINTER TO START OF LINE DCA GETBASE /AND SETUP GETHAF BASE POINTER DCA GETNDX /START AT BEGINNING DCA MSCHAR /CLEAR SEARCH CHARACTER JMS I GLINE/[XGLINE] /START THE MESS GOING JMS ERESTORE /RESTORE SAVED VALUES JMS EDCANCEL /CANCEL EDIT MODE JMP I (BEGIN1) /FINISH UP THERE EWHAT, CLA /CLEAN UP JMS ERESTORE /RESTORE SAVED VALUES JMS EDCANCEL /CANCEL EDIT MODE JMS MESSAGE /TELL THEM BEDMSG /THEY GOOFED JMP I WHATMORE/[XWHATMORE] /GO AWAY NEWSCH, TAD (SRCHX) /POINT TO DCA I (PNEXT) /OUT ROUTINE JMP I PCHLOOP/[CHLOOP] /KEEP GOING THERE SRCHX, CIA /COMPLEMENT THE SEARCH CHARACTER DCA MSCHAR /SAVE IT FOR TESTS LATER TAD (GOTCR) /RESET THE GLINE ROUTINE DCA I (PNEXT) /TO WORK NORMALLY CTRLA, JMS I GETHAF/[XGETHAF] /GET A CHARACTER FROM THE BUFFER SNA /? JMP I PCHLOOP/[CHLOOP] /YES, GO BACK TO TAKING INPUT ISZ GETNDX /BUMP TO NEXT JMS I PINSERT/[INSERT] /INSERT AND PRINT THIS CHARACTER TAD CHAR /GET THE CHARACTER TAD MSCHAR /COMPARE TO OUR CHARACTER SZA CLA /SKIP IF IT MATCHES JMP CTRLA /ELSE KEEP GOING JMP I PCHLOOP/[CHLOOP] /NOW WAIT FOR MORE INPUT ON THE MATCH CTRLK, TAD L7774/["K-"O] /OFFSET FOR ^K JMS I PCTRLPRT/[CTRLPRT] /PRINT "^K" TAD EDLIN /RESET US BACK TO DCA PUTNDX /BEGINNING OF LINE LFVIEW, JMS I PR6BIT/[XPR6BIT] /DO A , TAD SEQSW /GET CURRENT SEQUENCE MODE SZA CLA /SKIP IF NOT IN SEQUENCE MODE JMP ENOPROMPT /JUMP IF IN SEQUENCE MODE TAD UNIT /GET CURRENT UNIT TAD E60/("0&177) /MAKE IT ASCII NOEPUNI,CLA /**** ENABLED **** JMS I PRINT/[XPRINT] TAD PROMPT /GET THE PROMPT CHARACTER JMS I PRINT/[XPRINT] /PRINT IT ENOPROM,TAD GETNDX /GET CURRENT INDEX DCA CHAR /SAVE IT E60, TAD PUTNDX /GET BUFFER INDEX SNA /SKIP IF ANYTHING JMP I PCHLOOP/[CHLOOP] /ELSE FORGET IT CIA /INVERT TO COUNT WHICH PREVENTS , JMS I SCRIBE/[XSCRIBE] /GO PRINT THE LINE INPBUF /AS IT IS NOW EEXIT, TAD CHAR /GET OLD INDEX DCA GETNDX /RESTORE IT TAD I LINST /GET OLD BASE DCA GETBASE /RESTORE IT JMP I PCHLOOP/[CHLOOP] /KEEP GOING / COMES HERE TO FINISH CORE SIZING ROUTINE. SETPMOR,TAD EDLIN /NOW HAVE PROPER MCS VALUE CLL RTR;RAR /MOVE MCS BITS TO AC[3-5] DCA GETBASE /SAVE FOR NOW TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AND L77/[77] /KEEP ALL BUT OLD PCS AND MCS BITS TAD GETBASE /ADD ON NEW MCS BITS DCA I PSCRSIZE/[SCRSIZE] /STORE FOR NOW / COMES HERE TO SET NEW PCS BITS ONLY IF CONSOLE OVERLAY PRESENT. SETPCS, TAD I PSCRSIZE/[SCRSIZE] /GET CONFIGURATION WORD AND INIT777/(777) /REMOVE ANY OLD PCS BITS TAD EDLIN /ADD ON CURRENT PCS BITS DCA I PSCRSIZE/[SCRSIZE] /STORE COMPOSITE CORE SIZE WORD JMP I BEGLINE/[INPBUF] /CONTINUE THERE MSCHAR, /-(SEARCH CHARACTER) STORED HERE ERESTOR,.-. /RESTORE SAVED VALUES ROUTINE XGLIN1, TAD SAVSEQ /GET SAVED SEQUENCE VALUE DCA SEQSW /RESTORE IT TAD SAVSLINUM /GET SAVED LINE NUMBER DCA SLINUM /RESTORE IT JMP I ERESTORE /RETURN EDCANCE, /EDIT MODE CANCEL ROUTINE INIT777,777 /CONSTANT 0777 FOR STARTUP PURPOSES ONLY TAD (XWHAT) /RESET THE DCA WHAT/[XWHAT] /WHAT POINTER TAD (GOTCR) /RESET THE DCA I (PNEXT) /INSERTION POINTER TAD XGLIN1/(XGLINE+1) /RESET THE DCA PLRST /LINE RESTART POINTER DCA I (EDENABLE) /CANCEL EDIT COMMAND LIST TAD (RESEND) /RESET THE DCA RESMORE /RESET ROUTINE JMP I EDCANCEL /RETURN LINST, .-. /LINE START POINTER BEDMSG, TEXT "BAD LINE!" PAGE RELOC RUBPAGE /WHERE THIS WILL EXECUTE / BATCH EXIT CODE FINISHES HERE. RUBFLG, JMS I PBUTIO/[BUTIO] /\ RTEMP1, EDITIT / \LOAD THE RTEMP2, 1^100 / /EDIT PAGE RTEMP3, EDITIT%200+1 // ROVFLO, CLA /CLEAN UP DIRTY AC JMS I PR6BIT/[XPR6BIT]/DO A , JMP I PLRST /RESTART INPUT GOTESC, TAD RALTCH /GET AN INDICATOR JMS I PRINT/[XPRINT] /AND PRINT IT JMS I PUTHAF/[XPUTHAF]/FAKE AN TAD PUTNDX /GET OUTPUT INDEX SNA CLA /SKIP IF SOMETHING THERE JMS I PR6BIT /ELSE DO A , JMP I .+1/(GLINGO) /AND LOOK AS IF IT WERE GLINGO /POINTER TO WHERE TO GO BACK TO RALTCH, "$&177 /DEFAULT INDICATOR RDELIM, "\&177 /DEFAULT DELIMITER IFNZRO .-RDELIM-1 BACKSP, TAD GETNDX /\ DCA RTEMP2 / \SAVE GETHAF POINTERS TAD GETBASE / /FOR EDIT COMMAND DCA RTEMP3 // NL7777 /GET A MINUS 1 TAD PUTNDX /ADD PUT OFFSET VALUE SPA /AT ? JMP ROVFLO /YES, JUST RESTART LINE DCA GETNDX /ELSE SAVE COPY TAD BEGLINE/[INPBUF]/SET GETHAF BASE POINTER DCA GETBASE /TO BEGINNING OF LINE DCA RUBFLG /INDICATE NO LINE OVERFLOW YET TAD RDELIM /GET DELIMITER JMS I PRINT/[XPRINT] /AND PRINT IT RAGN, NL7777 /GET A -1 TAD PUTNDX /OFF OF PUT OFFSET SPA /OVERFLOW? JMP RNOMOR /YES, CLOSE LINE AND START NEW ONE DCA PUTNDX /ELSE SAVE THE NEW VALUE PRMPCNT,NL0001/OR NL0002 /PROMPT COUNT INSTRUCTION FOR BACKUP MODES CLA /CLEAN UP TAD EDLIN /\ CIA / \ TAD PUTNDX / \ SMA CLA / >IF EDLIN>PUTNDX, EDLIN=PUTNDX JMP .+3 / / TAD PUTNDX / / DCA EDLIN // JMS I GETHAF/[XGETHAF] /GET RUBBED-OUT CHARACTER JMS I PR6BIT/[XPR6BIT] /ECHO IT ON TTY: RCHLP2, CHLOOP+2 /POINTER TO REJOINED CODE; THIS WILL BE SKIPPED NL7777 /LOAD AC WITH -1 TAD PUTNDX /ADD ON PUT OFFSET DCA GETNDX /AND SAVE IT FOR NEXT TIME JMS I INPUT /CAPTIVATE INPUT DCA TEMP1 /SAVE IT IN GOOD LOCATION TAD TEMP1 /GET WHAT HE TYPED TAD L7770/[-"H!300] /IS IT ? SZA /SKIP IF SO TAD PSCRSIZE/[-177+"H-300] /OR IS IT ? SZA /SKIP IF EITHER TAD L40/[-137+177] /OR IS IT UNDERSCORE? SNA CLA /SKIP IF NONE OF THEM JMP RAGN /JUMP IF ANY OF THEM REXIT, TAD RDELIM /GET DELIMITER JMS I PRINT/[XPRINT] /AND PRINT IT TO ENCLOSE TAD RTEMP2 /\ DCA GETNDX / \RESTORE POINTERS TAD RTEMP3 / /FOR EDIT COMMAND DCA GETBASE // ISZ RUBFLG /ARE WE HERE DUE TO OVERFLOW? JMP I RCHLP2/(CHLOOP+2) /NO, RESUME CLEANLY JMP ROVFLO /YES, RESTART LINE RNOMOR, NL7777 /SET LINE OVERFLOW DCA RUBFLG /FOR ALL TO SEE JMP REXIT /AND LEAVE ZBLOCK 25 /FOR ALIGNMENT WITH OTHER CODE TRYNXT, CDF 00 /FOR THE PDP-8/L CDFNXT, CDF 10 /REFERENCE NEXT FIELD TAD I MESSAGE/[GETBASE] /GET ITS TEST LOCATION DCA EDLIN /SAVE FOR RESTORATION TAD CATCORE/[7000] /GET A 7000 DCA I MESSAGE/[GETBASE] /STORE IT TENTATIVELY TAD I MESSAGE/[GETBASE] /TRY TO REGAIN IT TAD L1000/[-7000] /7000 + 1000 = 0000 SNA /SKIP IF WE FAILED TAD GETBASE /DID WE HIT OUR LOCATION? SZA CLA /SKIP IF NOT JMP HARDEND /JUMP IF WE ZAPPED OUR LOCATION TAD EDLIN /RESTORE TEST LOCATION DCA I MESSAGE/[GETBASE] /IN THE TEST FIELD TAD CDFNXT /\ TAD L10/[10] / >INCREMENT TO NEXT FIELD DCA CDFNXT // ISZ NEWCAT /INCREMENT COUNTER JMP TRYNXT /TRY NEXT FIELD HARDEND,CDF 00 /RESTORE DATA FIELD TAD NEWCAT /GET NEGATIVE COUNTER TAD L7/[7] /MAKE IT POSITIVE CLL RTR /MOVE PHYSICAL SIZE RTR /INTO AC[0-2] DCA EDLIN /SAVE TEMPORARILY TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AND L2/[2] /ISOLATE "C" BIT SZA CLA /WAS IT SET? JMP I PSETPCS/[SETPCS] /JUMP IF SO; DON'T TOUCH MCS BITS TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AGAIN AND UNITIO/[4] /JUST "J" BIT SZA CLA /SKIP IF UNLIMITED SYSTEM TAD CATCORE/[-1^1000] /ELSE BACKUP BY ONE FIELD JMP I PUTNDX/[SETPMORE] /CONTINUE THERE RELOC /TURN OFF RELOCATION FIELD 0 /DUMP ALL LITERAL TABLES NOW / P?S/8 BATCH SYSTEM. / ONCE-ONLY CODE. *BATSGA /WHERE IT GENERATES RELOC BATMEM /WHERE IT EXECUTES IFNZRO .&177 BATSTRT,NOP /IN CASE WE'RE CHAINED TO TAD (EREAD) /SETUP OUR DCA INPUT /INPUT POINTER TAD (SCMORE) /FORCE OFF ANY DCA RST /OLD BATCH TAD WHAT/[XWHAT] /INVALIDATE THE DCA I (EDCMND) /"EDIT" COMMAND TAD (PECTLC&177+JMPIC) /SETUP THE DCA I (CTCZAP) /<^C> TRAP TAD I BMFUN/(SFUN) /GET OUR FUNCTION WORD DCA BMFUN /STORE IN-LINE TAD I BMBLK/(SBLOCK) /GET OUR BLOCK IAC /BUMP TO CODE BLOCK DCA BMBLK /STORE IN-LINE JMS I SSYSIO/[SYSIO] /CALL I/O ROUTINES BATCORE /BATCH ADDRESS BMFUN, SFUN /FUNCTION WORD BMBLK, SBLOCK /BLOCK NUMBER NL0001 /SETUP MASK AND I (SWMX) /GET /X BIT SNA CLA /SKIP IF SET JMP .+3 /JUMP IF NOT TAD I L7756/[SPARM] /GET EQUALS PARAMETER DCA I (ETEST) /CHANGE TEST CHARACTER TAD I (SOUTFLS) /GET OUTPUT FILE COUNT TAD I (EFILE) /UPDATE FILE POINTER DCA I (EFILE) /STORE IT BACK JMS I PR6BIT/[XPR6BIT] /DO A , JMS I SCRIBE/[XSCRIBE] /TELL THEM BSTMSG /OUR STARTUP MESSAGE JMS I PR6BIT/[XPR6BIT] /DO A , TAD I (SWAL) /GET /A-/L AND L200/[200] /JUST /E SZA CLA /SKIP IF OFF JMP ETESTA /JUMP IF ON DCA EZAP /MAKE IT ALWAYS SAVE TAD (EBRK) /SETUP DCA RST /EXECUTION TRAP ETESTA, TAD I (SWAL) /GET /A-/L SMA CLA /SKIP IF /A SET JMP EMORE /JUMP IF NOT TAD I FIZZ1/[FILBEG+3776] /GET FILE LIMIT CIA /INVERT IT TAD (FILBEG+200) /COMPARE TO ONE PAGE LIMIT SMA SZA CLA /SKIP IF GREATER THAN ONE PAGE EZAP, JMP EMOR /**** NOT /E **** 0000 TAD (-16) /SETUP MESSAGE LIMIT JMS I SCRIBE/[XSCRIBE] /TELL THEM BSFMSG /WE ARE SAVING THE FILE TAD I PSBTFUN/[SBTFUN] /GET BOOTSTRAP UNIT AND L7/[7] /JUST UNIT BITS TAD ("0&177) /MAKE IT ASCII JMS I PRINT/[XPRINT] /PRINT THE UNIT JMS I PR6BIT/[XPR6BIT] /DO A , JMS I PR6BIT/[XPR6BIT] /DO A , JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES BFILBEG,FILBEG /TO WRITE OUT FILSIZE^100+WRITE /THE FILE BINADR /IN %:U EMOR, TAD (EFIXIT) /SETUP NEW DCA I (ETRIM) /CO-ROUTINE EXIT TAD I PSBTFUN/[SBTFUN] /GET BOOTSTRAP UNIT AND L7/[7] /JUST UNIT BITS TAD L100/[1^100] /ADD ON PAGE BITS DCA I (EFUN) /STORE IN I/O CALL EMORE, TAD I (SWMX) /GET /M-/X AND L100/[100] /JUST /R SNA CLA /SKIP IF /R BIT SET JMP .+3 /JUMP IF NOT TAD ("R&37) /GET <^R> DCA I (EEOSEQ) /STORE IN CHARACTER CONVERSION LOCATION TAD (JMP I PBEGIN/[BEGIN]) /FORCE OFF DCA I WHATMORE/[XWHATMORE] /ANY OLD BATCH DCA SEQSW /FORCE OFF SEQUENCE MODE TAD (BATCORE-2) /SETUP THE DCA I PMOVE/[XMOVE] /PHONEY JMS TAD BFILBEG /GET FIRST ARGUMENT DCA I (BATCORE-2) /STORE IT IN-LINE TAD (RUBPAGE) /GET SECOND ARGUMENT DCA I (BATCORE-1) /STORE IT IN-LINE TAD L7600/[-200] /GET COUNT TO MOVE JMP I (MOVE+1) /CONTINUE IN SUBROUTINE BSFMSG, TEXT "$WRITE FILE %:" /BATCH FILE WRITE MESSAGE BSTMSG, TEXT "$START BATCH";0 /BATCH STARTUP MESSAGE / EXECUTION CONTINUES ON PAGE 2600. PAGE RELOC /TURN OFF RELOCATION / BATCH CODE. / THIS IS THE RESIDENT BATCH CODE LOADED BY THE BATCH SYSTEM (ONCE-ONLY) CODE. RELOC BATCORE /EXECUTION ADDRESS BATCORE,NL2000 /\ AND I EREAD/(SWMX) / >CHECK /N SWITCH SZA CLA // EJMPBGN,JMP I PBEGIN/[BEGIN] /DON'T SCRATCH IF IT'S ON JMP I EPTR/(NEWBUF) /DO SCRATCH IF IT'S OFF EREAD, SWMX /GIVE ME A CHARACTER ENTRY JMP I ETRIM /GO WHERE YOU'RE SUPPOSED TO GO / COMES HERE ON <^C> FROM THE KEYBOARD MONITOR ITSELF. ECTLC, JMS I PBUTIO/[BUTIO] /\ BATRL / \RELOAD THE BATCH BTRLEN^100 / /RECOVERY ROUTINE BTRLBLK // NL7777 /INDICATE <^C> FOUND JMS I .-4/(BATRL) /START IT UP ETRIM, EOF /EXIT ROUTINE AND L77/[77] /TRIM TO SIX-BIT SNA / CHARACTER? JMP EOL /YES CIA /\ TAD ETEST / \ SNA / \IF THIS IS CHARACTER JMP EZ / /THEN CONVERT TO APPROPRIATE CIA / / TAD ETEST // TAD L7741/[-37] /\ SNA / >FIXUP TAD (7652) // SPA /\ TAD L100/[100] / >MAKE IT SEVEN-BIT TAD L37/[37] // JMP I EREAD /RETURN TO CALLER EOL, TAD (ERSET) /RESET TO ALIGNED DCA ETRIM /RETURN FOR NEXT TAD L15/[15] /GIVE A CARRIAGE JMP I EREAD /RETURN THIS TIME EZ, TAD EEOSEQ /GET <^Z> OR <^R> JMP I EREAD /RETURN TO CALLER WITH THIS EBACK, TAD I EPTR /FETCH A WORD SNA /SKIP IF ITS OK JMP EOF /ELSE TAKE END OF FILE BRANCH RTR;RTR;RTR /MOVE OVER JMS ETRIM /GO TRIM CHARACTER TAD I EPTR /FETCH THE WORD AGAIN JMS ETRIM /GO TRIM SECOND CHARACTER ERSET, ISZ EPTR /BUMP FETCH POINTER TAD EPTR /GET POINTER TAD L200/[-RUBPAGE-200] /COMPARE TO LIMIT SZA CLA /DONE WITH BUFFER? JMP EBACK /NO... NOT QUITE YET EOB, JMS I SSYSIO/[SYSIO] /\ E7400, RUBPAGE / \READ IN EFUN, 1^100+.-. / /NEXT BLOCK EBLOCK, BINADR // EFIXIT, ISZ EBLOCK /BUMP BLOCK NUMBER TAD E7400/(RUBPAGE) /RESET DCA EPTR /POINTER JMP EBACK /GO DO IT AGAIN EOF, ISZ EFILE /BUMP TO NEXT FILE TAD L7770/[7770] /GET FILE MASK AND I EFILE /JUST BLOCK BITS SNA /? JMP EOT /YES DCA EBLOCK /NO, PUT INTO CALL TAD I EFILE /GET UNIT BITS E177, AND L7/[7] /AND JUST UNIT BITS TAD L100/[1^100] /ADD ON ONE PAGE DCA EFUN /PUT INTO CALL JMP EOB /NOW READ A BUFFER IN EOT, TAD (SCMORE) /ALLOW A NORMAL EXTENDED DCA RST /COMMAND OR "R" TAD (EDCOM) /RESTORE DCA I (EDCMND) /"EDIT" COMMAND TAD EJMPBGN/(JMP I PBEGIN/[BEGIN]) /ALLOW DCA I WHATMORE/[XWHATMORE] /ERRORS TAD PTTYR/[TTYR] /RESTORE THE DCA INPUT /INPUT POINTER TAD EJMPBGN/(JMP I PBEGIN/[BEGIN]) /RESTORE NORMAL DCA I (CTCZAP) /<^C> HANDLING DCA ECHOSW /FORCE ECHO ON JMS I PBUTIO/[BUTIO] /\ PRUBPAG,RUBPAGE / \ 1^100 / /RELOAD PAGE RUBBLK // JMS I PR6BIT/[XPR6BIT] /DO A , JMS I SCRIBE/[XSCRIBE] /TELL THEM BFNMSG /BATCH IS DONE JMP I PRUBPAGE/(RUBPAGE) /FINISH IT THERE / COMES HERE TO BREAKPOINT THE MONITOR FOR BATCH FROM THE / EXTENDED COMMAND PROCESSOR AND THE "R", "RU(N)" COMMANDS. EBRK, JMS I PBUTIO/[BUTIO] /\ XTSPACE&7600 / \SAVE ACTIVATED 1^100+WRITE / /MONITOR BLOCK XTSPACE%200+1 // JMS I PBUTIO/[BUTIO] /\ EDITIT / \SAVE ACTIVE 1^100+WRITE / /COPY OF BATCH BTRLBLK+1 // JMS I PBUTIO/[BUTIO] /\ RUBPAGE / \SAVE THE BUFFER, 2^100+WRITE / /SYSIO PAGE BTRLBLK+2 // JMS I PBUTIO/[BUTIO] /\ 0000 / \SAVE PAGE 1^100+WRITE / /ZERO STUFF BTRLBLK+4 // DCA I WHATMORE/[XWHATMORE] /EXTENDED COMMAND, "R" ERRORS BOOTSTRAP JMP I ERST /GO DO EXTENDED COMMAND OR "R" PART 2 EEOSEQ, "Z&37 /**** /R **** "R&37 EFILE, SFILES-1 /FILE POINTER EPTR, NEWBUF /BUFFER POINTER ERST, SCMORE /NEXT EXECUTION ADDRESS ETEST, "\&77 / CHARACTER BFNMSG, TEXT "$END BATCH";0 /BATCH DONE MESSAGE PAGE RELOC /TURN OFF RELOCATION FIELD BRLGEN&70%10 /GENERATION FIELD *BRLGEN&7600 /GENERATION ADDRESS BRLCORE,NOPUNCH /STOP BINARY OUTPUT FIELD 0 /EXECUTION FIELD *BRLCORE /RESTORE ORIGIN ENPUNCH /RESTORE BINARY OUTPUT RELOC FILBEG /WHERE IT WILL EXECUTE BATRL, .-. /RECOVERY ENTRY POINT DCA BATSW /SAVE <^C> INDICATOR JMS I PBUTIO/[BUTIO] /\ XTSPACE&7600 / \READ IN 1^100 / /BLOCK THREE XTSPACE%200+1 // NL7777 /TURN OFF BATCH DCA I TSPACE/[XTSPACE] /IN BLOCK THREE JMS I PBUTIO/[BUTIO] /\ XTSPACE&7600 / \WRITE BACK 1^100+WRITE / /BLOCK THREE XTSPACE%200+1 // TAD BATRL /GET CALLER'S ADDRESS TAD (-ETRIM) /COMPARE TO MONITOR'S <^C> ADDRESS SNA CLA /SKIP IF TIME-OUT CODE IS THE CALLER JMP UPCDONE /JUMP IF "^C" ALREADY PRINTED JMS BTCHEK /CHECK FOR <^C> TAD WHAT/[XWHAT] /DESTROY THE DCA I (EDCMND) /EDIT COMMAND TAD (EBRK) /RESET THE DCA RST /BATCH BREAKPOINT TAD (PECTLC&177+JMPIC) /RESET THE DCA I (CTCZAP) /MONITOR'S <^C> HANDLER TAD L7600/[-200] /\ JMS I PMOVE/[MOVE] / \MOVE DOWN THE BATRL+200 / /ACTIVE BATCH BATCORE // TAD (SCMORE) /RESET THE DCA I (ERST) /BREAK RETURN ADDRESS JMS BTCHEK /CHECK FOR <^C> AGAIN TAD L7600/[-200] /\ JMS I PMOVE/[MOVE] / \MOVE DOWN THE BATRL+400 / /BATCH BUFFER RUBPAGE // JMS BTCHEK /CHECK FOR <^C> AGAIN TAD L7756/[-22] /\ JMS I PMOVE/[MOVE] / \MOVE DOWN THE EQUALS SPARM&177+BATRL+600 / /AND FILE PARAMETERS SPARM // JMS BTCHEK /CHECK FOR <^C> AGAIN TAD I BTFROM /\ DCA I BTTO / \ ISZ BTFROM / \MOVE DOWN THE ISZ BTTO / /COPY OF PAGE ZERO ISZ BTRLCNT / / JMP .-5 // TAD OLDUNIT /RESTORE DCA UNIT /PREVIOUS UNIT TAD OLDRADIX /RESTORE DCA RADXSW /PREVIOUS RADIX DCA SWAPSW /FOR LESS OVERHEAD JMS BTCHEK /CHECK FOR <^C> AGAIN JMS I PLODCAT/[LODCAT] /RELOAD THE CATALOG JMS BTCHEK /CHECK FOR <^C> AGAIN JMP I (NOTUPC) /CONTINUE THERE BTCHEK, .-. /<^C> CHECK ROUTINE TAD BATSW /GET PASSED VALUE CMA /INVERT FOR TESTING SNA CLA /SKIP IF NOT <^C> VALUE JMP GOTUC /JUMP IF IT IS TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD RTR /"C" BIT TO LINK, "^C" BIT TO AC[0] SPA CLA /SKIP IF <^C> NOT DETECTED JMP GOTUC /JUMP IF IT WAS SNL /SKIP IF OVERLAY IN EFFECT KSFIOT /CONSOLE FLAG UP? JMP I BTCHEK /NO, FORGET IT KRBIOT /YES, GET THE CHARACTER AND (177) /JUST SEVEN-BIT TAD (-3) /COMPARE TO <^C> SZA CLA /SKIP IF IT MATCHES JMP I BTCHEK /ELSE RETURN GOTUC,/ TAD BATRL /GET CALLER / TAD (-ETRIM) /COMPARE TO MONITOR'S CALL / SNA CLA /SKIP IF TIME-OUT CALLER / JMP UPCDONE /JUMP IF MONITOR CALLING JMS MESSAGE /TELL THEM BATUPC /^C NOW UPCDONE,TAD (-20) /LIMIT THE CALL TO PREVENT , JMS I SCRIBE/[XSCRIBE] /PRINT OUT BABTMSG /ABORT MESSAGE NL7776 /SETUP MASK AND I PSCRSIZE/[SCRSIZE] /GET THE OTHER BITS DCA I PSCRSIZE/[SCRSIZE] /CLEAR "^C" BIT NL0002 /SET "C" MASK AND I PSCRSIZE/[SCRSIZE] /GET THE BIT SZA CLA /SKIP IF NO OVERLAY JMP I L7600/[SBOOT] /JUST BOOTSTRAP, OVERLAY WILL SAY "^C" JMS I NAMPRT/[XNAMPRT] /ELSE WE SAY BATUPC /^C JMP I L7600/[SBOOT] /NOW GO BOOTSTRAP BATSW, .-. /<^C> TO BATCH SWITCH BTFROM, BATRL+1000 /WHERE PAGE ZERO IMAGE WAS LOADED BTRLCNT,-200 /PAGE ZERO MOVE COUNT BTTO, UNIT /WHERE PAGE ZERO BELONGS BABTMSG,TEXT "$END BATCH FROM " BATUPC, TEXT "^C";0 PAGE RELOC /TURN OFF RELOCATION / STRING SEARCH FOR P?S/8 / STRING SEARCH OVERLAY FOR THE P?S/8 KEYBOARD MONITOR/EDITOR. / USAGE: / FIND [DELIMITER] [SEARCH STRING] [OPTIONAL DELIMITER] / CHANGE [DELIMITER] [SEARCH STRING] [OPTIONAL DELIMITER] / [OPTIONAL REPLACEMENT STRING] / OPTIONS: / /A SEARCH ADDITIONAL LINES PAST THE FIRST MATCHING ONE / FOR THE SEARCH STRING. / =NNNN START SEARCH FOR SEARCH STRING AT LINE NNNN IN THE FILE. / [NULL STRING] NULL STRINGS ARE VALID AND ARE DEFINED AS BEING LOCATED / AT THE BEGINNING OF THE LINE. PASSING A NULL STRING AS A / SEARCH STRING TO CHANGE WILL INSERT THE REPLACEMENT STRING / AT THE BEGINNING OF THE LINE. PASSING A NULL STRING AS A / SEARCH STRING TO FIND WILL MATCH ANY LINE. PASSING A / NULL STRING OR NO STRING AT ALL AS A REPLACEMENT STRING / TO CHANGE WILL IMPLY DELETING THE SEARCH STRING. / THE SECOND DELIMITER IS MANDATORY WHEN PASSING A / REPLACEMENT STRING TO CHANGE. IT IS ALLOWED BUT NOT / NECESSARY WHEN JUST DELETING THE SEARCH STRING IN THE FILE. / RESTRICTIONS: / ALL EQUALS PARAMETER AND SWITCH SETTINGS MUST BE PASSED BEFORE THE / FIRST DELIMITER. THE DELIMITER CHARACTER SET IS ANY PRINTING CHARACTER / EXCEPT: / ( ) / < = > / THE DELIMITER CHARACTER CANNOT BE IN THE SEARCH STRING, BUT IS / ALLOWED IN THE REPLACEMENT STRING. / BATCH USAGE: / FIND AND CHANGE COMMANDS ARE NOT ALLOWED FROM NORMAL BATCH. / FIND AND CHANGE COMMANDS ARE ALLOWED FROM BATCH WITH THE /E OPTION INVOKED / WHICH IN TURN CAN BE RUN FROM THE NORMAL BATCH. FIELD FNDGEN&70%10 /GENERATION FIELD *FNDGEN&7600 /GENERATION ADDRESS FNDCORE,NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT LOADS *FNDCORE /RESTORE ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC XGLINE /WHERE IT EXECUTES IFNZRO .&177 FIND= . /FIND SYSTEM STARTS HERE XGLINE, NOP /OVER GLINE ROUTINE; NOP IN CASE OF CHAINING XGLIN2, JMP I FRESET/(FINDENTRY) /**** INITIALIZED **** TAD BEGLINE/[INPBUF] DCA PUTBASE /RESET OUTPUT BASE DCA PUTNDX /AND INDEX JMP I NXTHNG/(XNXTHNG) /GOTO NEXT THING NXTLINE,TAD PLFLAG /IN MIDDLE OF LINE? SZA CLA /SKIP IF NO JMP FINISH /YES, GOTO END OF LINE ROUTINE CHANG2, NL7776 /BACK UP TAD TPTR /TO NXTLN2, DCA TPTR /NEXT LINE DCA PLFLAG /CLEAR PARTIAL LINE FLAG TAD I TPTR /GET TEXT POINTER DCA GTBASS /SAVE IT DCA GTNDX1 /ZERO CORRESPONDING INDEX TAD I GTBASS /GET TWO TEXT CHARACTERS SNA CLA /? JMP I PFDONE/(FDONE) /YES, GO FINISH UP SKP /NO, LEAVE INDEX 1 ALONE SCAN1, ISZ GTNDX1 /BUMP TO NEXT POINTER TAD GTNDX1 /GET TEXT POINTER DCA GTNDX3 /PUT IT IN WORKING POINTER CONTINU,TAD FRESET /RESET DCA GTNDX2 /INPUT INDEX SCAN2, TAD CHBASE/(STRBUFFER) /SETUP DCA GETBASE /FOR GETTING AN INPUT CHARACTER TAD GTNDX2 /ALSO SETUP DCA GETNDX /CORRESPONDING INDEX JMS I GETHAF/[XGETHAF] /GET AN INPUT CHARACTER DCA TEMP01 /SAVE IT TAD TEMP01 /GET CHARACTER AGAIN SZA /? TAD MDELIM /OR IS IT THE DELIMITER? SZA CLA /SKIP IF SO JMP COMN /JUMP IF NOT EITHER FNDFLG, JMP CHNGFND /**** FIND **** 0000 TAD GTBASS /GET LINE POINTER JMP I PFNDFND/(FNDFND) /FINISH UP THERE COMN, ISZ GTNDX2 /BUMP TO NEXT INPUT CHARACTER TAD GTBASS /SET UP FOR A TEXT CHARACTER DCA GETBASE /FOR COMPARISON TAD GTNDX3 /SETUP DCA GETNDX /INDEX ALSO JMS I GETHAF/[XGETHAF] /GET A CHARACTER FROM TEXT SNA /? JMP NXTLINE /YES, TRY FOR ANOTHER LINE ISZ GTNDX3 /BUMP TO NEXT CHARACTER FOR NEXT TIME CIA /INVERT CHARACTER FOR TEST TAD TEMP01 /COMPARE TO TEST CHARACTER SNA CLA /SKIP IF DIFFERENT JMP SCAN2 /GO HERE IF THE SAME JMP SCAN1 /GO HERE IF DIFFERENT ASWAL, SWAL /POINTER TO /A-/L SWITCHES CHBASE, STRBUFFER /WHERE INPUT WAS MOVED TO GTBASS, .-. /GET BASE FOR TEXT GTNDX1, .-. /GET INDEX FOR TEXT GTNDX2, .-. /GET INDEX FOR INPUT GTNDX3, .-. /WORKING INDEX FOR TEXT LLINE, .-. /LAST LINE NUMBER MDELIM, .-. /DELIMITER NXTHNG, XNXTHNG /DO THE NEXT THING THERE PFDONE, FDONE /POINTER TO FDONE CODE PFNDFND,FNDFND /FIND ENDUP CODE PLFLAG, 0 /PARTIAL LINE FLAG PPUTIT, XPUTIT /POINTER TO PUT IT ROUTINE LINGO, TAD BEGLINE/[INPBUF] /RESET DCA GETBASE /INPUT POINTER DCA GETNDX /AND INDEX JMP I XGLINE /BACK TO THE EDITOR ZBLOCK INSERT-. /GET TO PROPER PLACE INSERT, .-. /CHARACTER INSERT ROUTINE AND L77/[77] /JUST SIX-BIT PLEASE SNA /? JMP INPPUT /YES, THAT'S OK DCA CHAR /ELSE SAVE IT TAD PUTNDX /GET INDEX TAD LINLEN/[INPBUF&177+7600^2] /COMPARE TO LIMIT SMA CLA /SKIP IF OK JMP I INSERT /FORGET IT TAD CHAR /GET THE CHARACTER INPPUT, JMS I PUTHAF/[XPUTHAF] /PUT OUT A CHARACTER TAD CHAR /GET IT BACK JMS I PR6BIT/[XPR6BIT] /PRINT IT JMP LINGO /IT WAS AN ISZ PUTNDX /BUMP OUTPUT INDEX JMP I INSERT /RETURN FRESET, FINDENTRY /INDEX RESET VALUE FOR INPUT TEMP01, .-. /CHARACTER TEMPORARY TPTR, .-. /TEMPORARY POINTER FOR TEXT CHNGFND,TAD PLFLAG /GET PARTIAL LINE FLAG SZA CLA /SKIP IF BEGINNING OF LINE JMP BYPASS /DON'T PROCESS LINE NUMBER TAD TPTR /GET POINTER IAC /ADJUST TO LINE NUMBER POINTER DCA INSERT /SAVE IT TAD I INSERT /GET LINE NUMBER DCA LLINE /SAVE IT TAD LLINE /GET IT BACK JMS I LNOPRT /PRINT IT INTO INPUT BUFFER BYPASS, TAD GTBASS /GET BASE OF TEXT DCA GETBASE /SETUP PUTHAF BASE TAD PLFLAG /GET COUNT OF FRONT OF LINE DCA GETNDX /SETUP INDEX WITH IT TAD GTNDX1 /GET EXACT LENGTH OF FRONT OF LINE CIA /INVERT FOR COUNT TAD PLFLAG /ADD ON INDEX VALUE JMS I PPUTIT/(PUTIT) /PUT OUT C(AC) NUMBER OF CHARACTERS ONLY TAD CHBASE/(STRBUFFER) /GET COMMAND BASE DCA GETBASE /SETUP PUTIT BASE TAD GTNDX2 /GET INDEX INTO INPUT BUFFER DCA GETNDX /SETUP MASTER INDEX WITH IT JMS I GETHAF/[XGETHAF] /GET A CHARACTER FROM THERE SZA /? ISZ GETNDX /NO, BUMP PAST DELIMITER JMS I PPUTIT/(PUTIT) /OUTPUT LIMITED CHARACTERS OR NOTHING TAD GTNDX3 /STORE WORKING TEXT INDEX AS MASTER DCA GTNDX1 /TEXT INDEX TO SKIP PAST FOUND STUFF TAD GTNDX1 /GET IT BACK DCA PLFLAG /SAVE AS PARTIAL LINE FLAG NULZAP, TAD I ASWAL/(SWAL) /**** NULL SEARCH STRING **** 0000 SPA CLA /SKIP IF NOT ALL JMP CONTINUE /GO DO THE REST OF THE LINE FINISH, TAD GTBASS /SETUP FOR TEXT DCA GETBASE /GETTING TAD PLFLAG /USE THIS DCA GETNDX /AS INDEX NL4000 /SET ON HIGH ORDER BIT JMS I PPUTIT/(PUTIT) /PUT OUT REST OF LINE IF ANY JMS INSERT /THIS FINISHS THE LINE AND RETURNS TO MONITOR PAGE STRBUFF,ZBLOCK EDITIT-INPBUF /SEARCH STRING, ETC. STORED HERE / COMES HERE TO READ BACK THE OTHER SWAPPED-OUT PAGES BEFORE STARTING UP. FCNEXT, JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES CAT&7600 /READ IN THE OTHER SWAPPED OUT PAGES 2^100 /NEXT TO US CAT%200+1 /BLOCK NUMBER FCJMPB, JMP I PBEGIN/[BEGIN] /GO START IT UP XNXTHNG,SKP /FIRST TIME THROUGH SKIP JMP CHNGAGN /ANY FURTHER TIMES GO HERE DCA XNXTHNG /DESTROY ONCE-ONLY CODE TAD SCRPTR /GET INITIAL SEARCH VALUE JMP I (NXTLN2) /START FROM WHEREVER FNDFND, DCA SCRPTR /SAVE POINTER PASSED IN AC TAD I (TPTR) /GET LINE NUMBER POINTER IAC /GET TO RIGHT VALUE DCA XPUTIT /SAVE IT TAD I XPUTIT /GET LINE NUMBER ITSELF DCA I (LLINE) /SAVE IT TAD I (LLINE) /GET IT BACK JMS I LNOPRT/[XLNOPRT] /PRINT IT (INTO BUFFER AS WELL) JMS I SCRIBE/[XSCRIBE] /PRINT SCRPTR, .-. /THE CORRESPONDING LINE CHNGAGN,TAD I (SWAL) /GET SWITCHES /A-/L SPA CLA /A SET? JMP SRCHAGN /YES, GO DO IT AGAIN FDONE, NL7777 /NO, RESET DCA SWAPSW /SWAP SWITCH SO WE DISAPPEAR CTCBZAP,SKP /**** BATCH **** 0000 JMP I WHATMORE/[XWHATMORE] /DON'T CHANGE <^C> CODE TAD (JMS MESSAGE) /RESET THE DCA I (CTCPZAP) /<^C> PRINT ROUTINE TAD FCJMPB/(JMP I PBEGIN/[BEGIN]) /RESET THE DCA I (CTCZAP) /<^C> HANDLER JMP I WHATMORE/[XWHATMORE] /BACK TO THE MONITOR SRCHAGN,TAD I (LLINE) /GET LAST FOUND LINE NUMBER JMS I LNSRCH/[XLNSRCH]/SEARCH FOR IT JMP I (NXTLN2) /WASN'T THERE, USE WHAT WAS FOUND DCA I (TPTR) /WAS THERE, BACKUP FROM IT JMP I (CHANG2) /CONTINUE THERE XPUTIT, .-. /PUT A SEGMENT OF A LINE ROUTINE SNA /SKIP IF ANY TO DO JMP I XPUTIT /NONE, JUST RETURN DCA SCRPTR /SAVE AS COUNT JMS I GETHAF/[XGETHAF]/GET A CHARACTER SNA /END OF LINE? JMP I XPUTIT /YES, RETURN JMS I PINSERT/[INSERT]/NO, PUT IT IN ISZ GETNDX /BUMP TO NEXT CHARACTER ISZ SCRPTR /DONE ALL YET? JMP .-6 /NO, GO BACK JMP I XPUTIT /YES, RETURN PAGE IFNZRO .&177 CHANGE= . /CHANGE SYSTEM STARTS HERE CHANGE, NOP /IN CASE WE'RE CHAINED TO SKP /DON'T "CHANGE" FNDFLG FINDENT,DCA I (FNDFLG) /INDICATE "FIND" TAD I (LINGO) /INITIALIZE THE DCA I (XGLIN2) /GLINE ROUTINE TAD RST /GET EXECUTION BREAKPOINT POINTER TAD (-SCMORE) /COMPARE TO MAGIC VALUE SNA CLA /SKIP IF OTHER JMP STROK /JUMP IF IT MATCHES JMS CTCSETUP /SETUP FOR <^C> JMS MESSAGE /TELL THEM BATFU /THEY MESSED UP JMPIL76,JMP I L7600/[SBOOT] /GOODBYE STROK, JMS I GETHAF/[XGETHAF] /GET LAST CHARACTER SCANNED SNA /? JMP NOSTRING /YES, COMPLAIN CIA /INVERT THIS CHARACTER DCA I (MDELIM) /SAVE AS TEST DELIMITER CHARACTER JMS CTCSETUP /SETUP FOR <^C> ISZ GETNDX /BUMP TO NEXT CHARACTER TAD GETNDX /GET CURRENT INDEX DCA I (FRESET) /SAVE FOR STRING SEARCH JMS I GETHAF/[XGETHAF] /GET NEXT CHARACTER SZA /SKIP IF CHARACTER TAD I (MDELIM) /ELSE GET DELIMITER VALUE SNA CLA /SKIP IF NEITHER OR NULL STRING DCA I (NULZAP) /SETUP SPECIAL NULL STRING HANDLING DCA SEQSW /CLEAR SEQUENCE MODE DCA SWAPSW /PREVENT BEING SWAPPED TAD I L7756/[SPARM] /GET EQUALS PARAMETER CMA /IS IT 7777? SNA /SKIP IF NOT JMP ALLDO /DON'T RESTRICT FILE SEARCH CMA /RESTORE VALUE JMS I LNSRCH/[XLNSRCH] /FIND THAT LINE IN THE FILE NOP /DON'T CARE IF WE PASSED IT SKP /DON'T ALLDO, TAD BUFINFO/[FILBEG+3774] /DO USE LOWEST DCA I (SCRPTR) /STORE INITIAL ADDRESS TAD (INPBUF&177+7600) /GET INPUT BUFFER LENGTH JMS I PMOVE/[XMOVE] /MOVE THE ENTIRE COMMAND INPBUF /FROM HERE STRBUFFER /TO HERE JMP I (FCNEXT) /CONTINUE THERE NOSTRIN,JMS MESSAGE /TELL THEM NSTMSG /THEY FORGOT THE FIRST DELIMITER JMP I WHATMORE/XWHATMORE /KEEP GOING CTCSETU,.-. /<^C> SETUP ROUTINE TAD I (CTCZAP) /GET CURRENT <^C> VALUE TAD (-SRINST) /COMPARE TO POSSIBLE VALUE SZA CLA /SKIP IF IT MATCHES JMP CTCBAT /JUMP IF BATCH IS IN CONTROL HERE TAD JMPIL76/(JMP I L7600/[SBOOT]) /GET BOOTSTRAPPING INSTRUCTION DCA I (CTCZAP) /RIG <^C> HANDLER TO BOOTSTRAP NL0002 /SETUP "C" BIT AND I PSCRSIZE/[SCRSIZE] /GET THE BIT SZA CLA /SKIP IF NO OVERLAY PRESENT DCA I (CTCPZAP) /ELSE PREVENT EXTRA ^C SKP /DON'T DO OTHER! CTCBAT, DCA I (CTCBZAP) /PREVENT RESTORATION JMP I CTCSETUP /RETURN SRINST= JMP I PBEGIN/[XBEGIN] /INSTRUCTION VALUE BATFU, TEXT "STRING OPERATIONS NOT ALLOWED FROM BATCH WITHOUT /E!";0 NSTMSG, TEXT "NO STRING GIVEN!";0 PAGE RELOC /TURN OFF RELOCATION / EXTENDED COMMAND OVERLAY; COMES IN WITH SYSTEMS CATALOGUE. FIELD XCMGEN&70%10 /WHERE IT GENERATES *XCMGEN&7600 /GENERATION ADDRESS XCMCORE,NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT LOADS *XCMCORE /RESTORE ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC SWAPIN /WHERE IT EXECUTES / THE FOLLOWING TWO PAGES OF CODE AND THE FIRST TWO PAGES OF THE / SYSTEMS CATALOGUE ARE READ IN TOGETHER FROM THE BOOTSTRAPPED UNIT DEVICE. / ALL CODE NORMALLY IN THESE FOUR PAGES OF THE KEYBOARD MONITOR / MUST NOT BE REFERENCED BY ANY PART OF THIS OVERLAY! XGLINE, NL7777 /SETUP THE DCA SWAPSW /SWAP SWITCH TAD UNIT /GET CURRENT UNIT DCA OLDUNIT /SAVE IT TAD RADXSW /GET CURRENT RADIX DCA OLDRADIX /SAVE IT TAD I PSBTFUN/[SBTFUN] /GET BOOTSTRAP UNIT WORD AND L7/[7] /JUST UNIT BITS DCA UNIT /STORE NEW UNIT JMS I TUNIT/[XTUNIT] /TEST FOR ":UNIT" JMP SCATLOADED /WASN'T ANY JMS UNITIO /READ IN A NEW CATALOG HEAD CATPT, SWAPCAT /CATALOG ADDRESS IS JUST PAST OUR CODE 2^100+.-. /TWO BLOCKS ONLY; UNIT BITS WILL BE FILLED IN SYSCAT /SYSTEM CATALOG BLOCK SCATLOA,DCA I CATSTP/(SWAPCAT+374) /DELIMIT SHORT END OF CATALOG TAD L6/[6] /SETUP THE DCA TCNT1 /BUMP FACTOR DCA LOOKSW /DON'T ATTEMPT TO CREATE SYSTEM PROGRAM NAMES! TAD CATPT/(SWAPCAT) /POINT AT SYSTEMS CATALOG JMS I LOOKUP/[XLOOKUP] /LOOKUP THE NAME CLA /CLEAN UP TAD I XR1 /GET THE BLOCK NUMBER DCA SBLOCK+RP-SLOAD /STORE IN LIST TAD I XR1 /GET LOAD-LENGTH WORD DCA I PSCANF/(SCANF) /SAVE IT TAD I PSCANF/(SCANF) /GET IT BACK AND L40/[40] /JUST RADIX SAVE BIT SZA CLA /SKIP IF NOT ON JMP .+3 /JUST LEAVE RADIX ALONE TAD L7770/[-10] /SETUP FOR DCA RADXSW /OCTAL RADIX TAD I PSCANF/(SCANF) /GET LOAD-LENGTH WORD BACK AND L37/[37] /JUST LENGTH BITS CLL RTL;RTL;RTL /MOVE UP TO PAGE BITS TAD UNIT /ADD ON UNIT BITS DCA SFUN+RP-SLOAD /STORE FUNCTION WORD TAD I XR1 /GET STARTING ADDRESS WORD DCA I PSCANIF/(SCANIF) /SAVE IT TAD GETNDX /GET CURRENT INDEX VALUE DCA I PLINDEX/(LINDEX) /SAVE FOR LATER TAD I PSCANF/(SCANF) /GET LOAD-LENGTH WORD AND L100/[NOSCAN] /JUST FILE-SCAN BIT SZA CLA /SKIP IF OFF JMP NOFILES /PREVENT ANY FILE PRESCAN AND SCAN / IF FILES ARE ALLOWED, A PRESCAN MUST BE MADE TO ESTABLISH THE / ORDER OF FILE NAME SCANNING. THE SCAN CAN BE EITHER: / A) OUTPUTOUTPUT / IF A) IS CHOSEN, THEN OUTPUT FILE CREATION IS ASSUMED FIRST AND / SCANNING IS LEFT TO RIGHT ENDING ON . / IF B) IS CHOSEN, THEN OUTPUT FILE CREATION IS ASSUMED FIRST BUT / SCANNING STARTS JUST RIGHT OF THE ">". WHEN IS REACHED, THE / SCAN POINTER IS RESET TO THE LEFT AND SCANNING OCCURS LEFT TO RIGHT / UNTIL THE ">" IS REACHED. / IF NEITHER SCANNING CHARACTER IS FOUND, THEN NO OUTPUT FILE LIST EXISTS AND / EXISTENT INPUT FILE NAMES ARE ASSUMED. SCANNING WILL OCCUR LEFT TO RIGHT. PRSCNLP,JMS I GETHAF/[XGETHAF] /GET A CHARACTER SNA /? JMP ENDPRSCAN /YES, WE'RE DONE TAD SWITCH/(-">!200) /IS IT ">"? SZA /SKIP IF SO JMP TRYLFT /JUMP IF NOT ISZ RSCAN /INDICATE ">" FOUND TAD GETNDX /GET CURRENT INDEX IAC /PLACE IT PAST THE ">" DCA I PRINDEX/(RINDEX) /THIS WILL INDICATE RIGHT-TO-LEFT SCANNING LATER TRYLFT, TAD L2/[-"<+">] /IS IT "<"? SNA CLA /SKIP IF NOT ISZ LSCAN /INDICATE ">" FOUND ISZ GETNDX /BUMP TO NEXT CHARACTER JMP PRSCNLP /GO BACK FOR MORE / OPTION SWITCH PROCESSING ROUTINE. SWITCH, -">!200 /SWITCH OPTION ROUTINE TAD PPARMS/(PARMS-1) /POINT AT THE DCA TPTR1 /SWITCH PARAMETER LIST JMS I GETHAF/[XGETHAF] /GET A CHARACTER SNA /? JMP BADSW /YES, GO COMPLAIN TAD L7745/(-"[!300] /COMPARE TO ALPHABETIC LIMIT SPA /SKIP IF NOT ALPHABETIC JMP SWITOK /JUMP IF ALPHABETIC TAD L7741/[-":+"[-100] /COMPARE TO NUMERIC LIMIT STL /SET LINK FOR TEST TAD L12/[":-"0] /ADD ON RANGE SZL /SKIP IF VALID NUMERIC JMP BADSW /ELSE GO COMPLAIN SWITOK, TAD L32/("Z&77) /ADJUST TO RANGE 0-43 SWSUBTR,ISZ TPTR1 /BUMP TO NEXT SWITCH WORD TAD L7764/(-14) /SUBTRACT TWELVE BITS WORTH SMA /SKIP IF FAR ENOUGH JMP SWSUBTR /ELSE GO DO IT AGAIN DCA TCNT1 /SAVE BIT SHIFT COUNT STL /SET THE BIT RAL /MOVE UP ISZ TCNT1 /DONE YET? JMP .-2 /NO, KEEP GOING DCA TCNT1 /SAVE THE NEW BIT TAD TCNT1 /GET IT BACK CMA /INVERT THE BIT PATTERN AND I TPTR1 /KEEP OTHER BITS TAD TCNT1 /OR IN LATEST BIT DCA I TPTR1 /STORE ALL BITS BACK ISZ GETNDX /BUMP TO NEXT CHARACTER JMP I SWITCH /RETURN BADSW, JMS MESSAGE /TELL THEM BSWMSG /THEY GOOFED JMP I WHATMORE/[XWHATMORE] /CONTINUE THERE RP, RELOC SLOAD /RELOCATE TO WHERE THE FOLLOWING IS MOVED TO SLOAD, JMS SYSIO /CALL I/O ROUTINES TO LOAD THE PROGRAM SCORE, 0 /LOADING ADDRESS; MUST BE ZERO NOW! SFUN, .-. /FUNCTION WORD SBLOCK, .-. /BLOCK NUMBER JMP I SYSTART /GO START IT UP SYSTART,0 /STARTING ADDRESS; MUST BE ZERO NOW! RELOC RP+.-SLOAD /BACK TO WHERE WE WERE LSCAN= SCORE+RP-SLOAD /"<" SCAN COUNTER RSCAN= SYSTART+RP-SLOAD /">" SCAN COUNTER CATSTP, SWAPCAT+374 /POINTER TO WHERE TO END THE CATALOGUE L32, 32 /CONSTANT 0032 L7745, 7745 /CONSTANT 7745 L7764, 7764 /CONSTANT 7764 PLINDEX,LINDEX /POINTER TO LINDEX PPARMS, PARMS-1 /POINTER TO SWITCH PARAMETER LIST PRINDEX,RINDEX /POINTER TO RINDEX PSCANF, SCANF /POINTER TO SCANF PSCANIF,SCANIF /POINTER TO SCANIF / THE PRESCAN IS NOW FINISHED; CHECK FOR AT MOST EXACTLY ONE FILE SEPARATOR. / THE NATURE OF THE SEPARATOR WILL DETERMINE THE ORDER OF SCANNING. ENDPRSC,NL7777 /SET -1 TAD LSCAN /ADD ON "<" COUNT TAD RSCAN /ADD ON ">" COUNT SMA SZA /SKIP IF NONE OR ONE JMP I WHAT/[XWHAT] /COMPLAIN IF TOO MANY SMA CLA /SKIP IF NONE NL7777 /ELSE SET CREATE VALUE FOR OUTPUT FILES NOFILES,DCA I PPARMS/(OUTLSW) /SET OUTPUT FILE CREATION SWITCH FOR LATER / SINCE "LSCAN" AND "RSCAN" ARE NO LONGER NEEDED, WE NOW CAN USE THEM FOR THEIR / ALTERNATE PURPOSES AS LIST ELEMENTS FOR THE SYSTEM LOADER IMAGE. TAD I PSCANF/(SCANF) /GET LOAD-LENGTH WORD AND L7600/[7600] /JUST ON-PAGE BITS DCA SCORE+RP-SLOAD /STORE IN LOADING ADDRESS WORD TAD I PSCANIF/(SCANIF)/GET STARTING ADDRESS WORD AND L7600/[7600] /JUST PAGE BITS DCA SYSTART+RP-SLOAD/STORE IN STARTING ADDRESS WORD TAD OLDUNIT /GET PREVIOUS UNIT DCA UNIT /RESTORE IT / JMP I (SCNSET) /FALL THROUGH AND CONTINUE THERE PAGE SCNSET, TAD RINDEX /DOING RIGHT-TO-LEFT SCAN? SNA /SKIP IF SO TAD LINDEX /ELSE USE LEFT-TO-RIGHT SCAN POINTER DCA GETNDX /STORE EITHER WAY TAD DOLLSW /GET WRITE "$" WORD SNA CLA /SKIP IF SET JMP NOSAVE /ELSE FORGET IT JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES FILBEG /TO WRITE THE ACTIVE FILE FILSIZE^100+WRITE /IN $:[BOOTSTRAP UNIT] DOLBLK /BEFORE STARTING IT UP NOSAVE, JMP I RST /NOW GO DO (BATCH AND THEN) NEXT PART / COMES HERE AFTER POSSIBLY PERFORMING BATCH SAVE OPERATIONS. SCMORE, NL7777 /SETUP THE DCA I L7756/[SPARM] /DEFAULT "=" VALUE SCNLUP, JMS I TSPACE/[XTSPACE]/ELIMINATE ANY JMS I GETHAF/[XGETHAF]/GET A CHARACTER SNA /? JMP ENDLINE /YES TAD (-",!200) /IS IT ","? SNA /SKIP IF NOT JMP SCNEXT /IGNORE "," TAD L7756/[-">+",] /IS IT ">"? SNA /SKIP IF NOT JMP GOTGT /JUMP IF SO IAC/TAD (-"=+">) /IS IT "="? SNA /SKIP IF NOT JMP GOTEQ /JUMP IF SO IAC/TAD (-"<"+=) /IS IT "<"? SNA /SKIP IF NOT JMP GOTLT /JUMP IF SO TAD L15/[-"/+"<] /IS IT "/"? SNA /SKIP IF NOT JMP GOTSLSH /JUMP IF SO TAD L7/[-"(+"/] /IS IT "("? SZA CLA /SKIP IF SO JMP SCNFILE /JUMP IF NOT ISZ GETNDX /BUMP PAST "(" MORESW, JMS I (SWITCH) /PROCESS NEXT AS SWITCH JMS I GETHAF/[XGETHAF]/GET NEXT CHARACTER SNA /SKIP IF NOT JMP ENDLINE /JUMP IF TAD (-")!200) /COMPARE TO ")" SZA CLA /SKIP IF IT MATCHES JMP MORESW /ELSE GO PROCESS ANOTHER SWITCH SCNEXT, ISZ GETNDX /BUMP TO NEXT JMP SCNLUP /KEEP GOING SCNFILE,TAD SCANF /GET LOAD-LENGTH WORD AND L100/[NOSCAN] /JUST FILE-SCAN BIT SZA CLA /SKIP IF FILE-SCAN ALLOWED JMP GOTGT /JUMP IF NOT TAD OUTLSW /GET LOOKUP CREATE SWITCH JMS I PFILNAM/[FILNAM]/TRY TO LOCATE FILE TMNYZAP,SKP /**** TOO MANY FILES **** 0000 JMP I WHAT/[XWHAT] /JUMP IF TOO MANY FILES TAD UNIT /ADD ON UNIT BITS DCA I FILPTR /STORE A FILE SPECIFICATION ISZ FILPTR /BUMP TO NEXT FILE SKP /SKIP IF NOT AT END OF LIST DCA TMNYZAP /PREVENT EXTRA FILES IF WE GET HERE JMP SCNLUP /KEEP GOING ENDLINE,TAD RINDEX /GET RIGHT-TO-LEFT SCAN INDICATOR SNA CLA /SKIP IF SET JMP GOTGT /ELSE WE'RE DONE TAD LINDEX /RESET THE SCAN DCA GETNDX /TO PARSE THE LEFT PORTION LTENTRY,DCA OUTLSW /EXISTENT INPUT FILES FROM NOW ON TAD FILPTR /GET THE POINTER TAD (21) /UPDATE TO OUTPUT FILE COUNT DCA PARMS+3 /STORE IN LIST TAD SCANIF /LOOK AT STARTING ADDRESS WORD AND L100/[NOSCAN] /JUST INPUT FILE-SCAN BIT SNA CLA /SKIP IF INPUT FILE SCAN NOT ALLOWED JMP SCNLUP /ELSE KEEP GOING GOTGT, DCA I FILPTR /DELIMIT FILE LIST TAD OLDUNIT /GET PREVIOUS UNIT DCA UNIT /RESTORE IT TAD L7774/[-4] /SETUP MOVE COUNT JMS I PMOVE/[MOVE] /MOVE DOWN THE SWITCH PARAMETERS PARMS /FROM OUR LIST SWAL /TO PERMANENT LIST TAD L7772/[-6] /SET MOVE COUNT JMS I PMOVE/[MOVE] /MOVE DOWN THE SYSTEM LOADER RP /FROM OUR LIST SLOAD /TO PERMANENT LIST NL0002 /SETUP "C" BIT MASK AND I PSCRSIZ/[SCRSIZ]/GET THE "C" BIT SZA CLA /SKIP IF OFF JMP I PSLOAD/[SLOAD] /ELSE JUST GO START IT UP TSFIOT /WAIT FOR JMP .-1 /FLAG TO COME UP TFLIOT /JUST IN CASE DECMATE JMP I PSLOAD/[SLOAD] /GO START IT UP GOTLT, ISZ GETNDX /BUMP PAST "<" JMP LTENTRY /CONTINUE THERE GOTEQ, ISZ GETNDX /BUMP PAST "=" ISZ I L7756/[SPARM] /"=" FOUND EARLIER? SKP /SKIP IF SO JMS I LINENO/[XLINENO]/NO, LOOK FOR ONE NOW JMP I WHAT/[XWHAT] /COMPLAIN ON BAD "=" DCA I L7756/[SPARM] /STORE NEW "=" PARAMETER VALUE JMP SCNLUP /KEEP GOING GOTSLSH,ISZ GETNDX /BUMP PAST "/" JMS I (SWITCH) /PROCESS NEXT AS SWITCH JMP SCNLUP /KEEP GOING FILPTR, SFILES /FILE LIST POINTER LINDEX, .-. /LEFT TO RIGHT SCAN INDEX TEMPORARY OUTLSW, .-. /OUTPUT FILES CREATE SWITCH PARMS, 0000 /A-/L 0000 /M-/X 0000 /Y-/9 0 /OUTPUT FILE COUNT IFNZRO PARMS-1-OUTLSW RINDEX, 0 /RIGHT TO LEFT SCAN INDEX AND INDICATOR SCANF, .-. /LOAD-LENGTH WORD STORED HERE SCANIF, .-. /STARTING ADDRESS WORD STORED HERE BSWMSG, TEXT "BAD SWITCH!" PAGE SWAPCAT=. /FIRST TWO PAGES OF CATALOGUE GO HERE RELOC /TURN OFF RELOCATION / "R" COMMAND PROCESSOR. FIELD RUNGEN&70%10 /GENERATION FIELD *RUNGEN&7600 /GENERATION ADDRESS RUNCORE,NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT LOADS *RUNCORE /RESTORE ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC SYSLEN+EXTLEN^200+FILBEG/WHERE IT EXECUTES / THE FOLLOWING CODE IS READ INTO THE FILE AREA ALONG WITH THE / SYSTEMS CATALOGUE AND EXTENDED USER'S CATALOGUE FROM THE / BOOTSTRAP UNIT DEVICE. RSTART, DCA I WHATMORE/[XWHATMORE] /ALL ERRORS ULTIMATELY BOOTSTRAP / THE CURRENT FILE UNIT MAY NOT BE THE SAME AS THE SYSTEM BOOTSTRAP UNIT, / SO WE SAVE IT FIRST THEN ASSUME THE BOOTSTRAP UNIT FOR OUR SYSTEM PROGRAM. TAD UNIT /GET CURRENT UNIT DCA OLDUNIT /SAVE IT TAD RADXSW /GET CURRENT RADIX DCA OLDRADIX /SAVE IT TAD I PSBTFUN/[SBTFUN] /GET BOOTSTRAP UNIT WORD AND L7/[7] /JUST UNIT BITS DCA UNIT /USE AS CURRENT UNIT / WE CHECK FOR BATCH RUNNING NOW, BEFORE ANY ERRORS (WHICH ULTIMATELY / BOOTSTRAP) OCCUR. BATCH WILL BE MODIFIED TO COME BACK TO US BEFORE WE / BRANCH TO IT. TAD RST /GET EXTENDED COMMAND BREAK ADDRESS TAD (-EBRK) /COMPARE TO BATCH VALUE SZA CLA /SKIP IF IT MATCHES JMP RSNAME /JUMP IF NOT TAD (RFIX) /MAKE IT COME BACK TO US DCA I (ERST) /AFTER IT'S DONE ITS STUFF JMP I RST /GO DO THE BATCH STUFF / COMES BACK HERE AFTER BATCH PREAKPOINT OPERATIONS HAVE BEEN DONE. RFIX, TAD (SCMORE) /RESET THE DCA I (ERST) /PREVIOUS VALUE RSNAME, JMS I NAME/[XNAME] /TRY TO FIND A SYSTEM NAME JMP TRYPERCENT /NOT A NAME, TRY % OR $ / IF A :UNIT CONSTRUCTION WAS SPECIFIED AND IS DIFFERENT FROM THE / BOOTSTRAP UNIT NUMBER THEN THE SYSTEMS CATALOGUE FROM THE NEW UNIT IS USED. JMS I TUNIT/[XTUNIT] /LOOK FOR :UNIT JMP SAMUNIT /FORGET IT TAD I PSBTFUN/SBTFUN] /GET BOOTSTRAP UNIT WORD AND L7/[7] /JUST UNIT BITS CIA /INVERT FOR TEST TAD UNIT /COMPARE TO DESIRED UNIT SNA CLA /SKIP IF DIFFERENT JMP SAMUNIT /JUMP IF THIS UNIT'S CATALOGUE AVAILABLE JMS UNITIO /CALL I/O ROUTINES SCATPT, FILBEG /READ IN NEW SYSTEMS CATALOGUE SYSLEN^100 /FROM NEW UNIT SYSCAT /BLOCK NUMBER SAMUNIT,TAD L6/[6] /SETUP THE DCA TCNT1 /BUMP FACTOR DCA LOOKSW /PREVENT CREATION! TAD SCATPT/(FILBEG) /POINT AT CATALOGUE JMS I LOOKUP/[XLOOKUP] /LOOKUP SYSTEM NAME CLA /CLEAN UP PERCIN, TAD I XR1 /GET BLOCK NUMBER DCA SBLOCK+RA-SLOAD /STASH IT IN LIST TAD I XR1 /GET LOAD/LENGTH WORD DCA LODLEN /STASH IT TAD LODLEN /GET IT BACK AND L40/[40] /JUST RADIX SAVE BIT SZA CLA /SKIP IF OFF JMP .+3 /JUMP IF ON TAD L7770/[-10] /SETUP FOR DCA RADXSW /OCTAL RADIX TAD LODLEN /GET LOAD/LENGTH WORD AND L7600/[7600] /JUST PAGE BITS DCA SCORE+RA-SLOAD /STORE IN LIST TAD LODLEN /GET LOAD/LENGTH WORD AND L37/[37] /JUST LENGTH BITS CLL RTL;RTL;RTL /MOVE UP TO PAGE BITS TAD UNIT /ADD ON SYSTEM UNIT DCA SFUN+RA-SLOAD /STORE IN LIST TAD I XR1 /GET STARTING ADDRESS WORD DCA STARTADDRESS /STASH IT TAD STARTADDRESS /GET IT BACK AND L7600/[7600] /JUST PAGE BITS DCA SYSTART+RA-SLOAD /STORE IN LIST TAD GETNDX /GET CURRENT SCAN INDEX DCA LINDX /SAVE IT FOR LEFT TO RIGHT SCAN LATER TAD LODLEN /GET LOAD/LENGTH WORD AND L100/[NOSCAN] /JUST FILE-SCAN BIT SZA CLA /SKIP IF FILES ALLOWED JMP NOFILS /JUMP IF NOT / SINCE FILES ARE ALLOWED, A PRESCAN MUST BE MADE TO ESTABLISH THE ORDER OF THE / FILE NAME SCANNING. SEE EXTENDED COMMAND CODE ABOVE FOR FURTHER EXPLANATION. PSCNLP, JMS I GETHAF/[XGETHAF] /GET A CHARACTER SNA /? JMP ENDPSCN /YES, WE'RE DONE TAD (-">!200) /IS IT ">"? SZA /SKIP IF SO JMP TRLEFT /JUMP IF NOT ISZ RSCN /INDICATE ">" FOUND TAD GETNDX /GET CURRENT INDEX IAC /BUMP PAST ">" DCA RINDX /STORE FOR RIGHT TO LEFT SCAN TRLEFT, TAD L2/[-"<+">] /IS IT "<"? SNA CLA /SKIP IF NOT ISZ LSCN /INDICATE "<" FOUND ISZ GETNDX /BUMP TO NEXT CHARACTER JMP PSCNLP /KEEP GOING / AT THIS POINT THERE BETTER BE AT MOST EXACTLY ONE FILE SEPARATOR. / IF NONE ARE FOUND, THEN ASSUME ONLY INPUT FILE NAMES ARE ALLOWED. ENDPSCN,NL7777 /SET -1 TAD LSCN /ADD ON LEFT SCAN DETECT TAD RSCN /ADD ON RIGHT SCAN DETECT SMA SZA /SKIP IF ONE OR NONE JMP I (BADSCAN) /ELSE COMPLAIN SMA CLA /SKIP IF NONE NL7777 /SETUP FOR OUTPUT FILE CREATION NOFILS, DCA I (OUTLOOK) /STORE EITHER WAY JMP I (SEQSET) /KEEP GOING / IF % OR $ ARE GIVEN AS THE SYSTEM NAME, THEN SUPPLY DEFAULT ARGUMENTS / TO RUN THE DEFAULT CORE IMAGE AS A PROGRAM. TRYPERC,JMS I GETHAF/[XGETHAF] /GET THE CHARACTER TAD (-"$!200) /COMPARE TO "$" CLL RAR /ALLOW "$" OR "%" SZA CLA /SKIP IF EITHER JMP I (BADNAME) /JUMP IF NEITHER ISZ GETNDX /BUMP PAST % OR $ JMS I TUNIT /TEST FOR :UNIT NOP /DON'T CARE TAD (PERLIST-1) /POINT AT DCA XR1 /DEFAULT LIST JMP PERCIN /CONTINUE THERE LINDX, .-. /LEFT SCAN INDEX LSCN, 0 /LEFT SCAN COUNTER RINDX, 0 /RIGHT SCAN INDEX AND FLAG RSCN, 0 /RIGHT SCAN COUNTER / DEFAULT PROGRAM PARAMETER LIST. PERLIST,BINADR /BLOCK 0020 LODLEN, 37 /LOADS INTO 0-7577 STARTAD,0200 /STARTS AT 0200 / SYSTEM LOADER ARGUMENT LIST. RA, RELOC SLOAD /WHERE THIS GOES SLOAD, JMS SYSIO /CALL I/O ROUTINES SCORE, .-. /TRANSFER ADDRESS SFUN, .-. /FUNCTION WORD SBLOCK, .-. /BLOCK NUMBER JMP I SYSTART /GO START IT UP SYSTART,.-. /STARTING ADDRESS RELOC RA+.-SLOAD /BACK TO WHERE WE WERE PAGE SEQSET, NL7777 /SETUP THE DEFAULT DCA I L7756/[SPARM] /EQUALS PARAMETER / IF ">" WAS FOUND, THEN SCANNING OCCURS LEFT TO RIGHT. / IF "<" WAS FOUND, THEN SCANNING OCCURS RIGHT TO LEFT. / SINCE OUTPUT FILES ARE ALWAYS SCANNED FIRST, SET THE SCAN POINTER TO / THE OUTPUT SECTION FIRST. TAD I (RINDX) /GET RIGHT SCAN INDICATOR SNA /SKIP IF GOING RIGHT TO LEFT TAD I (LINDX) /ELSE USE LEFT TO RIGHT SCAN NOW DCA GETNDX /RESTORE EITHER WAY / THE UNIT ASSOCIATED WITH THE SYSTEM PROGRAM IS NOT RELATED TO THE / UNIT OF THE PREVAILING DIRECTORIES. THEREFORE, THE UNIT IS RESET TO ITS / PRIOR VALUE BEFORE THE COMMAND. TAD OLDUNIT /RESTORE PREVIOUS UNIT AS IT WAS DCA UNIT /BEFORE SYSTEM NAME WAS PARSED / CHECK IF THE PREVIOUS UNIT MATCHES THE BOOTSTRAP UNIT; IF NOT THEN / READ IN THE CORRESPONDING EXTENDED USER DIRECTORY. TAD I PSBTFUN/[SBTFUN] /GET BOOTSTRAP UNIT WORD AND L7/[7] /JUST UNIT BITS CIA /INVERT FOR TESTING TAD UNIT /COMPARE TO PREVIOUS UNIT SNA CLA /SKIP IF DIFFERENT JMP ZAPFULL /JUMP IF IT MATCHES JMS UNITIO /CALL I/O ROUTINES SYSLEN^200+FILBEG /EXTENDED USER DIRECTORY BUFFER ADDRESS EXTLEN^100 /FUNCTION WORD EXTCAT /BLOCK / BEFORE POSSIBLY SCANNING FILE NAMES, ENSURE "CATALOG FULL!" ERRORS WILL / ULTIMATELY BOOTSTRAP. ZAPFULL,TAD (JMP I WHATMORE/[XWHATMORE]) /GET BOOTSTRAPPING INSTRUCTION DCA I (FULLZAP) /PATCH CATALOG FULL ROUTINE / NOW SCAN CURRENT HALF OF COMMAND LINE FOR ALL POSSIBLE OPTION ELEMENTS / AS WELL AS (INPUT OR OUTPUT) FILE NAMES. SCANLP, JMS I TSPACE/[XTSPACE] /IGNORE AND JMS I GETHAF/[XGETHAF] /GET A CHARACTER SNA /? JMP EOLINE /YES TAD (-",!200) /COMPARE TO "," SNA /SKIP IF OTHER JMP SCNNXT /IGNORE "," TAD L7756/[-">+",] /COMPARE TO ">" SNA /SKIP IF OTHER JMP SCANGT /JUMP IF IT MATCHES IAC/TAD (-"=+">) /COMPARE TO "=" SNA /SKIP IF OTHER JMP SCANEQ /JUMP IF IT MATCHES IAC/TAD (-"<+"=) /COMPARE TO "<" SNA /SKIP IF OTHER JMP SCANLT /JUMP IF IT MATCHES TAD L15/[-"/+"<] /COMPARE TO "/" SNA /SKIP IF OTHER JMP SCANSLSH /JUMP IF IT MATCHES TAD L7/[-"(+"/] /COMPARE TO "(" SZA CLA /SKIP IF IT MATCHES JMP SCANFILES /JUMP IF FILE NAME ONLY THING LEFT ISZ GETNDX /BUMP PAST "(" SWMORE, JMS I (PROCSW) /PROCESS LATEST SWITCH CHARACTER JMS I GETHAF/[XGETHAF] /GET NEXT CHARACTER SNA /? JMP EOLINE /YES TAD (-")!200) /COMPARE TO ")" SZA CLA /SKIP IF END OF GROUP JMP SWMORE /ELSE GO DO ANOTHER SWITCH SCNNXT, ISZ GETNDX /BUMP PAST LATEST CHARACTER JMP SCANLP /KEEP GOING SCANFIL,TAD I (LODLEN) /GET LOAD/LENGTH WORD AND L100/[NOSCAN] /JUST FILE-SCAN BIT SZA CLA /SKIP IF FILES ARE ALLOWED JMP SCANGT /JUMP IF NOT TAD OUTLOOK /GET CREATION SWITCH JMS I PFILNAME/[FILNAME] /TRY TO LOCATE FILE TOOMNY, SKP /**** TOO MANY FILES **** 0000 JMP I (MANYFILES) /COMPLAIN OF TOO MANY FILES TAD UNIT /ADD ON UNIT BITS DCA I FILEPTR /STORE A FILE SPECIFICATION ISZ FILEPTR /BUMP TO NEXXT FILE SLOT SKP /SKIP IF NOT AT END OF LIST DCA TOOMNY /PREVENT ADDITIONAL FILES JMP SCANLP /KEEP GOING SCANLT, ISZ GETNDX /BUMP TO NEXT JMP LTCONTINUE /KEEP GOING EOLINE, TAD I (RINDX) /GET RIGHT SCAN INDICATOR SNA CLA /SKIP IF SET JMP SCANGT /ELSE WE'RE DONE TAD I (LINDX) /RESET THE SCAN POINTER DCA GETNDX /FOR LEFT PORTION OF COMMAND LINE LTCONTI,DCA OUTLOOK /CLEAR CREATION SWITCH TAD FILEPTR /GET THE FILE POINTER TAD (21) /UPDATE TO FILE COUNT DCA I (RPARMS+3) /STORE IN LIST TAD I (STARTADDRESS) /GET STARTING ADDRESS WORD AND L100/[NOSCAN] /JUST INPUT FILE SCAN BIT SNA CLA /SKIP IF SET JMP SCANLP /KEEP GOING IF INPUT FILES ALLOWED SCANGT, DCA I FILEPTR /DELIMIT THE FILE LIST TAD OLDUNIT /GET PREVIOUS UNIT FILZERO,DCA UNIT /MAKE IT THE CURRENT UNIT DCA I FILZERO/(FILBEG) /MAKE FILE EMPTY JMP I (RENDIT) /CONTINUE THERE / EQUALS PROCESSOR. SCANEQ, ISZ GETNDX /BUMP PAST "=" ISZ I L7756/[SPARM] /DID WE SEE ONE ALREADY? SKP /SKIP IF SO JMS I LINENO/[XLINENO] /GET THE VALUE IF NOT JMP I (BADEQ) /COMPLAIN IF BAD OR REPEAT DCA I L7756/[SPARM] /STORE THE VALUE JMP SCANLP /KEEP GOING / SLASH PROCESSOR. SCANSLS,ISZ GETNDX /BUMP PAST "/" JMS I (PROCSW) /PROCESS THE SWITCH JMP SCANLP /KEEP GOING FILEPTR,SFILES /FILE POINTER OUTLOOK,.-. /LOOKUP CREATION SWITCH PAGE / COMES HERE TO FINISH UP AND START UP THE PROGRAM. RENDIT, NL7777 /INDICATE THE DCA SWAPSW /NEED TO SWAP TAD L7774/[-4] /SET THE MOVE COUNT JMS I PMOVE/[MOVE] /MOVE THE END OF FILE FILCLR /FROM HERE FILBEG+3774 /TO HERE TAD L7774/[-4] /SET THE MOVE COUNT JMS I PMOVE/[MOVE] /MOVE THE SWITCH OPTIONS AND OUTPUT FILE COUNT RPARMS /FROM HERE SWAL /TO HERE TAD L7772/[-6] /SET THE MOVE COUNT JMS I PMOVE/[MOVE] /MOVE THE SYSTEM LOADER IMAGE RA /FROM HERE SLOAD /TO HERE NL0002 /SET THE "C" BIT AND I PSCRSIZE/[SCRSIZE] /GET THE BIT SZA CLA /SKIP IF NORMAL MODE JMP I PSLOAD/[SLOAD] /START IT UP IF "C" BIT SET TSFIOT /WAIT FOR JMP .-1 /THE FLAG TFLIOT /IN CASE DECMATE JMP I PSLOAD/[SLOAD] /GO START IT UP / ERROR ROUTINES. BADEQ, JMS MESSAGE /COMPLAIN OF BEQMSG /BAD "=" JMP I WHATMORE/[XWHATMORE] /FORGET IT BADNAME,JMS MESSAGE /COMPLAIN OF BDNMSG /IMPROPER PROGRAM NAME JMP I WHATMORE/[XWHATMORE] /FORGET IT BADOSW, JMS MESSAGE /COMPLAIN OF BDSWMSG /BAD SWITCH JMP I WHATMORE/[XWHATMORE] /FORGET IT BADSCAN,JMS MESSAGE /COMPLAIN OF BFSMSG /BAD < OR > JMP I WHATMORE/[XWHATMORE] /FORGET IT MANYFIL,JMS MESSAGE /COMPLAIN OF TMFMSG /TOO MANY FILES JMP I WHATMORE/[XWHATMORE] /FORGET IT / SWITCH PROCESSING ROUTINE. PROCSW, .-. /SWITCH PROCESSING ROUTINE TAD (RPARMS-1) /POINT AT DCA TPTR1 /SWITCH LIST JMS I GETHAF/[XGETHAF] /GET THE CHARACTER SNA /? JMP BADOSW /YES, COMPLAIN TAD (-"[!300) /COMPARE TO ALPHABETIC LIMIT SPA /SKIP IF NOT ALPHABETIC JMP SWOK /JUMP IF IT IS TAD L7741/[-":+"[-100] /COMPARE TO NUMERIC LIMIT STL /SET LINK FOR TEST TAD L12/[":-"0] /ADD ON RANGE SZL /SKIP IF VALID NUMERIC JMP BADOSW /JUMP IF NOT SWOK, TAD ("Z&77) /ADJUST TO RANGE 0-43 SWSUB, ISZ TPTR1 /BUMP TO NEXT WORD TAD (-14) /SUBTRACT TWELVE BITS WORTH SMA /SKIP IF NOW AT RIGHT WORD JMP SWSUB /ELSE KEEP GOING DCA TCNT1 /SAVE REMAINDER AS SHIFT COUNT STL /SET THE BIT RAL /MOVE IT OVER ISZ TCNT1 /DONE YET? JMP .-2 /NO, KEEP GOING DCA TCNT1 /SAVE THE BIT TAD TCNT1 /GET IT BACK CMA /INVERT IT AND I TPTR1 /PRESERVE OTHER BITS TAD TCNT1 /OR IN OUR BIT DCA I TPTR1 /STORE EVERYONE BACK ISZ GETNDX /BUMP TO NEXT CHARACTER JMP I PROCSW /RETURN / IMAGE OF END OF EMPTY FILE. FILCLR, FILBEG /DUMMY - POINTER TO START OF THIS LINE 7777 /DUMMY - LINE NUMBER FILBEG /POINTER TO FIRST AVAILABLE SPACE FILBEG+3774 /POINTER TO DUMMY PAIR OF POINTERS / IMAGE OF SWITCH OPTIONS AND OUTPUT FILE COUNT. RPARMS, 0000 /SWITCHES /A-/L 0000 /SWITCHES /M-/X 0000 /SWITCHES /Y-/9 0 /OUTPUT FILE COUNT / ERROR MESSAGES. BDNMSG, TEXT "BAD SYSTEM NAME!";0 BDSWMSG,TEXT "BAD SWITCH!" BEQMSG, TEXT "BAD EQUALS PARAMETER!" BFSMSG, TEXT "BAD FILE SEPARATOR!" TMFMSG, TEXT "TOO MANY FILES!" PAGE ZBLOCK 200 /RESERVED FOR EXPANSION RELOC /TURN OFF RELOCATION / IMAGE OF SLURP LOADER BLOCK. FIELD SLPGEN&70%10 /GENERATION FIELD *SLPGEN&7600 /GENERATION ADDRESS SLPCORE,NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT LOADS *SLPCORE /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC SBOOT /WHERE IT EXECUTES SBOOT, ZBLOCK BBLEN /PORTION OF LOADER WHICH IS ALSO BOOTSTRAP ZBLOCK BCIF-. /PORTION OF LOADER BCIF, ZBLOCK SPARM-. /CIF CDF STARTUP FIELD GOES HERE SPARM, BERR /DEFAULT START TO SAFE LOADER HALT GOES HERE SFILES, RELOC BINIT2 /FILES WILL BE PASSED HERE BINIT2, ZBLOCK BINITLN /BOOTSTRAP UNIT SETUP CODE WILL GO HERE RELOC SFILES+BINITLN /RESET ORIGIN RELATIVE TO SBOOT SLPSA, BREAD /STARTING ADDRESS OF LOADER; 0 MEANS USE /V / TYPICAL VALUES. BERR= 7742 /DEFAULT SAFE HALT ADDRESS BREAD= 7665 /STARTING ADDRESS OF LOADER RELOC /TURN OFF RELOCATION / DEFAULT EXTENSION DEFINITIONS. / TO BE USED IN SYSTEMS CATALOG ENTRIES FOR EXTENDED EXECUTION. TYPE0= 0 /NO OUTPUT, NO INPUT TYPE1= 1 /GENERAL OUTPUT, GENERAL INPUT TYPE2= 2 /NO OUTPUT, BINARY INPUT TYPE3= 3 /BINARY INPUT, BINARY OUTPUT TYPE4= 4 /BINARY OUTPUT, NO INPUT TYPE5= 5 /ASCII OUTPUT, ASCII INPUT TYPE6= 6 /ASCII OUTPUT, NO INPUT TYPE7= 7 /BINARY OUTPUT, PAL INPUT TYPE10= 10 /PAL OUTPUT, PAL INPUT TYPE11= 11 /NO OUTPUT, BATCH INPUT TYPE12= 12 /NO OUTPUT, DUMP INPUT TYPE13= 13 /NO OUTPUT, FOCAL INPUT TYPE14= 14 /PAL OUTPUT, NO INPUT TYPE15= 15 /NO OUTPUT, PAL INPUT / DEFINE ADDITIONAL TYPES AS NECESSARY. / IMAGE OF SYSTEMS CATALOG. / EXTENDED COMMAND PROCESSOR CANNOT ACCESS ANY SYSTEM PROGRAM PAST FIRST PAGE. FIELD SYSCGEN&70%10 /WHERE IT GENERATES *SYSCGEN&7600 /WHERE IT LOADS SYSCADR,TEXT "ODT";0 /OCTAL DEBUGGING TECHNIQUE ODTBLK /BLOCK NUMBER 0000+ODTLEN /LOAD ADDRESS+LENGTH ODSTRT+TYPE1 /STARTING ADDRESS TEXT "BATCH" /BATCH SYSTEM BATBLK /BLOCK NUMBER BATMEM+BATLEN /LOAD ADDRESS+LENGTH BATSTRT+TYPE11 /STARTING ADDRESS TEXT "BIN";0 /BINARY LOADER BINBLK /BLOCK NUMBER 0000+BINLEN /LOAD ADDRESS+LENGTH BSTART+TYPE3 /STARTING ADDRESS TEXT "GET";0 /GET COMMAND (SYSTEM) BINBLK /BLOCK NUMBER 0000+BINLEN /LOAD ADDRESS+LENGTH GET+TYPE3 /STARTING ADDRESS TEXT "START" /START COMMAND (SYSTEM) BINBLK /BLOCK NUMBER 0000+BINLEN /LOAD ADDRESS+LENGTH START+TYPE1 /STARTING ADDRESS TEXT "DUMP";0 /DUMP SYSTEM DUMBLK /BLOCK NUMBER 0000+DUMLEN /LOAD ADDRESS+LENGTH DUMSTRT+TYPE12 /STARTING ADDRESS TEXT "CHANGE" /CHANGE SYSTEM CHNGBLK /BLOCK NUMBER XGLINE+CHNGLEN+KEPRADX+NOSCAN /LOAD ADDRESS+LENGTH CHANGE+TYPE0 /STARTING ADDRESS TEXT "FIND";0 /FIND SYSTEM CHNGBLK /BLOCK NUMBER XGLINE+CHNGLEN+KEPRADX+NOSCAN /LOAD ADDRESS+LENGTH FIND+TYPE0 /STARTING ADDRESS 0000 /THIS ENDS THE CATALOGUE ZBLOCK SYSLEN^200-1+SYSCADR-. /ZERO OUT REST OF TABLE LOWBLK /FIRST FREE BLOCK (WORST CASE) / P?S MONITOR GENERATOR (CONSTANT VOLTAGE TYPE). FIELD 0 /WHERE THIS GOES *6600 /AS GOOD A PLACE AS ANY GENASYS=. /START MONGENNING HERE G1177, TAD L7/["G&37] /\ GTEMP, TLSIOT / >RING THE AND HALT GTEMP0, HLT // LAS /GET THE CONSOLE SWITCHES CMA /INVERT THEM SNA CLA /SKIP IF THEY WEREN'T ALL SET JMP GENTHIS /JUMP IF THEY WERE GLOOP, TAD I GTEM/(GENAD1) /\ DCA I GCLEAR/(SBOOT) / \ ISZ GTEM/(GENAD1) / >MOVE THE I/O ROUTINES UP ISZ GCLEAR/(SBOOT) / / JMP GLOOP // GLOOP2, CDF EXHGFLD /WHERE HELPER CODE IS NOW TAD I GHSTRT/(EXHGEN&7600) /GET A WORD DCA I GHFNSH/(EXHRUN&7600) /PUT A WORD ISZ GHSTRT/(EXHGEN&7600) /BUMP TO NEXT ISZ GHFNSH/(EXHRUN&7600) /DONE YET? JMP GLOOP2 /NO, GO BACK CDF 00 /BACK TO FIELD 0 JMS I (STHFIX) /FIXUP ANY HANDLER PROBLEMS NOW GENTHIS,JMS I SSYSIO/[SYSIO] /WRITE OUT I/O ROUTINE (WORKING COPY) GENAD1 /WHERE ROUTINES ARE 1^100+WRITE /ONE ONLY 0 /ONTO BLOCK ZERO JMS I SSYSIO/[SYSIO] /WRITE SOME MORE 0 /FROM PAGE ZERO 14^100+WRITE /EDITOR AND EDIT COMMAND 1 /STARTING AT BLOCK ONE JMS GCLEAR /CLEAR 1000-1777 TAD GLOW /GET LOWEST BLOCK CIA /INVERT TAD DEVSIZE /NOW HAVE USER BLOCKS AVAILABLE CLL RAR;CLL RAR;CLL RAR;CLL RAR /DIVIDE BY 20 TAD (-124) /COMPARE TO MAXIMUM SMA /SKIP IF LESS CLA /ELSE IGNORE EXCESS TAD (124) /RESTORE VALUE DCA GTEMP0 /SAVE USER FILE COUNT TAD GTEMP0 /GET IT BACK CLL RAL /*2 TAD GTEMP0 /*3 TAD CATCORE/[CATADR]/UFILES^3+CATADR CIA /INVERT FOR LIMIT DCA GTEMP1 /SAVE IT TAD GTEMP0 /GET COUNT CLL RTL;RTL /*20 TAD GLOW /ADD ON FIRST USER BLOCK DCA GTEMP2 /SAVE UPPER LIMIT NL7775 /MOVE JMS I PMOVE/[MOVE] /CATALOG GTEMP1 /POINTERS 1375 /DOWN JMS I SSYSIO/[SYSIO] /WRITE ON G1000, 1000 /EMPTY CATALOG CORE 2^100+WRITE /TWO ONLY DIR /FIRST DIRECTORY BLOCK JMS GCLEAR /CLEAR OUT BUFFER NL7777 /BACKUP TAD DEVSIZE /NOW HAVE HIGHEST BLOCK DCA GTEMP1 /STASH IT NL7776 /SET TO MOVE 2 WORDS JMS I PMOVE/[MOVE] /CALL THE MOVE ROUTINE GTEMP1 /PARAMETERS FOR EXTENDED FILES 1576 /MOVED TO I/O AREA JMS I SSYSIO/[SYSIO] /\ 1000 / \WRITE OUT THE ENTIRE EXTLEN^100+WRITE / /EXTENDED USER CATALOG EXTCAT // JMP I (GNSYS2) /GO TO REST OF GENERATION CODE GCLEAR, SBOOT /CLEAR ROUTINE; INITIALIZED FOR I/O MOVE TAD G1000/(1000) /START OF BUFFER DCA GTEM /TO POINTER TAD CATCORE/[-1000] /BUFFER COUNT DCA GTEMP /TO COUNTER DCA I GTEM /CLEAR A WORD ISZ GTEM /BUMP POINTER ISZ GTEMP /ANOTHER? JMP .-3 /GO BACK 'TIL DONE JMP I GCLEAR /RETURN GHSTRT, EXHGEN&7600 /WHERE HELPER CODE IS GHFNSH, EXHRUN&7600 /WHERE IT SHOULD BE WHEN USED GTEM, GENAD1 /TEMPORARY; INITIALIZED FOR I/O MOVE ZBLOCK .&7600+160-. /EMPTY SPACE DEVSIZE,TCSIZE /DEVICE SIZE WORD GTEMP1, .-. /TEMPORARY; DON'T MOVE THIS GTEMP2, .-. /TEMPORARY; DON'T MOVE THIS GLOW, 0300 /LOWEST USER BLOCK; DON'T MOVE THIS PAGE GNSYS2, EXIFLD= EXIGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ EXIGEN&7600 / \WRITE OUT THE EXTENDED 2^100+EXIFLD+WRITE / /HANDLER INITIALIZATION CODE HBLOCK // EXHGFLD=EXHGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ EXHGEN&7600 / \WRITE OUT THE I/O 10^100+EXHGFLD+WRITE / /INITIALIZATION CODE HBLOCK+2 // TRPFLD= TRPGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ TRPGEN&7600 / \WRITE OUT THE I/O 2^100+TRPFLD+WRITE / /HANDLER TRAP CODE TRPBLK // SYSCFLD=SYSCGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ SYSCADR / \WRITE OUT THE SYSLEN^100+SYSCFLD+WRITE / /SYSTEMS CATALOGUE SYSCAT // XCMFLD= XCMGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ XCMCORE / \WRITE OUT THE EXTENDED SWPLEN-2^100+XCMFLD+WRITE / /COMMAND PROCESSOR XCMBLK // RUNCFLD=RUNGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ RUNCORE / \WRITE OUT THE "R", "RU", RUNLEN^100+RUNCFLD+WRITE / /AND "RUN" COMMAND SYSTEM RUNBLK // SLPGFLD=SLPGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ SLPCORE / \WRITE OUT THE 1^100+SLPGFLD+WRITE / /SLURP LOADER SLPBLK // DUMFLD= DUMGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ DUMGEN&7600 / \WRITE OUT THE DUMLEN^100+DUMFLD+WRITE / /DUMP SYSTEM DUMBLK // JMS I SSYSIO/[SYSIO] /\ BINGEN / \WRITE OUT THE BINLEN^100+WRITE / /BINARY LOADER BINBLK // IGNFLD= IGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ IGEN&7600 / \WRITE OUT 1^100+IGNFLD+WRITE / /I BLOCK IBLOCK // JMS I SSYSIO/[SYSIO] /\ FILBEG / \WRITE OUT 1^100+WRITE / /EDIT FEATURES RUBBLK // ODTFLD= ODTGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ ODTGEN&7600 / \WRITE OUT ODTLEN^100+ODTFLD+WRITE / /ODT SYSTEM ODTBLK // FNDFLD= FNDGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ FNDCORE / \WRITE OUT THE FIND CHNGLEN^100+FNDFLD+WRITE/ /AND CHANGE SYSTEM CHNGBLK // JMS I SSYSIO/[SYSIO] /\ BATSGA / \WRITE OUT THE 2^100+WRITE / /BATCH SYSTEM BATBLK // BRLFLD= BRLGEN&70 /ISOLATE FIELD DEFINITION JMS I SSYSIO/[SYSIO] /\ BRLCORE / \WRITE OUT THE BATCH 1^100+BRLFLD+WRITE / /INITIAL RECOVERY BLOCK BTRLBLK // JMP I (GNSYS3) /CONTINUE THERE PAGE / AND IN THE END: THE TAPE OXIDE YOU MAKE, IS EQUAL TO THE RED DUST YOU TAKE, / (OFF THE TAPE GUIDES). / MARIO DENOBILI, 1972 GNSYS3, LAS /GET SWITCHES AGAIN CMA /INVERT FOR TEST SNA CLA /SKIP IF WEREN'T ALL SET JMP GLEAVE /JUMP IF THEY WERE ALL SET GBLOOP, CDF SLPGFLD /GOTO DATA FIELD TAD I GBPPTR/(SLPCORE) /GET A SLURP WORD ISZ GBPPTR/(SLPCORE) /BUMP TO NEXT CDF 00 /BACK TO OUR FIELD DCA I GBBPTR/(SLUPAGE) /PUT INTO SLURP PAGE ISZ GBBPTR/(SLUPAGE) /BUMP TO NEXT TAD I GBZPTR/(BINGEN) /GET BIN PAGE ZERO WORD ISZ GBZPTR/(BINGEN) /BUMP INPUT POINTER DCA BZIP /STORE IT ISZ .-1 /BUMP TO NEXT ISZ GBCNT/(-200) /DONE ENOUGH? JMP GBLOOP /NO, GO BACK CDF SLPGFLD /GOTO DATA FIELD GILOOP, TAD I GIFPTR/(SFILES&177+SLPCORE) /GET INITIALIZE WORD ISZ GIFPTR/(SFILES&177+SLPCORE) /BUMP TO NEXT DCA BINIT2 /PUT IT WHERE IT BELONGS ISZ .-1 /BUMP TO NEXT ISZ GICNT/(-BINITLN) /DONE ENOUGH? JMP GILOOP /NO, KEEP GOING CDF 00 /BACK TO OUR FIELD JMS BINIT /INITIALIZE SLURP BOOTSTRAP GBLUP2, TAD I GBSPTR/(SLUPAGE) /GET A SLURP WORD ISZ GBSPTR/(SLUPAGE) /BUMP TO NEXT DCA I GBTPTR/(SBOOT) /PUT INTO SLURP AREA ISZ GBTPTR/(SBOOT) /DONE ENOUGH? JMP GBLUP2 /NO, GO BACK GLEAVE, TAD GG7/("G&37) /GET A TLSIOT /BANG ON IT NL7777 STL /TURN ON THE LIGHTS MQL /HERE TOO! MQA /BACK INTO AC HLT /LAST CHANCE... JMP I GG7600/(SBOOT) /BOOTSTRAP! GBBPTR, SLUPAGE /WHERE TO PUT SLURP BOOTSTRAP GBCNT, -200 /COUNT OF WORDS TO MOVE GBPPTR, SLPCORE /WHERE SLURP LOADER IS NOW GBSPTR, SLUPAGE /WHERE INITIALIZED SLURP LOADER IS GBTPTR, SBOOT /WHERE TO EXECUTE IT GBZPTR, BINGEN /WHERE BIN PAGE ZERO IS GG7, 7 /CONSTANT 0007 GG7600, SBOOT /CONSTANT 7600 GICNT, -BINITLN /SLURP INITIALIZE MOVE COUNTER GIFPTR, SFILES&177+SLPCORE /WHERE SLURP INITIALIZE CODE IS NOW ZBLOCK 7300-. /EMPTY SPACE / SYSGEN TIME HANDLER FIXUP ROUTINE. / MERELY MOVING THE HANDLER'S CODE TO WHERE IT BELONGS IN FIELD ZERO (AND ONE) / DOES NOT NECESSARILY MEAN IT WILL BE USABLE FOR GENASYS PURPOSES! / THIS ROUTINE SPACE IS PROVIDED TO ALLOW THE HANDLER TO MODIFY ITSELF FOR / GENASYS PURPOSES ONLY; THE PURE COPY WILL BE WRITTEN OUT INDEPENDENTLY. STHFIX, .-. /FIXUP ROUTINE ZBLOCK 7377-. /EMPTY SPACE JMP I STHFIX /RETURN / HANDLERS MAY PATCH THIS AS NECESSARY! / P?S/8 SYSTEM I/O ROUTINES. / THE NEW IMPROVED P?S/8 MONITOR SYSTEM'S I/O ROUTINES FOR ALL SUPPORTED MASS / STORAGE DEVICES. INCLUDES SYSTEM I/O, BOOTSTRAP RECORD, SYSTEM LOADER, FILE / AND PARAMETER AREA. / ALL I/O ROUTINES ARE PATTERNED AFTER THE RL (ROTH-LASNER) ROUTINES. / CALLING SEQUENCE: / CDF MYFLD /IF NECESSARY / CIF 00 /IF NECESSARY / JMS I (7640) /SZA CLA IS CONVENIENT / CORE /CORE ADDRESS / FUNCTION /FUNCTION WORD / BLOCK /STARTING BLOCK NUMBER / RETURNS WITH AC CLEAR AND MYFLD DATA FIELD / FUNCTION WORD BREAKDOWN: / / READ NUMBER FIELD DEVICE / OR OF OF LOGICAL / WRITE BLOCKS TRANSFER UNIT / IF THE NUMBER OF BLOCKS INDICATED IS 0, THEN THE TRANSFER IS TAKEN AS A / COMPLETE FIELD TRANSFER (40 BLOCKS). / BOOTSTRAPPING IS PERFORMED BY BRANCHING TO FIELD 0 LOCATION 7600. / CONTENTS OF AC, LINK, MQ, INTERRUPT REGISTERS ARE UNIMPORTANT WHEN CALLING / THE I/O ROUTINES FOR ANY PURPOSE (INCLUDING BOOTSTRAPPING). / IF INTERRUPT IS ON, IT MAY BE IN AN ARBITRARY STATE AFTER THE CALL, AS / CERTAIN IMPLEMENTATIONS OF I/O ROUTINES MAY TURN INTERRUPTS OFF EITHER DURING / THE CALL ONLY, OR AT THE BEGINNING OF THE CALL PERMANENTLY, OR LEAVE THE / INTERRUPT SYSTEM ALONE AT THE DISCRETION OF THE HANDLER. / ERROR RECOVERY IS USUALLY PROVIDED BY A PROGRAMMED HALT WITH ERROR BITS IN / THE AC IN A DEVICE-DEPENDENT MANNER. MANUALLY PRESSING CONTINUE RETRIES THE / I/O OPERATION. (THIS IS KNOWN AS "SET SYSTEM HALT") / AT THE USER'S OPTION, THE I/O ROUTINES CAN BE MADE TO HANG BY INFINITELY / RETRYING THE OPERATION UPON AN ERROR. (THIS IS KNOWN AS "SET SYSTEM RETRY") / CERTAIN SYSTEMS WILL IMPLEMENT AN OVERLAY TO THEIR I/O ROUTINES TO PROVIDE / AN INTERACTIVE ERROR RECOVERY (SEE "CONSOLE", ETC.). FIELD 0 /ENSURE FIELD 0 *7400 /GENERATE THE HANDLERS HERE IFNZRO 7400-. GENAD1, RELOC SBOOT /WHERE THIS EXECUTES SBOOT, ZBLOCK SBTFUN-. /BEGINNING OF BOOTSTRAP CODE SBTFUN, ZBLOCK SWAL-. /BOOTSTRAP UNIT FOUND HERE SWAL, .-. /SWITCHES /A-/L SWMX, .-. /SWITCHES /M-/X SWY9, .-. /SWITCHES /Y-/9 SOUTFLS,.-. /OUTPUT FILE COUNT SDATE, .-. /SYSTEM DATE WORD SCRSIZE,.-. /SYSTEM CORE SIZE WORD ZBLOCK SLOAD-. /ADDITIONAL HANDLER CODE SLOAD, JMS SYSIO /CALL I/O ROUTINES TO SAVE CORE SCORE, 0000 /STARTING FROM 000000 SFUN, WRITE+.-. /WRITE 40 PAGES FROM FIELD ZERO; UNIT BIT WILL BE ADDED SBLOCK, BINADR /STARTING BLOCK NUMBER JMP I SYSTART /NOW START IT UP SYSTART,SBOOT /STARTING ADDRESS / I/O ENTRY HERE. SYSIO, MONSTRT /I/O ENTRY; OFTEN INITIALIZED FOR KEYBOARD MONITOR ZBLOCK 7750-. /REST OF HANDLER CODE / THE NEXT GROUP OF WORDS ARE ONLY ALLOWED TO BE TEMPORARIES OTHER THAN AT / BOOTSTRAP TIME, AS THEY ARE THE 3-CYCLE DATA BREAK LOCATIONS FOR / SEVERAL COMMON DEVICES (INCLUDING SOME USED BY THE HANDLERS!). ZBLOCK SPARM-. /HANDLER TEMPORARIES SPARM, .-. /EQUALS PARAMETER STORED HERE SFILES, ZBLOCK -. /FILE SPECIFICATION PASSED HERE / ALL WORDS FROM 7750-7777 ARE AVAILABLE AT BOOTSTRAP TIME FOR / HANDLER INITIALIZATION AS WELL AS 7600-7607 AND 7632-7640. / IT IS THE RESPONSIBILIY OF THE HANDLER TO GET 7602 (SBTFUN) PROPERLY / FORMATTED AS THE BOOTSTRAP UNIT WORD AND 7632-7637 (SLOAD-SYSTART) / PROPERLY FORMATTED AS THE SYSTEM LOADER TO THE CORRECT UNIT TO SAVE CORE IN / %:[BOOTSTRAP UNIT] AND $:[BOOTSTRAP UNIT]. / OPERATION OF THE SYSTEM WILL STORE INTO 7604-7607 (SWAL-SOUTFLS), / 7632-7637 (SLOAD-SYSTART), AND 7756-7777 (SPARM-SFILES+20). / THE SYSTEM DATE AND CORE SIZE WORDS (7610-7611) WILL BE UPDATED ALSO AND ARE / EXPECTED TO BE AVAILABLE AS IS. RELOC /RESTORE ORIGIN $*$*$*$*$*$*$*$*$*$*$*$ /THAT'S ALL FOLK!