%
Page Numbers: Yes First Page: 1
Heading:
eventCounters1.mcOctober 13, 1979 1:04 PM%
* INSERT[D1ALU.MC];
* TITLE[Ifu4];
* INSERT[PREAMBLE.MC];
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CONTENTS
TESTDESCRIPTION
genIO:tetst genio registers
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%
October 13, 1979 1:04 PM
Conclusion below was wrong, hardware does not invert the signal & the problem was a missing skpif...
October 13, 1979 12:50 PM
Fix code that inverts genIn -- the data gets inverted on Ifu board, therefore the microprogram must not reinvert it.
October 13, 1979 11:48 AM
Add code for genIO stub. Fix incorrect definition of AtasksAll.
October 12, 1979 6:55 PM
change constant name into ctr.*TasksAll.
October 12, 1979 4:38 PM
Construct this file from original event coutners code, move event counters into eventCounters2.mc; construct genIOstub.
%
* September 27, 1979 10:04 AM
beginEventcounters1:
pushReturn[];
call[disableConditionalTask];
call[initJunkForWakeups];
call[genIO];* test counting all cycles.
call[disableJunkTPC];
returnP[];
* October 13, 1979 11:49 AM
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
These constants define the way BMux inputs affect the counters when the processor performs "MOS←" FFs. IF b0=1 then the ifu instruction set gets loaded; otherwise, the counters load control information.
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
m[EventCntA’, IFA[BSEL,ER[Multiple.B.sources],FF256[171]] B ];
m[GenIn’, IFA[BSEL,ER[Multiple.B.sources],FF256[171]] B ];* genIN = EventCntA’
m[EventCntB’, IFA[BSEL,ER[Multiple.B.sources],FF256[174]] B ];
m[GenOut’, IFA[BSEL,ER[Multiple.B.sources],FF256[174]] B ];* genOut = EventCntB’
mc[useGenIO, 0];* don’t allow the event counters to count (t←useGenIO; mos←t)
mc[ctr.Aenable, b4];
set[ashift, 5];
mc[ctr.Atrue, lshift[0, ashift]];* A always counts
mc[ctr.Ahold, lshift[1, ashift]];* A counts holds
mc[ctr.AprocRef,, lshift[2, ashift]];* A counts proc references
mc[ctr.AifuJump, lshift[3, ashift]];* A counts good good ifu jumps (not (hold or exception))
mc[ctr.Amiss, lshift[4, ashift]];* A counts misses
mc[ctr.AbpA, lshift[5, ashift]];* A counts back pannel events A, C, or E
mc[ctr.AbpC, lshift[6, ashift]];
mc[ctr.AbpE, lshift[7, ashift]];
mc[ctr.AtasksAll, b11];
mc[ctr.Benable, b5];
set[Bshift, 1];
mc[ctr.Btrue, lshift[0, bshift]];* B always counts
mc[ctr.Bhold, lshift[1, bshift]];* B counts holds
mc[ctr.BifuRef,, lshift[2, bshift]];* B counts ifu references
mc[ctr.BifuNotReady, lshift[3, bshift]];* B counts not ready ifu jumps
mc[ctr.Bmiss, lshift[4, bshift]];* B counts misses
mc[ctr.BbpB, lshift[5, bshift]];* B counts back pannel events B, C, or D
mc[ctr.BbpC, lshift[6, bshift]];
mc[ctr.BbpD, lshift[7, bshift]];
mc[ctr.BtasksAll, b15];
* October 13, 1979 12:15 PM
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
genIO
This code tests the genIO registers. It assumes there is a plug connection that makes genIO connected to genIOout. Since the eventCounters hardware shares the genIN/Out registers we can actually read the genOut register as well as the genIn register.
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* October 13, 1979 11:49 AM
genIO:
pushReturn[];
t←useGenIO;
mos←t;* now event counters are disabled.
t←100c;* loop 100B times
cnt←t;
genIOL:* top of genIO loop
t←a0;
genOut←t;
noop;* wait one cycle for proogation
rscr←not(genIn’);
PD←rscr;
skpif[ALU=0];
genIOerr1:* we wrote zero into genOut
error;* we read non-zero (rscr) from genIn
rscr←not(genOut’);
t#(rscr);
skpif[ALU=0];
genIOerr1b:* wrote zero into genOut
error;* read something else from genOut (rscr)
t←a1;
genOut←t;
noop;* wait one cycle for proogation
rscr←not(genIn’);
(rscr)# (177777C);
skpif[ALU=0];
genIOerr2:* we wrote allones into genOut
error;* genIn’ read something else (rscr)
rscr←not(genOut’);
t#(rscr);
skpif[ALU=0];
genIOerr2b:* wrote allones into genOut
error;* read something else from genOut (rscr)
t←(and[52525,177400]C);
t←t or (and[52525,377]c);* t=52525= alternating 01
genOut←t;
noop;* wait one cycle for proogation
rscr←not(genIn’);
(rscr)#t;
skpif[ALU=0];
genIOerr3:* wrote 52525 into genOut
error;* genIn’ read something different (rscr)
rscr←not(genOut’);
t#(rscr);
skpif[ALU=0];
genIOerr3b:* wrote 52525 into genOut
error;* read something else from genOut (rscr)
t←not(t);* t = alternating 10
genOut←t;
noop;* wait one cycle for proogation
rscr←not(genIn’);
t#(rscr);
skpif[ALU=0];
genIOerr4:* wrote alternating 10 into genOut
error;* genIn’ read something different (rscr).
rscr←not(genOut’);
t#(rscr);
skpif[ALU=0];
genIOerr4b:* wrote alternating 10 into genOut
error;* read something else from genOut (rscr)
loopUntil[CNT=0&-1, genIOL];
genIOxit:
returnP[];