<> <> DIRECTORY Cache, CacheTester, CacheTesterB, Process; CacheTesterA: CEDAR PROGRAM IMPORTS Cache, CacheTester, CacheTesterB, Process SHARES Cache, CacheTester, CacheTesterB = BEGIN OPEN CacheTester, CacheTesterB; CacheTest: Cache.CacheTester = { priority: Process.Priority _ Process.GetPriority[]; clocksSkewed _ FALSE; { Process.SetPriority[Process.priorityBackground]; ReallyCacheTest[i, d, h ! UNWIND => Process.SetPriority[priority]; EtuBrute => GOTO quit]; EXITS quit => NULL; }; Process.SetPriority[priority]; IF clocksSkewed THEN Complain["clocks out of sync"]; }; ReallyCacheTest: Cache.CacheTester = { OPEN value; clockPhase _ 3; cycleNumber _ 0; pushWaitCount _ 0; evalWaitCount _ 0; evalCount _ 0; drive _ d; instructions _ i; handle _ h; killThreads _ FALSE; ignoreWarnings _ FALSE; <<>> <> <<>> UNTIL threadCount=0 DO Process.Yield[]; ENDLOOP; PhA _ FALSE; PhB _ FALSE; ThreadStart[MainThread]; UNTIL threadCount=0 DO EntryEval[]; ENDLOOP; }; MainThread: ThreadProc = { OPEN value; DoAReset[]; ThreadStart[MCommand, NEW[MCommandRec _ [slave: TRUE, wqCount: 1, wqData: [[WQAddress: 0, WQData0: 1, WQData1: 2, WQData2: 3, WQData3: 4],,,]]]]; C[5]; ThreadStart[MCommand, NEW[MCommandRec _ [slave: TRUE, RQ: TRUE, RQAddress: 5, RQData0: 6, RQData1: 7, RQData2: 8, RQData3: 9]]]; C[6]; ThreadStart[MCommand, NEW[MCommandRec _ [slave: TRUE, WS: TRUE, WSAddress: 10, WSData: 11]]]; C[2]; ThreadStart[MCommand, NEW[MCommandRec _ [slave: TRUE, CF: TRUE, CFData: 12]]]; C[2]; ThreadStart[PReference, NEW[PReferenceRec _ [command: IOFetchHold, address: 2, data: 00060001H, rejects: 5]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, releaseBus: FALSE, IOR: TRUE, IOAddress: 2, IOData: 00060001H]]]; C[8]; ThreadStart[PReference, NEW[PReferenceRec _ [command: IOStoreHold, address: 3, data: 00070001H, rejects: 4]]]; C[2]; ThreadStart[MCommand, NEW[MCommandRec _ [releaseBus: FALSE, IOW: TRUE, IOAddress: 3, IOData: 00070001H]]]; C[5]; ThreadStart[PReference, NEW[PReferenceRec _ [command: IOFetch, address: 4, data: 00080001H, rejects: 4]]]; C[2]; ThreadStart[MCommand, NEW[MCommandRec _ [IOR: TRUE, IOAddress: 4, IOData: 00080001H]]]; C[5]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; MNShared _ TRUE; F[]; drive.MCmdAB _ FALSE; ThreadStart[PReference, NEW[PReferenceRec _ [command: Store, address: 1, data: 2, rejects: 17]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, IOR: TRUE, IOAddress: 0C0H, IOData:00010000H, RQ: TRUE, rqNotReadyCount: 2, rqShared: TRUE, RQAddress:00010001H, RQData0: 00020001H, RQData1: 00020002H, RQData2: 00020003H, RQData3: 00020004H, WS: TRUE, WSAddress:00010001H, WSData:02H]]]; C[18]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; MNShared _ TRUE; F[]; drive.MCmdAB _ FALSE; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 1, data: 2]]]; C[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 0, data: 00020004H]]]; C[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 2, data: 00020002H]]]; C[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 3, data: 00020003H]]]; C[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 4, data: 00040000H, rejects: 6]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, RQ: TRUE, RQAddress:00010004H, RQData0: 00040000H, RQData1: 00040001H, RQData2: 00040002H, RQData3: 00040003H]]]; C[9]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; MNShared _ TRUE; F[]; drive.MCmdAB _ FALSE; ThreadStart[PReference, NEW[PReferenceRec _ [command: FetchHold, address: 6, data: 00040002H, rejects: 3]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, releaseBus: FALSE]]]; C[4]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Store, address: 6, data: 00040012H]]]; C[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: StoreHold, address: 6, data: 00040112H, rejects: 3]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, newRequest: TRUE, releaseBus: FALSE]]]; drive.MCmdAB _ TRUE; MCmdAB _ Reserve14; E[]; drive.MCmdAB _ FALSE; P[A]; MCmdAB _ NoOp; F[]; C[4]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 6, data: 00040112H]]]; C[]; ThreadStart[MCommand, NEW[MCommandRec _ []]]; C[3]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; MNShared _ TRUE; E[]; drive.MCmdAB _ FALSE; F[]; <<>> ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 10H, data: 00080000H, rejects: 6]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, RQ: TRUE, RQAddress:00010010H, RQData0: 00080000H, RQData1: 00080001H, RQData2: 00080002H, RQData3: 00080003H]]]; C[9]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; E[]; drive.MCmdAB _ FALSE; F[]; <<>> ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 20H, data: 00200000H, rejects: 6]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, RQ: TRUE, RQAddress:00010020H, RQData0: 00200000H, RQData1: 00200001H, RQData2: 00200002H, RQData3: 00200003H]]]; C[9]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; E[]; drive.MCmdAB _ FALSE; F[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 30H, data: 00300000H, rejects: 6]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, RQ: TRUE, RQAddress:00010030H, RQData0: 00300000H, RQData1: 00300001H, RQData2: 00300002H, RQData3: 00300003H]]]; C[9]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; E[]; drive.MCmdAB _ FALSE; F[]; ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 40H, data: 00400000H, rejects: 19]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, wqCount: 2, wqData: [[wqNotReadyCount: 3, WQAddress: 00010000H, WQData0: 00020004H, WQData1: 00000002H, WQData2: 00020002H, WQData3: 00020003H], [WQAddress: 00010004H, WQData0: 00040000H, WQData1: 00040001H, WQData2: 00040112H, WQData3: 00040003H],,], RQ: TRUE, RQAddress:00010040H, RQData0: 00400000H, RQData1: 00400001H, RQData2: 00400002H, RQData3: 00400003H]]]; C[22]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; E[]; drive.MCmdAB _ FALSE; F[]; <<>> ThreadStart[PReference, NEW[PReferenceRec _ [command: Fetch, address: 50H, data: 00500000H, rejects: 6]]]; ThreadStart[MCommand, NEW[MCommandRec _ [arb: TRUE, RQ: TRUE, RQAddress:00010050H, RQData0: 00500000H, RQData1: 00500001H, RQData2: 00500002H, RQData3: 00500003H]]]; C[9]; P[A]; drive.MCmdAB _ TRUE; MCmdAB _ NoOp; E[]; drive.MCmdAB _ FALSE; F[]; Chunk1[]; }; Cache.RegisterCacheTester[CacheTest]; END. <<>> <> <<>> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>>