ASMB,Q,C * * DATE: 780117 * NAME: DBUGR * SOURCE: 92067-18075 * RELOC: 92067-16075 * PGMR: B.S.,G.A.,D.D.,D.S.,J.N.,R.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * HED DBUG(USER VERSION) NAM DBUGR,7 92067-16075 REV.2013 800128 ENT DBUGR ENT .DBUG,.SDBG EXT EXEC,$LIBX,$LIBR,IFBRK,LOGLU,REIO EXT SGBPT,SGBPE SUP * * A EQU 0 B EQU 1 R EQU 1 HED SYMBOL TABLES * E N D * * USER DEFINED SYMBOL TABLE AREA * * SYMBOLS WILL RESIDE IN IDENTICAL FORMAT TO TABLE "ISL" * FOLLOWING THIS TABLE IN MEMORY. THAT FORMAT IS: * * 4 TO 6 CHARACTERS IN SYMBOL- * * ENTRY 1 - 1ST WORD(1ST 3 CHARACTERS OF SYMBOL) IN SQOZE CODE * ENTRY 2 - 2ND WORD(2ND 3 CHARACTERS OF SYMBOL) IN SQOZE CODE * ENTRY 3 - OPCODE * * 3 OR LESS CHARACTERS IN SYMBOL- * * ENTRY 1 - SYMBOL WORD IN SQOZE CODE * * ENTRY 2 - MAY BE USED FOR A VALUE * END BSS 50 SYMBOL TABLE FREE AREA ISL0 EQU * SPECIAL REGISTERS OCT 51476,61146 CBTEST DEF SKP OCT 51467,44535 CBMASK DEF BMSK OCT 51453,54714 CBADDR DEF BADD OCT 51500,716 CBVAL DEF BVAL OCT 110625,25 MASK DEF MSK OCT 60704,1151 EOREG DEF FLGBX OCT 157457,21 YREG DEF ACCY OCT 154357,21 XREG DEF ACCX OCT 47557,21 BREG DEF ACCB OCT 44457,21 AREG DEF ACCA OCT 47560,1601 BRFLG (0=CHK FOR BRK, NOT 0, NO CHK) DEF BRFLG OCT 151276,1617 WRTLU (WHERE DOES OUTPUT GO?) DEF LU SKP * I S L * * INSTRUCTIONS SYMBOL TABLE * * CONTAINS SYMBOLS FOR THE 2100 ALTER SKIP,SHIFT ROTATE AND * I O INSTRUCTIONS SET IN SQOZE CODE. TABLE ENTRIES ARE IN * THE FOLLOWING FORMAT: * * 4 TO 6 CHARACTERS IN SYMBOL- * * ENTRY 1 - 1ST WORD(1ST 3 CHARACTERS OF SYMBOL) IN SQOZE CODE * ENTRY 2 - 2ND WORD(2ND 3 CHARACTERS OF SYMBOL) IN SQOZE CODE * ENTRY 3 - OPCODE * * 3 OR LESS CHARACTERS IN SYMBOL- * * ENTRY 1 - SYMBOL WORD IN SQOZE CODE * * ENTRY 2 - MAY BE USED FOR A VALUE * ISL EQU * OCT 45 . LOC NOP USED AS THE LOCATION COUNTER OCT 2755 .. DDOT NOP * * I S L 2 * * REMAINDER OF TABLE "ISL" SOMETIMES REFERRED TO DIRECTLY AND * SOMETIMES REFERRED TO AS A PART OF TABLE "ISL" * ISL2 EQU * OCT 44115,0,1000 ALS OCT 44475,0,1100 ARS OCT 130316,0,1200 RAL OCT 130324,0,1300 RAR OCT 44114,0,1400 ALR OCT 61053,0,1500 ERA OCT 60473,0,1600 ELA OCT 44100,0,1700 ALF OCT 47215,0,5000 BLS OCT 47575,0,5100 BRS OCT 130366,0,5200 RBL OCT 130374,0,5300 RBR OCT 47214,0,5400 BLR OCT 61054,0,5500 ERB OCT 60474,0,5600 ELB OCT 47200,0,5700 BLF ISL3 EQU * OCT 52273,0,2400 CLA OCT 52343,0,3000 CMA OCT 51523,0,3400 CCA OCT 52274,0,6400 CLB OCT 52344,0,7000 CMB OCT 51524,0,7400 CCB SEZ OCT 133674,0,2040 SEZ OCT 133674,0,6040 SEZ CLE OCT 52277,0,2100 CLE OCT 52277,0,6100 CLE OCT 52277,0,40 CLE OCT 52277,0,4040 CLE OCT 52277,35,40 CLES OCT 52347,0,2200 CME OCT 52347,0,6200 CME OCT 51527,0,2300 CCE OCT 51527,0,6300 CCE OCT 131645,0,2001 RSS OCT 131645,0,6001 RSS OCT 134723,0,2020 SSA OCT 75213,0,2004 INA OCT 135353,0,2002 SZA OCT 134724,0,6020 SSB OCT 75214,0,6004 INB OCT 135354,0,6002 SZB SLA OCT 134273,0,10 SLA OCT 134273,0,2010 SLA OCT 44115,0,20 ALS LOWER OCT 44475,0,21 ARS LOWER OCT 130316,0,22 RAL LOWER OCT 130324,0,23 RAR LOWER OCT 44114,0,24 ALR LOWER OCT 61053,0,25 ERA LOWER OCT 60473,0,26 ELA LOWER OCT 44100,0,27 ALF LOWER SLB OCT 134274,0,4010 SLB OCT 134274,0,6010 SLB OCT 47215,0,4020 BLS LOWER OCT 47575,0,4021 BRS LOWER OCT 130366,0,4022 RBL LOWER OCT 130374,0,4023 RBR LOWER OCT 47214,0,4024 BLR LOWER OCT 61054,0,4025 ERB LOWER OCT 60474,0,4026 ELB LOWER OCT 47200,0,4027 BLF LOWER OCT 23,100000 I O15 OCT 15,1000 C OCT 72016,0,102000 HLT HLT EQU *-1 OCT 52300,0,103100 CLF OCT 135000,0,102100 STF STF EQU *-1 OCT 133715,0,102200 SFC OCT 133735,0,102300 SFS OCT 111303,0,102400 MIA OCT 111304,0,106400 MIB OCT 120373,0,102600 OTA OCT 120374,0,106600 OTB OCT 134775,0,102700 STC OCT 52275,0,106700 CLC OCT 106203,0,102500 LIA OCT 106204,0,106500 LIB OCT 44544,0,101020 ASR OCT 44536,0,100020 ASL ASL EQU *-1 OCT 107044,0,101040 LSR OCT 107036,0,100040 LSL LSL EQU *-1 OCT 131574,0,101100 RRR OCT 131566,0,100100 RRL RRL EQU *-1 OCT 51432,0,101741 CAX OCT 51433,0,101751 CAY OCT 51502,0,105741 CBX OCT 51503,0,105751 CBY OCT 53233,0,101744 CXA OCT 53234,0,105744 CXB OCT 53303,0,101754 CYA OCT 53304,0,105754 CYB OCT 153132,0,101747 XAX OCT 153133,0,101757 XAY OCT 153202,0,105747 XBX OCT 153203,0,105757 XBY OCT 105576,0,105763 LBT OCT 133476,0,105764 SBT OCT 106013,0,101727 LFA OCT 106014,0,105727 LFB OCT 110663,0,105702 MBI OCT 110701,0,105704 MBW OCT 112373,0,105705 MWI OCT 112411,0,105707 MWW OCT 131623,0,101730 RSA OCT 131624,0,105730 RSB OCT 132013,0,101731 RVA OCT 132014,0,105731 RVB OCT 154043,0,101722 XMA OCT 154044,0,105722 XMB OCT 154065,0,105721 XMS OCT 56052,0,105761 DSX OCT 56053,0,105771 DSY OCT 75552,0,105760 ISX OCT 75553,0,105770 ISY OCT 110660,0,105703 MBF OCT 112370,0,105706 MWF OCT 122103,0,101712 PAA OCT 122104,0,105712 PAB OCT 122153,0,101713 PBA OCT 122154,0,105713 PBB OCT 135303,0,101710 SYA OCT 135304,0,105710 SYB OCT 143123,0,101711 USA OCT 143124,0,105711 USB OCT 154057,0,105720 XMM OCT 63432,0,105100 FIX OCT 63616,0,105120 FLT OCT 133714,0,105767 SFB SKP "CR" EQU O15 DOUBL EQU * OCT 111763,0,100200 MPY OCT 55230,0,100400 DIV OCT 55376,0,104200 DLD OCT 56046,0,104400 DST OCT 62706,0,105000 FAD OCT 63120,0,105060 FDV OCT 63662,0,105040 FMP OCT 64224,0,105020 FSB OCT 43422,0,105746 ADX OCT 43423,0,105756 ADY OCT 105532,0,101742 LAX OCT 105533,0,101752 LAY OCT 105602,0,105742 LBX OCT 105603,0,105752 LBY OCT 105722,0,105745 LDX OCT 105723,0,105755 LDY OCT 153773,0,101724 XLA OCT 153774,0,105724 XLB OCT 133432,0,101740 SAX OCT 133433,0,101750 SAY OCT 133502,0,105740 SBX OCT 133503,0,105750 SBY OCT 135022,0,105743 STX OCT 135023,0,105753 STY OCT 134737,0,105714 SSM OCT 100223,0 JLY JLY OCT 105762 OCT 100463,0 JPY JPY OCT 105772 * FOLLOWING INSTRUCTIONS ARE IN THE 21MX BASE SET * BUT ARE NOT SIMULATED BY DDT AND CANNOT BE TRACED. OCT 55272,0,105732 DJP IVINS EQU *-1 OCT 55275,0,105733 DJS OCT 134172,0,105734 SJP OCT 134175,0,105735 SJS OCT 142372,0,105736 UJP OCT 142375,0,105737 UJS OCT 154423,0,101725 XSA OCT 154424,0,105725 XSB STTP2 EQU * OCT 100575,0,105715 JRS OCT 153223,0,101726 XCA OCT 153224,0,105726 XCB * THE FOLLOWING ARE INCLUDED BY DDT AND CAN BE TRACED STTP3 EQU * OCT 51476,0,105766 CBT OCT 110676,0,105765 MBT OCT 51475,0,105774 CBS OCT 133475,0,105773 SBS OCT 136575,0,105775 TBS OCT 112341,0,105777 MVW OCT 52371,0,105776 CMW STTP EQU * SKP DSPTB DEF PLUS SPACE DEF EXCL ! DEF ASCIN " DEF NUMSN # DEF EXI $ DEF PCT % DEF DAQ & DEF ASO ' DEF PFIX ( DEF EXASC ) DEF STAR * DEF PLUS + CMADD DEF COMMA , DEF MINUS - DEF DOT . DEF BAR / NMFLG BSS 1 NOT USED FOR DISPATCHING (ASCII # 0) BSS 1 NOT USED FOR DISPATCHING (ASCII # 1) BSS 1 NOT USED FOR DISPATCHING (ASCII # 2) BSS 1 NOT USED FOR DISPATCHING (ASCII # 3) BSS 1 NOT USED FOR DISPATCHING (ASCII # 4) BSS 1 NOT USED FOR DISPATCHING (ASCII # 5) TEMP4 BSS 1 NOT USED FOR DISPATCHING (ASCII # 6) TEMP3 BSS 1 NOT USED FOR DISPATCHING (ASCII # 7) TEMP2 BSS 1 NOT USED FOR DISPATCHING (ASCII # 8) TEMP1 BSS 1 NOT USED FOR DISPATCHING (ASCII # 9) DEF COLON : DEF SEMI ; DEF LSSN < DEF EQLS = DEF GRTR > DEF MSTAT ? DEF EXA @ DEF AT A DEF BRK B DEF CT C DEF PNCH D DEF EAS E DEF FT F DEF GO G DEF HT H ERRX DEF ERR I DEF USMAP J DEF KILL K DEF TABL L DEF MT M DEF NWS N DEF BPM O DEF PROC P DEF QT Q DEF RSET R DEF ST S DEF TRACE T DEF ECSL U DEF VFY V DEF WDS W DEF XEC X DEF LOAD Y DEF ZRO Z DEF SBRK [ DEF ALT \ DEF CR ] DEF UPARW ^ DEF LARR _ HED DBUG INITIALIZATION * .DBUG NOP WHERE LOADER WILL PLACE TRUE RETURN. $DDT NOP EVERYONE'S ENTRY POINT DBUGR EQU $DDT JSB SVST NOMINAL ENTRY POINT LDB .DBUG DETERMINE IF CALLED FROM LDA $DDT LOADER($DDT = 0)OR SZA DIRECTLY. LDB $DDT,I SET EXIT ADDRESS STB DDOT FOR PROCEED ISZ $DDT STEP TO POSSIBLE LU ADDRESS. SZA IF APPENDED BY LOADER OR CPB $DDT IF THERE IS NO LU GIVEN, JMP TST THEN GO GET LOG LU OR LU 1. * LDA $DDT,I YES GET IT LDA A,I TO A * TST1 AND O77 ISOLATE IT IOR O400 DO NOT MAKE HONEST MODE STA LU SAVE AS THE LU JSB EXEC GET TYPE CODE DEF TSTRT-1 IN CASE OF EXEC CALL ERROR DEF NAB15 (OCT 15+NO ABORT BIT) DEF LU PCH DEF CH TEMP * JSB EXERR IN CASE OF EXEC ERROR TSTRT LDA PCH,I GET EQT WORD 5 AND C374 KEEP TYPE STA TMODE SET MODE (0= '\' #0= '\\' STA B SAVE TYPE FOR LU SETUP LDA LU CPB DV07 DVR07 TYPE LU? RSS YES, SKIP SETTING HONEST MODE IOR O2100 NO,SET HONEST MODE STA LUC LDA M80 TEST FOR DVR07 CPB DV07 STA IBUFL YES, SET TO READ UP TO 16 CH. LDB PNT10 PRINT 'START JSB OUTMS DBUGR' MESSAGE. JMP LSE * TST JSB LOGLU GO RECOVER LOG DEF *+2 LU OR IF NONE, DEF LU THEN USE LU 1. JMP TST1 A-REG = LU#. * C374 OCT 37400 O2100 OCT 2100 DV07 OCT 3400 PNT10 DEF MSG01 MSG01 OCT 6412 CR/LF ASC 6,START DBUGR O6412 OCT 6412 CR/LF ASC 1,// HED DBUG - CHARACTER DISPATCH * * COMMAND INTERPRETER * LSE RSS CLEARED ON FIRST ENTRY JMP LSE1 * * THE CODE FROM HERE TO LSE1 IS DONE ONLY ONCE AS INITIALIZATION * LDA BIX GET THE ADDRESS TO USE AGE AND G74 FOR BREAK INSTRUCTIONS XOR BIX SAVE THE ADDRESS ONLY STA DSYMX SAVE IT FOR BREAK LDA LNEV SET FENCES CMA,INA FOR STA LNEV EVAL CHECKS LDA LXEV MUST BE NEG CMA,INA STA LXEV * LDA 1777B SET DM BOUNDS STA CEND SET END OF MEMORY INA STA UPBD CMA,INA STA MUPBD * LDA BIXP SAVE BIX JMP TABLE INSTRS LDB BIXBP MVW O3 * LSE1 JSB CRLF CLA PROTECT STA PFLAG STORES * LSF LDA PM STA EXPM * LSF2 CLA FROM TABP. STA TRAC CLEAR TRACE COUNT STA LSE CLEAR FIRST TIME RSS STA $DDT CLEAR JSB ENTRY POINT. STA LFLG LDA O3 STA LL LDA CEND STA UL * LSS CLA FROM LIM SET. STA CHI STA WRD STA CLEFG CLEAR CLE FLAG STA CMFLG CLEAR COMMA FLAG STA INSTR STA ALTMI LDA CAD * SSN STA SGN CLA * LSQ STA ONM STA DNM CLA,CLE CLE IS DECORATION. STA SYM STA SYM+R STA LETF STA CHC LDB SYMXI STB SYMX STA WSD MAKE A NO-OP. * LSR0 EQU * STA ASCI * LSR EQU * CHARACTER DISPATCH JSB TTYOP GET A CHAR STA CH CPA O177 JMP DEL * LDB LFP LF? CPA O12 JMP LFCRT YES * LDB CRP CR? CPA O15 JMP LFCRT YES * LDB CH USE DISPATCH TABLE ADB DSPP LDB B,I ADA M40 SSA LDB ERRX 0-37, ERROR UNLESS... LDA CH CPA O11 LDB TBP CPA O176 LDA O33 CPA O33 JMP ALTMD * STB PN ADA M72 SSA,RSS JMP LT 72-177, CHECK FOR LETTER. * ADA O12 SSA JMP LSCG 0-57, NOT NUMBER OR LETTER. * JSB BUMP PROCESS DIGIT JMP L1 SKP ASCI NOP M40 OCT -40 M41 OCT -41 M72 OCT -72 M80 DEC -80 O11 OCT 11 O176 OCT 176 O1000 OCT 1000 O3 OCT 3 O32 OCT 32 CRP DEF CR CAD DEF PLUS DSYMX DEF SYMX,I CONFIGURED ON 1ST ENTRY DSPP DEF DSPTB-40B EXPM NOP INSTR NOP LETF NOP LFP DEF LF SGN NOP TBP DEF TAB SKP * LT ADA M41 CHECK FOR LETTER LDB ALTMI CCE,SSA SEZ,SZB SZB: ALT MODE PRESENT? JMP LSET OPERATOR. * ADA O32 SSA JMP LSCG 72-100 * ISZ LETF PROCESS LETTER * L ADA O12 MAKE SQOZE CODE * L1 INA LDB CHC CPB O3 ISZ SYMX ADB M6 CLE,SSB,INB,RSS SSB,RSS: MORE THAN SIX CHARS? JMP LSR * ISZ CHC ISZ CHI LDB SYMX,I TIMES 50 RBL,RBL ADB SYMX,I BLF,RBR ADB A STB SYMX,I USED AS CONSTANT LDA ASCI ALF,ALF ADA CH JMP LSR0 * LFCRT XOR C3007 SWAP CR AND LF STB PN JSB TYO CLA * LSET ADA M6 72-177 SSA,RSS CHECK FOR 141-177 JMP ERR YES, LOSE. * LSCG LDB PN GET DISPATCH ADDRESS ADB LNEV CLA FOR MT,FT OCT 5254 RBL,CLE,SLB,BLR :THE BLR IS DISABLED JMP PN,I NO-EVAL, DISPATCH NOW. * CPA LETF IF NO LETTERS, JMP LSCI ANY OPERAND IS NUMERIC. * LDB SYM+R SZB JMP NOTOP * OPLK LDB A SEARCH OP TABLE ADB OPPTR LDB B,I GET SYMBOL CPB SYM JMP OPFND * INA SZB JMP OPLK * NOTOP JSB EVS EVALUATE SYMBOLIC TERM. JMP SGN,I DEFINED; GO COMBINE TERMS. * LDA CH125 U - UNDEFINED JMP ERRP * CH125 OCT 125 * OPFND ALF,RAR MOVE INDEX TO OP POSN ALF,CLE,SLA,ALF ALWAYS SKIPS: USED AS CONSTANT CPA IADR,I STA INSTR * LSCI LDA ONM COMBINE OPERANDS JMP SGN,I PERFORM SIGN OPERATION. SKP * * BUMP * * UPDATES CURRENT NUMERIC ENTRY * * CALLING SEQUENCE: * LDA * JSB BUMP * P+1 * * BUMP NOP LDB ONM PROCESS DIGIT BLF,RBR SAVE CURRENT ADB A NUMBER AS STB ONM OCTAL LDB DNM SAVE RBL,RBL CURRENT ADB DNM NUMBER RBL AS ADB A DECIMAL STB DNM JMP BUMP,I HED NON-EVALUATION OPERATORS * DOT CPA CHC IF FIRST CHAR, ISZ LETF TREAT AS LETTER. LDB DNM STB ONM LDA O32 BECOMES SQOZE CODE. JMP L * DEL LDA CH130 X JMP ERRP * CH130 OCT 130 * SYMO LDA O117 SYMBOL TABLE OVERFLOW RSS * BADP LDA CH120 P JSB TYO * ERR LDA O77 ? * ERRP JSB TYO * OTST LDA TAS REGISTER OPEN? CPA LIMBO JMP LSE NO. JMP TABP YES. * CH120 OCT 120 * ASCIN LDA ASCI ASCII INPUT JMP N1 * DAQ LDA LWT DEFINE SYMBOL AS ADDRESS JSB ADRC CLEARS E LDA B ELA,SLA,RAR CLEAR SIGN & SKIP * COLON LDA LOCP,I DEFINE SYMBOL AS LOCATION LDB LFLG SZB LDA LL LDB LETF CHECK SYMBOL SZB,RSS JMP ERR * JSB DEFS JMP TABP * O117 OCT 117 LWT NOP TAS DEF SYM ADDRESS OF OPEN REGISTER SKP * ALTMD LDA O134 BACKSLASH JSB TYO ECHO LDA O134 IF SET FOR A ESC GOBBLER LDB TMODE THEN SZB JSB TYO SEND TWO '\' 'S * ALT ISZ ALTMI JMP LSR * ECSL LDA TMODE 'U' CHANGE ESC DOUBLE '\' OPTION CPA DV07 IF DVR07 BYPASS CHANGE JMP OTST * LDB ALTMI IF DOUBLE ESCAPE CPB O2 THEN A SWITCH BETWEEN CHARACTER JMP ECSL2 AND BLOCK MODE * SZA ELSE CHANGE DOUBLE ESCAPE OPTION CLA,RSS CCA STA TMODE JMP OTST * ECSL2 LDA LUC XOR O2100 CHANGE HONESTY MODE STA LUC AND O2100 LDB M80 IF NOT HONEST BUFFER IS 72 CHARS SZA CCB ELSE IT IS ONE CHAR STB IBUFL JMP OTST * TMODE NOP INITIAL SET FOR NON '\' GRABBER * END OF ESSENTIAL NO-EVALS. HED MISCELLANEOUS OPERATORS * KILL LDA SISL0 KILL SYMBOLS "\K" STA STEND JMP LSE * FT ADA STED "\F" JMP N1 * BPM LDA PM "\O" STA BM JMP OTST * HT INA SET PRINT MODE HOLLERITH "\H" * CT INA CONSTANT "\C" * ST INA SYMBOLIC "\S" * AT ADA STPPP ADDRESS MODE "\A" LDA A,I USED AS CONSTANT STA PM SET MODE STA EXPM JMP OTST * QT LDA LWT "\Q" JMP N1 * STAR LDA LOCP,I * N1 CLB STB ALTMI ISZ CHI JMP LSQ RESET SYMBOL STUFF. * PFIX CCA UNPROTECT STA PFLAG STORES JMP LSF * LNEV DEF * END OF NO-EVALS. BM DEF NUMP STPPP DEF ADRPP LINK TO MASTER MODE TABLE PFLAG NOP PROTECT FLAG SISL0 DEF ISL0 SKP * "\M[CR]" MT LDB MTMS1 PRINT THE SPECIAL REGISTERS JSB OUTMS CCB ADB SISL0 ADB O36 STB MTCNT * MTLOP LDA MTCNT,I LDA A,I ONE MORE LEVEL OF INDIRECTION JSB NUMP LDA PNCNT HOW MANY SPACES TO RIGHT FILL? ADA M7 STA PNCNT SSA,RSS JMP MTL2 * ISZ PNCNT RSS JMP MTL2 * LDA CH40 JSB TYO JMP *-5 * MTL2 LDA CH40 JSB TYO LDA MTCNT ADA M3 STA MTCNT CMA,INA ADA SISL0 ADA O3 SSA JMP MTLOP * JSB PTAB 3 SPACES LDA MTCNT,I GET CBTEST LDA A,I JSB INSTP JMP LSE * MTMS1 DEF *+1 ASC 14,AREG BREG XREG YREG ASC 7,EOREG MASK ( ASC 15,CBVAL-CBADDR,I)^CBMASK =CBTEST OCT 6412 ASC 1,// MTCNT BSS 1 O36 OCT 36 SKP * MINUS CMA,INA * PLUS ADA WRD JMP WSET * COMMA IOR WRD * WSET STA WRD RETURN HERE FROM SIGN OP. LDA PN LDB PN CPB CMADD IF COMMA SET COMMA FLAG STB CMFLG ADB LXEV OCT 5257 RBL,CLE,SLB,BLF :THE BLF IS DISABLED JMP SSN SET SIGN FOR NEXT TIME. * LDA INSTR CHECK FOR PAGE ERROR * CSNZA SZA,RSS JMP NAOP NOT ADDRESSABLE. * LDA WRD AND G76 PAGE BITS? LDB A SAVE 'EM SZA,RSS JMP NAOP BASE PAGE. * XOR IADR AND G76 * CSZA SZA JMP BADP YOU CAN'T GET THERE FROM HERE. * LDA O2000 PUT IN PAGE BIT. XOR B * NAOP XOR WRD RESTORE LOCAL ADDRESS. ADA INSTR STA WRD CLB STB INSTR LDB CHI SZB,RSS LDA LWT STA LWT JMP PN,I DISPATCH TO PROCESSOR (EVALS) SKP * LXEV DEF * END OF COMBINING OPERATORS. * * BEGIN ESSENTIAL EVALS. * GRTR JSB DMCHK CHECK IF IN PARTITION STA UL LIMIT SET * CSKP RSS * LSSN STA LL ISZ LFLG JMP LSS * RSET LDB A SET RADIX "\R" ADA M2 CLE,SSA JMP ERR * ADA M40 SSA,RSS JMP ERR * STB RADIX JMP LSE * M2 OCT -2 O2000 OCT 2000 G76 OCT 76000 HED REGISTER EXAMINATION ASO LDA ASCPP PRINT AS ASCII JMP SETM * EXCL LDA INSPP PRINT AS INSTRUCTION JMP SETM * LARR LDA ADRPP PRINT AS ADDRESS JMP SETM * EQLS LDA NUMPP PRINT AS NUMBER * SETM STA PN ONE TIME MODE SET LDB ALTMI SZB STA EXPM TEMP MODE SET LDA LWT JSB CLESB CHECK CLE FLAG, ADD CLE INS TO AREG? JSB PN,I JMP TABP * SEMI JSB EXPM,I PRINT IN CURRENT MODE JMP TABP * EXASC LDB ASCPP EXAMINE AS ASCII JMP EXAM * EXI LDB INSPP EXAMINE AS INSTRUCTION JMP EXAM * EXA LDB ADRPP EXAMINE AS ADDRESS JMP EXAM * NUMSN LDB NUMPP EXAMINE AS NUMBER JMP EXAM * PCT JSB STORE CLB STB CHI FOOL BAR LOGIC * BAR LDB EXPM USE TEMP MODE * EXAM STB STORE SET IMMEDIATE MODE LDB ALTMI SZB JSB ADRC LDA LWT ELA,CLE,ERA PURGE INDIRECT BIT LDB CHI SZB,RSS ADDRESS SPECIFIED? JMP TA6 NO, USE LWT * LDB STORE YES, SET TEMP MODE, TOO. STB EXPM JMP TA5 * TAB JSB STORE LDB ALTMI SZB JSB ADRC LDA LWT TA3 STA TAS JSB CRLF LDA TAS * TA4 ELA,CLE,ERA PURGE INDIRECT BIT STA TAS JSB ADRP PRINT ADDRESS JSB TYO PRINT / LDB EXPM STB STORE SET TO USE TEMP MODE LDA TAS * TA5 STA LOCP,I SET LOCATION COUNTER * TA6 STA TAS STA IADR JSB DMCHK TEST IF IN PARTITION JSB PTAB LDA ACCA B LOADED BY PTAB-TYO-TTYOP LDA TAS,I STA LWT JSB STORE,I PRINT CONTENTS * TABP JSB PTAB JMP LSF2 * CR JSB STORE "CR" CCA SET NO LINE FEED FLAG STA LFLAG JMP LSF * UPARW JSB STORE "^" CCA ADA LOCP,I DECREMENT LOCATION COUNTER JMP TA3 * LF JSB STORE "LF" CLA,INA NEXT LOCATION ADA LOCP,I JMP TA4 * "/" OCT 57 SLASH SPACE OCT 40 "M" OCT 115 SKP * A "?" DISPATCHES HERE * MSTAT LDB MSTMS " MS = " "?" JSB OUTMS LDA M6 INITIALIZE STA TEMP1 COUNTER TO 6 RSA GET MEM STATUS * MST01 STA TEMP2 SAVE ROTATED STATUS LDB A PRINT BIT15 AND SPACE LDA ZERSP SSB ADA O400 JSB TY2 LDA TEMP2 RESTORE ROTATED STATUS RAL ROTATE NEXT BIT ISZ TEMP1 DONE? JMP MST01 NO,CONTINUE * ALF,ALF YES,GET RAL,RAL ORIGINAL A AND O1777 MASK BP FENCE LDB O10 WRITE BP FENCE JSB PN ON CONSOLE JSB PTAB 3 SPACES JMP LSF2 * "=" OCT 75 O10 OCT 10 O1777 OCT 01777 MSTMS DEF *+1 ASC 5, MS = // ZERSP ASC 1,0 SKP USMAP JSB CRLF CR LF "\J" JSB PTAB 3 SPACES * USM01 JSB TTYOP GET 1ST OPERATOR INPUT CPA "A" ABORT? JMP USM02 YES * CPA "CR" CR? JMP USMAP YES,NO ACTION * CPA SPACE SPACE? JMP USM01 YES,IGNORE * AND O177 SAVE 1ST ALF,ALF CHARACTER STA TEMP1 IN UPPER BYTE JSB TTYOP GET 2ND OPERATOR INPUT AND O177 FORM IOR TEMP1 WORD * CLB CPA "SM" SYSTEM MAPS? LDB SYA CPA "UM" USER MAPS? LDB USA CPA "PA" PORT A? LDB PAA CPA "PB" PORT B? LDB PBA SZB JMP USM03 IF B NOT 0, GO DO * CPA "XL" CROSS LOAD? JMP XLOAD JMP ERR * USM02 JSB PTAB 6 JSB PTAB SPACES JMP LSF2 * "PA" ASC 1,PA "PB" ASC 1,PB "SM" ASC 1,SM "UM" ASC 1,UM "XL" ASC 1,XL O20 OCT 20 O72 OCT 72 SKP USM04 BSS 1 USM03 STB USM04 LDA O72 : JSB TYO LDA USM04 STA RMAP1 LDA IMAPS BUFFER ADDRESS,I JSB $LIBR UNPROTECT FOR OLD MX'S NOP RMAP1 NOP JSB $LIBX DEF *+1 DEF USE00 USE00 CLA SET UP INDEX STARTING AT 0 LDB IMAP B-REG GETS MAP BUFFER ADDRESS USE01 JSB SHMAP 2 MAPS CPA O20 DONE? RSS YES JMP USE01 NO,CONTINUE JSB CRLF CR LF JMP USMAP SKP XLOAD CLA CLEAR STORE FLAG STA XADR CLEAR LAST ADDRESS LDA IMAPS GET SYSTEM MAPS JSB $LIBR ****PROTECT FOR OLD MX'S NOP SYA JSB $LIBX DEF *+1 DEF *+1 * X01 JSB CRLF CR LF JSB PTAB 6 JSB PTAB SPACES LDA "XL" X JSB TY2 JSB PTAB 3 SPACES JSB GETAD GET ADDRESS FROM OPERATOR JMP ERR INPUT ERROR * CPB M1 ABORT? JMP USMAP SEE IF DONE * SZB,RSS ANY CROSS OPERATION? JMP X01 NO,NO ACTION * STA TEMP1 SAVE STA XADR ADDRESS JSB PTAB 3 SPACES ALF,RAL COMPUTE PAGE ADDRESS RAL AND O37 ADA IMAP LDA A,I GET MAP SSA READ PROTECTED JMP DMCK6 YES, GO TO DM ERROR * LDA XADR RESTORE A XLA TEMP1,I CROSS LOAD JSB NUMP NO,DISPLAY CONTENTS JMP X01 SEE IF MORE CROSS OPERATIONS * XADR NOP USA USA SYA SYA PAA PAA PBA PBA O37 OCT 37 SKP * G E T A D * * TAKE AN ADDRESS FROM OPERATOR * * JSB GETAD * P+1 * P+2 * GETAD NOP CLB ASSUME SIGN IS + INITIALLY STB ONM AND CLEAR CHARACTER COUNT STB DNM AND CLEAR OCTAL NUMBER STB CHC AND CLEAR DECIMAL NUMBER GETA5 JSB TTYOP TAKE 1ST CHARACTER CPA "A" ABORT? JMP GETA1 YES * CPA "LF" LF? JMP GETA4 YES * CPA "^" ^? JMP GETA7 YES * CPA SPACE SPACE? JMP GETA5 YES,IGNORE IT * RSS NO,TREAT 1ST CHARACTER AS NUMBER GETA2 JSB TTYOP TAKE NEXT NUMBER CPA "CR" DEFAULT? JMP GETA1 YES * CPA "/" DONE? JMP GETA3 YES * ADA M72 NO,CHARACTER SSA,RSS >71B? JMP GETAD,I YES,ERROR * ADA O12 NO,CHARACTER SSA <60B? JMP GETAD,I YES,ERROR * JSB BUMP UPDATE NUMBER'S VALUE LDA CHC CHARACTER CPA O5 COUNT ALREADY =5? JMP GETAD,I YES,THIS ONE MAKES IT AN ERROR * ISZ CHC NO,BUMP CHARACTER COUNT JMP GETA2 CONTINUE * GETA3 LDA ONM A=NUMBER RSS GETA1 CCB,RSS SET ABORT FLAG GETA6 LDB CHC SET UP DEFAULT FLAG ISZ GETAD ADJUST RETURN JMP GETAD,I * GETA7 CCB,RSS GETA4 CLB,INB LDA XADR PREVIOUS SZA ADDRESS? JMP GETA8 * CLB JMP GETAD,I NO,ERROR * GETA8 ISZ CHC CLEAR ABORT FLAG LDA XADR DISPLAY ADA B ADJUST ADDRESS STA XADR JSB NUMP ADDRESS LDA "/" / JSB TYO LDA XADR A=ADDRESS=NUMBER JMP GETA6 * "^" OCT 136 "LF" OCT 012 O5 OCT 05 * HED NUMBER AND SYMBOL PRINT SKP * * SHMAP * * DISPLAYS 2 MAP VALUES ON CONSOLE * * CALLING SEQUENCE: * LDA * LDB * JSB SHMAP * P+1 , * SHMAP NOP STA SHMAI INDEX STB SHMAM MAP JSB CRLF JSB SIXSP 6 SPACES LDA SHMAI "INDEX=[MAP+INDEX]" JSB SHMA2 JSB PTABC LDA SHMAI "INDEX+20=[MAP+INDEX+20]" ADA O20 JSB SHMA2 LDA SHMAI A=A+1 INA LDB SHMAM RESTORE MAP ADDRESS JMP SHMAP,I * SHMA2 NOP LDB SHMAM MAP ADB A MAP+INDEX LDB B,I B <- [MAP+INDEX] STB SHMAN JSB NUMP "INDEX LDA "=" = JSB TYO LDA SHMAN [MAP+INDEX]" JSB NUMP JMP SHMA2,I * SHMAI BSS 1 SHMAM BSS 1 SHMAN BSS 1 IMAPS DEF MAPS,I IMAP DEF MAPS MAPS BSS 32 SKP * * GETNM * * TAKES OPERATOR NUMERICAL INPUT * * CALLING SEQUENCE: * LDA * JSB GETNM * P+1 * P+2 * GETNM NOP * GET05 JSB TTYOP TAKE 1ST CHARACTER CLB ASSUME SIGN IS + INITIALLY STB CHC AND CLEAR CHARACTER COUNT STB ONM AND CLEAR OCTAL NUMBER STB DNM AND CLEAR DECIMAL NUMBER CPA "A" ABORT? JMP GET01 YES * CPA SPACE SPACE? JMP GET05 YES,IGNORE IT * CPA NEG IS IT -? INB YES,SET - FLAG STB NMFLG SAVE + OR - FLAG CPA POS IS IT +? RSS YES SZB NO,1ST CHARACTER TREATED AS 1ST NUMBER? GET02 JSB TTYOP GET CHARACTER CPA "CR" DONE? JMP GET06 YES * CPA "LF" DONE? JMP GET06 YES * ADA M72 NO,CHARACTER SSA,RSS >71B? JMP GETNM,I YES,ERROR * ADA O12 CHARACTER SSA <60B? JMP GETNM,I YES,ERROR * JSB BUMP UPDATE NUMBER'S VALUE LDA CHC CHARACTER COUNT CPA O6 ALREADY = 6? JMP GETNM,I YES,THIS ONE MAKES IT AN ERROR * ISZ CHC NO,BUMP CHARACTER COUNT JMP GET02 CONTINUE * GET06 LDA ONM A=NUMBER LDB NMFLG NEGATIVE SZB,RSS NUMBER? JMP GET04 NO,POSITIVE,LEAVE IT ALONE * CMA,INA,RSS YES GET01 CCB,RSS SET ABORT FLAG ON EXIT GET04 LDB CHC SET UP DEFAULT FLAG ON EXIT ISZ GETNM ADJUST RETURN JMP GETNM,I * O6 OCT 6 POS OCT 53 NEG OCT 55 SKP * STORE NOP SZB,RSS ANYTHING TYPED? JMP STORX NO, RETURN. * JSB CLESB WAS CLE FLAG SET * STA TEMP3 SAVE VALUE LDB PFLAG UNPROTECT SZB THE STORE? JMP STORZ * LDA TAS NO CHECK FOR MP SZA A OR B REGISTER CPA O1 JMP STORY YES, STORE IT * JSB MPCHK CHECK FOR MP & DM ERROR JMP MPMSG GO PRINT "MP?" * STA IADR JSB ADCHK CHECK FOR DBUGR OVERWRITE JMP STORY OK TO STORE * STORZ JSB $LIBR YES,GO NOP PRIVELEGED STORY LDB TAS SZB,RSS STORE TO A REG LDB DACCA YES GET PHONY A REG ADDRESS CPB O1 LDB DACCB YES GET PHONY B REG ADDRESS STB TAS LDA TEMP3 RESTORE VALUE STA TAS,I LDB PFLAG JUST STORE SZB,RSS UNPROTECTED? JMP STORX NO,GO ON * JSB $LIBX YES,GO DEF *+1 UNPRIVELEGED DEF STORX STORX LDB LIMBO STB TAS CLOSE REGISTER JMP STORE,I * CLESB NOP WAS CLE FLAG SET STB CLES1 SAVE B LDB CLEFG SZB,RSS JMP CLES2 NO, RETURN * LDB A AND O2000 YES, WHICH GROUP SZA ADA O40 SRG CLE=2100B ADA O40 ASG CLE=40B IOR B AND MERGE WITH INSTRUCTION * CLES2 LDB CLES1 RESTORE B JMP CLESB,I * CLES1 BSS 1 HED BREAKPOINT * BRK SZB USER ENTER ADDRESS? JMP BRK1 YES,SEE IF VALID FOR BREAKPOINT * * NO, CLEAR BREAKPOINTS * LDA ALTMI "\\B"? CLEAR ALL BREAKPOINTS? CPA O2 JMP BRK20 YES * JSB CRLF FIRST PRINT CURRENT VALID BREAKPOINTS LDA SGBPT TABLE PTR STA BRKTP BREAKPOINT TABLE POINTER CLA STA BRKTC BREAKPOINT TABLE COUNT * BRK10 LDA BRKTP,I PRINT BREAKPOINT TABLE CONTENTS SZA,RSS IF ZERO, IS EMPTY JMP BRK11 * LDA BRKTC PRINT INDEX OF BREAKPOINT JSB NUMP JSB PTAB * LDA BRKTP,I PRINT THE SEGMENT NAME (3A2) JSB TY2 ISZ BRKTP LDA BRKTP,I JSB TY2 ISZ BRKTP LDA BRKTP,I JSB TY2 JSB PTAB * ISZ BRKTP LDA BRKTP,I PRINT THE BREAKPOINT ADDRESS JSB ADRP JSB CRLF * LDA BRKTP MOVE PTR BACK ADA M3 STA BRKTP * BRK11 LDA BRKTP ADA O5 ISZ BRKTC INCR COUNT CPA SGBPE END OF TABLE? JMP *+3 STA BRKTP JMP BRK10 * BRK12 LDB BRKX1 TELL THE USER TO ENTER THE INDEX OF BPS TO REMOVE JSB OUTMS CLA JSB GETNM GET THE USER'S INPUT OF THE INDEX NUMBER JMP ERR IF PROBLEMS ARISE * SSB SEE IF 'A' WAS THERE FOR ABORT JMP LSE * STA B NOW CALCULATE TABLE ADDR FROM INDEX ALS,ALS DO A *5+SGBPT ADA B ADA SGBPT STA BRKTP JSB CRLF DO A CRLF FROM GETNM LDB SGBPE SEE IF TOO BIG CMB,INB ADB BRKTP SSB,RSS JMP ERR TOO BIG * LDB SGBPT SEE IF TOO SMALL CMB,INB ADB BRKTP SSB JMP ERR TOO SMALL * CLB STB BRKTP,I ALL THAT IS NECESSARY TO CLEAR THE BP JMP BRK12 SEE IF ANOTHER IS WANTED * BRKX1 DEF *+1 ASC 10,ENTER INDEX OF BP TO ASC 10, DELETE OR CHAR "A" ASC 5,TO END // BRKTP BSS 1 BRKTC BSS 1 M3 OCT -3 * BRK20 CLA CLEAR ALL BREAKPOINTS LDB SGBPT POINTER TO SEGMENT BREAKPOINT TABLE BRK21 STA B,I INB CPB SGBPE POINTER TO END OF TABLE JMP LSE DONE JMP BRK21 NOT YET DONE SKP * * ADD A BREAKPOINT TO THE BREAKPOINT TABLE * BRK1 STA TEMP4 SAVE ADDRESS JSB MPCHK CHECK FOR MEM PROTECT JMP MPMSG GO PRINT ERROR * STA IADR JSB ADCHK CHECK FOR DBUGR OVERLAP LDA A,I GET INSTRUCTION JSB AHEAD NOT VALID FOR BREAKPOINT? RSS NO, CHECK FOR 3 WORD INSTR JMP *+3 YES, GO AHEAD AND PROCESS JSB TWINT NOT VALID YET, SEE IF 3 WRD INSTR JMP PR9 NO, DON'T ALLOW IT * LDA TEMP4 YES RESTORE ADDRESS STA BKADR LDA SGBPT FIND A HOLE * BRK4 LDB A,I SZB,RSS JMP BRK3 FOUND A HOLE * LDB A IS THIS AN ATTEMPT TO REDEFINE ADB O3 AN EXISTING BREAKPOINT? LDB B,I GET BREAKPOINT ADDRESS FROM TABLE CPB BKADR DOES IT MATCH? STA BRKFG YES, SAVE AWAY FOR LATER FURTHER CHECK * ADA O5 LOOK IN NEXT SLOT CPA SGBPE END? RSS JMP BRK4 * LDB PSBRK NO ROOM, SORRY JSB OUTMS JSB CRLF JMP LSE * BRK3 STA BRKTM SAVE PTR TO BPTABLE LDB A LDA BLANK MVW O3 CLEAR OUT NAME LDA B LDB XB IS BP IN MAIN OR SEG MEMORY? ADB O15 XLB B,I CMB,INB ADB BKADR SSB JMP BRK5 MAIN MEMORY BP, OK * ADA M3 RESTORE POINTER TO NAME FIELD STA B LDA SNAME,I MOVE SEGMENT NAME TO NAME FIELD CPA ""A" BUT FIRST BE SURE OF SEG NAME JMP BRK9 IF NO SEG LOADED, NO SEG NAME * LDA SNAME MOVE SNAME INTO NAME FIELD MVW O3 LDA B JMP BRK5 OK, PUT IN ADDR AND BP * BRK9 CLA CLEAR NAME OUT STA B,I JMP ERR TELL USER THAT IS A NO-NO * BRK5 LDB BKADR A PTR TO ADDR FIELD STB A,I INA LDB A LDA LTRAP CALCULATE A BREAKPOINT IOR JSBII STA B,I PUT INTO BREAKPOINT TABLE * LDA BRKFG BE SURE USER IS NOT TRYING TO SZA,RSS REDEFINE AN EXISTING BREAKPOINT JMP LSE USER IS NOT. * LDA BRKTM USER MAYBE. CHECK SEGNAME. LDB BRKFG CMW O3 DO SEGNAMES MATCH? JMP *+3 EQUAL! BREAKPOINT ALREADY EXISTS JMP LSE NOT EQUAL JMP LSE NOT EQUAL * CLA BREAKPOINT ALREADY EXISTS STA BRKTM,I CLEAR THIS NEW ENTRY STA BRKFG CLEAR BRKFG FOR NEXT TIME JMP LSE * BRKTM BSS 1 A TEMPORARY FOR HERE BRKFG OCT 0 SIGNAL FOR POSSIBLE BREAKPOINT REDEFINITION SKP TRAP JSB SVST SAVE STATUS CCA CALCULATE CURRENT PC ADA TRAP0 STA BPADR BREAKPOINT ADDRESS STA DDOT CURRENT PC CPA TADDR IS THIS THE "\\T" BREAKPOINT? JMP TRAP3 YES * CPA CNDBP IS THIS THE CONDITIONAL BREAKPOINT RSS YES JMP TRAP1 NO * LDA ACCA RESTORE A,B LDB ACCB LDA BADD,I DO THE CONDITIONAL BREAKPOINT TEST XOR BVAL AND BMSK * SZSKP RSS THE CONDITIONAL BREAKPOINT INSTR HERE JMP TRAP2 SIMULATE WITHOUT BREAK * TRAP1 ISZ PROCC A HIT, ADVANCE COUNT JMP TRAP2 SIMULATE WITHOUT BREAK * CLA A BREAK, CLEAR CNDBP STA CNDBP LDA BPADR JSB BRKMS BREAK MESSAGE JSB PTAB JMP LSF2 * TRAP2 LDA NOP SIMULATE WITHOUT A BREAK STA TRFLG CONTROL PASSES TO PROG AFTER SIMULATION JSB BRTST TEST FOR TTY BREAK JSB PR3 SIMULATE JMP TRAP * TRAP3 LDB TINST THE INSTR OF "\\T" STB A,I CCA STA TADDR PUT AN IMPOSSIBLE ADDR IN THERE LDA DDOT JSB BRKMS DO BREAK MESSAGE JSB PTAB JMP LSF2 AND RETURN TO COMMAND INTERPRETER * CNDBP OCT 0 COND BP ADDR RSS RSS BKADR BSS 1 BREAKPOINT ADDRESS TEMPORARY O33 OCT 33 CONSTANT 33 * BRTST NOP BREAK TEST LDA BRFLG SHALL WE CHECK FOR A BREAK? SZA JMP *+5 JSB IFBRK CHECK FOR BREAK DEF *+1 SZA JMP LSE JMP BRTST,I * PSBRK DEF *+1 OCT 6412 CR/LF ASC 16,NO MORE ROOM FOR BREAKPOINTS// SKP * ************************************************************************ * * ROUTINE .SDBG: * * .SDBG PROVIDES A SPECIAL ENTRY POINT TO DBUGR FOR SEGMENTED * PROGRAMS LOADED ON-LINE USING THE RTE-IV RELOCATING LOADER. * THE LOADER INSERTS THE FOLLOWING SUBROTINE(*.STDB*)FROM THE * SYSTEM LIBRARY WITH EACH SEGMENT: * * EXT .SDBG * ENT .DBSG,.STDB * .STDB JSB .SDBG * .DBSG NOP * END .STDB * * THE LOADER PLACES THE ACTUAL ENTRY POINT ADDRESS FOR THE SEGMENT * INTO *.DBSG*. THE SEGMENT'S ID SEGMENT'S ENTRY POINT IS SETUP * TO POINT TO *.STDB*. THIS EFFECTIVELY INSERTS DBUGR JUST BEFORE * ENTRY INTO THE SEGMENT. * * IF A SEGMENT ENTRY BREAKPOINT EXISTS FOR THE NEWLY LOADED * SEGMENT A 'SEGMENT BREAK' MESSAGE WILL BE PRINTED. DBUGR CONTINUES * AND GETS THE NEXT DEBUG COMMAND FROM THE USER. * * WHEN A PROCEED COMMAND OCCURS, DBUGR WILL CONTINUE AT THE ENTRY * POINT OF THE SEGMENT. * ************************************************************************ * .SDBG NOP JSB SVST SAVE STATE, WHICH ALSO EXCHS BPS WITH INSTRS * * NOW, THE NEW SEGMENT INSTRUCTIONS WHICH OCCURRED AT THE OLD * SEGMENT BREAKPOINT ADDRESSES ARE IN THE BREAKPOINT TABLE * FILED UNDER THE OLD SEGMENT NAME AND BREAKPOINT ADDRESS. * WE MUST PUT THOSE INSTRUCTIONS BACK INTO MEMORY AND FILL * THE BP TABLE INSTR FIELDS OF THOSE BPADDRS WITH BREAKOOINT * INSTRUCTIONS. * LDA SGBPT * SDBGX LDB SNAME DO THIS ONLY FOR OLD SEGMENT NAME JSB CMWDS OCT 3 RSS JMP SDBGY NOT OLD SEGMENT NAME * ADA O3 SEE IF THIS IS TRUE BP OR JUST ENTRY BP LDB A,I SSB ENTRY BP = -1 JMP SDBGZ IT IS A ENTRY BP * STB BKADR BREAKPOINT ADDRESS INA LDB A,I B HOLDS INSTRUCTION OF NEW SEGMENT STB BKADR,I PUT OUT INTO MEMORY LDB A LDA LTRAP IOR JSBII STA B,I NOW PUT A BREAKPOINT INTO TABLE INSTR FIELD LDA B RSS * SDBGZ INA INA RSS * SDBGY ADA O5 CPA SGBPE END OF LOOP? RSS YES JMP SDBGX NO * LDX O5 GET NEW SEGMENT NAME LDA ACCA ADA O14 RAL LDB SNAME RBL MBF * LDA .SDBG,I SAVE RETURN ADDRESS STA DDOT * LDA SGBRK SHALL WE DO AN ENTRY BREAK? SZA NONE/ALL FLAG JMP SDBG1 YES, DO ONE * LDA SGBPT SEARCH THE BP TABLE FOR ENTRY BREAK * SDBG2 LDB SNAME JSB CMWDS OCT 3 RSS JMP SDBG3 GO TO NEXT ENTRY * ADA O3 ADVANCE TO ADDR FIELD LDB A,I B HOLDS ADDRESS, -1 IS ENTRY BP SSB JMP SDBG1 YES! DO A SEGMENT ENTRY BP * ADA M3 * SDBG3 ADA O5 ADVANCE TO NEXT ENTRY CPA SGBPE END OF TABLE? RSS YES... JMP SDBG2 NO * JSB RSST JMP DDOT,I CONTINUE * SDBG1 CCB SET THE FLAG FOR SEGMENT ENTRY BREAK STB SBFLG LDA DDOT PASS RTN ADDR IN A-REG JSB BRKMS PRINT THE BREAK MSG JSB CRLF JMP LSE GO TO THE COMMAND INTERPRETER * SGBRK OCT 0 SEGMENT ENTRY BREAK FLAG, NONE/ALL BKINS BSS 1 BREAKPOINT INSTR TEMPORARY BLANK DEF BLAN1 PTR TO 6A1 OF SPACES BLAN1 ASC 3, 6 SPACES SKP * * BREAKPOINT TABLE * * THERE ARE 8 ENTRIES OF 3 FIELDS EACH: * FIELD 1) 3A2, SEGMENT NAME * IF THE NAME IS 0,0,0 - EMPTY ENTRY * (N.B., 1ST WORD 0 IMPLIES EMPTY ENTRY) * IF THE NAME IS ' ' - MAIN MEM BP * ELSE, FIELD IS SEGMENT NAME * FIELD 2) 1@, BREAKPOINT ADDRESS * IF THE ADDRESS IS NEGATIVE, THIS IS A SEG ENTRY BP * OTHERWISE, THE BREAKPOINT ADDRESS * FIELD 3) 1@, BREAKPOINT INSTR * HOLDS THE INSTR THE BREAKPOINT REPLACES * * SGA BSS 1 SGB BSS 1 SBFLG OCT 0 SBNAM DEF SBNM1 SBNM1 OCT 0 ASC 2, BYADD BSS 1 BLKBL ASC 1, "]" OCT 135 "B" OCT 102 O14 OCT 14 * XB EQU 1732B SNAME DEF SNAM1 PSGMS DEF SGMSG SGMSG OCT 6412 CR/LF. ASC 4,SEGMENT SNAM1 ASC 3,"A CURRENT SEGMENT NAME * * THE PRECEDING IS AN IMPOSSIBLE INITIAL * SEGMENT NAME. 6 SPACES IS THE 'SEGMENT * NAME' FOR MAIN MEMORY SPACE BREAKPOINTS. * THEREFORE WE USE "A AS THE INITIAL * SEGMENT NAME INSTEAD OF JUST SPACES. * ASC 3,BREAK OCT 6412 CR/LF. ASC 1,// * SKP * * * THIS ROUTINE SETS UP BREAKPOINT WITHIN * A SEGMENT * SBRK STA SGA SAVE A & B STB SGB SZB,RSS IF ADDRESS SUPPLIED JMP SBRK0 * JSB MPCHK CHECK FOR MP VIOLATION JMP MPMSG * STA IADR JSB ADCHK CHECK FOR DBUGR OVERLAP * SBRK0 LDB SBNAM CLEAR OUT NAME WITH SPACES RBL CALCULATE BYTE ADDRESS STB BYADD FOR LATER RBR LDA BLANK MVW O3 * GET SEGNAME TO SBNAM LDA M6 SET CHAR COUNT STA SBTMP * SBRK1 JSB SBRK6 GET A CHAR CPA "]" END? JMP SBRK3 * LDB BYADD SBT ISZ BYADD ISZ SBTMP JMP SBRK1 JMP ERR TOO MANY CHARS IN SEG NAME * SBRK3 JSB SBRK6 ESCAPE? GET \B OR ^B CPA O176 LDA O33 CPA O33 JSB SBRK5 SEND BACKLASH CPA O134 RSS JMP ERR NOT \ OR ^ * JSB SBRK6 GET "B" CPA "B" RSS JMP ERR WHATEVER IT WAS, WAS WRONG * LDA SBNM1 SHALL WE SET THE SGBRK FLAG? AND HOW? CCB B=-1 INDICATES NO CHANGE TO SGBRK CPA BLKBL [] IS = ["N] RSS CPA ""N" CLB B=0 INDICATES A "N OR '0' FOR SGBRK CPA ""A" CLB,INB B=1 INDICATES A "A OR NON'0' FOR SGBRK SSB IS A CHANGE INDICATED? JMP *+3 NO CHANGE IS INDICATED STB SGBRK CHANGE SGBRK JMP LSE DO NOT ENTER [],["N], OR ["A] IN TABLE * LDA SGBPT NOW LOOK FOR AN EMPTY SLOT SBRK2 LDB A,I SZB,RSS JMP SBRK4 FOUND A SLOT * ADA O5 ADVANCE PTR CPA SGBPE END OF TABLE? RSS JMP SBRK2 * * NO AVAILABLE SLOTS, TELL USER * LDB PSBRK JSB OUTMS JMP LSE * * SBRK4 LDB A B HOLDS PTR LDA SBNAM A HOLDS SOURCE ADDR MVW O3 B <- B+3 AS A RESULT STA B,I ADDR FIELD STB SBTMP SAVE TABLE PTR AWAY FOR A FEW LINES LDA IADR WE SAVED IADR JUST AFTER SBRK LDB SGB WAS THERE AN ADDRESS SUPPLIED? SZB,RSS CCA MUST BE SEG ENTRY BP LDB SBTMP GET THAT POINTER STA B,I PUT BP ADDR INTO TABLE * INB B PTR TO INSTR FIELD LDA LTRAP CALCULATE A BP IOR JSBII STA B,I PUT BP INTO INSTR FIELD JMP LSE * SBRK5 NOP LDA O134 BACKSLASH JSB TYO ECHO LDA O134 LDB TMODE IF SET FOR ESC GOBBLER SZB JSB TYO SEND SECOND BACKSLASH ISZ SBRK5 ADJUST RETURN JMP SBRK5,I * ""N" ASC 1,"N * SBRK6 NOP READS CHAR AND CHECKS FOR RUBOUT JSB TTYOP CPA RUB JMP DEL * CPA BSPAC JMP DEL * JMP SBRK6,I * RUB OCT 177 BSPAC OCT 10 BACKSPACE ""A" ASC 1,"A SBTMP BSS 1 A TEMPORARY FOR HERE HED INSTR SIMULATE * PROC SZB,RSS SET PROCEED COUNT CLA,INA IF B EQ 0 THEN A=1; CMA,INA PROCC=-A; STA PROCC PROCEED COUNT * JSB BYE SET BPADR TO LIMBO IF NO BREAKPOINTS * LDB DDOT DDOT IS PROGRAM COUNTER STB TRAP0 TRAP0 WILL POINT AFTER 1ST INSTR CPB BPADR PROCEED FROM LAST BREAKPOINT? JMP PR01 YES, SKIP FOLLOWING TESTS * LDB BPADR INA,SZA PROCEED COUNT = 1? JMP ERR NO, MUST BE 1 FIRST TIME * LDA RSS STA SZSKP LDA ALTMI /P? CPA O1 RSS JMP ERR NO, CANNOT BE //P FIRST TIME. * * ONE MAY ONLY //P FROM A BP AFTER A BREAK * CPB LIMBO SHALL WE PRINT 'END DBUGR'? RSS JMP *+3 NO LDB PNT11 YES JSB OUTMS * LDA NOP CONTROL GOES TO PROGRAM STA TRFLG LDA DDOT SYMX <- DDOT; STA SYMX LDA DSYMX BIX <- "JMP SYMX,I" IOR B24 JMP OPCODE STA BIX JSB CRLF JSB FLUSH BE SURE IT GETS OUT JSB RSST JSB BIX0 JMP TRAP * PR01 JSB CRLF LDA ALTMI CPA O1 /P? JMP PR02 YES * LDA BPADR NO, //P STA CNDBP SET CONDITIONAL BREAKPOINT FOR TRAP LDA SKP CNDBP'S TEST INSTR STA SZSKP JMP PR03 * PR02 CLA /P STA CNDBP PR03 JSB PR3 SIMULATE JMP TRAP SKP PR3 NOP SIMULATE INSTR AT DDOT LDA BIXBP RESTORE BIX TABLE JMP INSTRS LDB BIXP MVW O3 LDA DDOT OLD PC, NEW PC WILL BE RETURNED IN TRAP0 STA IADR INSTRUCTION ADDRESS INA STA TRAP0 NEW PC LDA IADR,I GET INSTRUCTION AT IADR JSB AHEAD VALID INSTR IN AREG? JMP TWINS NO, CHECK FOR 3 WORD INSTR * JSB ADRC GET OPERAND ADDRESS, INSTR JMP MAC NO ADDRESSABLE AS MR INSTR TYPE * JSB DMCHK MAKE DIRECT ADDRESS STA SYMX OPERAND ADDRESS LDA IADR,I GET INSTR INTO AREG AND B74 GET OPCODE OF INSTR CPA B24 JMP OPCODE? JMP PJMP YES * CPA B14 JSB OPCODE? JMP PJSB YES * * N.B. ONLY JMP, JSB, JLY, JPY ARE TESTED FOR MP ERROR * PR2 IOR DSYMX MERGE OPCODE WITH "DSYMX,I" STA BIX MADE UP INSTR -> BIX * PR4 JSB RSST RESTORE STATUS JSB BIX0 JMP PR3,I RETURN SKP PJMP LDA SYMX OPERAND ADDRESS JSB MPCHK CHECK OPERAND ADDRESS JMP MPMS FOR OUT OF BOUNDS STA TRAP0 WHERE WE WILL BE IN A MINUTE PJMP2 LDA TRFLG ARE WE GOING TO USER OR PROGRAM? SZA JMP PJMP3 TO THE USER * STA BIX TO THE PROGRAM, BIX <- NOP JSB RSST RESTORE STATE JSB BIX0 JMP TRAP * PJMP3 JSB RSST JMP PR3,I TO THE USER, RETURN PJSB LDA SYMX CHECK FOR OUT OF BOUNDS DESTINATION JSB MPCHK JMP JSBIN OUT; CHECK FOR EXEC CALL CASE * LDA DDOT PUT RETURN ADDR INTO ENTRY POINT INA STA SYMX,I ISZ SYMX ALTER PC ADDRESS AND MAKE A JMP JMP PJMP JSBII JSB 0,I PROCC BSS 1 BIXBP DEF BIXBF POINTER TO BIX JMP TABLE POINTER BIXP DEF BIX01+0 POINTER TO BIX JMP INSTRS BIXBF BSS 3 BIX JMP TABLE BUFFER B14 OCT 14000 B24 OCT 24000 B74 OCT 74000 NOP NOP PRTMP BSS 1 A TEMPORARY SKP TWINS JSB TWINT TEST FOR 3 WORD INSTR JMP ILINS ILLEGAL INSTR ERROR * LDA DDOT MOVE 3 WORDS TO BIX AREA CCB ADB BIXP MVW O3 JMP PR4 YES, INSTR READY, GO AND DO * TWINT NOP LDA IADR,I GET INSTRUCTION LDB TWDIN GET POINTER TO TABLE * TWIN1 CPA B,I COMPARE INSTR TO TABLE INSTR JMP TWINX FOUND A MATCH, IS LEGAL INSTR * ADB O3 ADVANCE PTR CPB TWDIE DONE? JMP TWINT,I YES JMP TWIN1 NO, CONTINUE * TWINX ISZ TWINT ADVANCE RETURN FOR FOUND JMP TWINT,I * TWDIN DEF STTP3+2 TWDIE DEF STTP+2 SKP JSBIN CPA CEXEC EXEC ADDRESS? RSS YES JMP MPMS NO, MP ERROR * * SIMULATE AN EXEC CALL * LDA DDOT HOW MANY ARGS TO THIS CALL? INA LDB A,I INA CMA,INA ADA B STA NARGS LDA DDOT MOVE ARGS ADA O2 LDB PARGS MVW NARGS LDA PARGS CREATE RTN ADDR ADA NARGS STA PRTN,I LDA P2 CREATE RSS CHAIN LDB RSS STB A,I INA CPA PRTN1 RSS JMP *-4 * JSB RSST RESTORE STATE JSB EXEC P2 NOP RETURN ADDRESS P3 BSS 12 RTN1 JSB RTN3 RTN2 JSB RTN3 RTN3 NOP JSB SVST SAVE STATE LDB RTN3 CALCULATE RETURN ADDRESS CLA WAS FIRST OR SECOND RETURN TAKEN? CPB PRTN3 INA XOR NARGS AND O1 0 OR 1 DEPENDING ON PARITY OF #ARGS LDB DDOT GET THE ORIGINAL RETURN ADDRESS INB ADA B,I STA TRAP0 JMP PJMP2 * PARGS DEF P3 NARGS OCT 0 PRTN DEF P2 PRTN1 DEF RTN1 PRTN3 DEF RTN3 CEXEC DEF EXEC+0 SKP * BIX0 NOP BIX STA SYMX,I INSTRUCTION BIX01 JMP NOSKP BIX02 JMP SK1 JMP SK2 JMP SK3 SK4 ISZ TRAP0 ADVANCE PC SK3 ISZ TRAP0 SK2 ISZ TRAP0 SK1 ISZ TRAP0 NOSKP EQU * TRFLG NOP BECOMES RSS WHEN TRACING JMP TRAP0,I RETURN TO PROGRAM * JMP BIX0,I RETURN TO DEBUGGER (NEXT INSTR IS JMP TRAP) * TRAP0 NOP BREAKPOINTS FALL IN HERE JMP BIX0,I GO TO TRAP SKP * * RESTORE STATUS ROUTINE * RSST NOP * JSB EXCH EXCHANGE BREAKPOINTS WITH INSTRUCTIONS * LDA DIDTP LDB IDWD1 RESTORE SEGMENT WORDS 1 TO 5 LDX O5 JSB $LIBR GO PRIVILIGED NOP MWI TRANSFER WORDS INTO ALTERNATE MAP JSB $LIBX GO UNPRIVILIGED DEF *+1 DEF *+1 * * RESTORE REGISTERS AND FLAGS * JSB RSREG JMP RSST,I * RSREG NOP LDB ACCB LDX ACCX LDY ACCY LDA FLGBX CLF 1 CLEAR OVERFLOW SLA,RAR STF 1 ERA LDA ACCA JMP RSREG,I AND RETURN * SKP * * EXCH * * EXCHANGES BREAKPOINTS WITH INSTRUCTIONS * * CALLING SEQUENCE: * JSB EXCH * EXCH NOP EXCHANGE BREAKPOINTS WITH INSTRUCTIONS LDA SGBPT A-REG WILL USUALLY POINT TO BREAKPOINT TABLE * EXCH1 LDB SNAME B-REG POINTS NOW TO CURRENT SEGMENT NAME JSB CMWDS IS THE ENTRY SEGNAME = CUR SEG NAME? OCT 3 3 WORDS JMP EXCH2 YES * LDB BLANK IS THE ENTRY SEGNAME = MAIN MEMORY? JSB CMWDS OCT 3 JMP EXCH2 YES * ADA O5 * EXCH3 CPA SGBPE END OF TABLE? JMP EXCH,I YES JMP EXCH1 NO, CONTINUE SEARCH * EXCH2 ADA O3 A-REG POINTS TO ADDR FIELD OF ENTRY LDB A,I B HOLDS BP ADDRESS SSB IS THIS AN ENTRY BREAKPOIN? JMP EXCH4 YES, IGNORE * STB BKADR INA A-REG POINTS TO INSTR FIELD OF ENTRY LDB A,I STB BKINS NOW THE ADDR AND INSTR ARE IN TEMPS LDB BKADR,I GET WHAT IS IN MEMORY STB A,I AND PUT IT INTO THE TABLE LDB BKINS STB BKADR,I PUT THE INSTR INTO MEMORY RSS * EXCH4 INA INA JMP EXCH3 SKP * * CMWDS * * CALLING SEQUENCE: * LDA PTR1 * LDB PTR2 * JSB CMWDS * OCT LENGTH OF STRINGS * CALLING SEQUENCE: * LDA PTR1 * LDB PTR2 * JSB CMWDS * OCT N * ...EQUAL... * ...NOTEQ... * * A,B ARE RETURNED UNCHANGED * CMWDS NOP CAX SAVE A CBY SAVE B LDA CMWDS,I GET NUMBER OF ARGS STA CMWDC SAVE COUNT ISZ CMWDS ADVANCE RETURN ADDRESS CXA RESTORE A-PTR CMW CMWDC DO THE COMPARISON JMP *+3 NOP ISZ CMWDS ADVANCE RETURN ADDRESS, A.NE.B CXA RESTORE A CYB RESTORE B JMP CMWDS,I CMWDC BSS 1 * SKP MAC LDA IADR,I GET INSTRUCTION STA BIX SET INSTRUCTION CPA HLT IF A HLT JMP MPMS THEN GO PRINT MP MESSAGE * AND M6000 =B172000 CPA HLT IF AN IO INSTRUCTION JMP IO THEN GO CHECK SELECT CODE * MAC00 LDA BIX ELSE RESTORE A WITH BIX JSB GET2 2 WORD INSTRUCTION? JMP PR4 NO,GO SET UP INSTRUCTION * LDA IADR YES,SET ADDRESS INA STEP TO MAC ADDRESS IOR B1 OF SECOND WORD STA BIX01 FOR BIX * LDA BIX GET INSTRUCTION CPA JPY JPY? JMP PR6 YES,GO FIX JPY * CPA JLY JLY? JMP PR11 YES,GO FIX JLY * JMP PR4 NO,GO FINISH THE SET UP * * JPY SIMULATION PR6 LDY ACCY BE SAFE LDA BIX01 GET 2ND WORD ELA,CLE,ERA ELIMINATE LDA A,I ADDED INDIRECT ADA ACCY FORM DESTINATION ADDRESS JMP PR12 * * JLY SIMULATION PR11 LDA IADR SET UP ADA O2 ACTUAL STA ACCY Y LDA BIX01 ELA,CLE,ERA ADA MUPBD TEST FOR DM ERROR SSA,RSS JMP DMCK5 BAD GO PRINT MESSAGE * ADA UPBD GOOD SZA,RSS LDA DACCA GET PHONY A REG LDA A,I GET INDIRECT ADDRESS * * FINISH JLY, JPY SIMULATION * PR12 LDB TRAC SZB,RSS TRACING? JMP PR2 NO,GO SET UP * JSB MPCHK CHECK ADDRESS FOR BOUNDS JMP MPMS * STA TRAP0 JSB RSST JMP PR3,I * IO LDA BIX GET INSTUCTION AND O77 CPA O1 IF S.C. = 1 JMP MAC00 THEN OK JMP MPMS ELSE GO PRINT MP MESSAGE * M6000 OCT 172000 B1 OCT 100000 O2 OCT 2 SKP * XEC SZB,RSS "EXECUTE" COMMAND "N\X" JMP ERR * JSB AHEAD VALID INSTRUCTION FOR EXECUTION? JMP PR9 * JSB CLESB CLE FLAG SET? STA XECIN SAVE INSTRUCTION JSB GET2 TWO WORD INSTRUCTION? RSS JMP PR9 NOT ALLOWED * LDA DDOT SAVE PC STA XECT1 LDA PXECI SET PC STA DDOT LDA RSS RETURN HERE AFTER SIMULATION STA TRFLG LDA BIXBP RESTORE JMP TABLE LDB BIXP MVW O3 JSB PR3 SIMULATE JSB SVST SAVE STATE JSB CRLF CLA CLEAR THE FLAG STA TRFLG LDA XECT1 RESTORE PC STA DDOT JMP LSE * PXECI DEF XECIN XECIN NOP INSTRUCTION TO BE EXECUTED XECT1 BSS 1 SAVED DDOT * GO SZB,RSS "GO" COMMAND "N\G" JMP ERR * STA DDOT CHANGE PC CLB SET PROCEED COUNT JMP PROC HED BREAKPOINT AND TRACE ROUTINES * ADRC NOP GET ADDRESS OF INSTRUCTION LDB A AND G70 CLE,SZA,RSS JMP ADRCX NON-ADDRESSABLE. * ISZ ADRC SET SKIP RETURN LDA B AND O2000 PAGE BIT SZA LDA IADR GET PROPER PAGE XOR B AND G76 REMOVE OPCODE AND PAGE BIT * ADRCX XOR B JMP ADRC,I A-REG IS ADDR, B-REG IS INSTR SKP * * AHEAD * * CHECKS INSTRUCTION ABOUT TO BE EXECUTED TO SEE IF * THE INSTRUCTION IS ALLOWED FOR EXECUTION * * LDA * JSB AHEAD * P+1 * P+2 * AHEAD NOP STA TEMP1 AND DSMSK IF DOUBLE SHIFT CPA ASL JMP AHE02 * CPA LSL JMP AHE02 * CPA RRL JMP AHE02 * AND M6000 OR IOG CPA HLT JMP AHE02 * AND G70 OR MRG SZA JMP AHE02 * LDA TEMP1 OR SRG OR ASG SSA,RSS JMP AHE02 * * ELSE CHECK REST LEGAL OPCODES * LDB PNT08 POINT TO START OF TABLE * AHE01 CPA B,I GOT A MATCH? JMP AHE02 YES, VALID FOR DDT * ADB O3 NO,BUMP POINTER CPB PNT09 DONE? JMP AHEAD,I YES,NOT VALID JMP AHE01 NO,CONTINUE * AHE02 LDA TEMP1 RESTORE VALIDATED INSTRUCTION ISZ AHEAD ADJUST RETURN JMP AHEAD,I * PNT08 DEF RRL+3 LINK TO START OF REST OF VALID'S PNT09 DEF IVINS LINK TO START OF INVALID INSTR'S SKP * * BRKMS * * PRINTS BREAK MESSAGE FOR BREAKPOINTS AND TRACING * * CALLING SEQUENCE: * LDA * JSB BRKMS * BRKMS NOP PRINT BREAK MESSAGE STA DDOT SAVE THE TRAP ADDRESS STA IADR FOR THE SAKE OF INSTP LDA SBFLG PRINT SEGMENT BREAK? SZA,RSS JMP BRKM1 * CLA STA SBFLG CLEAR FLAG LDB PSGMS PRINT 'SEGMENT NAME0 BREAK' JSB OUTMS MESSAGE * BRKM1 LDA DDOT RESTORE A JSB ADRP LDA SRDX JSB TYO ( JSB PTAB A FEW SPACES LDA DDOT,I NOW THE INSTRUCTION JSB INSTP IN SYMBOLIC JSB PTAB PUT IN SOME SPACES LDA SRDX INA JSB TYO ) JSB PTAB MORE SPACES LDA ACCA A REG. JSB BM,I JSB PTAB MORE SPACES LDA ACCB B REG. JSB BM,I JSB PTAB YET MORE SPACES LDA ACCX X REG. JSB BM,I JSB PTAB MORE SPACES LDA ACCY Y REG. JSB BM,I JSB PTAB MORE SPACES LDA FLGBX E,O,INT STA LWT SET LAST WORD TYPED JSB NUMP JMP BRKMS,I * SRDX OCT 50 SKP * * B Y E * * PRINTS END MESSAGE * BYE NOP STA TEMP5 SAVE A,B REGS STB TEMP6 LDA SGBRK IS SEGMENT BREAK SET ["A] SZB JMP BYE2 YES, DO NOT PRINT MESSAGE * LDA SGBPT SEE IF ANY BREAKPOINTS EXIST BYE1 LDB A,I IF ANY EXIST, DO NOT SZB PRINT MESSAGE 'END DBUGR' JMP BYE2 BREAKPOINT EXISTS, DONT PRINT * ADA O5 ADVANCE PTR TO NEXT BREAKPOINT CPA SGBPE RSS JMP BYE1 * LDB LIMBO THERE ARE NO BREAKPOINTS STB BPADR TELL USER VIA BPADR * BYE2 LDA TEMP5 RESTORE A,B REGS LDB TEMP6 JMP BYE,I * TEMP5 BSS 1 TEMP6 BSS 1 PNT11 DEF MSG04 MSG04 OCT 6412 ASC 5,END DBUGR OCT 6412 CR LF ASC 1,// SKP * ******************************************************************* * * SUBROUTINE OUTMS: * * OUTMS WILL OUTPUT A MESSAGE WHICH TERMINATES WITH A '//' AND * CONTAINS NO INTERNAL /'S. * * CALLING SEQUENCE: * LDB POINTER TO FIRST WORD OF MESSAGE * JSB OUTMS * * RETURN: * ALL REGISTERS ARE DESTROYED. * ******************************************************************* * OUTMS NOP CLA INITIALIZE TO LEFT BYTE STA TEMP1 OF MESSAGE STRING. STB TEMP2 SAVE STRING'S ADDRESS. * OTMS1 LDA TEMP2,I GET WORD FROM STRING. LDB TEMP1 GET SLB,RSS APPROPRIATE ALF,ALF BYTE. AND O177 MASK OFF CHARACTER. CPA "/" IF FOUND A "/", THEN END JMP OUTMS,I OF MESSAGE, SO RETURN. * JSB TYO OTHERWIZE, PRINT LATEST LDB TEMP1 CHARACTER. SLB IF BYTE COUNT IS ODD, THEN ISZ TEMP2 BUMP WORD POINTER. ISZ TEMP1 INCREMENT BYTE COUNTER JMP OTMS1 AND RETURN FOR MEXT BYTE. * * * MPCHK * * SKIP RETURN IF ADDRESS IN AREG ABOVE FENCE * DICTATED BY 1775B. NORMAL RETURN IF MP ERROR. * * CALLING SEQUENCE: * LDA
* JSB MPCHK * ...AREG UNCHANGED, BREG BASHED, MP ERR * .AREG UNCHANGED, BREG BASHED, NO ERR * MPCHK NOP MEMORY PROTECT & DM CHECK JSB DMCHK GO RESOLVE INDIRECTS LDB 1775B CHECK FOR MEMORY PROTECT ERROR CMB,INB SUBTRACT FENCE FROM ADB A ADDRESS SSB,RSS IF OK RETURN +1 ISZ MPCHK JMP MPCHK,I ELSE RETURN * MPMS LDA DDOT BACK OUT THE INTERPIT STEP CPA PXECI EXECUTE INSTR? LDA XECT1 YES RESTORE STA DDOT RESTORE THE ADDRESS STA IADR STA DDOT JSB CRLF RETURN THE CARRAGE LDA IADR JSB BRKMS SEND A BREAK MESSAGE JSB PTAB SEPARATE THE MP? * MPMSG LDA "M" FETCH AN M JSB TYO PUT IT OUT JMP BADP FOLLOW IT WITH A P? * DACCA DEF ACCA POINTER TO A-REG CONTENTS DACCB DEF ACCB POINTER TO B-REG CONTENTS CH40 OCT 40 SKP * * GET2 * * SEARCHES DOUBLE WORD INSTRUCTIONS TABLE TO SEE IF * CURRENT INSTRUCTION IS DEFINED THERE. * * LDA * JSB GET2 * P+1 * P+2 <2 WORD INSTRUCTION,A=SQOZE CODE> * GET2 NOP STA TEMP1 SAVE INSTRUCTION LDB PNT07 POINT TO DOUBLE WORD INSTRUCTIONS * MAC02 CPB DSTOP DONE? JMP GET2,I YES,GO FINISH THE SET UP * ADB O2 POINT TO OPCODE IN SYMBOL TABLE LDA B,I GET OPCODE CPA TEMP1 DOUBLE WORD INSTRUCTION? JMP MAC01 YES,SET UP FOR 2 WORD INSTRUCTION * INB NO,POINT TO NEXT ENTRY JMP MAC02 CONTINUE LOOKING * MAC01 ADB M2 POINT BACK TO ENTRY(SETS EREG) LDA B,I GET SQOZE CODE ISZ GET2 ADJUST RETURN JMP GET2,I * DSTOP DEF STTP2 LINK TO END OF 2 WORD INSTR SECTION PNT07 DEF DOUBL LINK TO 2 WORD INSTR SECTION SKP * SVST NOP RESTORE STATUS * * RESTORE BREAKPOINTS TO MAIN AND CURRENT SEGMENT * JSB SVREG SAVE REGISTERS * LDA BIXS RESTORE THE DOUBLE WORD INSTRUCTION SZA IF NOT SET UP, SKIP STA BIX01 THIS IS DONE CAUSE BIX01 GETS MESSED LDA BIX01 AFTER 1ST TIME THROUGH STA BIXS * LDA BPADR STA IADR FOR PRINT * LDA IDWD1 SAVE PROGRAM'S TEMP WORDS FROM ITS ID SEGMENT LDB DIDTP DESTINATION ADDRESS LDX O5 5 WORDS MWF MOVE FROM ALTERNATE MAP TO ENABLED MAP * JSB EXCH EXCHANGE BREAKPOINTS WITH INSTRUCTIONS JMP SVST,I AND RETURN * BIXS NOP HOLDS COPY OF 2ND WORD BEFORE RETURN IDWD1 EQU 1721B ID SEGMENT WORD 1 DIDTP DEF IDTMP POINTER TO BUFFER FOR SAVING IDTMP BSS 5 ID SEGMENT'S TEMP WORDS. * SVREG NOP SAVE REGISTERS STA ACCA STB ACCB STX ACCX STY ACCY CLA SAVE FLAGS ELA,RAL SAVE E-BIT SOC OVERFLOW ON? INA YES STA FLGBX JMP SVREG,I HED TRACE ROUTINE TRACE SZB,RSS MAKE A ZERO CLA,INA INTO A 1 CMA,INA SET NEG FOR STA TRAC COUNT AND SET LDA ALTMI CHECK FOR "\\T" CPA O2 JMP TRAC1 * LDA RSS COME BACK HERE AFTER PR3 CALL STA TRFLG * TRNX JSB CRLF JSB PR3 SIMULATE DDOT'S INSTR JSB SVST SAVE STATE * TRMS LDA TRAP0 NEW PC STA DDOT CURRENT PC JSB BRKMS BREAK MESSAGE ISZ TRAC DONE COUNT? JMP TRNX NO * LDA NOP YES, RESET TRFLG STA TRFLG JSB PTAB JMP LSF RETURN TO DEBUG COMMAND INTERPRETER * TRAC1 LDA DDOT "\\T" INA LDB A,I GET THE INSTR STB TINST STA TADDR CLA STA TRAC CLEAR OUT TRACE COUNT CLA,INA STA ALTMI SET BACKSLASH COUNT FOR PROC LDA LTRAP MAKE THE TRAP INSTR IOR JSBII STA TADDR,I LDA DDOT DO A PROCEED CLB JMP PROC * TINST BSS 1 THE INSTRUCTION TADDR OCT 177777 THE ADDRESS * ILINS LDA DDOT ILLEGAL INSTRUCTION TRAP CPA PXECI LDA XECT1 STA DDOT STA IADR JSB CRLF LDA IADR JSB BRKMS * PR9 JSB PTAB LDA "IN" JSB TY2 JMP ERR * "IN" ASC 1,IN HED SEARCH ROUTINES * EAS LDA CSKP STA WSD * WDS LDA CSZA CLE,SSA,SLA ALWAYS SKIPS * NWS LDA CSNZA SZB,RSS JMP ERR * STA WSTST JSB CRLF LDA LL STA IADR * WSL JSB ADCK SEE IF DONE JMP WSIDX IN DEBUG, IGNORE * LDA IADR,I * WSD NOP SKIP IF EFFECTIVE ADDR. JMP WSC * JSB ADRC JMP WSIDX NOT ADDRESSABLE. * JSB DMCK GO RESOLVE INDIRECTS JMP WSIDX TOO MANY INDIRECTS * NOP DM ERROR * WSC XOR WRD AND MSK * WSTST NOP SZA OR SZA,RSS JMP WSIDX * JSB PAC PRINT ADDRESS AND CONTENTS JSB CRLF * WSIDX ISZ IADR NOP ALLOW WRAPAROUND JSB BRCHK CHECK FOR OPERATOR BREAK JMP WSL SKP * BRCHK NOP CHECK FOR OPERATOR BREAK STA BRCH1 SAVE A-REG STB BRCH2 SAVE B-REG LDA BRFLG SHALL WE CHECK FOR BREAK? SZA ZERO MEANS YES JMP BRCH3 GET OUT IF NON ZERO * JSB IFBRK DEF *+1 SZA JMP LSE YES, OPERATOR WANTS BREAK * BRCH3 LDA BRCH1 NO, OPERATOR WANTS NO BREAK LDB BRCH2 JMP BRCHK,I RESTORE REGS AND GO BACK * BRCH1 BSS 1 A-TEMP BRCH2 BSS 1 B-TEMP SKP * * DMCHK * * DM AND MULTIPLE INDIRECT CHECK * * INPUT: A REG=INDIRECT ADDRESS * * OUTPUT: A REG=DIRECT ADDRESS * B REG=ACCB * DMCHK NOP JSB DMCK JMP DMCK3 GO PRINT INDIRECT ERROR JMP DMCK4 GO PRINT DM ERROR JMP DMCHK,I RETURN * * LDA ADDR * JSB DMCK * * * * * OUTPUT: A REG=DIRECT ADDRESS * B REG=ACCB * DMCK NOP LDB M20 SET UP INDIRECT COUNT STB DMCNT LDB ACCB SET UP B REG JMP DMCK1 GO TEST ADDRESS * DMCK0 ISZ DMCNT RSS JMP DMCK,I YES,ERROR 1 RETURN * SZA,RSS TRYING TO USE A REG LDA DACCA YES,GET PHONY A REG ADA MUPBD TEST FOR UPPER BOUND SSA,RSS (DM ERROR) JMP DMCK2 ERROR RETURN * ADA UPBD GOOD THEN CORRECT A LDA A,I AND GET NEXT LEVEL * DMCK1 RAL,CLE,SLA,ERA IS IT IN DIRECT? JMP DMCK0 YES,GO GET NEXT LEVEL * ADA MUPBD NO,CHECK FOR DM ERROR SSA ISZ DMCK BUMP ONE MORE FOR GOOD * DMCK2 ADA UPBD RESTORE A REG ISZ DMCK JMP DMCK,I * "I" OCT 111 M20 OCT -20 DMCNT BSS 1 DMCK3 LDA "I" JSB TYO PRINT "I?" JMP ERR * * DMCK5 ADA UPBD RESTORE A DMCK4 JSB NUMP PRINT DM? ERROR DMCK6 JSB PTAB SEPARATE "DM?" LDA "DM" TYPE "DM?" JSB TY2 JMP ERR * "DM" ASC 1,DM MUPBD BSS 1 NEGATIVE OF UPPER BOUND UPBD BSS 1 POSITIVE BOUND * * PAC * * PRINT ADDRESS AND CONTENTS * PAC NOP LDA IADR PRINT ADDRESS AND CONTENTS JSB ADRP JSB TYO PRINT / JSB PTAB LDA IADR,I JSB PM,I JMP PAC,I SKP * * CLEAR CORE * ZRO LDB ALTMI ADB M2 SSB JMP ERR * LDB LL STB IADR LDA WRD * ZROL JSB ADCHK STA IADR,I ISZ IADR JMP ZROL * ADCK NOP CHECK FOR DEBUG OVERLAP STA PN SAVE AC LDA IADR CMA,INA ADA UL OCT 1256 RAL,CLE,SLA,ELA :THE ELA IS DISABLED JMP SOXA DONE, GO RESET * LDA IADR CMA,SEZ E CLEAR: WILL SKIP G70 OCT 70000 LDB A ADA STEND SSA,RSS JMP ADCKR BELOW DEBUG * ADB DEBOP SSB,RSS JMP ADCKO WITHIN DEBUG, LOSE * LDA IADR TEST IF IN PARTITION JSB DMCHK * ADCKR ISZ ADCK BUMP FOR NORMAL RETURN * ADCKO LDA PN RESTORE AC JMP ADCK,I RETURN * ADCHK NOP JSB ADCK OCT 1053 ALS,CLE,SLA,RAR :THE RAR IS DISABLED JMP ADCHK,I JSB PTAB 3 SPACES LDA "T" JSB TYO T JMP BADP * "T" OCT 124 HED TAPE OPERATIONS * TABL LDA ALTMI IS THIS \L OR \\L? CPA O1 JMP LIST THE FOLLOWING HANDLES \\L, LIST IS \L * JSB SOI * TABL1 JSB RWDB STA SYM JSB RWDB STA SYM+R AND G70 STA ADCK SAVE FLAGS XOR SYM+R DELETE FLAGS STA SYM+R JSB RWDB LDB ADCK BLF ADB RELTB ADA B,I RELOCATE SYMBOL JSB DEFS JMP TABL1 * LOAD JSB SOI * LOA JSB RWDB JSB ADCHK IS ADDRESS OK STA IADR,I STORE JMP LOA * VFY JSB CRLF JSB SOI * LDV JSB RWDB JSB ADCK NOP CPA IADR,I COMPARE JMP LDV STORE DONE OR CORE MATCH. * SZA,RSS JMP LDV IGNORE ZERO ON TAPE. * STA RWDB SAVE TAPE WORD. JSB PAC PRINT DISCREPANCY. JSB PTAB LDA RWDB JSB PM,I JSB CRLF JMP LDV * RELTB DEF WRD-1 SKP LIST SZB,RSS \L OR N\L? IF B.NE.0 THEN N\L JMP LIST2 * LDB ONM WHERE THE N IS KEPT SSB,RSS NEGATIVE OR ZERO N NOT ALLOWED SZB,RSS JMP ERR * STB LISTN CHANGE THE DEFAULT * LIST2 LDA LISTN PREPARE THE COUNT CMA,INA STA LISTC LISTC IS THE NEG. NUM. OF LINES TO PRINT * CLA,INA ADVANCE ADDRESS POINTER BY ONE ADA LOCP,I THE FOLLOWING IS COPIED FROM "EXAM"[DBUGR] * LIST1 ELA,CLE,ERA STA TAS STA LOCP,I STA IADR JSB CRLF LDA TAS JSB ADRP JSB TYO LDA TAS JSB DMCHK JSB PTAB LDA TAS,I STA LWT JSB EXPM,I JSB PTAB * CLA,INA ADA LOCP,I ISZ LISTC JMP LIST1 JMP LSE * LISTN OCT 20 NUMBER OF LINES TO BE PRINTED LISTC BSS 1 COUNT FOR #LINES PRINT-LOOP SKP * SOI NOP LDB SOI INB STB RWDB * SOF JSB RDCH INB,SZB,RSS COUNT BLANK TAPE JMP SOX LOTS: END OF FILE. * C3007 CMA,INA,SZA,RSS HAVE WE A WORD COUNT? JMP SOF NOT YET. * STA CHC JSB RDCH DISCARD ONE FRAME JSB RDWD BLOCK ADDRESS STA CHI INIT CHECKSUM ELA,CLE,ERA MAKE SURE NOT INDIRECT STA IADR * RWDG JSB RDWD LDB A ADB CHI STB CHI JMP RWDB,I RETURN * RWDB NOP ISZ IADR ISZ CHC INDEX WORDCOUNT JMP RWDG * JSB RDWD READ CHECKSUM LDB M6 MAX. RECORD GAP CPA CHI JMP SOF CKSM OK, GO TO NEXT RECORD * LDA RDCHK BAD CHECKSUM LDB SRDX JSB PN COMPLAIN * SOX EQU * SOXA LDA LOCP,I STA IADR JMP LSE SKP * RDWD NOP READ A WORD JSB RDCH ALF,ALF STA CH JSB RDCH ADA CH JMP RDWD,I * RDCH NOP READ A CHARACTER STB BS SAVE B JSB EXEC GO TO EXEC FOR ONE CHAR. ON 5 DEF RDRTN-1 IN CASE OF EXEC CALL ERROR DEF NAB1 (OCT 1+NO ABORT BIT) DEF O2105 DEF BF DEF M1 * JSB EXERR IN CASE OF EXEC CALL ERROR RDRTN LDA BF GET THE CHAR ALF,ALF AND O377 LDB BS RESTORE B JMP RDCH,I * O2105 OCT 2105 O377 OCT 377 RDCHK OCT 50245 * EXERR NOP EXEC ERROR HANDLER STA EXER1 SAVE A,B REGISTERS STB EXER2 JSB CRLF CRLF LDB EXMSG "EXEC CALL ERROR: A,B=" JSB OUTMS LDA EXER1 JSB TY2 PRINT A2 FORMAT JSB PTAB LDA EXER2 LDB O10 JSB PN PRINT OCTAL FORMAT JSB CRLF LDA EXER1 LDB EXER2 JMP EXERR,I * EXER1 BSS 1 EXER2 BSS 1 EXMSG DEF *+1 ASC 12,EXEC CALL ERROR: A,B=// SKP PNCH JSB STORE LDA LFLG SZA JMP PCH1 LIMITS SPECIFIED * LDA IADR USE CURRENT REGISTER STA LL STA UL * PCH1 LDA LL CMA,INA ADA UL SSA JMP LSE DONE * AND O77 CMA STA CHC WORDS THIS BLOCK CMA,CCE,INA ALF,ALF JSB PWD WORD COUNT LDA LL STA CHI CHECKSUM JSB PWD ORIGIN * PCHL LDA LL,I JSB PWD ADA CHI STA CHI ISZ LL ISZ CHC JMP PCHL * JSB PWD CHECKSUM CLA JSB PWD BLANK FRAMES JSB PWD FOR INTER-RECORD GAP JMP PCH1 * PWD NOP PUNCH A WORD STA BF SET WORD JSB EXEC GO TO PUNCH WITH ONE WORD DEF PWRTN-1 IN CASE OF EXEC CALL ERROR DEF NAB2 (OCT 2+NO ABORT BIT) DEF O2104 HONEST BINARY DEF BF DEF O1 * JSB EXERR IN CASE OF EXEC CALL ERROR PWRTN LDA BF RESTORE A JMP PWD,I * O2104 OCT 2104 BF NOP BS NOP HED SYMBOL TABLE OPERATIONS * DEFS NOP STA RDCH JSB EVS JMP DRDF * LDA START CHECK FOR OVER FLOW CMA,INA ADA STEND SSA JMP SYMO OVERFLOW GO BITCH * CCB NAKE NEW ENTRY ADB STEND LDA RDCH STA B,I ADB M1 LDA SYM+R STA B,I LDA SYM SSA ADA C1031 ADA M3100 SSA,RSS ADB M1 LDA SYM STA B,I STB STEND JMP DEFS,I * DRDF LDA RDCH FIX OLD ENTRY STA CH,I JMP DEFS,I * START DEF END+4 SKP * EVS NOP LDB SYM IS IT A CLE CPB CLE JMP CLEFD YES GO SET CLE FLAG * LDA STEND STA CH * EVSL LDA CH CPA STTOP JMP EVSU UNDEFINED. * LDB CH,I GET LEFT HALF ISZ CH G74 STB A USED AS CONSTANT SSB ADB C1031 OVERFLOW. ADB M3100 CPA SYM JMP EVSM1 LEFT HALF MATCH. * SSB,RSS ISZ CH EVSI ISZ CH JMP EVSL TRY AGAIN. * EVSM1 LDA CH,I SSB CLA,RSS ISZ CH CPA SYM+R JMP EVSF RIGHT HALF MATCHES. JMP EVSI * EVSF LDA CMFLG HAS A COMMA BEEN TYPED SZA,RSS JMP EVSF2 THEN VALUE IS OK * LDA ISEXP YES MAKE SURE NOT CMA,INA FIRST ROTATE ADA CH SSA BELOW ROTATES JMP EVSF2 YES THEN OK * ADA M60 SSA ABOVE FIRST ROTATES JMP EVSI NO THEN CONTINUE JMP EVSF2 YES RETURN * * EVSU ISZ EVS UNDEFINED: SKIP RETURN * EVSF2 LDA CH,I PICK UP VALUE JMP EVS,I * CLEFD STB CLEFG SET CLE FLAG CLA SET VALUE TO ZERO JMP EVS,I * CMFLG OCT 0 M60 OCT -60 CLEFG OCT 0 O40 OCT 40 M3100 OCT -3100 C1031 CLF 0 STTOP DEF STTP LINK TO END OF SYMBOL TABLE SKP * * SYMBOL TABLE SEARCH * SRCST NOP STA CH SAVE TABLE LIMITS STB TYO LDA C1000 STA DNM STA NUMP * SRCL LDB CH CPB TYO JMP SRCST,I DONE, RETURN * LDA CH,I SSA ADA C1031 ADA M3100 CLE,SSA,RSS ISZ CH ISZ CH LDA CH,I FETCH SYMBOL VALUE CMA,SEZ,INA,RSS WON'T SKIP ADA ONM COMPARE SEZ,CLE,RSS JMP SRCI ENTRY TOO BIG, LOSE * STA PN LDA B IF >2 CARACTERS INA CPA CH RSS JMP SRCI1 THEN LOOSE * LDA PN YES TEST VALUE ADA NUMP CCE,SSA,RSS JMP SRCI1 AS GOOD OR BETTER ALREADY * CMA,SEZ,INA GOOD MATCH (WON'T SKIP) ADA NUMP STA NUMP UPDATE CLOSENESS LDA B,I SAVE SYMBOL STA SYMP SKP SRCI1 LDA PN CHECK IF BETTER ADA DNM THAN LAST ONE CMA,SSA,INA JMP SRCI NO FORGET IT * CLA CLEAR TEMP ",C" FLAG STA CMACT LDA TYO IF SEARCH OF USER TABLE CPA ISEND THEN JMP SRCI2 SKIP * LDA C1000 CLEAR SINGLE DEF IF OP-CODE STA NUMP LDA CH,I GET THE VALUE AND ONM MASK CPA CH,I MUST HAVE ALL THE DEFINED RSS BITS ELSE JMP SRCI FORGET SYMBOL * SSA IF MAC GROUP GO CHANGE OFFSET JMP SRCI4 * XOR ONM OR NOT SAME GROUP AND O6000 SZA JMP SRCI FORGET SYMBOL * LDA B,I IF A CPA SEZ SEZ, JMP SRCI3 * CPA SLA SLA, JMP SRCI3 * CPA SLB OR SLB JMP SRCI3 THEN STOP SEARCH * SRCI2 LDA PN OK UPDATE CMA,INA STA DNM LDA CMACT ",C" FLAG STA CMAC LDA B,I AND SAVE THE STA SYM THE SYMBOL INB LDA B,I CPB CH CLA STA SYM+R SRCI ISZ CH JMP SRCL * SRCI3 LDA CH SET END TO NEXT POINTER INA STA TYO JMP SRCI2 AND CONTINUE * SRCI4 AND DSMSK IF DOUBLE SHIFT CPA ASL GO ALLOW O17 OFFSET JMP SRCI8 * CPA LSL JMP SRCI8 * CPA RRL JMP SRCI8 * CPA STF IF STF DONT STRIP C BIT JMP SRCI7 * AND O2000 SZA JMP SRCI6 IF NOT IO GROUP * SRCI5 CMA MUST BE EXACT ADA PN SSA,RSS IS IT WITHIN LIMITS JMP SRCI NO FORGET IT * LDA CH40 SET TERMINATOR TO SPACE STA TERM JMP SRCI2 * SRCI6 LDA ONM AND O1000 SET ",C" FLAG STA CMACT IN TEMP VALUE XOR PN REMOVE THE CLEAR FLAG BIT STA PN * SRCI7 LDA O77 JMP SRCI5 * SRCI8 LDA O17 JMP SRCI5 * DSMSK OCT 176760 CMAC OCT 0 CMACT OCT 0 TERM OCT 54 O17 OCT 17 C1000 OCT 100000 HED PRINT ROUTINES * ADRP NOP PRINT ADDRESS IN SYMBOLIC STA ASCP ELA,CLE,ERA GET DIRECT ADDRESS STA ONM LDA STEND USER'S SYMBOL AREA LDB ISEND JSB ADRSP OCT 10 LIMIT OFFSET TO 10 LDA ASCP SSA,RSS INDIRECT? JMP ADRPX NO, DONE. * LDA COMMI JSB TY2 ADRPX LDA CH57 JMP ADRP,I * COMMI ASC 1,,I * ADRSP NOP PRINT SYMBOLIC EXPRESSION JSB SRCST SEARCH PART OF SYMBOL TABLE LDA ONM LDB ADRSP,I ISZ ADRSP STEP RETURN ADB DNM CLOSE ENOUGH? SSB,RSS JMP PSYM YES PRINT ABSOLUTE. * LDB SYMP GET SINGLE SYMBOL STB SYM AND SET CLB IT UP STB SYM+R LDB NUMP SET VALUE STB DNM CPB C1000 IF NOT DEFINED JMP AABS FORGET IT. * PSYM JSB SYMP PRINT BEST SYMBOL LDA DNM SZA,RSS EXACT? JMP PCMAC YES, GO CHECK ",C" * LDA CH53 + LDB ADRSP IF INSTRUCTION CPB DINRT THEN LDA TERM PRINT "," OR " " INSTEAD JSB TYO LDB DNM PRINT DIFFERENCE CMB,INB LDA ADRSP GET RETURN ADDRESS CPA DINRT PRINTING NON ADDRESSABLE INSTR? JMP INONB YES GO RECURE * AABSS STB A NO SET OFFSET IN A * AABS JSB NUMP * PCMAC LDA CMAC IS ",C" REQUIRED SZA,RSS JMP ADRSP,I NO, THEN RETURN * LDA COMMC JSB TY2 CLA CLEAR ",C" FLAG STA CMAC JMP ADRSP,I AND RETURN * CH57 OCT 57 CH53 OCT 53 CH54 OCT 54 DINRT DEF INONC COMMC ASC 1,,C SKP * I N S T P * * PRINT SYMBOLIC INSTRUCTION * * LDA * JSB INSTP * INSTP NOP JSB ADRC MRG INSTRUCTION? JMP INOND NO,SEE IF 2 WORD INSTRUCTION STA DNM SAVE REFERENCED ADDRESS LDA B AND G74 GET OPCODE ALF,RAL TO LOW BITS ADA OPPTR INDEX INTO MRG SYMBOL TABLE LDA A,I FETCH OPTAB ENTRY LDB SRDX JSB PN PRINT IT * INONE LDA CH40 SPACE JSB TYO LDA DNM FETCH ADDRESS JSB ADRP PRINT ADDRESS JMP INSTP,I * INONB LDA ONM SSA IF MAC GROUP JMP AABSS JUST PRINT IT * AND O6000 ISOLATE THE GROUP BIT ADB A ADD IT BACK STB ONM NON-ADDRESSABLE. * INONA LDA CH54 SET TERMINATOR TO "," STA TERM LDA ISEXP POINT TO LDB STTOP TABLE "ISL2" JSB ADRSP SEARCH INSTRUCTION OCT 1777 * INONC JMP INSTP,I * INOND STB ONM SAVE INSTRUCTION JSB GET2 2 WORD INSTRUCTION? JMP INONA NO,NON-ADDRESSABLE * LDB SRDX YES JSB PN PRINT IT LDA TRAC SZA,RSS TRACING? JMP INSTP,I NO,DON'T PRINT ADDRESS * LDA DDOT POINT TO INSRUCTION'S INA ADDRESS PARAMETER LDA A,I GET ADDRESS STA DNM SAVE IT JMP INONE * ISEXP DEF ISL2 O6000 OCT 6000 SKP * TY2 NOP TYPE OUT 2 CHARS, ARG IN AREG STA TY2MP PUT INTO TEMP ALF,ALF GET THE 1ST CHAR JSB TYO LDA TY2MP GET THE 2ND CHAR JSB TYO JMP TY2,I * TY2MP BSS 1 * CRLF NOP LDA O6412 JSB TY2 JMP CRLF,I * SIXSP NOP 6 SPACES JSB PTAB JSB PTAB JMP SIXSP,I * PTAB NOP LDA SPSP JSB TY2 LDA CH40 JSB TYO JMP PTAB,I SPSP ASC 1, * ASCP NOP ASCII PRINT JSB TY2 PRINT TWO CHARS LDA CH42 ADD A " JSB TYO JMP ASCP,I * CH42 OCT 42 * SYMP NOP SYMBOL PRINT LDA SYM LDB SRDX JSB PN LDA SYM+R LDB SRDX SZA JSB PN JMP SYMP,I * NUMP NOP NUMBER PRINT LDB RADIX JSB PN LDA CH56 PRINT . LDB RADIX CPB O12 THESE 4 INSTR STAY TOGETHER ISZ PNCNT ANOTHER CHAR TO PRINT CPB O12 IF DECIMAL. JSB TYO JMP NUMP,I * PTABC NOP RIGHT FILL AFTER NUMP WITH SPACES LDA PNCNT ADA M7 STA PNCNT SSA,RSS JMP PTAB2 PTAB1 ISZ PNCNT RSS JMP PTAB2 LDA CH40 JSB TYO JMP PTAB1 PTAB2 LDA CH40 JSB TYO JMP PTABC,I HED NUMBER AND SYMBOL PRINT * PN NOP A=NUMBER, B=RADIX. STA NUMBR STB PNRDX CMB,INB STB PNRDN CLB SET UP PNCNT STB PNCNT DO > 5 CHARS GET PN'ED? * * ENTER: B= NUMBER. * PDNC STB PNEND LDB NUMBR * PDVD STB PNENT LDA M20 STA CH CLA * PDVL CLE,ELB LONG LEFT SHIFT. ELA ADA PNRDN TRIAL DIVIDE SSA,RSS GOES? INB,RSS YES, BUMP QUOTENT ADA PNRDX NO, RESTORE ISZ CH ROUND AND ROUND... JMP PDVL WE GO. * CPB PNEND QUOTIENT IN B, REM IN A. JMP PDPNT JMP PDVD DIVIDE AGAIN. * PDPNT LDB PNRDX CPB SRDX ADA M1 ADA M12 SSA SKIP IF LETTER ADA M7 NUMBER FIXUP ADA O101 CONVERT TO ASCII CPA O133 PERIOD? LDA CH56 YES. CPA O134 $ ? LDA CH44 YES. CPA O135 % ? LDA CH45 YES. JSB TYO ISZ PNCNT PNCNT IS COUNT OF CHARACTERS PRINTED LDB PNENT CPB NUMBR JMP PN,I JMP PDNC * PNCNT BSS 1 NUMBR BSS 1 PNRDX BSS 1 PNRDN BSS 1 PNEND BSS 1 PNENT BSS 1 M7 OCT -7 M12 OCT -12 O133 OCT 133 O135 OCT 135 CH56 OCT 56 CH44 OCT 44 CH45 OCT 45 SKP TYO NOP LDB OBFPN GET BYTE POINTER SBT PUT BYTE IN BUFFER STB OBFPN RESTORE BYTE POINTER ISZ CCO BUMP CHAR COUNT CPB MAXOP IF BUFFER FULL JSB FLUSH THEN PRINT IT LDB ACCB RESTORE B REG JMP TYO,I * * * FLUSH DUMPS OUTPUT BUFFER * FLUSH NOP LDA CCO GET CHARACTER COUNT SZA,RSS IF ZERO JMP RTN02 THEN EXIT * CMA ELSE MAKE COUNT NEGATIVE STA CCO FOR EXEC * LDB OBFPN LDA O137 APPEND UNDERSCORE(FOR NO CRLF) SBT * JSB EXEC WRITE BUFFER DEF RTN01-1 IN CASE OF EXEC CALL ERROR DEF NAB2 (OCT 2+NO ABORT BIT) DEF LU DEF OBUF DEF CCO * JSB EXERR IN CASE OF EXEC CALL ERROR RTN01 CCA SET FLAG TO IGNOR LF STA LFLAG AT END OF BUFFER * RTN02 CLA CLEAR CHAR COUNT STA CCO LDB OBFAD RESET BUFFER POINTER STB OBFPN JSB BRCHK CHECK FOR BREAK * * IF THERE IS A BREAK, THERE WILL BE NO RETURN TO HERE * JMP FLUSH,I RETURN SKP TTYOP NOP JSB FLUSH FLUSH OUTPUT BUFFER LDB IBFPN GET INPUT BUFFER POINTER ISZ CCI IF ANYTHING IN BUFFER JMP GCHAR THEN GO GET CHAR * ISZ LFLAG ELSE IF NOT FIRST CHAR AFTER JMP GTLF LINE FEED THEN GO GET (LF) * GTBUF JSB REIO ELSE GET NEXT BUFFER DEF RTN03 DEF O1 DEF LUC DEF IBUF DEF IBUFL * RTN03 SZB,RSS IF TLOG=0 GO GET LF JMP GTLF * CMB,INB SET CHAR COUNT FROM STB CCI TRANSMISSION LOG LDB IBFAD GET START OF BUFFER * GCHAR LBT FETCH CHAR AND O177 STRIP PARITY BIT STB IBFPN RESTORE POINTER JMP TTYOP,I AND RETURN * GTLF CCA RESET CHAR COUNT STA CCI CPA IBUFL IF HONEST THEN GO GET BUFFER JMP GTBUF * LDA O12 GET LINE FEED JMP TTYOP,I RETURN * IBFPN DBL IBUF IBFAD DBL IBUF CCI DEC -1 LFLAG DEC -1 IBUFL DEC -1 O137 OCT 137 CCO DEC 0 OBFPN DBL OBUF OBFAD DBL OBUF MAXOP DBL OBUFE LUC BSS 1 IBUF BSS 40 OBUF BSS 35 OBUFE BSS 1 NAB1 OCT 100001 1+NO ABORT BIT NAB2 OCT 100002 2+NO ABORT BIT NAB15 OCT 100015 15+NO ABORT BIT SKP OPTAB OCT 115002 NOP - 0 OCT 3 OCT 44216 AND - 10 OCT 100624 JSB - 14 OCT 154204 XOR - 20 OCT 100262 JMP - 24 OCT 75304 IOR - 30 OCT 75554 ISZ - 34 OCT 43373 ADA - 40 OCT 43374 ADB - 44 OCT 52533 CPA - 50 OCT 52534 CPB - 54 OCT 105673 LDA - 60 OCT 105674 LDB - 64 OCT 134773 STA - 70 OCT 134774 STB - 74 OCT 0 DUMMY ADDRESS FOR LOADR SKP M1 OCT -1 M6 OCT -6 O1 OCT 1 O12 OCT 12 O77 OCT 77 O101 OCT 101 "A" EQU O101 O134 OCT 134 O177 OCT 177 O400 OCT 400 TRAC NOP TRACING FLAG WRD NOP LL NOP UL NOP CH NOP CHI NOP SYMXI DEF SYM SYMX NOP SYM OCT 0,0 ONM NOP DNM NOP CHC NOP ALTMI NOP LFLG NOP LIMBO EQU SYMXI IADR NOP RADIX OCT 10 PM DEF INSTP ISEND DEF ISL LOCP DEF LOC STED DEF STEND OPPTR DEF OPTAB * ADRPP DEF ADRP MASTER MODE TABLE - MODE INSPP DEF INSTP IS SET BY INDEXING INTO NUMPP DEF NUMP THIS TABLE AND PICKING ASCPP DEF ASCP UP POINTER FOR DISPATCHING * SKP DEBOP DEF *+1 FIRST WORD WICH CAN BE MODIFIED * CEND OCT 77777 DO NOT MOVE DEF END THESE VALUES!!!!!!!!!!!!!!!!!! LTRAP DEF $TRAP ADDRESS OF BP POINTER TO "TRAP" STEND DEF ISL0 "F" BRFLG OCT 0 BREAK FLAG, SEE BRCHK LU OCT 400 LU FOR WRITING ACCA NOP A-REGISTER ACCB NOP B-REGISTER ACCX NOP X-REGISTER ACCY NOP Y-REGISTER FLGBX NOP O,E, AND INTERRUPT STATUS MSK OCT 177777 "M" BVAL NOP "M+5" BREAKPOINT COMPARE VALUE BADD NOP "M+7" REG OR MEMORY TO BE TESTED BMSK OCT 177777 "M+6" BREAKPOINT MASK SKP SZA "M+8" SENSE OF TEST SZA =,SZA,RSS /= BPADR DEF SYM BP ADDRESS 2 ORB PLANT A DEF ON THE BASE PAGE $TRAP DEF TRAP0 ADDRESS OF TRAP FOR JSB ORR ONLY NEED ONE WORD * * END DBUGR