*----------------------------------------------------------- Title[InitialDisplay.mc...June 19, 1982 11:45 AM...Taft]; * Minimal Terminal Horizontal Task microcode: * Initializes HRam so that horizontal sync will be generated, and then * simply receives terminal messages and updates the keyboard words. *----------------------------------------------------------- Set[XTask, IP[DHT]]; * or AHT Subroutine; KnowRBase[THTRegion]; THTInitPC: T_ AHT, DisplayConfig, Branch[THTInitAHT, R<0]; T_ DHT; Wakeup[DHT], CoReturn; TopLevel; * DHT starts here T_ Statics, Branch[THTInit1]; * Use DispY TIOA Subroutine; THTInitAHT: Wakeup[AHT], CoReturn; TopLevel; * AHT starts here T_ TStatics, Branch[THTInit1]; * Use DispM TIOA THTInit1: TIOA_ T; RBase_ RBase[THTRegion]; T_ AllShutUp, Call[OutputGetsT]; * Disable WakeUps, Reset DDC T_ DWTShutUp, Call[OutputGetsT]; * Enable DHT wakeups PD_ DisplayConfig, MemBase_ IOBR; TReg400C_ 400C, Branch[.+2, ALU<0]; * Skip HRam setup if DispM in use T_ A0, Call[InitHRam]; * Initialize HRam TerminalHi_ A0, Cnt_ 5S; TerminalLo_ A0, TIOA[TNLCB]; T_ (TReg400C) XOR (177434C); * Initialize to all keys "up" T_ (Store_ T)+1, DBuf_ -1C, Branch[., Cnt#0&-1]; TVCWShadowReg_ VBlank, Branch[THTLast]; * Main loop must do at least one Output to TNLCB per wakeup, and * must send vertical sync during 24B out of every 265B scan lines. THTPerScanLine: Output_ TVCWShadowReg; Call[ReadTerminal]; * ReadTerminal returns with TIOA[NLCB], ALU = TFieldAreaReg (decremented) PD_ (TVCWShadowReg) AND (VSync), Block, Branch[THTPerScanLine, ALU#0]; TVCWShadowReg_ (TVCWShadowReg) XOR (VSync), Branch[.+2, ALU#0]; TFieldAreaReg_ 24C, Branch[THTPerScanLine]; * Time for VSync&VBlank THTLast: TFieldAreaReg_ 241C, Branch[THTPerScanLine]; * Time for VBlank