//D1LDRTest.bcpl -- "LDRtest" action // Last edited: 25 October 1979 get "mcommon.d" get "d1.d" manifest [ get "d1regmem.d" ] external [ // MINIT0 @ACTS // MIDAS MidasSwat // MASM @MBlock // MRGN AddToEveryTimeList // MMPRGN MDatatoCSS; BadAltIn // MCMD LoadDone // MGO @QuitF; @CantContinue // MDEBUG GetPattern; ErrorStop; SetupPattern; CollectLDR; TestAborted // MPATTERN NextData; CheckData; IncV // D1ACTIONS @ShouldBe; @DataWas // D1TABLES @MEMWID; @MEMFORMS; AltMInput; AltMForms // D1ASM @Xct; @XctL16; @XctR16 // Defined here MicTest ] //This procedure initiates "LDR-loop". Its args are 1 to 6 //LDR addresses from the command line. If a single address is passed, //it is repeatedly executed from the Alto, preceded by generation //of the selected data pattern. If more than one arg, then the sequence of //LDR addresses is executed as a test, preceded by generation of the data //pattern, followed by a compare of the initial data against the result //read back. The right-most 16 bits of BITS-CHECKED should have a //left-justified data compare mask. let MicTest(nil,nil) = valof [ ACTS!0 = CollectLDR(ACTS+1,LDRx) if ACTS!0 > 10 then MidasSwat(XSMicTextArgs) for I = 1 to ACTS!0-1 do ACTS!I = ACTS!I lshift 2 resultis GetPattern(0,MicTDoIt) ] and MicTDoIt(nil,nil) be [ LoadDone = false; CantContinue = CantContinue % didTest QuitF = AddToEveryTimeList(RepLDR,ACTS!0) MEMWID!MDATAx = 16 MEMFORMS!MDATAx = 0 AltMInput!MDATAx = BadAltIn AltMForms!MDATAx = MDatatoCSS MBlock(IncV,table [ 1; 0; 0 ] ,3) SetupPattern(table[ -1 ] ,"with LDR instr. sequence",8) ] and RepLDR(nOps) be [ for I = 1 to 100 do [ NextData() XctL16(ACTS!1,ShouldBe!0) if nOps > 1 do [ for J = 2 to nOps - 1 do Xct(ACTS!J) XctR16(ACTS!nOps,DataWas) if CheckData() then ErrorStop("Data compare error","") ] ] if TestAborted then ErrorStop() ]