ToBurdockUsersDateMarch27,1985FromHalMurrayLocationPARCSubjectBurdockManualOrganizationCSLXEROXIntroductionBurdockisaprogramtohelpdebugDLionandDicentramicrocodeandhardware.DickSnowdidsomeoftheearlyworkonBurdock.PittsJarvisdidmostoftheworkonAltoBurdock.ItwasusedtodebugtheearlyDLionhardwareandmicrocode.Ifyouareintotrivia,askyouroldtimerfriendsabouttheBurdockEtherKludge.TherearetwoversionsofBurdock.OnefordebuggingDLions,andanotherfordebuggingDicentras.Therearenopicturesinthismemosomanydetailswillmakemoresenseifyoucangetsomebodytogiveyouaquickdemo.DLionBurdockTheDLionversionofBurdockhastwowindows.Oneisfordebugging/controllingtheCPandoneforworkingontheIOP.Unfortunately,theoldLogicAnalyzerlashupfromAltoBurdocktotheTektronixlogicanalyzerpluginforascopehasneverbeenrevived.Ihaven'tworkedwithDLionburdockforalongtime,soyoushouldbeextrasuspiciousaboutpartsofthismemothetalkaboutDLions,expeciallypartsthattalkabouttheIOP.DicentraBurdockTheDicentraversionofBurdockalsohastwowindows.Again,thefirstoneisfordebugging/controllingtheCP.ThesecondoneistheHistoryBuffer.It'salogicanalyzerfortracingexecutionofCPmicrocode.(Dicentrasdon'thaveanIOP,sothereisn'tanyneedforanIOPWindow.)WheretofinditThereisprobablyaBurdocksubdirectoryonyourfavoriteAMesa/APilotarchivedirectory.Mesa11.1isarchivedon[Ramrod:OSBUNorth:Xerox]11.1>.TheDLionversionisBurdockDLion.bcd.TheDicentraversionisBurdockDicentra.bcd.TheyareontheBurdock>Friendssubdirectory.(Youdon'tneedpï_/îâqï_/ï_/î8îÇpï_/î-äqï_/î89î<Ÿï]ˆîâpïY¬îâqïY¬î8îåpïY¬î-äqïY¬î89pïUÐîâqïUÐî8îÇpïUÐî-ä qïUÐî89rïNNîqsïG±îâ tïDbî¤î‡îGîÄî §î"©î&î*›î/_î2jî8dî?gïB»îâqï@@î¤î÷î¹î&î°î `î"·î&î)‰î+†î1dî4vî8Nî:»î>î?¾ï>˜îâî¸îîŠîÊî šî#Ÿî'4î);î-Ãî0|î4<î9î?gï<ñîâ îÕîDîèî(îíî"Æî%î(Dî*›î.2î2»î6Šî8Öî>Sï;Jîâï8Îî¤î–îÚîvî³î!]î'4î*(î,Vî3î8=î:åî?áï7'îâîœ ï4¬î¤îÃî3îWî¡î!mî$+î(�î*bî.Jî2·î5î9Qî=î@½ï3îâî™î$îmîúî¨î!–î$Mî%wî)Buï/¶îâî;qï,gî¤î�î.î!î#ñî*¢î.8î2î9.î=Tî?áï*ÀîâîÁî+î!ˆî$Jî&ÿî)Fî.§î0·î3!î6p î?¾ï)îâî<îîÃîî"qî%{î*ûî,šî.êî5/î8qî=Îï'qîâîîIîî‰îTî°ï$öî¤î³îŽîî î$î)�î+Òî-î0#î3¨î5sî81î<³î>«ï#Oîâ îWî*î„î/î Ãî$íî'?î)èî-»î2ú î9Mî<§î?gï!§îâîÄî#uïYîâî‘qï î¤î�î,îùî ·î&Lî)î+˜î.Iî4Vî8¿î;$î>î@²ïbîâîîðî!Lî#õî&Êî+Zî.î/lî1Éî6°î;Tî=¦î>Íï»îâîjîÂînî!¾î#’î& î- î3Þî7�î:îî<ùî@ZïîâîkîeîîbîŸî�î"}uïÅîâîRî îËtïvî¤î|î½îeîeî"Ë î*…î,aî/rî4S î=Uï Ïîâ îLî6îcîî#àî&' î0ˆï 'îâîîÙîøî!»î/fî3•î:“î@²ï €îâîjîñî"Cî$Hî&¦î1k pî9¥ï €ï €î:îüî@#ïP‚îâî� îÀîwîî"ìî$î%ûî(|î,'î.†uïM2îâqïIãî¤îYîxîþî!áî%Ðî+…î1Pî3qî85î;Øî?ïH<îâî_î·î§î kî$Åî&µî*Œî--î3vî4Áî9Ìî<Åî?¾ïF”îâîôî£îÞwïDíîèîHïCEîè î/î"�î%î'žî*þî-†î1½î4Eï?öîèî ï>Nîè î/î"�î&Æî)Nî,®î/5î3mî5õï:ÿîèîï9Xîè î/î"�î&Æî)Nî,®î/5î3mî5õsï2ºîâî{ qï/jî¤î²îî9î©îWî!íï,ïî¤îÓî î;îÕî"¦î%eî(9î+žî,Ðî/°xî1qï,ïï,ïî2Mî4ùqî8Ãï,ïï,ïî9§î<³î@²ï+GîâîÃîØîîíî sî$,î'î)€î/î21î4Fî6´î:î>:î@9ï) îâî=îPî<î�î0î!ˆî#'î%lî(?î,î-¯î0Lî3î5Zî;î=Uï'ùîâî: îFî îÜî Sî$Çî'î-�î/„î3î7xî8zî<î?¾ï&Qîâî—î-îÆî î#xî [ï&Qï&Qî!Nî%äqî(Nï&Qï&Qî)9î+Çî.Œî2eî5î7úî;{ï$ªîâîNî½îuî,î×î _î%î(9î+tî1žî37î5–î:ï"/î¤î€î®î"î!òî%×î'î+…pî0&ï"/ï"/î0Îqï"/î4î6"î8†î;wî?Êï ‡îâî îÁî÷pîPï ‡ï ‡îøqï ‡î 7 î&êî)Bî,lî/‹ î6×î<(î=®ïàîâîñîpî ïàïàîHqïàî‚î@î"eî&|î'Æî)%î/œî1?î2\î5Îî9¹î;qî<Žï9îâï½î¤îåî/îsîŒî"^î%Õî'î-•î1§î4yî6nî:tî=“î@eïîâîUîüîºî¥îî î"™î)î+î-�î4î8fî;Rî?ïnîâîºîî©î­î´î!î&_sïÐîâqï �î¤î îmîÐî�î!ûî'‘î- î/–î1Kî6¨ î=¾î@Zï Úîâîî˜îOî=îgî#Dî%¢î(Mî*¡î0sî3wî5%î76ÿ€TVm$lInter-OfficeMemorandum3PanelsThebottompartoftheCPWindowandtheIOPWindowisacontrolPanel.Panelsdon'tfollowthenormalTajouserinterfaceconventions.EachPanelhasthreecolumnsoftiles.Eachtilehasaflagcharacter,aleftsidethatcontainsasymboliclocationtobedisplayed,andarightsidethatshowsthecontentsofthatlocation.AsyoumovethemousearoundinaPanel,thesideofthetileunderthemousewillbeblackened.Theflagcharacterisnormallyblank.Itisa*ifthecontentsofthattilehavechangedduringthelastrefreshofthatcell.Itisa~ifthelocationhaschangedbuttheCPorIOPisrunningsothecontentscan'tberefreshed.Ifyouclicktheleftmousebutton(Point)whileitisoverablackenedtile,thecontentsoftheTypeInfieldwillbestoredintotheblackenedtileslot.IfTypeInisempty,thecurrentselectionwillbeused.Ifthestoregoesintotheleftsideofatile,thecorrespondingcontentstotherightsidewillbedisplayed.Ifthestoregoesintotherightsideofatile,theywillbereadbackanddisplayed.NotethatthereisaseparateTypeInslotforeachPanel.Ifyouclicktherightmousebutton(Adjust)overtheleftorrightsidesofatile,it'stextstringwillbeappendedtoTypeIn.Ifyouclicktheleftmousebutton(Point)overatilewhileLeftShiftisdown,theleftsideofthetilewillbebumpedby+1andtherightsideofthetilewillberefreshed.TypeInisusedasaworkareaforthesymbolicevaluationoftheexpression.Thetextforthenewleftsidewillbenormalizedbythesymbolmachinery.(Ifthereisanameitwillbeused.Ifnottheclosestonewillbeusedtobuildasymbol+numberexpression.)Ifyouclicktherightmousebutton(Adjust)whileLeftShiftisdown,theleftsideofthetilewillbebumpedby-1andtherightsideofthetilewillberefreshed.(Again,TypeInisusedasaworkarea.)Ifyouclicktherightandleftmousebuttons(Menu)whileLeftShiftisdown,thecolumnwillbefilledbyadding+1totheleftsideforeachtileinthecolumn,andthecorrespondingrightsideswillbedisplayed.TypeInendsupwiththesymbolicexpressionforthelasttileused.Youcanscanthingsrapidlybyholdingthemouseoverthetoptileofacolumnandalternatelydoingstoresandfills.CPWindowTheCPWindowisusedtoexamineandcontroltheCP.Ithas3sections.ThetopsectionisaFileWindowusedtorecordarunningcommentaryofvariousinterestingthings.ThelogfileisCP.log$.ThesecondsectionisaFormSW.Mostofitiscommands,butthereareafewtypeinslotsandaslottoshowthecurrentstateoftheCP.TherestofthewindowistheCPPanel.CPStateBurdockkeepstrackoftheStateoftheCP.ManyoperationsrequirethatCPsïfåî à î)à vïfåîEÉsï_îâqï[²î¤îŽîiî_î*î œî#î(¢î+kî-Ýî0Ýî6~î7ûî97î=üïZ îâî1îÅîýî]î"î%Iî(Bî-è ïW�î¤îîáîUîÞî$Wxî&ïW�ïW�î&€qî(fïW�ïW�î)Aî,´î/î1‡î2°î5g î;§î<Ñî?FïUèîâîÌîLî‘îsî#Æî%‘î'� î.0î1î2Iî5·î8«î;–î?¾ïTAîâîHîøî½îBî Jî"øî&®î)î-Uî2 î3¯î4Ðî8éî;?î>î?¾ïR™îâîAîCî£îýî¨î ™ ïPî¤î‹îRîJîÆî$¦î(ãî*jî+æî-î.cî/Ôî2Cî7Âî9‹î×ïNwîâîJî³î îƒî"î#Êî&�î)kî*Ûî,?î-bî.çî0@î2˜î7Èî:5î?�ïLÐîâîAî•îYîGî²îéî ­î# î(|î+Îî-¾ ïJTî¤î-îìî0î—îî"vî&ïî+”î/Pî0®î2"î5Cî6uî=î?¾ïH­îâîTîîrîHî {î#)î%î)Cî,î.€î5î7gî:Wî;Üî@²ïGîâîhî¼îyî î"²î$—î(î)•î+èî/9î2Gî5î7gî9Ðî<œî>Iî?gïE^îâîA î8î§î!Uî#´î'î)Ýî,ˆî.y î4ïî6qî8Ðî<,î?FïC·îâîXîÀî®î}î½î‹î ±î#rî%yî(ªî,î.Õ î5aî8îî;Óî?rî@ôïBîâî:îî¤îáî!ï?•î¤îîÂîðîBî‡î"Ôî'8î,Žî/›î1íî4Tî6 î9Pî<Ÿî>Jî?gï=íîâîîÌî¢îMî>î"•î$Dï;rî¤î9îîSîÆîNî"¼î'Aî+ñî/î0[î2Íî6–î<|î=ûï9ËîâîDî»î•îPî±îîÀî!²î'$î)"î+¹î.sî0Ôî4(î7î8½î;î=€î@-ï8#îâ îîÉîî#î«î ®î$î&×î(íî+&î0Æ î7Bî8Õî; ï6|îâî¯î\îŽîâîÅî/î üî#œî%‚ î,�î.Žî0âî5Ÿ î<¤î>•ï4ÕîâîÂî`î“î]î}îâî!éî#ßî&Èî)œî.jî1Šî4©î7î:¾î<áî@ôï3-îâ î³ ï0²î¤î>î îaîØîCî#µî(?î-ºî1‡î7rî8öî=1î?©ï/ îâî³îeî¾îîºî¤î" î$î%¨î(Xî*±î-üî0Íî2î4Øî7/î9Ôî;¾ ï-dîâîÀî“îÿî;îéî î#�ï*éî¤î4îúîEî³îî!Úî$^î(Çî-Ìî2Ûî6Ÿî<€î=ûï)AîâîCî9îåî×îkî hî$ûî'‘î)Aî+¡î.î0ñî3/î6aî8Áî:pî<Ñï'šîâîsî¬ î|î¨î"Ýî%bî'- î-}î2*î5?î7*î:î•ïîîâî­îî“îâîuî!î#vî$±î'dî+¯î.Ûî1¥î2àî5ˆî7Hî:ãî=TïFîâîîÌî+îÖî¯îPî î"hî'”î(ÿî+_î-²uï øîâîAqï ©î¤î@î#î£î ixî"Öï ©ï ©î#²qï ©î&oî(6î*¢î-Zî1^ î8î<ïî?ÊÞTVm$•Inter-OfficeMemorandum4tobeinareasonablestate.CP/IOPDeadmeansthattheCPhascrashed,theIOPhascrashed,ortheCPhasn'tbeenBootedyet.HaltedmeansthattheCPhasbeeninitialized(Booted)andisnowstopped.Itcouldhaverunsomealready.Ifsoithasbeenmanuallystopped.RunningmeansthattheCPisrunningusercode.(It'srunningtheCPKernelwhenit'sintheHaltedorCPBreakstates.)CPBreakmeansthattheCPhashitabreakpoint.IOPStoppedmeansthattheIOPisstoppedoratabreakpoint.TheCPmustbeStoppedbeforeitcanbemanipulated.TheCPcouldbestoppedautomaticallywhentheIOPstops,butrefreshingtheCPPanelusuallytakesseveralseconds,andthat'sawasteoftimeifyouarechasinganIOPbug.BurdockpollsthestateoftheCP.Whenitchangesamessageisprintedinthelogwindow.IfitchangestoHaltedorCPBreak,theCPPanelisrefreshed.Built-insymbolsTheCPsymbolmanipulatonroutinescontainalargecollectionofbuilt-insymbols..CRnislocationnofRealControlStore..CVnislocationnofVirtualControlStore.(Thenthinstructioninthemicrocodelisting.)Pass2ofMassdeterminesthemappingbetweenCRandCV..MRnislocationnofMainRealmemory..MVnislocationnofMainVirtualmemory..MAPnisthenthwordofthemap..RHn,.Rn,.Un,.TPCn,.LINKn,Q,andL0throughL7aretheobviousthings.Soare.IB,.PC16,.STACKP,.IBPTR,.MINT,.EKERR.Anumberisnormallyinterpretedasalocationinmainmemory.IfanexpressionforanRregisterintheleftsideofatileintheCPPanelisprefixedwitha$,theRH/Rpairwillbedisplayedasa24bitnumber.CPKernelTheCPKernelcurrently(11.1)useslocations0F6F,0F77and0F7Fthrough0FFF.(Exceptforatypingerror,theappropiatereservesareinInitDLion.mc.)IthinktheDicentraversionisactuallyafewwordssmaller,butIhaven'tgotteninterestedenoughtocheck.ForDiagnosticsandsuchwherespaceisn'tcritical,Ireserve0F5Fthrough0FFF.CPBreakpointsTheDLionCPcanhaveupto16breakpoints.TheDicentracanhaveupto256.WhiletheCPisstopped,thebreakpointsaretemporarilyremovedsotheywillbeinvisibleifyouexamineControlStore.WhentheCPisstarted,theinstructionateachbreakpointisreplacedwithajumptotheCPKernel.Breaksatc2andc3arerisky.Ifamemoryoperationwasstarted,theresultswillbelost.Youcan'tsetabreakatac*instructionbecauseBurdockneedsthecycleinfotobuildtherightbreakpointinstruction.Ifyouhitabreakpointonthewrongcycle,BurdockwillprobablydeclaretheCPtobedead.(Thiswholemessissïfåî à î)à vïfåîEÉqï_,îâî•î‹î>îm î@xîÎï_,ï_,î Ìî%ƒqï_,î)î-dî07î2œî4ôî7nî<Ìî?0ï]…îâîZîµî{îÝî3î!8î$˜î)Xxî+ûï]…ï]…î-%qï]…î0zî4Áî7‘î9óîÁï[Ýîâ î1îÚî‹îðî!íî'kî(Üî,¡î/áî2pî5ýî;!î<œî>Yî?©ïZ6îâîî¼xî�ïZ6ïZ6îqïZ6î$Oî(Óî+âî.‚î1î2Áî88î;rî?QïX�îâîîvîÈîeî!î#Jî$÷î'Uî+Üî-Ÿî3cxî7èïX�ïX�î8æqïX�î=ÚïVçîâî»î%îƒîî*î_ xî#±ïVçïVçî$LqïVçî+î/Îî2§î5î8 î9î>·î@…ïU@îâî î@îîXî·î!žî'î+Iî,•î/î0þ î9:î< î>RïS™îâîáî î�î"aî$Îî'Êî+¯î.> î4Ãî71î9’î=kïQñîâî`îðî_îî"Áî#êî'ªî)cî,‰î-éî0 î2ôî7Þî9Îî<¼ïOvî¤î1îîÜî î!Âî$î&Çî*Ýî,1î1[î2‚î7×î9Aî>î?¾ïMÏîâî5î¸î:î�î½î kî$óî&·î,Õî/4î1ˆî5Rî6¾ uïJîâîáqïG0î¤îÇîeîx î$Çî*_î/‰î0þî4° î;0î=3ïE‰îâïC î¤îtî¬îî*îbî î"2î'5î+î-Þî/î0pî5”î6Íî8sî=ïAfîâîÚî-î¯ îŒî!<î#�î*Lî/6î2<î3rî5-î8¶ î?¾ï?¿îâîžî î—îNï=Cî¤îÑîînî˜î×îƒî#î&Nî,î/(î0fî1Åî6ïî8-î9Úî=vï;œîâï9 î¤î¯îúîfîÅîFî Îî"‡î$çï6¥î¤î½îtînî&î5îìî!“î#Kî'ëî)¢î+§î.sî0¤î5ðî8!î:‰î<ýï4þîâîRîYî¬îLî°î%Šî*ìî0ï2‚î¤î0î\îÈî˜ î&«î(Yî)ƒî.ºî0hî3åï0î¤î;îA îîbî gî" î&þî(Âî+7î-Áî0¯î2}î3¼î61î7ôî:iî<Òî@²ï._îâîPîkî•î"î�î èî#Àî&kî(\î.{î0)î1Sî38î5Uuï+îâîAqï'Áî¤î•îî¸î!®î%§î(¹î.�î2³î6Iî9î<æï&îâîEîqîÎîî }î$gî&ç î-ãî39î5­î7{ îAï$rîâî·îMî)î 'î!Èî'î(uî+Kî/Žî4äî7›î8Úî=äï"Ëîâ îOî[î+î †î#S î*Èî-¡î0ôî5.î9î<îAï!$îâî”îHî€uïÔîâîA qï…î¤î˜î$î”î;î!žî#Ìî%—î'˜ î/€î2uî87î:Þî>Aî@oïÞîâïbî¤î»îînîÙî!_î#¾ î+3î-† î4ïî:ŸîøïU9îâî3î}î=î£îôîî!›î$fî&åî)dî.Mî1î3Ú î“î?öï2|îâî îjî¦îäîEî"î$Ûî&Hî(fî*î,vî1*î4‡î9Êî=jî?Êï0ÕîâîN ï.Yî¤îDîî¡î î"�î%½î+î/1î1­î2õî7Ûî:Xî=dî@-ï,²îâîOî¹îîèî ï*6î¤îYî×î7îâî ºî# î&Øî)ƒî+t î3ç ï'ºî¤îCîhî�î8î%¤î(pî+Sî0]î1Ôî3�î5øî9SîEî?´ï!ðîâî™î<îÇî'î!î"}î&= î-Nî0Öî3*î9Íîtï[îâ ïàî¤î\î÷îaî >î#|î$Õî(‹î+’î1†î3,î8§î;¤î>2ï8îâî�îîÙ î#.î%Žî(ÿî+Øî0€î6žî8 ï½î¤îoîãîöî"eî$Íî'?î*`î-Žî1åî8þî;¾ïîâîËî—î4î!Gî"§î%µî'!î*¨î+Çî.$î0ñî39î6ªî(î?Òï[Ýîâî…îEî˜îDîîÞî#“î&vî*±î-<î0î3<î4Æî6úî9éî=SïZ6îâî.î˜îî¸îîcî!î$1î&Èî)ðî+%î0iî2½î4åî8 î:®qïW»î¤îéîçî}î"î%Eî(àî0´î2vî8.î;gî>2ïVîâî�îîÙîöî!î#gî&Ùî)±î.Zî0Ãî6áî8MïS˜î¤î†î•î <î"Øî'Bî*¥î0Dî5�î7¹î9ºî'ïLûîâî¹îzî"î•î-î .î#öî&Àî*î,Ùî0î5’î7=î9¯î=?ïKTîâî™îPî¿îkî$î!­î% î'î,2î.Þî1^ ïHØî¤îÔî²îî"Çî(cî*î+'î-qî20î4Þî8Àî;î?¨ïG1îâî·î×îxîVî &î!Ïî$Vî*"î+µî.~î/Îî5zî8Bî:õî= î@oïEŠîâîÌî3îßîùî¨ïCî¤ îÕî—îöî"Àî% ï@“î¤î–î î" î#Åî&%î*îî-B ï>î¤î2îSî íî%ðî+Ïî-¶î/î1§î7î9òî;Œî?Oî@ôï¶ï&ñîâ îî�î\î+î$+î)¤î*äî-8î/ î6"î9 î@…ï%Iîâî�î<î�î€ ï"Îî¤î{î«îîÃîÛîsî"Uî$³î*A î1 î3Xî6ˆî<½î>jî@½ï!'îâî™îhîî¨î®î!3î"øî&­î(qî+3î-î/w î6¨î9Øî;§î?gï€îâîfîžî%îyîc î$Y î,rî.%î0¶ î7>î8Ûî=öî?QïØîâîîÐî[î î#Òî%)î(pî*` î1;î2ÿï]î¤î¿îÊîîsî%$î'²î+_î-î/rî5tî7Öî=2î?áï¶îâîÃîäîîãî î!Fî%i î,ßî.£î3?î6 î9¬î=ïîâîïî,îiîîî8î ˜î&«î)zî*‚î-Éî0>î5­î9î;ssïqîâî�qï"î¤îšî§îTîßî":î$î)žî,tî1Fî3Äî7(î8¾î;Rî<¥ï {îâî‘îÞîQî”î•î î#Þî&Ðî'Üî.ðî1Ÿî4…î8ùî:< ï Óîâî3î÷î[îšîç î&ßî(­î-Š î4Yî8Þî;Ëî>4î@²ÿ TTVm$eInter-OfficeMemorandum7IOP.log$.ThethirdsectionisaFormSW.Mostofitiscommands,butthereareafewtypeinslotsandaslottoshowthecurrentstateoftheIOP.TherestofthewindowistheIOPPanel.IOPStateBurdockkeepstrackoftheStateoftheIOP.ManyoperationsrequirethatIOPtobeinareasonablestate.DeadmeansthattheIOPhascrashed,orithasn'tbeenBootedyet.BootedmeansthattheIOPhasbeeninitialized(Booted)butthePChasn'tbeeninitializedyet.HaltedmeansthattheIOPhasbeenrunningandisnowstopped.RunningmeansthattheIOPisrunningusercode.(It'srunningtheIOPKernelwhenit'sintheBooted,HaltedorBreakstates.)BreakmeansthattheIOPhashitabreakpoint.CPHalt/BreakmeansthattheIOPisinlimbobecauseitnoticedthattheCPencounteredabreakpointoritwashalted(byBurdock)tohalttheCP.BurdockpollsthestateoftheIOP.Whenitchangesamessageisprintedinthelogwindow.IfitchangestoHaltedorBreak,theIOPPanelisrefreshed.IOPBreakpointsIOPBreakpointsuseanRST2instruction.Youcanassembleoneintoyourcodeto"CallBurdock".ThereisnolimittothenumberofIOPbreakpointsthatcanbeactiveatthesametime.Built-insymbolsTheIOPsymbolmanipulatonroutinescontainseveralbuilt-insymbols.B,C,D,E,H,L,M,A,PCH,PCL,SPH,SPL,Flags,andRIMaresymbolsfortheobviousregisters.BC,DE,HL,SP,PSW,andPCaresymbolsfortheobviousregisterpairs.ArawnumberisanaddressinIOPmemory.IfanexpressionforanaddressinIOPmemoryisprefixedwitha$,thatlocationwillbedisplayedinwordmode.IfanexpressionforanaddressinIOPmemoryisprefixedwith%,thatlocationwillbedisplayedasaninstruction.IOPCommandsStack!displaysclumpSizewordsfromthestack.Instructions!evaluatesthecurrentselectionasanIOPsymbol,andthenstartingthere,displaysclumpSizeinstructions.Boot!goesthroughvariousstepstoinitializetheIOPandtheIOPPanelsoyoucanstartdebugging.ItforgetsallthecurrentIOPsymbolsandbreakpoints.ItthendoesalowlevelbootontheIOPandestablishescontactwiththeIOPKernel.Finally,BurdockreinitializestheIOPPanelandpreloadsitwithadefaultcollectionoftiles.ThisoperationleavestheCPintheDeadstate.AllofthevariousLoadcommandsusethecurrentselectiontospecifyafilename.ForloadingIOPcode,thedefaultextensionis.bin.sïfåî à î)à vïfåîEÉqï_'îâîîéî[î î!wî"ªî)î,›î.]î/½î12î8yî;î>—î@ôï]îâî¦îî?îîfî î!ðî%›î(î- î0^î29î4¼î8$î;î=ãî?¾ï[ØîâîîyîÙîÆuïX‰îâîòqïU:î¤î(îôî\î xî"_ïU:ïU:î#<qïU:î%áî'�î)äî-î1 î7®îÁïQëîâîÄxîŠïQëïQëî}qïQëîBî«î"žî%#î(5î*Ïî.Q î4Ëî: î=Fî?ÊïPDîâîâî< î�xî-ïPDïPDî VqïPDî#§î'èî*´î-î/ûî2nî5Èî:üî=±î?ïN�îâxîïN�ïN�î}qïN�î%î‚î!hî#àî&çî(kî-ºî0Ìî4ƒî7iî<¸î?0ïLõîâî‡îBî|î0î–î"³î'Bî) î- xî1–ïLõïLõî2‰qïLõî5«î9õî<Êî?0ïKNîâî„îÏî& xî›ïKNïKNî™î2 qïKNî&Ëî+=î.8î0Åî3àî5yî7Uî;yî@ÈïI§îâîÂî�îðîD î#î$G î+8î,üî.Sî0ÿî5.î7£î=­î?[ïGÿîâîAïE„î¤î&îkî¾îâî!Žî#áî'î+%î,oî1Žî2«î7öî9Uî>î?¾ïCÝîâî5î¸î:î�î½î kî$óî&·î+î-eî0Sî4î5‰ uï@Žîâîò qï=?î¤î· îrî î!#î$„î%ß î-7î0kî3î9î;åî>ãï;˜îâî)î×îuï9î¤îºî;îWî²îuî êî&+î'ùî*ü î2†î5iî8 î:î>î?¾ï7uîâî_uï4&îâîáqï0×î¤î|îiî1 î$6î)ƒî.bî2óî7Ýï.\î¤î{îhîwîOî^î6î{î!sî%Rî(ùî,¡î0î4%î6ðî:kî<Ñï,µîâîîMîT îöî žî#hî&3î(�î,Lî.êî1%î3_î8’î:·î<ýï+îâîÀï(’î¤î0îÜîîtîdî#Nî$üî'êï&î¤î îâ î�î¥î{î$Lî%àî(´î.î/Yî4®î7¯î8¿î:2î<çï$pîâî”îŒî±îfîöî#*î$²î&ª î-iî/­î1¤î6•î8Jî;>î@²ï"ÉîâîPîkîPîî!Uî$î%ñî,î-¾î/¯ uïzîâîòqï+î¤îÓî î!­î%ºî)!î+€ï°î¤ îŽîfî!¶î&qî,î-¥î/†î2dî7uî:î=4ïîâîÃîúîž ï�î¤îbîpîœî"Yî%µî'W î,Úî/-î2î4»î7î9ðî=¯î?gïæîâîfîn îxîèî!gî#Pî%¨î*jî-Qî2–î5Fî9î=ˆî>øï>îâîGî¥îzîôîZî”î"(î%Kî(6 î//î4#î7rî:î=)ï—îâîãîj î žî"õî%Ûî)�î,Lî1Çî3î6(î7Iî;é ïðîâî›îÖîðîî!&î#…î%Ùî'‡î)æî-œï uî¤îÑîeîŸîAî¯î&oî(¿î*ùî/�î5î6¦î;î<"ï Íîâî�îwîdîîcî$ î**î+•èTVm$Inter-OfficeMemorandum8Load!isusedtoloadmicrocodeintoIOPRAM.FirstitresetstheIOPsymbols,IOPbreakpoints.ThenitloadstheIOPcode.ThentheIOPPanelisreset.Start!evaluatesthecurrentexpressionasanIOPsymbol,setsthePCtothatlocation,andContinue!stheIOP.TheCPwillbeautomaticallycontinuedfirstifthatmakessense.Step!letstheIOPexecuteoneinstructionandthenrefreshestheIOPPanel.Thisisimplementedbyautomaticallyinsertingabreakpointatthenextlocation,sothatinterruptroutinesmaygettorun.Iftheinstructiontobeexecutedisaconditionaljump,twobreakpointsareinserted.Continue!justletstheIOPstartrunningagain.Again,theCPwillbeautomaticallycontinuedfirstifthatmakessense.Stop!stopstheIOP.TheIOPPanelwillbeautomaticallyrefreshed.Run!runsaBurdockcommandfile.ThefilenameisintheFile:slot.Ifthatisempty,thecurrentselectionisused.Thedefaultextensionis.burdock.LoadNoSyms!islikeLoad!exceptthatthesymbolsarenotloadedintothesymboltable.Thissavestimeifyoudon'tneedthem.LoadSymbols!isusedtoloadsymbolswhenyouchangeyourmindafterusingLoadNoSyms.LoadModSymbols!loadsthesymbolsforthemodulespecifiedbythecurrentselection.Refresh!refreshestheIOPPanel.Thisinvolvesreadingallofthespecifiedlocationsandupdatingthedisplay.A*willappearnexttoeachslotthatchanges.ThedisplayisautomaticallyrefreshedeachtimetheIOPisstoppedorhitsabreakpoint.Manualrefreshcanbeusedtoseeifthehardwarehaschangeditsmind,ortocatchthesneakycasewhenyouhavetwoslotspointingatthesameregisterandyouchangedoneofthemsincethedisplaywaslastrefreshed.What!evaluatesthecurrentselectionasanIOPsymbolandprintstheansweroutinhex,decimal,andoctal.Iftheselectionisjustanumber,thiscanbeusedtoconvertfromonebasetoanother.ListBreaks!liststhecurrentIOPbreakpoints.ClearAllBreaks!forgetsallofthecurrentIOPbreakpoints.UnBreak!evaluatesthecurrentselectionasaIOPsymbol,andifthereisabreakpointatthatlocation,itiscleared.Break!evaluatesthecurrentselectionasaIOPsymbol,andsetsaIOPbreakpointthere.HBWindowTheHBWindowisusedtoexamineandcontrolthehistorybuffer.Ithas2sections.ThetopsectionisaFormSWusedtointeractwiththehistorybuffer.TherestofthewindowisFileWindow.Mostly,itisusedtodisplaythemicrocodePCsthatwererecordedbythehistorybufferhardware.ThelogfileisHB.log$.sïfåî à î)à vïfåîEÉqï_/î¤îžîöî î»î·î%Sî(î*óî/#î2Vî3šî7Rî9žîëî¤ î¸î!îZî!î$î)\î-î/Âî4gî7 î;;î>tï=Dîâ ï:Èî¤î¨î!Pî#Äî)%î+wî-ëî2ÿî8Ðî:àî=Tï9!îâ ï6¥î¤îxîyî î#:î'–î*ëî0|î5«î7Õî9Èîî@ôï1¯îâ îîî§î"!î$î'*î(Çî+ î,Xî.¦î4�î7î<^î>'ï0îâî¹îzî"î•î-î .î#öî&Àî*î,Ùî0î5’î7=î9¯î=?ï.`îâî™îPî¿îkî$î!­î% î'î,2î.Þî1^ ï+åî¤îêîÞîJî# î(Òî*�î,Šî/„î4Yî7î;î=‚ï*=îâîWîîþîwî.î!×î#Yî%¸î+]î,Èî/iî0“î6î8¸î;Cî=4î@oï(–îâîÌî3îßîùî¨ï&î¤ îÕî—îöî"Àî%® ï#Ÿî¤î–î î" î#Åî&%î*îî-Ü ï!#î¤î&î<î Éî%Àî+“î-oî.Çî1âî70î:î;¤î?[î@ôï|îâ îÓîkî9îÈî!î"Šïî¤îíî®îçî"‹î( î)’î*•î-\î2Vî4èî7bî8fî;- ïYîâsïºîâî qïkî¤î›îFîôîî!Ûî#¨î)@î,î0éî3hî8î<¾î>Uî@éïÃîâîZî2î§îDî¯î Ùî&Õî*î+¿î0µî3Ïî6/î:Àî?FïîâîŒîMîµîêî^ î$ î)�î*üî,pî/µî1lî6'î8�î?Fï uîâî°îî½î¹îî#ªî'Ùî.9î1î3dî5Îî79ÿiTVm$ÌInter-OfficeMemorandum9HBOperationThehistorybufferisa256wordRAM.Eachtimetheclockticks,themicrocodePCand8extrabitsarewrittenintoawordoftheRAM,andthepointerintotheRAMisadvanced.WhenthePCmatchesthespecifiedTarget,nmorewordsarewritten,andthentheRAMisfrozen.Ifnisbig,thebufferwillcontainmostlydataforeventsafterthetrigger.Ifnissmall,thebufferwillcontaindataforeventsbeforethetriggerpoint.Thinkofthehistorybufferasahorizontalstripof256cellswithtimegoingfromlefttoright.Thetriggerpointmustbelocatedsomewherewithinthestrip.Thesoftwaredoesalltheworkneededtocorrectforthewraparoundofthebufferpointer.OffsetisaparameterslotintheHBWindowthatcontrolsthedistancefromtheleftedgeofthebuffertothetriggerpoint.IfOffsetissmall,yougetmostlyeventsafterthetriggerpoint.Whenthehistorybufferfinishescollectingasampleofdata,Burdockwillautomaticallyprintouttheinformation.Since256samplesisusuallywaymorethandesired,theHBWindowcontains2moreparameterstocontroltheprintout.Beforeisthenumberofwordstotheleftofthetriggertobeprinted.Afteristhenumberofwordstotherightofthetriggerpointtobeprinted.Warning:Before,Offset,andAfteraredecimalnumbers.HBPrintoutThehistorybufferprintoutisseveralcolumnsforeachsample.Thefirstcolumnisthedecimaloffsetofthislinefromthefrontofthebuffer.Itwillbeprecededbya*ifthisisthetriggerpoint.ThenextcolumnisthePCinhex.Thenexttwocolumnsarethe8extrabitsinbinaryandhex.Lookattheprintstoseethedefaultsetupfortheextrabits.Thenexttwocolumnsassumethestandardsetupfortheextrabits.Itwillshowa"D"isDoItison,andc1,c2,orc3dependinguponthecycle.ThelastcolumnisthesymboliclocationincontrolstorecorrespondingthethePC.Ifthecyclenumberofthatinstructiondoesn'tmatchwhat'sobservedintheextrabits,aconspiciouswarningwillalsobeprinted.HBClocksThereare4possibleclocksthatcanbeusedtowritedataintothehistorybufferClockwillshoweverymicroinstruction.Thisisnormallythedesiredcase.ARC(AlwaysRunningClock)willalsoshowwaitstates.Thereisatleastonewitheverymicroinstruction,butmemoryoperationsnormallyincludeseveralmore.Cycle1willshowthefirstmicroinstructionofeachclick.(Actually,ittriggersduringc3sincethat'swhenNIAispointingtoac1instruction.)Thisjustreducestheamountofdatathatgetsstoredbyafactorof3.Almostalways,youcanguesswhatthemissinginstructionswere.IBDispwillshowthefirstinstructionofeachnewMesabytecode.Exceptforsïfåî à î)à vïfåîEÉuï_,îâîƒqï[Ýî¤îfîáîùîOîbî!âî%Tî)�î,Ýî/íî26î5´î9&î;pïZ6îâîCîîJîÊîyîÚî"šî%€î&·î*Mî,î.€î2Ñî5–î8î<Ùî?¾ïXŽîâîçîmîóî&î!Ÿî$ î)uî+ïî1Åî6‘î7öî;£î?ÊïVçîâîåî•î³î îïî!Sî%æî'`î(¤î*î,·î/î36î5Ùî:±î?ïU@îâîMî´îîªî ”î"Cî#¼î%Uî)yî,î0bî3;î8Gî;zî=åïS˜îâî1î‘îöïQî¤îÙî°î.îÝî#*î$öî&= î,Ýî0 î1÷î4«î7Øî;î>TïOvîâî>î©îMîëî¹î!î$¨î(î)ëî.Ÿî5»î9õîøïCîâîúîPîÒîWî#±î$Üî(f î/cî1î5±î8î=®ïAgîâîOî±îßî™î¨îXî!¹î$0î%ëî(Lî,³î.cî0Uî5ƒî9#î:�î<ñï?Àîâî›î¨îVî¶îîÀî î$…î($î)Òî+Ãï=Eî¤îÌî”î!î#Çî'eî)¹î.Úuï9öîâîƒqï6§î¤î|î î<î"•î$î(‘î. î0Hî3yï4,î¤îî[îSîÃî &î%Jî)î*Õî-zî04î3Ÿî6î9xî;5î=˜ï2…îâîYîîõîÞîÚîî8î ™î#:î$¦î'î+kï0 î¤î|î‹î€îìî Kî"Ÿî$Mï-Žî¤îpîtîî�î!Éî$î%Eî(¬î+Bî,äî1'î3Óî6¿î:Qî;Þî>1ï+çîâî�îäîCîìî–îÔî"3î%¦ï)lî¤îoîqîî}î$9î&‹î,î/·î1èî4:î7 î:Œî;÷î>•ï'Äîâî îî|îÎî9î˜îOî wî"žî$bî&2î,÷î0‹î2êï%Iî¤î{îùîíîXî¶î%{î*±î,^î1î4j î=`î?¾ï#¢îâî®îRîÓîgîµî �î# î*|î/[î3¡î7üî=ïî?¾ï!úîâîUîNîx îÌî#î%Äî(�î*�uï¬îâîƒqï]î¤î“îÔîõî%î"*î$æî'^î)<î,eî.î1lî4^î7$î9pî=ïïáî¤îšîEîÎî‚î*î-6î.¢î4rî6Òî;›ïfî¤îCî�î Wî$Óî'‹î*cî-øî0ýî5î9$î:œî(ïDî¤îGîîµî1î"&î,†î.[î1ªî5Z î;Áî=5ïœîâîeîGîÌî‰î Pî#–î%î* î,aî-�î/ î7=î:iî=ïõîâîJî^î î.îî Ûî%î' î(>î,3î-õî/Šî4[î9 î;àî>tï Nîâî?îŸî’ î òï Óî¤îjîî°îî!ú î(ßî*¡î-Ûî0Òî4…î7žî;Eî?áèTVm$DInter-OfficeMemorandum10unusualcases,thisisnotveryinteresting.HBCommandsArm!evaluatesthestringinTargetasaCPsymbol,andsetsuptheHBmatchertotriggeronthataddress.Display!displaysthedatainthehistorybufferusingthecurrentvaluesofBeforeandAfter.ManualTrigger!kicksthehardwaresothatitactsliketheaddressmatcherhasseenthetarget.Again,Burdockwillautomaticallydisplaythings.Thisishandyifyoudon'tknowwhatyourmicrocodeisdoing.YouneedtoArmtheHBbeforeManualTriggerwilldoanything.Ifyoucan'tthinkofanysymboltotypeintoTargetsoyoucanArmthings,use.CR0.Fineprint:IfyouareclockingonIBDisp,andyougetaCPBreakshortlyaftertriggeringthehistorybuffer,itmayappearasthoughithasn'tyettriggered.That'sbecausetherehaven'tyetbeenenoughIBDispstofinishfillingupthebuffer.ManualTriggerwillautomaticallyswitchtoARCclockingforlongenoughwhennecessarytoavoidthisproblem.LoadArmAndGo!doesaLoadRawofthefilespecifiedinFile,ArmsthehistorybufferatthelocationspecifiedatTarget,andthenContinuestheCP.ThisisaconvenientwaytostartalowlevelCPdiagnostic.BB!(BootButton)flapsINIT/ontheMultibusbackplane.ThereareseveralcommandsontheHistoryBufferWindowthataremostlyleftoverfromhardwaredebugging.Stop!stopstheCP.Step!letstheCPexecuteaninstruction.StepFast!goesintoaloopsinglesteppingtheCP.Thisishandyforscopingthestop/gooperations.StepFastFromCSA!islikeStepFast,buttheUseCSAbitislefton,sotheDebuggerboardprovidesthesamenextinstructionindependentofwherethemicrocodetriestojump.Go!undoestheeffectsofStop.UseROMisabooleanusedtoswitchthedebuggerboardintoworkingwiththeControlStoreROMontheCPboard.ThiscanbeusedtoComparemicrocodeonthediskwiththecontentsofPROMs.UseROMdoesn'tdoanythinguntilthenexttimeyouinteractwiththedebuggerboard,sopokeBB!orsomethingtomakesureitgetsnoticed.CommandFilesBurdockhasacomplicatedcommandfilefacility.Fortunately,reasonableproblemsareeasy.Theeasiestwaytogetacommandfilegoingistostartwithanexistingone,andmakewhateverchangesarenecessary.CommandfilescanberunfromtheRun!commandintheCPwindoworthesïfåî } î)} vïfåîEqï_/îâîîÚî{îçî\î!k uï[àîâîƒqïX�î¤îAîî\î!î"³î&÷î(�î)¢î+ßî0êî3‹î6î8î:[î<ÐïVéîâî�îõîüîÊïTmî¤îdî×îsî"´î$Ÿî':î,î0sî4Yî6õî;ûî@eïRÆîâîRî ïPKî¤ î“îî!~î'Žî)Yî,.î-‹î0Jî2üî5cî:Tî?©ïN£îâîî‘îäîcî# î%Ó î.aî3.î7¹î:íîîâîBî î�îî"òî$¼î) î,ˆî/àî6žî9/î< î?Wî@ôïî$„î&× ï9öî¤îpî;îFî ˜î$ßî&åî)Eî/- ï7{î¤îšîãîhî#Bî%=î'’î,qî0µî69î8üî;Dî?©ï5Óîâîüîcîl ï3Xî¤îYî×î7ï0Üî¤îCîÃî#îvî!lî#\ ï.aî¤î·îÄî�î¬î!Äî%£î+î-nî0 î3î4yî8›î:Ëî?¾ï,¹îâîø ï*>î¤î%îÔî"Ãî)î+Êî.nî4Kî6¬î8\î;î=·î?¾ï(–îâî›îêîÑî"ˆî&]î)Ä î0÷ î9>î;Oî?¾ï&ïîâî�î”îCï$tî¤î†îDî¤îôî!¬ï!øî¤îÔî1îLîtî"¡î$Aî(lî*½î0¸î4 î7jî<²î?¾ï Qîâîþî£î î¬î î"kî&Àî)áî,rî.iî1«î3`î9cî@ï©îâîFî9îYî½î1î îî&—î,Ûî1žî3©î9^î<ªî?ïîâîî¹î¬îÅî"î%(î)uî+6î.›î1eî3'î9Çî;sî?%ï[îâî8îsï½îâî¢qïmî¤îžîî î$,î*ùî-Íî3 î;O ïÆîâîôîQî¶î˜î!ñî$Òî&Šî(Ýî*î0{î2îî6Âî87î9ïî= î@-ïîâîìîðî¨î\î#9î(eî*¸ ï £î¤îmî`îðîæî"‚î%îî(Sî+íî2Sî4î6kî8Äî=õî?¾¤TVm$€Inter-OfficeMemorandum11IOPwindow,orfromtheBurdock.~commandintheExec.Thedefaultextensionforcommandfilesis.burdock.Anyerrorinacommandfileterminatesexecutionimmediately.Theerrormessageincludesthepositionwithinthecommandfileoftheoffendingstatement.CommentsTextenclosedwithmatching|sisignored.FunctionsMostofthecommandsavailableintheCPorIOPwindowsarealsoavailableasfunctionswithinBurdockcommandfiles.TheyuseMesaprocedurecallsyntax.Ifthenameswouldclash,thenamesfortheIOPcommandsaresuffixedwith"IOP".Forexample,"Boot[];"willboottheCP,"BootIOP[];"willboottheIOP,and"Break[Foo];"willsetaCPbreakpointatlocationFoo.Argumentstocommandsshouldbequotediftheymightconfusethescanner.Commandsthatstartexecutiontakeanadditionalparameter:thenumberofmillisecondstowaitfortheCPorIOPtostoprunning.(Thenormalreasonforstoppingisabreakpoint.)Anomittedparametermeansdon'twaitatall.(Ofcourse,youcan'tdomuchwhileit'sstillrunning.)Avalueof0meanswaitforever.Remember,numbersusedtospecifywaittimesareinterpretedashex.HereisachecklistofCPcommands:Boot[];Break[where];ClearCPPanel[];Compare[filename];Continue[(waittime)];Load[filename];LoadBoot[filename];LoadGerm[filename];LoadMore[filename];LoadNoSymbols[filename];LoadReal[filename];Reset[];SetBank[bankNumber];Start[filename(,waittime)];Stop[];Unbreak[where];HereisachecklistofIOPcommands:BootIOP[];BreakIOP[where];ClearIOPPanel[];ContinueIOP[(waittime)];LoadIOP[filename];.LoadIOPModuleSymbols[filename];LoadIOPNoSymbols[filename];LoadIOPSymbols[filename];StartIOP[where(,waittime)];sïfåî } î)} vïfåîEqï_/îâîÐîUîî‚îâî%Òî,4î-ãî0Cî4}î7Vî;ÿï]ˆîâîî€înîÚï[ î¤îôî´î¯î&î"Õî%Œ î,‡î3 î;†î>¬ïYeîâî9î�îýî!>î%ƒî'âî.Cî0­î2fî4Åî; uïVîâqïRÆî¤îÔînî‰î#‡î$èî&TuïOwîâqïL(î¤î8îýîhî Zî&!î'Ûî*Fî,¦î.uî1oî7+î9‹îìîâ îØî±îÔî;î Äî#Bî%/î(Gî*î-Cî2ûî6vî;]î?áï=EîâîsîÔîó î«î ôî&î,xî0±î4;î7*î8¹î:öî=vï;žîâîèî‰îÞîî î"‰î%yî+Ïî-«î1£î3«î5/î9Áî= ï9öîâîWîîCî òî%Žî(ˆî,1î.… î5—î7Eï7{î¤îîƒî¬îGîî!Ttï5Óî×ï4+î×xî¬ï4+ï4+î”tî ï4+ï4+înï2„î×ï0Üî×xî³ï0Üï0Üî"tî£ï0Üï0Üîï/4î× xî8ï/4ï/4î tî(ï/4ï/4î¡ï-Œî×xîJï-Œï-Œî¸tî9ï-Œï-Œîœï+åî×xîï+åï+åî…tîï+åï+åîiï*=î×xîÇï*=ï*=î6tî¶ï*=ï*=î ï(•î×xî„ï(•ï(•îótîtï(•ï(•î×ï&íî× xî2ï&íï&íî¡tî#"ï&íï&íî#…ï%Eî×xîï%Eï%Eîotîðï%Eï%EîSï#žî×ï!öî×xî$ï!öï!öîÕtî Àï!öï!öî!$ï Nî×xîï Nï Nîftî"nï Nï Nî"çï¦î×ïÿî×qïƒî¤îîƒî¬îGîî!îtïÛî× ï4î×xîï4ï4îýtîtï4ï4î×ïŒî×ïäî× xî¢ïäïäî‰tî!‘ïäïäî" ï<î×xî³ï<ï<î"tî£ï<ï<îï•î×xî#eï•ï•î#Ôtî(Uï•ï•î(¸ïíî×xî œïíïíî! tî%‹ïíïíî%îï Eî×xî¾ï Eï Eî,tî#­ï Eï Eî$ï �î×xîrï �ï �îYtîÐï �ï �îJxî&ï �ï �î tî#ï �ï �î#�ÿâTVm$GInter-OfficeMemorandum12StopIOP[];UnbreakIOP[where];HereisachecklistofHBcommands:Arm[where];PanelSetupCommandfilescanalsoinitializetilesinthePanelareas."CP[3,0]!Foo"stores"Foo"intotheleftsideofthetileinthethirdrowofthefirstcolumnintheCPPanel."CP[3,0]!Foo_13"setsitupandthenstores13(hex)intoFoo."IOP[..]"isusedtosetupIOPtiles.Tilescanbenamed(forusewithconditionalsandWriteLoc)bypreceedingtheCPwithtileName=.It'sagoodideatousethenameoftheregisterinthetileasthenameofthetile.Conditionals,Branching,HackingSetMP[tileName]putstherightsideofatileintotheMP.(Thisnumberwon'tbeinhex.)Tag:definestagatthecurrentpositioninthecommandfile.GOTO[tag]resumesexecutionofthecommandfileatthepositioncorrespondingtotag.Forwardandbackwardjumpsarebothlegal.IFoperandrelationoperand{...};.EachoperandiseitheratileNameorahexconstant.Therelationsinclude>,>=,<,<=,=,and#.Conditionalscanbenested.LogFilesClose[];closesthecurrentlogfileifthereisoneopen.OpenToAppend[filename];opensalogfileinappendmode.OpenToWrite[filename];opensalogfileinwritemode.Write[quotedstring];writesitsargumentintothelogfile.(Write[]islegal,anddoesn'tdoanything.)WriteLine[quotedstring];writesitsargumentintothelogfile,andthenwritesaCR.WriteLine[]justwritesaCR.WriteLoc[tileName(,width)];writestherightsideofthedesignatedtileintothelogfileinhex.Ifwidthisspecified,leadingblankswillbeaddedtomakethestringwrittenatleastthatwide.WriteTime[];writesthecurrenttimeintothelogfile.Simplenontrivialexample|Mumble.burdock,HGM,March22,19852:18:56amPST|Boot[];Load[MemTest];errorCount=CP[00,0]!errorCount_0;passCount=CP[01,0]!passCount_0;sïfåî } î)} vïfåîEtï_,î× ï]„î× xîÛï]„ï]„îÂtî9ï]„ï]„îœqï[ î¤îîƒî¬îGîî!ŒtïYaî×xîñïYaïYaîØtîOïYaïYaî²uïVîâîÂqïRÃî¤îeîPîÙî £ î&/î)î*»î-î0àî4³î:­î>=ïQîâî:î(î�î'îîâî"Wî$Ëî&Žî)î,�î/Xî1&î3›î6ˆî;’î=Vî?ÊïOtîâîýîóîÏîUîäî"î#Îî%Úî(‹î+ªî/„î1cî4ðî7Âî:õî@²ïMÍîâîîÌîwîeïKQî¤îõîvî\îØî …î"ïî& î-¡î0Nî6Üî8Í î?¾ïIªîâîExîpïIªïIªîàqîïIªïIªîîfî î#"î&+î'êî*oî,Þî0­î2vî4æî9Ôî;’î>î@pïHîâîAîîºîuïD³îâ î1 îqïAdî¤xî ïAdïAdîyqîOïAdïAdî3î5î!‘î$ßî'³î)iî*�î,êî/¾î2î5šî9*î>Sï?½îâîÓî�xï=Aî¤qï=Aîéî§îðîˆîèî$±î)óî+¡î.î4bpï:Æî¤qîï:Æxï:Æîgqî8ï:Æï:ÆîîNî#tî%î'nî-Àî0î1¤î3ôî9' ï9îâî�î1îÊî‚î!·î%Úî(.î+jpï6£î¤xï6£îaî›î«qï6£î"åî&¸î*Bî/¼î1>î5Axî6�ï6£ï6£î6ñqï6£î<î?}ï4üîâî“îVîÐî!šî#î%êî'bî*:î,bî/î1, î9%î;›î=vuï1¬îâî¹qï.]î¤î­î™îøî!Âî$î&~î'ßî+iî,Ôî/€ï+âî¤ xî¹ï+âï+âî(qî ©ï+âï+âî! î" î&î'*î)}î+çî-•î2€ï)fî¤ xîLï)fï)fî»qî<ï)fï)fîŸî �î$”î%¾î(î*zî,(î/¦ï&ëî¤xîcï&ëï&ëîîËqîï&ëï&ëîyî�î"�î$rî*§î-Šî/ôî2Qî5î:Hî;¾î?fï%Dîâî î¦ ï"Èî¤ xîï"Èï"ÈîÊîoqîºï"Èï"Èî î!î% î&ßî-î/Ñî2(î4sî7-î9Üî<úî@ôï!!îâîÄ î"îÃîÅî ïï¥î¤xî¡ï¥ï¥îqîçï¥ï¥î`xî9ï¥ï¥î qî!aï¥ï¥î!Úî#7î'5î)�î,Þî/³î1hî3à î:�î<êî?¾ïþîâî%î~îîxîêî»î î%î)Þî.'î0Âî2£î6·î8Uî;ùî>HïWîâî•î-îSî!ïÛî¤ îÞîàî ?î% î(.î+î-fî/¹uïŒîâîr îštï=îóîÐîî!€î%æî(#î+iî0Rî2¦î5ªï•îóïíîó ï Eîó ï Eî îzî ‹ î'³î)@ï žîó ï žî îzî ‹î':î(Ç&TVm$zInter-OfficeMemorandum13reason=CP[02,0]!reason_0;address=CP[03,0]!$address_0;expected=CP[04,0]!expected_0;found=CP[05,0]!found_0;Break[Error];|reason=1|Break[AnotherGoodPass];|reason=2|Loop:Continue[0]:SetMP[passCount]:IFreason=2{GOTO[Loop];}:OpenToAppend["Mumble.log"];WriteTime[];WriteLoc[errorCount,4];WriteLoc[passCount,5];WriteLoc[address,8];WriteLoc[expected,5];WriteLoc[found,5];WriteLine[];Close[];IFerrorCount<100{GOTO[Loop];}:Wantmoredetails?Lookatthecode.It'sCommandFiler.mesa.OddsandEndsBecauseitalreadycontainedrelatedcode,theBurdocksubdirectoryand/ordffilealsoincludeseveralotherhandyprograms.HardwarecheckoutTestUmbilicalisaprogramforcheckingoutDLion-DLionBurdockBoxes.IassumeitworkswithSongboardstoo,butI'venevertriedit.TestUmbilicalisprettysimpleminded,butIhaveforgottenallthedetails.Itprobablyincludesseveralscopeloops.Lookatthesourcecodeifyouhaveanyquestions.TestDebuggerBoardandTestHistoryBufferareusedtodebugtheDicentradebuggerboard.SeetheDicentraManualformoreinformation.CSBankTesterisusedtotestextrabanksofCPControlStore.ItispackagedwithBurdockasaninactivetoolbecausetheDLionusestheCPKerneltosetthebankregister.CPKernelTesterisleftoverfromwhenIwastryingtounderstandhowtheCPKernelworked.Itmightbehandyifyouarechasingobscureproblems.IttooispackagedwithBurdockasaninactivetool.MakingDicentraPROMsMakeControlStoreMBandMakeGermMBareusedtomakeDicentraPROMs.sïfåî } î)} vïfåîEtï_,îóï_,î îzî ‹î$åî&rï]„îóï]„î îzî ‹î&&î'³ï[Üîóï[Üî îzî ‹î&Hî'ÕïZ5îóïZ5î îzî ‹î$™î&&ïX�îó ïX�î"Oî#,î'†î)kî*ŸïVåîóïVåî"Oî#,î'†î)kî*ŸïU=îóïS•î ïQíîïPEîîôîNî3îhîœ î&¾ïNžîïLöî ïKNîî �ïI¦îî ïGþîîDïFVîîïD¯îîgïCî ïA_îï?·îîô îîPîæî! î*<uïîâî˜îÜîËîÔî?î#¨î&Xî(Çî+kî/#î2Xî3ó î<Áî>ï#–îâî-îwîÞîÍîúî$Óî&©î(ïî-|î.Úî4’î9Üî>Sï!ïîâîãî�îîyîÈî"î#pî&'î)mî, xïsî¤qïsî(xî!Fïsïsî"-qïsî,®î/hî3 î5î9³îî1Oî3 î:Gî=[î?ÊïßîâîŸîÿî–î­î ½î% î&‹î)aî+Ôî0Ýî6î<’î>)î@²ï8îâîëîî•îCî!4î&Juïèîâîî°xï ™î¤qï ™îŽxî"lï ™ï ™î#Áqï ™î+ùî.sî1Öî3¬î7‡pî=Tï ™ï ™î=üqî@¾ï ™ï ™îAB^TVm$uInter-OfficeMemorandum14TheyregisterExeccommandswiththecorrespondingname.MesaDebuggingWhenbringingupthefirstmemberofanewfamilyofmachines,thereisatimewhenitmostlyruns,buttheEmulatororGermdoesn'tworkwellenoughtobeTeleDebugged.Atthisstage,youendupdoingalotofpointerchasingtofollowstacksandsuch.Machinesaregoodatthatsortofthing.I'mlazy.CPMesaisatoolthatisincludedwithBurdock.Normallyit'sinactive.Ithastwocommands.DispStackdisplaysthecurrentstackinHEX.Eachframeisaseparateline.ListProcdisplaysthecurrentlistofprocesses.CPSymbolsCPSymbolsDebugisanothernormallyinactivetoolthatcomespackagedwithBurdock.It'sleftoverfromwhenIwasdebuggingthesymboltablemachinery.Itwilldumpthesymboltablesintoalogfile.Ifyouaretryingtounderstandalltheusesforalloftheregisters,thismightbehandy.(UsetheWhatcommandifyouarejustinterestedinafewregisters.)sïfåî } î)} vïfåîEqï_/îâîkîIî¥î!‹î$¥î' î/üuï[àîâî¬qïX’î¤îÝîƒî·î 9î#2î(Âî*�î+éî.øî3^î59î;»î?gî@ôïVêîâîîÕî8î´î3î!Áî$-î*Mî,î0+î4öî8î;yî@oïUCîâîÈ îOî@î×î"—î%Dî'ñî)øî-Ïî.îî0õî2¤î7bîî?©ïOyîâîtî–îÿî$î&`î+î.hpî/ûïOyïOyî0âqî2oïOyïOyî30î6‰î:eî;¶î<ÅïMÒîâîðî^î•îôî#¾î%üî'µ uïJƒîâîAxïG5î¤ qïG5îØîcî#Žî)~î.³î1Ÿî4�î8Úî?ïE�îâîåîVî}î î#Ñî$öî'¾î.”î1î5õî9y î@¦ïCæîâî˜î¦îîäî Ûî#¾î$óî'Qî*î+©î.kî0Êî4Öî6� î=Ãî?¾ïB?îâîòîFîLîî’ î dî#î'*î)1î-Îî1+î3¡î7xî=ïî?gï@—îâî5î× î"îÐîúî› 5TVm$�ÿ TIMESROMANþŸÿGACHAþŸÿ HELVETICAþŸÿ TIMESROMANþŸÿLAURELþŸÿ TIMESROMANþYÿLOGOü´ÿ TIMESROMANþŸÿ TIMESROMANþæ�S û o ) ð3; þD GM­UÇ\rcÛiÔmj/pnžraRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[]<>BurdockManual.tioga&Wednesday, March 27, 1985 11:35 pm PST