DORADOMIDAS MANUAL24 June 1983byEdward R. FialaXerox Palo Alto Research Center3333 Coyote Hill Rd.Palo Alto, CA. 94304Filed on: [Indigo]DoradoMidas.pressSources on: [Indigo]DoradoMidasManual.dmThis manual describes a largely machine-independent loader/debugger for microprocessors originally developedfor the Maxc2 computer and since used for the Dorado, Dolphin, and M68 microprocessors. This manual isspecialized for the Dorado version of Midas.This manual is the property of Xerox Corporation and is to be used solely for evaluative purposes. No partthereof may be reproduced, stored in a retrieval system, transmited, disseminated, or disclosed to others in anyform or by any means without prior written permission of Xerox.$Jp [E( &1>&q )J9 r$15U/"j-")+y$s/y#$6yHb y] y,y~by!Oy?y8cKabDorado Midas ManualEdward R. Fiala24 June 19832TABLE OF CONTENTS l.Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.Storage Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.Starting and Exiting from Midas . . . . . . . . . . . . . . . . . . . . 5 4.Midas Display and the Mouse . . . . . . . . . . . . . . . . . . . . . . 6 5.Name-Value Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6.Command Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7.Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 8.Command Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 9.Syntax of Command-file Actions . . . . . . . . . . . . . . . . . . . .1610.Registers and Memories Known to Midas . . . . . . . . . . . . . .1911.The IM Memory and Virtual Addresses . . . . . . . . . . . . . . .2112.Registers and Memories that Contain Microinstructions . . . .2113.Task-Specific Registers . . . . . . . . . . . . . . . . . . . . . . . . . . .2414.BR Addressing Kludge . . . . . . . . . . . . . . . . . . . . . . . . . . .2415.STKX Kludge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2416.Memory System Registers and Memories . . . . . . . . . . . . . .2417.Memories and Registers Associated With the DMux . . . . . . .2618.Interface Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2719.Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2720.SetClk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2721.Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2822.Loading Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3023.Dump and Cmpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3124.Brk and Unbrk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3125.Go, SS, Proceed, OS, and Call . . . . . . . . . . . . . . . . . . . . .3226.When Registers are Read/WrittenRestrictions on Continuing . . . . . . . . . . . . . . . . . . . . . . . . .3327.Hardware Failure Reporting . . . . . . . . . . . . . . . . . . . . . . . .3528.Hardware Checkout Facilities . . . . . . . . . . . . . . . . . . . . . . .3629.Parity-Error Scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . .3630.Testing Directly From Midas . . . . . . . . . . . . . . . . . . . . . . .3631.LDRtest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3932.Scope Loop Actions: Fields, RepGo, RepSS, RepT2 . . . . . .4033.HWChk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4034.DMux Consistency Checker . . . . . . . . . . . . . . . . . . . . . . . .4135.Poking: T1, T2, and T3 . . . . . . . . . . . . . . . . . . . . . . . . . .4336.Passive Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4337.MIRdebug Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4538.Failure Diagnosis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4539.Baseboard Microcomputer Stuff . . . . . . . . . . . . . . . . . . . . .4540.Command Files Used With "RdCmds" . . . . . . . . . . . . . . . .4941.DMux Signal Assignments . . . . . . . . . . . . . . . . . . . . . . . . .5042.Hardware Read/Write Methods . . . . . . . . . . . . . . . . . . . . .70 fu!q4] HYfu ^t[q R;Y L;W G;V! G;TV J;R L;P R;N M;M, F;Ka A;I A;G =;F M;D7 J;Bl M;@ @;> =;=  O;;A T;9w T;7 U;5 N;4 K;2L M;0 G;.  -L;+E J;){ J;' M;% I;$ S;"P <;  Q; H; K;& P;[ L; O; G; @;1 I;f E; Z T1YwDorado Midas ManualEdward R. Fiala24 June 19833LIST OF TABLESTable l:Command Menu Actions . . . . . . . . . . . . . . . . . . . . .10Table 2:Command File Name-Value Actions . . . . . . . . . . . . .15Table 3:Command File Command Actions . . . . . . . . . . . . . . .16Table 4:Memories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19Table 5:Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20Table 6:Test Data Pattern Actions . . . . . . . . . . . . . . . . . . . . .37Table 7:Test Items in the Name-Value Display . . . . . . . . . . . .38Table 8:Other Test Actions . . . . . . . . . . . . . . . . . . . . . . . . . .39Table 9:Command Files . . . . . . . . . . . . . . . . . . . . . . . . . . . .49Table 10:Control Section DMux Signals . . . . . . . . . . . . . . . . . .50Table 11:BaseBoard DMux Signals . . . . . . . . . . . . . . . . . . . . .52Table 12:Processor DMux Signals . . . . . . . . . . . . . . . . . . . . . .53Table 13:MemC DMux Signals . . . . . . . . . . . . . . . . . . . . . . . .56Table 14:MemD DMux Signals . . . . . . . . . . . . . . . . . . . . . . . .58Table 15:MemX DMux Signals . . . . . . . . . . . . . . . . . . . . . . . .60Table 16:Disk Controller DMux Signals . . . . . . . . . . . . . . . . . .64Table 17:Ethernet Controller DMux Signals . . . . . . . . . . . . . . .65Table 18:IFU DMux Signals . . . . . . . . . . . . . . . . . . . . . . . . . .66Table 19:Display Controller DMux Signals . . . . . . . . . . . . . . . .68Table 20:Other DMux Stuff . . . . . . . . . . . . . . . . . . . . . . . . . .69Figure l:Midas Display fu!q4] HYfu#^t [q>;Y9;W:;V!H;TVK;RC;P<;NF;M,E;Ka@;I@;GB;FA;D7A;BlA;@@;>>;= D;;A?;9wD;6(  H 4:13Dorado Midas ManualEdward R. Fiala24 June 19834l. IntroductionMidas is a loader/debugger that runs on an Alto and controls its target machine remotely. It canload/dump microprograms assembled by Micro, examine and modify storage, and test hardware inan assortment of ways. Versions exist for Maxc2, Dorado, Dolphin, and M68 microprocessors.Midas is coded about 95% in Bcpl and 5% in assembly language. The Maxc2 version wasimplemented by E. R. Fiala and H. E. Sturgis. The Dorado, Dolphin, and M68 versions consist ofmachine-independent modules implemented by E. Fiala (Overlay and LoadRAM packagesimplemented by L. Deutsch and Alto microcode by E. Taft are also used) and machine-dependentsections implemented by E. Fiala for Dorado; D. Swinehart and P. Baudelaire for M68; and D.Charnley, C. Thacker, B. Rosen, C. Hankins, and E. Fiala for Dolphin.An internal description of Midas is available to anyone interested in adapting Midas to a newhardware system (see [Indigo]MidasInternal.Press).2 Storage RequirementsMidas requires about 500 Alto disk pages, using the following files:Midas.Run~350 pagesMidas.Syms ~40 pagesMidas.Errors ~8 pagesError message strings for Midas swat callsMidas.Programs ~2 pages(Discussed below)Midas.UserPrograms ~2 pages(Discussed below)*.Midas ~2 pages eachCommand files for "RunProg" and "RdCmds" actions*.mbAssorted micro-binary files loaded by command filesMidas.RunProg ~31 pagesBuilt by Midas/IMidas.Dtach ~31 pagesBuilt by Midas/IMidas.FixUps ~2 pagesCreated by Midas/I (used when loading .MB files)Midas.Compare ~2 pagesCreated by Midas/I, written when "Cmpr" action failsDorado Midas can be obtained by loading [Indigo]DoradoMidasRun.Dm andretrieving Midas.Programs with Ftp. You must do Midas/I to initialize Midas on yourdisk after retrieving these. Subsequently, new versions of Midas can be retrieved by executing theD1NewMidas.cm command file from the Alto Executive. Midas runs only under Alto OSversions 17 or later.To setup an Alto disk for use in Dorado microcode development or hardware debugging, you caninstall the Alto OS on a blank disk using the long installation dialog and erase the disk. Whenthis finishes, fetch [Indigo]DoradoUnbugDisk.cm and execute this command file fromthe Alto Executive; it will retrieve Midas and a number of other files that are needed when usingan Alto to control Dorado. fu!q4] HYfu ^t []q<% YY WJ TVT RG PH N@ M,,/ KaE GY F$> At >&qD::s :9T  :7  &*:6K P &:4 & :3CP &):1&3:0;  & :.  & :-3  &):+  &- (`q;  EtU C$< AS >m#> <> :K 9 N 7B3 3X 2!< 0;'8 .q7! ,3) *Y ) % D #^ " 5+ ?^ tM  88$ mE V N  ;) C! =X.Dorado Midas ManualEdward R. Fiala24 June 198364. Midas Display and the MouseThe Midas display is arranged as follows:Blank area at the top (unused);20 lines x 3 columns of name-value menus;Blank line;Program and elapsed time line;Blank line;Two command comment lines;Blank line;Three lines of command menu;Blank line;Input text line;Blank area a the bottom (unused).The program line will show the Midas release date or the name of the last program loaded. Theright-most part of this line will show elapsed time during long-running actions such as "Go" or"Test"; it shows the execution time of Midas initialization, the last command file, or the last actionat other times.Midas uses the two comment lines to report results of actions that it executes.When you move the mouse over a name-value menu or the command menu, the selected item (ifany) inverts black and white. Mouse actions execute when you RELEASE all mouse buttons, soyou can move the mouse with buttons depressed without causing damage. If the mouse hasmoved off of the menu that was selected when the first button went down, nothing will happenwhen the buttons are released.Some menus have additional actions "underneath" the ones normally displayed which will appearwhen you depress appropriate button combinations, as discused below. In other words, when youDEPRESS buttons, the menu may change; when you RELEASE ALL BUTTONS the selectedaction will get executed. On Dorado Midas, only name-value menus have actions underneath theones normally displayed.Since you can neither depress a button combination simultaneously nor release the buttonssimultaneously, Midas accumulates the union of all buttons that go down. This button-uniongoverns the "underneath" menu displayed, if any, and is the argument passed to the actionprocedure when all buttons are finally released. fu!q4] HYfu ^t []q)yWyV!)yTV yRyP yNyM, yKayI yGyF! BY @3, >,: =/ 9O 6KQ 4$7 2G 0H /! +C )E (; &OD $ !D H&uq }R 02 lG <8a :n@ 87 517& 3g_ 1 P /L .L ,<K *r ' u q4 %5d #jS !G ysJySyR \y& q uq0 K  D C7 x& $ 1, "Y", or "." (or by preceding "Confirm" command in com-file)[...] = optional input text fu!q4] Gfu _v \TwKwAw"w Z x? WsA"/ VA"*"U*AS"0 RhA"" QKA") OA"$ NFKA"3"L KKA"- J#K"0 HKA" GbKA"2 FKA"/ DKA" @"C@ AKA"8 @~KA"/A?"3A="."<\ A:" 9KA"0 89KA"A6"#"5xA4" 2A"&A1U"0A/"1 -xA+s"#A*+"+"(:A'i"C"& !A$"+"#G:A!"'A "7A%"0"'Ac"0 A"1" AA"6A"9A"'A"6A":  7 ` ^ ;! + P *` (= P &sS $/y!s  Fy I 7qE lX J 0T eJ F )K ^8) L<\%Dorado Midas ManualEdward R. Fiala24 June 198312Keyboard editing characters are as follows:control-Adelete last characterbackspacedelete last charactercontrol-Qclear text linedelclear text lineOther special keyboard characters are as follows:control-Cabort the current action--equivalent to bugging the "Abort" command (only defined foractions that display "Abort")control-Zabort all command files in progressescaperepeat previous action (special for "Test" and "TestAll")returnspecial following "Test" or "TestAll"control-Dturns on the display (used during command files)control-Oturns off the display (used during command files)shift-swatexit cleanly from MidasThe interrupt characters above are ineffective during loading, dumping, or comparing, whichtypically take between 2 and 20 seconds. Indefinite duration commands, such as "Go", "Test",etc. always monitor the keyboard, so control-C can be used to terminate them.Control-Z, control-D, and control-O are intended for use during command files. However, thesecharacters do not take effect until the command file executes a command such as "Go" whichmonitors the keyboard. There is no way to abort a command file and give control back to Midassafely except during a "Go" or other long-running command. This is not expected to be aproblem because commands are executed quickly.After interrupting a "Go" with control-C or control-Z, proceeding with ";P" or ";G" will succeedexcept when you have smashed the machine state by writing a register or in some other way orhave interrupted an instruction from which continuation is impossible.Although command menu items "SS", "Go", "Brk", "UnBrk", "RepSS", and "RepGo" areprovided, the keyboard characters equivalent to these are usually more convenient.8. Command FilesCommand files (default extension ".Midas") are normally executed either by typing "Midasfilename" to the Executive or by bugging a file name in the subsidiary menus put up by"RunProg" or "RdCmds". Alternatively, you may type a file name first, then bug one of theseactions (If you type a file name after the subsidiary menu is put up and then bug "Abort", thecommand file will also be executed; it is not clear whether this is a bug or a feature.).File names in these sub-menus are contained in the files Midas.Programs and Midas.UserPrograms, each ofwhich has a list of file names separated by blanks, commas, or carriage-returns. Midas.Programs is part ofthe standard Midas release; Midas.UserPrograms is an optional file that a user of Midas can prepare withhis own stuff. The names must be UPPER-CASE. These lists serve two purposes: building file FP's tospeed OpenFile, and preparing the menu items for "RunProg" and "RdCmds".If the file name contains no extension, then hint FP's will be built for both name.MB andname.MIDAS and name will be put in the "RunProg" menu. (However, the hint FP's are notbuilt unless the file exists, and the file name will not be put in the "RunProg" menu unlessname.MIDAS exists). fu!q4] Gfu _q+:[s:Z:Y):W Tyq1:QNs$1O:N#:M,9:K%:Jj0:I 1:G  DZq[ BE @M =SI ;#7 9^ 7C 6(. 2N 0;! /!F +P )R %Xt !qQ  J Q\ ^ Cysdy;0y9 \y WywH;;;xD; 8$;  <\w*Dorado Midas ManualEdward R. Fiala24 June 198313If the name ends in "*", a quick OpenFile table entry is made for name.midas and the namewill appear in the "RdCmds" menu.If the file name contains an extension, then it will be put in the quick OpenFile table, but won'tappear in the "RunProg" or "RdCmds" menus.Since Midas builds a table of file FP's during initialization, when you edit a command file or modify a .MBfile, you should reinitialize Midas by typing "Midas/I". When you add new command files or .MB filesyou should update the "Midas.UserPrograms" file appropriately and do "Midas/I"."RdCmds" executes the actions stored in the command file; it is frequently used to modify thedisplay in various ways by executing command files that show collections of items that are ofinterest."RunProg" first clears the symbol table and restores the display to its initial arrangement; then itexecutes the actions in the selected command file; "RunProg" is used to completely changecontexts--to run a new microprogram, for example.Generally, there is one "RunProg" command file for each hardware diagnostic, with the same name as thediagnostic, e.g.:dgbasic.mbthe diagnostic;dgbasic.midasthe command file.A command file following this convention loads the diagnostic into the microprocessor and displays variousregisters of interest when the microprogram is in use.The command-file facility is actually a (awkward and limited) programming language. Thecollection of actions discussed below is being developed so that command files can monitordiagnostic microprograms, collect and report error information on an output file, or direct thesequence of diagnostic microprograms according to hardware failures that are observed.For system microcode, command-files can be used to control auto-restart and failure diagnosis.Command files can be nested with "RunProg" and "RdCmds" subject to the followingRESTRICTIONS:(1) [Maxc2 only] "AltIO" terminates command files (i.e., upon return to Midas from AltIO thecommand file will not be continued).(2) Nesting is limited to 8 levels (a parameter that could be increased if more levels are needed).(3) Command file names appearing in the "RdCmds" or "RunProg" menus must not duplicateany other action names used by Midas. If this happens inadvertently, command file interpretationwill be substituted for the intended action whenever that action is executed from a command file.Fortunately, interactive execution of the duplicated action is unaffected. Midas does not detectthis.(4) Midas is tight on storage when running the simulator (SimGo and SimTest actions), andavailable space might become exhausted. Three separate storage resources are husbanded byMidas: stack, sysZone, and other. Some sysZone is consumed by each open file, and thesimulator puts one overlay there. If command, output, and WrtCmds files are simultaneouslyopen when SimTest or SimGo is executed from a command file, I think sysZone will overflow, fu!q4] Gfu;_9s/*;]!;[Q;ZC*yWkyVDFyTO Qq'6 OQ M J\ HY F1yCs7/yBl:? :>m y;.<y:n6 7qS 5UE 3Q 1V .M:$ *B ) %$9 #$ b#A V &)8 [[ ;&  T.+ I R :! *Q =]("Dorado Midas ManualEdward R. Fiala24 June 198314but there should be enough sysZone storage for two open files plus the overlay.Note that even when command files are nested to several levels, Midas only keeps open thecurrent command file, so nesting command files does not affect the storage requirement.The simulator also steals space from the stack for one overlay, and it is conceivable that runningSimGo from a command file and then aborting from the keyboard will exhaust the stack.However, if Midas is properly checked out, then this should not happen.Finally, unused storage and the name-value menu bit buffers are used for the rest of thesimulator. Since this storage is consumed by file handles and name strings which you add toMidas.Programs and Midas.UserPrograms, this storage might become too small for the simulator.If this happens, you will fall into Swat with an "Out of storage" message when you try to run thesimulator.(5) There are other size limits you must observe. First, the number of RdCmds and RunProgactions you may add to the ones already in Midas.Programs is limited to about 25 (on 24 June1983). This limit is imposed by the table storage reserved for these actions when Midas is built.If you exceed this limit, the submenu for the "Test" action cannot be shown, and Midas will fallinto Swat during Midas/i initialization with a message indicating the number of excess actions.The limit applies not to the number of names in Midas.Programs and Midas.UserPrograms, butrather to the number of these names which exist on your disk. So to recover from this overflow,you can either prune the number of names in Midas.Programs or Midas.UserPrograms, or you candelete some of the *.Midas files from your disk.Secondly, the list of names in the RdCmds or in the RunProg menu must not overflow commandmenu space. If one of these lists overflows, Midas will fall into Swat during its Midas/iinitialization with a message telling you by how many characters you have exceeded the limit.Here again, you recover from the overflow by either pruning names or deleting *.Midas files. Oryou can continue from the Swat call; if you continue, Midas will simply truncate the names whichwon't fit when it displays the menu.(6) Some actions occur in command overlays where a sequence of menu items must be buggedbefore the action is specified. For example, on "Test", you must specify the data pattern (e.g.,"Random"), then a "TimeOut", and finally the register or memory to be tested (e.g., "RM"). It isillegal to start a nested command file before the subsidiary actions are specified; if you try to dothis, Midas will give an error message.(7) Some actions require a preceding "TimeOut" action. The command file must have two actionsafter the "TimeOut" before terminating. fu!q4] Gfu _qO [P YW VgC T0% RG O`? M\ KJ JZ H6 DB BG A.X ?d4, =O ;,. : S 89U 6o0 2)1 12-- /hH -@ +G *$ &N $a #Z !6D k' .0 /' =N#Dorado Midas ManualEdward R. Fiala24 June 198315A number of actions, some of which cannot be given interactively, are useful in command files.These, not given in the table earlier, are shown below. The first table is for actions that operateon name-value menus (A0 ... C19); the second table for command menu (X) actions.Table 2: Command File Name-Value ActionsText ArgActionCommentsAddressAddrButton actions as discussed earlier.ValueValButton actions as discussed earlier.A+1Increment memory address, as discussed earlier.A-1Decrement memory address, as discussed earlier.NColsFillCFill name-value menus beneath the one selected with consecutive addresses starting atthe address contained in the selected menu.OctDisplay address offset and value in octal.DecDisplay address offset and value in decimal.HexDisplay address offset and value in hexadecimal.NumDisplay value numerically.SymDisplay value symbolically.SearchDisplay value as an address symbol plus offset in the appropriate memory.ValueSkipESkip the next command if the input text evaluates equal to the contents of theregister or memory word displayed. The input text is evaluated exactly as though itwere to be stored into the register displayed in that name-value menu, so if thevalue displayed has several fields, the input text must also have several fields. Thecommand file must have at least one more action after the SkipE.ValueSkipGSkip if input text greater than the contents of the item in the name-value menu(unsigned compare).ValueSkipLSkip if input text less than name-value item.ValueSkipNESkip if input text unequal to name-value item.ValueSkipLESkip if input text less than or equal name-value item.ValueSkipGESkip if input text greater than or equal to name-value item. fu!q4] Gfu _qA ]KK [PVv) S_wK PsK$ O`K$KM/KL/ K>K8I+KH|*KG,KE0KDZKBKAI @7KF>J =v:<2$:@ 9TKH7 6K- 51K. 3K6 2pK< 2M=5Dorado Midas ManualEdward R. Fiala24 June 198316Table 3: Command File Command ActionsText ArgActionCommentsOctal no.SkipSkip N following actions, where N is the value of the input text. An error occurs ifthe command file does not specify at least N more actions after the Skip..TagSkipSkip following actions until one is encountered with the label ".Tag". An erroroccurs if ".Tag" is not found.Octal no.BackSkip.TagBackSkipReset to byte 1 of the command file, then skip.Octal no.ReturnReturn out of current command file, then skip (".Tag" form is illegal for Return.).DisplayOnTurn on the display, so that effects of subsequent commands can be observed. Thedisplay is initially off for a command file. This can also be done with control-D.DisplayOffTurn off the display. This can also be done with control-O.Octal no.TimeOutInput text is evaluated to a 32-bit octal number of msec at which to abort theimmediately following command, if it has not finished by then. This is intended foruse before "Go" and other commands which might hang indefinitely. If the timeoutoccurs, Midas will skip the command after the "Go". TimeOut also turns on thedisplay, necessary because the machinery which checks for timeout is only active withthe display on. Note that TimeOut is required before the actions *'ed in the tableon page 4 and is illegal before other commands; Midas will complain if you do notuse TimeOut appropriately. The command file should include at least two moreactions after the TimeOut. Command files written by WrtCmds will includenecessary TimeOuts with a default of 30000 (~12 seconds); you will generally haveto replace this default value with something more appropriate.ConfirmSupplies confirmation for the command which follows (which should be one of thecommands requiring confirmation). If you omit a confirm in a command file, theuser is queried for confirmation.File nameOpenOutputOpens an output file (default extension ".Report") on which text can be written.File nameAppendOutputAppend to an output file (default extension ".Report")CloseOutputCloses the output file.[text]WriteMessageWrites the contents of the input text buffer on the output file. Note that if any textfollows the WriteMessage, that text up to but not including the is what getswritten. However, if immediately follows WriteMessage, then the contents ofthe input text buffer left by the previous command get written. "~" is translatedinto and "\" into a blank.WriteDTAppends the current date and time to the output file.textShowErrorDisplays the text arg on the command line, turns on the display if it was off, andqueries with "Abort" and "Continue" menu items. Aborting will terminate all nestedcommand files back to the top level.--DumpDisplayWrites the current display image on the output file.textPrettyPrintEvaluates text to a memory address, register name, or memory name; writes thisname on the output file; then pretty-prints the value on the output file exactly as itwould be pretty-printed on the comment lines if the item were displayed in one ofthe name-value menus and middle-buttoned.File nameWriteStateUsed by Midas initialization to create the Midas.Dtach and Midas.RunProg files--users shouldn't use this action.9. Syntax of Command-file ActionsThe syntax of a command-file action is as follows:[["."]$" "]$" "$" "[$" "][";"]where the "[]" denote that the ".tag", input text, and ";comment" are optional. $" " denotes asequence of one or more blanks or tabs (any characters with Ascii codes less than 408 exceptcarriage return are equivalent to blanks). The sequence of characters excluding the comment mustnot exceed 99 characters. fu!q4] Gfu__v& [wK YLsKRW, VK4U* SK RhK/ QK0KOMNF2!KL < KKDJ#?HBGb AFUD&xs C@xs2AH@~8?B=>K<\2:E 9! 89K ") 6K 0K5x  4K F281U&+/8.K-35 +K?*r#0)$ 'K 4 &OK B $>#:"-) K 2k /t" q2ynsM  qE UE sUq F  y<]Dorado Midas ManualEdward R. Fiala24 June 198317If the first character on the line is a ".", then the characters after that are a label or tag which maybe used as the argument for the "Skip" or "BackSkip" actions given in the table earlier. may be any combination of the letters "L" (left-button), "M" (middle-button), and"R" (right-button); these are the buttons released to execute the action. These may appear in anyorder. is the menu name in which the action is executed ("X" for the command menu,"A0"..."A19", "B0"..."B19", and "C0"..."C19" for name-value menus). is the text name for one of the actions (upper/lower case must match the definition). is the text typed on the command line, which may be anything except a ";".Note that if a single blank terminates and if no input text argument is given, then input text left-over from the preceding action will be used. This allows text from a right-button action over a value to beused in a following action (e.g., in WriteMessage or to store the value into another reigster). However, oneor more extra blanks will reset the input text, so the action is executed with null input text.";" begins a comment, which may be omitted. (carriage-return) terminates the action.I think Midas will report all command file syntax errors intelligibly. Error handling worksapproximately as follows: Whenever Midas is watching the keyboard (which only happens duringlong-running actions such as "Go" or "Test"), control-Z will abort the current and all nestedcommand files; the ShowError action in a command file also aborts all command files. If Midasdetects an error while executing an action and queries, then "Continue" will abort the action inprogress and continue with the next command file action. "Abort" will terminate the currentcommand file, but not higher command files. However, a syntax error in the command file itselfalways aborts the current command file.To find out what text should be put in command files, you can bug "ShowCmds" in thecommand menu. This will cause the command file text for each command to be displayed on thecommand comment line as the mouse selects it (You don't have to execute the command to seethe equivalent text.). This text is complete except that the mouse button which executes thecommand isn't shown unless you depress the mouse button. To terminate "ShowCmds", bug"StopShow" (which appears only when "ShowCmds" is in progress.).You can prepare a command file (default extension ".Midas") by typing a file name and bugging"WrtCmds". This causes text for subsequent commands to be put on the file. When you aredone with this, bug "StopWrt" to close the file. ("StopWrt" is in the command menu only whena command file is being written.). Exiting from Midas also closes the output file.You will probably want to edit out your goofs with Bravo after the command file is written.In addition, you will have to insert "Confirm" before actions which require confirmation andmodify the "TimeOut" stuff which Midas uses to surround actions which might hang indefinitely(See the table given earlier for the actions that require this.). fu!q4] Gfu _q@( ]KO YF XT VD R+' QC ME J#QyFsx sLyE&FyD7myB_ ?q+ <- 8 O 6M 5] 3C0. 1y` /F ->! ,' (L &E %1) #GP !}C @ @] uB X S n> \ 2&7 gA b <[Dorado Midas ManualEdward R. Fiala24 June 198318Here is a sample command file:L X Ld dg1;Equivalent to typing "dg1" and bugging "Ld" in the command menuL A0 Addr TASK;Examine the "TASK" register in name-value menu A0L A0 Val 0;Change the value in TASK to 0L A1 Addr RTEMP;Examine the address "RTEMP" in menu A1L A1 SkipE FOO+3;Skip the next command if RTEMP contains the value FOO+3L X ShowError RTEMP not loaded correctlyL A2 TLINK 0;Examine the Link register for task 0 in menu A2L X TimeOut 2000;Abort the following command if it hasn't finished in 1.024 sec.L X Go START;Begin microprogram execution at address "START"L X Skip 1;Skip the next command if "Go" halts before timeoutL X ShowError START;G failed;Show an error message fu!q4] Gfu _qx[s ! !xZ!*xY) !xW!xVg!3xU(xS !(xRE!:xP !*xO !.xN#! N9/ Dorado Midas ManualEdward R. Fiala24 June 19831910. Registers and Memories Known to MidasTable 4: MemoriesMemoryWidthLengthNotesComments(octal)(octal)IMBD44100004,5,6Control store (via mufflers, manifold ops.--fortesting only)IMX44100006,7Control store (absolute).IM10010000Control store (virtual).TPC20 201,2,6,7Shows CIA for current task.TLINK20 201,2,6,7Shows Link for selected task.OLINK20 201,2,3,9Shows address of last call (if any).ALUFM10 206,70 and 16 smashed and restored by Midas.RM20 4006,7STK20 4006,7STKX20 77= STK[STKP-address]T20 201,6,7Waystation for A or Mar registers.RBASE 4 201,6,7Used in read-write of RM.TIOA10 201,6,7MEMBASE 5 201,6,7MD20 201,9PIPE40 208,9Shows Pipe0 to Pipe5 (all signals high true)BR30 406,7,11BRX30 411Shows 4 BR words pointed at by MemBXROW-- 10011Shows 4 cols and Victim/NextV of a cache rowCACHEA23 4006,7,11Length is 2000 with 16k cacheCACHED20100006,7,11Length is 40000 with 16k cacheMAP20 2166,11Length is 216 or 218 with larger map ic'sVM20 2286,11IFUM40 20006,7,10DMUX20 2004,9DHIST54 403,4Discussed in the "DMux" section.VH40 403,4,9Discussed in the "DMux" section.$ABSOLUTE10 216Includes all state of microcomputer.$ABS20 215$ABSOLUTE shown in 20 bit unitsMSTAT40 249Low words of $ABSOLUTE shown symbolicallyLDR44 2003Holds microinstructions used by Midas.MDATAund. 103BITS-CHECKED etc. for testing.MADDR40 143LOOP-COUNT etc. for testing.TASKN 0 203Symbolic task definitionsDEVICE 0 4003Symbolic device address definitions1.Task-specific2.Virtual/absolute stuff applies3.Fake memory--artifact of stuff in Midas4.Readout via DMux, so value shown is correct in passive mode.5.Resets the control section, so "Continue" from b.p. illegal.6.Appears in Test menu.7.Appears in TestAll menu.8.SRN addressed.9.Read-only to Midas.10.Resets the IFU, so "Continue" from b.p. illegal.11.Smashes the fault task pipe entry to access the item, so "Continue" from task 17 b.p. illegal. fp!q4] G?fp ar*#^es:[:t/&-y/Y:W;u&-y5/-zU :Ty&-y:S-y:Q&-y:PW&-y:N&-y:L&-y&:Ka&:J&:H-y:G?&-y :E&-y:D}&:C&:@&:?&-y,:>&&:<&-y$:;e&-y ::&-y:8&-y:67&6-y7676:5U5&5U:3 &:0&:/&-y:.*&-y:+,-y+:*N*-y*N:(&-y:&&-y!:%X&-y :#&-y :"&-y:!6&-y:K :7K:K':uK<:K<:K:SK:K :K:1K0:KM 7mW^aDorado Midas ManualEdward R. Fiala24 June 198320Table 5: RegistersRegisterWidthNotesComments(octal)CPREG202,3Alto-baseboard interface register, freely smashed by Midas except inpassive mode.MIR442,3,6Microinstruction register, used ubiquitously by Midas.IMOUT441,6Direct IM outputsTASK 45Discussed in the "Task-Specific Register" section.Q202,3Waystation for write of registers on external BMux.CNT202,3SHC202,3Special tests for RF_, WF_, and FF-controlled shifts.MEMBX 22,3STKP102,3PROCSRN 42,3,6Must be 0 on a "Go" to operate memory system normally.MCR202,3,6Several bits are not testable; smashed and restored for memory stuff.CONFIG201TESTSYN107Must be 200 (error correction on) or 0 (error correction off) to operatestorage normallyPCX201,2,3INSSET 52,3Shows the _Id count and instruction set (only the instruction set iswriteable)UPTIME601Time since boot-button pushed from microcomputerTGLITCH601Time of worst power glitch seen by microcomputerSTROBE205,7Discussed in the "Passive Mode" section.D1OUT205,7Discussed in the "Passive Mode" section.EVCNTA201EventCntA registerEVCNTB202,3EventCntB registerESTAT202,6Read-write error halt enables, read error conditionsAATOVA205Translate absolute address to virtual1.Read-only to Midas.2.Appears in Test menu.3.Appears in TestAll menu.4.Virtual/absolute stuff applies5.Fake register--artifact of stuff in Midas6.Readout via DMux, so value shown is correct in passive mode.7.Write-onlyMost registers and memories listed above correspond to ones discussed in the "Dorado HardwareManual". Others are discussed in the sections which follow.MDATA and MADDR memories contain words used to report or control the activity of the"Test" and "TestAll" actions discussed later. MADDR also contains DWATCH (used to controlthe DMux address for scoping), MIR-PES (error-reporting), and COM-ERRS (error-reporting),which will be discussed later.TASKN and DEVICE are fake memories used to pass symbolic information from the assembler toMidas in the .mb file, as discussed in the "Dorado Microassembler" document. Their onlypurpose is to provide symbolic equivalents to task and device numbers for ease of debugging.For approximately all registers and memories that contain 16-bit quantities, Midas will evaluateinput of the form "m,,n", storing the value of "m" into bits 0:7 of the word and the value of "n"into bits 8:15.On Dorado, the items that accept "m,,n" are RM, Q, CNT, SHC, EVCNTB, T, STK, STKX, CACHED,VM, DMUX, and $ABS. fp!q4] G?fp#bs:^tP#]:Zu/P#: #Y :X2/P#6:V/P#:Up/P#):T/P#3:R/P:QN/P#5:O/P:N/P:M,/P#t6:Ku/P#3:Jj/P:I /P#tH#G:FHu/P:D/P#7#C :B%/P#0:@/P#0:?d/P#(:>/P#(:</P#:;A/P#:9/P#4:8/P#%:5K:4K:3 K:1K:0_K):.K<:-K (qB &< #j4 !-- &3   M M  O O %< y ;uZy  <\TDorado Midas ManualEdward R. Fiala24 June 19832111. The IM Memory and Virtual AddressesBecause the placement transformations performed by MicroD make it difficult to correlatemicrostore locations with positions in microprogram source files, the Dorado and Dolphin Midasimplementations use a map to transform virtual addresses produced by Micro into absolutemicrostore locations produced by MicroD.Two memories, IMX and IM, each show the microstore. IMX is absolutely addressed; IM,virtually addressed. When you fire up Midas, IM is "empty"; when you load a microprogram, IMis filled with consecutive instructions from your source file, irrespective of where MicroD decidesto place these; the value displayed for an IM address includes both the absolute address assignedto it, the microinstruction, and some other information discussed in the next section.In other words, if your microprogram is 10 words long, the meaningful part of IM is only 10 words long.In this case, if you examine IM addresses greater than 7, the printout will show an absolute address of 7777and zeroes for the rest of the value.Midas will not allow you to modify the mapping between virtual and absolute addresses interactively--youcan only do this by loading a microprogram.To facilitate dealing with virtual/absolute correspondences, Midas has a mode switch that controlsthe way in which registers and memories that normally contain microstore addresses are handled.When you fire up Midas, the display is in absolute mode and the "Abs" action appears in thecommand menu; when you load a microprogram, the display switches to virtual mode and the"Virt" action appears in the command menu. Test actions will switch to absolute mode. Thecurrent mode always appears in the command menu.In virtual mode, the display shows the virtual equivalent for the value in any register thatnormally contains a microstore address. When the value is outside the virtual memory, it prints as7777. To find the absolute value in this case, you have to switch to absolute mode.On Dorado the registers affected by this are CIA, CIAINC, TNIA, BNPC, TPC, TLINK, and OLINK.A fake register called AATOVA converts absolute addresses to virtual. For example, copying thevalue in some RM word into AATOVA will show the virtual equivalent; this is useful whenreturn links are saved in RM words.The general idea is that, if you suspect a hardware problem in the control section, you might workin absolute mode, but in all other situations when a program is loaded you will work in virtualmode, and the complications created by scrambled instruction placement will be concealed.12. Registers and Memories that Contain MicroinstructionsThe MIR and IMOUT registers and the IMBD, IMX, IM, and LDR memories all containmicroinstructions. A middle-button action over the value will print these symbolically on thecomment lines.The value for an IM address is shown as five fields on the display:two PE bits (PE020 and PE2141);Undef and Emu bits; fp!q4] G?fp ar' ^eq M \A ZX Y( UU S] Q12 P4P NiVyK>u07yIlyH|%yE ZyD}+ A.qb ?d'8 =7$ ;@ :F 89pq) 4L 2B! 12Ty.u9# *qJ (B '## #>$ !"= N r: q2 S>  Cy y p )=\Dorado Midas ManualEdward R. Fiala24 June 198322148-bit absolute address;bits 0-218 of microinstruction (RSTK, ALUF, BSEL, LC, ASEL);bits 228-418 of microinstruction (BLOCK, FF, JCN).A "1" in PE020 indicates a parity error in bits 08-208 of the value; a "1" in the second bit meansPE in 218-418. Both bits "1" normally indicates a breakpoint. Midas will store the data with badparity, if you request it. Note that these are parity-bad bits; on a write, Midas will computecorrect parity for each half of the microinstruction and xor that with the parity-bad bit; on a read,Midas will determine whether or not the location has correct parity and report accordingly.The "Undef" bit is set when no absolute address is assigned to this virtual address--in this case theabsolute address should print as 7777. The "Emu" bit tells the pretty-print routine to show theinstruction as though it were being executed by the emulator (task 0).IMX, IMBD, MIR, IMOUT, and LDR have a three-field printout in which the two PE bits areleft-most followed by the left and right halves of the microinstruction.IMX and IMBD each address the microstore absolutely and differ only in the way data is readand written. IMX is read and written by executing multi-cycle microinstructions that write themicrostore from the BMux and read the data into Link. This requires that both ContA andContB boards be present (plus ProcH and ProcL to compute parity). IMBD uses manifoldoperations to address and directly write the microstore and uses the muffler system to read out themicrostore; this requires only ContB; however, the addressing method for IMBD makescontinuation from a break impossible, so users should normally display IMX in preference toIMBD.The IMOUT register contains the 448 DMux signals which are the direct outputs of themicrostore, as addressed by the complicated stuff in the control section. At a breakpoint (t0)IMOUT shows the bits that will be loaded into MIR at t2, provided that the state of the branchcondition does not change at t1.The LDR memory is an array in Alto core that contains microinstructions used by Midas whenoperating the hardware; it should ordinarily be of no interest to users, although the "LDRtest"action allows use of instructions stored in this memory for low-level hardware debugging.Note that a bit pattern in LDR identical to one in IMX, IM, or IMOUT in general is not the sameinstruction because the ALUFM memory may contain different contents when the LDRinstruction is executed. The pretty-print procedures account for this difference and show differentstuff for these two cases. However, if you copy an LDR instruction into IM or IMX, watch out!In debugging regular microcode (i.e., any microcode that doesn't test ALUFM itself), thisincompatibility is usually avoided because ALUFM 0 and 16 are assembled with the "B" and"NOT A" alu operations, which are identical to the operations used by Midas.Also note that the microinstruction pretty-print procedure does not have available all of theinformation that the microassembler had when you assembled your program, so the printout is notalways beautiful. The following are deficiencies you should be aware of:From the hardware manual, you will remember that the interpretation of the BLOCK bitdepends upon whether or not the task executing the instruction is the emulator, andmemory references are interpreted differently for the fault and emulator tasks than for io gp!q4] G?fpybqaubqy` _u` q2y]]nu]q]nu]q& Z1Z uZqZ uZq" XXUuXqXUuXqE W:% UMU S0+ Pa NF?! L{F I : G?H CV B>! @7X >mU <L :C 9 M 7B 33Cu3q1 2I1yu2q 0;6/u0;q  .q-u.qq +",. )W>! 'Y $Sp "P q= F K E &P [L ? O THyPy ?y M1) x =](sDorado Midas ManualEdward R. Fiala24 June 198323tasks, so Midas will disassemble this stuff correctly only when it is able to deduce thetask that executes the microinstruction. Midas does have available the Emu bit forinstructions in IM, and if you pretty-print an IM address or an IMX or IMBD addressthat also appears in IM, Midas will be able to distinguish between emulator and non-emulator instructions; however, Midas cannot distinguish fault task microinstructionsfrom other non-emulator instructions, so fault-task memory references will be pretty-printed erroneously. However, Midas very cleverly deduces the task for microinstructionsin MIR and IMOUT in most cases, so the pretty-print will usually be correct for these.Midas is not clever enough to figure out what will be in RBASE when an instruction isexecuted, so RM addresses from your program are not normally pretty-printed; Midasinstead uses the generated names R0 to R17 for RM references.There are many possible assembler macros that you might use to generate constants tocontrol the shifter; for an instruction that does this, Midas will pick one of the forms,probably not the one you used in the source file.Midas sometimes pretty-prints control clauses differently from the assembler. IFUJump'sand IM/TPC read-write clauses are the same; the decision to print Return or CoReturn,LocBr or LocCall, LongBr or LongCall, GBr or GCall is dependent upon Midasdeducing the virtual location for the instruction being printed and finding .+1 in thevirtual space at .+1 in the absolute space, so this might be wrong sometimes.Conditional branches are always printed like "LocBr[addr1,addr2,BC]".Modifying IM words in octal is inconvenient, so you will normally want to use the symbolicmethod below for patching IM.Writeable registers and memories that contain microinstructions (MIR, IM, IMX, IMBD, andLDR) evaluate a special form of input as follows: The first character on the input text line shouldbe "(" to change the values of several fields in the instruction without clobbering other fields, or"[" to reconstruct the value beginning with a no-op microinstruction. This is followed by anumber of clauses of the form "Field_integer" separated by blanks and/or commas. The legalfield names are RSTK, ALUF, BSEL, LC, ASEL, BLOCK, FF, JCN, PE020, PE2141, andEMUL. EMUL, the emulator mode bit affecting pretty-printing of the microinstruction is onlydefined for IM.In addition to "field_value" clauses, Midas interprets the standalone clause RETURN, and severalother items with "[]" enclosing a following argument. GO[va] (local branch), LONGGO[va] (longbranch), and GCALL[va] (global branch) evaluate the argument enclosed in brackets and treat thisas a virtual address in virtual mode or an absolute address in absolute mode; then they store abranch of the selected type in the JCN field of the microinstruction; IFUJUMP[n] evaluates nwhich should result a number in the range 0 to 3, and stores an IFUJump instruction in JCN.When you modify a microstore word (IM, IMX, or IMBD memories), Midas will error-check thatthe target for GO is, in fact, on the same page; Midas will always error-check that the argumentof a GCALL is at a global address. Arguments to GO, LONGGO, and GCALL will usually besimple integers in absolute mode but may be expressions such as FOO+3, where FOO is an IMaddress, in virtual mode. fp!q4] G?fpybqEy`SCy^9y\&.yZ?yY)3"yW^$5yU&0yR"8yPW4yN=yK=yIPAyG1yDIyBI Ky@~By>K y<.y;E 7? 5 2pE 0U .^ -+1 +EG ){? '\ % "s6* S J  S IE ~ O &4 6* #3 TL  : B=WEDorado Midas ManualEdward R. Fiala24 June 19832413. Task-Specific RegistersMidas treats all task-specific registers (T, RBASE, TLINK, OLINK, TPC, TIOA, MEMBASE, andMD) as 20-word memories. In other words, "T 6" is the T-register for task 6.In addition, a special kludge allows you to display the 21st word (i.e., "T 20", "RBASE 20", etc.)and have that be interpreted as the register for the currently selected task. The currently selectedtask is the value in TASK; the TASK register is an artifact of Midas that is initialized to CTASK(i.e., to the "current task") at breakpoints.In other words, when a microprogram halts at a breakpoint or because of a mouse-abort, CTASKis read from the DMux--suppose that it contains 6. This value is copied into TASK. If "T 20","TLINK 20", etc. appear on the display, these will show values for task 6. The idea is that youcan change the display for all eight task-specific registers by storing a new value into TASK. Thetask selected by TASK is also the one started by "Go", "SS", etc. as discussed later.The hardware's LINK register, suppressed by Midas, is shown as the current task's TLINK word.The OLINK memory shows the absolute value in TLINK less 1. When microstore addresses aredisplayed in absolute mode, this is useless. However, in virtual mode OLINK will usually showthe location that last did a CALL. This is useful in diagnostics which do BRANCH[ERROR],where ERROR is at a global call location. After one of these branches, OLINK shows thelocation that made the error branch, while TLINK shows an unrelated location.14. BR Addressing KludgesBR 40 is another addressing kludge used to represent the "currently selected" base register, or BRMEMBASE[TASK] (i.e., the BR location pointed at by MEMBASE for the currently selectedtask).The BRX memory is another addressing kludge that allows the 4 BR words pointed at by MemBXto be displayed.15. STKX KludgeIn debugging emulators, it is frequently desirable to view the STK entries relative to STKP ratherthan relative to STK 0 (i.e., relative to the top-of-stack rather than the bottom-of-stack). To aid inthis, Midas defines STKX as an alternate memory for STK. STKX[n] shows STK[STKP-n], wherevalid values for n are 0 to STKP-1; hence, the top stack entries are STKX 0, STKX 1, etc.STKX does not allow you to view entries on the wrong side of the stack pointer, and the displaywill preface those names with "~", indicating unreadable, if they appear on the display.16. Memory System Registers and MemoriesThe cache, map, and storage arrangement may vary from one Dorado to another but Midas candeduce the configuration by reading the mufflers and looking at the CONFIG register; Midasdoes this automatically when you attach to a new machine or when you execute the "Config"action. Midas adjusts to the configuration by varying the lengths of its ROW, CACHEA,CACHED, and MAP memories and adapting its algorithms for reading and writing these. fp!q4] G?fp ar ^eq(1 \M Y)<& W^5pq U[ S- PWI N8' LO JG I-U E> CY B%^ @[(1 > L <M 89r 4q\ 2: 12 -F + 'ir #q[ "-A& bB L &V [X r) ]q0) 0* ,- : 34 =^Dorado Midas ManualEdward R. Fiala24 June 198325Midas always uses task 17 (the fault task) and srn 1 (the fault task srn) to access BR, ROW,CACHEA, CACHED, MAP, and VM. Consequently, pipe entry 1 is smashed and (for CACHEDand VM) MD is smashed, which may prevent continuing from a breakpoint, as discussed later.ROW shows the cache flags and address bits in each of the four columns of a cache row and thevictim and next-victim for the row on five consecutive lines of a display column. The length ofthe ROW memory is adjusted to the number of rows in the cache. Displaying an address inROW is normally the most convenient way to view the cache; you can prettyprint the cache flagsand address bits for each column independently, and this also shows the 16 data words in theassociated munch (if any).CACHEA is a memory of length equal to 4 times the number of cache rows; it shows the cacheflags and address bits for a single entry in the cache. In a 100-row cache, the entries for the fourcolumns in row i are CACHEA i, CACHEA i+100, CACHEA i+200, and CACHEA i+300.CACHEA is intended primarily for the "Test" and "TestAll" actions; on the display, it willusually be more convenient to look at ROW.CACHED is a memory containing all the data words in the cache; word m in the munch for rowr and column c is at CACHED 208*nrows*c + 208*r + m. CACHED is intended primarily for"Test" and "TestAll".Addresses in the MAP memory are displayed with the MapPE and PgFault bits in a 2-bit fieldfollowed by wp, dirty, and ref bits in a 3-bit field followed by the 16-bit ra field on the display.When a MAP address is written, ref is zeroed and map parity is always written correctly; dirtyb(the copy of dirty) and MapParity are not readable (they appear in CONFIG in other situations).VM accesses the virtual memory using Fetch_ and Store_ with the current contents of the mapand cache; map and data error faults are not detected or indicated in any way, and the"RunRefresh" and "EnRefreshPeriod" clock enables must be true for storage to work properly.Midas sets the length of VM to the largest limit imposed by the map and cache geometries.Although VM appears in the "Test" menu, the user must setup the cache and map reasonably andselect a suitably small sub-range of addresses in LOW-ADDR, HIGH-ADDR, and ADDR-INCbefore attempting to test VM. Midas uses a user-settable base register called VMBASE, initially 0,to offset the address specified by the user. VMBASE is an address in the fake MADDR memory.In looking at VM, it is sometimes desirable to determine the MAP and ROW entries throughwhich a VM word is accessed; if you middle-button any VM address, these will be displayed onthe comment lines.Midas does not provide any direct method of accessing storage; the user has to setup CACHEAand MAP with appropriate values and then use VM to do this.Note: The code for accessing CACHEA and CACHED is complicated and unlikely to workunless the memory system is functional; these can be tested with "Test" and "TestAll" but themore basic "ProcVA" test, which exercises VA paths in the memory system, may be more helpfulin isolating problems. fp!q4] G?fp bqW `S6 ^3' [@ YLI W; U#; SH R" NP LO K pq pqpq pqpq IPH G* DDpq BIpq pqAuBIqpqAuBIqpqpq# @~ = 2pqpq ;A pqpqpq $pq 9wpq+ p 7q pqpq> 4:S 2p? 0L .G -\ +EK ){>% 'E $>+- "sY  7+0 l; > 0G e*pq0  D T=U_Dorado Midas ManualEdward R. Fiala24 June 19832617. Memories and Registers Associated With the DMuxAt those times discussed later, the 40008 DMux signals (or mufflers) are read from the hardwareand stored in the first 2008 words of a table. These are arranged so that hardware DMux address0 corresponds to bit 0 of word 0 in Midas' DMUX memory, hardware address 178 to bit 178 ofword 0, .., up to hardware address 37778 in bit 178 of word 1778. Then the value on the BMuxand the error status, which can also be read passively, are appended to the table. Finally, tabledata is rearranged, so that the DMUX memory looks as shown in the tables later.Inside Midas associated with the DMUX memory are four separate tables, named as follows:DMuxTabcurrent DMux readoutOldDMuxTabprevious DMux readout when running the simulatorDChecksignals checked by the simulatorDWrongerrors detected during simulationThe last three tables are only significant when the DMux simulator is used by the "SimGo" and"SimTest" actions, as discussed later. In other words, when one of these actions halts,OldDMuxTab holds the t0 DMux readout, DMuxTab the t2 readout, and DWrong the errors thatwere detected in DMuxTab. DCheck is initialized by Midas to values that are reasonable for theboards that are plugged in, and the "Config" action also initializes DCheck to reasonable values;the user may manually modify DCheck, as discussed below, in order to disable checking of signalsthat are incorrectly simulated (This won't be particularly useful after the simulator is thoroughlydebugged).Normally, DMux addresses and registers derived directly from DMux readout (i.e., MIR,IMOUT, MCR, IMBD, DHIST, VH) show values taken from DMuxTab. However, the user mayexecute the "DMux" action with various button combinations to view the other three tables; thename printed for this action in the command menu will be "DMux", "DWrong", "DChk", or"OldDTab" according to which table is currently viewed. When the action is executed with theright (bottom) mouse button, OldDMuxTab values are viewed; both left and right buttons showsDCheck; middle button shows DWrong. The symbolic names of the first 11 errors in DWrongwill also be printed on the comment lines when the middle button is released.DMUX prettyprinting (middle button over value) of regular (DMuxTab or OldDMuxTab) valuesworks differently from DWrong and DCheck pretty-printing. Regular printout of single-bit itemsshows symbolic names of "true" signals; "false" signals are not printed. In other words, low-truesignals are printed when 0, high-true when 1. Multi-bit items (e.g., foo.0, foo.1, foo.2) are alwaysprinted (e.g., foo=3).You should note that modified printout of DMUX also affects registers whose values are obtainedby reading the DMux; this includes MIR, MCR, and IMOUT (but not IMBD). The DMUXmemory itself and IMOUT are read-only except when DCheck is being shown. MIR and MCRare writeable when DMuxTab is viewed but read-only when OldDMuxTab or DWrong is viewed;writing modifies DCheck when DCheck is viewed.The DHIST memory contains a DMUX bit address in bits 408 to 538 (displayed left-most byMidas) and a history of the last 408 values read from the DMux in bits 0 to 378 (displayed as thetwo right-hand fields by Midas). This memory may be useful in checkout of multi-state stuff inthe memory and IFU sections of the machine when the DMux simulator is unable to detect fp!q4] G?fp ar4 ^eq(]^e ) \w[\w2 Z#(YZ YZ X'XX XX XX VR TO Qq0(yMyL5 0yJjyH! E-U Cc *. AA uAqA uAq$ ?_ > V <8;% :nU 8 51I 3g7 1L /@ ./. , !b ^   &9 ". 8 97 n. 7oo #   V V H d <]Dorado Midas ManualEdward R. Fiala24 June 198327problems. Each time the DMux is read the 408-bit data field of each word in DHIST is left-shifted 1 and the new value brought into the low bit.The VH memory provides another view of DHIST. Word 0 in VHIST shows the 408 DHISTsignals at t0, word 1 at t-1, word 2 at t-2, etc.When it is done reading the mufflers or done with a manifold operation, Midas loads the DMuxaddress register with the value contained in DWATCH, an address in the MADDR memory. Thismeans that during a "Go" or when Midas is not reading the mufflers, a scope probe attached tothe DMux data line on the backpanel will show the DMux signal selected by the low-order 11 bitsof DWATCH. However, if DWATCH contains 0, Midas will be turning control of themuffler/manifold system over to the baseboard at regular intervals, and the microcomputer willsmash the DMux address.18. Interface RegistersCPREG is one of the central interface registers used by the Alto in loading information intoDorado. It can be tested, but should not otherwise be of interest except in passive mode. Midasfreely smashes the value in this register.MIR is also special. It is loaded directly from the Alto and read via the DMux; Midas faithfullyrestores MIR after executing instructions.19.ConfigMidas automatically determines the hardware configuration when it connects to a particulardorado by means of DMux signals that it can read from each board. The configuration consists ofthe following parameters:which boards are plugged in--debugging is frequently carried out with some boards disconnected;Map ic size;storage ic size;cache size (4K words or 16K words);whether the 16th bit in a cache entry is used as a parity bit or an address bit;number of storage modules.Midas automatically adjusts its length parameters for VM, CACHEA, CACHED, ROW, MAP,etc., enables and disables various tests in the Test and TestAll actions, and modifies the behaviorof SimTest and SimGo according to which boards are plugged in.The automatic determination of the hardware configuration should not fail, but if it does, theConfig action can be executed to manually set the configuration by means of actions in asubsidiary menu. Manually controlling the configuration may also be useful when testing withSimTest or SimGo.20.SetClkThe baseboard microcomputer presently initializes the clock to a 30 nsec period (= 60 nsecinstruction cycle) when the boot button is pushed. The current clock period can be determined bypretty-printing the value of the CLKRUN DMux word which normally appears on the Midas gp!q4] G?fp bq,ab* `05 \#(\1\ Z ZCuZqZCuZq WM U,. S9$ R"(7 PW@ NK L H6r Dq/- B[ A.* =V ;* 7fr2 3qZ 2)] 0_y-u_y, y*y)#y'Py&  "q4 R %>  Q -+ <! S r2 Uq%5 *7 5  y<]"Dorado Midas ManualEdward R. Fiala24 June 198328display.The "SetClk" action allows the clock period of the mainframe to be specified from a subsidiarymenu. You will probably be able to continue from a break after changing the clock speed, butMidas warns you that continuation is impossible.21. ResetThe "Reset" action shows an elaborate subsidiary menu with many options. The options are: runenables for different stuff; parity-error enables for the different data paths that are parity-checked;and initialization of memories.The general ideas that determined exactly how "Reset" is implemented are as follows: First,memories and registers should be reset only if they have to be for some reason. For example,memories that are parity-checked, such as T, RM, and STK, have to be reset to prevent parityerrors when you start running a program; TIOA has to be reset in case some io device has variantbehavior when TIOA contains its device number (building an io device that did this would be apoor idea); it is desirable to reset IMX and IFUM before loading a program, so that run-awaybranches and out-of-control programs will be trapped. However, other memories and registerssuch as RBASE, MEMBASE, Q, CNT, etc. need not be reset--your microprogram should containcode to initialize these, so Midas doesn't have to.Next, memories that require a long time to initialize, such as MAP (9 seconds now, 35 or 140seconds with larger ic's in the Map), should be optionally reset so that you won't have to wait fortheir initialization unnecessarily.Also, memories loaded by a microprogram (IM, IFUM, RM, ALUFM, and STK) should beoptionally reset, if at all; if they are optional, you will be able to reset other parts of the machinewithout smashing your program. However, there does not seem to be any advantage in initializingALUFM, so this memory is never initialized.Each option is of an on-off form. The current state of the option is shown on the comment lines,while the other state appears in the command menu. The options as originally chosen arereasonable for a total reset, such as you would carry out at the onset of a "RunProg" commandfile; you may also want to turn on MAP initialization.To carry out a reset, you bug the sequence of options you want, then bug the "Do-It" menu item.When you bug "Do-It", initialization is carried out as follows (not exactly in this sequence sincesome initialization is done twice):Run enables (RunRefresh and EnRefreshPeriod) are set as chosen;Parity-error halt enables and MIRDebug are set as chosen; Midas remembers the halt enable settings so thatthey can be simulated for "SimGO" (discussed later) and remembers the setting of MIRDebug, so that itcan warn against continue after breaks with MIRDebug true;Manifold stuff used for testing IMBD is cleared;Midas error counters MIR-PES and COMM-ERRS are cleared;Hold and task simulators are cleared;ALUFM 0 and ALUFM 16 are loaded with the "B" and "NOT A" alu controls needed by Midas; fp!q4] G?fp bq ^B \L [0 Vr SqH QN52 O L)3 JGG H|M FX D> C N ARN ? J =3 :K": 80pq# 6# 3C6 1ypqK /3- -+ *rR (7! &G %6 !5* .C c#yu?ym19y 32y:yw0yC7y%y E <\T$Dorado Midas ManualEdward R. Fiala24 June 198329The IFU is reset;TestSyndrome is loaded for normal error-correction;Several IOFetch_'es are done in task 2 to make sure that Asrn is .ge. 2 after power up;Tasking is turned on;Junk io, the fault task, and io devices are reset;If MAP initialization is selected, each MAP address is loaded with Dirty and a pointer to the correspondingabsolute page;If MD initialization is selected, then CACHEA is loaded to map the first 4k (or 16k) of virtual memory, BRand CACHED are zeroed, and, for each task, the MD tag is reset, T and TIOA are zeroed, TLINK andTPC are loaded with 7777;RM and STK are optionally zeroed;If IM initialization is selected, then absolute mode is selected, IM is made empty, and every IMX address isloaded with "Branch[.], Breakpoint" except that 7776 is loaded with "Return, FreezeBC, Breakpoint" for the"Call" action;If IFUM initialization is selected, then the Reschedule condition is turned off, and each IFUM address isloaded with the descriptor for a two-byte regular opcode with no operand, using MemBase 0 and RBase 1,starting at IMX 0.MCR is loaded with NoRef and ProcSRN with 0;The test control stuff BITS-CHECKED, LOW-ADDR, HIGH-ADDR, ADDR-INC are reinitialized;After the reset is complete, Midas reads the DMux and checks the run-enable initialization, mostof the control section initialization, and halt-enable initialization; if any failures are found, theerrors are reported on the comment lines.The "Go" action performs a subset of "Reset" prior to starting at a new address, as discussedlater; parity-error halt enables can be modified without resetting anything else by writing an octalnumber into the ESTAT register. fp!q4] G?fpybAuy` 3y]Wy[yYo2yW;VyU yS&DyREEyPyN!yL{75yK73yI yGKyF$LyDyB,y@[U = q(8 ;A W 9w) 62+ 4:04 2p 2)<5Dorado Midas ManualEdward R. Fiala24 June 19833022. Loading ProgramsThe "Ld", "LdSyms", and "LdData" actions are used to load micro-binary files into the machine.These actions are executed by first typing a list of file names (default extension ".mb") separatedby commas, then bugging "Ld" or "LdSyms" (typing ";L" is equivalent to bugging "Ld"). Theseactions require confirmation by , "Y", or "." iff a previously-loaded program is beingoverwritten; in a command file where it is not known whether or not another program is beingoverwritten, a "Confirm" action should precede the load action, as discussed earlier."Ld" loads the entire .mb file--symbols into the Midas symbol table and data into the hardware."LdSyms" loads only the address symbols and IM mapping table from the .mb file. This may beuseful when reattaching Midas to a machine that is already running a microprogram."LdData", (in command files but not available interactively), loads only the data blocks from the.mb file. "LdData" is provided so that a microprogram can be loaded without cluttering thesymbol table--this is primarily for Midas initialization and should not be of frequent use to users.On Dorado, the DMUX, MADDR, MDATA, $ABSOLUTE, $ABS, and MSTAT memories are treated asexceptions by "LdData"--symbols for these are loaded anyway.Midas uses several 1024-word core buffers (about 8 on Dorado Midas) and the Swatee file tomanage its symbol table and virtual memory mapping information; the largest existing programsuse 10 buffers for VM information and about 25 more (out of 64 available on Swatee) forsymbols. For nearly all symbol and VM accesses, Midas will reference only one or two symbolblocks, so there should be no appreciable slow down when handling large programs.The symbol table management algorithm used by Midas is an extremely fast merge that works well whenthe symbol table is nearly empty at the onset of a load but suffers somewhat from block fragmentationwhen the initial symbol table has many items.To avoid fragmentation, don't load one microprogram on top of another--use "RunProg" to reset the symboltable, then do the "Ld". It is also a good idea to assemble microprograms as a single .MB file. AlthoughMidas can load multiple .MB files (typed as a list separated by commas), this will fragment the symbol tableand cause extra thrashing.These recommendations follow because Midas takes advantage of alphabetical address ordering in .MB filesto pack its symbol buffers nearly full. But when subsequent files are loaded, the symbol buffers willfragment to about half-full, symbol buffer swapping will result, and symbol searches will be longer.Midas uses the symbol table in two ways: looking up the value of a symbol, requiring at most one diskaccess; and searching for the symbol in a particular memory which best matches a value, requiring at mostone access for RM, BR, DEVICE, and TASK address symbols, or at most two accesses for IM addresssymbols; the best matching value for addresses in all other memories is determined by scanning every block.Searching every block requires about (.22 seconds * no. symbol blocks) - (.15 seconds * no. blocks in core)or about 4.7 seconds for the largest program thus far. However, since best matches for the five mostimportant memories are obtained quickly, it will rarely be necessary to wait for a search.In most situations where a "Ld" is going to be done, many other actions will also be carried outto setup the display appropriately for the program and to initialize the hardware by doing "Reset"or whatever. For this reason, you will ordinarily want to define a command file that does all theseother actions as well as the "Ld" and you will ordinarily do "RunProg" on this command file;direct use of "Ld" in the command menu will be rare. fp"sq5  G?fp ar ^eqL \#@ Z8$ YZ W;\ UpU Q Q NI LR IPF G6% EdyBs3"yA< >Jq< <C :H 8\ 7Qy4^s-6y2Ky1-y.Ty-` y,<H$y*y(=Jy&Ny%|#Ay"fy!}F#y My^ yZMy`yZ Jq+5 &< A# %7  4 =X2BDorado Midas ManualEdward R. Fiala24 June 19833123. Dump and CmprBoth "Dump" and "Cmpr" require confimation by , Y, or "." They accept the name of amicroprogram (default extension ".mb") on the input text line. If the input text line is empty,then the file name is defaulted to the name of the program last loaded."Dump" deletes forward reference fixups left by Micro (which never occur on Dorado or Dolphinbecause MicroD does these) and compacts both data and addresses to use less disk space and loadmore quickly later.Also, if undumped .MB files contain forward references, they cannot be used with "Cmpr" (noproblem on Dorado or Dolphin).Note that only memory words loaded by Load are dumped--you cannot patch unused locations,dump the program, and expect the patches to survive. (Suggestion: assemble extra locations as apatch area with your microprogram, so that you can patch and dump during debugging.)"Cmpr" compares data currently in storage against data in the file and reports differences on theMidas.Compare file.In microprograms, avoid loading initial values into memory words modified during execution. Theusefulness of "Cmpr" is enhanced when programs are clean, because no fictitious errors will be reported.For diagnostics, "Cmpr" can report what has been smashed when something goes off the deep end--this hasfrequently been helpful.Following system microcode crashes, "Cmpr" may provide the only clue about the nature of an intermittentstorage failure.24. Brk and UnBrkOn Dorado breakpoints are created by deliberately storing bad parity in both halves of amicroinstruction. Since double parity failures are highly unlikely, there is usually no ambiguitybetween deliberately set breakpoints and hardware failures.Since Dorado does not halt until t2 of the instruction containing a parity failure, the break willoccur after the instruction containing it has been executed.Since the two parity-bad bits are part of the value displayed for an instruction, it would bepossible to insert or remove a breakpoint by examining an instruction and storing 3 or 0 into theparity-bad field; however breakpoints are inserted and removed often enough to warrant an easiermethod for doing this. The "Brk" and "UnBrk" actions are provided for this purpose."Brk" inserts a breakpoint in the IM or IMX address typed on the input text line. The addressmust be typed--there is no default break address. You will normally find it faster to type"address;B" to insert a breakpoint."UnBrk" removes a breakpoint. If no text is typed, the address defaults to the breakpoint thatcaused the last program halt or to the address of the last breakpoint inserted. You will normallyfind it faster to type "address;K" or ";K" to remove a breakpoint. fp"sq5  G?fp ar ^eq9 \F ZG W^R U_ S PWC N K p+q IPC G"2 DB BIy?s`y>&^ y;Py:'y7[ y6( 1r .MqS ,J *; 'F"&s'Fq0 %|pq1 " T ?O t2. T 83+ m; # 1O fO B T ^J \ U Z1) Y)K W^+2 UD ST PW'1 NU L? IP/ G S EM CO @~*0 >P <9 ;\ 9T? 7= 4L 2L=$ 0P . +E^ ){#5 'Ly$s$a$My#G34y!yHH$y18yIyRy W y*y ly y9-y Sy MO *=\HDorado Midas ManualEdward R. Fiala24 June 198335Some situations that Midas does warn you about are as follows:You have displayed some address in BR, BRX, ROW, CACHEA, CACHED, MAP, or VM; Midas will usetask 17 and pipe entry 1 to access these, and if the break occurred in task 17, Midas will warn you thatcontinuation is impossible because Pipe entry 1 and (for CACHED and VM) task 17 MD are smashed.Some address in IFUM is displayed; Midas has to reset the IFU to read IFUM and will warn you thatcontinuation from a breakpoint is impossible.Some address in IMBD is displayed; Midas has to reset some of the control section to access IMBD.You broke on or single-stepped across an instruction that did both a Fetch_ and either a T_Md orRM/Stk_Md; if you continue, data from the new fetch rather than data from the preceding fetch will beused to complete the T_Md or RM/Stk_Md operation.A breakpoint on or single-step through an instruction that does NewPC_ is illegal (??).27. Hardware Failure ReportingMidas checks for several kinds of hardware errors and reports them in MIR-PES and COMM-ERRS, which are addresses in the MADDR memory; these are shown in the upper right-handname-value menus by the normal Midas display. MIR-PES is shown on the display as two 16-bitfields; the first field counts parity errors detected in MIR[0:20] and the second, parity errors inMIR[21:41]. MIR-PE's is zeroed when you start Midas, "Dtach", or "Reset", or when you start a"Ld". Whenever Midas loads a microinstruction into MIR, it checks for good parity in MIRbefore executing it and counts MIR-PES if the parity is no good; however, even if the parity isbad, Midas goes ahead and executes the microinstruction. If any MIR parity errors occur during aload, the message "**MIR-PE's occurred**" is printed on the comment lines after the load;however, except for that message, Midas does not print any special messages after these errors--theuser will have to notice when MIR-PES changes at other times.COMM-ERRS is also shown as two 16-bit fields. The first field counts glitches in the "Stopped"line, which Midas samples repeatedly during "Go" (The serial 1 Dorado seemed to report"Stopped" when the microprocessor did not have any reason for stopping, so some glitch detectionsoftware was added to Midas to detect this situation.); the second field counts microcomputertimeouts. Midas initializes these error counters to 0 after initially connecting to a Dorado, during"Reset", and during "Dtach". Midas allows about 2 msec for the baseboard microcomputer toservice interrupt requests; if this timeout is exceeded, the right-hand field of COMM-ERRS iscounted.Midas also shows a number of hardware conditions collected by the baseboard microcomputer;these include power supply information summarized in PROBLEMS, OUTOFSPEC,BADSUPPLYSPEC, and TGLITCH as discussed later. fp"sq5  G?fp bq>y_\s"9y]Py\EyY@!yX-yU"?yS_%;yQD!yP1yMW Ir F$qW DZV BB @R >M =/F ;e:% 9&; 7S 6c 4:= 0U .E -3N +iB )"C '2( & P $> H I 7. . - :*" 8@ 6( 2pr .qL -3E +iN )Sy&s;y%| "-q(9 bQ ; &7% [R r ]qC ,6 G P 3G <^Dorado Midas ManualEdward R. Fiala24 June 198337available. However, on Dolphin and M68 implementations of Midas, the test features in Midasare of doubtful usefulness because the hardware is accessed through communication with a small"kernel" microprogram that only works when most of the hardware is functional.Data patterns for test actions are determined from the first subsidiary menu, as follows:Table 6: Test Data Pattern ActionsZEROESAll-zeroes dataONESAll-ones dataSHOULD-BEConstant test pattern equal to value in SHOULD-BECYC1Vector of the same size as the register containing zeroes with a single one-bit cycled leftone position each iterationCYC0Cycled zero in vector of onesRANDOMRandom numbersSEQUENTIAL0, 1, ..., sequential numbersALTZOAlternating all-ones and all-zeroes patternsALT-SHOULD-BEAlternating contents of SHOULD-BE with its ones-complementThe CYC0, CYC1, and SEQUENTIAL patterns vary according to the size and arrangement of thedata vector for the item being tested. CYC0, for example, starts off with leading 1's and a 0 inthe right-most bit of the data vector. The 0 is shifted left (bringing in 1's to its right) eachiteration; when the 0 is shifted out of the left-most bit in the data vector, the vector is reinitializedto leading 1's and a 0 in the right-most bit. The CYC1 pattern is like CYC0 with 1's and 0'sinterchanged. The SEQUENTIAL pattern is initialized to 0 and is incremented by 1 in the right-most bit of the data vector each iteration.This treatment of CYC0, CYC1, and SEQUENTIAL patterns is conceptually correct for items thatare described inside Midas by dense, left-justified data vectors whose bits are displayed left-to-right on the screen. Most, but not all, items are handled this way.On Dorado, the exceptions are as follows: IMX, IMBD, and MIR have the parity-bad bits displayed left-most but stored internally right-most in the data vectors. The parity bits do not participate in determiningthe data pattern for CYC0, CYC1, and SEQUENTIAL patterns; i.e., the two parity-bad bits will always betested with 1's (i.e., bad parity) for CYC0 or always with 0's (i.e., good parity) for CYC1 andSEQUENTIAL patterns.ALUFM, CACHEA, MAP, BR, and MCR have holes between bit 0 and the right-most bit of the datavector. The CYC0, CYC1, and SEQUENTIAL patterns for these are generated as though these holes didn'texist. I.e., ALUFM has an 8-bit data vector in which bits 1:2 are unused; CACHEA has flags in bits 0:3and VA[4:n] in subsequent bits, but the leading bits of VA are not actually stored in the address section formost cache configurations, so the unstored bits are a hole; MAP has RP in bits 16:31 of the data vector andvarious flags in bits 12:15, so bits 0:11 are a hole; BR uses 4:31 of the data vector, so bits 0:3 are a hole;and MCR uses 0:15 with several unused bits in its interior. Testing is controlled/described by 12 addresses on the display as follows: fp"sq5  G?fp bq Q `SO ^N [YzWt#xTysxS xQ1xPW[NxMxL5 xJ xIs,xH : DqB B\ A.Q ?d'B =B ;X :+ 6,0 4 U 2Dy/s \y.q:3y-/7y+R y*Ny'F2)y% Yy$B%y#$>/y! ay bb y< qJ n l or .BITS-DROPPEDUnion of bits that should have been 1 but were erroneously 0.LOOP-COUNT32-bit iteration count at which failure occurred or after which the test was aborted.NFAILURES32-bit count of test failures.Memory tests onlyLOW-ADDRHIGH-ADDRCURRENT-ADDRADDR-INC32-bit addresses: If ADDR-INC (normally 1) is positive, the test starts at LOW-ADDRand advances through the memory in steps of ADDR-INC until CURRENT-ADDR isgreater than HIGH-ADDR. If ADDR-INC is negative, the test starts at HIGH-ADDRand goes by steps of ADDR-INC until CURRENT-ADDR is below LOW-ADDR.CURRENT-ADDR contains the last address tested.ADDR-INTERSIntersection of address bits where failures were detected.ADDR-UNIONUnion of address bits where failures were detected.SHOULD-BE, DATA-WAS, BITS-CHECKED, BITS-PICKED, and BITS-DROPPED areaddresses in the MDATA memory; LOOP-COUNT, NFAILURES, LOW-ADDR, etc. areaddresses in the MADDR memory. These two memories (which are tables in Alto storage) existon all versions of Midas that implement the test actions.The handling of the MDATA memory is complicated by the fact that items in this memory haveto be shown in the same format as the memory or register being tested. This is accomplished asfollows: When the selected test item is different from the last, the width and print-format ofMDATA are set to be identical to the new item; in this case BITS-CHECKED is initialized to testall bits in the new item. Then when the test is aborted or halts due to a failure, the display ofBITS-CHECKED, etc. is identical to that of the item tested. The user may then modify BITS-CHECKED and continue, restart, or free-run the test, as discussed below; in this case the itemtested is identical to the last item tested, so BITS-CHECKED is not reset.The handling of MADDR is also tricky. ADDR-INC is allowed to be any value except 0; if it is0, Midas will reset it to 1 before testing. When HIGH-ADDR is initially greater than the largestlegal address in the memory, it is reset to memlength-1 prior to testing. Then if LOW-ADDR isgreater than HIGH-ADDR, it is reset to 0 before testing. When the selected memory differs fromthe last item tested, and when the length of the memory is less-than-or-equal to 100008 wordslong, Midas will reset LOW-ADDR to 0 and HIGH-ADDR to memlength-1 prior to testing. Thisis done because a common operational error is failure to reset the address range when switchingfrom one memory test to another. However, Midas does not reset the address range for very longmemories because they are normally tested with small address ranges that cannot be predicted inadvance--full-length testing of long memories from the Alto is so slow as to be impractical."Test", after showing the data-pattern menu, shows a menu of register and memory names andother test names, and executes a test of the one you select until the test fails or you halt the testfrom the keyboard.The testable registers and memories appear in the second sub-menu for the "Test" action. This fp"sq5  G?fpbt.x^sKx]:x\1 !xZ <Yo1xX =xU 6xSxPuxMsxL5xJ xIs7H6F6EQ 8C.xB :xA. 3 =q_`0 <* :K= 89 5A 3CL 1y%: /B -O ,E *NH (J %:# #GY !}R /0 =Zsq 5$ R8' K <# ;! E %@  yX 2<]kDorado Midas ManualEdward R. Fiala24 June 198339menu also includes several other machine-dependent test programs.On Dorado, the additional tests are as follows:Table 8: Other Test ActionsShmvTests the output of the shift-control ROM's on the ProcH and ProcL boards againstcorrect values.WFTests loading ShC via WF_RFTests loading ShC via RF_ProcVATests BR+Mar via DummyRef_ will continue a register or memory test that has halted; it restarts an OtherTest that hashalted. will continue a register or memory test that has halted but will free-run the test rather thanhalting on the next failure. While free-running, LOOP-COUNT and NFAILURES are reportedcontinuously on the display, and BITS-DROPPED, BITS-PICKED, ADDR-INTERS, and ADDR-UNION accumulate failure information. When you stop the test by bugging "Abort" or typingcontrol-C, the accumulated failure information is displayed in these registers."TestAll" automatically loads BITS-CHECKED with a full-sized comparison mask prior to testingeach item; memories are tested with LOW-ADDR = 0, HIGH-ADDR = memory length-1, andADDR-INC = 1. It tests each register 200 times and makes 4 passes through each memory andeach OtherTest. It is a good idea to run "TestAll" whenever the hardware is in a suspicious state.31. LDRtestOn Dorado and Maxc2, the "LDRtest" action should only be used when the "DEBUG" commandfile has been executed. This requires a sophisticated understanding of the hardware and of theinnards of Midas and is not recommended for novices.Dorado Midas stores many microinstructions in a fake memory called LDR (see LOADER.MC). These areused by various actions to operate the hardware. "LDRtest" allows these to be executed in non-standardsequences to beat on particular hardware problems."LDRtest" accepts a list of LDR addresses separated by commas as input text. If only one LDR address istyped, the CPREG register is loaded once with the selected data pattern, then the LDR instruction isrepeatedly executed with UseCPReg true for a scope loop.When two, three, etc., up to five LDR addresses are typed, a test loop occurs whereby CPREG is loadedwith the next data pattern, the first instruction is executed with UseCPReg true, then the rest of theinstructions are executed, and then the BMux is read back and compared against the original data undercontrol of BITS-CHECKED. The loop stops when (data-read-back xor data-sent-out) & BITS-CHECKED isnon-zero. fp"sq5  G?fp bqA ^/ [:t:Xs+&V:UM:S:R O=q-3 Mr JE H6; Fk6 D4& BO ?d/. =? ; M :M 5xr 2qB 0;G .q4y+Es/3y)07y(2y%Py$Qy#$8y ey%fyNyc"@y r ;q R 9C 7V 4G 25& 01. /!J +H ))Ws)q* (: &O#; $1. "H V %b Z? 4 .4 SsSq> sq, 8 L+1 1 | :=Z4Dorado Midas ManualEdward R. Fiala24 June 19834134. DMux Consistency CheckerThe DMux consistency checker, or simulator, used with the "SimGo" and "SimTest" actionsexamines all of the DMux signals (or mufflers), checking for inconsistencies. The simulationverifies consistency of signals from the previous readout (call this "t0") to the current readout (callthis "t2").In all cases, only passively-accessible DMux signals and BMUX and ESTAT are involved in thesimulation--registers that can be read only by issuing clocks to the hardware are not checked.The simulation subroutine behaves differently based upon the time at which the DMux was read(t even or t odd) and upon whether or not the DMux readout at tn-2 is available. Currently, thesimulator is only called by "SimGo" and "SimTest", and for these the simulation subroutine isalways called with the t0 and t2 DMux tables. The operation of the simulator is reported in and controlled by five tables, each containing one bitfor every DMux signal:OldDMuxTabDMux readout for t0.DMuxTabDMux readout for t2.DCheckmask of bits whose simulated values are to be checked for errors.DWrongmask of signals whose DMuxTab values do not agree with thesimulation and whose mask in DCheck is 1.Setup for the simulator begins during initialization, when the "Config" action is executed. At thattime, DCheck is initialized to reasonable values for the hardware configuration. In other words, ifa particular section of the machine is not in the chasis, then the signals in that section cannot bechecked, so they are zeroed in DCheck. In addition, other signals whose simulated values dependupon signals from the missing section cannot be checked. "Config" sets up DCheck so that onlysignals which can be checked will be examined for error. Finally, "Config" also zeroes theDCheck bits for signals known to be simulated incorrectly.A simulation step consists of the following parts:1) Copy DMuxTab into OldDMuxTab.2) Single-step the Dorado; then read the DMux into DMuxTab.3) Copy DMuxTab into DWrong.4) Execute the simulation program which will predict many signals as functions of valuesin OldDMuxTab and DMuxTab. The predicted values overwrite values in DWrong.Unsimulated signals are not modified in DWrong.5) DWrong _ (DWrong xor DMuxTab) & DCheck.6) Stop and report failures if any bits in DWrong .ne. 0."SimTest" is executed with IOReset, RunRefresh, and EnRefreshPeriod false. It loads MIR witha randomly chosen microinstruction (except that some illegal microinstructions are weeded out--presently, the Output_, UseDMD, MidasStrobe_, and IFUTest_ functions are illegal; also, theBlock bit in the next microinstruction is chosen to equal whatever was coming from IMX just fp"sq5  G?fp ar ^eq: \M Z(ZCsZq YXxsYq Upq SD Pz8$ N?N#sNq L6' JJjsJqJjsJq G*: ExBl AsBlqx@7?s@7qx>-x;#$9) 6oQ 4 X 2 X 1R /DI -z-. +: (=2y%y#;y byAy-y//y*y9 ] _ D B <\25Dorado Midas ManualEdward R. Fiala24 June 198342before t2 of the last microinstruction to avoid screwing up the control section); then it reads theDMux and steps the microinstruction through t2. This is repeated, and after each repetition theprevious and current DMux readout are checked for consistency."SimGo" is similar, but a microprogram stored in IM is executed one step at-a-time rather thanrandom microinstructions; there are no illegal microinstructions for SimGo. When a diagnostic orother microprogram is known to fail, it can be run full speed up to a breakpoint a little before thesequence that fails; then the program can be continued with "SimGo" which might pinpoint thehardware failure. However, since RunRefresh and EnRefreshPeriod are false during "SimGo",any microprogram that uses Storage or the Map might not run correctly. "SimGo" continues untileither a simulation error is detected or ESTAT contains a halt condition; the halt conditions for"SimGo" are identical to those for "Go" (The halt conditions can be modified by the user withthe "Reset" action.).For the most part, mufflered signals in the different hardware sections relate to control pathsrather than to data paths, so the consistency checker will be less effective in finding failures indata paths. However, Midas register and memory tests and diagnostic firmware can usuallypinpoint data failures, so this limitation is not too serious.The ContA/B, ProcH/L, MemC/D/X, and IFU sections are presently simulated.How to Interpret Simulator FailuresWhen the simulator detects one or more failures, it reports a message like "2 DMux errors". Youcan find out which signals are believed inconsistent by executing the "DMux" action in thecommand menu with the middle button. When the middle button is released, the names of thefirst 11 signals that were incorrect are printed on the comment lines; each name is followed by asuffix such as "/A" indicating the section in which the error was detected; possible suffices are:/B BaseboardNo signals are currently simulated./A ContA/B ContB/L ProcL/H ProcH/I IFU/C MemC/D MemD/X MemX/K Disk controllerNo signals are currently simulated./E Ethernet controllerNo signals are currently simulated./V Display controllerNo signals are currently simulated.The next step is to display the DMux words associated with one of the hardware sections thatfailed; this is done by executing the "RdCmds" action and selecting the command file thatdisplays that section (PROC, CONTROL, MMC, MMD, MMX, IFUD, DSKETH, or DSP).Then find the source for a signal that failed in the hardware drawings; you will probably be ableto deduce its dependency upon other DMux signals and can then determine where the failureoccurred. You can view the signals relevant to the simulation by viewing the OldDMuxTab orDMuxTab signals on the display, as was discussed in the "Memories and Registers Associated gp"sq5  G?fp bqasbq: `S-_s`Sq2 ^> [-1 YLL W=' UO SZ R"O PW] NH L IP$; G X E/* C> @~I <8p# 8qM 6 N 51., 3g7* 1Oy. "s!y-3y+iy)y'y& y$>y"sy y"s!y"s!yI"s! A  G BE K 8! ;3( p7# X )<]=Dorado Midas ManualEdward R. Fiala24 June 198343With the DMux" section.Normally, DMux addresses and registers derived directly from DMux readout (i.e., MIR, IMOUT,MCR, IMBD, DHIST, VH) show values taken from DMuxTab. However, the user may executethe "DMux" action with various button combinations to view the other three tables; the nameprinted for this action in the command menu will then show the selected memory. The buttoncombinations for this are as follows:DWrongmiddle buttonDCheckleft and right buttonsOldDMuxright buttonDMuxleft buttonOnly when DCheck is displayed is it legal to write words in the DMux memory; the other formsare read-only. DCheck can be modified to remove signals from the checking process (or to addthem back).35. Poking: T1, T2, and T3The "T1", "T2", and "T3" actions allow the instruction currently in MIR to be executed exactly asthough it were spliced into the execution flow of the program. The DMux is read after t1, t2, ort3 of the instruction, then, for "t1" and "t3", the machine is clocked once more (to t2 or t4). MIRis restored after execution.36. Passive ModePassive mode suppresses automatic readout of registers that require clocks to be issued by Midas.This allows scope observation without interference from automatic parts of Midas.Midas implements three "states" called active, prepassive, and passive. The command menualways prints the current state; bugging "active" will change the state to "prepassive"; bugging"prepassive" will change to "passive"; and bugging "passive" will change to "active"--in otherwords, these three states are sequenced through in a "ring."In active mode, Midas will jam instructions into MIR and execute them to obtain the contents ofvarious Dorado register or memory words or to restore registers incidentally smashed while doingsomething else; as discussed earlier, there are some situations when continuation is impossibleafter doing this, and some hardware problems are difficult to observe when Midas is interfering tothis extent.PrePassive mode is identical to active mode, but if you start the machine with "Go," "SS,","SimGo", "SimTest", or whatever, then Midas will automatically flip into passive mode the nexttime the machine halts.When you enter passive mode from the keyboard action, the state of the hardware is restored asthough it were about to continue from a step or breakpoint and TASK is restored to its value atthe last step or breakpoint. After this, no further clocks are given to the hardware except thoseexplicitly initiated by the user. fp"sq5  G?fp bq ^7% \5 [J YLT W%yT"s yRE"syPz"s yN"s K>? IsC G Cr ?qJ =K =Ss=q=Ss=q <;s<q'-;s<q;s<q :K 5r 2Lq6+ 0Q -&3 +E S ){A '< $>E "sT Q  W  ? P   > K ,6 ;! =[*Dorado Midas ManualEdward R. Fiala24 June 198344After becoming passive, Midas doesn't update registers on the display unless their values can beread without issuing clocks. Since only DMux locations (includes MIR, IMOUT, IMBD, MCR,TESTSYN, PROCSRN, TASK) can be read without clocks, only their values change whilepassive.Further, if you display a new non-passive register on the display, its value will not be read fromthe hardware and garbage will be displayed as the value.Items on the display for which the displayed value is doubtful will be flagged with a "~" asdiscussed earlier.Similarly, only registers whose values can be modified without issuing clocks may be written whilepassive--these are MIR, CPREG, STROBE, and D1OUT (plus the artificial registers andmemories). Midas rejects attempts to modify other registers on the display. Of the writableregisters, only MIR, CPREG, and IMBD can be read, and only MIR can be read passively.Consequently, if you write into CPREG, STROBE, or D1OUT by clicking the mouse over itsvalue, it will be written but the display will show the contents of a static, not something read fromthe hardware--since other parts of Midas don't update the statics, the value displayed only meanssomething immediately after the write.The command menu is drastically altered while passive; only actions which can be executed whilepassive are shown."Update" reads the machine state actively and then becomes passive again.While passive, "SS" and "Go" at new addresses work as usual, so extra clocks are issued to dothese. However, "SS" and "Go" to continue a program do not issue any extraneous clocks--all ofthe setup to continue took place at the time passive mode was entered; or after a step orbreakpoint, no clocks are issued to readout the machine state, so it is possible to continue simplyby modifying Stop, SetRun, and SetSS.To do the most primitive kind of debugging while passive, it is expected that users will work asfollows: First, the POKE command file will be executed to become prepassive and displaySTROBE, D1OUT, and CPREG, not ordinarily on the display. The user will then either do a Goor SS, becoming passive at the break, or will bug prepassive to become passive immediately.Next, MIR and CPREG will be written by modifying the displayed value. Then the Clock andControl registers and Strobe can be manipulated by storing values into STROBE and D1OUT.STROBE is displayed as two fields and D1OUT as three fields; when storing into these, you mustpartition the input into fields as well. For STROBE the two fields are the address field (3 bits)and data field (9 bits). Storing into STROBE will give a three-step strobing sequence using thevalue of address and data you have selected. For D1OUT the three fields are the Strobe bit,address, and data. (Note: The DMux will be read after writing MIR, but it is not read afterwriting CPREG, STROBE, or D1OUT, used for lowest level debugging of the Midascommunication interface.). fp"sq5  G?fp bqI `SF ^; \ YLb W8 T P RE NT MA K>P Is: GF E)< D[ BI& >'8 =  9I 6( O 4^*5 2P 0P .% +S )7! '[ &,[ $aY "F %Y ZC !? H pqD 02G3 e =SDorado Midas ManualEdward R. Fiala24 June 19834537. MIRdebug FeatureDuring ordinary operation, an IMX parity error or breakpoint halts Dorado after t2 of theinstruction affected by the parity error. Since MIR is loaded at t2, the MIR value with bad parityhas been overwritten when the machine stops, so if the path between the microstore and MIR isexperiencing intermittent failures, it will be difficult to diagnose what has gone wrong.To aid checkout in this case, the control section has a debugging aid called MIRdebug, which willdisable the clock to MIR at t2 of an instruction with bad parity. When this aid is enabled, MIRwill still contain the bad data after the error-halt. This feature can be invoked by enabling"MIRdebug" in the sub-menu put up by the "Reset" action. If a parity error halt occurs whileMIRdebug is enabled, then Midas will print the value read from IMX[CIA] so that you cancompare this with the value in MIR on the display to find out which bits are not propagatingfrom IMX into MIR.The liability of this debugging aid is that you will not be able to continue from a breakpoint orIMX parity error halt, so you should not enable MIRdebug unless you are searching for this typeof hardware failure.38. Failure DiagnosisSome actions to analyze test failures and report the hardware components involved have beenconsidered, and are likely to be implemented for IMBD, IMX, IFUM, RM, and STK.Storage, Map, and cache failure analysis programs are essential, but should be provided outsideMidas.39. Baseboard Microcomputer StuffThe Alto can communicate directly with the Baseboard section of any Dorado connected to itthrough its Diablo Printer interface as detailed in the "Dorado Debugging Interface" document.It can:(a) Select any one of the connected Dorados;(b) Control the muffler/manifold system or give control to the baseboard microcomputer(c) Interrupt the baseboard microcomputer;(d) Pass information to the microcomputer through CPREG; and(e) Read 8 bits of information from the microcomputer through the DoradoInmechanism.Midas does (a) and (b) during initialization and during the "Dtach" action, as discussed in the"Starting Midas" section; Midas uses (c), (d), and (e) together with a large set of communicationconventions to exchange information with a program running on the baseboard microcomputer.$ABSOLUTE is the fundamental microcomputer memory, 8 bits wide. It contains all informationother than mufflers which Midas can access on the baseboard. This memory is divided into aRAM (addresses 0 to 7778 or 0 to 1FF16) and a ROM (addresses 1000008 to 1777778 or 800016 toFFFF16). The amount of ROM is adjustable; current Dorados have storage only for addresses1400008 to 1777778. The microcomputer stores its internal registers and other information of fp"sq5  G?fp ar ^eqI]s^eq \(\s\q ZC YY UO SSD = D 95O 7L 6 2F 0'6 .@ -3Q )H '; &,C $a$; "[ pq  R 7Q H @ 0I e5y-y)/y ^Cy 8 L=\=Dorado Midas ManualEdward R. Fiala24 June 198347load and execute Dorado boot microcode, which loads and starts the system microcode.During this sequence and afterwards, the microcomputer reports what is happening on its statuslight, which will repeat a sequence of blinks followed by a pause during any problem condition.The light sequences are interpreted as follows (the light blink information is also in PROBLEMSon the Midas display):1 blinkboot in progressWait for disk, power supplies, stable clock, etc. This isnormal during a power-on or 3-push boot sequence, asdiscussed below.2 blinksboot failedTried to boot Dorado microcode but didn't get theappropriate handshake.3 blinkstransient power problemPower supply voltages went bad, now good again (details inBADSUPPLYSPEC on display; TGLITCH shows the timewhen this transient ended; MAXVOLTS or MINVOLTSreveals the magnitude of the transient). Presently, onlyvoltage variations cause this condition, but eventuallyamperage variations may also cause it (MAXAMPS andMINAMPS on the display).4 blinkspower problemVoltages are now out-of-spec (details in OUTOFSPEC andVOLTS on the display); eventually amperages may alsocause this condition (AMPS on the display).5 blinkspowered downGet this after powering down with a seven button-pushsequence (see below).6 blinksover temperaturePowered down because the temperature on some board wentover 60o C (MAXTEMP, MAXTEMP+1, andMAXTEMP+2 show details).7 blinkscan't get CP controlCan't get muffler/manifold control because Midas is hoggingit.solid greenAOKBootstrap sequence is believed to have completedsuccessfully, there have been no occurrences of the errorconditions indicated by 3 through 6 blinks., and thebaseboard microcomputer gets regular CP control.light offmicrocomputer downpower is off, the microcomputer crashed, or the light burnedout (unlikely because LED's are long-lasting)As mentioned above, the main breaker switch on the Dorado turns on only the +5 volt supplyand one fan. The basic "on" state minimizes power consumption, and enables the baseboardmicrocomputer to turn on other power supplies and fans.When the user depresses the boot button on the back of the keyboard for at least 0.2 seconds andnot more than 2.5 seconds, the microcomputer records an event called a "button push"; depressingfor less than 0.2 seconds or longer than 2.5 seconds is ignored; depressing for longer than 2.5seconds will nullify the entire boot sequence. The microcomputer will count button pushes until1.5 seconds has elapsed with the button up; then it will carry out an action as follows:1 push--ignored; standard emulators also monitor the raw boot button and may takesome action. Currently, they go through a software bootstrap sequence under theassumption that currently loaded microcode is correct and running normally.2 pushes--stops and resets the microprocessor and starts it in task 0 with tasking turned fp"sq5  G?fpybqI ^F \H [L YLxVs&6&U*&SxQ+ &)&OxM,&2&K0&Jj&I 4&G*,+ &FH.&DxBI &.&@4&?+x< &&;x8&0&7B77B&5x3C&6&1x/D &uv&-&,&+"0x(&/ &'#- #qG " L ?7 C X 8F mA Xy18yf((yKy *E h =](yDorado Midas ManualEdward R. Fiala24 June 198348off at location 10678 (which is "InitMap" for the Alto emulator). This is intended to bea forcible restart of currently-loaded microcode.3 pushes--load IM from the Dorado boot loader and start it running as for 2 pushes.This initiates a complete microcode bootstrap sequence, similar to the automatic power-on boot. It assumes nothing about the current state of the machine.4, 5, or 6 pushes--same as 3 pushes.7 pushes--power down; all of the supplies and fans except the 5 volt supply and 1 fan arepowered down in a safe sequence, taking about 30 seconds. The 5 volt supply can thenbe shut down from the main breaker switch; avoid turning off the main breaker switchuntil the microcomputer has completed shutting down the disk and other supplies becauseyou will invoke the power failure safety circuits in the disk drives.8 or more pushes--ignored; the user does this when he makes a mistake and wants tostart over.Under normal conditions, in response to the boot button being pushed or the main breaker beingturned on, the microcomputer will show 1 blink for about 60 seconds and then show solid green;if Midas attaches to the machine, the status light will usually show solid green, but will show 7blinks (Midas hogging CP bus) during long-running Midas actions.Note: if the Dorado was powered down at the onset of a button push sequence, any number ofpushes from 1 to 3 will do a total (3 push) boot.Note: it is unsafe to turn on disk power when the -5 volt, -2 volt and +12 volt supplies are onbecause, the resulting power surge will blow breakers in the building wall circuits. For thisreason, be sure to power down the Dorado logic supplies (7 push sequence discussed above)before turning on the disks; then go through the complete power up sequence with a normal bootsequence (1 to 3 pushes).Note: Since the microcomputer uses the +5 volt supply itself, it will crash if that supply fails andmight subsequently auto-boot itself if the +5 volt supply starts working again. An over-temperature shutdown never turns off the +5 volt supply.Note: If the Dorado is alreay powered-on, the full bootstrap sequence can also be initiated bypressing the reset button on the front panel of the Dorado chassis (inside the cabinet, if theDorado is cabinet-mounted). However, if the Dorado is in the shut down state, pushing the resetbutton has no effect.For full user-level details on booting, consult "Dorado Booting" by Ed Taft([Indigo]DoradoBooting.press) and "Dorado Booting--Implementation" by EdTaft ([Indigo]DoradoBootingImple.press). gp"sq5  G?fpybqasbqDy`S1y\:y[#4yYLDyU$yRh2'yP'.yNp)yM.)yK>EyGq4yF B0. @W >J =/@ 9pqV 71 4pq9" 2U 0< /!9% -V )pqY (2' &O8 "pqZ !^ H6* }  C A5 v4 : /xP4#?xM+xL3xJ2xI (xG(xF'xD}@xB6x@[?@[x>>&>"x= <= &x;e:;ex9909"x878$x6o56o!x44:4x3 $x1%x0 /0x.q -.q* -:/:JDorado Midas ManualEdward R. Fiala24 June 19835041. DMux Signal Assignments Table 10A: Control Section DMux Signals*Original addresses 0-77 and 260-377 are from ContA, 100-257 from ContB. Midas rearrangesmany signals for convenient viewing. The second column shows the way Midas displays them.DMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress 0StopCJNK00 0StopAlways 1preStartCyclea 1preStartCycleaAlways 2dStartCycle 2dStartCycleAlways 3Phase0 3Phase0Always 4Phase4 4Phase4Always 5RWTPCorRWIM 5RWTPCorRWIMAlways 6BigBDispatch 6BigBDispatchTn ge 2 & switch' 7Dispatch 7DispatchTn ge 2 & switch' 10WIM' 10WIM'Always 11RIM' 11RIM'Always 12WTPC' 12WTPC'Always 13RTPC' 13RTPC'Always 14FF=Notify'14:170 15FF=MulStep 16FF=BDispatch 17FF=BigBDispatch 20:37CIAInc[0:15]CIAINC120:37CIAInc[0:15]Tn ge 1 40:57CIA[0:15]CIA240:57CIA[0:15]Tn ge 2 60* CABlockBNT360:730 61:70* bFF[0:7]74:77Bnt[0:3]Tn ge 2 71:74* JCN[0:3] 75:77* bJCN[4:6]100:117* MIR[1:16]PENC4100:1130114:117bPEnc[0:3]Always120:121--TNIA5120:121--122:137TNIA[2:15]122:137TNIA[2:15]Unless return or IFUJump140:141--BNPC6140:141--142:157BNPC[2:15]142:157BNPC[2:15]Never 160CBTempSenseCTASK7160:1730 161bSWd'174:177CTASK[0:3]Tn ge 2 162* IMLH 163* bRSTK.0 164* bdRSTK.0 165* bdIMLH 166* bdIMRH 167* bdJCN.7170:173CTASK[0:3]174:177CTD[0:3]* Midas extracts the 44 MIR and 44 bdIM signals and arranges these as registers (MIR and IMOUT). This informationresides in DMuxTab in the peculiar MIR-loading format discussed in the "Dorado Debugging Interface" document, but isviewed by users in the standard IM format. fp!q5 G?fp arq^Bs( ZqA YE Ut#*+/9 Ty#*+/9 S#*+ Pu$*+/9 N *+/ 9 MO *+/ 9 K*+/9 J*+/9 I- *+/ 9 G *+/ 9 Fk*+/9 E *+/9 C*+/9 BI*+/9 @*+/9 ? *+/ >& < ;e 8 $*+/ 9 5$*+/9 3 $*+/ 1 *+/9 0_ . ,< $*+/*+*/ 9 ($*+/ & *+/ 9  #$*+/ " *+/ 9  $*+/ t*+/ 9   R   0  n f[ [ * =\2Dorado Midas ManualEdward R. Fiala24 June 198351Table 10B: Control Section DMux SignalsDMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress200:217* bdxx for IM[1:16]NEXT10200:2030214:217Next[0:3]Always220:237* bdxx for IM[17:32]CTD11220:2330234:237CTD[0:3]Tn ge 1240:243CS[0:3]'BDbRA12240:243CS[0:3]'BDbAlways244:245RAQuad[0:1]i244:245RAQuad[0:1]iNever246:257RA[1:10]246:257RA[1:10]Always 260CallTOPE13 2600261:277ToPE[1:15]261:277ToPE[1:15]Always 300* bJCN.7CJNK114 300CallUsually 301* IMRH 301bSWd'Always 302GND 302GNDAlways 303LocalBr'a 303LocalBr'aAlways 304IFUNext'a 304IFUNext'aAlways 305LongJump'a 305LongJump'aAlways 306Return'a 306Return'aAlways 307CondBr'a 307CondBr'aAlways 310bFFok'c 310bFFok'cAlways 311FA=0' 311FA=0'Always 312FA=1' 312FA=1'Always 313bDoCBr 313bDoCBrNever 314FF=UseDMD 314Link_BMuxaTn ge 1 315FF=TOffIsOK 315B_Link'Tn ge 1 316RIMorRTPCdly 316RIMorRTPCdlyTn ge 2 317MulStep 317MulStepTn ge 2 & no switch 320FF=TaskingOnFFEQ15 320FF=TaskingOnAlways 321FF=TaskingOff 321FF=TaskingOffAlways 322FF=MidasOn 322FF=MidasOnAlways 323Link_BMuxa 3230 324FF=WriteLink 324FF=WriteLinkAlways 325FF=Link_CPReg 325FF=Link_CPRegAlways 326FF=ReadLink 326FF=ReadLinkAlways 327B_Link'327:3310330:333Bnt[0:3] 332FF=UseDMDAlways334:337bPEnc[0:3] 333FF=TOffIsOkAlways 334FF=Notify'Always 335FF=MulStepAlways 336FF=BDispatchAlways 337FF=BigBDispatchAlways* Midas extracts the 44 MIR and 44 bdIM signals and arranges these as registers (MIR and IMOUT). This informationresides in DMuxTab in the peculiar MIR-loading format discussed in the "Dorado Debugging Interface" document, but isviewed by users in the standard IM format. fp!q5 G?fpbs( ^t#*+/9 ]#*+/9 \1#*+ Y)u$*+/*+W/9 U$*+/*+S/9 P $*+/ 9 O *+/ 9 N#*+/9 Ka$*+/ J *+/ 9 G?$*+/9 E*+/9 D}*+/9 C*+/9 A*+/9 @[ *+/ 9 >*+/9 =*+/9 <8*+/9 :*+/9 9w*+/9 8*+/9 6*+/ 9 5U *+/9 3 *+/ 9 2*+/9 / $*+/ 9 .q *+/ 9 - *+/ 9 + *+/ *N *+/ 9 ( *+/ 9 ' *+/ 9 &,*+/ $*+/9 #j *+/ 9*+" / 9*+ / 9*+H/ 9*+/9 [ ~[ * S=Q)Dorado Midas ManualEdward R. Fiala24 June 198352Table 10C: Control Section DMux SignalsDMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress340:343pNext[0:3]CJNK316340:3430 344Next=0 344Next=0Always 345CTask=0 345CTask=0Always 346PEncGtTrueNext' 346PEncGtTrueNext'Always 347PEncLtTrueNext' 347PEncLtTrueNext'Always 350StopTasks 350StopTasksTn ge 2 351PEnc=CT' 351PEnc=CT'Always 352TPCBypass 352TPCBypassTn ge 2 353PreEmpting' 353PreEmpting'Always 354bHoldA 354bHoldAAlways 355RepeatCurz 355RepeatCurzAlways 356bSwitch'a 356bSwitch'aTn ge 2 357bSwitchUp' 357bSwitchUp'Tn ge 2 360--READY17 360--361:377Ready[1:15]361:377Ready[1:15]MIR166:171--MIR[0:35] in MIR formatIMOUT172:175--bdIM[0:35] in MIR formatTable 11: BaseBoard DMux SignalsDMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress2200:2207ClkRateCLKRUN1102200:2207ClkRateNever 2210ECLup 2210ECLupNever 2211EnRefreshPeriod' 2211EnRefreshPeriod'Never 2212IOReset' 2212IOReset'Never 2213RunRefresh 2213RunRefreshNever 2214MASync 2214MASyncNever 2215TBaseTempSense 221502216:2217--2216:2217-- fp!q5 G?fpbs( ^t#*+/9 ]#*+/9 \1#*+ Y)u $*+/ W*+/9 Vg*+/9 U*+/9 S*+/9 RE*+/9 P*+/9 O*+/9 N# *+/ 9 L*+/9 Ka *+/ 9 J*+/9 H *+/ 9 E$*+/ D} *+/ A$*+/>$*+/:'s! 6t#*+/9 5#*+/9 4:#*+ 12u$*+/9 /*+/9 .q*+/9 -*+/9 + *+/ 9 *N*+/9 ( *+/ '*+/ & 3YBDorado Midas ManualEdward R. Fiala24 June 198353Table 12A: Processor Section DMux Signals*Processor DMux addresses (400 to 777) are arranged so that the first 108 in each group of 208 arefrom ProcH, the last 108 from ProcL. Signals are frequently duplicated (one from each board).Midas does not rearrange any signals from the processor section.MidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberALUB20400:417alubif driven from BMux or from constantALUA21420:437aluaTn ge 1 driven from small constant & not shiftABCON22 440MarMuxAEn'Tn ge 1 441AmuxEn'Tn ge 1442:443Amux0 to 1Tn ge 1 444IOBoutTn ge 1 445BmuxEn'Tn ge 1446:447Bmux0 to 1Tn ge 1450:457=440:447Tn ge 1PERR23 460EMU'Always 461CkMdParity'Tn ge 2462:463-- 464IOPerrNever 465MdPerrNever 466RmPerrNever 467TmPerrNever 470StkSelaAlways 471StkSelSavedNever 472IOBoutSavedTn ge 2 473_MDSavedNever474:477=464:467NeverSHMV24500:517shmvPmux odd or shift'MAR25520:537MAR.0' to MAR.15'Tn ge 1 driven from processor, no shift,Tn eq 2 bits 8:15 when driven by IFU,Tn eq 2 when not driven--26540:557--PRFA27 560Last=Curr'Tn ge 2 561Curr=Next'Always 562Shift'Always 563IOBin'Tn ge 1564:566FA=0'a to FA=2'aAlways 567FA=3'Always570:577=560:567As above fp!q5 G?fp"bsPP ^qP?^Bu^q^Bu^q ]\xu]q- [:@ XUt:@)W V:@)W U: Ru@)W$ O@)W. M@ )WK@)WJG@ )WH@)WG@)WF$@ )WD@)W B@)W@@ )W?A@=@)W<@)W;@)W9@)W8]@)W6@ )W5@ )W4:@)W2@)W 0@)W -V@)W&)W+%)W* '@ %@ )W#@ )W"P@)W @)W@)W.@)W@)W I>LDorado Midas ManualEdward R. Fiala24 June 198354Table 12B: Processor Section DMux SignalsMidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberSCCON30 600-- 601RepeatCurrCAlways 602HoldaAlways 603LdTaskSim'Always 604FFshift'Always 605ShcWriteEn'Tn ge 1 606LoadCnt'Always 607PropCnt'if DecCnt is false 610--611:612= 601:602Always 613LdHoldSim'Tn ge 1614:616=604:606As above 617DecCnt'AlwaysQPDCON31 620QshiftL'Tn ge 1 621QshiftR'Tn ge 1 622RmaskEn'Tn ge 1 623LmaskEn'Tn ge 1 624ShiftBitsEn'Tn ge 1625:627Pmux0 to 2Tn ge 1630:633=620:623Tn ge 1 634ALUFWriteEn'Always635:637= 625:627Tn ge 1ALUCON32 640Pdata.00Tn ge 1 if source is ALU barring shifter 641Pdata.04Tn ge 1 if source is ALU 642TIOAWriteEn'Tn ge 1 643TIOABypassAlways 644MBWriteEn'Tn ge 2 645MBBypassAlways646:647MBMux0 to 1Tn ge 1 650aluCinNever 651Pdata.08Tn ge 1 if source is ALU 652Pdata.12Tn ge 1 if source is ALU653:656aluF0 to 3Never 657aluMNeverNEXTCL33660:663LastNext.0' to .3'Tn ne 1664:667CurrLast.0' to .3'Tn ne 1670:677=660:667Tn ne 1RADDR34700:703Task2Back.0' to 3'Tn ge 2704:707Task3Back.0' to 3'Tn ge 2710:713RbWadr.0' to 3'Sometimes Tn ge 2714:717RbWadr.4 to 7Tn ge 2 fp!q5 G?fp"bsPP _9t:@)W ]:@)W \w: You@X@ )WV@)WUM@ )WS@)WR@ )WQ+@)WO@)WNi@M@)WK@ )WJG@)WH@)W F$@)WD@)WCc@)WB@)W@@ )W?A@ )W=@)W<@ )W;@)W 8]@)W&6@)W5@ )W4:@ )W2@ )W1y@)W0@ )W.@)W-V@)W+@)W*@ )W)4@)W &s@)W%@)W#@)W @)W@)W.@)W@ )W I5LDorado Midas ManualEdward R. Fiala24 June 198355Table 12C: Processor Section DMux SignalsMidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberSTKRB35 720BCWriteEn'Tn ge 2 721Cnt=Zero'Never** 722IoattaNever** 723ResEqZero'Never** 724ResLtZero'Never** 725ALUCarryNever** 726Overflow'Never** 727RmLtZero'Never** 730RBaseBypass'Tn ge 1 731SelRBaseWadr'Always 732RBaseWriteEn'Tn ge 1 733BumpRBaseAlways 734BumpRSTKAlways 735StkPMux1Always 736StkPWriteEn'Always 737RmOdd'Never**RTSB36 740ReSchedWrEn'Always 741NextMacroAlways 742RbWriteEn'Tn ge 2 743RbSelMdTn ge 2 744RbBypassDlyNever** 745TbWriteEn'Tn ge 2 746TbSelMdTn ge 2 747TbBypassTn ne 1 750StkPSaveEn'Tn ge 1 751StkErrorNever**752:757= 742:747As abovePJUNK37 760FFok'aAlways 761-- 762NextData'Always 763B_ExtAlways 764FF.0memAlways 765FF.1memAlways 766RisIFdataAlways 767TisIFdataAlways 770FFok'bAlways 771_MDAlways 772_MDIAlways 773B_ExtAlways774:775SbTskDly.0' to 1'Never 776RisIFdataAlways 777TisIFdataAlways fp!q5 G?fp"bsPP _9t:@)W ]:@)W \w: You@ )WX@)WV@)WUM@ )WS@ )WR@)WQ+@)WO@)WNi@ )WM@ )WK@ )WJG@)WH@)WG@)WF$@ )WD@)W B@ )W@@)W?A@ )W=@)W<@ )W;@ )W9@)W8]@)W6@ )W5@)W4:@)W 1y@)W0@.@)W-V@)W+@)W*@)W)4@)W'@)W&s@)W%@)W#@)W"P@)W @)W@)W.@)W c2AKDorado Midas ManualEdward R. Fiala24 June 198356Table 13A: MemC DMux SignalsDMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress 1000ProcVA.04PVAH 401000:10030 1001true1004:1017ProcVA.04 to 15Tn ge 2 & no clk 1002WantCHdly'1003:1017ProcVA.07 to 19 1020MemB.0PVAL 411020:1037ProcVA.16 to 31Tn ge 2 & no clk1021:1022ProcVA.05 to 06 1023MemB.11024:1037ProcVA.20 to 311040:1047Aad.0a to 7aMAPAD 421040:104601050:1057MapAd.1 to 81047:1057MapAd.0 to 8Never** 1060dVA_Vic 1061ForceDirtyMiss 1062UseMcrV 1063DisBR 1064DisCflags 1065DisHold 1066NoRefHIT 431060:10660 1067MiscPCHP' 1067MiscPCHP'Tn ge 21070:1071ColVic.0 to 11070:1071ColVic.0 to 1Sometimes 1072HitColVA.par 1072HitColVA.par0 on miss 1073HitColDirty 1073HitColDirty0 on miss 1074Hita 1074Hita0 on ForceMiss if Tn ge 21075:1077MemB.2 to 41075:107701100:1101Victim.0' to 1'HOLD 441100:110101102:1103NextV.0' to 1' 1102true 1104MiscHold' 1103WantCHdly'Tn ge 1 1105MDhold' 1104MiscHold'Tn ge 2 1106RefHold' 1105MDhold'Tn ge 2 1107BLretry 1106RefHold'Tn ge 2 & not ForceMiss 1110AwasFree' 1107BLretryIf forced to 0 1111Dbusy 1110AwasFree'Tn ge 2 1112DbufBusy 1111DbusyTn ge 2 1113AtookST 1112DbufBusyTn ge 2 1114SomeExtHold' 1113AtookSTTn ge 2 1115Afree' 1114SomeExtHold'On StkError % CHoldReq 1116StartMap' 1115Afree'if EcHasA 1117AwantsMapFS' 1116StartMap'Always 1117AwantsMapFS'Always fp!q5 G?fpbs ^t#*+/9 ]#*+/9 \1#*+ Y)u$*+/ W*+/9 Vg U RE$*+/9 P O N# Ka $*+/ J *+/ 9 G? E D} C A @[ >$*+/ =*+/9 <8 *+/ 9 : *+/ 9 9w *+/ 9 8*+/9 6 *+/ 3$*+/ 2 *+/ 12*+/ 9 /*+/9 .q*+/9 -*+/9 +*+/9 *N*+/9 (*+/9 '*+/9 &, *+/9 $*+/ 9 #j*+/9 "  *+/9*+ / 9 *+/9 =*+/:$*+/9*+9w/ 9*+8/9*+6/ 9*+5U/ 9*+3/9*+2/9*+12/9*+//9*+.q/*+-/9*++/9*+*N/9'$*+/*+&,/ 9*+$/" $*+/*+ / 9x 9I-Dorado Midas ManualEdward R. Fiala24 June 198358Table 14A: MemD DMux SignalsDMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress 1200SinD.00MEMD0 50 1200SinD.00Never 1201CD.00 1201CD.00Never 1202D0in.00 1202D0in.00 1203D1in.00 1203D1in.00 1204EcSout.00' 1204EcSout.00' 1205EcInD.01205:12060 1206Dbuf_' 1207-- 1207-- 1210D.00 1210D.00 1211dMD.00 1211dMD.00 1212D1BCE'c 1212Fout.00 1213WriteD1'd1213:12170 1214DontWriteMDM1215:1217Dad1.10b to 12b 1220D0BCE'c1221:1222Dad.00f to 01fDAD 511220:1221Dad.00f to 01f1223:1231Dad.02'c to 08'c1222:1230Dad.02'c to 08'c 1232Dad.09' 1231Dad.09'1233:1235Dad0.10c to 12c1232:1234Dad0.10c to 12c 1236D0ACE'c1235:1237Dad1.10b to 12b 1237WriteD0'e 1240F_DFD 52 1240F_DTn ge 2 1241D_Dbuf 1241D_DbufTn ge 1 1242Sout_D 1242Sout_DTn ge 1 1243Fout_D 1243Fout_DTn ge 1 1244D_CD 1244D_CDTn ge 1 1245Md_D 1245Md_DTn ge 1 1246MakeMDM_D' 1246MakeMDM_D'Always 1247bFastD_Dbuf 1247bFastD_DbufAlways 1250Fout.00 1250Dbuf_'Tn ge 1 1251DadH_' 1251DadH_'Tn ge 2 1252DontLoad1 1252DontLoad1Always 1253GenPh1 1253GenPh1Tn ge 2 & EnEcGen1254:1257-- 1254DontWriteMDMTn eq 21255:1257-- fp!q5 G?fpsbs ^t#*+/9 ]#*+/9 \1#*+ Y)u$*+/9 W*+/9 Vg*+/ U*+/ S *+/ RE*+/ P O*+/ N#*+/ L*+/ Ka*+/ J*+/ H G? D} C $*+/ A*+/ @[*+/ >*+/ =*+/ <8 9w$*+/9 8*+/9 6*+/9 5U*+/9 3*+/9 2*+/9 12 *+/ 9 / *+/ 9 .q*+/9 -*+/9 +*+/9 *N*+/9 (*+/ 9*+'/ %:BIDorado Midas ManualEdward R. Fiala24 June 198359Table 14B: MemD DMux SignalsDMuxSignalMidasMidasMidasSignalSimulationAddressNameWordWordDMuxNameCondition(Octal)NameNumberAddress1260:1263MDMad.0' to 3'EC 531260:12630 1264StartEcChk' 1264StartEcChk'Always 1265StartEcGen' 1265StartEcGen'Always 1266D1ACE'c 12660 1267-- 1270EcInD.11267:1270EcInD.0 to 1Never 1271WordInError' 1271WordInError'When DisableEc true 1272DisableEc' 1272DisableEc'Never** 1273ChkPh1 1273ChkPh1Tn ge 2 & preEcEn 1274ChkPh4' 1274ChkPH4' 1275ChkLastPh6' 1275ChkLastPh6' 1276DoubleError' 1276DoubleError' 1277ChkErrEn' 1277ChkErrEn'1300:1306tSyn0 to 6TSYN 541300:1306tSyn0 to 6 1307tSyn7x 1307tSyn7x1310:1317--1310:1317--MDMAD 553540:355303554:3557MDMad.0' to 3'Tn ge 2DADE 56 3560D0ACE'cTwo chip enables always 3561D0BCE'cpredicted false, other two 3562D1ACE'cif (T1Transport & (Tn ge 2)) 3563D1BCE'c 3564WriteD0'eTn ge 2 3565WriteD1'dTn ge 13566:35770 fp!q5 G?fpsbs ^t#*+/9 ]#*+/9 \1#*+ Y)u $*+/ W *+/ 9 Vg *+/ 9 U*+/ S RE*+/ 9 P *+/ 9 O *+/ 9 N#*+/9 L*+/ Ka *+/ J *+/ H*+/ E $*+/ D}*+/ C*+/@[$*+/*+>/ 9<8$*+/9*+:/9*+9w/9*+8/*+6/9*+5U/9*+3/ 2)<5XDorado Midas ManualEdward R. Fiala24 June 198360Table 15A: MemX DMux Signals* = moved elsewhere (ProcSrn[0:3] and 3 bits for Mcr_ are moved)MidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberMAPBUF601400:1417Mapbuf[0:15]Tn ge 2P34INEC611420:1421Mapbuf.16 to 17Tn ge 2 1422ProcTagInATn ge 2 1423PrivRefInPairAlways1424:1427Pipe34Ad.0 to 3Tn ge 2 1430WPinEc1Tn ge 2 1431MapTroubleInEc1Tn ge 2 1432TagInEc2Never 1433CacheRefInEc2Never 1434Store_InEc2'Never 1435IFURefInEc2Never 1436MapPEInEc2Never 1437MapTroubleInEc2Tn ge 2MCDTSK621440:1443MDMtagAd.0 to 3Always1444:1447CurTask.0 to 3Always 1450ProcTagAlways 1451MDMtag'If CacheRefInPair & (Atask eq CurTask) 1452At=Curt'Always 1453Dt=Curt'Always1454:1457Dtask[0:3]NeverSTA63 1460VictimInSTTn ge 2 1461STIdle'Always 1462StartSTAlways 1463STWait-Mem'Tn ge 21464:1467STState[0:3]Tn ge 2 1470STfree'Tn ge 2 1471VictimInAAlways 1472MapRfshDlyTn ge 1 1473RefUsesDInEc1Tn ge 2 & StartEc1 1474AWordRefToDAlways 1475MapWantsPipeTn ge 2 1476MapFreeTn ge 2 1477UseAsrnTn ge 2APESRN641500:1503Asrn.0 to 3Tn ge 21504:1507ProcSrn.0 to 3Tn ge 2 1510MapIs16KNever 1511MapIs64KNever 1512MapIs256KNever 1513RfshAd.0Never1514:1517Ec2Srn[0:3]Tn ge 2 fp!q5 G?fpbs ^u@ [t:+i Z:+i Y): V!u +i S_+iQ +iP +iO=+iM+iL{+iK+iI +iHY +iF +iE +iD7+i Au+i@ +i>+i=S+i&;+i:+i90 +i 6o +i5+i3+i2L +i0 +i/+i.*+i, +i+i +i* +i( +i'F+i%+i #$ +i! +i b+i+i+i@+i +i 6NDorado Midas ManualEdward R. Fiala24 June 198361Table 15B: MemX DMux Signals* = moved elsewhere (3 bits for Mcr_ are moved)MidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberSTOUT65 1520LoadEn'Never 1521EcLoadEn'Never 1522ShiftEn'Tn ge 2 1523EnEcGen'Tn ge 2 1524MapWait-ST'Tn ge 2 1525STPerrNow'Never 1526EnableAllModsNever 1527StartEc1Never 1530PairFullAlways 1531TransportaAlways 1532EcFault'Never 1533MemError'Never 1534-- 1535ChipsAre256/16KNever 1536ChipsAre64KNever 1537VicSTPerr-.NeverTAGAT66 1540MemColSelaNever 1541EcHasATn ge 2 1542PtagNever 1543MapWait-Ec2Tn ge 2 1544Dtag'Tn ge 2 1545sHoldAlways 1546MapWait-MemState'Always 1547MapRfshAlways 1550AcanHaveDTn ge 2 1551CacheRefInPair'Tn ge 2 1552EcWordRefToDAlways 1553ChkLastPh6Tn ge 21554:1557Atask.0 to .3Tn ge 2MEMST67 1560MapWait-MemDNever 1561MapWait-MemIOAlways 1562MemIdle'Always 1563MemFreeTn ge 21564:1567MemState.0 to 3Tn ge 2 1570FinNextTn ge 2 1571MemRfshTn ge 2 1572StopFinTaskLoadTn ge 2 1573DdataGood'Tn ge 2 1574MakeSout_DTn ge 21575:1577MakeTransport[0:2]Never**--701600:1607-- fp!q5 G?fpbs ^u/ [t:+i Z:+i Y): V!u+iT+iS_+iQ+iP +iO= +iM +iL{+iK+iI +iHY+iF+iED7+iB +iAu +i > +i=S+i;+i: +i90+i7+i6o+i5+i3+i2L+i0 +i/ +i.* +i +i +i* +i(+i'F+i%+i$+i#$+i!+i b +i +i+i V 2ANDorado Midas ManualEdward R. Fiala24 June 198362Table 15C: MemX DMux Signals* = moved elsewhere (ProcSrn[0:3] and 3 bits for Mcr_ are moved)MidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberFLTMEM71* 1620WakeOnCL* 1621ReportSE'* 1622NoWakeups 1623ProcSrn_'Tn ge 1 1624FaultsNever 1625LoadFltSrnIf independent of FaultSrn eq 0 1626ReportFaultAlways 1627MapPEInMemNever 1630MapTroubleInMemNever 1631RfshInMemTn ge 2 1632WriteInMem'Tn ge 2 1633MemWPNever 1634IOFetchInMem'Tn ge 2 1635RefUsesD10InMem'Tn ge 2 1636RefUsesDInMemTn ge 2 1637DirtyIOFetchInMemTn ge 2RFSSRN72 1640STPerrNever 1641MapPerrNever 1642HitPerrNever 1643WantRfshTn ge 2 1644NeedRfshAlways 1645StartMemaTn ge 2 1646StkWakeNever 1647_FaultInfoDly'Never1650:1653MapSrn.0 to 3Tn ge 2654:1657MemSrn.0 to 3Tn ge 2EC1MAKE73 1660StartEc2'Tn ge 2 1661Ec1Free'Tn ge 2 1662Ec1IdleAlways1663:1664Ec1Func.0 to 1Tn ge 21665:1667Ec1State.0 to 2Tn ge 2 1670EcWantsAaTn ge 2 1671FoutNextTn ge 2 usually 1672MakeFout_DTn ge 2 usually 1673MakeD_CDTn ge 2 usually 1674MakeD_DbufAlways 1675MakeF_DAlways 1676MakeMD_DAlways 1677MakeMDM_D'Tn ge 2MAPCTRL741700:1701MapbufHi.0 to 1Never 1702MapRAS'Tn ge 2 when forced high 1703MapCAS'Tn ge 2 when forced high 1704MapWE'Tn ge 2 % StartMap 1705RefWE'Tn ge 2 1706DirtyWE'Tn ge 2 % StartMap 17070 1710MapWaitAlways 1711WantMapWait'Always 1712ValidMapFltInEc2'Tn ge 21713:1714MapFnc.0' to 1'Tn ge 21715:1717MapState.0 to 2Tn ge 2 fp!q5 G?fpbs ^u@ [t:+i Z:+i Y): V!uTS_Q+iP+iO= +iM +iL{ +iK+iI+iHY +iF+iE +iD7+iB +iAu+i >+i=S+i;+i:+i90+i7+i6o+i5 +i3 +i2L +i /+i.*+i,+i+i +i*+i(+i'F+i % +i $+i #$ +i!+i b+i +i @+i+i~+i+i+i\+i+i: +i+ix+i +i L2A\,Dorado Midas ManualEdward R. Fiala24 June 198363Table 15D: MemX DMux Signals* = moved elsewhere (ProcSrn[0:3] and 3 bits for Mcr_ are moved)MidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberPEEC751720:1723PEsrn.0 to 3Always1724:1727Ec1Srn.0 to 3Tn ge 2 1730CacheLoad'Always 1731Ec2FreeTn ge 2 1732Ec2IdleAlways1733:1734Ec2Func.0 to 1Tn ge 21735:1737Ec2State.0 to 2Tn ge 2INMAP76 1740RefUsesDInMap'DirtyIOFetchInMap % ((Tn ge 2) & StartMap) 1741RefUsesD10InMap'Tn ge 2 1742DirtyIOFetchInMap'Never 1743WriteInMap'Tn ge 2 1744IOFetchInMap'Tn ge 2 1745_MapInMapNever 1746Store_InMap'Tn ge 2 1747EcWantsPipe4'Tn ge 21750:1757-- fp!q5 G?fppbs ^u@ [t:+i Z:+i Y): V!u +iT +iS_ +iQ+iP+iO= +iM+i K +iI+iHY+iF +iE +iD7+iB +iAu +i@ >I9)Dorado Midas ManualEdward R. Fiala24 June 198364Table 16: Disk Controller DMux SignalsMidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberKSTATE100 20000 2001IndexTW 2002SectorTW 2003SeekTagTW 2004RdFifoTW 2005WrFifoTW 2006ReadData 2007WriteData 2010EnableRun 2011DebugMode 2012RdOnlyBlock' 2013WriteBlock' 2014CheckBlock' 2015Active2016:2017Select[0:1]KSTAT101 2020SeekInc 2021HeadOvfl 2022DevCheck 2023NotSelected 2024NotOnLine 2025NotReady 2026SectorOvfl 2027FifoUnderflow 2030FifoOverflow 2031ReadDataErr 2032ReadOnly 2033CylOffset 2034IOBParityErr 2035FifoParityErr 2036WriteError 2037ReadErrorKRAM1022040:2043RamAddr[0:3]2044:2057Ram[4:15]KTAG103 2060DriveTag 2061CylinderTag 2062HeadTag 2063ControlTag 2064Tag.000 2065Tag.002066:2077Tag[0:9]KFIFO104 2100ShiftIn 2101ShiftOut 2102ComputeECC 2103NextBlock 2104LoadTag 2105CntDone' 2106OutRegFull 2107InRegFull2110:1113FifoWaddr[0:3]2114:2117FifoRaddr[0:3] fp!q5 G?fpUbs' ^t:+i ]:+i \1: Y)uWVgUSREPON#LKa J H G?E CA@[> =<8: 9w 8 6 5U32 12 / .q + *N '&, $#j "  H & dB     T2AYhDorado Midas ManualEdward R. Fiala24 June 198365Table 17: Ethernet Controller DMux SignalsMidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberERX0105 2120PDNew 2121PDOld2122:2125PDCnt[0:3] 2126PDCntCtrl 2127ReportCollisions 2130RxWakeupsOn 2131EthData.18 2132RxCRCError 2133-- 2134RxDataLate 2135RxBusRegFull 2136RxFifoFull 2137RxFifoEmptyETX1062140:2142TxState[0:2] 2143TxEOP 2144TxBusRegFull' 2145TxGone 2146TxSREmpty' 2147TxCntDwn' 2150TxCRCEnbl 2151TxGo 2152TxData2153:2154TxSRCtrl[0:1] 2155PEOutput 2156TxFifoFull 2157TxFifoEmptyERX11072160:2162RxState[0:2] 2163RxCollision 2164PDCarrier2165:2166PDEvent[0:1] 2167RxSRFull' 2170RxEOP 2171RxSync' 2172RxIncTrans 2173RxCRCReset 2174RxCRCClk 2175RxData2176:2177RxSRCtrl[0:1] fp!q5 G?fp,bs+ ^t:+i ]:+i \1: Y)uWVg USRE P O N#L Ka J H E D}C A@[ >=<8:9w 86 5U 2 12 /.q -+*N( ' &,$#j  !2AFlDorado Midas ManualEdward R. Fiala24 June 198366Table 18A: IFU DMux SignalsMidasMidasDMuxSignalSimulationWordWordAddressNameConditionNameNumberMEMRQ1202400:2407PcF[8:15]Tn eq 2 & Testing' 2410NewFTn eq 2 & Testing' 2411KillResponseTn ge 1 & Testing' 2412PauseTn ge 2 & Testing' unless IFUM write 2413RefOutstandingNever 2414IncPcFNever 2415IncPcFG'Always 2416WantIfuRef'Always 2417ThreeOutOfFiveAlwaysLOADS121 2420ValidRamAlways 2421J_OddFAlways 2422RealPcFG.15Tn eq 2 & Testing' unless IFUM write 2423FDvTn eq 2 & Testing' unless IFUM write 2424GDvTn eq 2 & Testing' unless IFUM write 2425HDvTn eq 2 & Testing' unless IFUM write 2426JDvTn eq 2 & Testing' unless IFUM write 2427MDv'Tn eq 2 & Testing' unless IFUM write 2430EnableFG'Always 2431XLdAlways 2432AlphaXLdAlways 2433BrkLdTn ne 1 2434MLdAlways 2435InstrAddrLdTn ge 2 2436JLdaAlways 2437GLd'AlwaysHJ1222440:2447H[0:7]Never2450:2457J[0:7]bTn ge 2 & Testing' unless IFUM write when no clock oron J_H the 1's are checkedMX123 2460TwoAlphaXTn ge 2 & Testing' 2461JFaultTn ge 2 & Testing' unless IFUM write 2462HFault'Tn eq 2 & Testing' 2463NM=17Tn ge 2 & Testing' 2464TwoAlphaMTn ge 2 & Testing' 2465TypeJumpM'Tn ge 2 & Testing'2466:2467LengthM[0:1]Tn ge 2 & Testing'2470:2471DSel[0:1]Tn ge 2 & Testing' unless XShift with DSel eq 02472:2473LengthX[0:1]Tn ge 2 & Testing'2474:2477NX[0:3]Tn ge 2 & Testing' when unclocked or NM eq 17 fp!q5 G?fp Qbs ^t:+i ]:+i \1: Y)u+iW+iVg +iU+i"S +iRE+iP+iO +iN# +i Ka+iJ+iH +i$G?+i"E+i"D}+i"C+i"A+i"@[+i>+i=+i<8+i:+i9w +i8+i6+i 3+i2+i0+i12 .q+i-+i"++i*N+i(+i' +i&, +i$+i% #j +i" +i( ?+i=+i<8+i:+i9w +i8+i 5U+i3+i2+i12+i/+i.q+i-+i+ +i*N( +i' +i&, +i$+i #6E Dorado Midas ManualEdward R. Fiala24 June 198368Table 19: Display Controller DMux SignalsMidasMidasMidasSignalSimulationWordWordDMuxNameConditionNameNumberAddressAPTRS140 3000ACurrentWCBFlagNever3001:3007AReaderPtr.1 to 7Never 3010ANextWCBFlagNever3011:3017AWriterPtr.1 to 7NeverBPTRS141 3020BCurrentWCBFlagNever3021:3027BReaderPtr.1 to 7Never 3030BNextWCBFlagNever3031:3037BWriterPtr.1 to 7NeverITEMS1423040:3047AItem.0 to 7Never3050:3057BItem.0 to 7NeverSPSIZE1433060:3063AServicePtr.1 to 4Never3064:3067BServicePtr.1 to 4Never 3070AFifoFullNever 3071BFifoFullNever 3072ASize8Never 3073ASize8-4Never 3074ASize8-4-2Never 3075BSize8Never 3076BSize8-4Never 3077BSize8-4-2NeverRESON144 3100AOnNever 3102BOnNever3103:3104ARes.0 to 1Never3105:3106BRes.0 to 1Never 3107OISRcvdDataNever3110:3117-- fp!q5 G?fp{bs* ^t:+i ]:+i \1: Y)u+iW+iVg +iU+i RE+iP+iO +iN#+i Ka +iJ +i G?+iE+iD}+iC+iA+i@[+i> +i=+i<8+i: +i 8+i6+i5U +i3 +i2 +i12( /g2A8Dorado Midas ManualEdward R. Fiala24 June 198369Table 20: Other DMux Stuff* BMUX and ESTAT signals are obtained from the four-bit slice readout. The temperature sensing signals are movedfrom the position in which the hardware reads them out.MidasMidasMidasSignalSimulationWordWordDMuxNameConditionNameNumberAddressTEMP160 3500CBTempNever 3501BaseTempNever 3502ProcHTempNever 3503ProcLTempNever 3504IFUTempNever 3505DskEthTempNever3506:3517--BMUX163 --BMux[0:17]if driven from ALUBESTAT164 4020PEIMrh 4021PEIMlh 4022MdPE 4023RAMPEen 4024IOBPE 4025RAMPE 4026MemPE 4027MemPEen 4030CIMPErh 4031CIMPElh 4032Stopped 4033MdPEen 4034IMrhPEen 4035IMlhPEen 4036IOBPEen 4037MIRDebugen fp!q5 G?fp bs ^uY ]7 Zt:+i Y):+i W: Tu+iS_+iQ+iP+iO=+iM +iL{ I +i FED7BAu@>=S;:9076o532L  2)=5Dorado Midas ManualEdward R. Fiala24 June 19837042. Hardware Read/Write Methods This section discusses the methods Midas uses to read and write each register and memory, so thatfailing data paths can be identified when Midas reports problems via "Test" or "TestAll". Thesesequences are included to help maintainers determine what registers or data paths might bemalfunctioning when something is found to be non-working.To understand how the sequences given below communicate information between Midas and theDorado, you have to understand the lowest-level communication protocols which are discussed in"Dorado Debugging Interface" ([Indigo]DoradoDebugging.press). These primitivesare outlined here:DoradoOutStoring into DoradoOut sends 13d bits of control information over the printerinterface to the (connected) Dorado. This information is interpreted by thereceiving hardware as a 3-bit address field, 9-bit data field, and 1-bit strobe.StrobeA strobe operation consists of 3 DoradoOut's identical except for the strobe bit,which is first off, then on, then off again. Strobe sequences are used to sendcommands to the Dorado.Load ClockA register internal to the communication interface that can be loaded with onestrobe operation.Load ControlAnother register internal to the communication interface that can be loaded withone strobe operation.Load MIRMIR can be loaded by four strobe operations, each loading 9 bits of themicroinstruction. Midas computes and sends the parity also.Load CPRegTwo strobe operations load the 16d-bit CPReg, the register from which Midasusually sends data to the Dorado.Xct(mic)A microinstruction can be executed by loading it into MIR and single-stepping theDorado. To get data from Midas to the Dorado, Midas first loads CPReg withdata, then executes a microinstruction which does "Q _ Link" or "T _ Link", forexample, while the UseCPReg bit in the Clock register is true. This kind ofsequence is denoted by "Q _ CPReg(data)" below, which means that the data isrouted from CPReg through the multiplexor on the ContA board to the Q or Tregister. The fact that the B data path is used is not explicitly stated in themicroinstruction, but B is the only possible data path; this implicit use of data pathsin the examples below is consistent with the conventions of the microprogramminglanguage.Also, a function called "B _ RWCPReg", solely for use by Midas and thebaseboard microcomputer is used to do "Link _ B _ CPReg(data)". This functionis needed when reading and writing some registers in the control section.DoradoInReading from DoradoIn obtains 5 bits of data selected according to bits 0..4 in thelast DoradoOut operation; it is not necessary to use a strobe operation for thepurposes of DoradoIn. The fifth bit is always the current DMux bit; the first 4 bitscan be any of the 4 B nibbles, any of 4 error nibbles, either of two MAReg nibblesor the MASync bit (for communication with the baseboard microcomputer).Read BReading 16 bits of B is accomplished by a sequence of four DoradoOut/DoradoInoperations to obtain the 4 nibbles of B data. When a microinstruction is executedfor the purpose of extracting data on the B, it is written like "B* _ Q"; "*"denotes that Midas captures the B data.Read DMuxMidas has special microcode to extract all 2048d DMux signals using strobeoperations. This is done in about (32+39)/2 * 2048 * .00018 msec = 13 msec.Assembly code uses about 15 msec more appending B and ESTAT to the readout,rearranging certain signals, and computing histories.SelectTaskComplicated. See "Dorado Debugging Interface".SingleStepComplicated. See "Dorado Debugging Interface". fp!q5 G?fp arq ^e"? \$< ZQ Y9 U+. SN QP P4xMs%(K9JG7xHLFGEQxC IAx? 0>&x;@:<x8] B6!x4"/3g,240-/D($-)!,B +"#4)P(`&,>$+##jIx!6BGt5JGx~C E:\'x(%"*f+5x /x /H y=]Dorado Midas ManualEdward R. Fiala24 June 198371RunComplicated. See "Dorado Debugging Interface".StopComplicated. See "Dorado Debugging Interface".LoadDMDExecute a "manifold" operation by loading the 11-bit DMux address with a controlfunction and then executing it.MCXctMCXct is used to communicate with the baseboard microcomputer. Midas firstloads CPReg with a command and then interrupts the microcomputer withDoStrobe(Clock+BaseBAtten); a slowed strobing sequence is used because themicrocomputer requires it. Then Midas waits for an acknowledge by doingDoradoIn's until the microcomputer responds with MASync. MCXct can be usedwhile the Dorado is running to extract voltage, current, temperature, and daytimeinformation from the baseboard microcomputer. DoradoIn can be used to get twonibbles of information from the baseboard.Each sequence below gives the microinstructions or other sequences executed by Midas to read andwrite each register and memory. These sequences do not include the shifting and masking andother transformations which occur within Midas to position data. Sequences bracketed with "[]" areused to restore registers incidentally smashed on the read or write. The restoration sequences ARENOT executed when using "Test" or "TestAll"; they ARE executed when registers or memorywords appearing in a name value menu are accessed.D1OUTWrite only. This artificial register allows the user to execute the most primitive controlfunction for the Dorado interactively.STROBEWrite only by DoStrobe(D), which is equivalent to three D1OUT's with the strobe bit first off,then on, then off again. This artificial register allows the user to send strobed commandsinteractively.CPREGRead by B* _ CPReg;[Restore MIR].Write by Midas direct handle.MIRRead from DMux.Write by Midas direct handle.IMOUTArtificial read-only register (part of DMux memory).QRead by B* _ Q;[Restore MIR].Write by Q _ CPReg(new value); Noop;[Restore MIR; read DMux].CNTRead byT _ Cnt;B* _ T;[T _ CPReg(SavedT); Noop; restore MIR].Write byQ _ CPReg(new value);Cnt _ Q;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux].SHCRead byT _ ShC;B* _ T;[T _ CPReg(SavedT); Noop; restore MIR;].Write by fp!q5 G?fpxbAs/x` /x]-#\wxZC> X3W> V!3T+S_HQ>P* MOqB K3) IU G\ F$@ DZ2 A.sS?& <^;eJ: 65 2 /-V *N4 'F% #G$! }'\2 2 ( 3 =]"Dorado Midas ManualEdward R. Fiala24 June 198372Q _ CPReg(new value);ShC _ Q;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux].MEMBXRead byT _ Pointers;B* _ T;[T _ CPReg(SavedT); Noop; restore MIR].Write byMemBX _ S;[Restore MIR; read DMux].STKPRead byT _ TIOA&StkP;B* _ T;T _ Pointers;B* _ T;[T _ CPReg(SavedT); Noop; restore MIR]. Note that StkOvf and StkUnd are obtained fromPointers while the value in the register is obtained from TIOA&StkP.Write byQ _ CPReg(new value);StkP _ Q;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux]. StkOvf and StkUnd are read-only.TASKRead returns value saved at breakpoint.Write with SelectTask;[Restore MIR; read DMux].PROCSRNRead by B* _ Config;[Restore MIR].Write by Q _ CPReg(new value); ProcSRN _ Q;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux].MCRRead from DMux.Write byT _ CPReg(new value);MCR _ T;[T _ CPReg(SavedT); Noop; restore MIR; read DMux].The MCR register is written only when DMuxTab is selected by the "DMux" action. WritingMCR is illegal when OldDMuxTab or DWrong is selected; and DCheck is written insteadwhen DCheck is selected.CONFIGRead only byB* _ Config;[Restore MIR].PCXRead only byB* _ PCX;[Restore MIR].INSSETRead byB* _ IFUMLH';[Restore MIR].Write byQ _ CPReg(new value);InsSetOrEvent _ Q;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux]. fp!q5 G?fpbAs`_2 \w[ YXU'UTVR ON M,K JjI =GDE CBI@E =';A9 65x 2+1y2 .q+*r)'2&OG$@#  %   [  1 2  p2, M2A\Dorado Midas ManualEdward R. Fiala24 June 198373TESTSYNWrite only bySelectTask(16B);T _ CPReg(constant);MCR _ T;Q _ CPReg(new value);Noop;Store _ T, DBuf _ Q;LoadTestSyndrome;[T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT); Noop; Q _ CPReg(SavedQ);SelectTask(SavedTask); restore MIR; read DMux].UPTIMEArtificial read-only register (part of ABSOL memory).TGLITCHArtificial read-only register (part of ABSOL memory).EVCNTARead only by B* _ EventCntA';[Restore MIR].EVCNTBRead by B* _ EventCntB';[Restore MIR].Write byQ _ CPReg(new value);EventCntB _ Q;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux].AATOVAArtificial register.ESTATActually read by Midas direct handle but treated as part of the DMux memory. This is aregister rather than simply another word in the DMux memory so that the error enables canbe written.Write error enables with LoadDMD; write MIRDebug with four LoadDMD's.ABSOLRead ABSOL by two MCXct's followed by, if the Dorado isn't running,DoStrobe(Clock+UseCPReg).Write with MCXct(constant+new value) followed by, if the Dorado isn't running,DoStrobe(Clock+UseCPReg);TPCRead from a static if address .eq. SavedTask; otherwise,RdTPC _ CPReg(address);B* _ Link;[If address .eq. SavedTask, then done; otherwise, B _ RWCPReg(SavedLink); Noop; restoreMIR].If address eq SavedTask then write static and done;otherwise, write byB _ RWCPReg(new value);LdTPC _ CPReg(address);Noop;[B _ RWCPReg(SavedLink); Noop; restore MIR; read DMux].TLINKRead bySelectTask(address);B* _ Link;[SelectTask(SavedTask); Noop; restore MIR; read DMux]Write bySelectTask(address);B _ RWCPReg(SavedLink);[SelectTask(SavedTask); Noop; restore MIR; read DMux]. fp!q5 G?fp bAs `_^\[]YXW;9U/ R5 O5 LKa HYF DZBA @72 =/ :'M 8>7f 4E 1-0_-5-6!,_ )W8'& %57#!63tR7 J (5)  g6p D=[Dorado Midas ManualEdward R. Fiala24 June 198374OLINKArtificial memory read and written like TLINK.IMBDThe setup code common to both the read and the write of IMBD first zeroes BNPC, which iswire-OR'ed with the control store address loaded by manifold operations. This is accomplishedby loading TPC for task 17B with 0 and then notifying that task; the notify causes the priorityencoder to select task 17B, so BNPC becomes equal to 0.Read bySelectTask(0);RdTPC _ CPReg(17B);B* _ Link (save old TPC(17B) for restoration later);B _ RWCPReg(0);LdTPC _ CPReg(17B);Noop;LoadMIR(Notify[17B]); single-step with Freeze off;B _ CPReg(-1);three LoadDMD's to setup the control store address;LoadDMD(constant);read DMux to get the IMOUT signals;four LoadDMD's to clear IMBD adress again;[B _ RWCPReg(SavedTPC17B); LdTPC _ CPReg(17B); Noop; B _ RWCPReg(SavedLink);SelectTask(SavedTask); DoStrobe(Clock+UseCPReg+ClrReady); DoStrobe(Clock+UseCPReg);Noop; restore MIR].Write bySelectTask(0);RdTPC _ CPReg(17B);B _ Link (UseCPReg turned off) to save TPC(17B) for later;B _ RWCPReg(0);LdTPC_ CPReg(17B);Noop;LoadMIR(Notify[17]); single-step with Freeze off;B _ CPReg(-1);three LoadDMD's to setup the control store address;four LoadDMD's to load left-half of the instruction;four LoadDMD's to load right-half of the instruction;four LoadDMD's to clear the Control register;three more LoadDMD's to something else;[B _ RWCPReg(SavedTPC17B); LdTPC _ CPReg(17B); Noop; B _ RWCPReg(SavedLink);SelectTask(SavedTask); DoStrobe(constant); DoStrobe(constant); restore MIR; read DMux;].IMArtificial form of IMX memory.IMXRead byB _ RWCPReg(address);B* _ ReadIM[0];B _ RWCPReg(address);B* _ ReadIM[1];B _ RWCPReg(address);B* _ ReadIM[2];B _ RWCPReg(address);B* _ ReadIM[3];[B _ RWCPReg(SavedLink); Noop; restore MIR].Write byB _ RWCPReg(address);IMLHR0POK _ CPReg(new value);B _ RWCPReg(address);IMRHBPOK _ CPReg(new value);[B _ RWCPReg(SavedLink); Noop; Noop; restore MIR; read DMux].ALUFMRead from static if address is 0 or 16B; otherwise, read byT _ ALUFM, ALUF[address];B* _ T; fp!q5 G?fp bAs. _9<]!=\w:%[7XxW UTV4RQP4N2Mr L3JIP#G*F.E-9CA.? >m= :;:K8716( 433g4250-/D'-.,F ){ &s%#"P .l ,m K= ;   =]nDorado Midas ManualEdward R. Fiala24 June 198375[T _ CPReg(SavedT); Noop; restore MIR].Write static if address is 0 or 16B; otherwise, write byQ _ CPReg(new value);ALUFMRW _ Q, ALUF[address];Noop;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux].TRead bySelectTask(address);B* _ T;[SelectTask(SavedTask); Noop; restore MIR].Write bySelectTask(address);T _ CPReg(new value);Noop;[Restore MIR; read DMux].RBASERead bySelectTask(address);T _ Pointers;B* _ T;[T _ CPReg(SavedT); SelectTask(SavedTask); Noop; restore MIR].Write bySelectTask(address);T _ CPReg(new value);Noop;[SelectTask(SavedTask); restore MIR; read DMux].TIOARead bySelectTask(Address);T _ TIOA&StkP;B* _ T;[T _ CPReg(SavedT); SelectTask(SavedTask); Noop; restore MIR].Write bySelectTask(Address);Q _ CPReg(new value);TIOA _ Q;Noop;[Q _ CPReg(SavedQ); Noop; SelectTask(SavedTask); restore MIR; read DMux].MEMBASERead bySelectTask(address);T _ Pointers;B* _ T;[T _ CPReg(SavedT); SelectTask(SavedTask); Noop; restore MIR].Write byMemBase _
S;Noop;[SelectTask(SavedTask); restore MIR; read DMux].RMRead byRBase _ S;B _ RB, RStk[lowaddress];[RBase _ S; Noop; restore MIR].Write byRBase _ S;RB _ CPReg(new value), RStk[lowaddress];Noop;[RBase _ S; restore MIR; read DMux]. fp!q5 G?fpbAs'`S8^]\1Z2 WVgUS+QONFLK H|GE DZB>@[>=<8:0 76o5 32L>/.M,+*+(I %$a# ! ?>@~0 vT+U (  30 2A]Dorado Midas ManualEdward R. Fiala24 June 198376STK and STKXRead byQ _ CPReg(address);StkP _ Q;SelectTask(0);B _ RB, RStk[0], Blk[1];[SelectTask(SavedTask); Q _ CPReg(SavedStkP); StkP _ Q; Q _ CPReg(SavedQ); Noop;restore MIR].Write byQ _ CPReg(address);StkP _ Q;SelectTask(0);RB _ CPReg(new value), RStk[0], Blk[1];Noop;[Q _ CPReg(SavedStkP); StkP _ Q; Q _ CPReg(SavedQ); Noop; SelectTask(SavedTask);restore MIR; read DMux].PIPERead only byT _ CPReg(address);ProcSRN _ T;B* _ VAhi;*First screen lineB* _ VAlo;B* _ Pipe2';*Second screen lineB _ Map';B _ Errors';*Third screen lineB _ Pipe5;[T _ CPReg(SavedSRN); ProcSRN _ T; T _ CPReg(SavedT); Noop; restore MIR].BRRead byMemBase _
S;T _ CPReg(constant);MCR _ T;T _ CPReg(0);DummyRef _ T;Noop;B* _ VAhi;B* _ VAlo;[MemBase _ S; T _ CPReg(SavedSRN); ProcSRN _ T; T _CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT); SelectTask(SavedTask); Noop; restoreMIR].Write byMemBase _
S;T _ CPReg(constant);MCR _ T;T _ CPReg(highdata);BRhi _ T;T _ CPReg(lowdata);BRlo _ T;Noop;[MemBase _ S; T _ CPReg(SavedSRN); ProcSRN _ T; T _CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT); SelectTask(SavedTask); restore MIR;read DMux].For both the read and the write, the cleanup is done by a subroutine shared with othermemories. "T _ CPReg(SavedSRN); ProcSRN _ T;" and the "SelectTask(SavedTask)" areextraneous to the requirements of BR.BRXSame as BR with "MemBaseX _
S" replacing "MemBase _
S".CACHEARead bySelectTask(17B);T _ CPReg(1);ProcSRN _ T; fp!q5 G?fp bAs `_^ \[]-#Y W^UTS< Q'PzO5M J IPG F # E- C # BlA # ? >JI ;A9875 4^ 21 0; .\6]-z8,){(&%X#"!6t\6]:R NS H% <     <]n1Dorado Midas ManualEdward R. Fiala24 June 198377MemBase _ 36S;(Other stuff to save BR 36 if not saved yet since breakpoint--this stuff isn't done automaticallyat breakpoints because it prevents continuing.);T _ CPReg(constant+lowaddress);MCR _ T;T _ CPReg(hiaddress);Noop;TurnOffRefresh with two LoadDMD's;DummyRef _ T;Noop;B* _ Pipe5;restore Refresh;B* _ VAhi;B* _ VAlo;[T _ CPReg(DisHold+DisCF+NoWake); MCR _ T; T _ CPReg(SaveBR36!0); BRhi _ T; T_ CPReg(SaveBR36!1); Xct(BRLOFT); MemBase _ S; T _CPReg(SavedSRN); ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(OldTask); restore MIR; read DMux].Write bySelectTask(17B);T _ CPReg(1);ProcSRN _ T;MemBase _ 36S;(Other stuff to save BR 36 if not saved yet since breakpoint);T _ CPReg(constant);MCR _ T;T _ CPReg(hi(address - new flag value));BRhi _ T;T _ CPReg(low(address - new flag value));BRlo _ T;T _ CPReg(new flag value);Noop;Fetch _ T;Noop;Fetch _ T;Noop;T _ CPReg(constant+lowaddress);MCR _ T;T _ CPReg(new flag value);Noop;TurnOffRefresh;DummyRef _ T;CFlags _ T;restore Refresh;Noop;[T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0); BRhi _ T; T _CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _ CPReg(SavedSRN);ProcSRN _ T; (T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(SavedTask); restore MIR; read DMux].CACHEDRead byT _ CPReg(constant);MCR _ T;T _ CPReg(hiaddress);BRhi _ T;T _ CPReg(lowaddress);BRlo _ T;T _ CPReg(0);Noop;Fetch _ T;T _ Md;B* _ T;[T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0); BRhi _ T; T _ fp!q5 G?fpbAs `H_0^\[]YX"W; UTy SQ PW N%(M:L51J-H6FEt D B AR>?>=/(;:n)9 76K4 32) 0/h.,+E)( '# %$a# )!%( ?e-f/ uS1 o   M ) *2A\!Dorado Midas ManualEdward R. Fiala24 June 198378CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _ CPReg(SavedSRN);ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(SavedTask); Noop; restore MIR].Write byT _ CPReg(constant);MCR _ T;T _ CPReg(hiaddress);BRhi _ T;T _ CPReg(lowaddress);BRlo _ T;T _ CPReg(0);Noop;Q _ CPReg(new value);Store _ T,DBuf _ Q;Noop;[Q _ CPReg(SavedQ); Noop; T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0);BRhi _ T; T _ CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _CPReg(SavedSRN); ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(SavedTask); restore MIR; read DMux].MAPRead bySelectTask(17B);T _ CPReg(1);ProcSRN _ T;MemBase _ 36S;(Other stuff to save BR 36 if not saved yet since breakpoint);T _ CPReg(constant);MCR _ T;T _ CPReg(hiaddress);BRhi _ T;T _ CPReg(lowaddress);BRlo _ T;T _ CPReg(0);Noop;RBase _ 0S;RB _ CPReg(0), RStk[0];RMap _ RB, RStk[0];B* _ Map';B* _ Errors';B* _ Config';[RB _ CPReg(SavedR0), RStk[0]; RBase _ S; T _ CPReg(constant); MCR _T; T _ CPReg(SavedBR36!0); BRhi _ T; XctL16T(SavedBR36!1); BRlo _ T; MemBase _S; T _ CPReg(SavedSRN); ProcSRN _ T; T _ CPReg(SavedMCR); MCR _T; T _ CPReg(SavedT); SelectTask(SavedTask); Noop; restore MIR].Write bySelectTask(17B);T _ CPReg(1);ProcSRN _ T;MemBase _ 36S;(Other stuff to save BR 36 if not saved yet since breakpoint);T _ CPReg(constant);MCR _ T;T _ CPReg(hiaddress);BRhi _ T;T _ CPReg(lowaddress);BRlo _ T;T _ CPReg(0);Noop;Q _ CPReg(hi new value);TIOA _ Q;Q _ CPReg(low new value);Map _ T, MapBuf _ Q; fp!q5 G?fpbAs.`n=_*\[Z XW^UTS< QPzO MLXJ7I+H61F/ CBlA ? >J <>;:'87f643C 10 /!-,_ * ) (=K&N%|4$@!}  Z  >8vT 2  p 8 2A^Dorado Midas ManualEdward R. Fiala24 June 198379Noop;Q _ CPReg(SavedTIOA);TIOA _ Q;Q _ CPReg(SavedQ);Noop;[T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0); BRhi _ T; T _CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _ CPReg(SavedSRN);ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(SavedTask); restore MIR; read DMux].VMRead bySelectTask(17B);T _ CPReg(1);ProcSRN _ T;MemBase _ 36S;(Other stuff to save BR 36 if not saved yet since breakpoint);T _ CPReg(constant);MCR _ T;T _ CPReg(hiaddress);BRhi _ T;T _ CPReg(lowaddress);BRlo _ T;T _ CPReg(0);Noop;Fetch _ T;T _ Md;B* _ T;[T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0); BRhi _ T; T _CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _ CPReg(SavedSRN);ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(SavedTask); Noop; restore MIR].Write bySelectTask(17B);T _ CPReg(1);ProcSRN _ T;MemBase _ 36S;(Other stuff to save BR 36 if not saved yet since breakpoint);T _ CPReg(constant);MCR _ T;T _ CPReg(hiaddress);BRhi _ T;T _ CPReg(lowaddress);BRlo _ T;T _ CPReg(0);Noop;Q _ CPReg(new value);Store _ T, DBuf _ Q;Noop;[Q _ CPReg(SavedQ); Noop; T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0);BRhi _ T; T _ CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _CPReg(SavedSRN); ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT);SelectTask(SavedTask); restore MIR; read DMux].IFUMRead byIFUReset;Q _ CPReg(F(address));InsSetOrEvent _ Q;Q _ CPReg(F(address));BrkIns _ Q;Noop;B* _ IFUMRH';B* _ IFUMLH';[Q _ CPReg(SavedQ); Noop; restore MIR]. fp!q5 G?fpbAs`_^\[] )Y.Xn=W;/ T3RQq P N MO>KJI-GFkE C BI@ ?>&< );e.:n=8*643C 1 0 /!>-,_*)(=&%| $"!Y77+1u/ m K )  g  '* 2A](Dorado Midas ManualEdward R. Fiala24 June 198380Write byIFUReset;Q _ CPReg(hiaddress);InsSetOrEvent _ Q;Q _ CPReg(lowaddress);BrkIns _ Q;Noop;Q _ CPReg(new value);IFUMLH _ Q;B _ Q;Q _ CPReg(new value);IFUMRH _ Q;B _ Q;Noop;[Q _ CPReg(SavedQ); Noop; restore MIR; read DMux].LDRArtificial memory.MDATAArtificial memory.MADDRArtificial memory.DMUXRead only by the special Alto microcode and software discussed at the beginning of thissection, when "current" DMux readout is selected. Old, wrong, or checked tables may beselected for this memory by the "DMux" command action; when DChecked is selected, writesare legal.DHISTArtificial memory.VHArtificial memory.MDRead only bySelectTask(address);T _ Md;B* _ T;[T _ CPReg(SavedT); SelectTask(SavedTask)].TASKNArtificial memory which cannot be read or written (used for displaying some valuessymbolically).DEVICEArtificial memory which cannot be read or written (used for displaying some valuessymbolically).MSTATArtificial form of ABSOL memory.ABSArtificial form of ABSOL memory.ROWRead lines 0 to 3 like CACHEA; line 4 (Victim/Next Victim) bySelectTask(17B);T _ CPReg(1);ProcSRN _ T;MemBase _ 36S;(other stuff to save BR 36 if not saved yet since breakpoint);T _ CPReg(constant);MCR _ T;T _ CPReg(F(address));DummyRef _ T;Noop;B* _ Pipe5;[T _ CPReg(constant); MCR _ T; T _ CPReg(SavedBR36!0); BRhi _ T; T _CPReg(SavedBR36!1); BRlo _ T; MemBase _ S; T _ CPReg(SavedSRN);ProcSRN _ T; T _ CPReg(SavedMCR); MCR _ T; T _ CPReg(SavedT); fp!q5 G?fpbAs`_^\[] YXW; UTyS QPWN2 K H E B KAuA@@> ; 8 5 4:21y0+ -!1+ (!1'F $> !6 .=l   J>( f   ) D. n= =]KDorado Midas ManualEdward R. Fiala24 June 198381SelectTask(SavedTask); Noop; restore MIR]Write rows 0 to 3 like CACHEA; row 4 is read-only. fp!q5 G?fpbAs)_2 _2A%MidasPicture.silLoaded: KERNELBEGIN;Sample Midas DisplayGo at 0:BEGIN, BrkP after 0:QERR+1 at 0:QERR+2RunProg RdCmds Brk UnBrk Go SS OS Passive Ld LdSyms Cmpr Dtach Reset SetClkConfig PEscan TestAll Test SimTest SimGo T1 T2 T3 RepGo RepSS RepT2 FieldsLDRtest ShowCmds WrtCmds Virtual DMuxCONFIG 0 PROBLEMS 0 UPTIME 0 days 3:24:42CLKRUN 1040 OUTOFSPEC 0 TGLITCH 0 days 1:2:31ESTAT 0 BADSUPPLYSPEC 0 COMM-ERRS 0INSSET 2 MIR-PES 0OLINK 20 344 VOLTS +12.07 +4.93 -1.98 -5.36TLINK 20 345 AMPS 6 27 75 150TPC 20 346 TEMP0 +27 +35 ?? +27RBASE 20 17 TEMP0+1 +27 +33 ?? ??MEMBASE 20 14 TEMP0+2 +25 +23 -- --T 20 177767 *RTEMP 133747 MINVOLTS +12.07 +4.93 -1.97 -5.18TIOA 20 0 *LTEMP 122001 MAXVOLTS +12.07 +4.93 -1.98 -5.36CNT 1 MINAMPS 5 26 73 86STKP 1 MAXAMPS 34 55 109 154MEMBX 3 BMUX 177777 MAXTEMP0 +27 +35 ?? +27Q 177766 MAXTEMP0+1 +27 +33 ?? ??PCX 0 SHC 0 MAXTEMP0+2 +25 +23 -- --PROCSRN 0 PIPE 0 0 DWATCH 0MCR 0 0 IMOUT 321747 023457TASK 0 0 MIR 124576 035777***8/1/799d'F$H $XX9 F$9 $X|9xp5%1.,sK*J)%ZJKXKVKUJKSKQKPJKNKLKKJKIKGKFIKDKBK?KAIK=K