/IMP LOADER START=4000;T=6000 A13=17777;A15=77777;EAE=640000 .LOC START POS=4000;LPOS=4001;MAIN=4002;PROG=4003 BANK=4004;AUTO=4005;DUMP=4006;W=4007 Y=4010;Z=4011;NUM=4012 SIGN=4013;REF=4014;MAX=4015;LINK=4016 /INITIALIZE TAG TABLE AND POINTERS /INIT, DIAG AND STORE OVERWRITTEN BY WLS, LITS AND NAMES LAW -40; TAD .MA DAC POS /LOAD POS (DECREASING) TAD (1; DAC T /TAG 0 (NP) TAD (1; DAC T+1 /TAG A TAD (1; DAC T+2 /TAG B TAD (1; DAC T+3 /TAG C TAD (13; DAC MAIN /*PERM/MAIN BOUNDARY TAD (1; DAC PROG /*PROG FILE AND (60000; DAC BANK /BANK BITS LAC* T; DAC AUTO /AUTOINDEX REG (NP) LAC LEX; DAC .LL /DIVERT ERRORS LAC .FN /DIAG OR LOAD SNA; JMP S1 /LOAD -> /DIAGNOSTICS AND (77; SNA; JMP D4 /NO FAULT -> JMS PRINT .SIXBT <42>' F A U L T ;' LAC .FN; AND (77 JMS WRITE LAC .FN; AND (100 /WL B WANTED? SNA; JMP D1 /NO -> LAC* T+2; JMS WRITE D1 LAC .FN; AND (200 /WL A WANTED? SNA; JMP D2 /NO -> LAC* T+1; JMS WRITE D2 LAC* T+3; AND (177 /NEXT SYMBOL SAD* T+3; SNA; JMP D3 /NONE (OR NON-ISO) -> JMS PRINT .SIXBT ' SYM: ;' LAC* T+3 SAD .NL; SKP; JMP .+4 LAW 116; JMS SYMOUT /'NL' FOR NL LAW 114; JMS SYMOUT D3 ISZ T+3 /BUMP TO INSTREAM JMS PRINT .SIXBT ' IN:;' LAC* T+3; JMS WRITE ISZ T+3 /BUMP TO OUTSTREAM JMS PRINT .SIXBT ' OUT:;' LAC* T+3; JMS WRITE JMS PRINT .SIXBT ' SIZE:;' LAC* AUTO; CMA TAD .MA; JMS WRITE LAC .NL; JMS SYMOUT D4 LAC* PROG; SNA; JMP .LE /COMPILER => JMS SELECT LAC 20 D5 AND (A15; DAC 20 /STOP ADDRESS AND (60000; DAC DUMP /BANK BITS LAC 20; CMA; TAD* MAIN /IN MAIN PROG? SPA; JMP D7 /YES -> D6 ISZ 20 LAC* 20; SNA; CAL 407 /CORRUPTION AND (LAW SAD (JMP*; SKP; JMP D6 /NOT EXIT -> XOR* 20; TAD DUMP /15BIT AD DAC DUMP CLC; TAD* DUMP /AD OF SR CALL JMP D5 D7 JMS PRINT .SIXBT ' STOPPED AT LINE ;' /WORK OUT LINE NUM D9 LAC BE; DAC Z /BLOCK STACK TAD (40; DAC Y /LINE COUNT DZM* Y D10 LAC Y /BEG: UPSTACK ISZ Z; DAC* Z /STORE LINE COUNT ISZ Z; DZM* Z /ZERO DATA TOTAL D11 JMS RSYM SNA; CAL 407 /EOF SAD (42; JMP D12 /NL -> SAD (50; JMP D10 /BEG -> SAD (57; JMP D13 /SWOP -> SAD (51; JMP D14 /END -> SAD (40; JMP D11 /SP -> SAD (41; JMP D9 /ENT -> BEGIN AGAIN TAD (-54; SPA /TAG,SIGN,DIGIT -> DSW ISZ* Y /OR ISZ* Z JMP D11 D12 ISZ Y; DZM* Y /END OF LINE JMP D11 D13 LAC (ISZ* Z /SWOP INC INSTR SAD DSW; LAC (ISZ* Y DAC DSW JMP D11 D14 LAC* MAIN; TAD* Z /END OF BLOCK DAC* MAIN /ADD DATA LENGTH CLC; TAD Z; DAC Z /DOWNSTACK LAC* Z; DAC W /FIRST LINE OF BLOCK CLC; TAD Z; DAC Z D15 LAC* MAIN; TAD* W /ADD LINE TOTAL DAC* MAIN CMA; TAD 20 SPA; JMP D19 />= STOP AD -> DZM* W LAC W; SAD Y; JMP D11 /LAST LINE OF BLOCK -> ISZ W JMP D15 D19 LAC BE; TAD (36 CMA; TAD W JMS WRITE /LINE NUM D20 LAC .NL; JMS SYMOUT /NL LEX JMP .LE /=> LOAD EXEC /DIAG OUTPUT ROUTINES PRINT P1 LAC* PRINT; ISZ PRINT DAC W /THREE CHARS LAW -3; DAC Y P2 LAC W; SMA!CLL; STL /RESTORE BIT 7 RTL; RTL; RTL /ROTATE 6 DAC W; RAL; AND (177 SAD (73; JMP* PRINT /SEMI-COLON => SAD (42; LAC .NL /NL FOR DQ JMS SYMOUT ISZ Y; JMP P2 JMP P1 .DEC POW -100000; -10000; -1000; -100; -10 .OCT WRITE DAC Z LAC (40; JMS SYMOUT /SPACE LAC Z; SMA!CMA; JMP W1 TAD (1; DAC Z /NEGATE IF NEG LAC (55; JMS SYMOUT /'-' W1 LAC (POW; DAC W /POWERS OF TEN LAW -5; DAC Y /FIVE IN NUMBER DZM SYMOUT W3 LAC Z; DZM DUMP W4 TAD* W SPA; JMP W5 DAC Z; ISZ DUMP JMP W4 W5 LAC DUMP /LEADING ZERO? SAD SYMOUT; JMP W6 /YES -> TAD (60; JMS SYMOUT W6 ISZ W; ISZ Y; JMP W3 LAC Z TAD (60; JMS SYMOUT /LAST DIGIT LAC (40; JMS SYMOUT /SPACE JMP* WRITE SYMOUT TAD FIRST; DZM FIRST /ENSURE PRINTING STL; JMS* .CS+1 /PRINT SYM JMP* SYMOUT FIRST 400000 /READ, REORDER AND STORE OBJ CODE S1 JMS STAND /ZERO CORE LAC* PROG; JMS SELECT /SELECT MAIN PROG LAW -2; TAD POS; DAC MAX TAD (1; DAC LINK JMS RSYM SAD (40; SKP; JMP S5+1 /NOT SPACE -> S2 JMS RSYM /SKIP DEFAULTS SAD (73; SKP; JMP S2 S4 LAC SYM SAD (51; JMP S20 /END -> S5 JMS RSYM SNA; JMP M80 SAD (42; JMP S5 /NL -> SAD (50; JMP S10 /BEG -> SAD (57; JMP S30 /SWOP -> SAD (54; ISZ SPEC /EXT SPEC SW CLL /OR SKP!CLL JMP S6 LAC* MIN /DATA SECTION RTL; RTL; RTL TAD SYM; DAC* MIN AND (770000 SNA; JMP S4 ISZ MIN; DZM* MIN JMP S4 S6 LAC* MAX /INSTR SECTION RTL; RTL; RTL TAD SYM; DAC* MAX AND (770000 SNA; JMP S4 S7 CLC; TAD MAX; DAC MAX DZM* MAX JMP S4 S10 LAC MIN; CMA /ENOUGH SPACE? TAD MAX; SPA!CLC; CAL 404 /CAL IF NOT S11 TAD MAX; DAC MAX /COPY DOWN LAC* MIN; DAC* MAX /DATA SECTION CLC; TAD MIN; DAC MIN LAC* MIN; AND (770000 SZA!CLC; JMP S11 TAD MAX; DAC MAX LAC LINK; DAC* MAX /PUSHDOWN LINK LAC MAX; DAC LINK ISZ MIN LAC SYM; DAC* MIN JMP S7 S20 LAC MIN; CMA /ENOUGH SPACE? TAD MAX; SPA; CAL 404 LAC LINK /COPY UP S21 TAD (-1 /INSTR SECTION SAD MIN; JMP S22 DAC W ISZ MIN LAC* MIN; DAC DUMP /EXCHANGE LAC* W; DAC* MIN /IN CASE LAC DUMP; DAC* W /OVERLAP LAC W SAD MIN; JMP S22 SAD MAX; JMP S23 JMP S21 S22 TAD W /ADJUST MIN CMA; TAD MAX; CMA DAC MIN S23 LAC LINK; DAC MAX /POPUP LINK SNA; CAL 406 LAC* MAX; DAC LINK S24 ISZ MIN; ISZ MAX /RESTORE LAC* MAX; DAC* MIN /DATA SECTION AND (770000 SZA; JMP S24 ISZ MAX JMP S5 S30 LAC SW /INVERT SKIP XOR (1000; DAC SW JMP S5 /LOAD OBJECT PROGRAM M80 LAC (G1; DAC USE /PSEUDO-INPUT LAC .GL /NORMAL OR NEWLIB? SNA; JMP M84 /NORMAL -> M81 JMS RSYM /COPY REORDERED LIB LAC SYM; SNA; JMP M82 TAD (-40 SPA!STL!CLA; LAC (100 TAD SYM; JMS* .GL SNL; CAL 411 /FILE TOO BIG JMP M81 M82 CLL!CLC; JMS* .GL /CLOSE FILE CAL M84 LAC TMAX; DAC W /CLEAR TAGS LAW -375; DAC Z ISZ W; DZM* W ISZ Z; JMP .-3 LAC W; DAC BS /CHANGE BUFF AREA TAD (377; DAC BE M85 LAC SPEC; SZA; JMP M86 /SPECS PRESENT -> LAC .PE; JMS SELECT /SELECT PERM SZL; JMS SEEK /SEEK IF SAME UNIT M86 JMS LOAD /LOAD MAIN PROG LAC POS; DAC* MAIN /BOUNDARY LAC .UL; JMS LIBLOAD /USER LIB LAC .SL; JMS LIBLOAD /SYSTEM LIB JMS LIBCHECK /ALL REFS DISCHARGED? SZA; CAL 411 /CAL IF NOT LAC .PE; JMS SELECT /SELECT PERM JMS LOAD /LOAD PERM LAC T+4 /MONITOR ENTRY SMA!SZA; DAC* T+4 /SELF-REF /LOAD LITERALS M90 LAC LMAX /FINISHED? SAD (START+20; JMP M99 /YES -> TAD (-1; DAC W /*REF CHAIN TAD (-1; DAC LMAX /*LITERAL LAC* LMAX; DAC* POS /STORE LITERAL LAC* W /REF CHAIN M91 TAD BANK; DAC Y /*REF LAC* Y; AND (A13; DAC Z /REMOVE CHAIN LINK XOR* Y /OPCODE XOR POS; XOR BANK /+ 13BIT AD DAC* Y LAC Z; SZA; JMP M91 /NOT END OF CHAIN -> CLC; TAD POS; DAC POS JMP M90 M99 LAC POS; DAC* AUTO /NEST POINTER LAC .LE; DAC .LL /RESTORE JMS STAND XCT 21 /HLT? JMP* BEGIN /ENTER PROGRAM LMAX START+20 /LIT POINTER: UP BY 2 NMAX M85-4 /NAME POINTER: DOWN BY 4 TMAX T+3 /TAG MAX BASE T+404 /BASE FOR STORED CODE MIN T+405 /LIMIT OF STORED CODE SYM SPEC 0 .PE 0 /PERM FILE (SET BY EXEC) .SL 0 /SYS LIB FILE (SET BY EXEC) .GL 0 /NEWLIB O/P SR (SET BY EXEC) LIBLOAD DAC Y; SZA /FILE -- SKIP IF NONE JMS LIBCHECK /SPECS OUTSTANDING? SNA; JMP* LIBLOAD /NO => LAC Y; JMS SELECT JMS LOAD JMP* LIBLOAD LIBCHECK LAC (M85 LC1 TAD (-4; DAC W /POINTER XOR NMAX SNA; JMP* LIBCHECK /END (AC=0) => LAC* W SZA; JMP* LIBCHECK /UNDISCHARGED (AC#0) => LAC W JMP LC1 STAND LAC BASE DAC W; DZM* W SAD POS; JMP* STAND TAD (1 JMP .-5 /LOAD MAIN OR PERM DAD=660000;ADA=720000;LAD=760000;ADR=20000 LOAD L10 JMS RSYM L11 LAC POS L12 DAC LPOS LAC SYM; DAC CODE# SNA; JMP* LOAD /TERMINATOR => JMS RNUM LAC CODE CLL; RTR; RTR; RTR /ALIGN OP-CODE SNL!RCL; JMP L20 /CODE < 40 -> DAC OP# LAC CODE SAD (50; JMP L11 /BEG -> SAD (56; JMP L30 /TAG -> SAD (51; JMP L40 /END -> SAD (41; JMP L50 /ENTRY-POINT -> SAD (54; JMP L60 /EXT SPEC -> /LITERAL INSTRUCTION LAC SIGN /SIGNED? SNA!CLC; JMP .+4 /NO -> TAD NUM; CMA; DAC NUM /NEGATE LAC OP SAD (DZM; JMP L17 /NULL OP -> SAD (LAC; SKP; JMP L16 /NOT LAC -> LAC NUM; SNA; JMP L18 /LAC (0 -> AND (LAW /OK TO USE LAW? SAD (LAW; JMP L17 /YES -> L16 JMS LITCODE JMP L25 L17 LAC NUM JMP L25 L18 LAC (CLA JMP L25 /NORMAL INSTRUCTION L20 SZL; TAD (20000 /INDIRECT? DAC OP SAD (EAE; JMP L23 SAD (IOT; JMP L23 SAD (OPR; JMP L23 LAC NUM; SNA; JMP L24 /TAG 0 (NP) -> JMS TAGREF LAC* REF /TAG DEFINED? SPA!SNA; JMP L22 /NO -> LAC SIGN /NEG TAG REF? SZA!CLA; JMP L22 /YES -> IGNORE DEF JMS CONVERT JMP L25 L22 AND (A13; DAC NUM /ADD REF TO CHAIN LAC POS; TAD (400000 /INDIC FOR UNDEF DAC* REF LAC OP L23 TAD NUM JMP L25 L24 LAC OP; TAD AUTO /AUTO-INDEX REG L25 DAC* POS CLC; TAD POS; DAC POS /ADJUST POS SAD MIN; CAL 404 /TEST ROOM JMP L12 /DEFINE TAG L30 JMS TAGREF LAC SYM SAD (40; JMP L35 /SWITCH LAB -> LAC* REF; DAC Z /UNDISCHARGED REFS SMA; DZM Z /IF ANY LAC SIGN SZA; LAC (200000 /INDIC FOR INDIRECT TAD POS; TAD (1 DAC* REF L32 LAC Z; AND (A13 /CHAIN OF REFERENCES SNA; JMP L11 /EMPTY -> TAD BANK; DAC LPOS /ADD BANK BITS LAC* LPOS; DAC Z AND (LAW; DAC OP JMS CONVERT; DAC* LPOS JMP L32 /TAG FOR SWITCH-LABEL L35 JMS RNUM LAC* REF; TAD NUM /BASE + DISPLACEMENT DAC Y /ELEMENT ADDRESS LAC* Y SAD (NOP; SKP; CAL 405 /SET TWICE LAC POS; AND (A13 TAD (JMP+1; DAC* Y /JUMP INSTR JMP L11 /END OF BLOCK (COMES FIRST) L40 LAC NUM /TAGBASE FOR THIS BLOCK SNA; JMP L11 TAD (T; DAC TMAX /RESET TAG MAX LAC* MAIN /MAIN PROG? SNA; JMP L11 /YES -> LAC* TMAX /ROUTINE CALLED? SZA; JMP L11 /YES -> L41 JMS RSYM /IGNORE LAC SYM SAD (50; JMP L10 JMP L41 /ENTRY-POINT L50 LAC* MAIN /MAIN PROG? SZA; JMP L51 /NO -> LAC POS; TAD (1 DAC BEGIN# /FIRST INSTR JMP L11 L51 JMS RNAME /READ NAME + TAG LAC (M85 /SEARCH SPEC LIST L52 TAD (-4; DAC W /TAG AD DAC DUMP LAC NMAX; DAC Y LAW -3; DAC Z L53 ISZ DUMP; ISZ Y LAC* DUMP SAD* Y; JMP L54 LAC W JMP L52 L54 ISZ Z; JMP L53 LAC* W; DZM* W /CLEAR FIRST WORD SZA; DAC* REF /REF CHAIN JMP L11 /EXTERNAL SPEC L60 JMS RNAME /READ NAME + TAG LAC* REF; DAC* NMAX /STORE REF-CHAIN DZM* REF LAW -4; TAD NMAX /DEC NMAX DAC NMAX CMA; TAD LMAX /ENOUGH SPACE? SMA; CAL 410 /CAL IF NOT JMP L11 /CONVERSION ROUTINES TAGREF LAC NUM; AND (377 /COMTAB REF? SAD NUM; JMP T1 /NO -> TAD T; DAC T+377 /COMTAB SLOT (FIXED) LAC (377 T1 TAD (T; DAC REF LAW -322; TAD NUM /TAG > 210 SMA!SZA; JMP* TAGREF /YES => T2 LAC TMAX; CMA; TAD REF /REF > TMAX? SPA; JMP* TAGREF /NO => ISZ TMAX; DZM* TMAX JMP T2 CONVERT LAC* REF; AND (A13 DAC W /13BIT AD LAC* REF; RTL /SET LINK IF INDIRECT LAC OP SAD (DAD; JMP C2 /PSEUDO-CODE -> SAD (LAD; JMP C3 /PSEUDO-CODE -> SAD (ADA; JMP C4 /PSEUDO-CODE -> SAD (ADR; JMP C5 /PSEUDO-CODE -> SZL; XOR (20000 /INVERT INDIRECT C1 TAD W JMP* CONVERT C2 LAC (DAC /DEPOSIT DIRECT JMP C1 C3 LAC (LAC /LOAD ADDRESS SKP C4 LAC (TAD /ADD ADDRESS SZL; JMP C1 /INDIRECT -> DAC OP LAC* REF; DAC NUM /15BIT AD JMS LITCODE JMP* CONVERT C5 LAC* REF /ADDRESS JMP* CONVERT /LITERAL PSEUDO-CODES LITCODE LAC (START+20; DAC W /SEARCH FOR LITERAL LAC NUM; DAC* LMAX /LONG STOP L3 SAD* W; JMP L4 /MATCH -> ISZ W; ISZ W JMP L3 L4 LAC W SAD LMAX; SKP; JMP L5 /DUPLICATE -> ISZ LMAX; DZM* LMAX ISZ LMAX LAC LMAX; CMA; TAD NMAX /ENOUGH SPACE? SPA; CAL 410 /CAL IF NOT L5 ISZ W /ADD REF TO CHAIN LAC* W; DAC DUMP LAC LPOS; AND (A13 DAC* W LAC OP; TAD DUMP JMP* LITCODE RNUM DZM NUM; CLA RN1 DAC SIGN RN2 JMS RSYM LAW -60; TAD SYM /'HEX' DIGIT? SPA!CLL; JMP RN3 /NO -> RTR; RTR; TAD NUM RTL; RTL; DAC NUM /16*NUM+DIG JMP RN2 RN3 SAD (-3; JMP RN1 /'-' -> JMP* RNUM RNAME LAC NMAX; DAC W DZM* NMAX LAW -3; DAC Z /NAME = 3 NUMS ISZ W LAC NUM; DAC* W JMS RNUM /4TH NUM IS TAG ISZ Z; JMP .-5 JMS TAGREF JMP* RNAME /INPUT ROUTINES UNIT;WORD;CA;WC SUM .SIXBT 'AA1' LITAA1 .SIXBT 'AA1' DV 0; 0; 0;BS T+4 BE T+4+377 RSYM JMP* USE /PSEUDO-INPUT (UNPACKS FROM STORE) G1 LAC* MIN SNA!CLL; JMP G2 AND (77; DAC SYM XOR* MIN RTR; RTR; RTR DAC* MIN JMP* RSYM G2 CLC; TAD MIN; DAC MIN SAD BASE; JMP R4 JMP G1 /GENUINE INPUT R1 JMS READ /READ BLOCK LAC* BE; SMA; JMS SEEK /SEEK NEXT LAC DV+3; DAC CA /CA = BUFF START LAC* CA; ISZ CA /CHECKSUM OK? SAD SUM; SKP; CAL 406 /CAL IF NOT LAW -376; DAC WC /254[10] DATA WORDS R3 LAC* CA; DAC WORD TAD SUM; DAC SUM JMS USE; JMS USE; JMS USE ISZ CA ISZ WC; JMP R3 /NOT END OF BLOCK -> LAC* BE; SMA; JMP R1 /NOT END OF FILE -> R4 LAC (R1; DAC USE /RESET FOR GEN INPUT LAC LITAA1; DAC SUM CLA JMP R5 USE=. .LI R1 /ALTERED BY EXEC LAC WORD RTL; RTL; RTL DAC WORD RAL; AND (77 SNA; JMP* USE R5 DAC SYM JMP* RSYM SELECT DAC DUMP; RTL; RTL AND (7 /LINK CLEAR SAD UNIT; STL /SET IF SAME AS LAST DAC UNIT LAC DUMP; AND (1777 DAC DV+1 /BLOCK NUM JMP* SELECT SEEK DAC DV+1 /BLOCK NUM LAC (2000; TAD UNIT /FUNCTION + UNIT DAC DV LAC (DV GUARD; JMP .DH /CALL HANDLER JMP* SEEK READ LAW -400; DAC DV+2 LAC DV /IN TIME? SMA!SZA; JMP .+3 /YES -> LAC DV+1; JMS SEEK /SEEK AGAIN GUARD LAC DV; SMA!SZA; WAIT ION DZM DV+2 SMA!CMA; JMP* READ /OK => GUARD; JMP .MH /REPORT JMP READ+1 GUARD=JMS 3;WAIT=JMP 2 .FN=16000;.MA=16010;.LE=16020 .TH=16060;.DH=16070;.MH=16100 .LL=16110;.UL=16120;.CS=16130 .NL=16140 .END