:TITLE[DisplayDefs]; *Ed Fiala 4 May 1982 SetTask[DisplayTask]; *Definitions for Pilot UTVFC Set[vCReg,0]; *Control register Set[vfCReg,Add[LShift[DisplayTask,4],0]]; *For IOFetch4 to vCReg MC[ClrNC,1]; MC[AllowWU,2]; MC[OddFld,4]; MC[VS,10]; MC[Blank,20]; MC[BlackBackground,100]; MC[IncNC,200]; MC[AllowWU&Blank,AllowWU,Blank]; MC[OddFld&Blank,OddFld,Blank]; MC[ClrNC&Blank,ClrNC,Blank]; MC[IncNC&Blank,IncNC,Blank]; Set[vBufStart,1]; *Buffer Starting Address Set[vHCRam,2]; *Horizontal control ram Set[vLdIAR,3]; *IAR[0:5] _ Start[0:5] (data is ignored) Set[vCursor0,4]; *Channel 0 Cursor control register *Set[vCursor1,5]; *Channel 1 Cursor control register Set[vCursorMem0,6]; *Channel 0 Cursor Memory *Set[vCursorMem1,7]; *Channel 1 Cursor Memory Set[vBuf0,10]; *Channel 0 data buffer--use with Output Set[vfBuf0,Add[LShift[DisplayTask,4],10]]; *Channel 0 data buffer for IOFetch *Channel 1, 2, and 3 data buffers are 11, 12, and 13 (unused) *To use fewer registers, consider the following possibilities: * (1) If the CSL monitor code were eliminated, then vDBuf0 and vDBuf1 would *no longer be needed during the visible scan and might be freed by recoding *the vertical blanking activities; * (2) vButtons could be eliminated by preserving the six bits in vCR[2:7]. Set[vRB,LShift[And[DisplayTask,3],4]]; *enforces register allocation conventions RV4[vDBuf0,vDBuf1,vDBuf2,vDBuf3,Add[vRB,0]]; *general temporaries RV2[vBitmap,vBitmapHi,Add[vRB,2]]; **NOTE: overlaps vDBuf2 and vDBuf3 *The CSB extends from 177700 to 177737. RV2[vCSB,vCSBHi,Add[vRB,4]]; *vCSBHi .eq. 0 Set[CSBaddress,177700]; *Offsets from CSB Set[DCBptr,0]; *DCB is in 0 to 177777 Set[DCBFlags,1]; *Offset of flags word from beginning of DCB MC[DCBBackground,40000]; *0 => white background Set[DCBBitmapPtr,4]; *Offset of bitmap pointer from beginning of DCB Set[InterruptMask,1]; Set[CursorX,2]; Set[CursorY,3]; Set[MouseX,4]; Set[MouseY,5]; *6 is smashable *7 is mouse buttons *10-16 are Keyboard table words 0 to 6 *17 unused MC[CursorBitmap,20]; *177720 to 177737 *177400 to 177477 contain zeroes. RV[vSLC,Add[vRB,6]]; *"Scan Line Count" RV[vCursorY,Add[vRB,7]]; RV[vCR,Add[vRB,10]]; *Copy of hardware control register RV[vMouseDxy,Add[vRB,11]]; RV[vMsgStatus,Add[vRB,12]]; RV[vCursorControl,Add[vRB,13]]; RV[vMsg,Add[vRB,14]]; RV[vCnt,Add[vRB,15]]; RV[vButtons,Add[vRB,16]]; RV[vKeyBuffer,Add[vRB,17]]; :IF[LFMonitor]; ********************************* MC[WordsPerLine,100]; *64d words/scanline Set[vStart,0]; MC[vVSStart,11]; *Nscanlines - 1 before start of vert sync field B *(+1 added for field A). MC[vSyncLength,2]; *Nscanlines - 17d in which vert sync asserted *Spec is 18 lines of vertical sync/field MC[vBlankLength,14]; *Nscanlines - 3 after vert sync before starting frame :ELSE; ****************************************** MC[WordsPerLine,46]; *38d words/scanline Set[vStart,15000]; MC[vVSStart,1]; *Nscanlines - 1 before start of vert sync field B *(+1 added for field A). MC[vSyncLength,0]; *Nscanlines - 17d in which vert sync asserted MC[vBlankLength,13]; *Nscanlines - 3 after vert sync before starting frame :ENDIF; ***************************************** MC[ZeroDataBuffer,177400]; *Area in last 64k that contains 20B zeroes *These are the Alto-compatible numbers Set[MaxScanLines,624]; *no. visible scan lines per field/2 *(= 808 visible scanlines/screen = Alto compatible) (2048)\f5