MODULE IdleLed;

IMPORT
       e:Exec,
       h:Hardware,
       y:SYSTEM,
       c:Cia;

VAR
    mei:e.Interrupt;
    met:e.TaskPtr;
    oldp:SHORTINT;
    proc:e.PROC;

PROCEDURE IdleIrq;
(* $EntryExitCode- *)
(* $SaveAllRegs+ *)
BEGIN;
y.INLINE(
 01039H,0BFH,0E001H,0200H,0FDH,013C0H,0BFH,0E001H,04E75H,0F14H,0H,03F2H);
END IdleIrq;

BEGIN;
proc:=IdleIrq;
c.base:=e.OpenResource(c.ciabName);
IF c.base=NIL THEN;HALT(0);END;
mei.node.type:=e.interrupt;
mei.node.pri:=127;
mei.node.name:=y.ADR("Idle-Led");
mei.data:=NIL;
mei.code:=proc;
IF c.AddICRVector(h.ta,y.ADR(mei))#NIL THEN END;
met:=e.FindTask(NIL);
oldp:=met.node.pri;
met.node.pri:=-127;
h.ciab.cra:=SHORTSET{};
h.ciab.talo:=058H;(*58*)
h.ciab.tahi:=01BH;(*1b*)
IF c.SetICR(SHORTSET{h.ta,h.setClr})#SHORTSET{} THEN END;
WHILE ~(12 IN met.sigRecvd) DO
h.ciab.cra:=SHORTSET{h.craStart,h.craLoad,h.craRunmode};
h.ciaa.pra:=h.ciaa.pra + SHORTSET{h.led};
END;
h.ciab.cra:=SHORTSET{};
IF c.SetICR(SHORTSET{h.ta})#SHORTSET{} THEN END;
c.RemICRVector(h.ta,y.ADR(mei));
met.node.pri:=oldp;
END IdleLed.





