ASMB,L,R,C * * NAME: DBUGR * SOURCE: 92070-18133 * RELOC: 92070-16133 * PGMR: B.S.,G.A.,D.D.,D.S.,J.N.,D.W. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 DBUGR(USER VERSION) NAM DBUGR,7 92070-1X133 REV.1941 790913 ENT DBUGR,.DBUG,.SDBG EXT EXEC,$LIBX,$LIBR,IFBRK,LOGLU,$HIGH,$TMP1 EXT $ROM,$MPFN,SAVST,.SBT 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 18 SYMBOL TABLE FREE AREA 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 SKP DOUBL EQU * OCT 111763,0,100200 MPY OCT 55230,0,100400 DIV OCT 55376,0,104200 DLD OCT 56046,0,104400 DST STTP EQU * SKP * DSPTB DEF PLUS SPACE DEF EXCL ! DEF ASCIN " DEF ERR # DEF ERR $ DEF ERR % DEF ERR & DEF ASO ' DEF ERR ( DEF ERR ) DEF ERR * DEF PLUS + CMADD DEF COMMA , DEF MINUS - DEF DOT . DEF BAR / 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) BSS 1 NOT USED FOR DISPATCHING (ASCII # 6) BSS 1 NOT USED FOR DISPATCHING (ASCII # 7) BSS 1 NOT USED FOR DISPATCHING (ASCII # 8) BSS 1 NOT USED FOR DISPATCHING (ASCII # 9) DEF COLON : DEF SEMI ; DEF ERR < DEF EQLS = DEF ERR > DEF ERR ? DEF ERR @ DEF AT A DEF BRK B DEF CT C DEF ERR D DEF ERR E DEF ERR F DEF GO G DEF HT H DEF ERR I DEF ERR J DEF ERR K DEF ERR L DEF ERR M DEF ERR N DEF ERR O DEF PROC P DEF ERR Q DEF RSET R DEF ST S DEF TRACE T DEF ECSL U DEF ERR V DEF ERR W DEF XEC X DEF ERR Y DEF ERR Z DEF SBRK [ DEF ALT \ ERRX DEF ERR ] DEF UPARW ^ DEF LARR _ HED DBUG INITIALIZATION * * PNT10 DEF MSG01 MSG01 OCT 6412 CR/LF ASC 6,START DBUGR OCT 6412 CR LF ASC 1,// * .DBUG NOP WHERE LOADER WILL PLACE TRUE RETURN. $DDT NOP EVERYONE'S ENTRY POINT DBUGR EQU $DDT JSB SVST NOMINAL ENTRY POINT JSB SAVST SAVE ANY RUN STRING DEF *+1 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 O2500 MAKE HONEST MODE STA LU SAVE AS THE LU AND O77 IOR O4420 STA CLU JSB EXEC GET TYPE CODE DEF TSTRT DEF O15 (DEC 13) DEF LU PCH DEF CH TEMP TSTRT LDA PCH,I GET EQT WORD 5 AND C374 KEEP TYPE STA TMODE SET MODE (0= '\' #0= '\\' LDB PNT10 PRINT 'START JSB OUTMS DBUGR' MESSAGE. JMP LSE O2500 OCT 2500 O4420 OCT 44200 O77 OCT 77 LU OCT 2501 DEFAULT LU CLU OCT 44201 * 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 HED DBUG - CHARACTER DISPATCH * * LSE RSS CLEARED ON FIRST ENTRY JMP LSE1 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 $ROM SET DM BOUNDS STA CEND SET END OF MEMORY INA STA AUPBD,I SAVE A LINK! CMA,INA STA AMUPB,I AND HERE TOO! * LSE1 JSB CRLF LSF2 CLA FROM TABP. STA TRAC CLEAR TRACE COUNT STA LSE CLEAR FIRST TIME RSS STA $DDT CLEAR JSB ENTRY POINT. * 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 LSR0 EQU * STA ASCI SKP * LSR EQU * JSB TTYOP STA CH CPA X177 DELETE CHARACTER ? JMP DEL LDB LFP CPA O12 LINE FEED CHARACTER ? JMP LFCRT LDB CRP CPA O15 CARRIAGE RETURN ? JMP LFCRT LDB CH ADB DSPP LDB B,I ADA M40 SSA LDB ERRX 0-37, ERROR UNLESS... LDA CH CPA O33 ESCAPE CHARACTER ? 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 AUPBD DEF UPBD AMUPB DEF MUPBD ASCI NOP CHI NOP M40 OCT -40 M41 OCT -41 SYMXI DEF SYM SYMX NOP SYM OCT 0,0 M72 OCT -72 O3 OCT 3 X177 OCT 177 O32 OCT 32 CRP DEF CR CAD DEF PLUS DSYMX DEF SYMX,I CONFIGURED ON 1ST ENTRY DSPP DEF DSPTB-40B INSTR NOP LETF NOP LFP DEF LF SGN NOP 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 CH125 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 LDA JSBII ISZ A DELAY TO LET... JMP *-1 C. R. COMPLETE. * 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 CH54 OCT 5254 SSB=RBL,SLB JMP PN,I NO-EVAL, DISPATCH NOW. CPA LETF IF NO LETTERS, JMP LSCI ANY OPERAND IS NUMERIC. LDB SYM+R SZB JMP NOTOP SKP 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 * 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. M6 OCT -6 C3007 OCT 3007 SKP * B U M P * * UPDATES CURRENT NUMERIC ENTRY * * 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 2130 * 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. * ASCIN LDA ASCI ASCII INPUT CLB STB ALTMI ISZ CHI JMP LSQ * * COLON LDA LOCP,I DEFINE SYMBOL AS LOCATION 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 SZA CLA,RSS CCA STA TMODE JMP OTST * TMODE NOP INITIAL SET FOR NON '\' GRABBER ALTMI NOP ALTERNATE MODE FLAG * END OF ESSENTIAL NO-EVALS. * HED MISCELLANEOUS OPERATORS * * HT INA CT INA ST INA AT ADA STPPP LDA A,I USED AS CONSTANT STA PM SET MODE JMP OTST * * LNEV DEF * END OF NO-EVALS. STPPP DEF ADRPP LINK TO MASTER MODE TABLE 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 * MINUS CMA,INA PLUS ADA WRD JMP WSET * WRD NOP * 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 SSB SKIP UNLESS SIGN OP JMP SSN SET SIGN FOR NEXT TIME. * LDA INSTR CHECK FOR PAGE ERROR 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 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. * * RSET LDB A SET RADIX ADA M2 CH120 CLE,SSA JMP ERR ADA M40 SSA,RSS JMP ERR STB ARDIX,I JMP LSE ARDIX DEF RADIX SAVE A LINK ! 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 LDA LWT JSB PN,I JMP TABP * SEMI JSB PM,I PRINT IN CURRENT MODE (EXPM => PM) JMP TABP * * BAR LDB PM USE CURRENT MODE (EXPM => PM) 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. JMP TA5 * TA3 STA TAS JSB CRLF LDA TAS TA4 ELA,CLE,ERA PURGE INDIRECT BIT STA TAS JSB ADRP PRINT ADDRESS JSB TYO PRINT / LDB PM 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 JMP LSF2 * UPARW JSB STORE CCA ADA LOCP,I DECREMENT LOCATION COUNTER JMP TA3 * LOCP DEF LOC PM DEF INSTP LF JSB STORE CLA,INA NEXT LOCATION ADA LOCP,I JMP TA4 SPACE OCT 40 XADR NOP 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 "A" OCT 101 "/" OCT 57 "CR" EQU O15 O5 OCT 05 O134 OCT 134 * HED NUMBER AND SYMBOL PRINT * G E T N M * * TAKES OPERATOR NUMERICAL INPUT * * LDA * JSB GETNM * P+1 * P+2 * GETNM NOP JSB NUMP DISPLAY OLD VALUE JSB PTAB 3 SPACES 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 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 NMFLG BSS 1 O6 OCT 6 POS OCT 53 NEG OCT 55 SKP * STORE NOP SZB,RSS ANYTHING TYPED? JMP STORX NO, RETURN. * LDB CLEFG WAS CLE FLAG SET SZB,RSS JMP STORW NO JUST GO STORE IT LDB A AND O2000 YES,WHICH GROUP SZA ADA O40 SRG CLE=2100B ADA O40 ASG CLE=40B IOR B AND MERGE WITH INSTRUCTION * STORW 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 STB TAS LDA TEMP3 RESTORE VALUE LDB ACCB RESTORE B STA TAS,I STB ACCB * 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 TEMP3 BSS 1 O1 OCT 1 O40 OCT 40 HED BREAKPOINT * BRK SZB USER ENTER ADDRESS? JMP BRK1 YES,SEE IF VALID FOR BREAKPOINT LDA LIMBO NO,USE CURRENT ADDRESS BRK2 STA BPADR SET BREAKPOINT ADDRESS JMP LSE BRK1 STA TEMP4 SAVE ADDRESS JSB MPCHK CHECK FOR MEMORY PROTECT JMP MPMSG GO PRINT ERROR STA IADR JSB ADCHK CHECK FOR DBUGR OVERLAP LDA A,I GET INSTRUCTION JSB AHEAD NO,VALID FOR BREAKPOINT? JMP PR9 NO,DON'T ALLOW IT LDA TEMP4 YES,RESTORE ADDRESS JMP BRK2 * TEMP4 BSS 1 * TRAP NOP * STA ACCA SAVE A * LDA BADD,I GET VALUE TO BE TESTED * XOR BVAL TEST VALUE * AND BMSK MASK VALUE *SZSKP RSS * JMP BIXI * LDA ACCA ISZ CHC PROCEED COUNT JMP BIX JSB SVST CCA ADA TRAP JSB BRKMS GO DO BREAK MESSAGE JSB PTAB JMP LSF2 *BIXI LDA ACCA * JMP BIX 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. * * THE MESSAGE 'SEGMENT BREAK' IS PRINTED AND A PSUEDO BREAKPOINT * OCCURS AT THE SEGMENT'S ENTRY POINT ADDRESS. IF * THE CURRENT TRUE BREAKPOINT IS WITHIN THE OLD SEGMENT(E.G., ABOVE * THE MAIN'S LAST WORD), THEN THE MESSAGE 'BREAKPOINT REMOVED' IS * ALSO ISSUED. FINALLY, DBUGR CONTINUES AND GETS THE NEXT * DEBUG COMMAND. * * WHEN A PROCEED COMMAND OCCURS, DBUGR WILL CONTINUE AT THE ENTRY * POINT OF THE SEGMENT. * ************************************************************************ * .SDBG NOP * JSB SVST SAVE STATUS OF SYSTEM. * LDA ACCA LDB SNAME DESTINATION ADDRESS STB TEMP MOVE BYTES LDB A,I STB TEMP,I INA ISZ TEMP LDB A,I STB TEMP,I INA ISZ TEMP LDA A,I AND LCHAR IOR BLNK2 SET A BLANK INTO THE SIXTH CHARACTER STA TEMP,I * LDA .SDBG,I STA DDOT SAVE RETURN ADDRESS STA TRAP LDB $HIGH,I COMPUTE ADDRESS CMB,INB ABOVE END OF MAIN PROGRAM-- ADB BPADR E.G., WITHIN THE OLD SEGMENT. SSB IF OLD BREAKPOINT IS WITHIN JMP SDBG1 LDB BPADR IF BP IN SEGMENT LDA LIMBO THEN MUST REMOVE STA BPADR LDA OLDBK AND FIX WIPED OUT INSTRUCTION STA B,I * SDBG1 STB SDTMP SAVE OLD BPADR JSB CMWN IS IT THIS SEGMENT ? RSS JMP SDBG4 * LDA SBNM1 LDB SDTMP FETCH OLD BPADR SSB IF BP NOT IN SEGMENT OR CPA N1 DONT STOP FOR ALL SEGMENTS RSS JMP SDBG6 THEN CONTINUE CCA SET SEGMENT BREAK FLAG STA SBFLG * SDBG3 LDA DDOT JSB BRKMS PRINT BREAK MESSAGE JSB CRLF * LDA SDTMP WAS BREAKPOINT REMOVED SSA JMP LSE NO,GO GET NEXT COMMAND JSB ADRP YES,PRINT 'S+XXXXX LDB PNOBK BREAKPOINT REMOVED!' JSB OUTMS JMP LSE AND GET NEXT COMMAND * LIMBO EQU SYMXI TEMP BSS 1 TEMPORARY STORAGE BLNK2 OCT 40 LCHAR OCT 77400 N1 DEC -1 SDBG4 CCA SET SEGMENT BREAK FLAG STA SBFLG LDA SGA IS THIS A SEGMENT BREAK SZA,RSS JMP SDBG5 YES GO BREAK * LDA SGA,I NO,IS BREAKPOINT LEGAL JSB AHEAD JMP SDBG5 NO ,GO BREAK LDA SGA YES,SET AND LDB BPADR STB SDTMP SET FOR BP REMOVED MESSAGE STA BPADR CPB LIMBO IF SAME AS PREVIOUSLY RSS SET THEN CONTINUE JMP SDBG3 ELSE BREAK SDBG6 JSB RSST RESTORE STATUS JMP TRAP,I * SDBG5 CCA CLEAR BREAKPOINT REMOVED FLAG STA SDTMP JMP SDBG3 GO PRINT SEGMENT BREAK 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 SDTMP BSS 1 OLDBK BSS 1 * SNAME DEF SNAM1 PSGMS DEF SGMSG SGMSG OCT 6412 CR/LF. ASC 4,SEGMENT SNAM1 ASC 3, ASC 3,BREAK OCT 6412 CR/LF. ASC 1,// * PNOBK DEF NOBKM NOBKM ASC 12, BREAKPOINT REMOVED! OCT 6412 CR/LF. ASC 1,// * CMWN NOP COMPARE SEGMENT NAME TO CURRENT NAME LDA SNAM1 CPA SBNM1 RSS JMP CMWN,I LDA SNAM1+1 CPA SBNM1+1 RSS JMP CMWN,I LDA SNAM1+2 CPA SBNM1+2 ISZ CMWN JMP CMWN,I * 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 COMPUTE BYTE ADDRESS RBL STB BYADD LDB BLKBL FILL WITH BLANKS STB SBNM1 STB SBNM1+1 STB SBNM1+2 * LDA M5 SET CHAR COUNT STA SDTMP SBRK1 JSB SBRK6 READ CHAR CPA "]" CHECK FOR END JMP SBRK3 LDB BYADD STORE CHAR JSB .SBT ISZ BYADD ISZ SDTMP NAME COMPLETE JMP SBRK1 NO CONTINUE * SBRK2 JSB SBRK6 IGNOR ALL EXCEPT "]" CPA "]" RSS JMP SBRK2 SBRK3 JSB SBRK6 NOW LOOK FOR ESCAPE,\ OR ^ CPA O176 LDA O33 CPA O33 JSB SBRK5 GO SEND BACKSLASH CPA O134 RSS JMP ERR IF NONE OF ABOVE THEN ERROR JSB SBRK6 NOW LOOK FOR "B" CPA "B" RSS JMP ERR * * NOW WE HAVE GOOD COMMAND * LDA SBNM1 IF NO NAME ASSUME "0" CPA BLKBL RSS CPA ""N" FIX FIRST WORD FOR ALL CLA CPA ""A" OR NONE CCA STA SBNM1 * JSB CMWN COMPARE SEGMENT NAME AND CURRENT NAME RSS JMP SBRK4 GO TO NORMAL BREAK LDB SGB WAS ADDRESS SUPPLIED SZB,RSS STB SGA NO,SET ADDRESS TO ZERO FOR JMP LSE SEGMENT BREAK THEN GO GET * NEXT COMMAND * SBRK4 LDA SGA RESTORE A & B LDB SGB JMP BRK AND GO TO NORMAL BREAK * SBRK5 NOP LDA O134 BACKSLASH JSB TYO ECHO LDA O134 LDB AMODE,I IF SET FOR ESC GOBBLER SZB JSB TYO SEND SECOND BACKSLASH ISZ SBRK5 ADJUST RETURN JMP SBRK5,I M5 OCT -5 ""N" ASC 1,"N O176 OCT 176 AMODE DEF TMODE SAVE A LINK ! * SBRK6 NOP READS CHAR AND CHECKS FOR RUBOUT JSB TTYOP CPA RUB JMP ADEL,I JMP SBRK6,I RUB OCT 177 ADEL DEF DEL SAVE A LINK! * ""A" ASC 1,"A SKP * PROC SZB,RSS CLA,INA $P=$1P CMA,INA STA CHC SET PROCEED COUNT LDB DDOT POINT BACK TO STB TRAP LAST ADDRESS LDB BPADR GET THE TRAP ADDRESS CPB TRAP IF RETURNING TO TRAP JMP PR3 SKIP TEST FOR (PR01 => PR3) INA,SZA PROCEED COUNT JMP ERR MUST BE 1 FIRST TIME LDA ALTMI IF SINGLE ESCAPE CPA O1 JMP PRNA OK TO CONTINUE JMP ERR PR3 ISZ TRAP STEP OVER THE INTERPRETED INSTRUCTION LDB BKIA STB IADR FOR ADRC LDA BIX02 RESTORE JMP IN CASE STA BIX01 2 WORD INSTRUCTION LDA BKIA,I FETCH BROKEN INSTRUCTION JSB AHEAD VALID INSTRUCTION FOR EXECUTION JMP PR5 NO,BACK UP PR1 JSB ADRC CALCULATE REAL ADDRESS JMP MAC NOT ADDRESSABLE: GO TEST FOR MAC GROUP PR0 STA SYMX ACTUAL ADDRESS LDA B RETRIEVE INSTRUCTION AND G74 GET OPCODE CPA G24 IF JMP INSTRUCTION GO JMP TRJMP TEST FOR TRACING CPA JSBI JSB INSTRUCTION? CCB,RSS YES. FAKE IT. JMPI JMP PR2 NOT JSB. LDA SYMX GO GET THE DIRECT ADDRESS JSB DIRA STA OPADD SAVE ADDRESS FOR RETURN CLB,INB CACULATE THE RETURN ADDRESS ADB BKIA STB RTADD SAVE RETURN ADDRESS STB A,I FAKE RETURN ADDRESS INA YES STEP BY ONE TO GET JMP TARGET STA OPADD+1 SAVE TARGET ADDRESS FOR JMP LDB TRAC TRACING? SZB,RSS LDA JSBXQ NO CANGE EFFECTIVE ADDRESS LDB JMPI GET JMP INSTRUCTION JMP PR0 GO SET IT UP PR5 LDA RDWD GET TRACE ADDRESS CPA XE1C EXECUTE MODE? LDA PAC YES STA BKIA RESTORE THE STA IADR ADDRESS JSB CRLF CR LF LDA IADR JSB BRKMS BREAK MESSAGE SKP PR9 JSB PTAB 3 SPACES LDA CH111 I JSB TYO LDA "N" N JSB TYO JMP ERR PR2 IOR DSYMX USING SAVED ADDRESS STA BIX STORE INSTRUCTION PR4 JSB CRLF JSB RSST RESTORE STATUS BIX STA SYMX,I USED TO GET ADDRESS OF SYMX,I BIX01 JMP TRAP,I RETURN TO INTERRUPTED CODE ISZ TRAP INSTRUCTION PERFORMED SKIP BIX02 JMP TRAP,I "N" OCT 116 CHC NOP G24 OCT 24000 BKI NOP HOLDS BROKEN INSTRUCTION BKIA DEF SYM ADDRESS OF BROKEN INSTRUCTION JSBI JSB 0 JSBII JSB 0,I * PRNA CPB LIMBO GIVING UP CONTROL? JSB BYE YES, PRINT END MESSAGE JSB CRLF CONTINE JSB RSST JMP DDOT,I * * JSB EXECUTE * JSBXQ DEF *+1 STA ACCA SAVE A REG LDA RTADD STA OPADD,I SET RETURN ADDRESS LDA ACCA RESTORE A REG JMP OPADD+1,I AND EXECUTE JMP * OPADD BSS 2 RTADD BSS 1 SKP * * RESTORE STATUS ROUTINE * RSST NOP LDA BPADR,I SAVE BREAK INSTRUCTION STA BKI LDA LTRAP GET THE TRAP JSB IOR JSBII STA BPADR,I PLANT TRAP * LDB DIDTP RESTORE PROGRAM'S TEMP WORDS STB CRLF TO ITS ID SEGMENT. LDB N5 STB COUNT JSB $LIBR NEED TO GO PRIVILEGED NOP TO DO THIS RESTORE. LDB $TMP1 PR10 LDA CRLF,I RESTORE ID STA B,I SEGMENT ISZ CRLF WORDS 1 INB TO 5. ISZ COUNT JMP PR10 JSB $LIBX LET'S GO DEF *+1 UNPRIVILEGED. DEF *+1 * LDB ACCB RESTORE LDA FLGBX CLF 1 CLEAR OFLOW O33 SLA,RAR STF 1 TURN IT ON ERA RESTORE E-BIT LDA ACCA JMP RSST,I CH111 OCT 1511 N5 DEC -5 SKP * MAC STA BIX SET INSTRUCTION AND M1100 =B176700 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 S.C. MAC00 LDA BIX ELSE RESTORE A WITH BIX JSB GET2 TWO WORD INSTRUCTION? JMP PR4 NO, GO SET UP INSTRUCTION LDA BKIA YES, SET ADDRESS INA STEP TO MAC ADDRESS RAL,ERA OF SECOND WORD STA BIX01 FOR BIX JMP PR4 GO DO SETUP * IO LDA BIX GET INSTUCTION AND X77 CPA O1 IF S.C. = 1 JMP MAC00 THEN OK JMP MPMS ELSE GO PRINT MP MESSAGE * M1100 OCT 176700 M6000 OCT 172000 X77 OCT 77 SKP * XEC SZB,RSS "EXECUTE" COMMAND JMP ERR LDB TRAP SAVE TRAP INFORMATION STB PAC INCASE WE ARE IN LDB BKIA A BREAK STB ADCK LDB XE1C STB BKIA IF JSB, RETURN TO XE1. STB TRAP OTHERS RETURN TO XE1 JSB AHEAD VALID INSTRUCTION FOR EXECUTION? JMP PR9 NO STA TEMP2 YES,SAVE INSTRUCTION JSB GET2 TWO WORD INSTRUCTION ? RSS NO JMP PR9 YES, NOT ALLOWED LDA TEMP2 RESTORE INSTRUCTION JMP XE2 EXECUTE AT BIX * GO SZB,RSS JMP ERR STA TRAP SET ADDRESS LDA BIX02 RESTORE JMP IN CASE STA BIX01 2 WORD INSTRUCTION CLA MAKE A NO-OP XE2 CCB STB CHC PROCEED COUNT=1 JMP PR1 * XE1C DEF XE1 XE1 JMP XE3 NOT SKIP JSB SVST SKIP JSB CRLF RSS * XE3 JSB SVST LDA PAC RESTORE BREAK STA TRAP LDA ADCK CONDITIONS STA BKIA JMP LSE PAC BSS 1 HED BREAKPOINT AND TRACE ROUTINES * G E T 2 * * SEARCHES DOUBLE WORD INSTRUCTION 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 LDA B,I GET SQOZE CODE ISZ GET2 ADJUST RETURN JMP GET2,I DSTOP DEF STTP LINK TO END OF 2 WORD INSTRUCTION SECTION PNT07 DEF DOUBL LINK TO 2 WORD INSTRUCTION SECTION SKP * 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 ADRCX XOR B JMP ADRC,I * * A H E A D * * 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 JMP AHEAD,I * AHE02 LDA TEMP1 RESTORE INTRUCTION ISZ AHEAD ADJUST RETURN JMP AHEAD,I TEMP1 BSS 1 TEMP2 BSS 1 SKP * BRKMS NOP PRINT BREAK MESSAGE STA DDOT SAVE THE TRAP ADDRESS 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 NUMP JSB PTAB MORE SPACES LDA ACCB B REG. JSB NUMP 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 STB TEMP6 SAVE B LDB SBNM1 IS SEGMENT BREAK SET SZB JMP BYE1 YES,DONT PRINT MESSAGE LDB PNT11 ISSUE 'END DBUG' JSB OUTMS MESSAGE. BYE1 LDA TEMP5 RESTORE A LDB TEMP6 RESTORE B 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. O177 OCT 177 SKP * SKP * MPCHK NOP MEMORY PROTECT & DM CHECK JSB DMCHK GO RESOLVE INDIRECTS LDB $MPFN 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 * DIRA NOP DIRECT ADDRESS TRACK DOWN JSB MPCHK RSS MP ERROR JMP DIRA,I OK RETURN MPMS CCA BACK OUT THE INTERPIT STEP ADA TRAP RESTORE CONDITIONS CPA TRTN TRACING LDA RDWD YES GET TRACE ADDRESS CPA XE1C EXECUTE INSRT? LDA PAC YES RESTORE STA BKIA RESTORE THE ADDRESS STA IADR JSB CRLF RETURN THE CARRAGE LDA IADR JSB BRKMS SEND A BREAK MESSAGE JSB PTAB SEPERATE 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 SKP * SVST NOP STB ACCB STA ACCA CLA ELA,RAL SAVE E-BIT. SOC OVERFLOW ON? INA YES. STA FLGBX LDA BPADR,I SAVE IN CASE OF SEGMENT LOAD STA OLDBK AND MAY WIPE GOOD INSTRUCTION LDA BKI STA BPADR,I RESTORE BROKEN INSTRUCTION LDA BPADR STA BKIA WHERE BROKEN INSTRUCTION WAS STA IADR FOR PRINT LDA BIXS RESTORE THE DOUBLE WORD INSTRUCTION SZA IF NOT SET UP SKIP STA BIX01 LDA BIX01 SET UP STA BIXS * LDB DIDTP SAVE PROGRAM'S TEMP WORDS STB CRLF FROM ITS ID SEGMENT. LDB N5 STB COUNT LDB $TMP1 SVST5 LDA B,I SAVE ID STA CRLF,I SEGMENT'S ISZ CRLF WORDS 1 INB TO 5. ISZ COUNT JMP SVST5 JMP SVST,I DONE! ACCA NOP ACCB NOP BIXS NOP HOLDS COPY OF 2ND WORD BEFORE RETURN DIDTP DEF IDTMP POINTER TO BUFFER FOR SAVING IDTMP BSS 5 ID SEGMENT'S TEMP WORDS. COUNT BSS 1 IADR NOP HED TRACE ROUTINE TRACE SZB,RSS MAKE A ZERO CLA,INA INTO A 1 CMA,INA SET NEG FOR STA TRAC COUNT AND SET TRNX LDA DDOT STA IADR JSB ADCHK CHECK FOR DBUGR OVERLAP STA RDWD SAVE TRAP LOCATION STA BKIA SET FOR PROCEED LDA TRTN SET RETURN ADDRESS STA TRAP CCA SET PROCEED COUNT FOR STA CHC POSSIBLE JSB TEST JMP PR3 GO EXECUTE THE INSTRUCTION TRTN DEF * RETURN DEFINATION RSS NO SKIP ISZ RDWD SKIP STEP THE ADDRESS ISZ RDWD TWO TIMES IF SKIP JSB SVST SAVE THE STATE LDA RDWD GET THE NEW ADDRESS TRMS STA BKIA RESTORE CONDITIONS STA IADR SET ADDRESS FOR PRINT JSB BRKMS WRITE THE BREAK MESSAGE ISZ TRAC END OF TRACE? JMP TRNX NO CONTINUE JSB PTAB 3 SPACES JMP LSF2 YES GO GET NEXT COMMAND. * TRAC NOP TRACING FLAG TRJMP LDB TRAC TRACING? SZB,RSS JMP PR2 NO GO SET UP JSB CRLF SEND CARRAGE RETURN LINEFEED LDA SYMX YES JUST UP DATE JSB DIRA THE ADDRESS (MAKE DIRECT) JMP TRMS GO SET AND PRINT SKP * * 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 "M" OCT 115 M20 OCT -20 DMCNT BSS 1 * DMCK3 LDA "I" JSB TYO PRINT "I?" JMP ERR * * DMCK4 JSB NUMP PRINT DM? ERROR JSB PTAB SEPARATE "DM?" LDA "D" JSB TYO TYPE "DM?" LDA "M" JSB TYO JMP ERR * "D" OCT 104 MUPBD BSS 1 NEGATIVE OF UPPER BOUND UPBD BSS 1 POSITIVE BOUND * SKP * ADCK NOP CHECK FOR DEBUG OVERLAP STA PN SAVE AC LDA IADR CMA,INA ADA CEND CH56 OCT 1256 SSA=RAL,SLA. CLEARS E JMP SOXA DONE, GO RESET LDA IADR CH40 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 IN 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 CH53 OCT 1053 RSS=ALS,SLA JMP ADCHK,I JSB PTAB 3 SPACES LDA "T" JSB TYO T JMP BADP "T" OCT 124 SOXA LDA LOCP,I STA IADR JSB LSE RDWD NOP READ A WORD RDCH NOP READ A CHARACTER 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 M1 OCT -1 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 * M60 OCT -60 CLEFD STB CLEFG SET CLE FLAG CLA SET VALUE TO ZERO JMP EVS,I * CMFLG OCT 0 CLEFG OCT 0 *ISL3I DEF ISL3 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 CH45 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 CH44 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 X77 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 O1000 OCT 1000 CH NOP ISEND DEF ISL 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 CH54 , JSB TYO LDA CH111 I JSB TYO ADRPX LDA CH57 JMP ADRP,I * CH57 OCT 5257 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 CH54 JSB TYO PRINT ",C" LDA CH103 JSB TYO CLA CLEAR ",C" FLAG STA CMAC JMP ADRSP,I AND RETURN CH103 OCT 103 DINRT DEF INONC 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 JMP INONA NO,NON-ADDRESSABLE ISEXP DEF ISL2 O6000 OCT 6000 X15 OCT 15 O12 OCT 12 OPPTR DEF OPTAB ONM NOP DNM NOP SKP * ENDT EQU * CRLF NOP LDA X15 JSB TYO LDA O12 JSB TYO JMP CRLF,I * END1 BSS 0 PTAB NOP LDA CH40 SPACE JSB TYO LDA CH40 JSB TYO LDA CH40 JSB TYO JMP PTAB,I * ASCP NOP ASCII PRINT STA SYMP ALF,ALF JSB TYO LDA SYMP JSB TYO LDA CH42 ADD A " JSB TYO JMP ASCP,I * CH42 OCT 6042 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 IF DECIMAL. JSB TYO JMP NUMP,I RADIX OCT 10 HED NUMBER AND SYMBOL PRINT * PN NOP A=NUMBER, B=RADIX. STA DEFS STB RDWD CMB,INB STB RDCH CLB ENTER: B = NUMBER. PDNC STB ENDT LDB DEFS PDVD STB END1 LDA M20 STA CH CLA PDVL CLE,ELB LONG LEFT SHIFT. ELA ADA RDCH TRIAL DIVIDE SSA,RSS GOES? INB,RSS YES, BUMP QUOTENT ADA RDWD NO, RESTORE ISZ CH ROUND AND ROUND... JMP PDVL WE GO. CPB ENDT QUOTIENT IN B, REM IN A. JMP PDPNT JMP PDVD DIVIDE AGAIN. PDPNT LDB RDWD 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 LDB END1 CPB DEFS JMP PN,I JMP PDNC O101 OCT 101 M7 OCT -7 M12 OCT -12 O133 OCT 133 O135 OCT 135 SKP TYO NOP AND O177 ISOLATE THE CHARACTER STA TTYOP SAVE CHAR. TO BE OUTPUT LDB CCO GET CURRENT CHARACTER COUNT CLE,ERB ADJUST TO WORD OFFSET ADB DBF ADD THE BUFFER ADDRESS SEZ,RSS IF HIGH CHAR. ALF,SLA,ALF ROTATE AND SKIP IOR B,I ELSE ADD IN THE HIGH FORM LAST TIME STA B,I SAVE THE CHAR ISZ CCO STEP THE COUNT LDB TTYOP IF LINE FEED CPB O12 JSB FLUSH FLUSH THE BUFFER LDB CCO IF BUFFER FULL CPB MAXBF THEN JSB FLUSH FLUSH IT LDB ACCB SET B REG FOR RETURN JMP TYO,I RETURN * O2 OCT 2 * FLUSH NOP JSB IFBRK CHECK FOR BREAK DEF *+1 SZA IF ONE JMP LSE TERMINATE CURRENT OP LDA CCO GET COUNT CMA,INA,SZA,RSS IF ZERO JMP FLUSH,I EXIT STA CCO SET CHARACTER COUNT JSB EXEC WRITE THE LINE ON THE TTY DEF RTN01 DEF O2 DEF LU HONEST MODE BINARY DBF DEF BF DEF CCO RTN01 CLA CLEAR THE CHAR. STA CCO COUNT JMP FLUSH,I RETURN SKP * TTYOP NOP JSB FLUSH FLUSH ANY PENDING OUTPUT JSB EXEC GET ONE CHAR DEF RTN02 DEF O3 FROM SYS TY DEF CLU CONTROL REQUEST FOR ONE CHARACTER READ RTN02 STB BF PUT CHAR LDA B AND O177 JMP TTYOP,I * BF NOP BSS 35 MAX BUFFER IS 72 CHAR MAXBF ABS *-BF+*-BF CCO NOP HED CONSTANTS,POINTERS,TABLES & VARIABLES 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 * 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 ISL "F" OCT 177777 "M" FLGBX NOP "M+1" O,E AND INTERRUPT STATUS BPADR DEF SYM "M+2" BP ADDRESS 2 NOP "M+3" CONTENTS OF X REGISTER NOP "M+4" CONTENTS OF Y REGISTER BVAL NOP "M+5" BREAKPOINT COMPARE VALUE OCT 177777 "M+6" BREAKPOINT MASK NOP "M+7" REG OR MEMORY TO BE TESTED SZA "M+8" SENSE OF TEST SZA =,SZA,RSS /= ORB PLANT A DEF ON THE BASE PAGE $TRAP DEF TRAP ADDRESS OF TRAP FOR JSB ORR ONLY NEED ONE WORD * * END DBUGR