%
Page Numbers: Yes First Page: 1
Heading:
eventCounters1.mcOctober 13, 1979 1:04 PM%
* INSERT[D1ALU.MC];
* TITLE[Ifu4];
* INSERT[PREAMBLE.MC];
%*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CONTENTS

TEST
DESCRIPTION
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[];