IMD 1.16: 1/09/2008 11:43:04 84-93280-01 a000 f28001 cartos disktest exercisor maintenance diskette contents: diskest.txt disktest.bin disktest.asm disktest.map 14dec81    @0|)wwЀЀtQql)  " }gA ` MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 ME476030100003000811204105916 8112041059160DISKTEST VOLCARTOS DISK/FILE MANAGER EXERCISER   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII M@jjggg@ o G`k_C# b# }B u[ ]e JRiCCp@<;: F8P@ G;NPCHC C GTqE'ɞ * Cϟx @0DAJL )‘ЀЀΎQBx"  i+ fEB)3 `jmBBI,v  BI,m  @EEFF)D^EF% jH@pOğv g7g4]X] PhV+s=胾c_N GF֞ؾ “@ALS)"$ C k1/j-h p vRw ppwp ki 15 !^\d X %'+Ns愾Q)s ED|{ @$ o O m J K i g. V tsFn`"FED) E`Cnrgy w"N{Rq1H }L2`0tG- Bc (>= END OF TABLE COPY AQ,IO:BCT(X) Put info into the IOB I:IO WRITE Do the IO JMP ERROR * JSK CHECKBCT Verify the byte count ADD =2,Y Increment the table pointer JMP FORMATED Go on BROKE EQU $ * * CLOSE the file * TESTCNT SET TESTCNT+1 COPY =CLOSE,Q JSK INCRTEST Next test I:IO CLOSE Close the file  JMP ERROR * * OPEN the file SEQUENTIAL byte stream, read, formatted ASCII * TESTCNT SET TESTCNT+1 COPY =OPEN,Q  JSK INCRTEST Next test COPY =OPSEQ:++OPBYT:++OPRE:,A COPY A,OPEN+IO:FOP I:IO OPEN Open please JMP ERROR * * READ the file * TESTCNT SET TESTCNT+1 COPY =READ,Q JSK INCRTEST COPY =RE:%4++FA:,A COPY A,READ+IO:FC Make sure the read is formatted COPY ARROW,Y Point to the table JSK ZEROCFI Reset the file index FORMREAD COPY 0(Y),AQ Get the length and the buffer JEQ A,READEND Jump on end  of table COPY =READ,X COPY A,IO:BCT(X) Set up the IOB I:IO READ JMP ERROR JSK  CHECKBCT Check the bytecount JSK COMPARE Compare the data JSK CLEAR Clear out the return buffer ADD =2,Y Bump the table address COPY Y,ARROW Keep the table pointer up to date JMP FORMREAD Continue  LPOOL READEND EQU $ COPY =SAVEAROW,A COPY A,ARROW Restore the table pointer * * CLOSE the file * TESTCNT SET TESTCNT+1 COPY =CLOSE,Q JSK INCRTEST Next test I:IO CLOSE Close the file  JMP ERROR * * OPEN for extend only (open extend only, sequential byte-stream unformatted) * TESTCNT SET TESTCNT+1 COPY =OPSEQ:++OPBYT:++OPEX:,A COPY A,OPEN+IO:FOP COPY =OPEN,Q JSK INCRTEST I:IO OPEN  JMP ERROR * * WRITE to the file * TESTCNT SET TESTCNT+1 COPY =WRITE,Q COPY Q,X JSK INCRTEST  Next test JSK INITBCT JSK INCRBCT Write one (1) byte COPY =BUF,Q COPY Q,IO:BUF(X) Reset buffer I:IO WRITE Write to the file JMP ERROR * * CLOSE the file * TESTCNT SET TESTCNT+1  COPY =CLOSE,Q JSK INCRTEST Next test I:IO CLOSE Close the file JMP ERROR * * DISCONNECT the file * TESTCNT SET TESTCNT+1 COPY =DISCOBOB,Q JSK INCRTEST Next test I:IO DISCOBOB Disconnect the file JMP ERROR * * DELETE the file * TESTCNT SET TESTCNT+1 COPY =DELETE,Q JSK INCRTEST Next test I:IO DELETE Delete the file JMP ERROR * * DISMOUNT the disk * TESTCNT SET TESTCNT+1 COPY =DISMOUNT,Q JSK INCRTEST Next test I:IO DISMOUNT Dismount the disk JMP ERROR * ALLDONE EQU $  JSK INITIOBS COPY =0,A COPY A,TSTCNT COPY A,COUNT JMP TST:STRT Redo DEVERROR EQU $  COPY =DEVERR,X ERROR EQU $ COMMENT ERROR CODE IN -X-. NEGATIVE -X- ==> SYSTEM ERROR COMMENT POSITIVE -X- ==> TEST ERROR. COMMENT CURRENT TEST NUMBER IN -Q-. COMMENT CURRENT IOB (I/O BLOCK) IN -A-. COPY COUNT,Q COPY CURRIOB,A JMP DEBUGC JMP $-1 LPOOL SAVEAREA EQU $ RES SIZE,0 END JMP ERROR * ALLDONE EQU $  JSK INITIOBS COPY =0,A COPY A,TSTCNT COPY A,COUNT JMP TST:STRT Redo DEVERROR EQU $ 1PAGE 0001 MULTI-TASKING LINKER (F1) 1981/12/04 10:41:24 FILE USAGE SUMMARY DH.DISKTEST.BIN=DH.DISKTEST.OBJ(EXECUTION=USR:EDB,RELOCATABLE=100,DEFINE.G:G= TST:STRT)+ DH.DEBUGC.LIB(UNCONDITIONAL)+ NOTE: *** DEBUGC.OBJ - REV A001 *** DH.MATHSUBS.LIB 1PAGE 0002 MULTI-TASKING LINKER (F1,EB,E5,E3,--,E3,E1) 1981/12/04 10:42:05 ALL SYMBOLS THE TRANSFER ADDRESS IS 0100(FM:TEST) MEMORY RELOCATABLE (0100 - 00FF) 0100-R:LOW 0EE9-R:HIGH SEGMENT FM:TEST (0100 - 097C) RELOCATABLE - RAM, SHAREABLE (0100 - 097C) 0100-FMTEST 0167-USR:TDB 063A-DEVTABLE 0791-G:G 0791-TST:STRT 0100-USR:EDB SEGMENT DEBUG: (097D - 0EB7) RELOCATABLE -  RAM, SHAREABLE (097D - 0EB7) 097D-DEBUGC 0D97-DBGC:TV 0D98-DBGC:LP SEGMENT SYSTEM: (0EB8 - 0EE9) RELOCATABLE - RAM, SHAREABLE (0EB8 - 0EE9) 0EB8-S:A12 0EC6-S:C12 0ED7-S:C22 C H A I N S R:TDBL 0167(FM:TEST) MDB: 0000(0SEGMENT) SDB: 0610(FM:TEST) SMD: 0000(0SEGMENT) QDB: 0000(0SEGMENT) MISSING: SRF:ER NO WARNINGS -FMTEST 0167-USR:TDB 063A-DEVTABLE 0791-G:G 0791-TST:STRT 0100-USR:EDB SEGMENT DEBUG: (097D - 0EB7) RELOCATABLE - RAM, SHAREABLE (097D - 0EB7) 097D-DEBUGC 0D97-DBGC:TV 0D98-DBGC:LP SEGMENT SYSTEM: (0EB8 - 0EE9) RELOCATABLE - RAM, SHAREABLE (0EB8 - 0EE9) 0EB8-S:A12 0EC6-S:C12 0ED7-S:C22 C H A I N S R:TDBL 0167(FM:TEST) MDB: 0OVicEdDanop`PV|P1D\~耤@h @%'`@@쀜~耤@ @Dh%'`@쀜@쀜~耤@: )@쀜CI, OVM..~耤@ Оk~耤@ ʞd~耤@ Ğ]~耤@F TR~耤@IǮ:y@쀜yCI ? ~耤@Iǒ: @쀜# OC? " ~耤@Is: m# X1Z 0~耤@I^:$݂X# X1Z1~耤@ƎIG:;ƂA# X1Z~耤@ƎI0:R*# X1Z"~耤@A~耤@ƔD) E.N6+yGV+lj@쀜=>~耤@8~耤@` B@`ʲC`D@`ʮE`F@`ʪG`H@`ʦI`J@`ʢK`L@`ʞM`N@`ʚO RST@`ʔU`V0!.02:;=MǞ Ϟϫ ϨU ϨV ϨL ϨG A>|KπϺ[YrHāUVHāLGHā baIUU VVILǚBCǘDFǖHINjJKǏ CŒО :;?<794568<2ϫq-ϨN(KπϸОomIςОϫXKОus? @? ? ‹Nj? =fUX1T!ÝQX Im? O ? ’Āb? IО>>*QOC{ tψO nKπϸОrpI̓ IτП1Z[ς1?IɃ?ÕāÏ G, ? CI= ?0cZ=>8,"HQΠΨO+OIM @ !ǠΨOO IO @>K yψO Ā rτ @GMe @G?]K$ϨOꞀOIMN @ IϢ πϸПJ@@>>GՠOĄwς? EO ? ? ? I˅О12σ?  ϸОtrIˆО:2σy? ϸОtrQ@GKςО>;;zϫ\ uKОusS@GKςОaϫ` \KОus ϞPOPOOKOFEϞ?< ljIώQDu? Ê ? .ϞPfD!$OPO\OKO pnIfQDMc? U a? HP"ϞꛨOPO6OKO pnI@QD'=? < ;>T\!? xϞtOPOOKOji pnIQD? `hÜ ? I? MϞIOPOOKO?>Ϟ<;l? igI ? ? ? I%ςОt!U ? ϫꚄOPAâQMИϔτRIӞ:>MDUB UCISSUB UCITT ТϞ?? `^KО0.RPSπTŽ? F? I>>$wς ОU+? n''OP$"AQHOĀ>C8LwNKОVT? Ö G, @G1ˍVĀV ? 0>3!I QV? PV? PFj? g? V? PV? PI ! ОڀVv? ×QAנͫI QQ Qǃ@G;>M2JςQł‚@ԣ? CIYQ NQIYQQŢϫY>@L1ϣHǚo ϢkϸО" Ð G, NJV? ICL0>8OC? ? ~耤@BC‹D ECJGHf\G@GB @G@G|BNDFQ@ MF‰K S@K\ FEEG@G  GKGGHJHEpB ~耤@Ilj G, 0ED#s9X004$ DIRE (%S) Disk Repair Utility 9  --- Phase zero ---%C Reading AU: %X4Too many BAD AU's=%X4 (Total BAD AU's=:%X4, New BAD file existsU --- Phase one ---F-LIST $ O %SFREE $  %SBOOT $  %SBAD $ I %S ROOT ) --- Phase two --- FREE file check6Free file mismatch %S%N Allocated free blocks=%N =>Unallocated used blocks=+ MAINTENANCE block check N0 ** ERROR ** Forward link in F-list entry for 56MAINTENANCE block. REPAIR cannot allow for >1 entry $Maintenance Block%Smismatch. standard I %C ** COMPLETED **%N9~耤@÷ĀñĀ Dï Iā© DÞǟǝǛÖ G-N@ 7T$;R"KZ,(,-./03@G0 G/ǗN ǕIC 9YC DCCKC41 MljAJBGIB@G CD5  9) C ECqCKCCDomgGHf4yNU]enws #yX MuX ˞qXmXiX}/#^]XÞ7× -Ó)É NK6713EK BCIEo @Da։N@Dž2~耤@BC BǕEEC EKEEdvtIdž@BK?ATPIJqF ?CI\ NVIon ƣjhB=IVUG QO;"IǞ#OI J8EĂQFI '=6+"EwÝĀrǕnNKl @MgNKe @`NK^ @><BKDD vEFEǓ#̃EÈf;:EE@q@lÏF 1MY?dCI!I˞ǝE EEF86NK˒ @ECĀÍNKˈ @ CE?6A=! Ā Ivu tsREkÍljdAÉQA@ aKBP" EIEQT FÖGF FGxvECUnp )ECIECIECJ @ JI  EKEEyf75~耤@B@`KCB IBQˣĀ Iā I6"QƣĀCCIāCd Íύ)ÆN @9=J@;<#KN @kOj IpoNKC @ hNK< @ ÉJLJR,4Z>BPP[LLCJÔ G, )ÎͿCNK)K0c?C @I)C @ C=>K ~耤@BC@G, GHÑQQgeā†C 3Z", D{ ;PK6 ~耤@BC@N@@G,Ha!!^7[5āVC TC ;BHKT"~耤@BC G›ĀDLEMCBBHG‚fNOOCv F FIYFQC NFIYFQ   GÉQDZRLONDLEMCBGoG ~耤@ ;;a3[ ΂,T H'"PQ#@ H7 Hi. Ha% "HsB £INBQ@ YB ÇQBJ\R @LOf~耤@BCIH` II˓ǒ MIώQJ WÉ@AJ0cZ= zÛāu G, kjDF D ȀJGF]>9BC"S vu D nDCIW@AA@@=^ā8  G,V F)WÖ !"" G, @@G9,"K2SCCI' @IS `S TSBSKSMrpBI‡Ā HIS@" SBESJGEXSI HHIXSIS SSD! ZXB FB IH HÍQH SÅTUHPS STxvII ISf+-0?SB.XSB*SB$SJ!IXXSBS SS ^\0IS-TJSKSTxvB@ S:<SBST ĀS S rpHDž @9J~耤@BCM JB 0 9 B A  Z  U#~耤@BC@@G CD@GE…FDBBN ԀEQ@-1~耤@BC@@GCD@GEaFCB CB[ FEUB UDB [~耤@BC@@GCD@GE3FCB[DBFE UB UDB~耤@B I˘Ǘ QIϓQN IÎÌ⯠MCDL0cZ=> G, nmBC B ȀJDC`] 8EC B HHţsBEIIBCCBB?@ā: G,^&, K*IÚCI G, @@G"?O/&~耤@B DID˒ @CDBDTL<BD D^\ Tl~耤@BC` D@`ʔE FGËHIÈJKIϞ@ABJ{ϫϠΨErKMqoÑ G, c bHa DI?U 0ĀDIDDJIHσkОP;KОwuX .QОf\^"y! ϸОwuEnDBD@  `K / jl  CLQOCmLFCHlj FFH@9Jo" rIoo HlF F3b FE?F!]BLQOB'LIFFFBHCg= IGGG" +I(( H%G GEGBLIGÞÛāÕ G,fÔL`HǏJK  A0cZ=>9,@!ǠIßQW ÛО ϸОwuÍÉJLJBJPUf~耤@BC DDBEDCB D D qoY~耤@B CCBDCDB C C nl;~耤@B CIDDBq ICCD DD qoC:  ? k  U .\V; ` '  Drive OPEN failure :%X4 VCB read failure :%X4 2 Volume name=%S Disk title =%S Disk type is: Mini-FlexibleStandard Floppy5Mb Medium Hard10Mb Medium Hard40/150 Mb High capacity Hard80/300 Mb High capacity Hard(UNKNOWN Suspect possible VCB corruption[ AU's per disk=:%X4  Directory starts at AU:%X4 ( F-list starts at AU:%X4 !Max. no. of F-list entries=:%X4 'Invalid F-no=%X4>%X4. Truncate file %S?%File/Extender bad for file%S F-no %X4#F-no duplicate for file %S F-no %X4+F-List backward link(%X4~=%X4) in F-no %X4 3F-List entry header mismatch with F-no %X4 (~=%X4)  AU :%X4=BAD  AU :%X4=Non ExistantP AU :%X4 DuplicatedBTruncate file %S ? *- Total AU's=%X41%X4-%X4ERROR :%X4 Reading F-list"ERROR :%X4 writing F-list Fno=:%X4v Warning:  Repair (Y/N)?  Warning:  Options Y/N?  Repair all Y/N? + Selective repair Y/N? 2 Print all names Y/N?  Verify Disk Y/N?  Log output to 'LO' Y/N  Proceed Y/N/! $ DIRE (%S) Disk Repair Utility $ERROR :%X4 reading directory AU :%X4*-V %S  %S = invalid name *- %S Read file error %X4 for AU:%X4 Run phase 0 on next pass *-D DIRECTORY LEVEL %N .*-L %S V"Bad Directory PARENT link %X4~=%X4EDuplicate PARENT link Bad Directory SELF link %X4~=%X4gDuplicate SELF link*-+ LEAVING DIRECTORY LEVEL %N  DIRK~耤@BCDJEKCB @쀜f\ ?FATAL ERROR: f0~耤@BC` NIBIOPOBQ ؠNRSTUIOBVIOOЀVSR–R㜀uRߜRܜR؜HURҜ&zRȜ OO@BTT 0 9 О ɞ5TUQBTTSRINN A- C? DK F+ HA IC NL O7 S- X7Q!O OOP@쀜w~耤@BICQIDEDBDKDEus@쀜&O~耤@BC` DIEBFGCDHGCBSD C@AFF@GEDF@GF EEQGIE]C^ ]K]^xvBC -GQF E]C^ 0{] ]^xvEJ]]D 0j] ]]S5@쀜 ~耤@@쀜 H~耤@BCM)Js B 0@쀜~耤@BCM9Js B @쀜0123456789ABCDEFmEAE6E5E3--E2E0CQIDEDBDKDEus@쀜&O~耤@BC`  DIEBFGCDHGCBSD C@AFF@GEDF@GF EEQGIE]C^ ]K]^xvBC -GQF E]C^ 0{] ]^xvEJ]]D 0j] ]]S5@쀜 ~耤@@쀜 CARTOS Disk System Exercise Program 02/Dec/81 Description: This program is designed to exercise the CARTOS disk subsystem including the File Manager. It will try to access CARTOS disks with the IPB names: DK01, DK10, DK20, and DF00. As of the above date, the standard configuation for these names is 10MB Pertec, Phoenix, 80MB CDC, and standard density floppy. The program should execute regardless of which of these units is actually on-line. The program should repeatedly loop, programing these devices and the software interface, until CPU execution is terminated. Operating Instructions: (1). Copy the file DISKTEST.BIN into USER::.SYS on the system disk. (2). Software autoload CARTOS:: from the system disk. (3). If the system is linked to come up in DEBUG, the debug logon will print on TV14. Respond by typing in JGZ and a carriage return.  A logon of DEBUGC will print on TV14 on completion of loading. Start the test by typing JGG followed by carriage return. (4). Loop count, internal test number, and device under test is output to TV14. (5). An error during the test causes the program to branch to DEBUGC. The error code is in the -X- register. A negative number indicates a system error which can be looked up in the list of errors by number. A positive number between 1 and 5 inclusive indicates an test error as follows: 1 - Data miscompare error. the data read does not compare to the expected data. 2 - Byte count error. The actual byte count returned was not the expected byte count. 3 - The current file index (CFI) was not the expected value. 4 - TV I/O error. 5 - No devices on line to test. The -Q- register contains the current test number, the -A- register contains the pointer to the I/O command block that was used for the current test. The status word of the IOB is word 7, and is the status returned by the I/O call. (6). The test must be reloaded in order to restart after an error. A file TEST:BS.ASM is created by the test and should be deleted before restarting the test. The disk repair utility (DIRE) should also be run to fix any damage done by an error and to verify the disk integrity. Note : The table of devices must be configured manually before the test is started. When the DEBUGC prompt first comes up, check the DISKTEST.MAP and locate DEVTABLE. The following 8 words contain the ASCII equivalent of 'DK01 DK10 DK20 DF00'. These four devices can be changed to fit the configuration of the system under test. To delete a device from test, put a zero in the place  of the ACSII with DEBUGC. When the table is configured as desired type in JGG followed by a carriage return to start the test. (N.B. The program is linked relative :100) GC prompt first comes up, check the DISKTEST.MAP and locate DEVTABLE. The following 8 words contain the ASCII equivalent of 'DK01 DK10 DK20 DF00'. These four devices can be  OVicEdDanog  gPP ($H'aaaaaaaaaaaaaaaa? gkjlPp sDD@`({ }TV@` DD@p UF@@BDD UF@P UF@0 UF@1 DD@4B UF@ UF@ UF@" UF@  TV7TYGER,TYGER BURNING BRIGHTIN THE FOREST OF THE NIGHTWHAT IMMORTAL HAND OR EYE COULD FRAME THY FEARFUL SYMMETRYZ[ - TV14%( DK0157:8 DK01DK10DK20DF00RTEST:BS ASMDD3°@+_ # >ݠ*3oA%`'5o# 'o)s }6w 4<'B{# y@ G<  MM K@NpOp# ƣ h 1B# TEST -PASS-   00`1Ᵽ+@ 1AG& qG # __# X# ) P# M # # # 9(B8[`P# ) `P#   4?@ ͞xvâ &}# Ţz # +oi G9 G5p *uo>G&Gx# I  KK+pNǕ6# ) s- 6}  2g7so o6P }{cªu6@¥o695œa6 )4Q6   | vxp;6 k5hf6bg)6 тՇZ\T6 TǢQPN6EI¾ 6@·`PAGG76&6! "6•66'½soo6¶k GIG'6ks¥X6œRN6œJ GX6k烞q|tt'6#i6 d @ªą6[6Ÿ6š6–6 )Í~  > } }~ ~Þ\(*Y]NvWP'LMN~()K T辸 ( :ӂO - :ӂ" )  8 /0e'渦ƴpP+` o «⫂pP0/s D E B U G C A 0 0 1 ӟe E} ӂzӾ P AE QB X? Y  <ԽѾ K5 L2 S/ڟS =ӟ{ } ӟ|" *ӽ z Y Q A Gҽ؆ R Ɲƚ›LBLCLFLLLSLJLILGLRLZܝ ǞA 4}҆{҆u łt Lłl T P B Pb!  Ğ|QEY , , `憂՟ ?ӽў@ F} ` J B YK QJfޞւ `ޡ @ޟޝ `@E ;߽RA@EN@Aޏǎ Qފ ,^7F0# o*| x` D `垞oY*Qd Ѐ_ āZ@AĄ܃T B `ǁ D构*L_U3 `Ģ1*/) 'r "BƽуڽֽˁOGÙE6'Eā / XŃ ѽڞ]w Pсކ@كڽցBǢ ,ž[ + - * X /KJƎޞ^ޞ[{ xނZ ,ş| ֽL ʁ Pсކ߽ڽڽ޺{ ҽўq kȆǂGާ}ަyޠ}y E ~  .Ӄ E ~  .ޢރfN ,Žֆt@FC lqLL (w{u _|JQB[y L S TўON  Jsľ޾ˆ_]]| IƎ> ,ŽƇ ,ƂpIưk , ,Htr Hm -ņց -ņކ('\\ÂF -tтكԞx ’@"Fz@ Ό F ō l5#ކ.bƝޙޖJQ!’ފދJQĽ %ӂԞu U ӂPx q on "lIjM K b&_&[[ `ZKL$kT N =ӂMM GӂJ   :Ӟ ӟL gVG¢QR@¡kj P›Ծ %'+ %'ކ†JƄ `Z@@@  `TV h$ xvrv'6psb ` ^\ { y9u    :wTVLP @>)>19g6 -P%'-+0',L,S,Z,T,PY+X)T&  `O Iyyyx R G , ; + - * / X_1]\IW` RRR -@A@KJ@ JH +O -M * / X?Ҿ  `YҾ B `R-҆, , +& N I+KL v `p `PAQXYKLSDC Z A 9 0n C F =  t ,Ɲ ,ƙ˽•ކޏJQ ` Tѝ  ~耤@ @@& &+G'@쀜 ~耤@ @@& &* QA @쀜 ~耤@D G&D&* QA @쀜mF1EBE5E3--E3E1 R G , ; + - * / X_1]\IW` RRR -@A@KJ@ JH +O -M * / X?Ҿ  `YҾ B `R-҆, , +& N I+KL v `p `PAQXYKLSDC Z A 9 0n C F =  t ,Ɲ ,ƙ˽•ކޏJQ ` Tѝ  ~耤@ @@& &+G'@쀜 ~耤@ @@& &* QA @쀜 ~耤@D G&D&* QA @쀜 TRAPM TRAPM2 JNE Q,TRAPM3 RESTORE NOT REQUIRED IF NOT 0 COPY METB,A FETCH ORIGINAL CONTENTS  COPY A,*MET RESTORE IN TRAP LOC COPY METB+1,Q COPY Q,*MET+1 RESTORE IN TRAP LOC IMS METS SET INTERCEPT FLAG TRAPM3 RTN TRAPM JSTI WORD :BF80 JST *$+1 INSTRUCTION CODE UIT WORD  :86,:87 UNIMP INST TRAP LOC + 2 AND + 3 UITB WORD 0,0 MET WORD :8A,:8B MEM ERROR TRAP LOC + 2 AND + 3  METB WORD 0,0 NET WORD :9A,:9B CHA/NUM ERROR TRAP LOC + 2 AND + 3 NETB WORD 0,0 SET WORD :9E,:9F  STACK ERROR TRAP LOC +2 AND +3 SETB WORD 0,0 AET WORD :AA,:AB ARITH ERROR TRAP LOC + 2 AND + 3 AETB WORD  0,0 METS ENT JST SETIF COPY :88,A SAVE USERS PROGRAM COUNTER COPY A,*TEXIT(X,Y) AT TRAP TIME COPY ='U',A TSRTN EQU $ COPY A,*TKIND(X,Y) STORE TYPE OF REG DUMP JST *TDMPRS(X,Y) DISPLAY REGISTERS JMP *TRTN6(X,Y) RETURN TO DEBUG RESETT ENT COPY =0,A RESET INTERCEPT TAGS COPY A,TC COPY A,TI COPY A,TM COPY A,TN COPY A,TS COPY A,TA RTN RESETT SETIF ENT JST SAVE SAVE USERS ENVIRONMENT COPY SETIF,A SET INTERCEPT FLAG SUB =2,A COPY A,SETIF COPY =0,A COPY A,*SETIF IMS SETIF BUMP FOR RETURN  IMS SETIF COPY YREG,X RESTORE OFFSETS COPY YREG,Y RTN SETIF TRAPN ENT COPY  TN,A GET INTCPT TAG COPY NETS,Q GET INTERCEPT FLAG JEQ A,TRAPN2 GO RESTORE TRAP IF 0 JEQ Q,TRAPN1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*NET SWAP CONTENTS AT TRAP LOC + 2 COPY A,NETB SAVE ORIGINAL COPY TNETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*NET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,NETB+1 CONTENTS TRAPN1 COPY =0,A COPY A,NETS SET INTERCEPT FLAG RTN TRAPN TRAPN2 JNE Q,TRAPN3 RESTORE NOT REQUIRED IF NOT 0 COPY NETB,A FETCH ORIGINAL CONTENTS COPY A,*NET RESTORE IN TRAP LOC COPY NETB+1,A COPY Q,*NET+1 RESTORE IN TRAP LOC IMS NETS SET INTERCEPT FLAG TRAPN3 RTN TRAPN NETS ENT JST SETIF COPY :98,A SAVE USERS P COUNTER @ TRAP TIME COPY  A,*TEXIT(X,Y) COPY ='N',A TSTRTN2 JMP TSRTN TRAPS ENT COPY TS,A GET INTERCEPT TAG  COPY SETS,Q GET INTERCEPT FLAG JEQ A,TRAPS2 GO RESTORE TRAP IF 0 JEQ Q,TRAPS1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*SET SWAP CONTENTS AT TRAP LOC + 2 COPY A,SETB SAVE ORIGINAL COPY TSETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q  EXCH Q,*SET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,SETB+1 CONTENTS TRAPS1 COPY =0,A COPY  A,SETS SET INTERCEPT FLAG RTN TRAPS TRAPS2 JNE Q,TRAPS3 RESTORE NOT REQUIRED IF NOT 0 COPY SETB,A FETCH ORIGINAL CONTENTS COPY A,*SET RESTORE IN TRAP LOC COPY SETB+1,Q COPY Q,*SET+1 RESTORE IN TRAP LOC IMS SETS SET INTERCEPT FLAG TRAPS3 RTN TRAPS SETS ENT  JST SETIF COPY :9C,A SAVE USER P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='S',A   JMP TSRTN TRAPA ENT COPY TA,A GET INTERCEPT TAG COPY AETS,Q GET INTERCEPT FLAG JEQ A,TRAPA2 GO RESTORE TRAP IF 0 JEQ Q,TRAPA1 SET NOT REQUIRED IF 0 COPY JSTI,A  GET JST *$+1 INST CODE EXCH A,*AET SWAP CONTENTS AT TRAP LOC + 2 COPY A,AETB SAVE ORIGINAL COPY TAETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*AET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,AETB+1 CONTENTS TRAPA1 COPY =0,A COPY A,AETS SET INTERCEPT FLAG  RTN TRAPA TRAPA2 JNE Q,TRAPA3 RESTORE NOT REQUIRED IF NOT 0 COPY AETB,A FETCH ORIGINAL CONTENTS COPY A,*AET RESTORE AT TRAP LOC COPY AETB+1,Q COPY Q,*AET+1 RESTORE IN TRAP LOC  IMS AETS SET INTERCEPT FLAG TRAPA3 RTN TRAPA AETS ENT JST SETIF COPY :A8,A  SAVE USER P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='A',A JMP TSRTN * LPOOL TITL ****** * * -- RREG -- * -- DISPLAY AND CHANGE OF REGISTERS -- * ****** RREG EQU $ COPY *TCMND(X,Y),A  MMU REGISTERS ? CLSN ='P',A JMP PREG YES JST *TCOMMA(X,Y) ERROR IF , IN INPUT COPY =EXIT-BASE,A RREGG COPY *TSIZE(X,Y),Q ADD X,A ADD Q,A DESIRED REGISTER ADDRESS COPY A,SIZER SAVE IT COPY *TPFLG(X,Y),A GET 'PFLG' CONTENTS JNE A,RREG1 IF VALUE SUPPLIED, GO CHANGE REGISTER JST *TCRLF(X,Y) NEW LINE COPY *SIZER,A  GET DESIRED REG CONTENTS JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE RREG5 EQU $ JST *TINP(X,Y) GET NEXT PARM-- CHANGE JST *TCOMMA(X,Y) ERROR IF , COPY *TPFLG(X,Y),A GET PARM ENTERED FLAG RREG1 JEQ A,RREG2 IF NO CHANGE, IT MAY BE / OR X COPY *TVALU(X,Y),A GET CHANGE  COPY A,*SIZER CHANGE THE DESIRED REGISTER JMP *TDBG(X,Y) START AGAIN IN DBG RREG2 COPY *TLASTS(X,Y),A FETCH LAST TERMINATOR CLSN =0,A ANY SPECIAL TERMINATOR? JMP *TDBG(X,Y)  NO SPECIAL TERMINATOR, BACK TO DBG CLSN ='/',A LAST TERMINATOR MUST BE JMP RREG3  / OR X CLSN ='X',A JMP $+2 JMP *TERROR(X,Y) ELSE ERROR COPY *SIZER,A GET DESIRED REG CONTENTS SHIFT A,LO,1 MULTIPLY BY 2 JMP RREG4 RREG3 COPY *SIZER,A SHIFT A,RO,1 DIVIDE BY 2 RREG4 JST *TCRLF(X,Y) NEW LINE JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JMP RREG5 GET ANOTHER PARM SIZER WORD 0 ****** * * -- DISPLAY AND CHANGE OF GENERAL REGISTERS -- * GREG EQU $ COPY =G0-BASE,A G-REG ABSOLUTE OFFSET JMP RREGG GO PERFORM 'G' FUNCTION TITL ***** * * -- DISPLAY AND CHANGE OF MMU REGISTERS -- * * PREG EQU $ JST *TCOMM A(X,Y) COMMA IS ILLEGAL HERE COPY =MAPS-BASE,Q GET LOCATION OF MMU VALUES COPY *TSIZE(X,Y),A GET INDEX CSK A,=1 ARE WE DEALING WITH MAPS? JMP $+2 YES ADD =1,Q POINT TO NEXT WORD (STATUS) ADD X,Q ADJUST ADDRES COPY Q,SIZER SAVE ADDRESS COPY *TPFLG(X,Y),A GET PARAMETER FLAG JNE A,PREG1 JMP IF A VALUE IS APPENDED JST *TCRLF(X,Y) ELSE, GO TO NEXT LINE COPY *SIZER,A GET VALUE COPY *TSIZE(X,Y),Q GET INDEX CSK Q,=1 DMA, USER OR STATUS?? JMP $+3 USER JMP STATUS STATUS JMP DMA DMA AND =:000F,A  SLIM DOWN TO LOWER 4 BITS JST *TSHEX(X,Y) PRINT IT JMP PREG5 CONTINUE * DMA SHIFT A,RO,4  SLIM DOWN TO DMA # JMP $-4 DO IT JMP PREG5 CONTINUE * STATUS SUB =2,Q ADJUST TO STATUS BIT INDEX OF STATUS WORD SHIFT Q,L,4 SHIFT FOR XNX XNX Q TBIT 0,A XFER DESIRED BIT TO OV COPY =0,A JF OV,$+2 OV SET? COPY =1,A YES PRINT 'STATUS' = 0001 JST *TSHEX(X,Y) NO, PRINT 'STATUS' = 0000 * PREG5 EQU $ JST *TINP(X,Y) GET NEXT PARAMETER JST *TCOMMA(X,Y) COMMA ILLEGAL COPY *TPFLG(X,Y),A GET PARAMETER FLAG JEQ A,PREG21 JMP IF NO MORE PARAMETERS PREG1 COPY *TVALU(X,Y),A GET PARAMETER AND =:000F,A GET PERMISSIBLE VALUES COPY *TSIZE(X,Y),Q GET INDEX CSK Q,=1 JMP USER2 USER JMP STATUS2 STATUS COPY *SIZER,Q DMA AND =:000F,Q  GET RID OF OLD DMA# SHIFT A,L,4 PUT NEW DMA# IN POSITON OR Q,A JMP PREG2 GO AWAY * USER2 COPY *SIZER,Q GET PRESENT VALUE AND =:00F0,Q GET RID OF OLD USER # ADD Q,A PUT NEW ONE IN JMP PREG2 * STATUS2 SUB =2,Q ADJUST TO BIT 0 OF STATUS WORD SHIFT Q,L,4 SHIFT FOR XNX  AND =:0001,A ONLY ONE BIT IS ALLOWED FOR INPUT CLSN =1,A SET OR RESET ? THAT IS THE QUESTION JMP SETBIT JMP IF WE ARE TO SET A BIT COPY *SIZER,A GET STATUS WORD XNX Q RBIT 0,A TURN OFF REQUESTED BIT JMP PREG2 * SETBIT COPY *SIZER,A GET STATUS WORD XNX Q SBIT 0,A TURN ON REQUESTED BIT PREG2 COPY A,*SIZER REPLACE WORD PREG21 COPY *TLASTS(X,Y),A ANY MORE INPUT IS AN ERROR CLSN =0,A  JMP PREGRTN GO AWAY JMP *TERROR(X,Y) ERROR RETRUN PREGRTN COPY *TMAPS(X,Y),A OUT A,LOADUSER LOAD USER # INTO MMU SHIFT A,RO,4 LOAD DMA # INTO MMU OUT A,LOADDMA COPY *TMMUSTAT(X,Y),A OUT A,LOADSTAT LOAD STATUS INTO MMU JMP *TDBG(X,Y) GO TO DEBUG (IF POSSIBLE) TITL *************** * * *  -- PM COMMAND PROCESSING -- * * **************** * GET MAP NUMBER AND PAGE NUMBER * * PMCOM EQU $ JST *TINP(X,Y)  INPUT FIRST PARAMETER (MAP #) CLSN =',',A MUST BE DELIMITED BY A COMMA JMP $+2 JMP *TERROR( X,Y) ELSE ITS AN ERROR COPY *TVALU(X,Y),A GET MAP # AND =:000F,A ALLOW :0-:F COPY A,MAPNUM SAVE IT AWAY JST *TINP(X,Y) GET NEXT PARAMETER (PAGE # OR 'L') COPY *TLASTS(X,Y),A GET LAST INPUT CLSN ='L',A LIST ALL PAGES OF MAP COMMAND? JMP PMMAP YES, DONT SET PAGE NUMBER COPY *TVALU(X,Y),A GET PAGE # AND =:003F,A ALLOW 0-63 PAGE NUMBER JMP PMMPAGE SPACE 1 PMMAP EQU $ COPY =0,A PMMPAGE COPY A,PAGENUM SAVE PAGE NUMBER * * -- GET MAP ENTRY -- * * IN READSTAT,Q  GET MMU STATUS COPY Q,*TMMUSTAT(X,Y) SAVE IN STATUS WORD OR =1,Q SET TABLE ACCESS ON OUT Q,LOADSTAT AND UPDATE IN CONTROL REGISTER COPY STADDR,A FC00 IS START OF MAP COPY MAPNUM,Q GET CURRENT MAP NUMBER MAPLOP JEQ Q,DOPAGE IF LOOP END THEN ADD PAGE NUMBER  ADD MAPINC,A MOVE POINTER TO NEXT MAP LOCATION SUB =1,Q DECREMENT MAP NUMBER  JMP MAPLOP AND LOOP DOPAGE ADD PAGENUM,A NOW A HAS MAP ENTRY ADDRESS COPY A,*TADDR(X,Y)  SAVE IN CASE ITS A 'L' COMMAND COPY *TLASTS(X,Y),Q GET LAST INPUT CLSN ='L',Q LIST MAP CONTENTS? JMP *TLIST(X,Y) YES, LIST OUT A MAP OF PAGES * * * * --GET MAP ENTRY AND PUT IN DACP0 AND DACP1-- * * * COPY =0,Q COPY Q,DACP1 COPY Q,DACP1+1 INITIALIZE MAP ENTRY SAVE AREA COPY Q,DACP1+2 COPY Q,DACP1+3 COPY Q,DACP0 COPY Q,DACP0+1 COPY Q,DACP0+2 COPY Q,DACP0+3 COPY A,CURPAGE SAVE MAP ENTRY ADDRESS COPY A,TEMPAGE COPY *TEMPAGE,A MAP ENTRY NOW IN A COPY A,SAVENTRY PUT IN STORAGE AND DMASK,A GET DIRTY BIT COPY A,DACP1 AND PUT IN WORKING AREA COPY SAVENTRY,A GET ENTRY AGAIN AND AMASK,A AND GET ACCESS BIT COPY A,DACP1+1 AND PUT IN WORKING STORAGE  COPY SAVENTRY,A GET ENTRY AGAIN AND MMASK,A AND GET ACCESS MODE BITS COPY A,DACP1+2 AND PUT IN WORKING STORAGE COPY SAVENTRY,A GET ENTRY AGAIN AND PMASK,A GET PHYSICAL PAGE NUMBER COPY A,DACP1+3 AND PUT IN WORKING STORAGE * * --PROCESS PARAMETERS, IF ANY-- * COPY *TTEST(X,Y),A GET LAST CHAR CLSN =CR,A IF CARRIAGE RETURN JMP DISPALL THEN DISPLAY ALL PARAMS CLSN =',',A ELSE MUST BE COMMA JMP $+2 IF NOT THEN ERROR  JMP *TERROR(X,Y) * * * --PROCESS FIRST PARAMETER-- * FIRST PARAMETER PROCESSING DIFFERS FROM OTHERS IN THAT * A SINGLY LISTED PARAMETER CAN BE CHANGED ALA INSPECT/MODIFY * * JST *TRKB(X,Y) GET PARAM COPY A,CURPARM SAVE FOR OTHER ROUTINES JST CHKVDPR SEE IF D,A,M,P JST *TRKB(X,Y) I F SO GET NEXT CHAR CLSN =CR,A IF CARRIAGE RETURN THEN JMP SINGPARM INSPECT/MODIFY PARAMETER CLSN =',',A ELSE IF COMMA THEN JMP NEWPARM GET NEXT PARAMETER IN LIST  JST CHK ELSE MUST BE A HEX VALUE COPY A,Q START TO BUILD VALUE NECHAR COPY Q,QTEMPB TEMP SAVE VALUE NWCHAR JST *TRKB(X,Y) GET NEXT CHAR COPY QTEMPB,Q RESTORE VALUE  CLSN =CR,A IF CR THEN VALUE IS FINISHED JMP CHNGVAL1 GO AND CHANGE VALUE CLSN =',',A IF COMMA THEN VLAUE IS FINISHED JMP CHNGVAL1 BUT THERE ARE MORE PARAMETERS JST CHK ELSE MUST BE HEX VALUE SHIFT Q,LO,4 SHIFT Q FOR NEXT HEX VALUE OR A,Q Q HAS UPDATED VALUE JMP NECHAR GET NEXT CHAR QTEMPB WORD 0 TEMP SAVE VALUE TITL * * * --CHANGE VALUE 1 CHECKS FOR VALID RANGE FOR * CURRENT PARAMETER,CHANGES PARAMETER IN * WORKING STORAGE,THEN EITHER EXITS THROUFH * DISPLAY ROUTINE OR GOES TO NEXT PARAMETER-- * * CHNGVAL1 COPY A,ATEMPA  SAVE DELIMITER JST VALCHK CHECK FOR VALID RANGE FOR CURPARM JST NEWVAL CHANGE VALUE IN WORKING STORAGE COPY ATEMPA,A GET DELIMITER CLSN =CR,A IF CARRIAGE RETURN JMP DISPARM THEN DISPLAY AND RESTORE ENTRY JMP NEWPARM ELSE MUST BE MORE PARAMETERS CURPARM WORD 0 ATEMPA WORD 0 TITL * * --DISPALL SETS ALL PARAMETERS TO CHANGED AND GOES TO DISPLAY-- * * DISPALL COPY =1,Q COPY Q,DACP0 COPY Q,DACP0+1 COPY Q,DACP0+2 COPY Q,DACP0+3 JMP DISPARM TEMPAGE WORD 0 LPOOL TITL * * --SINGPARM(SINGLE PARAMETER) OUTPUTS PARAMETER VALUE * AND CHANGES VALUE DEPENDING ON USER INPUT, THEN * BYPASSES DISPLAY PARAMETERS, RESTORES ENTRY THEN EXITS * * SINGPARM JST *TCRLF(X,Y) NEW LINE JST *TSPACE(X,Y) SPACE OVER ONE COPY CURPARM,A NEW LINE AND GET PARAMETER JST *TTYPCR(X,Y) PRINT IT COPY ='=',A AND EQUAL SIGN JST *TTYPCR(X,Y) COPY CURPARM,A GET NEW PARAMETER AGAIN CLSN ='D',A JMP DSING CLSN ='A',A JMP ASING CLSN ='M',A JMP MSING GET APPROPRIATE PARAMETER COPY DACP1+3,A WE KNOW IT IS PHYSICAL PAGE SINGVAL JST *TSHEX(X,Y) OUTPUT PARAMETER VALUE JST *TRKB(X,Y) GET NEXT CHARACTER CLSN =CR,A IF IT IS CARRIAGE RETRUN  JMP *TDBG(X,Y) DON'T CHANGE ENTRY JUST GO BACK JST CHK ELSE GET HEX VALUE COPY  A,Q STORE IN Q NUCHAR COPY Q,QTEMPA SAVE VALUE NYCHAR JST *TRKB(X,Y) GET NEXT CHAR  COPY QTEMPA,Q RESTORE VALUE CLSN =CR,A IF IT IS CARRIAGE RETURN JMP CHN GVAL2 WE MUST BE DONE JST CHK ELSE MUST BE MORE VALUE SHIFT Q,LO,4 BUILD HEX VALUE OR A,Q INTO Q JMP NUCHAR AND CONTINUE QTEMPA WORD 0  TEMP VALUE SAVE * * CHNGVAL2 JST VALCHK DO RANGE CHECK FOR PARAMETER JST NEWVAL IF OK CHANGE VALUE IN WORKING STORAGE JMP ENDDIS BYPASS DISPLAY, RESTORE AND RETURN * * DSING COPY  DACP1,A GET DIRTY BIT SHIFT A,RO,15 ADJUST FOR PRINT ROUTINE JMP SINGVAL ASING COPY DACP1+1,A GET ACCESSED BIT SHIFT A,RO,14 ADJUST FOR PRINT ROUTINE JMP SINGVAL  AND CONTINUE MSING COPY DACP1+2,A GET MODE BITS SHIFT A,RO,12 ADJSUT FOR PRINT ROUTINE  JMP SINGVAL AND CONTINUE TITL * * * --CHKVDPR(CHECK FOR VALID PARAMETER) CHECKS TO SEE IF * PARAMETER IS ONE OF D,A,M,P. IF IT IS, ROUTINE THEN * MARKS PARAMETER RECIEVED FLAG IN DACP0 AREA FOR * DISPLAY PARAMETER ROUTINE'S USE-- * CHKVDPR ENT COPY =1,Q SET FOR NAMED VALUE COPY CURPARM,A GET PARAMETER CLSN ='D',A JMP DSET IF D SET DIRTY BIT USED CLSN ='A',A JMP ASET IF A SET ACCESS BIT USED CLSN ='M',A JMP MSET IF M SET MODE BITS USED CLSN ='P',A JMP PSET IF P SET PHYSICAL PAGE USED JMP *TERROR(X,Y) ELSE INVALID PARAMETER AND ERROR * DSET COPY Q,DACP0 RTN CHKVDPR ASET COPY Q,DACP0+1 RTN CHKVDPR MSET COPY Q,DACP0+2 RTN CHKVDPR PSET COPY Q,DACP0+3 RTN CHKVDPR TITL * * * * --VALCHK(VALUE CHECK) ENSURES THAT VALUE ENTERED BY USER *  IS VALID FOR CURRENT PARAMETER-- * * VALCHK ENT COPY CURPARM,A CLSN ='P',A JMP PAGEPARM CLSN ='M',A JMP MODEPARM CSK Q,=1 JMP CHECZERO JMP *TERROR(X,Y) RTN VALCHK * CHECZERO CSK Q,=0 JMP *TERROR(X,Y) JMP *TERROR(X,Y) RTN VALCHK * MODEPARM COPY =4,A CSK Q,A JMP MODECONT JMP *TERROR(X,Y) JMP *TERROR(X,Y) MODECONT COPY =0,A CSK Q,A JMP *TERROR(X,Y) NOP RTN VALCHK * PAGEPARM COPY =0,A CSK Q,A JMP *TERROR(X,Y) JMP PAGECONT RTN VALCHK PAGECONT COPY PMASK,A CSK Q,A RTN VALCHK JMP *TERROR(X,Y) RTN VALCHK TITL * * --NEWVAL(NEW VALUE) CHANGES THE VALUE OF THE CURRENT * PARAMETER IN CURPARM TO THE CURRENT VALUE IN Q * REGISTER IN APPROPRIATE WORD IN DACP1 WORKING STORAGE-- * * NEWVAL ENT COPY CURPARM,A CLSN ='D',A JMP DIRBIT CLSN ='A',A JMP ACCBIT CLSN ='M',A JMP MODEBIT * ELSE PAGE VALUE COPY Q,DACP1+3 RTN NEWVAL ACCBIT SHIFT Q,L,14 COPY Q,DACP1+1 RTN NEWVAL DIRBIT SHI FT Q,L,15 COPY Q,DACP1 RTN NEWVAL MODEBIT SHIFT Q,L,12 COPY Q,DACP1+2 RTN  NEWVAL TITL * * --NEWPARM(NEW PARAMETER) GETS NEXT PARAMETER, * EXITS ON CARRIAGE RETURN,LOOPS ON A COMMA, *  AND CHANGES VALUE IF THERE IS ONE(USES NWCHAR IN * PROCESS FIRST PARAMETER ROUTINE__ * * NEWPARM EQU $ JST *TRKB(X,Y) COPY A,CURPARM SAVE NEW PARAMETER JST CHKVDPR VALIDATE NEW PARAMETER  JST *TRKB(X,Y) GET NEXT CHARACTER CLSN =CR,A IF CARRIAGE RETURN JMP DISPARM DISPLAY VALUES AND EXIT CLSN =',',A IF COMMA,MERELY MARK JMP NEWPARM PARAMETER AND LOOP  JST CHK ELSE GET HEX VALUE COPY A,Q BUILD VALUE IN Q JMP NECHAR AND GET VALUE AS IN FIRST LPOOL TITL * * --DISPARM(DISPLAY PARAMETERS) IS EXIT ROUTINE. IT GOES * THROUGH DACP0 AREA TO SEE WHICH PARAMETERS HAVE BEEN * USED IN THE COMMAND. IT THEN DISPLAYS THOSE WHICH * HAVE. ENTRY ENDDIS IS USED BY SINGPARM ROUTINE. * ENDDIS RESTORES ENTRY IN MAP AND EXITS TO DEBUG-- * * DISPARM EQU $ JST *TCRLF(X,Y) NEW LINE COPY =' ',A JST *TTYPCR(X,Y) COPY DACP0,A JEQ A,CHKDAC1 IF DIRTY NOT USED,CHECK ON ACCESS JMP DDIS ELSE DISPLAY DDIS CHKDAC1 COPY DACP0+1,A SEE IF ACCESS BIT WAS USED JEQ A,CHKDAC2 IF NOT CHECK MODE BITS JMP ADIS ELSE DISPLAY ACCESS BIT CHKDAC2 COPY DACP0+2,A SEE IF MODE BITS WERE USED JEQ A,CHKDAC3 IF NOT CHECK PHYSICAL PAGE NUMBER JMP MDIS  ELSE DISPLAY MODE BITS CHKDAC3 COPY DACP0+3,A JEQ A,ENDDIS IF DONE RESTORE ENTRY AND EXIT COPY ='P',A ELSE PRINT PHYSICAL PAGE NUMBER JST *TTYPCR(X,Y) COPY ='=',A JST *TTYPCR(X,Y) COPY DACP1+3,A JST *TSHEX(X,Y) GET PHYSICAL PAGE NUMBER AND PRINT JMP ENDDIS  AND EXIT DDIS COPY ='D',A PRINT D AND DIRTY BIT VALUE JST *TTYPCR(X,Y) COPY ='=',A  JST *TTYPCR(X,Y) COPY DACP1,A SHIFT A,RO,15 JST *TSHEX(X,Y) JMP CHKDAC1 ADIS COPY ='A',A PRINT A AND ACCESS BIT VALUE JST *TTYPCR(X,Y) COPY ='=',A JST  *TTYPCR(X,Y) COPY DACP1+1,A SHIFT A,RO,14 JST *TSHEX(X,Y) JMP CHKDAC2 MDIS  COPY ='M',A PRINT M AND ACCESS BIT VALUE JST *TTYPCR(X,Y) COPY ='=',A JST *TTYPCR(X,Y) COPY DACP1+2,A SHIFT A,RO,12 JST *TSHEX(X,Y) JMP CHKDAC3 ENDDIS COPY  DACP1,Q RESTORE MAP ENTRY BY ORING OR DACP1+1,Q WORKING STORAGE VALUES OR DACP1+2,Q TOGETHER OR DACP1+3,Q AND PUT BACK IN MAP COPY Q,*CURPAGE COPY *TMMUSTAT(X,Y),Q OUT Q,5 AND RESTORE MMU CONTROL REGISTER JMP *TDBG(X,Y) AND BACK TO DEBUG MAPINC WORD :0040 STAD DR WORD :FC00 PAGENUM WORD 0 MAPNUM WORD 0 DACP0 WORD 0 WORD 0 WORD 0 WORD 0 DACP1 WORD 0 WORD 0 WORD 0 WORD 0 CURPAGE WORD 0 SAVENTRY WORD 0 DMASK WORD :8000 AMASK WORD :4000 MMASK WORD :3000 PMASK WORD :0FFF TITL ****** * * -- INSP-- I * * INSPECTION & MODIFICATION OF MEMORY LOCATION * ****** INSP EQU $ INSP1 JST *TCRLF(X,Y) NEW LINE COPY *TADDR(X,Y),A GET 1ST PARM (MEM TO BE MODIFIED) COPY A,ADDRI SAVE IT COPY A,Q JST *TPADDR(X,Y) PUBLISH ADDRESS COPY ADDRI,X COPYU 0(X),A GET CONTENTS OF MEM LOC COPY Y,X JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE INSP3 EQU $ JST *TINP(X,Y) FETCH NEXT PARAMETER  COPY *TPFLG(X,Y),A GET PFLG JEQ A,INSP2 ANY PARAMETER(CHANGE)? COPY A,*TSTORE(X,Y)  FLAG MEMORY CHANGE COPY ADDRI,X COPY Q,A PUT CHANGE VALUE INTO -A- COPYU A,0(X)  COPY Y,X INSP2 EQU $ COPY *TTEST(X,Y),A GET TERMINATOR CLSN =',',A IS IT A 8  JMP MORE YES- GO GET NEXT CHANGE COPY ADDRI,Q REFERESH 'Q' COPY *TLASTS(X,Y),A FETCH TERMINATOR JEQ A,DBGRTN NO SPECIAL TERMINATOR,THEN GO TO DBG CLSN ='+',A  INCREMENT? JMP INCR CLSN ='-',A DECREMENT JMP DECR CLSN ='*',A INDIRECT JMP INDI CLSN ='X',A X2 JMP MULT CLSN ='/',A DIV BY 2  JMP DIV JMP *TERROR(X,Y) ELSE ERROR INCR ADD =2,Q DECR SUB =1,Q COPY Q,ADDRI  SAVE NEW ADDRESS COPY Q,*TADDR(X,Y) RESTORE NEW ADDRESS JMP INSP1 START AGAIN INDI  COPY ADDRI,X COPYU 0(X),A COPY Y,X INDI1 COPY A,*TADDR(X,Y) JMP INSP1 MULT COPY ADDRI,X  COPYU 0(X),A COPY Y,X SHIFT A,LO,1 MULTIPLY BY 2 JMP INDI1 DIV COPY ADDRI,X  COPYU 0(X),A COPY Y,X SHIFT A,RO,1 DIVIDE BY 2 JMP INDI1 MORE IMS ADDRI  NEXT LOCATION JMP INSP3 DO IT AGAIN DBGRTN EQU $ JMP *TDBG(X,Y) BACK TO DBG ADDRI WORD 0 ****** * * -- COMMA -- * COMMA ENT CLSN =',',A JMP *TERROR(X,Y) RTN COMMA  TITL ****** * * -- LIST -- * * LISTING CONSECUTIVE MEMORY LOCATIONS * * LIST EQU $ COPY *TCMND(X,Y),Q  LIST A MAP OPTION? CLSN ='P',Q JMP PRN0 YES JST GSZ NO,GET SIZE CLSN =CR,A CR JMP PRN JST *TINP(X,Y) INPUT ASCII CODE OPTION JST *TCOMMA(X,Y) ERROR IF TERMINATOR IS , CLSN =:A,Q ASCII OPTION 'A' JMP $+2 JMP *TERROR(X,Y) COPY Q,ATEMP JMP PRN PRN0 EQU $ COPY =64,A COPY A,WSIZE SET UP MAP SIZE FOR PRINT PRN EQU   $ COPY *TDIOFG(X,Y),A GET DESIRED OUTPUT MEDIA FLAG CLSN ='P',A IS IT LP OUTPUT JMP $+2  JMP PRN11 COPY *TLPCNT(X,Y),A LINES/PAGE COPY A,*TLNCNT(X,Y) COPY =TOF,A JST *TTYPLP(X,Y) DO TOP OF FORM PRN11 EQU $ JST *TCRLF(X,Y) NEW LINE COPY *TADDR(X,Y),A GET 1ST PARAMETER COPY A,SVWORD SAVE IT PRN1 EQU $ JST *TPADDR(X,Y) COPY =-8,A COPY A,SKIPCN COPY A,PRNTCT 8 WORDS/LINE COPY *TLASTS(X,Y),A GET LAST INPUT CLSN ='L',A  LIST MAP COMMAND? JMP PRN2MAP DO LIST W/O COPYU COMMAND (TABLE ACCESS IS ON) PRN2 COPY SVWORD,X  GET CONTENTS COPYU 0(X),A COPY Y,X RESTORE X WITH Y JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JST *TETEST(X,Y) NEXT FUNCTION IF DONE IMS PRNTCT JMP PRN2 COPY ATEMP,A CLSN =:A,A CHECK FOR ASCII OPTION JST ASCPR YES, GO OUTPUT ASCII CODE COPY SVWORD,A LATEST ADDRESS JST *TCRLF(X,Y) NEW LINE JMP PRN1 PRN2MAP COPY SVWORD,X GET CONTENTS COPY 0(X),A DONT USE COPYU IF LISTING MAP COPY Y,X RESTORE X WITH Y JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JST *TETEST(X,Y) NEXT FUNCTION IF DONE  IMS PRNTCT JMP PRN2MAP COPY SVWORD,A LATEST ADDRESS JST *TCRLF(X,Y) NEW LINE JMP PRN1 ASCPR ENT COPY PRNTCT,A FETCH NUMBER OF HEX DUMPED COPY A,TABCN SAVE TAB CONSTANT SUB SKIPCN,A -(-ELEMENTS PER LINE) NEG A,A -ELEMENTS TO PUBLISH IN ASCII DUMP  JEQ A,PRN7 DUMP COMPLETED, DO NEW LINE COPY A,PRNTCT CALCULATE HEAD OF ASCII ADD SVWORD,A  COPY A,SVWORD REFRESH WORD ADDRESS COPY TABCN,A FETCH TAB CONSTANT JEQ A,PRN5 NO TAB NEEDED PRN4 COPY =-5,A ESTABLISH SPACE COUNTER COPY A,SPACN JST *TSPACE(X,Y) OUTPUT A SPACE IMS SPACN BUMP SPACE COUNTER JMP $-2 CONTINUE UNTIL SPACED OUT IMS TABCN  BUMP TAB COUNTER JMP PRN4 CONTINUE TAB PRN5 COPY =-3,A ISSUE SPACES BETWEEN HEX & ASCII COPY A,SPACN JST *TSPACE(X,Y) OUTPUT A SPACE IMS SPACN JMP $-2 PRN6 COPY SVWORD,X  GET DATUM ADDRESS COPYU 0(X),A COPY Y,X SHIFT A,RO,8 POSITION HIGH ORDER BYTE SUB  =:7E,A SUBTRACT UPPER BOUNDARY OF ASCII SET JGT A,PRN61 ADD =:7E,A SUB =:20,A TEST FOR LOWER BOUND OF ASCII SET JLT A,PRN61 ADD =:20,A JMP $+2 PRN61 COPY =:2E,A INVALID ASCII CODE ISSUE SPACE JST *TTYP(X,Y) PUBLISH ON SPECIFIED I/O COPY *SVWORD,A FETCH DATUM ONCE MORE COPY SVWORD,X COPYU 0(X),A COPY Y,X RESTORE X WITH Y AND =:FF,A MASK T O LOW ORDER BYTE SUB =:7E,A TEST OFR UPPER BOUND OF ASCII SET JGT A,PRN62 TEST FOR VALID ASCII ISSUE SPACE IF NOT ADD =:7E,A ADD BACK TO ITS VALUE SUB =:20,A TEST FOR LOWER BOUND OF ASCII SET JLT A,PRN62 ADD =:20,A JMP $+2 PRN62 EQU $ COPY =:2E,A INVALID ASCII CODE ISSUE SPACE JST *TTYP(X,Y) PUBLISH ASCII IMS SVWORD BUMP MEMORY ADDRES TO NEXT DATUM NOP IMS PRNTCT BUMP WORDS/LINE COUNTER JMP PRN6 CONTINUE ASCII CUMP PRN7 RTN ASCPR  END OF THIS LINE RETURN * * WORD AREA * WSIZE WORD 0 PRNTCT WORD 0 ATEMP WORD 0 SKIPCN WORD 0 SPACN WORD  0 TABCN WORD 0 QSAVE WORD 0 TITL ****** * * -- GSZ -- * * GET AND CHECK SIZE/2ND PARAMETER FOR LIST,SEARCH,FILL8 COPY * RETURN: WSIZE = WORD SIZE (ENDING ADD - STARTING ADD) * 'A' = TERMINATOR ****** GSZ ENT  CLSN =',',A JMP $+2 PARAMETERS MUST BE SAPARATED BY , JMP *TERROR(X,Y) ELSE ERROR  JST *TINP(X,Y) GET 2ND PARAMETER COPY A,WSIZE SAVE TERM CHAR COPY Q,A GET 2ND PARAM IN AR COPY *TADDR(X,Y),Q GET FIRST PARAM IN QR CSM A,Q 2ND PARAM SHD BE >= 1ST  JMP GSZ1 PROBLEM - 2ND < 1ST NOP SUB Q,A GET ACTUAL LENGTH IN AR ADD =1,A GSZ3 EXCH WSIZE,A A=TERMN,WSIZE=SIZE RTN GSZ EXIT GSZ1 COPY *TCMND(X,Y),Q LOOK AT COMMAND CLSN ='L',Q IF LIST 2ND MAY BE OK JMP $+2 GSZ2 JMP *TERROR(X,Y) NO, ITS AN ERROR JLE A,GSZ2 CANT BE 0 OR NEG CSK A,=LLNTH MUST BE 1-LLNTH JMP GSZ3 OK JMP  GSZ2 ERROR JMP GSZ3 OK SVWORD WORD 0 1ST PARAMETER KEEPER TITL ****** * *  -- ETEST -- * * TEST FOR END OF PRINT/SRCH/COPY/FILL * INCREMENT STARTING ADD, DECREMENT WORD SIZE. (Q=WORDSIZE) ****** ETEST ENT COPY WSIZE,Q GET WORD COUNT IMS SVWORD BUMP ADDRESS BY 1 NOP IN CASE OF A ZERO SUB =1,Q DECREMENT WORD COUNT JEQ Q,$+3 ALL DONE, BACK TO DBG COPY Q,WSIZE RESTORE WORD COUNT LEFT RTN ETEST ELSE RETURN COPY *TCMND(X,Y),A GET COMMAND ID CLSN ='L',A WAS LAST CMND 'L' JMP ERTNT CLSN ='S',A  OR WAS IT 'S' JMP ERTNJ CLSN ='P',A MAP COMMAND? JMP ERTNP YES  JMP ERTN ERTNJ COPY *TDIOFG(X,Y),A GET OUTPUT FLAG CLSN ='T',A TTY OUTPUT JMP ERTN  GO BACK JST *TCRLF(X,Y) DO EXTRA CRLF JMP ERTN GO BACK ERTNT IMS PRNTCT  NOP COPY ATEMP,A HAS ASCII ASKED CLSN =:A,A JST ASCPR FINISH UP ASCII DUMP  COPY =0,A CLEAR ATEMP COPY A,ATEMP JMP ERTNJ ERTNP COPY *TMMUSTAT(X,Y),Q RESTORE MAP  STATUS BEFORE LEAVING OUT Q,LOADSTAT JMP ERTNJ FINISH UP ERTN JMP *TDBG(X,Y) BACK TO NEXT FUNCTION TITL ****** * * -- FILLP -- * * FILLING MEMORY WITH A CONSTANT VALUE * * ****** FILLP EQU $  JST GET2 GET 2ND,3RD & 4TH PARM COPY A,*TSTORE(X,Y) PUT * TO FLAG THIS COMMAND COPY *TADDR(X,Y),A IN 6,X GET USER MAP NUMBER AND =:000F,X GET MAP NUMBER ONLY JNE X,FIL2 IF NOT SYSTEM MAP JUMP COPY Y,X AROUND RANGE CHECK JST SINKCK  CHECK DEBUG NOT BEING CHANGED FIL2 COPY Y,X RESTORE AGAIN COPY A,SVWORD 1ST PARM COPY KEY,A FIL1 COPY SVWORD,X COPYU A,0(X) FILL A WORD COPY Y,X RESTORE X WITH Y JST ETEST CHECK FOR END ADD KEY1,A ADD INCREMENT/DECREMENT CONSTANT  JMP FIL1 LOOP TITL ****** * * -- GET2 -- * * GET 2ND, 3RD & 4TH PARAMETER. * KEY -- FILLER CONSTANT/3RD PARM-START ADD FOR COPY COMMAND * KEY1 -- INCREMENT/DECREMENT CONSTANT OR MASK(FOR SEARCH) * ****** GET2  ENT COPY =0,Q COPY Q,KEY1 INITIALIZE INCREMENT/DECREMENT KEEPER JST GSZ  GET 2ND PARM & SIZE TO BE FILLED CLSN =',',A THERE MUST BE A , FOR 3RD PARM JMP $+2 JMP *TERROR(X,Y) ERROR IF NO 3RD PARM JST *TINP(X,Y) GET 3RD PARM COPY Q,KEY SAVE FILL VALUE CLSN =',',A IS THERE A 4TH PARM? JMP $+2 JMP GOGET2 NO,GO BACK TO CALLER COPY A,NOMACH FLAG 4TH PARAMETER JST *TINP(X,Y) YES, GET 4TH PARM COPY Q,KEY1 SAVE INCREMENT/DECREMENT COUNT GOGET2 RTN GET2 BACK TO CALLER KEY WORD 0  FILLER KEEPER KEY1 WORD 0 INCREMENT/DECREMENT CONSTANT KEEPER TITL ****** * * -- SRCH -- * * SEARCH MEMORY * ****** SRCH EQU $ COPY =0,Q COPY Q,NOMACH INITIALIZE JST GET2 GET 2ND, 3RD & 4TH PARM CLSN =',',A IS THERE A 5TH PARM JMP SRCH00  YES GET 5TH PARM COPY =0,A EXCH A,NOMACH CLSN =',',A CHECK IF THERE WAS A 4TH PARM  JMP SRCH55 COPY =-1,Q COPY Q,KEY1 MASK OF :FFFF JMP SRCH11 NO, GO START SRCH SRCH55 EQU $ COPY KEY1,A GET LAST PARM CSK A,=0 NOP JMP SRCH11  COPY =-1,Q MASK OF :FFFF COPY Q,KEY1 ZERO MASK COPY *TLASTS(X,Y),A CLSN ='-',A MUST BE '-' JMP $+2 JMP *TERROR(X,Y) ELSE ERROR COPY A,NOMACH  SAVE '-' JMP SRCH11 START SEARCH SRCH00 EQU $ JST *TINP(X,Y) GET 5TH PARM  COPY *TLASTS(X,Y),A GET LAST TERMINATOR CLSN ='-',A JMP $+2 JMP *TERROR(X,Y) ILLEG AL PARM COPY A,NOMACH A NO-MACH SEARCH SRCH11 EQU $ COPY *TADDR(X,Y),A COPY A,SVWORD  GET 1ST PARM SRCH22 COPY SVWORD,X FETCH WORD ADDRESS IN X COPYU 0(X),A FETCH A WORD  COPY Y,X RESTORE X WITH Y REGISTER XOR KEY,A COMPARE TO MATCH VALUE AND  KEY1,A MASK IT JNE A,SRCH33 NO MATCH, CHECK IF NO MATCH DESIRED COPY NOMACH,A  JEQ A,FOUNDS MATCH FOUND, GO PRINT JMP SRCH44 SRCH33 COPY NOMACH,A CLSN ='-',A JMP  FOUNDS SRCH44 JST ETEST DO NEXT FUNCTION IF DONE, ELSE JMP SRCH22 LOOP FOUNDS JST *TCRLF(X,Y) NEW LINE COPY SVWORD,A GET MATCH ADDRESS JST *TPADDR(X,Y) COPY SVWORD,X GET MATCH ADDRESS COPYU 0(X),A GET MATCH VALUE COPY Y,X RESTORE X WITH Y JST *THEX(X,Y) PRINT MATCH VALUE JMP SRCH44 NOMACH WORD 0 MATCH - NO MATCH KEEPER TITL ****** * * -- SINKCK -- * * CHECK TO ENSURE DBG AREA IS NOT BEING MODIFIED * * ****** SINKCK ENT COPY SINKV1,Q CALCUATE END OF DEBUG ADD X,Q INTO Q REG CSM A,Q IS START OF WORD>END OF DBG?  JMP SINK1 NO, CHECK FURTHER RTN SINKCK YES,OK JMP SINK2 OVERLAP ERROR SINK1 COPY X,Q  CALCULATE START OF DBG SUB SINKV2,Q ADD *TWSIZE(X,Y),A CALCULATE END OF WORD SUB =1,A  CSM A,Q IS END OF WORDLAST G-REG? JMP ADR2 NO, DONT BOTHER NOP YES,REPLACE WORKING G-REG COPY A,ADRT2 WITH ONE NEARER TO ACTUAL. COPY Q,ADRT3 SAVE CURRENT G-REG NUMBER ADR2 EQU $ COPY Y,X  RESTORE X IMS ADRT4 BUMP POINTER ADD =1,Q BUMP REGISTER NO. CLSN = 36,Q DONE WITH ALL REGISTERS? JMP $+2 YES JMP ADR1 ND LOOP  COPY ADRT3,A ADD =1,A JEQ A,ADR4 NO APPLICABLE G-REG FOUND COPY ='=',A JST  *TTYP(X,Y) COPY ACTUAL,A CALCULATE G-REG OFFSET SUB ADRT2,A JST *THEX(X,Y) COPY ='G',A TYPE 'G' JST *TTYP(X,Y) COPY ADRT3,A REGISTER # FCONV EQU $  CONVERT & PRINT G-REG # SUB =10,A CONVERT TO ASCII JLT A,$+2 ADD =7,A ADD  ='9'+1,A JST *TTYP(X,Y) JMP ADR4 ADR4 EQU $ COPY =BLANK,A JST *TTYP(X,Y) RTN PADDR BACK TO CALLER * ACTUAL EQU CV01 ADRT2 EQU SVCV01 ADRT3 EQU CV02 ADRT4 EQU CV03 TITL ******* * -- SHEX -- DO HEX FOLLOWED BY A SPACE ******* SHEX ENT JST HEX COPY =' ',A JST TYP RTN SHEX ****** * -- HEX -- * TYPE 'A' AS 4 HEXADECIMAL DIGITS ****** * HEX ENT COPY A,ASV  SAVE 'A' SHIFT A,RO,12 IST DIGIT JST CONV GO PRINT SHIFT A,RO,8  2ND DIGIT JST CONV GO PRINT SHIFT A,RO,4 3RD DIGIT JST CONV  GO PRINT JST CONV GO PRINT RBIT 1,S RTN HEX BACK TO CALLER CONV ENT AND =:F,A MASK IT OFF SUB =10,A CONVERT TO HEX JLT A,$+2  JMP IF 0 THRU 9 ADD =7,A ELSE MAKE A THRU F ADD ='9'+1,A ADD ASCII OFFSET JST TYP TYPE DIGIT COPY ASV,A REFERESH 'A' RTN CONV LOOP ASV WORD 0 SAVE 'A' FOR HEX ROUTINE TITL ****** * * -- RKB -- INPUT CHARACTER * 'A' RETURNS WITH READ CHARACTER * STANDARD I/O DISTRIBUTER ADDRESS = :F * CHANNEL ADDRESS = :4 * LSB = 1 FOR CONTROL TRANSFER FUNCTION * 0 WORD TRANSFER FUNCTION ****** RKB ENT COPY DIOTY,Q GET INPUT DEVIE ADD 8 CHANNEL # COPY S,X COPY X,SAVES RBIT 8,S COPY D100,X RESET TTY CODE COPY D8618,A START,ECHO,NO INTERUPT COMMAND XNX Q OUT A,1 OUTPUT INITIALIZE CONTROL FUNCTION XNX Q IN 1,A INPUT TTY STATUS CONTROL FUNCTION SHIFT A,RO,4 SHIFT WORD RADY BIT IN OV JF OV,$-3 LOOP TILL WORD IS AVAILABLE (1 CHAR) XNX  Q IN 0,A GET A CHARACTER XNX Q OUT X,1 RESET TTY CONTROL FUNCTION AND =:7F,A AND OFF BIT 7 CSK A,='Z'+:20 ALLOW LOWER CASE INPUT CSK A,='A'+:20  JMP RKB1 NOP SUB =:20,A RKB1 EQU $ COPY SAVES,X COPY X,S REFRESH 'S'  COPY Y,X REFRESH 'X' WITH BASE ADDRESS RTN RKB BACK TO CALLER D100 WORD :100  RESET COMMAND WORD D8618 WORD :8618 START,ECHO SAVES WORD 0 TITL ****** * -- TYPCRT -- OUTPUT A CHARACTER FROM A REG * STANDARD IOD ADD = :F,CH ADD = 4 * LSB = 1 FOR CONTROL 0 FOR WORD TRANSFER * MOD BITS OF COMMAND WORD: * BIT 1 -- SELECT OUTPUT(1), SELECT INPUT(0) * 3 -- ECHO INCOMING WORD * 4 -- BRANCH ADDRESS * 9 -- BEGIN BRANCH * 10-- LOAD MODE FIELD BITS INTO MODE REG * 15-- DISABLE DMA ****** TYPCRT ENT COPY DIOTY,Q GET DIO ADDRESS 8 CHANNEL # COPY A,*TVALU(X,Y) SAVE VALUE TO BE PRINTED  COPY D8612,X START,REQUEST TO SEND,NO INTERRUPT XNX Q OUT X,1 INITIALIZE XNX Q OUT A,0 SEND A CHARACTER COPY D100,X RESET CODE XNX Q IN 1,A INPUT TTY STATUS WORD SHIFT A,RO,5 SHIFT TRANSMITTER BIT IN OV JT OV,$-3 LOOP TILL CHARACTER IS TRANSMITTED XNX Q IN 1,A INPUT STATUS AGAIN SHIFT A,RO,5 JF OV,$-3 LOOP TILL TTY/CRT IS READY TO RECEIVE XNX Q OUT X,1 RESET PICO COPY Y,X REFRESH 'X' WITH BASE ADDRESS COPY *TVALU(X,Y),A RESTORE VALUE TO BE PRINTED RTN TYPCRT BACK TO CALLER D8612 WORD :8612 DIOTY WORD :F8 TTY/CRT DIO ADD=:F8, CHANNEL # = 4 TITL ***** * * -- TYP -- OUT PUT PRINT CONTROL ROUTINE * 'A' IS DESTROYED AT RETURN * 'Q', 'X', & 'Y' ARE NOT DESTROYED * ****** TYP ENT COPY Q,INPTEM SAVE 'Q' COPY S,Q COPY Q,SAVES SAVE 'S' COPY *TCMND(X,Y),Q GET COMMAND ID CLSN ='A',Q DEVICE ASSIGNEMT? JMP TYPALL CLSN ='L',Q IS IT LIST? JMP TYPALL YES-CHECK IF LP OPTION SELECTED CLSN ='S',Q IS IT SEARCH? JMP TYPALL YES-CHECK IF LP OPTION SELECTED  CLSN ='Z',Q IS IT Z-STRING? JMP TYPALL YES-CHECK IF LP OPTION SELECTED CLSN  ='M',Q IS IT BUS MONITOR? BM JMP TYPALL YES-CHECK IF LP OPTION SELECTED BM  CLSN ='P',Q IS IT MAP COMMAND? JMP TYPALMAP YES-CHECK IF LP OPTION SELECTED JMP TYPSTD TYPALMAP EQU $ COPY *TLASTS(X,Y),Q IS THIS A 'PM' OR 'PMXXX,L' COMMAND CLSN ='L',Q  JMP $+2 ITS A 'PMXXXX,L' COMMAND, SO CONTINUE JMP TYPSTD ITS A 'PM' COMMAND SO DONT LIST TO COMMENT LP NOHOW! TYPALL EQU $ COPY DIOFLG,Q GET DESIRED OUTPUT MODIA FLAG CLSN ='T',Q IS IT TTY/CRT? JMP TYPSTD CLSN ='P',Q OR LP OUTPUT? JMP TYPOPT CLSN ='B',Q MUST BE BOTH JMP $+2 JMP *TERROR(X,Y) ELSE,ERROR JST TYPCRT DO CRT OUTPUT JMP TYPOPT DO LP OUTPUT DIOFLG WORD 0 OUTPUT OPTION  KEEPER LNCNT WORD 0 RUNNING COUNT OF LINESPRINTED DBG4:CNT EQU $ TO SHOW ON LOAD MAP LPCNT WORD  -39 DEFAULT LP LINES/PAGE DIOLP EQU :7F LP DIO ADD = :F, CHANNEL # = 7 TYPSTD JST TYPCRT  DO CRT JMP ENDTYP TYPOPT CLSN =LF,A LINE FEED? JMP $+2 YUP! GO CHECK LINE COUNT JMP DOLP NOP! DO PRINT LP IMS LNCNT INCREMENT LINES PRINTED JMP TYNAM COPY =TOF,A DO TOP OF FORM JST TYPLP DO TOF COPY *TLPCNT(X,Y),Q  LINES/PAGE COPY Q,LNCNT JMP $+2 GET OUT DOLP JST TYPLP PRINT A CHARACTER ENDTYP COPY SAVES,Q COPY Q,S RESTORE 'S' COPY INPTEM,Q RESTORE 'Q'  RTN TYP BACK TO CALLER DBG4:LP EQU $ TYNAM JST TYPLP NO-OP THIS LOC. IF AUTO-LF LP JMP ENDTYP TITL ****** * * -- TYPLP -- OUTPUT 'A' TO DIO LINE PRINTER * ****** TYPLP ENT COPY A,Q SAVE 'A' OUT A,DIOLP%1 OUTPUT CHARACTER TO PICO COPY D8610,A START DONT INTERRUPT OUT A,DIOLP%1;1 TELL PICO OUT A,DIOLP%1;1 COPY D100,X RESET INSTRUCTION TYPLP1 IN DIOLP%1;1,A GET STATUS FROM LP SHIFT A,RO,1 BUSY BIT TO OV JT OV,$-2 IF BUSY WAIT FOR IT OUT X,DIOLP%1;1 RESET LP PICO SHIFT X,RO,1 WASTE SOME TIME JNE X,$-1 COPY Y,X REFRESH 'X' COPY Q,A RESTORE 'A' RTN TYPLP  BACK TO CALLER D8610 WORD :8610 TITL VALU WORD 0 PARMANENT PARM VALUE KEEPER LASTSN WORD 0  LAST SPECIAL TERMINATOR KEEPER TEST WORD 0 LAST TERMINATOR KEEPER INPTEM WORD 0 ****** * *  -- INP -- INPUT A PARAMETER * * EXIT= 'Q' = 'VALU' = PARAMETER VALUE * 'TEST'= CURRENT TERMINATOR (, OR CR) * 'LASTSN' = NEXT TO LAST SPECIAL TERMINATOR (+-*X/) * 'A' = LAST TERMINATOR (, OR CR OR ;) ****** INPP27 WORD 0 BM INPP20 ENT  BM COPY INPP20,Q BM COPY Q,INP  BM COPY =1,Q BM JMP INP+2  BM INP ENT COPY =0,Q BM COPY Q,INPP27 BM COPY =0,Q INITIALIZE COPY Q,VALU  FINAL NEW VALUE KEEPER COPY Q,LASTSN SPECIAL TERMINATOR KEEPER (+-*X/) COPY Q,TEST  LAST TERMINATOR KEEPER (, OR CR) COPY Q,*TPFLG(X,Y) PARAMETER RECIEVED FLAG COPY Q,INPTEM  WORKING PARAMETER VALUE INPP1 JST *TRKB(X,Y) GET A CHARACTER CLSN ='R',A USER HARDWAR E REGISTER? JMP INPP4 CLSN =BLANK,A BLANK CHAR? JMP INPP9 CLSN ='G',A G-REGISTER? JMP INPP3 PROCESS GENERAL REGISTER CLSN ='L',A LIST MAP PARAMETER? JMP INPPA PROCESS CLSN =',',A , JMP INPP5 PROCESS CLSN =';',A  ; / JMP INPP5 PROCESS / CLSN ='+',A  + JMP INPP5 PROCESS CLSN ='-',A - JMP INPP5 PROCESS CLSN =CR,A VALID TERMINATOR JMP INPP5 CLSN ='*',A * - GO PROCESS  JMP INPP5 CLSN ='/',A / JMP INPP5 CLSN ='X',A X JMP INPP5  COPY INPP27,Q BM JEQ Q,INPP21 IF NOT INPP ENTRY...  BM CLSN ='=',A BM JMP INPP5 IF '='...  BM CLSN ='<',A BM JMP INPP5  IF '<'... BM CLSN ='>',A BM JMP  INPP5 IF '>'... BM CLSN =':',A BM  JMP INPP5 IF ':'... BM INPP21 JST CHK  BM EXCH A,INPTEM BUILD HEX VALUE SHIFT A,LO,4 SHIFT 4 LEFT INPP2 ADD INPTEM,A ADD VALUE COPY A,INPTEM SAVE CURRENT VALUE IMS *TPFLG(X,Y) PARAMETER ENTERED COPY =0,Q COPY Q,LASTSN JMP INPP1 INPP6 IMS *TPFLG(X,Y) FLAG PARM RECEIVED INPP5 CLSN =CR,A JMP $+2 COPY A,LASTSN EXCH A,TEST GET LAST SIGN (+-)& SAVE NEW COPY INPTEM,Q GET CURRENT WORKING PARM VALUE CLSN ='-',A NEGATE? NEG Q,Q YES, NEGATE THE VALUE COPY Q,A ADD VALU,A ADD IN OLD VALUE COPY A,VALU UPDATE PERMANENT VALUE COPY A,Q SAVE IT ALSO COPY =0,A COPY A,INPTEM NO CURRENT VALUE COPY TEST,A GET CURRENT TERMINATOR CLSN ='+',A IS IT PLUS? JMP INPP1 YES,GO GET MORE WORD CLSN ='-',A MAY BE IT IS MINUS JMP INPP1 YES,GET MORE WORD CLSN ='*',A IF IT IS * OR JMP INPP8 CLSN ='/',A / OR JMP INPP8 CLSN ='X',A X THEN NEXT MUST BE CR JMP INPP8 RTN INP END OF EXPRESSION, RETURN LPOOL * EVALUATE G-REGISTERS INPP3 JST *TRKB(X,Y) GET G-REGISTER NUMBER JST CHKG DEVELOP G REGISTER INDEX ADD A,X ADD BASE ADD TO INDEX   ADD GBASE,X ADD G:0-BASE OFFSET COPY 0(X),A GET REGISTER VALUE COPY Y,X  REFRESH 'X' TO BASE ADD JMP INPP2 * * EVALUATE HARDWARE R-REGISTERS INPP4 JST *TRKB(X,Y) GET R-REG NUMBER JST CHKR ADD Q,X ADD BASE ADD ABASE,X ADD AR-BASE OFSET COPY 0(X),A GET REGISTER VALUE COPY Y,X REFRESH 'X' TO BASE ADD JMP INPP2 INPP8 COPY A,LASTSN JST *TRKB(X,Y) READ LAST CHARECTER(MUST BE CR) COPY A,TEST CR  CLSN =CR,A AFTER SPECIAL TERMINATOR, IT RTN INP MUST BE CR ELSE ERROR JMP *TERROR(X,Y) ERROR INPP9 COPY ='+',A COPY A,LASTSN MAP BLANK TO + JST *TRKB(X,Y)  READ LAST CHA(MUST BE CR) CLSN =CR,A JMP INPP5 DO ALL ADJUSTMENT JMP *TERROR(X,Y)  AFTER BLANK CR MUST BE LAST CHAR INPPA COPY A,LASTSN SAVE 'L' AWAY JST *TRKB(X,Y) GET NEXT KEYBOARD INPUT  CLSN =CR,A BEST BE A CARRIAGE RETURN JMP INPP5 ALL OK JMP *TERROR(X,Y) ELSE ITS AN ERROR GBASE ************************************************* * C A R B U G - - - CARTOS SYSTEM DEBUG * * * COPYRIGHT 1980, COMPUTER AUTOMATION, INC. * ************************************************* * * REV A000 - ORIGINAL REVISION. MODIFICATION OF *  OS4 DEBUG TO INCLUDE MEMORY MANAGEMENT * UNIT (MMU) MANIPULATION, AND VIRTUAL * MEMORY USAGE. * 4/95 INSTRUCTIONS ADDED TO ENABLE MAP * DEBUGGING (COPYU). * BREAKPOINT NOW USES STRAP INSTEAD OF JST *0 * OWEN FITZIMONS AND DAN O'GARA JUNE 24 1980 * * REV A100 - CHANGE BREAKPOINT TO UTRAP * DAN O'GARA JULY 17 1980 * ************************************************ TITL LSI-4/95 CARTOS DEBUG (CARBUG) (XXXXX-XX-A100) NAM CARBUG NAM DBG4:LP NAM DBG4:CNT OPTIONS +:20  OBJNOTE '*** CARBUG.OBJ - REV A100 *** OPTIONS -:20 * USER MAY SUPPLY DESIRED DIO ADDRESS & CHANNEL # IN THE * FOLLOWING ORDER IN THE 'Q' REGISTER * BIT 4-7 --> DIO ADDRESS * BIT 1-3 --> CHANNEL NO * BIT 0 --> 0 ****** SEXT G:0,G:1,G:2,G:3,G:4,G:5 SEXT G:6,G:7,G:8,G:9,G:A,G:B SEXT G:C,G:D,G:E,G:F,G:G,G:H SEXT G:I,G:J,G:K,G:L,G:M,G:N SEXT G:O,G:P,G:Q,G:R,G:S,G:T SEXT G:U,G:V,G:W,G:X,G:Y,G:Z MACRO RTN JMP *#1 ENDM * REV: EQU 'A100' PROMCH EQU '*' PROM CHARACTER BELL EQU :7 BELL CHAR TOF EQU :C TOP OF FORM CR EQU :D CARRIAGE RETURN LF EQU :A LINE FEED BLANK EQU :20 BLANK CHAR ARROW EQU :5F BACK ARROW CHAR EQUAL EQU '=' LLNTH EQU 40 PERMISSIBLE LENGTH FOR LIST BRKPT EQU 0  BREAK POINT RETURN ADDRESS READMAPS EQU 6 READ MMU MAPS, FUNCTION CODE READSTAT EQU 5 READ MMU STATUS, FUNCTION CODE LOADDMA EQU 7 LOAD DMA # FUNCTION CODE LOADUSER EQU 6 LOAD USER # FUNCTION CODE LOADS  TAT EQU 5 LOAD MMU STATUS FUNCTION CODE TITL SHARABLE CARBUG: SYSTEM CARBUG: REL 0 CARBUG EQU $ STDIOD JST  BASE USRIOD JST OPTION OPTIONAL ENTRY FOR NON-STANDARD IOD BASE ENT SELP A,BMADDR%3+1 .  BM IMS BASE BASE HAS 'BASE' ADDRESS JST LOADCTX LOAD INITIAL CONTEXT BASE1 JST SAVE SAVE USER REGISTERS JMP HEADNG DO DEBUG HEADING ****** * * -- SUB-ROUTINE AND WORD CELL OFFSET FROM BASE PROGRAM -- * * SUB-ROUTINES * TDBG EQU $-BASE WORD DBG-BASE DBG ABSOLUTE OFFSET FROM BASE PROG TERROR EQU $-BASE WORD ERROR-BASE ERROR ABSOLUTE OFFSET FROM BASE PROG TRTN6 EQU $-BASE WORD RTN6-BASE TDMPRS EQU $-BASE WORD DMPRS-BASE DMPRS ABSOLUTE OFFSET FROM BASE PROG TMMUDMP EQU $-BASE WORD MMUDMP-BASE MMUDMP ABSOLUTE OFFSET FROM BASE PROG TRREG EQU $-BASE WORD RREG-BASE RREG ABSOLUTE OFFSET FROM BASE PROG TGREG EQU $-BASE WORD GREG-BASE GREG ABSOLUTE OFFSET FROM BASE PROG TINSP EQU $-BASE WORD INSP-BASE INSP ABSOLUTE OFFSET FROM BASE PROG TCOMMA EQU $-BASE WORD COMMA-BASE COMMA ABSOLUTE OFFSET FROM BASE PROG TSPACE EQU $-BASE WORD SPACE-BASE SPACE ABSOLUTE OFFSET FROM BASE PROG TLIST EQU $-BASE WORD LIST-BASE LIST  ABSOLUTE OFFSET FROM BASE PROG TFILLP EQU $-BASE WORD FILLP-BASE FILLP ABSOLUTE OFFSET FROM BASE PROG TSRCH EQU $-BASE WORD SRCH-BASE SRCH ABSOLUTE OFFSET FROM BASE PROG TCOPYP EQU $-BASE WORD COPYP-BASE COPYP ABSOLUTE OFFSET FROM BASE PROG TCRLF EQU $-BASE WORD CRLF-BASE CRLF ABSOLUTE OFFSET FROM BASE PROG TRKB EQU $-BASE WORD RKB-BASE RKB ABSOLUTE OFFSET FROM BASE PROG TTYP EQU $-BASE WORD TYP-BASE TYP ABSOLUTE OFFSET FROM BASE PROG THEX EQU $-BASE WORD HEX-BASE  HEX ABSOLUTE OFFSET FROM BASE PROG TUNSAV EQU $-BASE WORD UNSAVE-BASE UNSAVE ABSOLUTE OFFSET FROM BASE PROG TINP EQU $-BASE WORD INP-BASE INP ABSOLUTE OFFSET FROM BASE PROG TCHKR EQU $-BASE  WORD CHKR-BASE CHKR ABSOLUTE OFFSET FROM BASE PROG TCHKG EQU $-BASE WORD CHKG-BASE CHKG  ABSOLUTE OFFSET FROM BASE PROG TTYPCR EQU $-BASE WORD TYPCRT-BASE TPADDR EQU $-BASE WORD PADDR-BASE TSHEX EQU $-BASE WORD SHEX-BASE TGSZ EQU $-BASE WORD GSZ-BASE TTRAP EQU $-BASE WORD TRAP-BASE TSAVE EQU $-BASE WORD SAVE-BASE TCINTS EQU $-BASE WORD CINTS-BASE TUITS EQU $-BASE WORD  UITS-BASE TMETS EQU $-BASE WORD METS-BASE TNETS EQU $-BASE WORD NETS-BASE TSETS EQU $-BASE  WORD SETS-BASE TAETS EQU $-BASE WORD AETS-BASE TETEST EQU $-BASE WORD ETEST-BASE TTYPLP EQU $-BASE WORD TYPLP-BASE TZTRNG EQU $-BASE WORD ZTRING-BASE Z ABSOLUTE OFFSET FROM BASE PROG TMCMD EQU !  $-BASE BM WORD MCMD-BASE BM TINPP EQU $-BASE BM WORD INPP20-BASE .  BM * * WORD CELLS * TPFLG EQU $-BASE WORD PFLG-BASE PFLG ABSOLUTE OFFSET FROM BASE PROG TADDR EQU $-BASE WORD ADDR-BASE ADDR ABSOLUTE OFFSET FROM BASE PROG TVALU EQU $-BASE WORD  VALU-BASE VALU ABSOLUTE OFFSET FROM BASE PROG TLASTS EQU $-BASE WORD LASTSN-BASE LASTSN ABSOLUTE OFFSET FROM BASE PROG TTEST EQU $-BASE WORD TEST-BASE TEST ABSOLUTE OFFSET FROM BASE PROG TWSIZE EQU $-BASE WORD WSIZE-BASE WSIZE ABSOLUTE OFFSET FROM BASE PROG TSTORE EQU $-BASE WORD STORE-BASE STORE ABSOLUTE OFFSET FROM BASE PROG TSIZE EQU $-BASE WORD SIZE-BASE SIZE ABSOLUTE OFFSET FROM BASE PROG TKIND EQU $-BASE WORD KIND-BASE KIND ABSOLUTE OFFSET FROM BASE PROG TEXIT EQU $-BASE  WORD EXIT-BASE EXIT ABSOLUTE OFFSET FROM BASE PROG TMAPS EQU $-BASE WORD MAPS-BASE MAPS ABSOLUTE OFFSET FROM BASE PROG TMMUSTAT EQU $-BASE WORD MMUSTAT-BASE MMUSTAT ABSOLUTE OFFSET FROM BASE TDIOTY EQU $-BASE WORD DIOTY-BASE DIO ADDRESS KEEPER TCMND EQU $-BASE WORD CMND-BASE TLNCNT EQU $-BASE WORD LNCNT-BASE LINE COUNT KEEPER TDIOFG EQU $-BASE WORD DIOFLG-BASE 'T' OR 'P' OR 'B' FLAG KEEPER TLPCNT EQU $-BASE WORD LPCNT-BASE LINES/PAGE ON LP TSR EQU $-BASE WORD SR-BASE TITL ******** * * -- HEADING -- * ******** HEADNG EQU $ COPY ='T',A COPY A,*TDIOFG(X,Y) FLAG TO PRINT ON TTY/CRT JST HDNG1 HDNG2 COPY ='(',A ( JST *TTYP(X,Y) COPY =':',A  : JST *TTYP(X,Y) COPY BASE,A HEX ADDRESS ADD HBASE,A  JST *THEX(X,Y) CONVERT 'A' INTO 4 HEX DIGITS COPY ='-',A - JST *TTYP(X,Y)  COPY =':',A : JST *TTYP(X,Y) COPY HLENTH,A DBG LENGTH ADD X,A  DBG END ADDRESS SUB =1,A ADD HBASE,A JST *THEX(X,Y) COPY =')',A  ) JST *TTYP(X,Y) PRINT ) COPY =BELL,A JST *TTYP(X,Y) RING BELL COPY X,A 'A' = BASE ADDRESS ADD HBASE,A 'A' = HEADNG ADDRESS COPY A,*TEXIT(X,Y) INITIALIZE EXIT JMP *TRTN6(X,Y) CLEAR ANY BREAK POINTS HBASE WORD STDIOD-BASE HLENTH WORD TAIL-CARBUG TITL ****** * * -- SAVE -- * - ALL THE USER HARDWARE REGISTERS, CONSOLE WORD REGISTER AND * CONSOLE SENSE SWITCH ARE SAVED IN TEMPORARY REGISTERS. * - ALL THE BITS IN 'S' ARE SET TO ZERO EXCEPT 'XA' BIT, WHICH * IS NOT ALTERED * ****** SAVE ENT EXIT ADDRESS SAVED SIN 12 PROTECT 12 INSTRUCTIONS COPY CTXA+3" ,A COPY A,AR COPY CTXA+4,Q COPY Q,QR COPY CTXA+5,X COPY X,XR COPY CTXA+6,Y COPY Y,YR COPY CTXA+2,A COPY A,SR COPY CTXA+1,A COPY A,LR COPY CTXA+7,A  COPY A,KR COPY =:0040,A TURN XA BIT COPY A,S EXCEPT 'XA' ALL BITS = 0  IN 4,A GET CONSOLE WORD REGISTER COPY A,CDR JT SS,SAVE11 IF SENSE SWITCH TRUS, SAVE 1 COPY =0,A ELSE STORE 0 IN TEMP. SSW REGISTER JMP SAVE22 ELSE SAVE 0 IN TEMPORARY SSW REG SAVE11 COPY =1,A SAVE22 COPY A,SSWR COPY BASE,X COPY X,Y X + Y HAVE BASE PROG ADDRESS RTN SAVE BACK TO CALLER TITL OPTION ENT COPY A,BASE SAVE 'A'  COPY OPTION,A EXCH A,BASE ESTABLISH BASE ADDRESS & RESTORE 'A' JST SAVE GO PRESERVE USER ENVIORMENT COPY Q,*TDIOTY(X,Y) UPDATE DIO ADD JMP HEADNG DO HEADING TITL * * THIS ROUTINE SETS UP THE INITIAL CONTEXT * UPON ENTRY TO CARBUG SO THAT THE CONTEXT * POINTER IS INITIALIZED TO CARBUG'S CONTEXT SAVE AREA* * LOADCTX ENT COPY CTXB,A ADDRESS OF CONTEXT AREA COPY BASE,X X HAS 'BASE' ADDRESS COPY X,Y ADD A,X X POINTS TO CP AREA COPY INITP,A A HAS INITIAL PROGRAM COUNTER ADD Y,A A HAS BASE1 ABSOLUTE ADDRESS COPY A,0(X) STORE PC COUNTER IN CP AREA COPY INITS,A GET NEW STATUS WORD COPY A,2(X) STORE NEW S REGISTER COPY INITK,A GET NEW K REGISTER COPY A,7(X) PUT IN CONTEXT AREA COPY INITL,A GET NEW L REGISTER COPY A,2(X) PUT IN CP AREA LCNTX 0(X) LOAD CONTEXT NOTE PC IS WRONG RTN LOADCTX RETURN * * INITP WORD BASE1-BASE INITS WORD :0040 XA ON AND USER OFF CTXB WORD CTXA-BASE CTXA RES 9,0 INITL WORD :0000 INITK WORD :FFFF INITIAL K REGISTER LPOOL ****** * * -- UNSAVE -- * RESTORE ALL USER HARDWARE REGISTERS * ****** UNSAVE ENT COPY QR,Q COPY Q,CTXA+4 COPY XR,X COPY X,CTXA+5 COPY AR,A COPY A,CTXA+3 COPY YR,Y COPY Y,CTXA+6 COPY SR,A COPY  A,CTXA+2 COPY LR,A COPY A,CTXA+1 COPY KR,A COPY A,CTXA+7 COPY CDR,A SELP A,4 COPY SSWR,A OUT A,0 SIN 5 SIN 3 RTN UNSAVE TITL HDNG1 ENT  JST *TCRLF(X,Y) NEW LINE COPY ='C',A C JST *TTYP(X,Y) COPY ='A',A A  JST *TTYP(X,Y) COPY ='R',A R JST *TTYP(X,Y) COPY ='B',A B JST *TTYP(X,Y) COPY ='U',A U JST *TTYP(X,Y) COPY ='G',A G JST *TTYP(X,Y) COPY =BLANK,A JST *TTYP(X,Y) COPY =REV:%-24,A JST *TTYP(X,Y) COPY =REV:%-16&:FF,A #  JST *TTYP(X,Y) COPY =REV:%-8&:FF,A JST *TTYP(X,Y) COPY =REV:&:FF,A JST *TTYP(X,Y) COPY =BLANK,A JST  *TTYP(X,Y) RTN HDNG1 TITL * WORD CELLS * EXIT WORD 0 TEMPORARY SAVE 'P' AR WORD 0 TEMPORARY SAVE 'A' QR WORD 0 TEMPORARY SAVE 'Q' XR WORD 0 TEMPORARY SAVE 'X' YR WORD 0 TEMPORARY SAVE 'Y' KR WORD 0 TEMPORARY SAVE 'K' LR  WORD 0 TEMPORARY SAVE 'L' SR WORD 0 TEMPORARY SAVE 'S' CDR WORD 0  TEMPORARY SAVE CONSOLE WORD REGISTER SSWR WORD 0 TEMPORARY SAVE SENSE SWITCH * * MMU REGISTERS * MAPS WORD 0 MMU DMA AND USER MAP NUMBERS MMUSTAT WORD 0 MMU STATUS * * GENERAL REGISTERS 0 - 9, A - Z * G0 EQU $ START OF GENERAL REGISTER AREA WORD G:0,G:1,G:2,G:3,G:4,G:5  WORD G:6,G:7,G:8,G:9,G:A,G:B WORD G:C,G:D,G:E,G:F,G:G,G:H WORD G:I,G:J,G:K,G:L,G:M,G:N WORD G:O,G:P,G:Q,G:R,G:S,G:T WORD G:U,G:V,G:W,G:X,G:Y,G:Z TITL KIND WORD 0 TYPE OF REGISTER DUMP ****** * * -- DMPRS -- DUMP REGISTERS * ****** DMPRS ENT JST *TCRLF(X,Y) NEW LINE COPY =BELL,A  ISSUE BELL CODE JST *TTYP(X,Y) COPY KIND,A FETCH TYPE OF REGISTER DUMP JST *TTYP(X,Y) JST SPACE PRINT A BLANK JST SPACE PRINT A BLANK COPY ='P',A  'P' REGISTER JST TYP:EQ ISSUE P = COPY *TEXIT(X,Y),A FETCH ADDRESS JST  *TPADDR(X,Y) COPY ='A',A JST TYP:EQ ISSUE A= COPY AR,A 'A' VALUE  JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='Q',A JST TYP:EQ ISSUE Q=  COPY QR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='X',A JST TYP:EQ ISSUE X= COPY XR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='Y',A JST TYP:EQ ISSUE Y= COPY YR,A JST *THEX(X,Y) PRINT 'Y' JST *TCRLF(X,Y) JST SPACE PRINT A BLANK JST SPACE PRINT A BLANK JST SPACE  PRINT A BLANK COPY ='K',A JST TYP:EQ ISSUE K= COPY KR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='L',A JST TYP:EQ ISSUE L= COPY LR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='S',A JST TYP:EQ ISSUE S= COPY SR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='D',A JST  TYP:EQ ISSUE D= COPY CDR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='C',A JST TYP:EQ ISSUE C= COPY SSWR,A JST *THEX(X,Y) PRINT SENSE SWIT$  COPYU 0(X),A COPY Y,X SHIFT A,RO,1 DIVIDE BY 2 JMP INDI1 MORE IMS ADDRI  NEXT LOCATION JMP INSP3 DO IT AGAIN DBGRTN EQU $ JMP *TDBG(X,Y) BACK TO DBG ADDRI WORD 0 ****** * * -- COMMA -- * COMMA ENT CLSN =',',A JMP *TERROR(X,Y) RTN COMMA  TITL ****** * * -- LIST -- * * LISTING CONSECUTIVE MEMORY LOCATIONS * * LIST EQU $ COPY *TCMND(X,Y),Q  LIST A MAP OPTION? CLSN ='P',Q JMP PRN0 YES JST GSZ NO,GET SIZE CLSN =CR,A CR JMP PRN JST *TINP(X,Y) INPUT ASCII CODE OPTION JST *TCOMMA(X,Y) ERROR IF TERMINATOR IS , CLSN =:A,Q ASCII OPTION 'A' JMP $+2 JMP *TERROR(X,Y) COPY Q,ATEMP JMP PRN PRN0 EQU $ COPY =64,A COPY A,WSIZE SET UP MAP SIZE FOR PRINT PRN EQU  $ COPY *TDIOFG(X,Y),A GET DESIRED OUTPUT MEDIA FLAG CLSN ='P',A IS IT LP OUTPUT JMP $+2  JMP PRN11 COPY *TLPCNT(X,Y),A LINES/PAGE COPY A,*TLNCNT(X,Y) COPY =TOF,A JST *TTYPLP(X,Y) DO TOP OF FORM PRN11 EQU $ JST *TCRLF(X,Y) NEW LINE COPY *TADDR(X,Y),A GET 1ST PARAMETER COPY A,SVWORD SAVE IT PRN1 EQU $ JST *TPADDR(X,Y) COPY =-8,A COPY A,SKIPCN COPY A,PRNTCT 8 WORDS/LINE COPY *TLASTS(X,Y),A GET LAST INPUT CLSN ='L',A  LIST MAP COMMAND? JMP PRN2MAP DO LIST W/O COPYU COMMAND (TABLE ACCESS IS ON) PRN2 COPY SVWORD,X  GET CONTENTS COPYU 0(X),A COPY Y,X RESTORE X WITH Y JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JST *TETEST(X,Y) NEXT FUNCTION IF DONE IMS PRNTCT JMP PRN2 COPY ATEMP,A CLSN =:A,A CHECK FOR ASCII OPTION JST ASCPR YES, GO OUTPUT ASCII CODE COPY SVWORD,A LATEST ADDRESS JST *TCRLF(X,Y) NEW LINE JMP PRN1 PRN2MAP COPY SVWORD,X GET CONTENTS COPY 0(X),A DONT USE COPYU IF LISTING MAP COPY Y,X RESTORE X WITH Y JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JST *TETEST(X,Y) NEXT FUNCTION IF DONE  IMS PRNTCT JMP PRN2MAP COPY SVWORD,A LATEST ADDRESS JST *TCRLF(X,Y) NEW LINE JMP PRN1 ASCPR ENT COPY PRNTCT,A FETCH NUMBER OF HEX DUMPED COPY A,TABCN SAVE TAB CONSTANT SUB SKIPCN,A -(-ELEMENTS PER LINE) NEG A,A -ELEMENTS TO PUBLISH IN ASCII DUMP  JEQ A,PRN7 DUMP COMPLETED, DO NEW LINE COPY A,PRNTCT CALCULATE HEAD OF ASCII ADD SVWORD,A  COPY A,SVWORD REFRESH WORD ADDRESS COPY TABCN,A FETCH TAB CONSTANT JEQ A,PRN5 NO TAB NEEDED PRN4 COPY =-5,A ESTABLISH SPACE COUNTER COPY A,SPACN JST *TSPACE(X,Y) OUTPUT A SP% ACE IMS SPACN BUMP SPACE COUNTER JMP $-2 CONTINUE UNTIL SPACED OUT IMS TABCN  BUMP TAB COUNTER JMP PRN4 CONTINUE TAB PRN5 COPY =-3,A ISSUE SPACES BETWEEN HEX & ASCII COPY A,SPACN JST *TSPACE(X,Y) OUTPUT A SPACE IMS SPACN JMP $-2 PRN6 COPY SVWORD,X  GET DATUM ADDRESS COPYU 0(X),A COPY Y,X SHIFT A,RO,8 POSITION HIGH ORDER BYTE SUB  =:7E,A SUBTRACT UPPER BOUNDARY OF ASCII SET JGT A,PRN61 ADD =:7E,A SUB =:20,A TEST FOR LOWER BOUND OF ASCII SET JLT A,PRN61 ADD =:20,A JMP $+2 PRN61 COPY =:2E,A INVALID ASCII CODE ISSUE SPACE JST *TTYP(X,Y) PUBLISH ON SPECIFIED I/O COPY *SVWORD,A FETCH DATUM ONCE MORE COPY SVWORD,X COPYU 0(X),A COPY Y,X RESTORE X WITH Y AND =:FF,A MASK TO LOW ORDER BYTE SUB =:7E,A TEST OFR UPPER BOUND OF ASCII SET JGT A,PRN62 TEST FOR VALID ASCII ISSUE SPACE IF NOT ADD =:7E,A ADD BACK TO ITS VALUE SUB =:20,A TEST FOR LOWER BOUND OF ASCII SET JLT A,PRN62 ADD =:20,A JMP $+2 PRN62 EQU $ COPY =:2E,A INVALID ASCII CODE ISSUE SPACE JST *TTYP(X,Y) PUBLISH ASCII IMS SVWORD BUMP MEMORY ADDRES TO NEXT DATUM NOP IMS PRNTCT BUMP WORDS/LINE COUNTER JMP PRN6 CONTINUE ASCII CUMP PRN7 RTN ASCPR  END OF THIS LINE RETURN * * WORD AREA * WSIZE WORD 0 PRNTCT WORD 0 ATEMP WORD 0 SKIPCN WORD 0 SPACN WORD  0 TABCN WORD 0 QSAVE WORD 0 TITL ****** * * -- GSZ -- * * GET AND CHECK SIZE/2ND PARAMETER FOR LIST,SEARCH,FILL8 COPY * RETURN: WSIZE = WORD SIZE (ENDING ADD - STARTING ADD) * 'A' = TERMINATOR ****** GSZ ENT  CLSN =',',A JMP $+2 PARAMETERS MUST BE SAPARATED BY , JMP *TERROR(X,Y) ELSE ERROR  JST *TINP(X,Y) GET 2ND PARAMETER COPY A,WSIZE SAVE TERM CHAR COPY Q,A GET 2ND PARAM IN AR COPY *TADDR(X,Y),Q GET FIRST PARAM IN QR CSM A,Q 2ND PARAM SHD BE >= 1ST  JMP GSZ1 PROBLEM - 2ND < 1ST NOP SUB Q,A GET ACTUAL LENGTH IN AR ADD =1,A GSZ3 EXCH WSIZE,A A=TERMN,WSIZE=SIZE RTN GSZ EXIT GSZ1 COPY *TCMND(X,Y),Q LOOK AT COMMAND CLSN ='L',Q IF LIST 2ND MAY BE OK JMP $+2 GSZ2 JMP *TERROR(X,Y) NO, ITS AN ERROR JLE A,GSZ2 CANT BE 0 OR NEG CSK A,=LLNTH MUST BE 1-LLNTH JMP GSZ3 OK JMP  GSZ2 ERROR JMP GSZ3 OK SVWORD WORD 0 1ST PARAMETER KEEPER TITL ****** * *  -- ETEST -- * * TEST FOR END OF PRINT/SRCH/COPY/FILL * INCREMENT STARTING ADD, DECREMENT WORD SIZE. (Q=WORDSIZE) ****** ETEST ENT COPY WSIZE,Q GET WORD COUNT IMS SVWORD BUMP ADDRESS BY 1 NOP&  IN CASE OF A ZERO SUB =1,Q DECREMENT WORD COUNT JEQ Q,$+3 ALL DONE, BACK TO DBG COPY Q,WSIZE RESTORE WORD COUNT LEFT RTN ETEST ELSE RETURN COPY *TCMND(X,Y),A GET COMMAND ID CLSN ='L',A WAS LAST CMND 'L' JMP ERTNT CLSN ='S',A  OR WAS IT 'S' JMP ERTNJ CLSN ='P',A MAP COMMAND? JMP ERTNP YES  JMP ERTN ERTNJ COPY *TDIOFG(X,Y),A GET OUTPUT FLAG CLSN ='T',A TTY OUTPUT JMP ERTN  GO BACK JST *TCRLF(X,Y) DO EXTRA CRLF JMP ERTN GO BACK ERTNT IMS PRNTCT  NOP COPY ATEMP,A HAS ASCII ASKED CLSN =:A,A JST ASCPR FINISH UP ASCII DUMP  COPY =0,A CLEAR ATEMP COPY A,ATEMP JMP ERTNJ ERTNP COPY *TMMUSTAT(X,Y),Q RESTORE MAP STATUS BEFORE LEAVING OUT Q,LOADSTAT JMP ERTNJ FINISH UP ERTN JMP *TDBG(X,Y) BACK TO NEXT FUNCTION TITL ****** * * -- FILLP -- * * FILLING MEMORY WITH A CONSTANT VALUE * * ****** FILLP EQU $  JST GET2 GET 2ND,3RD & 4TH PARM COPY A,*TSTORE(X,Y) PUT * TO FLAG THIS COMMAND COPY *TADDR(X,Y),A IN 6,X GET USER MAP NUMBER AND =:000F,X GET MAP NUMBER ONLY ********e;760301000030760301000030811215131158e@760301000030760301000030811215131156e:' 760301000030760301000030760301000030e760301000030760301000030760301000030760301000030760301000030760301000030e(Oa8112041057470081120410575925811204110134de,z8112041058097581120410581450811204105814de/08112041058237581120410583275811204105832d eH <8112041058450081120410585025811204105850d(  eN 8112041102062581120411021250811204110212d) * + , - . / 0 ?. DISKTEST ASMDISKTEST MAPDIRE SYS DISKTEST TXT DISKTEST BINTIGER,TIGER BURNING BRIGHTIN THE FOREST OF THE NIGHTWHAT IMMORTAL HAND OR EYE COULD FRAME THY FEARFUL SYMMETRY   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ1 KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ TIGER,TIGER BURNING BRIGHT T IN THE FOREST OF THE NIGHT WHAT IMMORTAL HAND OR EYE COULD FRAME THY FEARFUL SYMMETRY   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ T R BURNING BRIGHTIN THE FOREST OF THE NIGHTWHAT IMMORTAL HAND OR EYE COULD FRAME THY FEARFUL SYMMETRY   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  NOT A-Z, MAY BE 0-9 NOP AND =:001F,A MASK OUT UNDESIRED BITS ADD =9,A +9 FOR 10 THRU 36 VALUE OF A-Z JMP CHKG2A GOT INDEX, GET OUT NOW CHKG1A CSK A,='9' 9 OR LESS? JMP $+2 YES JMP *TERROR(X,Y) NOT 0-9, ILLEGAL DIGIT CSK A,='0' JMP *TERROR(X,Y) NOT 0-9, ILLEGAL DIGIT NOP AND =:000F,A MASK OUT UNDESIRED DIGIT CHKG2A RTN CHKG GOT IT, BACK TO CALLER TITL ****** * * -- CHK -- * CONVERT ASCII CHARACTER (0-9,A-F)ONLY) TO HEX, IF NOT IN * RANGE OF HEX,GO TO ERROR ROUTINE FOR ILLEGAL CHARACTER * ENTER 'A' = ASCII CHARACTER * EXIT 'A' = HEX DIGIT * ****** CHK ENT SUB ='9'+1,A TEST FOR DECIMAL DIGIT JGE A,CHK2 NOT DECIMAL DIGIT ADD =10,A GOT DECIMAL JGE A,CHK3 CHK1 JMP *TERROR(X,Y) NOT A NEXADECIMAL DIGIT CHK2 SUB =13,A -13 JGE A,CHK1 NOT A THRU F ADD =6,A +6  JLT A,CHK1 NOT A THRU F ADD =10,A +10 FOR VALUES 10 THRU 15 CHK3 JMP *CHK  BACK TO CALLER TITL ******* * -- Z -- * PARM 1 - HEAD LINK WORD ADDRESS * PARM 2 - # OF WORDS PER LINK LIST * PARM 3 - LINK OFFSET * LINK WORD POINTS TO THE NEXT LINK WORD, SO START OF THE NEXT * LINK LIST WILL BE LI2 NK WORD-LINK OFFSET(3RD PARM). * ******* ZTRING EQU $ CLSN =',',A 2ND PARM? # OF WORDS/LINK JMP  $+2 JMP ZT1 NO, USE LAST VALUES JST *TINP(X,Y) YES, GET 2ND PARM COPY Q,ZP1 SAVE # OF WORDS/LINK CLSN =',',A 3RD PARM? LINK OFFSET JMP $+2 JMP ZT1 NO, USE LAST VALUE JST *TINP(X,Y) GET 3RD PARM-LINK OFFSET COPY Q,ZP2  SAVE LINK OFFSET JST *TCOMMA(X,Y) ERROR IF , IS TERMINATOR ZT1 JST *TCRLF(X,Y) NEW LINE  COPY ZP1,Q GET # OF WORDS/LINK COPY *TADDR(X,Y),A GET HEAD LINK WORD ADDRESS COPY A,ZP0 SAVE START ADDRESS ZT2 COPY ZP0,X GET A LINKED WORD COPYU 0(X),A GET FROM USER SPACE COPY Y,X RESTORE X WITH Y JST *TSHEX(X,Y) PRINT IT IMS ZP0  NEXT WORD SUB =1,Q DECREMENT WORD COUNT JNE Q,ZT2 NOT DONE YET?  COPY ZP0,A SUB ZP1,A BACK TO BEGINING ADD ZP2,A + LINK OFFSET COPY A,X COPY 0(X),A COPY Y,X REFERESH 'X' COPY A,*TADDR(X,Y) NEW LINK LIST ADDRESS JNE A,ZT1 START AGAIN COPY *TDIOFG(X,Y),A GET OUTPUT FLAG CLSN ='T',A  TTY OUTPUT JMP $+2 JST *TCRLF(X,Y) DO EXTRA CRLF JMP *TDBG(X,Y) ALL DONE * ZP0  WORD 0 LINK ADDRESS KEEPER ZP1 WORD :A # OF WORDS/LINK KEEPER ZP2 WORD 0  LINK OFFSET KEEPER ZERROR JMP *TERROR(X,Y) # OF WORDS < 1 TITL  BM ****** BM *  BM * --- M--- M COMMAND HEADER. BM *  BM ****** BM  SPACE 2 BM MCMD EQU $  BM JST *TRKB(X,Y) GET THE SECOND COMMAND CHARACTER. BM CLSN ='M',A  BM JMP MMCMD IF 'M'... BM CLSN ='L',A  BM JMP MLCMD IF 'L'... BM CLSN ='C',A BM JMP MCCMD IF 'C'... BM  JMP *TERROR(X,Y) ELSE ERROR... BM SPACE 2  BM C3BIT EQU 6 =C3 ENABLE BIT. BM C2BIT EQU 5 =C2 ENABLE BIT. BM C1BIT EQU 4 =C1 ENABLE BIT. BM ANDBIT EQU 7 C3 1<=X<=C2 ENABLE BIT. BM ORBIT EQU 8 XC2 ENABLE. BM MDMASK EQU :0008 . BM MEMASK EQU :0200 . BM MIMASK EQU :0400 . BM MRMASK EQU :0002 .  BM MWMASK EQU :0001 . BM MDBIT EQU 3 MONITOR ALL DMA ENABLE BIT. BM MEBIT EQU 9 RESET WHEN MATCH ENABLE BIT. BM MIBIT EQU 10 INTERRUPT WHEN MATCH ENABLE BIT. BM MRBIT EQU 1 MONITOR NON-DMA READS ENABLE BIT. BM MWBIT EQU 0  MONITOR NON-WORD WRITES ENABLE BIT. BM BMADDR EQU :16 BUS MONITOR INTERRUPT ADDRESS. BM FBIT EQU 7 INSTRUCTION FETCH INDICATOR. BM IBIT EQU 4 INTERRUPT REQUEST INDICATOR.  BM DBIT EQU 0 DMA ACCESS INDICATOR. BM RWBIT EQU 3 READ/WRITE INDICATOR. BM X1OP WORD 0 BM X1 WORD 0  BM X2OP WORD 0 BM X2 WORD :FFFF BM X3OP WORD 0 BM X3  WORD 0 BM TITL  BM MLSKIP WORD 77 . BM MLXLOC WORD 0 X LOCATION.  BM MLYLOC WORD 0 Y LOCATION. BM MLCSKP WORD 0  SKIP COUNT. BM MLCENT WORD 0 ENTRIES. BM MLCTMS WORD  0 TIMES TO DISPLAY ENTRIES. BM ****** BM * BM * --- ML --- LIST BUS MONITOR FIFO.  BM * BM ******  BM SPACE 1 BM MLCMD COPY =1,A . BM COPY A,MLXLOC . BM COPY =80,Q COMPUTE THE BM COPY Q,MLSKIP BOTTOM FENCE BM  COPY Q,MLYLOC AND THE TOP FENCE. BM MLC51 IN BMADDR%3+0,A .  BM JNE A,$+2 . BM COPY Q,MLSKIP THE BOTTOM FENCE. BM SUB INLINE,A INLINE HOLDS MAINLINE ENTRY ADDRESS JNE A,$+2 .  COPY Q,MLYLOC TOP FENCE. BM SUB =1,Q SCAN FOR 4  BM JGT Q,MLC51 AND TRY IT AGAIN. BM COPY BMMRBS,A .  BM TBIT 14,A . BM JF OV,$+2 COPY Q,MLSKIP IF ENTRY THROUGH BUS MONITOR. BM COPY MLYLOC,Q NORMALIZE  BM SUB MLSKIP,Q THE TOP BM JEQ Q,MLC52+1 COPY Q,MLYLOC  LOCATION. BM COPY =80,Q . BM TBIT 14,A NORMALIZE BM JT OV,MLC52 THE BM SUB MLSKIP,Q BOTTOM LOCATION. BM MLC52 COPY Q,MLSKIP  BM SPACE 1 BM *  BM * PARSE THE USER'S COMMAND LINE. BM *  BM JST *TINP(X,Y) GET A COMMAND CHARACTER. BM CLSN  =CR,A . BM JMP MLC20 IF 'CR', THEN DEFAULT... BM  COPY Q,MLXLOC SET THE LOWER LIMIT. BM JST *TINP(X,Y) GET THE SECOND PARAMETER.  BM CLSN =CR,A . BM JMP MLC21  BM MLC22 JMP *TERROR(X,Y) IF NOT TERMINATED WITH A 'CR'... BM MLC20 CLSN =:F8,Q  . BM JMP MLC27 IF 'ML*' COMMAND... BM JNE  Q,MLC21 IF TWO OPERANDS... BM COPY MLSKIP,Q IF ONE OPERAND THEN SET DEFAULT. BM MLC21 COPY Q,MLYLOC SET THE TOP LOCATION. BM MLC27 EQU $ .  BM SPACE 1 BM *  BM * CALCULATE FIFO MOVEMENT FOR THE START. BM *  BM COPY MLSKIP,A CALCULATE THE BM SUB MLYLOC,A NUMBER OF FIFO ENTRIES BM JLT A,MLC22 TO SKIP. BM MLC23 COPY A,MLCSKP BM COPY MLYLOC,A CALCULATE  BM SUB MLXLOC,A THE NUMBER BM ADD =1,A OF ENTRIES TO  BM JLE A,MLC22 PROCESS. BM COPY A,MLCENT . BM SPACE 1 BM *  BM * SKIP THE APPROPRIATE NUMBER OF ENTRIES. BM * 5  BM COPY MLCSKP,Q  BM MLC25 JLE Q,MLC24 IF DONE SKIPPING... BM IN BMADDR%3+1,A SKIP AN ENTRY.  BM SUB =1,Q BM JMP MLC25  BM SPACE 1 BM *  BM * OUTPUT TRANSLATED FIFO ENTRIES. BM *  BM COPY *TDIOFG(X,Y),A GET DESIRED OUTPUT MEDIA FLAGG  BM JMP $+2 . BM JMP MLC24 .  BM CLSN ='P',A IS IT LP OUTPUT BM COPY *TLPCNT(X,Y),A LINES/PAGE BM COPY A,LNCNT . BM  COPY =TOF,A . BM JST *TTYPLP(X,Y) DO TOP OF FORM  BM MLC24 COPY MLCENT,A . BM NEG A,A .  BM COPY A,MLCTMS . BM JST *TCRLF(X,Y) DO A CARRIAGE RETURN TO START. BM MLC26 IN BMADDR%3+2,A . BM JEQ A,MLC290 IF FROM LOCATION 0... BM SUB =STDIOD,A . BM JLT A,MLC291 IF BELOW DEBUG... BM SUB =TAIL-STDIOD,A  BM JGT A,MLC291 IF ABOVE DEBUG... BM MLC290 JMP MLC38 .  BM MLC291 IN BMADDR%3+3,A . BM TBIT FBIT,A  BM JT OV,MLC30 IF INSTRUCTION FETCH... BM TBIT IBIT,A BM JT OV,MLC31 IF INTERRUPT... BM TBIT DBIT,A BM JT OV,MLC32 IF DMA ACCESS...  BM JMP MLC36 IF ANYTHING ELSE... BM MLC292 WORD -5 .  BM LPOOL * BM MLC30 COPY ='F',A FOR AN INSTRUCTION FETCH. BM JMP MLC33 BM MLC31 COPY ='I',A BM JMP MLC33  BM MLC32 COPY ='D',A BM MLC33 JST *TCRLF(X,Y) .  BM JST *TTYP(X,Y) . BM COPY =-5,A 6  . BM COPY A,MLC292 BM *  BM MLC36 IMS MLC292 . BM  JMP MLC360 . BM JST *TCRLF(X,Y) .  BM COPY =BLANK,A . JST *TTYP(X,Y) . JMP MLC33+2 .  BM MLC360 COPY =BLANK,A PAD WITH JST *TTYP(X,Y) A BLANK. BM IN BMADDR%3+2,A . BM JST *TPADDR(X,Y) .  BM IN BMADDR%3+3,A GET THE STATUS BM COPY A,Q  BM SHIFT A,RO,4 BM JST CONV  OUTPUT FIRST CHARACTER... BM COPY Q,A . BM JST CONV ...AND THEN THE SECOND. BM * BM TBIT RWBIT,Q BM COPY ='R',A .  BM JT OV,MLC35 . BM COPY ='W',A OTHERWISE ITS A WRITE. BM MLC35 JST *TTYP(X,Y) . BM COPY =BLANK,A  AND A BM JST *TTYP(X,Y) FINAL BLANK. BM MLC38 IN  BMADDR%3+1,A BUMP FIFO. BM IMS MLCTMS . BM JMP MLC26 DO ANOTHER ENTRY. BM *  BM * RE-ALLIGN THE FIFO AND EXIT. BM *  BM COPY MLCENT,Q BM ADD MLCSKP,Q  BM SUB =80,Q BM JGT  Q,$-1 BM SUB =1,Q BM MLC41 ADD =1,Q RECIRCULATE THE BM JGE Q,MLC40 FIFO TO ITS  BM IN BMADDR%3+1,A ORIGINAL POSITION. JMP MLC41 MLC40 JST *TCRLF(X,Y) DO ANOTHER CRLF SPACE 1 JMP *TDBG(X,Y) GO AWAY SPACE 2  BM LPOOL TITL BM MMC70 WORD 0 TEMP STORAGE. BM MMC71 WORD 0 TEMP. BM ******  BM * BM * 7 --- MM --- SET BUS MONITOR MODE BITS. BM *  BM ****** BM SPACE 1  BM MMCMD COPY BMMRBS,A CLEAR THE BM AND =:79F0,A MONITOR BITS BM COPY A,MMC70 AND PUT INTO TEMP STORAGE. BM JST *TRKB(X,Y) . BM CLSN =CR,A . BM  JMP MMC23 . BM JMP MMC24 .  BM MMC20 JST *TRKB(X,Y) GET A CHARACTER BM MMC24 COPY A,MMC71 HOLD CHARACTER IN TEMP. BM JST *TRKB(X,Y) GET THE TERMINATOR. BM COPY MMC71,Q RESTORE THE CHARACTER. BM EXCH MMC70,A SAVE THE TERMINATOR. BM CLSN ='D',Q . BM OR =MDMASK+:8000,A IF MONITOR ALL DMA... BM  CLSN ='E',Q . BM OR =MEMASK+:8000,A IF RESET WHEN MATCH...  BM CLSN ='I',Q . BM OR =MIMASK+:8000,A IF MONITOR INTERRUPTS... BM CLSN ='R',Q . BM OR =MRMASK+:8000,A IF MONITOR NON-DMA READS... BM CLSN ='W',Q . BM OR =MWMASK+:8000,A IF MONITOR NON-DMA WRITES... BM JLT A,$+2 . BM  JMP *TERROR(X,Y) . BM AND =:7FFF,A .  BM * BM EXCH MMC70,A  BM CLSN =',',A . BM JMP MMC20 TRY FOR ANOTHER PARAMETER... BM * BM MMC23 COPY MMC70,A . BM COPY A,BMMRBS BM  OUT A,BMADDR%3+4 OUTPUT MODE CONTROL. BM MMC22 COPY BMMRBS,A SET THE 'ON'  BM SBIT 15,A BUS MONITOR BM COPY A,BMMRBS FLAG.  BM * BM JMP *TDBG(X,Y) BY ! BM SPACE 4 * BM *  PERMANENT STORAGE FOR THE MONITOR REGISTERS. BM *  BM SPACE 1 BM X1OPP WORD 0 . 8  BM X2OPP WORD 0 . BM X3OPP WORD 0 .  BM X1P WORD 0 . BM X2P WORD 0  . BM X3P WORD 0 . BM TITL BM ******  BM * BM * --- MC --- SET BUS MONITOR CONTROL PARAMETERS. BM * BM ******  BM MCCMD JST MPARSE PARSE A USER COMMAND. BM JMP  MCC42 . BM * BM * SET THE PERMANENT MODE BITS. BM *  BM COPY X1,A . BM COPY A,X1P .  BM COPY X2,A . BM COPY A,X2P . BM COPY X3,A . BM COPY  A,X3P . BM * BM * CALCULATE A COMMAND WORD. BM *  BM COPY BMMRBS,A CLEAR COMPARE BITS. BM AND =:FE0F,A .  BM COPY X3OP,Q PROCESS THE C3 PARAMETER. BM COPY Q,X3OPP SET THE PERMANENT X3OP. BM JEQ Q,$+2 IF NO C3 PARAMETER... BM SBIT C3BIT,A . BM COPY X2OP,Q PROCESS THE C2 PARAMETER. BM  COPY Q,X2OPP SET THE PERMANEMT X2OP. BM CLSN ='=',Q .  BM SBIT C2BIT,A . BM CLSN ='>',Q .  BM SBIT ORBIT,A . BM CLSN =':',Q . BM SBIT ANDBIT,A . BM COPY X1OP,Q PROCESS THE C1 PARAMETER. BM COPY Q,X1OPP SET THE PERMANENT X3OP. BM  CLSN ='<',Q . BM SBIT ORBIT,A .  BM CLSN ='=',Q . BM SBIT C1BIT,A .  BM COPY A,BMMRBS . BM OUT A,BMADDR%3+4 OU9 TPUT THE CONDITION CODES. BM MCC42 EQU $ . BM COPY X1P,A OUTPUT BM OUT A,BMADDR%3+1 THE BM  COPY X2P,A CX BM OUT A,BMADDR%3+2 PARAMETERS.  BM COPY X3P,A . BM OUT A,BMADDR%3+3 .  BM JMP MMC22 GO SET THE 'ON' BUS MONITOR BIT. BM TITL  BM MPRS20 WORD 0 TEMP BM MPRS70 WORD  0 ZERO. BM MPRS74 WORD -4 . BM * BM * PARSE THE 'MC' COMMAND USER LINE.  BM * BM SPACE 1  BM MPARSE ENT . BM COPY =:FFFF,Q  . BM COPY Q,X2 . BM JST  *TINPP(X,Y) . BM CLSN =CR,A COMPARE FOR NO PARAMETERS. BM MPRS23 JMP MPRS26 . BM *  BM EXCH MPRS70,A . BM COPY A,X1 ZERO  BM COPY A,X1OP THE BM COPY A,X2OP LOCATIONS. BM COPY A,X3 . BM COPY A,X3OP . BM EXCH MPRS70,A . BM *  BM EXCH MPRS74,A .  BM COPY A,MPRS20 SET LIMIT COUNT TO -4. BM EXCH MPRS74,A .  BM JMP MPRS22 . BM *  BM MPRS21 CLSN =CR,A . BM JMP MPRS24 . BM JST *TINPP(X,Y) . BM MPRS22 CLSN ='=',A IF '='... BM JMP MPRS30 .  BM CLSN ='<',A IF '<'... BM JMP MPRS40 .  BM CLSN ='>',A IF '>'... BM JMP MPRS50 .  BM CLSN =':',A IF ':'... BM JMP MP: RS60 . BM JMP *TERROR(X,Y) . BM MPRS24 IMS MPARSE . BM RTN MPARSE .  BM JMP *TERROR(X,Y) OTHERWISE... BM LPOOL MPRS26 JST *TCRLF(X,Y) .  BM COPY ='C',A . BM JST *TTYP(X,Y) . BM COPY ='1',A . BM  JST *TTYP(X,Y) . BM COPY ='=',A .  BM JST *TTYP(X,Y) . BM COPY X1P,A .  BM JST *TSHEX(X,Y) PRINT THE C1 REGISTER. BM COPY ='C',A .  BM JST *TTYP(X,Y) . BM COPY ='2',A . BM JST *TTYP(X,Y) . BM  COPY ='=',A . BM JST *TTYP(X,Y) .  BM COPY X2P,A . BM JST *TSHEX(X,Y) PRINT THE C2 REGISTER. BM COPY ='C',A . BM JST *TTYP(X,Y) .  BM COPY ='3',A . BM JST *TTYP(X,Y) . BM COPY ='=',A . BM  JST *TTYP(X,Y) . BM COPY X3P,A .  BM JST *TSHEX(X,Y) PRINT THE C3 REGISTER. BM COPY ='M',A .  BM JST *TTYP(X,Y) . BM COPY ='=',A .  BM JST *TTYP(X,Y) . BM COPY BMMRBS,A . BM AND =:3FFF,A AND OUT THE FLAG BITS. BM  JST *TSHEX(X,Y) PRINT THE MODE REGISTER. BM JST *TCRLF(X,Y) .  BM JMP MPRS24+1 . BM TITL  BM * BM * MC - PROCESS A '='.  BM * BM SPACE 1 BM MPRS30 IMS MPRS20 BM  JMP $+2 BM JMP *TERROR(X,Y) IF TOO MANY PARAMETERS... ;  BM JST *TINP(X,Y) GET THE PARAMETER. BM COPY A,MPRS35 SAVE THE TERMINATOR. BM COPY ='=',A . BM EXCH X3OP,A  BM JEQ A,MPRS31 IF X3OP WAS BLANK... BM EXCH X2OP,A . BM JEQ A,MPRS32 IF X2OP WAS BLANK... BM  EXCH X2OP,A BM EXCH X1OP,A  BM JEQ A,MPRS33 IF X1OP WAS BLANK... BM JMP *TERROR(X,Y) WHAT, ALL ARE FULL ! ERROR. BM MPRS31 COPY Q,X3 BM JMP MPRS34  BM MPRS32 COPY Q,X2 BM JMP MPRS34 BM MPRS33 COPY Q,X1 BM MPRS34 COPY MPRS35,A RESTORE THE TERMINATOR. BM JMP MPRS21 BY !  BM MPRS35 WORD 0 TEMPORARY TERMINATOR STORAGE. BM SPACE 2  BM * BM * MC - PROCESS A '<'.  BM * BM SPACE 1  BM MPRS40 IMS MPRS20 BM  JMP $+2 BM MPRS42 JMP *TERROR(X,Y) ERROR.  BM EXCH X1OP,A . BM JNE A,MPRS42 IF X2OP WAS NOT BLANK... BM MPRS41 JST *TINP(X,Y) GET THE PARAMETER. BM COPY Q,X1 .  BM JMP MPRS21 BY ! BM SPACE 2  BM * BM *  MC - PROCESS A '>'. BM *  BM SPACE 1 BM MPRS50 IMS MPRS20  BM JMP $+2 BM JMP *TERROR(X,Y) IF TOO MANY PARAMETERS... BM EXCH X2OP,A . BM JNE A,MPRS42 IF X1OP WAS NOT BLANK... BM MPRS51 JST *TINP(X,Y) . BM  COPY Q,X2 . BM JMP MPRS21 BY !  BM SPACE 2 BM * <  BM * MC - PROCESS A ':'. BM *  BM SPACE 1 BM MPRS60 IMS MPRS20  BM JMP $+2 BM MPRS62 JMP *TERROR(X,Y) BM EXCH X2OP,A  BM JNE A,MPRS62 IF POSITION WAS FULL... BM EXCH X1,Q  BM JNE Q,MPRS62 IF X1 WAS FULL... BM IMS MPRS20  BM JMP $+2 BM JMP *TERROR(X,Y) BM JST *TINP(X,Y) GET THE SECOND PARAMETER. BM COPY Q,X2 BM COPY A,X1OP MAKE X1OP NON-ZERO.  BM JMP MPRS21 BY ! BM LPOOL TAIL EQU $ END CARBUG  COPY Q,X2 . BM JMP MPRS21 BY !  BM SPACE 2 BM * CH RTN DMPRS BACK TO CALLER TITL ***** * * -- MMUDMP -- * DUMP MMU REGISTERS * ***** MMUDMP ENT JST *TCRLF(X,Y) ISSUE NEW LINE COPY =BELL,A RING HIS BELL JST *TTYP(X,Y) JST SPACE JST SPACE JST SPACE COPY ='D',A PRINT DMA MAP NUMBER JST TYP:EQ 'D=' COPY MAPS,A GET BOTH MAP NUMBERS AND =:00F0,A MASK TO DMA ONLY SHIFT A,RO,4 GET INTO PRINT POSITION JST *TSHEX(X,Y) PRINT IT COPY ='U',A  PRINT USER MAP NUMBER JST TYP:EQ 'U=' COPY MAPS,A AND =:000F,A MASK TO USER MAP ONLY JST *TSHEX(X,Y) PRINT IT COPY MMUSTAT,Q GET MMU STATUS COPY ='A',A 'A=' TABEL ACCESS ENABLE BIT JST MMUSUB PRINT IT OUT COPY ='T',A 'T=' TRANSLATION ENABEL BIT JST MMUSUB PRINT IT OUT COPY ='C',A 'C=' CACHE ENABLE BIT JST TYP:EQ COPY =0,A SHIFT Q,RO,2 SKIP OVER 'DONT CARE' BIT JF OV,$+2 BIT SET? COPY =1,A YES JST *THEX(X,Y) NO, PRINT IT JST *TCRLF(X,Y) NEXT LINE JST SPACE SPACE OVER JST SPACE  JST SPACE COPY ='R',A 'R=' RESTRICTED CACHE HITS ENABLE BIT JST MMUSUB COPY ='H',A 'H=' CACHE HIT INDICATOR BIT JST MMUSUB COPY ='P',A 'P=' CACHE PARITY ERROR BIT JST MMUSUB COPY ='L',A 'L=' ERROR LIGHT INDICATOR BIT JST MMUSUB RTN MMUDMP ALL DONE TITL ***** * * -- MMUSUB=  -- * COMMON STUFF FOR MMUDMP * ***** MMUSUB ENT JST TYP:EQ PRINT 'LETTER=' COPY =0,A SHIFT Q,RO,1 SHIFT STATUS BIT INTO OVERFLOW JF OV,$+2 OV SET? COPY =1,A YES JST *TSHEX(X,Y) NO, PRINT IT RTN MMUSUB RETURN TITL ****** * * -- TYP:EQ -- * PUBLISH CONTENTS OF 'A' REGISTER FOLLOWED BY '=' * ****** TYP:EQ ENT JST *TTYP(X,Y) PUBLISH CHARACTER FROM 'A' COPY ='=',A EQUAL SIGN JST *TTYP(X,Y) PUBLISH EQUAL SIGN RTN TYP:EQ BACK TO CALLER ******* * * -- SPACE -- * ******* SPACE ENT COPY =BLANK,A JST *TTYP(X,Y) RTN SPACE TITL CPNEW EQU $ WORD :0040 WORD :FFFF JMP *RTNPT JMP TO BREAK POINT RETURN HANDLER CPNWA WORD CPNEW-BASE CPNWB WORD :00A2 CPNWC WORD :00A3 CPNWD WORD :5C35 SAVE CONTEXT INSTR. SKELETON RTNPT WORD RTN ****** * -- DBG -- * EXIT: ADDR -- 1ST PARAMETER * SIZE -- INDEX TO G OR R REGISTER * KEY -- COMMAND ID *  TEST -- TERMINATOR * LASTSN -- LAST SPECIAL TERMINATOR ****** DBG EQU $ COPY CPNWA,A ADD X,A GET LOCATION OF CONTEXT AREA COPY A,*CPNWC SET UP TRAP COPY CPNWD,A SET UP USER TRAP LOCATION WITH SCNTX INST. COPY A,*CPNWB . FOR RETURN FROM BREAKPOINT COPY =0,A COPY A,CMND  INITIALIZE COMMAND KEEPER JST *TCRLF(X,Y) NEW LINE COPY =PROMCH,A GET PROM CHARACTER  JST *TTYPCR(X,Y) JST *TRKB(X,Y) READ COMMAND ID COPY A,CMND SAVE FUNCTION ID  CLSN ='Y',A IS IT SINGLE STEP ? /JPL15NOV78 JMP NEXT YES, PROCESS IT /JPL15NOV78 CLSN ='Q',A IS IT STEP BACK ? JMP NEXT YES, DO IT CLSN =BLANK,A  BLANK=COMMENT MODE JMP COM DO COMMENT CLSN ='A',A DEVICE ASSIGNMENT?  JMP DEVICE CLSN ='T',A TRAP INTERCEPT? JMP *TTRAP(X,Y) CLSN ='G',A GENERAL REGISTER JMP $+2 YES,GO CALCULATE REGISTER INDEX JMP DBGR ELSE CHECK IF HARDWARE REGISTER JST *TRKB(X,Y) READ ANOTHER CHARACTER. G-REG NO. JST *TCHKG(X,Y) DEVELOP INDEX TO G-REG COPY A,SIZE SAVE INDEX IN 'SIZE' JMP DBG1 DBGR CLSN ='R',A IS IT HARDWARE REGISTER? JMP $+2 YES, GO DEVELOP INDEX JMP DBGDV GO CHECK FOR DUMP/VERIFY/LOADER JST *TRKB(X,Y) READ R-REG NO CLSN =CR,A JUST R COMMAND? JMP ALLR  YES, GO DUMP ALL R-REGISTERS JST *TCHKR(X,Y) GET R-REG INDEX COPY Q,SIZE SAVE INDEX TO R-REG JMP DBG1 DBGDV EQU $ CLSN ='P',A MMU COMMAND P JMP $+2  JMP DBGDV1 NO IN READMAPS,A YES, GET MAP VALUES COPY A,*TMAPS(X,Y) IN READSTAT,> A GET STATUS COPY A,*TMMUSTAT(X,Y) JST *TRKB(X,Y) GET NEXT CHARACTER CLSN ='M',A  MAP/PAGE PM JMP PMCOM JMP TO PM COMMAND CLSN =CR,A JMP ALLP P ONLY, DUMP ALL VALUES JST *TCHKR(X,Y) CHECK INDEX TO P VALUES COPY Q,SIZE SAVE INDEX DBGDV1 EQU $  CLSN ='M',A BM JMP *TMCMD(X,Y) IF BUS MONITOR COMMAND...  BM DBG1 JST *TINP(X,Y) GET 1ST PARAMETER COPY Q,ADDR SAVE 1ST PARAMETER COPY CMND,Q GET FUNCTION ID COMMAND CLSN ='B',Q NEXT JMP BRK BREAK-POINT B CLSN ='C',Q JMP *TCOPYP(X,Y) COPY C CLSN ='F',Q JMP *TFILLP(X,Y) FILL F  CLSN ='L',Q JMP *TLIST(X,Y) LIST L CLSN ='S',Q JMP *TSRCH(X,Y) SEARCH S CLSN ='J',Q JMP JMPP JUMP J CLSN ='I',Q JMP *TINSP(X,Y) INSPECT I CLSN ='G',Q JMP *TGREG(X,Y) G-REG G CLSN ='R',Q  JMP *TRREG(X,Y) R-REG R CLSN ='Z',Q JMP *TZTRNG(X,Y) CHAN Z CLSN ='P',Q JMP *TRREG(X,Y) MMU-REG P JMP *TERROR(X,Y) ELSE ERROR ALLR COPY =BLANK,A COPY A,*TKIND(X,Y) JST *TDMPRS(X,Y) DO REGISTER DUMP JMP DBG BACK TO DBG ALLP JST *TMMUDMP(X,Y) DO MMU DUMP JMP DBG BACK TO DEBUG ADDR WORD 0 1ST PARM KEEPER SIZE WORD 0 G + R REGISTER INDEX KEEPER CMND WORD 0 COMMAND ID KEEPER TRNT WORD RTN-BASE RETURN ADDRESS OFFSET FROM BASE SAVE2 WORD 0 TEMP CELL LPOOL TITL ****** * * -- A -- DEVICE ASSIGNMENT COMMAND * * ALX X = T(TTY), P(PRINTER), B(BOTH) -- LIST OUTPUT DEVICE * ****** DEVICE EQU $ JST *TRKB(X,Y) READ 2ND CHAR COPY A,SAVE2 SAVE IT JST *TRKB(X,Y)  READ 3RD CHAR COPY A,ADDR SAVE 3RD PARMT/P/B JST *TRKB(X,Y) READ CR CLSN  =CR,A JMP $+2 JMP *TERROR(X,Y) NO CR ERROR COPY SAVE2,A GET 2ND PARM P/L  CLSN ='L',A LIST OPTION JMP $+2 JMP *TERROR(X,Y) ERROR IF NOT 'P' OR 'L' COPY ADDR,A GET 3RD PARM T/P/B CLSN ='T',A TTY/CRT OPTION? JMP DEV2 CLSN ='P',A PRINTER OPTION? JMP DEV1 CLSN ='B',A BOTH DESIRED? JMP DEV1 JMP *TERROR(X,Y) ERROR IF NOT T/P/B DEV1 COPY *TLPCNT(X,Y),A OUTPUT DEVICE IS EITHER LP OR COPY A,*TLNCNT(X,Y) BOTH CRT/LP. DO A TOP FOR LP COPY ='P',A COPY A,*TDIOFG(X,Y) COPY =TOF,A  DO TOP OF FORM JST *TTYP(X,Y) DO TOP OF FORM DEV2 COPY ADDR,A COPY A,*TDIOFG(X,Y) SAVE OUT? PUT DEVICE DESIRED ENDAS JMP *TDBG(X,Y) BACK TO DBG TITL * -- COM -- * COMMENT MODE COM JST *TRKB(X,Y) FETCH A CHARACTER CLSN =CR,A END OF COMMENT? JMP *TDBG(X,Y) YES, BACK TO DBG JMP COM CONTINUE COMMENT MODE ****** * * -- J COMMAND -- JUMP FUNCTION * JMPP EQU $  COPY *TPFLG(X,Y),Q ANY INPUT JEQ Q,JMPP1 IF NO EXIT INPUT USE OLD ONE COPY ADDR,A  GET 1ST PARM - JUMP LOCATION COPY A,*TEXIT(X,Y) USER RETURN ADD COPY *TTEST(X,Y),A GET LAST CHARACTER CLSN =',',A MORE PARAMETERS? JMP BRK YES, GO DO BREAK POINT JMPP1 EQU $ COPY *TTEST(X,Y),A GET LAST TERMINATOR CLSN =',',A PARM MUST NOT ENT WITH COMMA JMP ERROR JST *TCRLF(X,Y) NEW LINE * ITERATION COUNT BP EXITS THROUGH HERE / JMPP2 EQU $ / COPY Y,X REFRESH 'X' WITH BASE ADR /  COPY BMMRBS,A . BM TBIT 15,A  BM AND H3FFF,A . BM COPY A,BMMRBS .  BM COPY =0,A . BM JF OV,$+2  BM COPY BMON,A BM COPY A,BMCONT BM COPY BMVEC,A SET BM  COPY A,*H96 UP BM COPY BMVEC+1,A INTERRUPT  BM COPY A,*H97 VECTOR. BM COPY *TEXIT(X,Y),A GET RETURN ADD COPY A,*CTAA COPY A,INLINE SAVE FOR BUS MONITOR LIST JST *TUNSAV(X,Y) RE-STORE USER ENVIORMENT BMCONT NOP TURN ON BUSMON (SET SKIP COUNT ON BOARD TO 7) COPY *BASA,A GET CONTEXT AREA 2 COPY *CTAB,X 4 ADD A,X 5 LCNTX 0(X) LOAD CONTEXT AND AWAY 7 H97 WORD :97 H96  WORD :96 INLINE WORD 0 USER INLINE -P- ADDRESS ****** * -- ERROR -- * ERROR FORMAT ERROR COPY =ARROW,A  JST *TTYPCR(X,Y) JMP RTN6X GO FIX BREAK POINTS ALLRX JMP ALLR OUT OF RANGE LINK *  .TO MAINTAIN BINARY RELOCATABILITY * BMON SELP A,BMADDR%3+0  BM BMMRBS WORD 0 SAVE FOR THE MONITOR BITS. BM BMVEC JST *$+1 .  BM WORD RTNBM . BM H3FFF WORD :3FFF .  BM CTAB WORD CTXB BASA WORD BASE CTAA WORD CTXA TITL ****** * * -- BRK -- BREAK POINT COMMAND * * FORMAT OF COMMAND IS : * BAAAA[;CCCC][,AAAA][;CCCC][,AAAA][;CCCC][,AAAA][;CCCC] * WHERE@  B=COMMAND , AAAA=ADDRESS , CCCC=ITERATION COUNT * ****** BRK EQU $ ADD SVTBL1,X ADD OFFSET TO BASE  COPY X,SVTBL BREAK POINT TABLE REAL ADDRESS COPY Y,X RESTORE 'X' COPY *TCMND(X,Y),A GET COMMAND ID CLSN ='J',A WAS COMMAND A 'J' JMP BRK2 YUP! GO DO REGULAR BREAK POINT CLSN ='B',A IS IT A NORMAL BP COMMAND ? /JPL15NOV78 JMP BRK1 YES, PROCESS NORMAL BP /JPL15NOV78 COPY *TEXIT(X,Y),Q GET CURRENT P-REG /JPL15NOV78 CLSN ='Y',A IS IT STEP FORWARD ONE? ADD =1,Q GET NEXT LOC AS BP ADDRESS /JPL15NOV78 CLSN ='Q',A IS IT STEP BACK ONE? SUB =1,Q YES,GET CURRENT LOC-1 AS BP ADD JMP BRK3 PUT IT IN BP TABLE /JPL15NOV78 BRK1 EQU $ /JPL15NOV78  COPY PFLG,A ANY PARAMETER JEQ A,BRK7 COPY *TADDR(X,Y),Q GET 1ST PARAMETER FOR 'B' COMMAND JMP BRK2+1 DO BREAK POINT BRK2 JST *TINP(X,Y) FETCH NEXT PARAMETER COPY BRKCNT,A # OF BREAKPOINTS CURRENTLY CLSN =4,A MORE THAN 4 JMP ERROR ERROR BRK3 EQU $ /JPL15NOV78 IMS BRKCNT COUNT BREAKPOINTS  COPY Q,X GET ADDRESS OF BREAK-POINT IN -X- COPYU 0(X),A GET USER INSTRUCTION IMS SVTBL COPY A,*SVTBL SAVE USER INSTRUCTION COPY UTRAP0,A SUBSTITUTE UTRAP AT REQUESTED BREAKPOINT  COPYU A,0(X) IMS SVTBL COPY X,*SVTBL SAVE INSTRUCTION ADDRESS COPY Y,X  RESTORE X WITH Y COPY *TTEST(X,Y),A FETCH TERMINATOR XOR Q,Q CLEAR ITERATION COUNT  /JPL11NOV78 CLSN =';',A IS ITERATION COUNT GIVEN /JPL11NOV78 JMP BRK4 YES, PROCESS IT /JPL11NOV78 JMP BRK5 JUMP IF NO ITERATION COUNT /JPL11NOV78 RTN6X JMP RTN6  LINK TO MAINTAIN BIN. RELOCATABILITY BRK4 EQU $ /JPL11NOV78 JST *TINP(X,Y) GET ITERATION COUNT /JPL11NOV78 JGT Q,$+2 SKIP IF COUNT > 0 /JPL11NOV78  XOR Q,Q INDICATE NO COUNT SPECIFIED /JPL11NOV78 SHIFT Q,LO,1 DOUBLE COUNT  /JPL11NOV78 NEG Q,Q NEGATE IT FOR INDEX /JPL11NOV78 BRK5 EQU $  /JPL11NOV78 IMS SVTBL BUMP TABLE ADDRESS /JPL11NOV78 COPY Q,*SVTBL SAVE ITERATION COUNT /JPL11NOV78 COPY =1,A GET FLAG /JPL11NOV78  JNE Q,$+2 SKIP IF COUNT NOT SPECIFIED /JPL11NOV78 XOR A,A CLEAR FLAG IF NOT /JPL11NOV78 IMS SVTBL BUMP TABLE ADDRESS /JPL11NOV78 COPY A,*SVTBL SAVE BREAKPOINT FLA AG /JPL11NOV78 COPY *TTEST(X,Y),A GET THE TERMINATOR CHARACTER /JPL11NOV78 CLSN =',',A ANOTHER PARAMETER ? /JPL11NOV78 JMP BRK2 PROCESS NEXT PARAMETER /JPL11NOV78 JMP  JMPP1 IF NO MORE, GO BACK TO USER /JPL11NOV78 BRK6 JMP ALLRX DO R-REGISTER DUMP & BACK TO DBG BRK7 EQU $ JMP *TERROR(X,Y) NO PARAMETERS, ERROR * * WORD SECTION * PFLG WORD 0 INPUT PARM FLAG BRKCNT WORD 0 BREAK POINT COUNT KEEPER SVTBL1 WORD SVBRK-BASE-1 SVTBL WORD 0 * BP QUEUE : 0=INSTRUCTION,1=ADDRESS,2=COUNT,3=FLAG SVBRK RES 4*4,0 BREAK POINT QUEUE UTRAP0 UTRAP A,0  BREAK POINT INSTRUCTION JMPP2X JMP JMPP2 TO MAINTAIN BIN. RELOCATABILITY LPOOL TITL ****** * * -- RTN -- RETURN FROM BREAK POINT * * ****** TEMP WORD 0 MASK WORD 0 RTNADD WORD 0 RTN EQU $ SIN 7  . BM SELP A,BMADDR%3+1 . BM JST SAVE COPY CTXA,A GET CONTEXT'S -P- REGISTER SUB =1,A -P- - 1 = CURRENT -P- COPY A,*TEXIT(X,Y) SAVE IT COPY A,RTNADD COPY BRKCNT,A FETCH BREAK POINT COUNT JNE A,RTN2 RTN1 COPY ='D',A FLAG AS DUMMY BREAK POINT COPY Y,X REFERESH 'X' WITH BASE ADD COPY A,*TKIND(X,Y) JMP RTN4 RTN2 NEG A,A -BREAK POINT COUNT COPY A,MASK SET INTERROGATION COUNTER COPY *TEXIT(X,Y),A FETCH RETURN ADDRESS COPY SVTBL,X BREAK POINT SAVE QUEUE ADDRESS SUB =4,X ADJUST BP TABLE ADDRESS /JPL11NOV78 RTN3 EQU $  /JPL11NOV78 CSK A,2(X) COMPARE WITH TABLE ENTRY /JPL11NOV78 NOP JMP RTN5  BUMP INDEX REGISTER * FOUND BREAKPOINT IN TABLE COPY 3(X),A GET ITERATION COUNT /JPL11NOV78 JEQ A,RTN3A JUMP IF NO ITERATION COUNT /JPL11NOV78 * IT'S AN ITERATION COUNT BREAKPOINT  COPY 4(X),A GET BREAKPOINT FLAG /JPL11NOV78 COPY A,TEMP SAVE BREAKPOINT FLAG  /JPL11NOV78 COPY X,A SAVE TABLE INDEX /JPL11NOV78 COPY 1(X),Q GET USER INSTRUCTION /JPL11NOV78 COPY 2(X),X GET LOCATION /JPL11NOV78 EXCH Q,0(X)  SWAP INSTRUCTION/JST *0 /JPL11NOV78 ADD TEMP,X GET PRIOR/NEXT INSTRUCTION /JPL11NOV78 EXCH Q,0(X) PLACE BREAKPOINT THERE /JPL11NOV78 EXCH A,X SWAP TABLE ADDRESS/LOCATION /JPL11NOV78 COPY Q,1(X) SAVE THIS INSTRUCTION /JPL11NOV78 COPY A,2(X) SAVE IT'S LOCATION  /JPL11NOV78 COPY TEMP,Q GET BREAKPOINT FLAG /JPL11NOV78 NEG Q,Q POINT TO NEXT/PRIOR /JPL11NOV78 COPY Q,4(X) RESTORE BREAKPOINT FLAG /JPL11NOV78 IMS 3(B X) BUMP ITERATION COUNT /JPL11NOV78 NOP COUNT NOT DONE, RETURN /JPL11NOV78  JMP JMPP2X DONE, RETURN, STOP NEXT TIME /JPL11NOV78 RTN3A EQU $  /JPL11NOV78 COPY ='B',A REAL BREAK POINT COPY Y,X REFERESH 'X' WITH BASE ADD  COPY A,*TKIND(X,Y) RTN4 EQU $ JST *TDMPRS(X,Y) DO REGISTER DUMP COPY *TKIND(X,Y),A CLSN ='D',A IF DUMMY BRK POINT, THEN BUMP TO IMS *TEXIT(X,Y) NEXT EXECUTABLE LOCATION JMP RTN6 RESTORE ANY OUTSTANDING BRK POINTS RTN5 SUB =4,X BUMP INDEX TO BRK POIN TABLE  IMS MASK BUMP COUNTER JMP RTN3 JMP RTN1 RTN6 EQU $ COPY BRKCNT,A  # OF BREAK POINTS JNE A,$+3 COPY Y,X JMP *TDBG(X,Y) IF BRKCNT = 0, BACK TO DBG COPY SVTBL,X CURRENT SAVE TABLE ADDRESS SUB =4,X UPDATE TABLE ADDRESS COPY X,SVTBL  AND PUT IT BACK COPY 1(X),A GET USER INSTRUCTION COPY 2(X),X GET USER INST. ADDRESS COPYU A,0(X) STORE INST. AT PROPER ADDRESS COPY BRKCNT,A ONE BRK POINT RESTORED SUB =1,A COPY A,BRKCNT JMP RTN6 GO PROCESS REST OF THE BRK POINTS SPACE 2 ****** BM *  BM * --- RTNBM --- RETURN FROM BUS MONITOR BREAKPOINT. BM *  BM ****** BM RTNBM ENT  ENTER FROM BUS MONITOR BREAKPOINT. BM SIN 7 . BM SELP A,BMADDR%3+1 . BM JST SAVE PRESERVE CURRENT ENVIORNMENT.  BM COPY RTNBM,A GET BM COPY A,*TEXIT(X,Y) .  BM COPY A,RTNADD . BM COPY ='M',A MARK AS BUS MONITOR ENTRY. BM COPY A,*TKIND(X,Y) . BM COPY SR,A  SET THE USER BM OR =:100,A INTERRUPT ENABLE BM COPY A,SR BIT. BM COPY BMMRBS,A SET THE BM SBIT 14,A BUS MONITOR ENTRY. BM COPY A,BMMRBS FLAG.  BM COPY Y,X REFRESH X. BM JMP RTN4 .  BM LPOOL TITL ****** * -- TRAP -- * INTERCEPTS PROCESSOR TRAP * INTERCEPTABLE TRAPS ARE; * -CONSOLE INTERRUPT(C) * -UNIMPLEMENTED INSTRUCTION TRAP(I) * -UNINSTALLED MEMORY TRAP(U) * -CHAC R/NUM EXCEPTION TRAP(N) * -STACK EXCEPTION TRAP(S) * -ARITHMETIC ERROR TRAP(A) TRAP EQU $ JST *TRKB(X,Y) INPUT SECOND CHARACTER CLSN =CR,A CARRIAGE RETURN? JMP TRAP22 YES RESTORE ALL TRAPS TRPT CLSN ='T',A 'T'? JMP $+2 YES GO SEE IF CR JMP TRPC NO SEE IF 'C'  JST *TRKB(X,Y) INPUT NEXT CHARACTER CLSN =CR,A CARRIAGE RETURN? JMP SETT YES GO SET INTCPT TAGS JMP *TERROR(X,Y) NO ERROR TRPC CLSN ='C',A 'C'? JMP $+2 YES GO SET INTERCEPT TAG JMP TRPI NO SEE IF 'I' IMS TC SET TC=1 JMP TRAP1 GO GET NEXT CHARACTER TRPI CLSN ='I',A 'I'? JMP $+2 YES GO SET INTERCPT TAG JMP TRPM NO GO SEE IF 'U' IMS TI SET TI=1 JMP TRAP1 GO GET NEXT CHARACTER TRPM CLSN ='U',A 'U'? JMP $+2 YES GO SET INTERCEPT TAG JMP TRPN NO SEE IF 'N' IMS TM SET TM=1 JMP TRAP1 GO GET NEXT CHARACTER TRPN CLSN ='N',A  'N'? JMP $+2 YES GO SET INTERCEPT TAG JMP TRPS NO SEE IF 'S' IMS TN  SET TN=1 JMP TRAP1 GO GET NEXT CHARACTER TRPS CLSN ='S',A 'S'? JMP $+2  YES GO SET INTERCEPT TAG JMP TRPA NO SEE IF 'A' IMS TS SET TS=1 JMP  TRAP1 GO GET NEXT CHARACTER TRPA CLSN ='A',A 'A'? JMP $+2 YES GO SET INTERCEPT TAG  JMP ERR NO NONE OF ABOVE IMS TA SET TA=1 JMP TRAP1 GO GET NEXT CHARACTER TRAPC ENT COPY TC,A GET INTERCEPT TAG COPY CINTS,Q JEQ A,TRAPC2 GO RESTORE TRAP IF 0 JEQ Q,TRAPC1 SET NOT REQUIRED IF 0 COPY JSTI,A FETCH JST *$+1 INST EXCH A,*CIN COPY A,CINTB COPY TCINTS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*CIN+1 COPY Q,CINTB+1 COPY =0,A COPY A,CINTS SET INTERCEPT FLAG TRAPC1 COPY *TSR(X,Y),A RBIT 2,A DISABLE BYTE MODE SBIT 4,A ENABLE CONSOLE INT SBIT 8,A ENABLE INT COPY A,*TSR(X,Y) STORE BACK SREG RTN TRAPC TRAPC2 JNE Q,TRAPC3 INTERCEPT NOT SET IF NOT 0  COPY CINTB,A FETCH ORIGINAL CONTENTS COPY A,*CIN RESTORE IN TRAP LOC COPY CINTB+1,A COPY A,*CIN+1 IMS CINTS RESET INTERCEPT FLAG TRAPC3 COPY *TSR(X,Y),A RBIT 4,A  DISABLE CINT COPY A,*TSR(X,Y) STORE BACK SREG RTN TRAPC CINTS ENT JST SAVE SAVE USERS ENVIRONMENT COPY CINTS,A USER PROG. COUNTER @ TRAP TIME COPY YREG,Y RESTORE OFFSETS COPY YREG,X COPY A,*TEXIT(X,Y) COPY =0,A SET INTERCEPT FLAG COPY A,CINTS OUT A,1 D  TURN OFF CINT SW COPY ='C',A JMP TSRTN CIN WORD :94,:95 CONSOLE INT. LOC. AND +1 CINTB WORD 0,0 TRAPI ENT COPY TI,A GET INTERCEPT TAG COPY UITS,Q GET INTERCEPT FLAG  JEQ A,TRAPI2 GO RESTORE TRAP IF 0 JEQ Q,TRAPI1 SET NOT REQUIRED IF 0 COPY JSTI,A  GET JST *$+1 INST CODE EXCH A,*UIT SWAP CONTENTS AT TRAP LOC + 2 COPY A,UITB SAVE ORIGINAL COPY TUITS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*UIT+1 SWAP CONTENTS AT TRAP LOC +3 COPY Q,UITB+1 CONTENTS TRAPI1 COPY =0,A COPY A,UITS SET INTERCEPT FLAG RTN TRAPI TRAPI2 JNE Q,TRAPI3 RESTORE NOT REQUIRED IF NOT 0 COPY UITB,A FETCH ORIGINAL CONTENTS  COPY A,*UIT RESTROE IN TRAP LOC COPY UITB+1,Q COPY Q,*UIT+1 RESTORE IN TRAP LOC  IMS UITS RESET INTERCEPT FLAG TRAPI3 RTN TRAPI UITS ENT JST SETIF SET INTERCEPT FLAG  COPY :84,A SAVE USERS PROGRAM LOC @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='I',A JMP TSRTN SETT EQU $ IMS TC SET TC=1 IMS TI SET TI=1 IMS TM  SET TM=1 IMS TN SET TN=1 IMS TS SET TS=1 IMS TA SET TA=1 TRAP22 JMP TRAP2 DO TRAP INTERCEPTIONS TRAP1 EQU $ JST *TRKB(X,Y) INPUT NEXT CHARACTER CLSN =CR,A CARRIAGE RETURN? JMP TRAP2 YES GO DO TRAP INTERCEPTION CLSN =',',A COMMA? JMP $+2 YES JMP ERR NO ERROR JST *TRKB(X,Y) INPUT NEXT CHARACTER  JMP TRPC SEE IF 'C' ERR JST RESETT RESET ALL INTERCEPT TAGS JMP *TERROR(X,Y) ERROR EXIT TC WORD 0 INTCPT TAG 0=RESTORE 1=SET TI WORD 0 INTCPT TAG 0=RESTORE 1=SET TM  WORD 0 INTCPT TAG 0=RESTORE 1=SET TN WORD 0 INTCPT TAG 0=RESTORE 1=SET YREG WORD 0 TRAP2 EQU $ JST TRAPC DO CONSOLE INT TRAP INTERCEPT JST TRAPI DO UNIMP INST TRAP INTERCEPT JST TRAPM DO MEM ERROR TRAP INTERCEPT JST TRAPN DO CHA/NUM ERROR TRAP INTERCEPT  JST TRAPS DO STACK ERROR TRAP INTERCEPT JST TRAPA DO ARITH ERROR TRAP INTERCEPT JST RESETT RESET ALL INTERCEPT TAGS COPY Y,YREG SAVE OFFSET VALUE JMP *TDBG(X,Y) BACK TO DEBUG * LPOOL TS WORD 0 INTCPT TAG 0=RESTORE 1=SET TA WORD 0 INTCPT TAG 0=RESTORE 1=SET TRAPM ENT COPY TM,A GET INTERCEPT TAG COPY METS,Q GET INTERCEPT FLAG  JEQ A,TRAPM2 GO RESTORE TRAP IF 0 JEQ Q,TRAPM1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*MET SWAP CONTENTS AT TRAP LOC + 2 COPY A,METB SAVE ORIGINAL E  COPY TMETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*MET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,METB+1 CONTENTS TRAPM1 COPY =0,A COPY A,METS SET INTERCEPT FLAG RTN  TRAPM TRAPM2 JNE Q,TRAPM3 RESTORE NOT REQUIRED IF NOT 0 COPY METB,A FETCH ORIGINAL CONTENTS  COPY A,*MET RESTORE IN TRAP LOC COPY METB+1,Q COPY Q,*MET+1 RESTORE IN TRAP LOC IMS METS SET INTERCEPT FLAG TRAPM3 RTN TRAPM JSTI WORD :BF80 JST *$+1 INSTRUCTION CODE UIT WORD  :86,:87 UNIMP INST TRAP LOC + 2 AND + 3 UITB WORD 0,0 MET WORD :8A,:8B MEM ERROR TRAP LOC + 2 AND + 3 METB WORD 0,0 NET WORD :9A,:9B CHA/NUM ERROR TRAP LOC + 2 AND + 3 NETB WORD 0,0 SET WORD :9E,:9F  STACK ERROR TRAP LOC +2 AND +3 SETB WORD 0,0 AET WORD :AA,:AB ARITH ERROR TRAP LOC + 2 AND + 3 AETB WORD  0,0 METS ENT JST SETIF COPY :88,A SAVE USERS PROGRAM COUNTER COPY A,*TEXIT(X,Y) AT TRAP TIME COPY ='U',A TSRTN EQU $ COPY A,*TKIND(X,Y) STORE TYPE OF REG DUMP JST *TDMPRS(X,Y) DISPLAY REGISTERS JMP *TRTN6(X,Y) RETURN TO DEBUG RESETT ENT COPY =0,A RESET INTERCEPT TAGS COPY A,TC COPY A,TI COPY A,TM COPY A,TN COPY A,TS COPY A,TA RTN RESETT SETIF ENT JST SAVE SAVE USERS ENVIRONMENT COPY SETIF,A SET INTERCEPT FLAG SUB =2,A COPY A,SETIF COPY =0,A COPY A,*SETIF IMS SETIF BUMP FOR RETURN  IMS SETIF COPY YREG,X RESTORE OFFSETS COPY YREG,Y RTN SETIF TRAPN ENT COPY  TN,A GET INTCPT TAG COPY NETS,Q GET INTERCEPT FLAG JEQ A,TRAPN2 GO RESTORE TRAP IF 0 JEQ Q,TRAPN1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*NET SWAP CONTENTS AT TRAP LOC + 2 COPY A,NETB SAVE ORIGINAL COPY TNETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*NET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,NETB+1 CONTENTS TRAPN1 COPY =0,A COPY A,NETS SET INTERCEPT FLAG RTN TRAPN TRAPN2 JNE Q,TRAPN3 RESTORE NOT REQUIRED IF NOT 0 COPY NETB,A FETCH ORIGINAL CONTENTS COPY A,*NET RESTORE IN TRAP LOC COPY NETB+1,A COPY Q,*NET+1 RESTORE IN TRAP LOC IMS NETS SET INTERCEPT FLAG TRAPN3 RTN TRAPN NETS ENT JST SETIF COPY :98,A SAVE USERS P COUNTER @ TRAP TIME COPY  A,*TEXIT(X,Y) COPY ='N',A TSTRTN2 JMP TSRTN TRAPS ENT COPY TS,A GET INTERCEPT TAG  COPY SETS,Q GET INTERCEPT FLAG JEQ A,TRAPS2 GO RESTORE TRAP IF 0 JEQ Q,TRAPS1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*SET SWAP CONTENTS AT TRAP LOC +F  2 COPY A,SETB SAVE ORIGINAL COPY TSETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q  EXCH Q,*SET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,SETB+1 CONTENTS TRAPS1 COPY =0,A COPY  A,SETS SET INTERCEPT FLAG RTN TRAPS TRAPS2 JNE Q,TRAPS3 RESTORE NOT REQUIRED IF NOT 0 COPY SETB,A FETCH ORIGINAL CONTENTS COPY A,*SET RESTORE IN TRAP LOC COPY SETB+1,Q COPY Q,*SET+1 RESTORE IN TRAP LOC IMS SETS SET INTERCEPT FLAG TRAPS3 RTN TRAPS SETS ENT  JST SETIF COPY :9C,A SAVE USER P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='S',A  JMP TSRTN TRAPA ENT COPY TA,A GET INTERCEPT TAG COPY AETS,Q GET INTERCEPT FLAG JEQ A,TRAPA2 GO RESTORE TRAP IF 0 JEQ Q,TRAPA1 SET NOT REQUIRED IF 0 COPY JSTI,A  GET JST *$+1 INST CODE EXCH A,*AET SWAP CONTENTS AT TRAP LOC + 2 COPY A,AETB SAVE ORIGINAL COPY TAETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*AET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,AETB+1 CONTENTS TRAPA1 COPY =0,A COPY A,AETS SET INTERCEPT FLAG  RTN TRAPA TRAPA2 JNE Q,TRAPA3 RESTORE NOT REQUIRED IF NOT 0 COPY AETB,A FETCH ORIGINAL CONTENTS COPY A,*AET RESTORE AT TRAP LOC COPY AETB+1,Q COPY Q,*AET+1 RESTORE IN TRAP LOC  IMS AETS SET INTERCEPT FLAG TRAPA3 RTN TRAPA AETS ENT JST SETIF COPY :A8,A  SAVE USER P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='A',A JMP TSRTN * LPOOL TITL ****** * * -- RREG -- * -- DISPLAY AND CHANGE OF REGISTERS -- * ****** RREG EQU $ COPY *TCMND(X,Y),A  MMU REGISTERS ? CLSN ='P',A JMP PREG YES JST *TCOMMA(X,Y) ERROR IF , IN INPUT COPY =EXIT-BASE,A RREGG COPY *TSIZE(X,Y),Q ADD X,A ADD Q,A DESIRED REGISTER ADDRESS COPY A,SIZER SAVE IT COPY *TPFLG(X,Y),A GET 'PFLG' CONTENTS JNE A,RREG1 IF VALUE SUPPLIED, GO CHANGE REGISTER JST *TCRLF(X,Y) NEW LINE COPY *SIZER,A  GET DESIRED REG CONTENTS JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE RREG5 EQU $ JST *TINP(X,Y) GET NEXT PARM-- CHANGE JST *TCOMMA(X,Y) ERROR IF , COPY *TPFLG(X,Y),A GET PARM ENTERED FLAG RREG1 JEQ A,RREG2 IF NO CHANGE, IT MAY BE / OR X COPY *TVALU(X,Y),A GET CHANGE  COPY A,*SIZER CHANGE THE DESIRED REGISTER JMP *TDBG(X,Y) START AGAIN IN DBG RREG2 COPY *TLASTS(X,Y),A FETCH LAST TERMINATOR CLSN =0,A ANY SPECIAL TERMINATOR? JMP *TDBG(X,Y)  NO SPECIAL TERMINATOR, BACK TO DBG CLSN ='/',A LAST TERMINATOR MUST BE JMP RREG3 G  / OR X CLSN ='X',A JMP $+2 JMP *TERROR(X,Y) ELSE ERROR COPY *SIZER,A GET DESIRED REG CONTENTS SHIFT A,LO,1 MULTIPLY BY 2 JMP RREG4 RREG3 COPY *SIZER,A SHIFT A,RO,1 DIVIDE BY 2 RREG4 JST *TCRLF(X,Y) NEW LINE JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JMP RREG5 GET ANOTHER PARM SIZER WORD 0 ****** * * -- DISPLAY AND CHANGE OF GENERAL REGISTERS -- * GREG EQU $ COPY =G0-BASE,A G-REG ABSOLUTE OFFSET JMP RREGG GO PERFORM 'G' FUNCTION TITL ***** * * -- DISPLAY AND CHANGE OF MMU REGISTERS -- * * PREG EQU $ JST *TCOMMA(X,Y) COMMA IS ILLEGAL HERE COPY =MAPS-BASE,Q GET LOCATION OF MMU VALUES COPY *TSIZE(X,Y),A GET INDEX CSK A,=1 ARE WE DEALING WITH MAPS? JMP $+2 YES ADD =1,Q POINT TO NEXT WORD (STATUS) ADD X,Q ADJUST ADDRES COPY Q,SIZER SAVE ADDRESS COPY *TPFLG(X,Y),A GET PARAMETER FLAG JNE A,PREG1 JMP IF A VALUE IS APPENDED JST *TCRLF(X,Y) ELSE, GO TO NEXT LINE COPY *SIZER,A GET VALUE COPY *TSIZE(X,Y),Q GET INDEX CSK Q,=1 DMA, USER OR STATUS?? JMP $+3 USER JMP STATUS STATUS JMP DMA DMA AND =:000F,A  SLIM DOWN TO LOWER 4 BITS JST *TSHEX(X,Y) PRINT IT JMP PREG5 CONTINUE * DMA SHIFT A,RO,4  SLIM DOWN TO DMA # JMP $-4 DO IT JMP PREG5 CONTINUE * STATUS SUB =2,Q ADJUST TO STATUS BIT INDEX OF STATUS WORD SHIFT Q,L,4 SHIFT FOR XNX XNX Q TBIT 0,A XFER DESIRED BIT TO OV COPY =0,A JF OV,$+2 OV SET? COPY =1,A YES PRINT 'STATUS' = 0001 JST *TSHEX(X,Y) NO, PRINT 'STATUS' = 0000 * PREG5 EQU $ JST *TINP(X,Y) GET NEXT PARAMETER JST *TCOMMA(X,Y) COMMA ILLEGAL COPY *TPFLG(X,Y),A GET PARAMETER FLAG JEQ A,PREG21 JMP IF NO MORE PARAMETERS PREG1 COPY *TVALU(X,Y),A GET PARAMETER AND =:000F,A GET PERMISSIBLE VALUES COPY *TSIZE(X,Y),Q GET INDEX CSK Q,=1 JMP USER2 USER JMP STATUS2 STATUS COPY *SIZER,Q DMA AND =:000F,Q  GET RID OF OLD DMA# SHIFT A,L,4 PUT NEW DMA# IN POSITON OR Q,A JMP PREG2 GO AWAY * USER2 COPY *SIZER,Q GET PRESENT VALUE AND =:00F0,Q GET RID OF OLD USER # ADD Q,A PUT NEW ONE IN JMP PREG2 * STATUS2 SUB =2,Q ADJUST TO BIT 0 OF STATUS WORD SHIFT Q,L,4 SHIFT FOR XNX  AND =:0001,A ONLY ONE BIT IS ALLOWED FOR INPUT CLSN =1,A SET OR RESET ? THAT IS THE QUESTION JMP SETBIT JMP IF WE ARE TO SET A BIT COPY *SIZER,A GET STATUS WORD XNX Q RBIT 0,A TURN OFF REQUESTED BIT JMP PREG2 * SETBIT COPY *SIZER,A GET STATUS WORD XNX Q SBIT 0,A TURN ON REH QUESTED BIT PREG2 COPY A,*SIZER REPLACE WORD PREG21 COPY *TLASTS(X,Y),A ANY MORE INPUT IS AN ERROR CLSN =0,A  JMP PREGRTN GO AWAY JMP *TERROR(X,Y) ERROR RETRUN PREGRTN COPY *TMAPS(X,Y),A OUT A,LOADUSER LOAD USER # INTO MMU SHIFT A,RO,4 LOAD DMA # INTO MMU OUT A,LOADDMA COPY *TMMUSTAT(X,Y),A OUT A,LOADSTAT LOAD STATUS INTO MMU JMP *TDBG(X,Y) GO TO DEBUG (IF POSSIBLE) TITL *************** * * *  -- PM COMMAND PROCESSING -- * * **************** * GET MAP NUMBER AND PAGE NUMBER * * PMCOM EQU $ JST *TINP(X,Y)  INPUT FIRST PARAMETER (MAP #) CLSN =',',A MUST BE DELIMITED BY A COMMA JMP $+2 JMP *TERROR(X,Y) ELSE ITS AN ERROR COPY *TVALU(X,Y),A GET MAP # AND =:000F,A ALLOW :0-:F COPY A,MAPNUM SAVE IT AWAY JST *TINP(X,Y) GET NEXT PARAMETER (PAGE # OR 'L') COPY *TLASTS(X,Y),A GET LAST INPUT CLSN ='L',A LIST ALL PAGES OF MAP COMMAND? JMP PMMAP YES, DONT SET PAGE NUMBER COPY *TVALU(X,Y),A GET PAGE # AND =:003F,A ALLOW 0-63 PAGE NUMBER JMP PMMPAGE SPACE 1 PMMAP EQU $ COPY =0,A PMMPAGE COPY A,PAGENUM SAVE PAGE NUMBER * * -- GET MAP ENTRY -- * * IN READSTAT,Q  GET MMU STATUS COPY Q,*TMMUSTAT(X,Y) SAVE IN STATUS WORD OR =1,Q SET TABLE ACCESS ON OUT Q,LOADSTAT AND UPDATE IN CONTROL REGISTER COPY STADDR,A FC00 IS START OF MAP COPY MAPNUM,Q GET CURRENT MAP NUMBER MAPLOP JEQ Q,DOPAGE IF LOOP END THEN ADD PAGE NUMBER  ADD MAPINC,A MOVE POINTER TO NEXT MAP LOCATION SUB =1,Q DECREMENT MAP NUMBER  JMP MAPLOP AND LOOP DOPAGE ADD PAGENUM,A NOW A HAS MAP ENTRY ADDRESS COPY A,*TADDR(X,Y)  SAVE IN CASE ITS A 'L' COMMAND COPY *TLASTS(X,Y),Q GET LAST INPUT CLSN ='L',Q LIST MAP CONTENTS? JMP *TLIST(X,Y) YES, LIST OUT A MAP OF PAGES * * * * --GET MAP ENTRY AND PUT IN DACP0 AND DACP1-- * * * COPY =0,Q COPY Q,DACP1 COPY Q,DACP1+1 INITIALIZE MAP ENTRY SAVE AREA COPY Q,DACP1+2 COPY Q,DACP1+3 COPY Q,DACP0 COPY Q,DACP0+1 COPY Q,DACP0+2 COPY Q,DACP0+3 COPY A,CURPAGE SAVE MAP ENTRY ADDRESS COPY A,TEMPAGE COPY *TEMPAGE,A MAP ENTRY NOW IN A COPY A,SAVENTRY PUT IN STORAGE AND DMASK,A GET DIRTY BIT COPY A,DACP1 AND PUT IN WORKING AREA COPY SAVENTRY,A GET ENTRY AGAIN AND AMASK,A AND GET ACCESS BIT COPY A,DACP1+1 AND PUT IN WORKING STORAGE  COPY SAVENTRY,A GET ENTRY AGAIN AND MMASK,A AND GET ACCESS MODE BITS COPY A,DACP1+2 AND PUT IN WORKING STORAGE COPY SAVENTRY,A GET ENTRY AGAIN AND PMASK,A GET PHYSICAI L PAGE NUMBER COPY A,DACP1+3 AND PUT IN WORKING STORAGE * * --PROCESS PARAMETERS, IF ANY-- * COPY *TTEST(X,Y),A GET LAST CHAR CLSN =CR,A IF CARRIAGE RETURN JMP DISPALL THEN DISPLAY ALL PARAMS CLSN =',',A ELSE MUST BE COMMA JMP $+2 IF NOT THEN ERROR  JMP *TERROR(X,Y) * * * --PROCESS FIRST PARAMETER-- * FIRST PARAMETER PROCESSING DIFFERS FROM OTHERS IN THAT * A SINGLY LISTED PARAMETER CAN BE CHANGED ALA INSPECT/MODIFY * * JST *TRKB(X,Y) GET PARAM COPY A,CURPARM SAVE FOR OTHER ROUTINES JST CHKVDPR SEE IF D,A,M,P JST *TRKB(X,Y) IF SO GET NEXT CHAR CLSN =CR,A IF CARRIAGE RETURN THEN JMP SINGPARM INSPECT/MODIFY PARAMETER CLSN =',',A ELSE IF COMMA THEN JMP NEWPARM GET NEXT PARAMETER IN LIST  JST CHK ELSE MUST BE A HEX VALUE COPY A,Q START TO BUILD VALUE NECHAR COPY Q,QTEMPB TEMP SAVE VALUE NWCHAR JST *TRKB(X,Y) GET NEXT CHAR COPY QTEMPB,Q RESTORE VALUE  CLSN =CR,A IF CR THEN VALUE IS FINISHED JMP CHNGVAL1 GO AND CHANGE VALUE CLSN =',',A IF COMMA THEN VLAUE IS FINISHED JMP CHNGVAL1 BUT THERE ARE MORE PARAMETERS JST CHK ELSE MUST BE HEX VALUE SHIFT Q,LO,4 SHIFT Q FOR NEXT HEX VALUE OR A,Q Q HAS UPDATED VALUE JMP NECHAR GET NEXT CHAR QTEMPB WORD 0 TEMP SAVE VALUE TITL * * * --CHANGE VALUE 1 CHECKS FOR VALID RANGE FOR * CURRENT PARAMETER,CHANGES PARAMETER IN * WORKING STORAGE,THEN EITHER EXITS THROUFH * DISPLAY ROUTINE OR GOES TO NEXT PARAMETER-- * * CHNGVAL1 COPY A,ATEMPA  SAVE DELIMITER JST VALCHK CHECK FOR VALID RANGE FOR CURPARM JST NEWVAL CHANGE VALUE IN WORKING STORAGE COPY ATEMPA,A GET DELIMITER CLSN =CR,A IF CARRIAGE RETURN JMP DISPARM THEN DISPLAY AND RESTORE ENTRY JMP NEWPARM ELSE MUST BE MORE PARAMETERS CURPARM WORD 0 ATEMPA WORD 0 TITL * * --DISPALL SETS ALL PARAMETERS TO CHANGED AND GOES TO DISPLAY-- * * DISPALL COPY =1,Q COPY Q,DACP0 COPY Q,DACP0+1 COPY Q,DACP0+2 COPY Q,DACP0+3 JMP DISPARM TEMPAGE WORD 0 LPOOL TITL * * --SINGPARM(SINGLE PARAMETER) OUTPUTS PARAMETER VALUE * AND CHANGES VALUE DEPENDING ON USER INPUT, THEN * BYPASSES DISPLAY PARAMETERS, RESTORES ENTRY THEN EXITS * * SINGPARM JST *TCRLF(X,Y) NEW LINE JST *TSPACE(X,Y) SPACE OVER ONE COPY CURPARM,A NEW LINE AND GET PARAMETER JST *TTYPCR(X,Y) PRINT IT COPY ='=',A AND EQUAL SIGN JST *TTYPCR(X,Y) COPY CURPARM,A GET NEW PARAMETER AGAIN CLSN ='D',A JMP DSINGJ  CLSN ='A',A JMP ASING CLSN ='M',A JMP MSING GET APPROPRIATE PARAMETER COPY DACP1+3,A WE KNOW IT IS PHYSICAL PAGE SINGVAL JST *TSHEX(X,Y) OUTPUT PARAMETER VALUE JST *TRKB(X,Y) GET NEXT CHARACTER CLSN =CR,A IF IT IS CARRIAGE RETRUN  JMP *TDBG(X,Y) DON'T CHANGE ENTRY JUST GO BACK JST CHK ELSE GET HEX VALUE COPY  A,Q STORE IN Q NUCHAR COPY Q,QTEMPA SAVE VALUE NYCHAR JST *TRKB(X,Y) GET NEXT CHAR  COPY QTEMPA,Q RESTORE VALUE CLSN =CR,A IF IT IS CARRIAGE RETURN JMP CHNGVAL2 WE MUST BE DONE JST CHK ELSE MUST BE MORE VALUE SHIFT Q,LO,4 BUILD HEX VALUE OR A,Q INTO Q JMP NUCHAR AND CONTINUE QTEMPA WORD 0  TEMP VALUE SAVE * * CHNGVAL2 JST VALCHK DO RANGE CHECK FOR PARAMETER JST NEWVAL IF OK CHANGE VALUE IN WORKING STORAGE JMP ENDDIS BYPASS DISPLAY, RESTORE AND RETURN * * DSING COPY  DACP1,A GET DIRTY BIT SHIFT A,RO,15 ADJUST FOR PRINT ROUTINE JMP SINGVAL ASING COPY DACP1+1,A GET ACCESSED BIT SHIFT A,RO,14 ADJUST FOR PRINT ROUTINE JMP SINGVAL  AND CONTINUE MSING COPY DACP1+2,A GET MODE BITS SHIFT A,RO,12 ADJSUT FOR PRINT ROUTINE  JMP SINGVAL AND CONTINUE TITL * * * --CHKVDPR(CHECK FOR VALID PARAMETER) CHECKS TO SEE IF * PARAMETER IS ONE OF D,A,M,P. IF IT IS, ROUTINE THEN * MARKS PARAMETER RECIEVED FLAG IN DACP0 AREA FOR * DISPLAY PARAMETER ROUTINE'S USE-- * CHKVDPR ENT COPY =1,Q SET FOR NAMED VALUE COPY CURPARM,A GET PARAMETER CLSN ='D',A JMP DSET IF D SET DIRTY BIT USED CLSN ='A',A JMP ASET IF A SET ACCESS BIT USED CLSN ='M',A JMP MSET IF M SET MODE BITS USED CLSN ='P',A JMP PSET IF P SET PHYSICAL PAGE USED JMP *TERROR(X,Y) ELSE INVALID PARAMETER AND ERROR * DSET COPY Q,DACP0 RTN CHKVDPR ASET COPY Q,DACP0+1 RTN CHKVDPR MSET COPY Q,DACP0+2 RTN CHKVDPR PSET COPY Q,DACP0+3 RTN CHKVDPR TITL * * * * --VALCHK(VALUE CHECK) ENSURES THAT VALUE ENTERED BY USER *  IS VALID FOR CURRENT PARAMETER-- * * VALCHK ENT COPY CURPARM,A CLSN ='P',A JMP PAGEPARM CLSN ='M',A JMP MODEPARM CSK Q,=1 JMP CHECZERO JMP *TERROR(X,Y) RTN VALCHK * CHECZERO CSK Q,=0 JMP *TERROR(X,Y) JMP *TERROR(X,Y) RTN VALCHK * MODEPARM COPY =4,A CSK Q,A JMP MODECONT JMP *TERROR(X,Y) JMP *TERROR(X,Y) MODECONT COPY =0,A CSK Q,A JMP *TERROR(X,Y) NOP RTN VALCHK * PAGEPARMK  COPY =0,A CSK Q,A JMP *TERROR(X,Y) JMP PAGECONT RTN VALCHK PAGECONT COPY PMASK,A CSK Q,A RTN VALCHK JMP *TERROR(X,Y) RTN VALCHK TITL * * --NEWVAL(NEW VALUE) CHANGES THE VALUE OF THE CURRENT * PARAMETER IN CURPARM TO THE CURRENT VALUE IN Q * REGISTER IN APPROPRIATE WORD IN DACP1 WORKING STORAGE-- * * NEWVAL ENT COPY CURPARM,A CLSN ='D',A JMP DIRBIT CLSN ='A',A JMP ACCBIT CLSN ='M',A JMP MODEBIT * ELSE PAGE VALUE COPY Q,DACP1+3 RTN NEWVAL ACCBIT SHIFT Q,L,14 COPY Q,DACP1+1 RTN NEWVAL DIRBIT SHIFT Q,L,15 COPY Q,DACP1 RTN NEWVAL MODEBIT SHIFT Q,L,12 COPY Q,DACP1+2 RTN  NEWVAL TITL * * --NEWPARM(NEW PARAMETER) GETS NEXT PARAMETER, * EXITS ON CARRIAGE RETURN,LOOPS ON A COMMA, *  AND CHANGES VALUE IF THERE IS ONE(USES NWCHAR IN * PROCESS FIRST PARAMETER ROUTINE__ * * NEWPARM EQU $ JST *TRKB(X,Y) COPY A,CURPARM SAVE NEW PARAMETER JST CHKVDPR VALIDATE NEW PARAMETER  JST *TRKB(X,Y) GET NEXT CHARACTER CLSN =CR,A IF CARRIAGE RETURN JMP DISPARM DISPLAY VALUES AND EXIT CLSN =',',A IF COMMA,MERELY MARK JMP NEWPARM PARAMETER AND LOOP  JST CHK ELSE GET HEX VALUE COPY A,Q BUILD VALUE IN Q JMP NECHAR AND GET VALUE AS IN FIRST LPOOL TITL * * --DISPARM(DISPLAY PARAMETERS) IS EXIT ROUTINE. IT GOES * THROUGH DACP0 AREA TO SEE WHICH PARAMETERS HAVE BEEN * USED IN THE COMMAND. IT THEN DISPLAYS THOSE WHICH * HAVE. ENTRY ENDDIS IS USED BY SINGPARM ROUTINE. * ENDDIS RESTORES ENTRY IN MAP AND EXITS TO DEBUG-- * * DISPARM EQU $ JST *TCRLF(X,Y) NEW LINE COPY =' ',A JST *TTYPCR(X,Y) COPY DACP0,A JEQ A,CHKDAC1 IF DIRTY NOT USED,CHECK ON ACCESS JMP DDIS ELSE DISPLAY DDIS CHKDAC1 COPY DACP0+1,A SEE IF ACCESS BIT WAS USED JEQ A,CHKDAC2 IF NOT CHECK MODE BITS JMP ADIS ELSE DISPLAY ACCESS BIT CHKDAC2 COPY DACP0+2,A SEE IF MODE BITS WERE USED JEQ A,CHKDAC3 IF NOT CHECK PHYSICAL PAGE NUMBER JMP MDIS  ELSE DISPLAY MODE BITS CHKDAC3 COPY DACP0+3,A JEQ A,ENDDIS IF DONE RESTORE ENTRY AND EXIT COPY ='P',A ELSE PRINT PHYSICAL PAGE NUMBER JST *TTYPCR(X,Y) COPY ='=',A JST *TTYPCR(X,Y) COPY DACP1+3,A JST *TSHEX(X,Y) GET PHYSICAL PAGE NUMBER AND PRINT JMP ENDDIS  AND EXIT DDIS COPY ='D',A PRINT D AND DIRTY BIT VALUE JST *TTYPCR(X,Y) COPY ='=',A  JST *TTYPCR(X,Y) COPY DACP1,A SHIFT A,RO,15 JST *TSHEX(X,Y) JMP CHKDAC1 ADIS COPY ='A',A PRINT A AND ACCESS BIT VALUE JST *TTYPCR(X,Y) COPY ='=',A JST L  *TTYPCR(X,Y) COPY DACP1+1,A SHIFT A,RO,14 JST *TSHEX(X,Y) JMP CHKDAC2 MDIS  COPY ='M',A PRINT M AND ACCESS BIT VALUE JST *TTYPCR(X,Y) COPY ='=',A JST *TTYPCR(X,Y) COPY DACP1+2,A SHIFT A,RO,12 JST *TSHEX(X,Y) JMP CHKDAC3 ENDDIS COPY  DACP1,Q RESTORE MAP ENTRY BY ORING OR DACP1+1,Q WORKING STORAGE VALUES OR DACP1+2,Q TOGETHER OR DACP1+3,Q AND PUT BACK IN MAP COPY Q,*CURPAGE COPY *TMMUSTAT(X,Y),Q OUT Q,5 AND RESTORE MMU CONTROL REGISTER JMP *TDBG(X,Y) AND BACK TO DEBUG MAPINC WORD :0040 STADDR WORD :FC00 PAGENUM WORD 0 MAPNUM WORD 0 DACP0 WORD 0 WORD 0 WORD 0 WORD 0 DACP1 WORD 0 WORD 0 WORD 0 WORD 0 CURPAGE WORD 0 SAVENTRY WORD 0 DMASK WORD :8000 AMASK WORD :4000 MMASK WORD :3000 PMASK WORD :0FFF TITL ****** * * -- INSP-- I * * INSPECTION & MODIFICATION OF MEMORY LOCATION * ****** INSP EQU $ INSP1 JST *TCRLF(X,Y) NEW LINE COPY *TADDR(X,Y),A GET 1ST PARM (MEM TO BE MODIFIED) COPY A,ADDRI SAVE IT COPY A,Q JST *TPADDR(X,Y) PUBLISH ADDRESS COPY ADDRI,X COPYU 0(X),A GET CONTENTS OF MEM LOC COPY Y,X JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE INSP3 EQU $ JST *TINP(X,Y) FETCH NEXT PARAMETER  COPY *TPFLG(X,Y),A GET PFLG JEQ A,INSP2 ANY PARAMETER(CHANGE)? COPY A,*TSTORE(X,Y)  FLAG MEMORY CHANGE COPY ADDRI,X COPY Q,A PUT CHANGE VALUE INTO -A- COPYU A,0(X)  COPY Y,X INSP2 EQU $ COPY *TTEST(X,Y),A GET TERMINATOR CLSN =',',A IS IT A 8  JMP MORE YES- GO GET NEXT CHANGE COPY ADDRI,Q REFERESH 'Q' COPY *TLASTS(X,Y),A FETCH TERMINATOR JEQ A,DBGRTN NO SPECIAL TERMINATOR,THEN GO TO DBG CLSN ='+',A  INCREMENT? JMP INCR CLSN ='-',A DECREMENT JMP DECR CLSN ='*',A INDIRECT JMP INDI CLSN ='X',A X2 JMP MULT CLSN ='/',A DIV BY 2  JMP DIV JMP *TERROR(X,Y) ELSE ERROR INCR ADD =2,Q DECR SUB =1,Q COPY Q,ADDRI  SAVE NEW ADDRESS COPY Q,*TADDR(X,Y) RESTORE NEW ADDRESS JMP INSP1 START AGAIN INDI  COPY ADDRI,X COPYU 0(X),A COPY Y,X INDI1 COPY A,*TADDR(X,Y) JMP INSP1 MULT COPY ADDRI,X  COPYU 0(X),A COPY Y,X SHIFT A,LO,1 MULTIPLY BY 2 JMP INDI1 DIV COPY ADDRI,X IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII