[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

#ifndef GRAPHICS_GFXBASE_H
#define GRAPHICS_GFXBASE_H
/*
**      $VER: gfxbase.h 39.21 (21.4.1993)
**      Includes Release 44.1
**
**      graphics base definitions
**
**      (C) Copyright 1985-1999 Amiga, Inc.
**          All Rights Reserved
*/

#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif
#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif
#ifndef EXEC_INTERRUPTS_H
#include <exec/interrupts.h>
#endif
#ifndef GRAPHICS_MONITOR_H
#include <graphics/monitor.h>
#endif

struct GfxBase
{
        struct  Library  LibNode;
        struct  View *ActiView;
        struct  copinit *copinit;       /* ptr to copper start up list */
        LONG    *cia;                   /* for 8520 resource use */
        LONG    *blitter;               /* for future blitter resource use */
        UWORD   *LOFlist;
        UWORD   *SHFlist;
        struct  bltnode *blthd,*blttl;
        struct  bltnode *bsblthd,*bsblttl;
        struct  Interrupt vbsrv,timsrv,bltsrv;
        struct  List     TextFonts;
        struct  TextFont *DefaultFont;
        UWORD   Modes;                  /* copy of current first bplcon0 */
        BYTE    VBlank;
        BYTE    Debug;
        WORD    BeamSync;
        WORD    system_bplcon0;         /* it is ored into each bplcon0 for display */
        UBYTE   SpriteReserved;
        UBYTE   bytereserved;
        UWORD   Flags;
        WORD    BlitLock;
        WORD    BlitNest;

        struct  List BlitWaitQ;
        struct  Task *BlitOwner;
        struct  List TOF_WaitQ;
        UWORD   DisplayFlags;           /* NTSC PAL GENLOC etc*/
                                        /* flags initialized at power on */
        struct  SimpleSprite **SimpleSprites;
        UWORD   MaxDisplayRow;          /* hardware stuff, do not use */
        UWORD   MaxDisplayColumn;       /* hardware stuff, do not use */
        UWORD   NormalDisplayRows;
        UWORD   NormalDisplayColumns;
        /* the following are for standard non interlace, 1/2 wb width */
        UWORD   NormalDPMX;             /* Dots per meter on display */
        UWORD   NormalDPMY;             /* Dots per meter on display */
        struct  SignalSemaphore *LastChanceMemory;
        UWORD   *LCMptr;
        UWORD   MicrosPerLine;          /* 256 time usec/line */
        UWORD   MinDisplayColumn;
        UBYTE   ChipRevBits0;
        UBYTE   MemType;
        UBYTE   crb_reserved[4];
        UWORD   monitor_id;
        ULONG   hedley[8];
        ULONG   hedley_sprites[8];      /* sprite ptrs for intuition mouse */
        ULONG   hedley_sprites1[8];     /* sprite ptrs for intuition mouse */
        WORD    hedley_count;
        UWORD   hedley_flags;
        WORD    hedley_tmp;
        LONG    *hash_table;
        UWORD   current_tot_rows;
        UWORD   current_tot_cclks;
        UBYTE   hedley_hint;
        UBYTE   hedley_hint2;
        ULONG   nreserved[4];
        LONG    *a2024_sync_raster;
        UWORD   control_delta_pal;
        UWORD   control_delta_ntsc;
        struct  MonitorSpec *current_monitor;
        struct  List MonitorList;
        struct  MonitorSpec *default_monitor;
        struct  SignalSemaphore *MonitorListSemaphore;
        VOID    *DisplayInfoDataBase;
        UWORD   TopLine;
        struct  SignalSemaphore *ActiViewCprSemaphore;
        ULONG   *UtilBase;              /* for hook and tag utilities. had to change because of name clash      */
        ULONG   *ExecBase;              /* to link with rom.lib */
        UBYTE   *bwshifts;
        UWORD   *StrtFetchMasks;
        UWORD   *StopFetchMasks;
        UWORD   *Overrun;
        WORD    *RealStops;
        UWORD   SpriteWidth;    /* current width (in words) of sprites */
        UWORD   SpriteFMode;            /* current sprite fmode bits    */
        BYTE    SoftSprites;    /* bit mask of size change knowledgeable sprites */
        BYTE    arraywidth;
        UWORD   DefaultSpriteWidth;     /* what width intuition wants */
        BYTE    SprMoveDisable;
        UBYTE   WantChips;
        UBYTE   BoardMemType;
        UBYTE   Bugs;
        ULONG   *gb_LayersBase;
        ULONG   ColorMask;
        APTR    IVector;
        APTR    IData;
        ULONG   SpecialCounter;         /* special for double buffering */
        APTR    DBList;
        UWORD   MonitorFlags;
        UBYTE   ScanDoubledSprites;
        UBYTE   BP3Bits;
        struct  AnalogSignalInterval MonitorVBlank;
        struct  MonitorSpec *natural_monitor;
        APTR    ProgData;
        UBYTE   ExtSprites;
        UBYTE   pad3;
        UWORD   GfxFlags;
        ULONG   VBCounter;
        struct  SignalSemaphore *HashTableSemaphore;
        ULONG   *HWEmul[9];
};

#define ChunkyToPlanarPtr HWEmul[0]






/* Values for GfxBase->DisplayFlags */
#define NTSC            1
#define GENLOC          2
#define PAL             4
#define TODA_SAFE       8
#define REALLY_PAL      16      /* what is actual crystal frequency
                                 (as opposed to what bootmenu set the agnus to)?
                                 (V39) */
#define LPEN_SWAP_FRAMES        32
                                /* LightPen software could set this bit if the
                                 * "lpen-with-interlace" fix put in for V39
                                 * does not work. This is true of a number of
                                 * Agnus chips.
                                 * (V40).
                                 */

#define BLITMSG_FAULT   4

/* bits defs for ChipRevBits */
#define GFXB_BIG_BLITS  0
#define GFXB_HR_AGNUS   0
#define GFXB_HR_DENISE  1
#define GFXB_AA_ALICE   2
#define GFXB_AA_LISA    3
#define GFXB_AA_MLISA   4       /* internal use only. */

#define GFXF_BIG_BLITS  1
#define GFXF_HR_AGNUS   1
#define GFXF_HR_DENISE  2
#define GFXF_AA_ALICE   4
#define GFXF_AA_LISA    8
#define GFXF_AA_MLISA   16      /* internal use only */

/* Pass ONE of these to SetChipRev() */
#define SETCHIPREV_A    GFXF_HR_AGNUS
#define SETCHIPREV_ECS  (GFXF_HR_AGNUS | GFXF_HR_DENISE)
#define SETCHIPREV_AA   (GFXF_AA_ALICE | GFXF_AA_LISA | SETCHIPREV_ECS)
#define SETCHIPREV_BEST 0xffffffff

/* memory type */
#define BUS_16          0
#define NML_CAS         0
#define BUS_32          1
#define DBL_CAS         2
#define BANDWIDTH_1X    (BUS_16 | NML_CAS)
#define BANDWIDTH_2XNML BUS_32
#define BANDWIDTH_2XDBL DBL_CAS
#define BANDWIDTH_4X    (BUS_32 | DBL_CAS)

/* GfxFlags (private) */
#define NEW_DATABASE    1

#define GRAPHICSNAME    "graphics.library"

#endif  /* GRAPHICS_GFXBASE_H */