Difference between revisions of "Gimini.asm"

From Intellivision Wiki
Jump to: navigation, search
 
m (Protected "Gimini.asm" ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite)))
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 +
[[Category:Programming]] [[Category:Library]]
 +
 
This file is a header file that documents many devices inside the Intellivision, and provides many symbols that you can refer to in your code to make it easier to read.  The file itself is heavily commented and serves as its own documentation.
 
This file is a header file that documents many devices inside the Intellivision, and provides many symbols that you can refer to in your code to make it easier to read.  The file itself is heavily commented and serves as its own documentation.
  

Latest revision as of 08:24, 4 December 2010


This file is a header file that documents many devices inside the Intellivision, and provides many symbols that you can refer to in your code to make it easier to read. The file itself is heavily commented and serves as its own documentation.

Notes

GIMINI was the name of General Instrument's game products line. The Intellivision was based around the GIMINI-8900. The only real difference between the Intellivision and the GIMINI-8900 is that the Intellivision adds 512 bytes of Graphics RAM and 240 bytes of Scratchpad RAM.

Source Code

;* ======================================================================== *;
;*  These routines are placed into the public domain by their author.  All  *;
;*  copyright rights are hereby relinquished on the routines and data in    *;
;*  this file.  -- Joseph Zbiciak, 2008                                     *;
;* ======================================================================== *;

;;==========================================================================;;
;; GIMINI structure definitions.  Defines the memory map and peripherals.   ;;
;;==========================================================================;;

;; ======================================================================== ;;
;;  Overall Memory Map                                                      ;;
;;  MEMMAP -- Structure containing overall system memory map.               ;;
;; ======================================================================== ;;
MEMMAP          STRUCT  0
@@stic          EQU     $0000 ;..$003F  ; Standard Television Interface Circuit
@@voice         EQU     $0080 ;..$0081  ; Voice Synthesizer
@@psg1          EQU     $00F0 ;..$00FF  ; Secondary Programmable Sound Gen.
@@dataram       EQU     $0100 ;..$01EF  ; 8-bit Data RAM
@@psg0          EQU     $01F0 ;..$01FF  ; Primary Programmable Sound Generator
@@backtab       EQU     $0200 ;..$02EF  ; 16-bit Display RAM
@@sysram        EQU     $02F0 ;..$035F  ; 16-bit System RAM (incl. Stack)
@@exec2         EQU     $0400 ;..$04FF  ; Executive ROM expansion
@@exec          EQU     $1000 ;..$1FFF  ; Executive ROM
@@grom          EQU     $3000 ;..$37FF  ; Graphics ROM
@@gram          EQU     $3800 ;..$39FF  ; Graphics RAM
@@gram_alias1   EQU     $3A00 ;..$3BFF  ; Graphics RAM alias 
@@gram_alias2   EQU     $3C00 ;..$3DFF  ; Graphics RAM alias
@@gram_alias3   EQU     $3E00 ;..$3FFF  ; Graphics RAM alias
@@stic_alias1   EQU     $4000 ;..$403F  ; STIC alias (incomplete decode)
@@stic_alias2   EQU     $8000 ;..$803F  ; STIC alias (incomplete decode)
                ENDS



;;==========================================================================;;
;; AY8914 Programmable Sound Generator Register Definitions.                ;;
;;                                                                          ;;
;; PSG0 -- Primary PSG in the Gimini Console.                               ;;
;; PSG1 -- Secondary PSG, available when expansion is attached.             ;;
;; PSG  -- Constants and bitfields common to both PSG's.                    ;;
;;                                                                          ;;
;; Each PSG contains the following set of registers:                        ;;
;;                                                                          ;;
;;     Register pairs:                                                      ;;
;;                                                                          ;;
;;       7   6   5   4   3   2   1   0 | 7   6   5   4   3   2   1   0      ;;
;;     +---------------+---------------|-------------------------------+    ;;
;;  R4 |    unused     |                Channel A Period               | R0 ;;
;;     +---------------+---------------|-------------------------------+    ;;
;;  R5 |    unused     |                Channel B Period               | R1 ;;
;;     +---------------+---------------|-------------------------------+    ;;
;;  R6 |    unused     |                Channel C Period               | R2 ;;
;;     +---------------+---------------|-------------------------------+    ;;
;;  R7 |                        Envelope Period                        | R3 ;;
;;     +-------------------------------|-------+-----------------------+    ;;
;;                                                                          ;;
;;     Single registers:                                                    ;;
;;                                                                          ;;
;;         7       6       5       4       3       2       1       0        ;;
;;     +---------------+-----------------------+-----------------------+    ;;
;;     | I/O Port Dir  |    Noise Enables      |     Tone Enables      |    ;;
;;  R8 |   0   |   0   |   C   |   B   |   A   |   C   |   B   |   A   |    ;;
;;     +-------+-------+-------+-------+-------+-------+-------+-------+    ;;
;;  R9 |            unused     |              Noise Period             |    ;;
;;     +-----------------------+-------+-------+-------+-------+-------+    ;;
;;     |                               |   Envelope Characteristics    |    ;;
;; R10 |            unused             | CONT  |ATTACK | ALTER | HOLD  |    ;;
;;     +---------------+---------------+-------+-------+-------+-------+    ;;
;; R11 |    unused     | A Envl Select |    Channel A Volume Level     |    ;;
;;     +---------------+---------------+-------------------------------+    ;;
;; R12 |    unused     | B Envl Select |    Channel B Volume Level     |    ;;
;;     +---------------+---------------+-------------------------------+    ;;
;; R13 |    unused     | C Envl Select |    Channel C Volume Level     |    ;;
;;     +---------------+---------------+-------------------------------+    ;;
;;                                                                          ;;
;;==========================================================================;;

                ;;==========================================================;;
                ;; Primary PSG in the main console.                         ;;
                ;;==========================================================;;
PSG0            STRUCT  $01F0

                ;;----------------------------------------------------------;;
                ;; Register address definitions                             ;;
                ;;----------------------------------------------------------;;
@@chn_a_lo      EQU     $ + 0   ; Channel A period, lower 8 bits of 12
@@chn_b_lo      EQU     $ + 1   ; Channel B period, lower 8 bits of 12
@@chn_c_lo      EQU     $ + 2   ; Channel C period, lower 8 bits of 12
@@envlp_lo      EQU     $ + 3   ; Envelope period,  lower 8 bits of 16

@@chn_a_hi      EQU     $ + 4   ; Channel A period, upper 4 bits of 12
@@chn_b_hi      EQU     $ + 5   ; Channel B period, upper 4 bits of 12
@@chn_c_hi      EQU     $ + 6   ; Channel C period, upper 4 bits of 12
@@envlp_hi      EQU     $ + 7   ; Envelope period,  upper 8 bits of 16

@@chan_enable   EQU     $ + 8   ; Channel enables (bits 3-5 noise, 0-2 tone)
@@noise         EQU     $ + 9   ; Noise period (5 bits)
@@envelope      EQU     $ + 10  ; Envelope type/trigger (4 bits)

@@chn_a_vol     EQU     $ + 11  ; Channel A volume / Envelope select (6 bits)
@@chn_b_vol     EQU     $ + 12  ; Channel B volume / Envelope select (6 bits)
@@chn_c_vol     EQU     $ + 13  ; Channel C volume / Envelope select (6 bits)

@@io_port0      EQU     $ + 14  ; I/O port 0 (8 bits)
@@io_port1      EQU     $ + 15  ; I/O port 1 (8 bits)

                ENDS

                ;;==========================================================;;
                ;; Secondary PSG in the expansion unit.                     ;;
                ;;==========================================================;;
PSG1            STRUCT  $00F0

                ;;----------------------------------------------------------;;
                ;; Register address definitions                             ;;
                ;;----------------------------------------------------------;;
@@chn_a_lo      EQU     $ + 0   ; Channel A period, lower 8 bits of 12
@@chn_b_lo      EQU     $ + 1   ; Channel B period, lower 8 bits of 12
@@chn_c_lo      EQU     $ + 2   ; Channel C period, lower 8 bits of 12
@@envlp_lo      EQU     $ + 3   ; Envelope period,  lower 8 bits of 16

@@chn_a_hi      EQU     $ + 4   ; Channel A period, upper 4 bits of 12
@@chn_b_hi      EQU     $ + 5   ; Channel B period, upper 4 bits of 12
@@chn_c_hi      EQU     $ + 6   ; Channel C period, upper 4 bits of 12
@@envlp_hi      EQU     $ + 7   ; Envelope period,  upper 8 bits of 16

@@chan_enable   EQU     $ + 8   ; Channel enables (bits 3-5 noise, 0-2 tone)
@@noise         EQU     $ + 9   ; Noise period (5 bits)
@@envelope      EQU     $ + 10  ; Envelope type/trigger (4 bits)

@@chn_a_vol     EQU     $ + 11  ; Channel A volume / Envelope select (6 bits)
@@chn_b_vol     EQU     $ + 12  ; Channel B volume / Envelope select (6 bits)
@@chn_c_vol     EQU     $ + 13  ; Channel C volume / Envelope select (6 bits)

@@io_port0      EQU     $ + 14  ; I/O port 0 (8 bits)
@@io_port1      EQU     $ + 15  ; I/O port 1 (8 bits)

                ENDS

                ;;==========================================================;;
                ;; Useful Constants / Bit-field definitions.                ;;
                ;;==========================================================;;
PSG             STRUCT  $0000   ; Constants, etc. common to both PSGs.

                ;;----------------------------------------------------------;;
                ;; Bits to OR together for Channel Enable word              ;;
                ;;----------------------------------------------------------;;
@@tone_a_on     EQU     00000000b   
@@tone_b_on     EQU     00000000b
@@tone_c_on     EQU     00000000b
@@noise_a_on    EQU     00000000b
@@noise_b_on    EQU     00000000b
@@noise_c_on    EQU     00000000b

@@tone_a_off    EQU     00000001b
@@tone_b_off    EQU     00000010b
@@tone_c_off    EQU     00000100b
@@noise_a_off   EQU     00001000b
@@noise_b_off   EQU     00010000b
@@noise_c_off   EQU     00100000b

                ;;----------------------------------------------------------;;
                ;; Bits to OR together for Envelope Type                    ;;
                ;;----------------------------------------------------------;;
@@envl_cont     EQU     00001000b   ; Continue
@@envl_attack   EQU     00000100b   ; Attack (vs. Decay)
@@envl_alter    EQU     00000010b   ; Alternate
@@envl_hold     EQU     00000001b   ; Hold

                ;;----------------------------------------------------------;;
                ;; Volume levels                                            ;;
                ;;----------------------------------------------------------;;
@@vol_0         EQU     0
@@vol_1         EQU     1
@@vol_2         EQU     2
@@vol_3         EQU     3
@@vol_4         EQU     4
@@vol_5         EQU     5
@@vol_6         EQU     6
@@vol_7         EQU     7
@@vol_8         EQU     8
@@vol_9         EQU     9
@@vol_10        EQU     10
@@vol_11        EQU     11
@@vol_12        EQU     12
@@vol_13        EQU     13
@@vol_14        EQU     14
@@vol_15        EQU     15
@@vol_envl      EQU     63

                ENDS

;;==========================================================================;;
;; AY8900 Standard Television Interface Circuit                             ;;
;;                                                                          ;;
;; STIC -- Register definitions, constants and bitfields                    ;;
;;                                                                          ;;
;; The Standard Television Interface Circuit provides a method for placing  ;;
;; characters and graphics on the screen.  It provides a 20x12 matrix of    ;;
;; background 'cards'.  Each card contains an 8x8 tile of pixels.  It also  ;;
;; provides 8 movable objects (refered to here as MOBs).                    ;;
;;                                                                          ;;
;; MOB controls: (Note: 'mob' is MOB number (0 - 7))                        ;;
;;  mob + $00   -- X position, and some attribute bits.                     ;;
;;  mob + $08   -- Y position, and some attribute bits.                     ;;
;;  mob + $10   -- Character definition, more attribute bits.               ;;
;;  mob + $18   -- Collision information.                                   ;;
;;                                                                          ;;
;; Display Mode controls:                                                   ;;
;;  $20         -- Display enable (must be written during vert blank.)      ;;
;;  $21         -- Graphics mode (write sets FGBG, read sets Color Stack)   ;;
;;                                                                          ;;
;; Color Stack and Border Color controls:                                   ;;
;;  $28..$2B    -- Color stack entries 0..3                                 ;;
;;  $2C         -- Screen border color                                      ;;
;;                                                                          ;;
;; Display framing controls:                                                ;;
;;  $30         -- Pixel column delay (0..7)                                ;;
;;  $31         -- Pixel row delay (0..7)                                   ;;
;;  $32         -- Edge masking (bit 0 masks left, bit 1 masks top)         ;;
;;                                                                          ;;
;; Color Set                                                                ;;
;;       Primary Color Set                Pastel Color Set                  ;;
;;    ------------------------       -----------------------------          ;;
;;     0 Black   4 Dark Green          8 Grey     12 Pink                   ;;
;;     1 Blue    5 Green               9 Cyan     13 Light Blue             ;;
;;     2 Red     6 Yellow             10 Orange   14 Yellow-Green           ;;
;;     3 Tan     7 White              11 Brown    15 Purple                 ;;
;;                                                                          ;;
;;==========================================================================;;
STIC            STRUCT  $0000

;;--------------------------------------------------------------------------;;
;; MOB Controls                                                             ;;
;;                                                                          ;;
;; X Register layout:                                                       ;;
;;                                                                          ;;
;;    13   12   11   10    9    8    7    6    5    4    3    2    1    0   ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;  | ?? | ?? | ?? | X  |VISB|INTR|            X Coordinate               | ;;
;;  |    |    |    |SIZE|    |    |             (0 to 255)                | ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;                                                                          ;;
;; Y Register layout:                                                       ;;
;;                                                                          ;;
;;    13   12   11   10    9    8    7    6    5    4    3    2    1    0   ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;  | ?? | ?? | Y  | X  | Y  | Y  |YRES|          Y Coordinate            | ;;
;;  |    |    |FLIP|FLIP|SIZ4|SIZ2|    |           (0 to 127)             | ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;                                                                          ;;
;; A Register layout:                                                       ;;
;;                                                                          ;;
;;    13   12   11   10    9    8    7    6    5    4    3    2    1    0   ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;  |PRIO| FG |GRAM|      GRAM/GROM Card # (0 to 255)      |   FG Color   | ;;
;;  |    |bit3|GROM|     (bits 9, 10 ignored for GRAM)     |   Bits 0-2   | ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;                                                                          ;;
;; C Register layout:                                                       ;;
;;                                                                          ;;
;;    13   12   11   10    9    8    7    6    5    4    3    2    1    0   ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;  | ?? | ?? | ?? | ?? |COLL|COLL|COLL|COLL|COLL|COLL|COLL|COLL|COLL|COLL| ;;
;;  |    |    |    |    |BORD| BG |MOB7|MOB6|MOB5|MOB4|MOB3|MOB2|MOB1|MOB0| ;;
;;  +----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;--------------------------------------------------------------------------;;

@@mob0_x        EQU     $00 + 0     ; MOB 0 X position, XSIZE/VIS attributes
@@mob1_x        EQU     $00 + 1     ; MOB 1 X position, XSIZE/VIS attributes
@@mob2_x        EQU     $00 + 2     ; MOB 2 X position, XSIZE/VIS attributes
@@mob3_x        EQU     $00 + 3     ; MOB 3 X position, XSIZE/VIS attributes
@@mob4_x        EQU     $00 + 4     ; MOB 4 X position, XSIZE/VIS attributes
@@mob5_x        EQU     $00 + 5     ; MOB 5 X position, XSIZE/VIS attributes
@@mob6_x        EQU     $00 + 6     ; MOB 6 X position, XSIZE/VIS attributes
@@mob7_x        EQU     $00 + 7     ; MOB 7 X position, XSIZE/VIS attributes

@@mob0_y        EQU     $08 + 0     ; MOB 0 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob1_y        EQU     $08 + 1     ; MOB 1 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob2_y        EQU     $08 + 2     ; MOB 2 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob3_y        EQU     $08 + 3     ; MOB 3 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob4_y        EQU     $08 + 4     ; MOB 4 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob5_y        EQU     $08 + 5     ; MOB 5 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob6_y        EQU     $08 + 6     ; MOB 6 Y pos'n, YRES/YSIZE/XFLIP/YFLIP
@@mob7_y        EQU     $08 + 7     ; MOB 7 Y pos'n, YRES/YSIZE/XFLIP/YFLIP

@@mob0_a        EQU     $10 + 0     ; MOB 0 Color, Card #, Priority
@@mob1_a        EQU     $10 + 1     ; MOB 1 Color, Card #, Priority
@@mob2_a        EQU     $10 + 2     ; MOB 2 Color, Card #, Priority
@@mob3_a        EQU     $10 + 3     ; MOB 3 Color, Card #, Priority
@@mob4_a        EQU     $10 + 4     ; MOB 4 Color, Card #, Priority
@@mob5_a        EQU     $10 + 5     ; MOB 5 Color, Card #, Priority
@@mob6_a        EQU     $10 + 6     ; MOB 6 Color, Card #, Priority
@@mob7_a        EQU     $10 + 7     ; MOB 7 Color, Card #, Priority

@@mob0_c        EQU     $18 + 0     ; MOB 0 Collision detect
@@mob1_c        EQU     $18 + 1     ; MOB 1 Collision detect
@@mob2_c        EQU     $18 + 2     ; MOB 2 Collision detect
@@mob3_c        EQU     $18 + 3     ; MOB 3 Collision detect
@@mob4_c        EQU     $18 + 4     ; MOB 4 Collision detect
@@mob5_c        EQU     $18 + 5     ; MOB 5 Collision detect
@@mob6_c        EQU     $18 + 6     ; MOB 6 Collision detect
@@mob7_c        EQU     $18 + 7     ; MOB 7 Collision detect

                ;;----------------------------------------------------------;;
                ;; Display Mode Controls                                    ;;
                ;;----------------------------------------------------------;;
@@viden         EQU     $20         ; Display Enable (write during vblank)
@@mode          EQU     $21         ; Mode select 

                ;;----------------------------------------------------------;;
                ;; Color Stack and Display Border Color Controls            ;;
                ;;----------------------------------------------------------;;
@@colstack      EQU     $28         ; Base of the color stack
@@cs0           EQU     $28 + 0     ; Color Stack 0
@@cs1           EQU     $28 + 1     ; Color Stack 1
@@cs2           EQU     $28 + 2     ; Color Stack 2
@@cs3           EQU     $28 + 3     ; Color Stack 3
@@bord          EQU     $2C         ; Border color

                ;;----------------------------------------------------------;;
                ;; Display Framing Controls                                 ;;
                ;;----------------------------------------------------------;;
@@h_delay       EQU     $30         ; Horizontal delay (0 - 7 pixels)
@@v_delay       EQU     $31         ; Vertical delay (0 - 7 pixels)
@@edgemask      EQU     $32         ; Edge masking

                ;;----------------------------------------------------------;;
                ;; Useful bitfields/constants/masks for MOBS                ;;
                ;;----------------------------------------------------------;;
@@mobx_xpos     EQU     00000011111111b     ; MOB XREG: X position
@@mobx_intr     EQU     00000100000000b     ; MOB XREG: Interaction
@@mobx_visb     EQU     00001000000000b     ; MOB XREG: Visibility
@@mobx_xsize    EQU     00010000000000b     ; MOB XREG: Horiz 2x magnification

@@moby_ypos     EQU     00000001111111b     ; MOB YREG: Y position
@@moby_yres     EQU     00000010000000b     ; MOB YREG: Y res. (8 or 16 rows)
@@moby_ysize2   EQU     00000100000000b     ; MOB YREG: Vert 2x magnification
@@moby_ysize4   EQU     00001000000000b     ; MOB YREG: Vert 4x magnification
@@moby_ysize8   EQU     00001100000000b     ; MOB YREG: 8x mag (sets 4x & 2x)
@@moby_xflip    EQU     00010000000000b     ; MOB YREG: Flip horizontally
@@moby_yflip    EQU     00100000000000b     ; MOB YREG: Flip vertically

@@moba_fg0      EQU     00000000000000b     ; MOB AREG: Foreground color =  0
@@moba_fg1      EQU     00000000000001b     ; MOB AREG: Foreground color =  1
@@moba_fg2      EQU     00000000000010b     ; MOB AREG: Foreground color =  2
@@moba_fg3      EQU     00000000000011b     ; MOB AREG: Foreground color =  3
@@moba_fg4      EQU     00000000000100b     ; MOB AREG: Foreground color =  4
@@moba_fg5      EQU     00000000000101b     ; MOB AREG: Foreground color =  5
@@moba_fg6      EQU     00000000000110b     ; MOB AREG: Foreground color =  6
@@moba_fg7      EQU     00000000000111b     ; MOB AREG: Foreground color =  7
@@moba_fg8      EQU     01000000000000b     ; MOB AREG: Foreground color =  8
@@moba_fg9      EQU     01000000000001b     ; MOB AREG: Foreground color =  9
@@moba_fgA      EQU     01000000000010b     ; MOB AREG: Foreground color = 10
@@moba_fgB      EQU     01000000000011b     ; MOB AREG: Foreground color = 11
@@moba_fgC      EQU     01000000000100b     ; MOB AREG: Foreground color = 12
@@moba_fgD      EQU     01000000000101b     ; MOB AREG: Foreground color = 13
@@moba_fgE      EQU     01000000000110b     ; MOB AREG: Foreground color = 14
@@moba_fgF      EQU     01000000000111b     ; MOB AREG: Foreground color = 15
@@moba_card     EQU     00000111111000b     ; MOB AREG: Card # mask
@@moba_gram     EQU     00100000000000b     ; MOB AREG: GRAM card select
@@moba_prio     EQU     10000000000000b     ; MOB AREG: Priority 
                                            ;           (above/below bkgnd)

@@mobc_coll0    EQU     00000000000001b     ; MOB CREG: Collision w/ MOB #0
@@mobc_coll1    EQU     00000000000010b     ; MOB CREG: Collision w/ MOB #1
@@mobc_coll2    EQU     00000000000100b     ; MOB CREG: Collision w/ MOB #2
@@mobc_coll3    EQU     00000000001000b     ; MOB CREG: Collision w/ MOB #3
@@mobc_coll4    EQU     00000000010000b     ; MOB CREG: Collision w/ MOB #4
@@mobc_coll5    EQU     00000000100000b     ; MOB CREG: Collision w/ MOB #5
@@mobc_coll6    EQU     00000001000000b     ; MOB CREG: Collision w/ MOB #6
@@mobc_coll7    EQU     00000010000000b     ; MOB CREG: Collision w/ MOB #7
@@mobc_collmob  EQU     00000011111111b     ; MOB CREG: Coll w/ any MOB (mask)
@@mobc_collbg   EQU     00000100000000b     ; MOB CREG; Coll w/ background
@@mobc_collbord EQU     00001000000000b     ; MOB CREG; Coll w/ background

                ;;----------------------------------------------------------;;
                ;; Useful bits for Edge Masking.                            ;;
                ;;----------------------------------------------------------;;
@@mask_left     EQU     00000000000001b     ; Edge mask: Mask leftmost 8 pixels
@@mask_top      EQU     00000000000010b     ; Edge mask: Mask topmost 8 pixels

;;--------------------------------------------------------------------------;;
;; Useful bits for Color Stack Mode                                         ;;
;;                                                                          ;;
;; Display format word layout in Color Stack Mode:                          ;;
;;   13   12    11   10    9    8    7    6    5    4    3    2    1    0   ;;
;; +----+-----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;; |Adv.|FG   |GRAM|           GRAM/GROM Card #            |   FG Color   | ;;
;; |col |Bit3/|GROM|    (0-255 for GROM, 0-63 for GRAM)    |   Bits 0-2   | ;;
;; |stck|----------|                                       |              | ;;
;; |    |col. sqr. |                                       |              | ;;
;; |    |mode slct.|                                       |              | ;;
;; +----+-----+----+----+----+----+----+----+----+----+----+----+----+----+ ;;
;;                                                                          ;;
;; Color Stack Notes:                                                       ;;
;;  -- If GRAM card, two MSBs of Card # are ignored, and may be used by     ;;
;;     the program to store other information.                              ;;
;;                                                                          ;;
;;  -- Bit 12 is set and Bit 11 is cleared, this word is treated as a       ;;
;;     colored-square-mode display word, in the format below.               ;;
;;                                                                          ;;
;;  -- The color stack is reset to offset 0 at the start of the display.    ;;
;;     Setting the 'advance' bit advances the color stack by one for that   ;;
;;     card and all cards after it in normal left-to-right scanning order.  ;;
;;                                                                          ;;
;;  -- Bits 14 and 15 of the display format word are ignored and may be     ;;
;;     used by the program to store status bits, etc.                       ;;
;;                                                                          ;;
;; Display format word layout in Colored Squares Mode:                      ;;
;;                                                                          ;;
;;   13   12   11   10    9    8    7    6    5    4    3    2    1    0    ;;
;; +----+----+----+----+----+----+----+----+----+----+----+----+----+----+  ;;
;; |Pix3|  1 |  0 | Pix. 3  | Pix. 2 color | Pix. 1 color | Pix. 0 color |  ;;
;; |Bit2|    |    | bit 0-1 |    (0-7)     |    (0-7)     |    (0-7)     |  ;;
;; +----+----+----+----+----+----+----+----+----+----+----+----+----+----+  ;;
;;                                                                          ;;
;; Pixels are display like so:  +-----+-----+                               ;;
;;                              |Pixel|Pixel|                               ;;
;;                              |  0  |  1  |                               ;;
;;                              +-----+-----+                               ;;
;;                              |Pixel|Pixel|                               ;;
;;                              |  2  |  3  |                               ;;
;;                              +-----+-----+                               ;;
;;                                                                          ;;
;; Colored Square Mode Notes:                                               ;;
;;                                                                          ;;
;;  -- It is not possible to advance the color stack with a card that is    ;;
;;     displayed in color-stack mode.                                       ;;
;;                                                                          ;;
;;  -- Color 7 in colored squares mode instead shows the current color on   ;;
;;     the color stack.                                                     ;;
;;                                                                          ;;
;;  -- Colors 0 through 6 in a colored-square card will interact with       ;;
;;     MOBs, but color 7 will not.                                          ;;
;;                                                                          ;;
;;  -- Bits 14 and 15 of the display format word are ignored and may be     ;;
;;     used by the program to store status bits, etc.                       ;;
;;--------------------------------------------------------------------------;;
@@cs_fg0        EQU     00000000000000b     ; foreground ==  0
@@cs_fg1        EQU     00000000000001b     ; foreground ==  1
@@cs_fg2        EQU     00000000000010b     ; foreground ==  2
@@cs_fg3        EQU     00000000000011b     ; foreground ==  3
@@cs_fg4        EQU     00000000000100b     ; foreground ==  4
@@cs_fg5        EQU     00000000000101b     ; foreground ==  5
@@cs_fg6        EQU     00000000000110b     ; foreground ==  6
@@cs_fg7        EQU     00000000000111b     ; foreground ==  7
@@cs_fg8        EQU     01000000000000b     ; foreground ==  8
@@cs_fg9        EQU     01000000000001b     ; foreground ==  9
@@cs_fgA        EQU     01000000000010b     ; foreground == 10
@@cs_fgB        EQU     01000000000011b     ; foreground == 11
@@cs_fgC        EQU     01000000000100b     ; foreground == 12
@@cs_fgD        EQU     01000000000101b     ; foreground == 13
@@cs_fgE        EQU     01000000000110b     ; foreground == 14
@@cs_fgF        EQU     01000000000111b     ; foreground == 15
@@cs_card       EQU     00011111111000b     ; Card # mask (GRAM/GROM index #)
@@cs_gram       EQU     00100000000000b     ; Selects cards from GRAM if set
@@cs_advance    EQU     10000000000000b     ; Advances color stack.
@@cs_colsqr     EQU     01000000000000b     ; Selects 'colored square mode'

@@cs_pix0       EQU     00000000000111b     ; ColSqr Pixel 0 mask
@@cs_pix1       EQU     00000000111000b     ; ColSqr Pixel 1 mask
@@cs_pix2       EQU     00000111000000b     ; ColSqr Pixel 2 mask
@@cs_pix3       EQU     10011000000000b     ; ColSqr Pixel 3 mask

@@cs_pix0_0     EQU     00000000000000b     ; ColSqr Pixel 0, color == 0
@@cs_pix0_1     EQU     00000000000001b     ; ColSqr Pixel 0, color == 1
@@cs_pix0_2     EQU     00000000000010b     ; ColSqr Pixel 0, color == 2
@@cs_pix0_3     EQU     00000000000011b     ; ColSqr Pixel 0, color == 3
@@cs_pix0_4     EQU     00000000000100b     ; ColSqr Pixel 0, color == 4
@@cs_pix0_5     EQU     00000000000101b     ; ColSqr Pixel 0, color == 5
@@cs_pix0_6     EQU     00000000000110b     ; ColSqr Pixel 0, color == 6
@@cs_pix0_7     EQU     00000000000111b     ; ColSqr Pixel 0, color == 7

@@cs_pix1_0     EQU     00000000000000b     ; ColSqr Pixel 1, color == 0
@@cs_pix1_1     EQU     00000000001000b     ; ColSqr Pixel 1, color == 1
@@cs_pix1_2     EQU     00000000010000b     ; ColSqr Pixel 1, color == 2
@@cs_pix1_3     EQU     00000000011000b     ; ColSqr Pixel 1, color == 3
@@cs_pix1_4     EQU     00000000100000b     ; ColSqr Pixel 1, color == 4
@@cs_pix1_5     EQU     00000000101000b     ; ColSqr Pixel 1, color == 5
@@cs_pix1_6     EQU     00000000110000b     ; ColSqr Pixel 1, color == 6
@@cs_pix1_7     EQU     00000000111000b     ; ColSqr Pixel 1, color == 7

@@cs_pix2_0     EQU     00000000000000b     ; ColSqr Pixel 2, color == 0
@@cs_pix2_1     EQU     00000001000000b     ; ColSqr Pixel 2, color == 1
@@cs_pix2_2     EQU     00000010000000b     ; ColSqr Pixel 2, color == 2
@@cs_pix2_3     EQU     00000011000000b     ; ColSqr Pixel 2, color == 3
@@cs_pix2_4     EQU     00000100000000b     ; ColSqr Pixel 2, color == 4
@@cs_pix2_5     EQU     00000101000000b     ; ColSqr Pixel 2, color == 5
@@cs_pix2_6     EQU     00000110000000b     ; ColSqr Pixel 2, color == 6
@@cs_pix2_7     EQU     00000111000000b     ; ColSqr Pixel 2, color == 7

@@cs_pix3_0     EQU     00000000000000b     ; ColSqr Pixel 3, color == 0
@@cs_pix3_1     EQU     00001000000000b     ; ColSqr Pixel 3, color == 1
@@cs_pix3_2     EQU     00010000000000b     ; ColSqr Pixel 3, color == 2
@@cs_pix3_3     EQU     00011000000000b     ; ColSqr Pixel 3, color == 3
@@cs_pix3_4     EQU     10000000000000b     ; ColSqr Pixel 3, color == 4
@@cs_pix3_5     EQU     10001000000000b     ; ColSqr Pixel 3, color == 5
@@cs_pix3_6     EQU     10010000000000b     ; ColSqr Pixel 3, color == 6
@@cs_pix3_7     EQU     10011000000000b     ; ColSqr Pixel 3, color == 7

;;--------------------------------------------------------------------------;;
;; Useful bits for Foreground/Background Mode                               ;;
;;                                                                          ;;
;; Display format word layout in Color Stack Mode:                          ;;
;;   13   12   11   10    9    8    7    6    5    4    3    2    1    0    ;;
;; +----+----+----+----+----+----+----+----+----+----+----+----+----+----+  ;;
;; |BG  |BG  |GRAM|BG  |BG  |      GRAM/GROM Card #       |   FG Color   |  ;;
;; |Bit2|Bit3|GROM|Bit1|Bit0|          (0 - 63)           |   Bits 0-2   |  ;;
;; +----+----+----+----+----+----+----+----+----+----+----+----+----+----+  ;;
;;--------------------------------------------------------------------------;;

@@fb_fg0        EQU     00000000000000b     ; foreground ==  0
@@fb_fg1        EQU     00000000000001b     ; foreground ==  1
@@fb_fg2        EQU     00000000000010b     ; foreground ==  2
@@fb_fg3        EQU     00000000000011b     ; foreground ==  3
@@fb_fg4        EQU     00000000000100b     ; foreground ==  4
@@fb_fg5        EQU     00000000000101b     ; foreground ==  5
@@fb_fg6        EQU     00000000000110b     ; foreground ==  6
@@fb_fg7        EQU     00000000000111b     ; foreground ==  7

@@fb_bg0        EQU     00000000000000b     ; background ==  0
@@fb_bg1        EQU     00001000000000b     ; background ==  1
@@fb_bg2        EQU     00010000000000b     ; background ==  2
@@fb_bg3        EQU     00011000000000b     ; background ==  3
@@fb_bg4        EQU     10000000000000b     ; background ==  4
@@fb_bg5        EQU     10001000000000b     ; background ==  5
@@fb_bg6        EQU     10010000000000b     ; background ==  6
@@fb_bg7        EQU     10011000000000b     ; background ==  7
@@fb_bg8        EQU     01000000000000b     ; background ==  8
@@fb_bg9        EQU     01001000000000b     ; background ==  9
@@fb_bgA        EQU     01010000000000b     ; background == 10
@@fb_bgB        EQU     01011000000000b     ; background == 11
@@fb_bgC        EQU     11000000000000b     ; background == 12
@@fb_bgD        EQU     11001000000000b     ; background == 13
@@fb_bgE        EQU     11010000000000b     ; background == 14
@@fb_bgF        EQU     11011000000000b     ; background == 15

@@fb_card       EQU     00000111111000b     ; Card # mask (GRAM/GROM index #)
@@fb_gram       EQU     00100000000000b     ; Selects cards from GRAM if set

                ENDS

;;==========================================================================;;
;;  STIC COLOR-NAMES                                                        ;;
;;                                                                          ;;
;;  These are easier to remember short mnemonics for the STIC's colors.     ;;
;;  You can use the C_xxx colors for color-stack registers, border colors   ;;
;;  and so on where the color is stored in a contiguous field.  Use the     ;;
;;  X_xxx color names for the foreground color on display cards in color-   ;;
;;  stack mode, or for MOB attribute words.                                 ;;
;;                                                                          ;;
;;  Note that for the primary color set, C_xxx and X_xxx are identical.     ;;
;;==========================================================================;;

C_BLK   EQU     $0              ; Black
C_BLU   EQU     $1              ; Blue
C_RED   EQU     $2              ; Red
C_TAN   EQU     $3              ; Tan
C_DGR   EQU     $4              ; Dark Green
C_GRN   EQU     $5              ; Green
C_YEL   EQU     $6              ; Yellow
C_WHT   EQU     $7              ; White
C_GRY   EQU     $8              ; Grey
C_CYN   EQU     $9              ; Cyan
C_ORG   EQU     $A              ; Orange
C_BRN   EQU     $B              ; Brown
C_PNK   EQU     $C              ; Pink
C_LBL   EQU     $D              ; Light Blue
C_YGR   EQU     $E              ; Yellow-Green
C_PUR   EQU     $F              ; Purple

X_BLK   EQU     $0              ; Black
X_BLU   EQU     $1              ; Blue
X_RED   EQU     $2              ; Red
X_TAN   EQU     $3              ; Tan
X_DGR   EQU     $4              ; Dark Green
X_GRN   EQU     $5              ; Green
X_YEL   EQU     $6              ; Yellow
X_WHT   EQU     $7              ; White
X_GRY   EQU     $1000           ; Grey
X_CYN   EQU     $1001           ; Cyan
X_ORG   EQU     $1002           ; Orange
X_BRN   EQU     $1003           ; Brown
X_PNK   EQU     $1004           ; Pink
X_LBL   EQU     $1005           ; Light Blue
X_YGR   EQU     $1006           ; Yellow-Green
X_PUR   EQU     $1007           ; Purple

;; ======================================================================== ;;
;;  End of File:  gimini.asm                                                ;;
;; ======================================================================== ;;