// Copyright Xerox Corporation 1979 external [ Ws; InitializeInterrupt; FindInterruptMask; CauseInterrupt ] static [ lowChannel; tickCount ] manifest verticalInterval=#421 let main() be [ let stack1=vec 40 let stack2=vec 200 // Initialize two interrupt channels let high=InitializeInterrupt(stack1, 40, FindInterruptMask(1), HighProc) lowChannel=InitializeInterrupt(stack2, 200, FindInterruptMask(high), LowProc) tickCount=0 // Arrange vertical interval to cause interrupts on channel "high" @verticalInterval=@verticalInterval % high while true do loop ] and HighProc() be [ if tickCount eq 0 then [ tickCount=-60 CauseInterrupt(lowChannel) ] tickCount=tickCount+1 ] and LowProc() be [ Ws("Tick ") ]