diff CoCoOS9/defs/systype.l2 @ 31:bd2b07db8917 cocoos9lv2v3

CoCoOS9 version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Jul 2018 15:16:13 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CoCoOS9/defs/systype.l2	Sat Jul 14 15:16:13 2018 +0900
@@ -0,0 +1,803 @@
+         nam   SysType.l2
+         ttl   CoCo 3 OS-9 Level 2 System Type Definitions
+
+*****************
+* Edition History
+*
+* Date     Changes Made                                                 by
+* -------- ------------------------------------------------------------ ---
+* 98/10/13 Added defs by Bruce Isted from his Eliminator archive        BGP
+* 98/10/31 Merged cc3global.defs into this file                         BGP
+
+**********************
+* CPU Type Definitions
+*
+         org   1
+Color    rmb   1
+COLOR3   rmb   1
+CPUType  set   COLOR3
+
+******************************
+* Clock Speed Type Definitions
+*
+OneMHz   equ   1
+TwoMHz   equ   2
+CPUSpeed set   OneMHz
+
+**********************************
+* Power Line Frequency Definitions
+*
+Hz50     equ   1          Assemble clock for 50 hz power
+Hz60     equ   2          Assemble clock for 60 hz power
+PwrLnFrq set   Hz60       Set to Appropriate freq
+
+******************
+* ACIA type set up
+*
+         org   1
+ACIA6850 rmb   1          MC6850 acia.
+ACIA6551 rmb   1          SY6551 acia.
+ACIA2661 rmb   1          SC2661 acia.
+ACIATYPE set   ACIA6551
+
+****************************************
+* Dynamic Address Translator Definitions
+*
+DAT.BlCt equ   8          D.A.T. blocks/address space
+DAT.BlSz equ   (256/DAT.BlCt)*256 D.A.T. block size
+DAT.ImSz equ   DAT.BlCt*2 D.A.T. Image size
+DAT.Addr equ   -(DAT.BlSz/256) D.A.T. MSB Address bits
+DAT.Task equ   $FF91      Task Register address
+DAT.TkCt equ   32         Number of DAT Tasks
+DAT.Regs equ   $FFA0      DAT Block Registers base address
+DAT.Free equ   $333E      Free Block Number
+DAT.BlMx equ   $3F        Maximum Block number
+DAT.BMSz equ   $40        Memory Block Map size
+DAT.WrPr equ   0          no write protect
+DAT.WrEn equ   0          no write enable
+SysTask  equ   0          Coco System Task number
+IOBlock  equ   $3F
+ROMBlock equ   $3F
+IOAddr   equ   $7F
+ROMCount equ   1          number of blocks of ROM (High RAM Block)
+RAMCount equ   1          initial blocks of RAM
+MoveBlks equ   DAT.BlCt-ROMCount-2 Block numbers used for copies
+BlockTyp equ   1          chk only first bytes of RAM block
+ByteType equ   2          chk entire block of RAM
+Limited  equ   1          chk only upper memory for ROM modules
+UnLimitd equ   2          chk all NotRAM for modules
+* NOTE: this check assumes any NotRAM with a module will
+*       always start with $87CD in first two bytes of block
+RAMCheck equ   BlockTyp   chk only beg bytes of block
+ROMCheck equ   Limited    chk only upper few blocks for ROM
+LastRAM  equ   IOBlock    maximum RAM block number
+
+***************************
+* Color Computer 3 Specific
+*
+CPUType  set   Color3
+CPUSpeed set   TwoMHz
+MappedIO equ   True       (Actually False but it works better this way)
+
+********************
+* Hardware addresses
+*
+GIMERegs equ   $FF00      Base address of GIME registers
+IrqEnR   equ   $FF92      GIME IRQ enable/status register
+BordReg  equ   $FF9A      Border color register
+PalAdr   equ   $FFB0      Palette registers
+PIA0Base equ   $FF00
+PIA1Base equ   $FF20
+
+HW.Page  set   $07        Device descriptor hardware page
+
+******************
+* Device addresses
+*
+A.AciaP  set   $FF68      Aciapak Address
+A.ModP   set   $FF6C      ModPak Address
+DPort    set   $FF40      Disk controller base address
+MPI.Slct set   $FF7F      Multi-Pak slot select
+MPI.Slot set   $03        Multi-Pak default slot
+*** Eliminator addresses
+WD05Port set   $FF70
+A.DACIA1 set   $FF60
+A.DACIA2 set   A.DACIA1+4
+PPIABase set   WD05Port+6
+RTC.Base set   WD05Port+2
+
+*
+* VDG Devices
+*
+A.TermV  set   $FFC0      VDG Term
+A.V1     set   $FFC1      Possible additional VDG Devices
+A.V2     set   $FFC2
+A.V3     set   $FFC3
+A.V4     set   $FFC4
+A.V5     set   $FFC5
+A.V6     set   $FFC6
+A.V7     set   $FFC7
+*
+* Window Devices
+*
+         org   $FF9F
+A.W      rmb   1          $FF9F Generic Window Descriptor
+A.TermW  rmb   1          $FFA0 Windowing Term
+A.W1     rmb   1          $FFA1
+A.W2     rmb   1          $FFA2
+A.W3     rmb   1          $FFA3
+A.W4     rmb   1          $FFA4
+A.W5     rmb   1          $FFA5
+A.W6     rmb   1          $FFA6
+A.W7     rmb   1          $FFA7
+A.W8     rmb   1          $FFA8
+A.W9     rmb   1          $FFA9
+A.W10    rmb   1          $FFAA
+A.W11    rmb   1          $FFAB
+A.W12    rmb   1          $FFAC
+A.W13    rmb   1          $FFAD
+A.W14    rmb   1          $FFAE
+A.W15    rmb   1          $FFAF
+
+****************************************
+* Special character Bit position equates
+*
+SHIFTBIT equ   %00000001
+CNTRLBIT equ   %00000010
+ALTERBIT equ   %00000100
+UPBIT    equ   %00001000
+DOWNBIT  equ   %00010000
+LEFTBIT  equ   %00100000
+RIGHTBIT equ   %01000000
+SPACEBIT equ   %10000000
+
+**********************************
+* Pointer Device Packet Definition
+*
+         org   0
+Pt.Valid rmb   1          Is returned info valid (0=no/1=yes)
+Pt.Actv  rmb   1          Active Side 0=off/1=Right/2=left
+Pt.ToTm  rmb   1          Time out Initial value
+         rmb   2          reserved
+Pt.TTTo  rmb   1          Time Till Timeout
+Pt.TSSt  rmb   2          Time Since Start Counter
+Pt.CBSA  rmb   1          Current Button State Button A
+Pt.CBSB  rmb   1          Current Button State Button B
+Pt.CCtA  rmb   1          Click Count Button A
+Pt.CCtB  rmb   1          Click Count Button B
+Pt.TTSA  rmb   1          Time This State Counter Button A
+Pt.TTSB  rmb   1          Time This State Counter Button B
+Pt.TLSA  rmb   1          Time Last State Counter Button A
+Pt.TLSB  rmb   1          Time Last State Counter Button B
+         rmb   2          Reserved
+Pt.BDX   rmb   2          Button down X value EXPERIMENTAL
+Pt.BDY   rmb   2          Button down Y value
+Pt.Stat  rmb   1          Window Pointer type location
+Pt.Res   rmb   1          Resolution (0..640 by: 0=ten/1=one)
+Pt.AcX   rmb   2          Actual X Value
+Pt.AcY   rmb   2          Actual Y Value
+Pt.WRX   rmb   2          Window Relative X
+Pt.WRY   rmb   2          Window Relative Y
+Pt.Siz   equ   .          Packet Size 32 bytes
+
+**************************
+* window regions for mouse
+*
+WR.Cntnt equ   0          content region
+WR.Cntrl equ   1          control region
+WR.OfWin equ   2          off window
+
+*************************************
+* Standard system get/put buffer defs
+*
+*
+* system group numbers
+*
+         org   200
+Grp.Fnt  rmb   1          font group
+Grp.Clip rmb   1          clipboard group
+Grp.Ptr  rmb   1          pointer group
+Grp.Pat2 rmb   1          pattern group 2 color
+Grp.Pat4 rmb   1          pattern group 4 color
+Grp.Pat6 rmb   1          pattern group 16 color
+*
+* font buffer numbers
+*
+         org   1
+Fnt.S8x8 rmb   1          standard 8x8 font
+Fnt.S6x8 rmb   1          standard 6x8 font
+Fnt.G8x8 rmb   1          standard graphics 8x8 font
+*
+* pattern buffer numbers
+*
+         org   1
+Pat.Dot  rmb   1
+Pat.Vrt  rmb   1
+Pat.Hrz  rmb   1
+Pat.XHtc rmb   1
+Pat.LSnt rmb   1
+Pat.RSnt rmb   1
+Pat.SDot rmb   1
+Pat.BDot rmb   1
+*
+* pointer buffer numbers
+*
+         org   1
+Ptr.Arr  rmb   1          Arrow pointer
+Ptr.Pen  rmb   1          Pencil pointer
+Ptr.LCH  rmb   1          Large cross hair pointer
+Ptr.Slp  rmb   1          Wait timer pointer
+Ptr.Ill  rmb   1          Illegal action pointer
+Ptr.Txt  rmb   1          Text pointer
+Ptr.SCH  rmb   1          Small cross hair pointer
+
+********************************
+* Window/Menu Bar Data Structure
+*
+* To be used in SS.WnSet SETSTAT to set up a Framed Window
+* for use in the high level windowing package.
+*
+NUMMENS  equ   10         maximum number of menus on menu bar
+NUMITMS  equ   20         maximum number of items in a menu
+MXTTLEN  equ   15         max chars for menu and item names
+WINSYNC  equ   $C0C0      synch bytes for window validation
+*
+* Menu Item Descriptor : (MN.ITEMS)
+* one required for each item within the menu
+*
+         org   0
+MI.TTL   rmb   MXTTLEN    item name
+MI.ENBL  rmb   1          enable flag
+MI.RES   rmb   5          reserved bytes
+MI.SIZ   equ   .          size of menu item descriptor
+*
+* Menu Descriptor :
+* one for each menu on the manu bar
+* each is pointed to by MB.MPTR below
+*
+         org   0
+MN.TTL   rmb   MXTTLEN    menu title
+MN.ID    rmb   1          menu id number (1-255)
+MN.XSIZ  rmb   1          horiz. size of desired pull down
+MN.NITS  rmb   1          number of items in menu
+MN.ENBL  rmb   1          enable flag
+MN.RES   rmb   2          reserved bytes
+MN.ITEMS rmb   2          pointer to array of menu items
+MN.SIZ   equ   .          size of menu descriptor
+*
+* Window Descriptor:
+* one required for each application in a framed window
+*
+         org   0
+WN.TTL   rmb   20         title of window for title bar
+WN.NMNS  rmb   1          number of menus in menu bar
+WN.XMIN  rmb   1          minimal horiz. size for application to run
+WN.YMIN  rmb   1          minimal vert. size for application to run
+WN.SYNC  rmb   2          synch bytes ($C0C0)
+WN.RES   rmb   7          reserved bytes
+WN.BAR   rmb   2          pointer to arry of menu descriptors
+WN.SIZ   equ   .          size of window/menu bar descriptor
+
+*************************
+* Window Type Definitions
+*
+* To be used in setting up the border of the window in
+* the SS.WnSel SETSTAT
+*
+         org   0
+WT.NBox  rmb   1          No Box
+WT.FWin  rmb   1          Framed Window
+WT.FSWin rmb   1          Framed Window w/Scroll Bars
+WT.SBox  rmb   1          Shadowed Box
+WT.DBox  rmb   1          Double Box
+WT.PBox  rmb   1          Plain Box
+
+*************************************
+* Pre-Defined Menu IDs for the system
+*
+         org   1
+MId.Mov  rmb   1          move box
+MId.Cls  rmb   1          close box
+MId.Grw  rmb   1          grow box
+MId.SUp  rmb   1          scroll up
+MId.SDn  rmb   1          scroll down
+MId.SRt  rmb   1          scroll right
+MId.SLt  rmb   1          scroll left
+MId.Chr  rmb   1          character was depressed
+         org   20
+MId.Tdy  rmb   1          Tandy menu
+MId.Fil  rmb   1          Files Menu
+MId.Edt  rmb   1          Edit Menu
+MId.Sty  rmb   1          Styles menu
+MId.Fnt  rmb   1          Font menu
+
+
+******************************************************************************
+******************************************************************************
+**                                                                          **
+** OS-9 Windowing system Global data definitions                            **
+**                                                                          **
+******************************************************************************
+******************************************************************************
+**                                                                          **
+** System memory block 0 layout:                                            **
+**                                                                          **
+** $0000-$0001 : FHL/Isted WD 1002-05 - interface base address              **
+** $0002       : FHL/Isted WD 1002-05 - boot device physical drive #        **
+** $0008       : Bruce Isted Serial mouse - button counter & rx count       **
+** $0009-$000B : Bruce Isted Serial mouse - RX buffer                       **
+** $000C-$000D : Bruce Isted Serial mouse - Current X position              **
+** $000E-$000F : Bruce Isted Serial mouse - Current Y position              **
+** $0010-$001F : unused (User definable)                                    **
+** $0020-$00FF : system direct page & some IRQ vectors                      **
+** $0100-$011F : Task usage table                                           **
+** $0120-$01FF : Virtual DAT tasks (pointed to by <D.TskIPt)                **
+** $0200-$02FF : memory block usage map ($80=Not RAM,$01=in use,$02=module) **
+** $0300-$03FF : system's system call dispatch table                        **
+** $0400-$04FF : user's sysem call dispatch table                           **
+** $0500-$05FF : process descriptor pointer table                           **
+** $0600-$07FF : System task (Task 0, ID 1) process descriptor              **
+** $0800-$08FF : System's stack space (initial ptr is $0900)                **
+** $0900-$09FF : SMAP table ($01=in used, $80=NOT RAM)                      **
+** $0A00-$0FFF : module directory DAT Images (8 bytes each)                 **
+** $1000-$10FF : System Global memory (pointed to by D.CCMem)               **
+** $1100-$11FF : GRFDRV global memory (DP=$11 in GRFDRV)                    **
+** $1200-$1247 : shared buffer between Grf/WindInt & GRFDRV (GP buffers)    **
+** $1248-$127F : ????                                                       **
+** $1280-$1A7F : the window tables (32 of $40 bytes each)                   **
+** $1A80-$1C7F : the screen tables (16 of $20 bytes each)                   **
+** $1C80-$2000 : the CC3 global mem stack (for windowing)                   **
+**                                                                          **
+******************************************************************************
+******************************************************************************
+
+* User settable values for CC3IO/TC9IO/GrfInt/WindInt & GrfDrv
+MaxLines equ   25         Max. Y coord text value
+Meg      set   false      "true" if 1 or 2 meg machine
+
+COMP     equ   0          composite monitor
+RGB      equ   1          RGB Analog monitor 
+MONO     equ   2          monochrome monitor
+
+Monitor  set   RGB
+
+* Global definitions
+KeyMse   equ   %00000001  keyboard mouse enabled
+NumLck   equ   %00000010  Numlock enabled (TC-9 use only)
+CapsLck  equ   %00000100  Capslock enabled
+MaxRows  equ   640        maximum X co-ordinate allowed on mouse
+         ifeq  MaxLines-25
+MaxLine  equ   198        maximum Y co-ordinate allowed on mouse
+         else  
+MaxLine  equ   191        maximum Y co-ordinate allowed on mouse
+         endc  
+
+*****************************************************************************
+* Static memory area for each window (CC3IO/TC9IO)
+* Should set up a write buffer (using parm area?) between SCF, CC3IO & Grfdrv
+* so we can 'burst mode' text output (copy up to 48 chars to Grfdrv's parm
+* area, and have grfdrv loop through & write all 48 chars to screen in 1 loop
+* May have to have smaller limit for text to gfx screens, as it will run much
+* slower, unless GrfDrv is made Partially/Fully Re-Entrant
+*
+* STRONG CAUTION:  scfdefs MUST be included first before this file if
+* V.SCF is to be resolved properly in pass 1!!
+         org   V.SCF
+
+WinType  rmb   1          window type (0=Windint/GrfInt,2=VDGInt)      $1D
+InfVld   rmb   1          Rest of info here valid? (0=NO, >0 = YES)    $1E
+DevPar   rmb   2          high bit=window device                       $1F
+ULCase   rmb   1          special key flags (Capslck & keyboard mouse) $21
+KySnsFlg rmb   1          flag for key sense setstat                   $22
+ScrChg   rmb   1          screen change flag                           $23
+SS.SigID rmb   1          data ready process ID                        $24
+SS.SigSg rmb   1          data ready signal code                       $25
+MS.SigID rmb   1          mouse signal process ID                      $26
+MS.SigSg rmb   1          mouse signal signal code                     $27
+MS.Smpl  rmb   1          mouse sample rate                            $28
+MS.Time  rmb   1          mouse timeout value                          $29
+MS.Side  rmb   1          MSB of mouse auto-follow flag                $2A
+PrtSide  rmb   1          auto follow mouse flag                       $2B
+ParmCnt  rmb   1          parameter count                              $2C
+ParmVct  rmb   2          parameter vector                             $2D
+PrmStrt  rmb   2          pointer to params start                      $2F
+NxtPrm   rmb   2          pointer to next param storage                $31
+EndPtr   rmb   1          last character read offset                   $33
+InpPtr   rmb   1          next character read offset                   $34
+WinNum   rmb   1          window table entry #                         $35
+DWNum    rmb   1          dwnum from descriptor                        $36
+CallCde  rmb   1          internal comod call code #                   $37
+CC3Parm  rmb   128-.      global parameter area
+ReadBuf  rmb   256-.      read input buffer (keyboard)
+CC3DSiz  equ   .
+
+*****************************************************************************
+* GrfInt/WindInt global memory area
+* This area sits in system block 0 from $1000 to $10ff
+WGlobal  equ   $1000      useful value (points to address starting below)
+         org   0
+G.CurTik rmb   1          Constant - # Clock ticks/cursor updates (2)
+G.CntTik rmb   1          Current tick count for cursor updates
+G.GfBusy rmb   1          Grfdrv is busy flag (1=busy)
+g0003    rmb   2          NEW: UNUSED
+g0005    rmb   2          ???
+G.GrfStk rmb   2          grfdrv stack pointer ($07)
+G.MonTyp rmb   1          monitor type
+g000A    equ   .          Old label for compatibility
+G.CrDvFl rmb   1          Are we current device flag (only set when all
+*                           Parms have been moved to Dev Mem)
+*                           0=We are not on our device
+*                           1=We are the current device
+*                           (Used by comod (GRF/WIND/VDGInt) to determine
+*                            whether or not to update GIME regs themselves
+*                            If not current device, they don't.)
+g000B    rmb   1          current device's V.TYPE
+G.CurDvM rmb   2          current device memory pointer for co-module use
+G.WIBusy rmb   1          WindInt is busy flag (1=busy)
+G.AlPckt rmb   6          F$Alarm time packet
+G.AlPID  rmb   1          F$Alarm proc ID ($15)
+G.AlSig  rmb   1          F$Alarm signal code ($16)
+G.BelVec rmb   2          BELL routine vector
+G.DefPal rmb   2          pointer to default palette data in global mem
+G.TnCnt  rmb   1          SS.Tone duration counter
+G.BelTnF rmb   1          BELL tone flag
+g001D    rmb   3
+G.CurDev rmb   2          current device's static memory pointer ($20)
+G.PrWMPt rmb   2          previous window static mem pointer $(22)
+G.BCFFlg rmb   1          bit coded co-module found flags ($24)
+*                           00000010 : VDGInt found
+*                           10000000 : GrfDrv found
+g0025     rmb   1
+G.KTblLC  rmb   1          Key table entry# last checked (1-3)
+*         ifeq  TC9-true
+*CurLght  rmb   1          current keyboard light settings
+*         else  
+G.LastCh  rmb   1          last keyboard character (ASCII value)
+*         endc  
+G.LKeyCd  rmb   1          last keyboard code
+G.KyRept rmb   1          key repeat counter
+* A secondary 3 key table (same format as g002D below)
+G.2Key1  rmb   1
+G.2Key2  rmb   1
+G.2Key3  rmb   1
+* Up to 3 keys can be registerd at once, and they are stored here. If more
+* than 3 are hit, the last key is overwritten with the very last key down that
+* was checked. Format for all three is the same as the PIA column/row byte @
+* KeyFlag below.
+G.Key1   rmb   1          Key 1 being held down (Row/Column #)
+G.Key2   rmb   1          Key 2 being held down (Row/Column #)
+G.Key3   rmb   1          Key 3 being held down (Row/Column #)
+G.ShftDn rmb   1          SHIFT key down flag (COM'd) ($30)
+G.CntlDn rmb   1          CTRL key down flag (0=NO)
+G.KeyFlg rmb   1          Keyboard PIA bit #'s for columns/rows
+*                           %00000111-Column # (Output, 0-7)
+*                           %00111000-Row # (Input, 0-6)
+G.AltDwn rmb   1          ALT key down flag (0=NO)
+G.KySns  rmb   1          key sense byte
+G.KySame rmb   1          same key flag
+G.CapLok rmb   1          CapsLock/SysRq key down flag
+         rmb   1
+g0038    rmb   1          grfdrv initialized flag
+         rmb   2
+G.MSmpRt rmb   1          Current mouse sample # (# ticks till next read)
+G.Mouse  rmb   Pt.Siz     mouse packet ($3C)
+g005C    rmb   2          Temp for relative mouse X coord calculation
+g005E    rmb   2          Temp for relative mouse Y coord calculation
+G.MSmpRV rmb   1          Mouse sample reset value (# ticks till next read)
+G.KyDly  rmb   1          initial key repeat delay constant
+G.KySpd  rmb   1          secondary key repeat delay constant
+*         ifeq  TC9-true
+*KeyParm  rmb   1          keyboard command parameter byte
+*         else  
+G.KyMse  rmb   1          keyboard mouse flag
+*         endc  
+G.Clear  rmb   1          "one-shot" CapsLock/SysRq key flag
+G.KyButt rmb   1          keyboard F1 and F2 "fire" button info
+G.AutoMs rmb   1          Auto-follow mouse flag for current device (0=NO)
+G.MseMv  rmb   1          mouse moved flag
+G.CoTble rmb   6          co-module table
+G.GrfEnt rmb   2          GRFDRV Entry address ($6E)
+g0070    rmb   1          # bytes to move in 1 block (1-72)
+G.WUseTb rmb   4          windows in use bit table (0=unused, 32 windows) ($71)
+G.GfxTbl rmb   2          Pointer to GFX tables ($75)
+G.WrkWTb rmb   $40        Work window table. WindInt only ($77)
+g00B7    rmb   2          Current Device static mem ptr for WindInt
+g00B9    rmb   2          Current window table ptr for WindInt
+g00BB    rmb   2          Pointer to work window table (g0077+$10)
+g00BD    rmb   1          Current screen type for work window table
+g00BE    rmb   1          Topmost overlay window # when check for title bars
+g00BF    rmb   1          Flag for keypress while processing menu select
+g00C0    rmb   2          Ptr to current path descriptor
+G.WindBk rmb   2          shift-clear routine vector
+G.MsInit rmb   2          set mouse routine vector
+G.MsSig  rmb   1          mouse signal flag
+G.DefPls rmb   16         Default palettes (2 repeats of 8 is default) ($C7)
+g00D7    rmb   41
+
+*****************************************************************************
+* GrfDrv global memory data definitions
+* This area sits in system block 0 from $1100 to $119E
+GrfMem   equ   $1100      useful label used to point to mem starting below
+         org   0
+gr0000   rmb   1          Pixel mask for 1st byte of GP line
+gr0001   rmb   1          Pixel mask for last byte of a GP line
+gr0002   rmb   2          Ptr to table of bit masks for colors
+gr0004   rmb   1          # of bytes wide GP buffer is (including partials)
+gr0005   rmb   1          # pixels per byte in GP Buffer
+gr0006   rmb   1          # of pixels used in 1st byte of GP buffer line
+gr0007   rmb   1          # of pixels used in last byte of GP buffer line
+gr0008   rmb   1          Bit mask that is common to both screen & GP buffer
+gr0009   rmb   1          # bytes for width of overlay window
+gr000A   rmb   1          # bytes to offset to get to next line after
+*                             overlay width has been copied
+gr000B   rmb   1
+gr000C   rmb   2          Cursor address for proportional spacing?
+gr000E   rmb   1
+gr000F   rmb   1          Left-based bit mask for proportional spacing?
+gr0010   rmb   2          Vector for text to gfx screen (either prop. or normal)
+gr0012   rmb   6
+gr0018   rmb   2          Working Center X coord for Circle/Ellipse
+gr001A   rmb   2          Working Center Y coord for Circle/Ellipse
+gr001C   rmb   2          Some variable for Circle/Ellipse (initially 0)
+gr001E   rmb   2          Working Y radius value for Circle/Ellipse
+gr0020   rmb   2          Arc 'clip line' X01
+gr0022   rmb   2          Arc 'clip line' Y01
+gr0024   rmb   2          Arc 'clip line' X02
+gr0026   rmb   2          Arc 'clip line' Y02
+gr0028   rmb   1          full-byte background color to FFILL on mask
+gr0029   rmb   1          pixels per byte: set up by FFILL
+gr002A   rmb   1          Flag for FFill: 1=no error, 0=Stack overflow error
+gr002B   rmb   1          current Y-direction to travel in FFILL
+gr002C   rmb   2
+gr002E   rmb   2          current window table entry
+gr0030   rmb   2          current screen table ptr
+gr0032   rmb   1          Last block # we used for buffers
+gr0033   rmb   2          Last offset we used for buffers
+gr0035   rmb   1          group
+gr0036   rmb   2          offset
+gr0038   rmb   1          group returned (new)
+gr0039   rmb   1          0=Text cursor inverted off, >0 is inverted on
+gr003A   rmb   1          0=Graphics cursor XOR'd off,>0 is XOR'd on scrn
+gr003B   rmb   2          end of vars ptr?
+gr003D   rmb   2          Last X coordinate Graphics cursor was ON at
+gr003F   rmb   2          Last Y coordinate Graphics cursor was ON at
+gr0041   rmb   2          Screen address for start of current gfx cursor
+gr0043   rmb   1          Pixel mask for start of gfx cursor
+gr0044   rmb   1          Block # Graphics cursor is in
+gr0045   rmb   2          Offset in block Graphics cursor is in
+gr0047   rmb   2          'Working' X coordinate
+gr0049   rmb   2          'Working' Y coordinate
+gr004B   rmb   2          current X
+gr004D   rmb   2          current Y
+gr004F   rmb   2          X Size (in bytes)
+gr0051   rmb   2          Y Size (in bytes)
+gr0053   rmb   2          Horizontal radius (circle/ellipse/arc)
+gr0055   rmb   2          Vertical radius (circle/ellipse/arc)
+gr0057   rmb   1          group
+gr0058   rmb   1          buffer #
+gr0059   rmb   1          save switch for overlay
+gr005A   rmb   1          PRN
+gr005B   rmb   2          X coordinate of Graphics cursor
+gr005D   rmb   2          Y coordinate of Graphics cursor
+gr005F   rmb   1          ATD: new video mode for 24/25/28-line windows
+Gr.STYMk rmb   1          STY marker
+gr0061   rmb   1          foreground RGB data
+gr0062   rmb   1          background RGB data
+gr0063   rmb   1          bytes/row (on current screen...not window)
+gr0064   rmb   2          PSet vector
+gr0066   rmb   2          pset offset
+gr0068   rmb   2          LSet vector
+gr006A   rmb   2          max X co-ordinate
+gr006C   rmb   2          max Y co-ordinate
+gr006E   rmb   2          X pixel count
+gr0070   rmb   2          Y pixel count
+gr0072   rmb   2          Screen address of pixel we are doing
+gr0074   rmb   1          Pixel mask for pixel we are doing
+gr0075   rmb   2          ??? Pixel mask for last byte of GP buffer?
+gr0077   rmb   2          Vector for right direction FFill
+gr0079   rmb   1          bit mask for 1st pixel in byte for right dir. FFill
+gr007A   rmb   2          Vector for left direction FFill
+gr007C   rmb   1          bit mask for last pixel in byte for left dir. FFill
+gr007D   rmb   1          buffer block #
+gr007E   rmb   2          buffer offset #
+gr0080   rmb   2          Buffer length (in bytes)
+gr0082   rmb   3          3 byte extended screen address
+gr0085   rmb   2          temp
+gr0087   rmb   16         grfdrv (sysmap 1) DAT image
+gr0097   rmb   1          temp
+gr0098   rmb   1          temp
+* In ARC, 97-98 is the width of the clip line in pixels (after scaling)
+gr0099   rmb   2          temp
+* In ARC, 99-9A is the height of the clip line in pixels (after scaling)
+gr009B   rmb   1          counter temp
+gr009C   rmb   1
+gr009D   rmb   2          offset to buffer in block
+gr009F   rmb   1
+gr00A0   rmb   1          # lines left to do of GP buffer onto screen
+gr00A1   rmb   2          vector routine for (changes lots)
+* In ARC A1-A2 is the vector to the proper clipping routine
+gr00A3   rmb   2          Vector for shifting GP buffers
+gr00A5   rmb   2          Vector for shifting GP buffers (can dupe A1)
+gr00A7   rmb   2
+gr00A9   rmb   2          NEW: Window tbl ptr for last window GRFDRV used
+gr00AB   rmb   256-.      ??? UNUSED?
+* GPLoad buffer - $1200 in system block 0
+GPBuf    rmb   72         common move buffer for gpload/get/put
+gb0000   equ   72         Size of get/put buffer ($48)
+
+*****************************************************************************
+* Window table entry structure
+* These tables sit in system block 0 and there is 1 for every window init'd
+* including any overlay windows.
+MaxWind  equ   32         maximum allowable window tables
+WinBase  equ   $1290      base address to start of window tables
+         org   -$10
+Wt.STbl  rmb   2          Screen table pointer ($FFFF=Not used)       -$10
+Wt.BLnk  rmb   1          overlay window parent entry # ($FF=base)    -$0E
+Wt.LStrt rmb   2          screen logical start address                -$0D
+Wt.CPX   rmb   1          current X coord. start                      -$0B
+Wt.CPY   rmb   1          current Y coord. start                      -$0A
+Wt.SZX   rmb   1          current X size (CWArea)                     -$09
+Wt.SZY   rmb   1          current Y size (CWArea)                     -$08
+Wt.SXFct rmb   1          X scaling factor                            -$07
+Wt.SYFct rmb   1          Y scaling factor (0=no scaling)             -$06
+Wt.Cur   rmb   2          cursor physical address on screen           -$05
+Wt.FMsk  rmb   1          font bit mask (based from left)             -$03
+Wt.CurX  rmb   2          X coord of cursor                           -$02
+Wt.CurY  rmb   2          Y Coord of cursor                            $00
+Wt.XBCnt rmb   1          width of window (in bytes)                   $02
+Wt.CWTmp rmb   1          bytes wide each text chr (1,2,4)             $03
+Wt.BRow  rmb   2          bytes/text row (8x width in gfx)             $04
+Wt.Fore  rmb   1          foreground palette #                         $06
+Wt.Back  rmb   1          background palette #                         $07
+Wt.Attr  rmb   1          default attributes (FUTTTBBB)                $08
+Wt.BSW   rmb   1          character BSW switches                       $09
+Wt.LSet  rmb   1          LSet type                                    $0A
+Wt.FBlk  rmb   1          Font memory block #                          $0B
+Wt.FOff  rmb   2          Font offset in block                         $0C
+Wt.PBlk  rmb   1          PSet memory block #                          $0E
+Wt.POff  rmb   2          PSet offset in block                         $0F
+Wt.OBlk  rmb   1          Overlay memory block #                       $11
+Wt.OOff  rmb   2          Overlay offset in block                      $12
+Wt.LVec  rmb   2          LSet vector                                  $14
+Wt.PVec  rmb   2          PSet vector                                  $16
+Wt.GBlk  rmb   1          GCursor memory block #                       $18
+Wt.GOff  rmb   2          GCursor offset in block                      $19
+Wt.MaxX  rmb   2          Maximum X cord. (0-79,0-639)                 $1B
+Wt.MaxY  rmb   2          Maximum Y cord. (0-24,0-191)                 $1D
+Wt.BLen  rmb   2          bytes left in GPLoad block below             $1F
+Wt.NBlk  rmb   1          memory block # for next GPLoad               $21
+Wt.NOff  rmb   2          Offset in block for next GPLoad              $22
+Wt.LStDf rmb   2          screen logical start default                 $24
+* NOTE: The following default settings are what the window was initialized
+*       with, and thus are the MAXIMUM start/size the window can handle
+*       until it is restarted (DWEnd & DWSet)
+*       They also appear to be used in WindInt to determine the coords &
+*       sizes for control+content regions
+Wt.DfCPX rmb   1          default X cord. start                        $26
+Wt.DfCPY rmb   1          default Y cord. start                        $27
+Wt.DfSZX rmb   1          default X size                               $28
+Wt.DfSZY rmb   1          default Y size                               $29
+Wt.Res   rmb   6          unused                                   $2A-$2F
+Wt.Siz   equ   .+$10
+
+*****************************************************************************
+* Screen table entrys
+* These tables sit in system block 0 base=$1A80
+
+STblMax  equ   16         Maximum number of screen tables
+STblBse  equ   $1A80      base address of screen tables
+         org   0
+St.Sty   rmb   1          Screen type                         $00
+St.SBlk  rmb   1          Ram block start #                   $01
+St.LStrt rmb   2          Screen logical start (for GIME)     $02
+St.BRow  rmb   1          Bytes per row                       $04
+St.Brdr  rmb   1          Border palette register #           $05
+St.Fore  rmb   1          Foreground palette register #       $06
+St.Back  rmb   1          Background palette register #       $07
+St.ScSiz rmb   1          screen size: 24..28 lines           $08
+St.Res   rmb   7          UNUSED???                           $09
+* NOTE: SHOULD USE ONE OF THESE UNUSED BYTES TO KEEP THE # OF DEVICE WINDOW
+* TABLES THAT ARE USING THIS SCREEN TABLE. DWSET & DWEND WOULD KEEP TRACK OF
+* THESE, AND THE WINDINT TITLE BAR ROUTINE WOULD CHECK IT. IF IT IS ONLY 1,
+* IT WON'T BOTHER CHANGING THE TITLE BAR WHEN SELECTING WINDOWS
+St.Pals  rmb   16         Palette register contents           $10
+St.Siz   equ   .
+
+*****************************************************************************
+* Graphics buffer tables
+* They contain a 20 byte header (shown below), followed by the raw pixel
+* data.
+         org   0
+Grf.Bck  rmb   1          back block link #                   $00
+Grf.Off  rmb   2          back block header offset            $01
+Grf.Grp  rmb   1          group #                             $03
+Grf.Buff rmb   1          buffer #                            $04
+Grf.BSz  rmb   2          buffer size (not including header)  $05
+Grf.XSz  rmb   2          X size (in pixels)                  $07
+Grf.YSz  rmb   2          Y size (in pixels/bytes)            $09
+Grf.XBSz rmb   1          X size in bytes                     $0B
+Grf.LfPx rmb   1          # pixels used in first byte of line $0C
+Grf.RtPx rmb   1          # pixels used in last byte of line  $0D
+Grf.STY  rmb   1          Screen type buffer intended for     $0E
+Grf.NBlk rmb   1          number blocks used                  $0F
+Grf.Pal  rmb   16         Copy of palette registers?          $10
+Grf.Siz  equ   .          $20
+
+*****************************************************************************
+* GFX tables (1 for each window, 18 ($12) bytes each) pointed to by
+* $1075-$0176
+* GRFINT only uses gt0001-gt0004, the rest is exclusive to WINDINT
+         org   0
+Gt.WTyp  rmb   1          WindInt window type (Framed, Scroll Bar, etc.) $00
+Gt.GXCur rmb   2          X coord of graphics cursor                     $01
+Gt.GYCur rmb   2          Y coord of graphics cursor                     $03
+Gt.DPtr  rmb   2          Ptr to WindInt window descriptor               $05
+Gt.FClr  rmb   1          Foreground color                               $07
+Gt.BClr  rmb   1          Background color                               $08
+Gt.FMsk  rmb   1          Foreground mask                                $09
+Gt.BMsk  rmb   1          Background mask                                $0A
+Gt.GBlk  rmb   1          Block # of graphics cursor                     $0B
+Gt.GOff  rmb   2          Offset into block of graphics cursor           $0C
+Gt.Proc  rmb   1          Process # of window creator                    $0E
+Gt.PBlk  rmb   1          Process descriptor block # of creator          $0F
+Gt.Res   rmb   2          ??? RESERVED ???                               $10
+GTabSz   equ   .
+
+*****************************************************************************
+* This table is located in the graphics table memory and is offset from
+* graphics table pointer stored at $1075-$1076. This is used exclusively by
+* WindInt.
+* NOTE: USING UNUSED BYTES IN CC3 GLOBAL MEM, SET UP SEPARATE PTRS FOR EACH
+*  OF THE BELOW SO WE CAN SPEED UP ACCESS BY NOT HAVING TO DO A LOAD/LEAx
+*  COMBINATION EVERY TIME
+         org   $0240
+         rmb   WN.SIZ     copy of last accessed window descriptor
+         rmb   MN.SIZ     copy of last accessed menu descriptor
+         rmb   MI.SIZ     copy of last accessed item descriptor
+         rmb   65         menu handling table (16 entrys of 4 bytes)
+
+*****************************************************************************
+* WindInt menu handling table entry definition
+         org   0
+MnuXNum  rmb   1          menu #
+MnuXStrt rmb   1          X start text co-ordinate
+MnuXEnd  rmb   1          X end text co-ordinate
+         rmb   1          unused?
+MnuHSiz  equ   .
+
+*****************************************************************************
+* Character binary switches
+TChr     equ   %10000000  transparent characters
+Under    equ   %01000000  underline characters
+Bold     equ   %00100000  bold characters
+Prop     equ   %00010000  proportional spacing of characters
+Scale    equ   %00001000  automatic window scaling
+Invers   equ   %00000100  inverse characters
+NoCurs   equ   %00000010  no cursor display
+Protect  equ   %00000001  device window protection
+
+*****************************************************************************
+* Screen types (high bit set=hardware text, else graphics) in GRFDRV
+Current  equ   $ff        Current screen
+*         equ   1          640x200x2
+*         equ   2          320x200x4
+*         equ   3          640x200x4
+*         equ   4          320x200x16
+*         equ   $85        80 column text
+*         equ   $86        40 column text
+
+*************************************
+* Window default palette color codes
+*
+         org   0
+White.   rmb   1
+Blue.    rmb   1
+Black.   rmb   1
+Green.   rmb   1
+Red.     rmb   1
+Yellow.  rmb   1
+Magenta. rmb   1
+Cyan.    rmb   1
+
+* end of cc3global.defs