|
@@ -0,0 +1,2844 @@
|
|
|
+{
|
|
|
+ $Id$
|
|
|
+ This file is part of the Free Pascal run time library.
|
|
|
+ Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
|
|
|
+
|
|
|
+ graphics.library interface unit for MorphOS/PowerPC
|
|
|
+
|
|
|
+ Based on work of Nils Sjoholm member of the Amiga RTL
|
|
|
+ development team.
|
|
|
+
|
|
|
+ MorphOS port was done on a free Pegasos II/G4 machine
|
|
|
+ provided by Genesi S.a.r.l. <www.genesi.lu>
|
|
|
+
|
|
|
+ See the file COPYING.FPC, included in this distribution,
|
|
|
+ for details about the copyright.
|
|
|
+
|
|
|
+ This program is distributed in the hope that it will be useful,
|
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
+
|
|
|
+ **********************************************************************}
|
|
|
+{$PACKRECORDS 2}
|
|
|
+
|
|
|
+unit graphics;
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+uses exec, hardware, utility;
|
|
|
+
|
|
|
+const
|
|
|
+ BITSET = $8000;
|
|
|
+ BITCLR = 0;
|
|
|
+
|
|
|
+type
|
|
|
+ pRectangle = ^tRectangle;
|
|
|
+ tRectangle = record
|
|
|
+ MinX,MinY : Word;
|
|
|
+ MaxX,MaxY : Word;
|
|
|
+ end;
|
|
|
+
|
|
|
+ pRect32 = ^tRect32;
|
|
|
+ tRect32 = record
|
|
|
+ MinX,MinY : Longint;
|
|
|
+ MaxX,MaxY : Longint;
|
|
|
+ end;
|
|
|
+
|
|
|
+ pPoint = ^tPoint;
|
|
|
+ tPoint = record
|
|
|
+ x,y : Word;
|
|
|
+ end;
|
|
|
+
|
|
|
+ PLANEPTR = Pointer;
|
|
|
+
|
|
|
+ pBitMap = ^tBitMap;
|
|
|
+ tBitMap = record
|
|
|
+ BytesPerRow : Word;
|
|
|
+ Rows : Word;
|
|
|
+ Flags : Byte;
|
|
|
+ Depth : Byte;
|
|
|
+ pad : Word;
|
|
|
+ Planes : Array [0..7] of PLANEPTR;
|
|
|
+ end;
|
|
|
+{* flags for AllocBitMap, etc. *}
|
|
|
+const
|
|
|
+ BMB_CLEAR = 0;
|
|
|
+ BMB_DISPLAYABLE = 1;
|
|
|
+ BMB_INTERLEAVED = 2;
|
|
|
+ BMB_STANDARD = 3;
|
|
|
+ BMB_MINPLANES = 4;
|
|
|
+
|
|
|
+ BMF_CLEAR = (1 shl BMB_CLEAR);
|
|
|
+ BMF_DISPLAYABLE = (1 shl BMB_DISPLAYABLE);
|
|
|
+ BMF_INTERLEAVED = (1 shl BMB_INTERLEAVED);
|
|
|
+ BMF_STANDARD = (1 shl BMB_STANDARD);
|
|
|
+ BMF_MINPLANES = (1 shl BMB_MINPLANES);
|
|
|
+
|
|
|
+{* the following are for GetBitMapAttr() *}
|
|
|
+ BMA_HEIGHT = 0;
|
|
|
+ BMA_DEPTH = 4;
|
|
|
+ BMA_WIDTH = 8;
|
|
|
+ BMA_FLAGS = 12;
|
|
|
+
|
|
|
+
|
|
|
+{ structures used by and constructed by windowlib.a }
|
|
|
+{ understood by rom software }
|
|
|
+type
|
|
|
+ pClipRect = ^tClipRect;
|
|
|
+ tClipRect = record
|
|
|
+ Next : pClipRect; { roms used to find next ClipRect }
|
|
|
+ prev : pClipRect; { ignored by roms, used by windowlib }
|
|
|
+ lobs : Pointer; { ignored by roms, used by windowlib (LayerPtr)}
|
|
|
+ BitMap : pBitMap;
|
|
|
+ bounds : tRectangle; { set up by windowlib, used by roms }
|
|
|
+ _p1,
|
|
|
+ _p2 : Pointer; { system reserved }
|
|
|
+ reserved : Longint; { system use }
|
|
|
+ Flags : Longint; { only exists in layer allocation }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pLayer = ^tLayer;
|
|
|
+ tLayer = record
|
|
|
+ front,
|
|
|
+ back : pLayer; { ignored by roms }
|
|
|
+ ClipRect : pClipRect; { read by roms to find first cliprect }
|
|
|
+ rp : Pointer; { (RastPortPtr) ignored by roms, I hope }
|
|
|
+ bounds : tRectangle; { ignored by roms }
|
|
|
+ reserved : Array [0..3] of Byte;
|
|
|
+ priority : Word; { system use only }
|
|
|
+ Flags : Word; { obscured ?, Virtual BitMap? }
|
|
|
+ SuperBitMap : pBitMap;
|
|
|
+ SuperClipRect : pClipRect; { super bitmap cliprects if
|
|
|
+ VBitMap != 0}
|
|
|
+ { else damage cliprect list for refresh }
|
|
|
+ Window : Pointer; { reserved for user interface use }
|
|
|
+ Scroll_X,
|
|
|
+ Scroll_Y : Word;
|
|
|
+ cr,
|
|
|
+ cr2,
|
|
|
+ crnew : pClipRect; { used by dedice }
|
|
|
+ SuperSaveClipRects : pClipRect; { preallocated cr's }
|
|
|
+ cliprects : pClipRect; { system use during refresh }
|
|
|
+ LayerInfo : Pointer; { points to head of the list }
|
|
|
+ Lock : tSignalSemaphore;
|
|
|
+ BackFill : pHook;
|
|
|
+ reserved1 : Cardinal;
|
|
|
+ ClipRegion : Pointer;
|
|
|
+ saveClipRects : Pointer; { used to back out when in trouble}
|
|
|
+ Width,
|
|
|
+ Height : smallint;
|
|
|
+ reserved2 : Array [0..17] of Byte;
|
|
|
+ { this must stay here }
|
|
|
+ DamageList : Pointer; { list of rectangles to refresh
|
|
|
+ through }
|
|
|
+ end;
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+{ internal cliprect flags }
|
|
|
+
|
|
|
+ CR_NEEDS_NO_CONCEALED_RASTERS = 1;
|
|
|
+ CR_NEEDS_NO_LAYERBLIT_DAMAGE = 2;
|
|
|
+
|
|
|
+
|
|
|
+{ defines for code values for getcode }
|
|
|
+
|
|
|
+ ISLESSX = 1;
|
|
|
+ ISLESSY = 2;
|
|
|
+ ISGRTRX = 4;
|
|
|
+ ISGRTRY = 8;
|
|
|
+
|
|
|
+
|
|
|
+{------ Font Styles ------------------------------------------------}
|
|
|
+
|
|
|
+ FS_NORMAL = 0; { normal text (no style bits set) }
|
|
|
+ FSB_EXTENDED = 3; { extended face (wider than normal) }
|
|
|
+ FSF_EXTENDED = 8;
|
|
|
+ FSB_ITALIC = 2; { italic (slanted 1:2 right) }
|
|
|
+ FSF_ITALIC = 4;
|
|
|
+ FSB_BOLD = 1; { bold face text (ORed w/ shifted) }
|
|
|
+ FSF_BOLD = 2;
|
|
|
+ FSB_UNDERLINED = 0; { underlined (under baseline) }
|
|
|
+ FSF_UNDERLINED = 1;
|
|
|
+
|
|
|
+ FSB_COLORFONT = 6; { this uses ColorTextFont structure }
|
|
|
+ FSF_COLORFONT = $40;
|
|
|
+ FSB_TAGGED = 7; { the TextAttr is really an TTextAttr, }
|
|
|
+ FSF_TAGGED = $80;
|
|
|
+
|
|
|
+
|
|
|
+{------ Font Flags -------------------------------------------------}
|
|
|
+ FPB_ROMFONT = 0; { font is in rom }
|
|
|
+ FPF_ROMFONT = 1;
|
|
|
+ FPB_DISKFONT = 1; { font is from diskfont.library }
|
|
|
+ FPF_DISKFONT = 2;
|
|
|
+ FPB_REVPATH = 2; { designed path is reversed (e.g. left) }
|
|
|
+ FPF_REVPATH = 4;
|
|
|
+ FPB_TALLDOT = 3; { designed for hires non-interlaced }
|
|
|
+ FPF_TALLDOT = 8;
|
|
|
+ FPB_WIDEDOT = 4; { designed for lores interlaced }
|
|
|
+ FPF_WIDEDOT = 16;
|
|
|
+ FPB_PROPORTIONAL = 5; { character sizes can vary from nominal }
|
|
|
+ FPF_PROPORTIONAL = 32;
|
|
|
+ FPB_DESIGNED = 6; { size is "designed", not constructed }
|
|
|
+ FPF_DESIGNED = 64;
|
|
|
+ FPB_REMOVED = 7; { the font has been removed }
|
|
|
+ FPF_REMOVED = 128;
|
|
|
+
|
|
|
+{***** TextAttr node, matches text attributes in RastPort *********}
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ pTextAttr = ^tTextAttr;
|
|
|
+ tTextAttr = record
|
|
|
+ ta_Name : PChar; { name of the font }
|
|
|
+ ta_YSize : Word; { height of the font }
|
|
|
+ ta_Style : Byte; { intrinsic font style }
|
|
|
+ ta_Flags : Byte; { font preferences and flags }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pTTextAttr = ^tTTextAttr;
|
|
|
+ tTTextAttr = record
|
|
|
+ tta_Name : PChar; { name of the font }
|
|
|
+ tta_YSize : Word; { height of the font }
|
|
|
+ tta_Style : Byte; { intrinsic font style }
|
|
|
+ tta_Flags : Byte; { font preferences AND flags }
|
|
|
+ tta_Tags : pTagItem; { extended attributes }
|
|
|
+ end;
|
|
|
+
|
|
|
+{***** Text Tags **************************************************}
|
|
|
+CONST
|
|
|
+ TA_DeviceDPI = (1+TAG_USER); { Tag value is Point union: }
|
|
|
+ { Hi Longint XDPI, Lo Longint YDPI }
|
|
|
+
|
|
|
+ MAXFONTMATCHWEIGHT = 32767; { perfect match from WeighTAMatch }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+{***** TextFonts node *********************************************}
|
|
|
+Type
|
|
|
+
|
|
|
+ pTextFont = ^tTextFont;
|
|
|
+ tTextFont = record
|
|
|
+ tf_Message : tMessage; { reply message for font removal }
|
|
|
+ { font name in LN \ used in this }
|
|
|
+ tf_YSize : Word; { font height | order to best }
|
|
|
+ tf_Style : Byte; { font style | match a font }
|
|
|
+ tf_Flags : Byte; { preferences and flags / request. }
|
|
|
+ tf_XSize : Word; { nominal font width }
|
|
|
+ tf_Baseline : Word; { distance from the top of char to baseline }
|
|
|
+ tf_BoldSmear : Word; { smear to affect a bold enhancement }
|
|
|
+
|
|
|
+ tf_Accessors : Word; { access count }
|
|
|
+
|
|
|
+ tf_LoChar : Byte; { the first character described here }
|
|
|
+ tf_HiChar : Byte; { the last character described here }
|
|
|
+ tf_CharData : Pointer; { the bit character data }
|
|
|
+
|
|
|
+ tf_Modulo : Word; { the row modulo for the strike font data }
|
|
|
+ tf_CharLoc : Pointer; { ptr to location data for the strike font }
|
|
|
+ { 2 words: bit offset then size }
|
|
|
+ tf_CharSpace : Pointer; { ptr to words of proportional spacing data }
|
|
|
+ tf_CharKern : Pointer; { ptr to words of kerning data }
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+{----- tfe_Flags0 (partial definition) ----------------------------}
|
|
|
+CONST
|
|
|
+ TE0B_NOREMFONT = 0; { disallow RemFont for this font }
|
|
|
+ TE0F_NOREMFONT = $01;
|
|
|
+
|
|
|
+Type
|
|
|
+
|
|
|
+ pTextFontExtension = ^tTextFontExtension;
|
|
|
+ tTextFontExtension = record { this structure is read-only }
|
|
|
+ tfe_MatchWord : Word; { a magic cookie for the extension }
|
|
|
+ tfe_Flags0 : Byte; { (system private flags) }
|
|
|
+ tfe_Flags1 : Byte; { (system private flags) }
|
|
|
+ tfe_BackPtr : pTextFont; { validation of compilation }
|
|
|
+ tfe_OrigReplyPort : pMsgPort; { original value in tf_Extension }
|
|
|
+ tfe_Tags : pTagItem; { Text Tags for the font }
|
|
|
+ tfe_OFontPatchS, { (system private use) }
|
|
|
+ tfe_OFontPatchK : Pointer; { (system private use) }
|
|
|
+ { this space is reserved for future expansion }
|
|
|
+ END;
|
|
|
+
|
|
|
+{***** ColorTextFont node *****************************************}
|
|
|
+{----- ctf_Flags --------------------------------------------------}
|
|
|
+CONST
|
|
|
+ CT_COLORMASK = $000F; { mask to get to following color styles }
|
|
|
+ CT_COLORFONT = $0001; { color map contains designer's colors }
|
|
|
+ CT_GREYFONT = $0002; { color map describes even-stepped }
|
|
|
+ { brightnesses from low to high }
|
|
|
+ CT_ANTIALIAS = $0004; { zero background thru fully saturated char }
|
|
|
+
|
|
|
+ CTB_MAPCOLOR = 0; { map ctf_FgColor to the rp_FgPen IF it's }
|
|
|
+ CTF_MAPCOLOR = $0001; { is a valid color within ctf_Low..ctf_High }
|
|
|
+
|
|
|
+{----- ColorFontColors --------------------------------------------}
|
|
|
+Type
|
|
|
+ pColorFontColors = ^tColorFontColors;
|
|
|
+ tColorFontColors = record
|
|
|
+ cfc_Reserved, { *must* be zero }
|
|
|
+ cfc_Count : Word; { number of entries in cfc_ColorTable }
|
|
|
+ cfc_ColorTable : Pointer; { 4 bit per component color map packed xRGB }
|
|
|
+ END;
|
|
|
+
|
|
|
+{----- ColorTextFont ----------------------------------------------}
|
|
|
+
|
|
|
+ pColorTextFont = ^tColorTextFont;
|
|
|
+ tColorTextFont = record
|
|
|
+ ctf_TF : tTextFont;
|
|
|
+ ctf_Flags : Word; { extended flags }
|
|
|
+ ctf_Depth, { number of bit planes }
|
|
|
+ ctf_FgColor, { color that is remapped to FgPen }
|
|
|
+ ctf_Low, { lowest color represented here }
|
|
|
+ ctf_High, { highest color represented here }
|
|
|
+ ctf_PlanePick, { PlanePick ala Images }
|
|
|
+ ctf_PlaneOnOff : Byte; { PlaneOnOff ala Images }
|
|
|
+ ctf_ColorFontColors : pColorFontColors; { colors for font }
|
|
|
+ ctf_CharData : Array[0..7] of Pointer; {pointers to bit planes ala tf_CharData }
|
|
|
+ END;
|
|
|
+
|
|
|
+{***** TextExtent node ********************************************}
|
|
|
+
|
|
|
+ pTextExtent = ^tTextExtent;
|
|
|
+ tTextExtent = record
|
|
|
+ te_Width, { same as TextLength }
|
|
|
+ te_Height : Word; { same as tf_YSize }
|
|
|
+ te_Extent : tRectangle; { relative to CP }
|
|
|
+ END;
|
|
|
+
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+ COPPER_MOVE = 0; { pseude opcode for move #XXXX,dir }
|
|
|
+ COPPER_WAIT = 1; { pseudo opcode for wait y,x }
|
|
|
+ CPRNXTBUF = 2; { continue processing with next buffer }
|
|
|
+ CPR_NT_LOF = $8000; { copper instruction only for Longint frames }
|
|
|
+ CPR_NT_SHT = $4000; { copper instruction only for long frames }
|
|
|
+ CPR_NT_SYS = $2000; { copper user instruction only }
|
|
|
+type
|
|
|
+
|
|
|
+{ Note: The combination VWaitAddr and HWaitAddr replace a three way
|
|
|
+ union in C. The three possibilities are:
|
|
|
+
|
|
|
+ nxtList : CopListPtr; or
|
|
|
+
|
|
|
+ VWaitPos : Longint;
|
|
|
+ HWaitPos : Longint; or
|
|
|
+
|
|
|
+ DestAddr : Longint;
|
|
|
+ DestData : Longint;
|
|
|
+}
|
|
|
+
|
|
|
+ pCopIns = ^tCopIns;
|
|
|
+ tCopIns = record
|
|
|
+ OpCode : smallint; { 0 = move, 1 = wait }
|
|
|
+ VWaitAddr : smallint; { vertical or horizontal wait position }
|
|
|
+ HWaitData : smallint; { destination Pointer or data to send }
|
|
|
+ end;
|
|
|
+
|
|
|
+{ structure of cprlist that points to list that hardware actually executes }
|
|
|
+
|
|
|
+ pcprlist = ^tcprlist;
|
|
|
+ tcprlist = record
|
|
|
+ Next : pcprlist;
|
|
|
+ start : psmallint; { start of copper list }
|
|
|
+ MaxCount : smallint; { number of long instructions }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pCopList = ^tCopList;
|
|
|
+ tCopList = record
|
|
|
+ Next : pCopList; { next block for this copper list }
|
|
|
+ CopList : pCopList; { system use }
|
|
|
+ ViewPort : Pointer; { system use }
|
|
|
+ CopIns : pCopIns; { start of this block }
|
|
|
+ CopPtr : pCopIns; { intermediate ptr }
|
|
|
+ CopLStart : psmallint; { mrgcop fills this in for Long Frame}
|
|
|
+ CopSStart : psmallint; { mrgcop fills this in for Longint Frame}
|
|
|
+ Count : smallint; { intermediate counter }
|
|
|
+ MaxCount : smallint; { max # of copins for this block }
|
|
|
+ DyOffset : smallint; { offset this copper list vertical waits }
|
|
|
+ SLRepeat : Word;
|
|
|
+ Flags : Word;
|
|
|
+ end;
|
|
|
+
|
|
|
+ pUCopList = ^tUCopList;
|
|
|
+ tUCopList = record
|
|
|
+ Next : pUCopList;
|
|
|
+ FirstCopList : pCopList; { head node of this copper list }
|
|
|
+ CopList : pCopList; { node in use }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pcopinit = ^tcopinit;
|
|
|
+ tcopinit = record
|
|
|
+ vsync_hblank : array [0..1] of word;
|
|
|
+ diagstrt : Array [0..11] of word;
|
|
|
+ fm0 : array [0..1] of word;
|
|
|
+ diwstart : array [0..9] of word;
|
|
|
+ bplcon2 : array [0..1] of word;
|
|
|
+ sprfix : array [0..(2*8)] of word;
|
|
|
+ sprstrtup : Array [0..(2*8*2)] of Word;
|
|
|
+ wait14 : array [0..1] of word;
|
|
|
+ norm_hblank : array [0..1] of word;
|
|
|
+ jump : array [0..1] of word;
|
|
|
+ wait_forever : array [0..5] of word;
|
|
|
+ sprstop : Array [0..7] of Word;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ pAreaInfo = ^tAreaInfo;
|
|
|
+ tAreaInfo = record
|
|
|
+ VctrTbl : Pointer; { ptr to start of vector table }
|
|
|
+ VctrPtr : Pointer; { ptr to current vertex }
|
|
|
+ FlagTbl : Pointer; { ptr to start of vector flag table }
|
|
|
+ FlagPtr : Pointer; { ptrs to areafill flags }
|
|
|
+ Count : smallint; { number of vertices in list }
|
|
|
+ MaxCount : smallint; { AreaMove/Draw will not allow Count>MaxCount}
|
|
|
+ FirstX,
|
|
|
+ FirstY : smallint; { first point for this polygon }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pTmpRas = ^tTmpRas;
|
|
|
+ tTmpRas = record
|
|
|
+ RasPtr : Pointer;
|
|
|
+ Size : Longint;
|
|
|
+ end;
|
|
|
+
|
|
|
+{ unoptimized for 32bit alignment of pointers }
|
|
|
+
|
|
|
+ pGelsInfo = ^tGelsInfo;
|
|
|
+ tGelsInfo = record
|
|
|
+ sprRsrvd : Shortint; { flag of which sprites to reserve from
|
|
|
+ vsprite system }
|
|
|
+ Flags : Byte; { system use }
|
|
|
+ gelHead,
|
|
|
+ gelTail : Pointer; { (VSpritePtr) dummy vSprites for list management}
|
|
|
+
|
|
|
+ { pointer to array of 8 WORDS for sprite available lines }
|
|
|
+
|
|
|
+ nextLine : Pointer;
|
|
|
+
|
|
|
+ { pointer to array of 8 pointers for color-last-assigned to vSprites }
|
|
|
+
|
|
|
+ lastColor : Pointer;
|
|
|
+ collHandler : Pointer; { (collTablePtr) Pointeres of collision routines }
|
|
|
+ leftmost,
|
|
|
+ rightmost,
|
|
|
+ topmost,
|
|
|
+ bottommost : smallint;
|
|
|
+ firstBlissObj,
|
|
|
+ lastBlissObj : Pointer; { system use only }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pRastPort = ^tRastPort;
|
|
|
+ tRastPort = record
|
|
|
+ Layer : pLayer; { LayerPtr }
|
|
|
+ BitMap : pBitMap; { BitMapPtr }
|
|
|
+ ArePointern : Pointer; { ptr to areafill pattern }
|
|
|
+ TmpRas : pTmpRas;
|
|
|
+ AreaInfo : pAreaInfo;
|
|
|
+ GelsInfo : pGelsInfo;
|
|
|
+ Mask : Byte; { write mask for this raster }
|
|
|
+ FgPen : Shortint; { foreground pen for this raster }
|
|
|
+ BgPen : Shortint; { background pen }
|
|
|
+ AOlPen : Shortint; { areafill outline pen }
|
|
|
+ DrawMode : Shortint; { drawing mode for fill, lines, and text }
|
|
|
+ AreaPtSz : Shortint; { 2^n words for areafill pattern }
|
|
|
+ linpatcnt : Shortint; { current line drawing pattern preshift }
|
|
|
+ dummy : Shortint;
|
|
|
+ Flags : Word; { miscellaneous control bits }
|
|
|
+ LinePtrn : Word; { 16 bits for textured lines }
|
|
|
+ cp_x,
|
|
|
+ cp_y : smallint; { current pen position }
|
|
|
+ minterms : Array [0..7] of Byte;
|
|
|
+ PenWidth : smallint;
|
|
|
+ PenHeight : smallint;
|
|
|
+ Font : pTextFont; { (TextFontPtr) current font Pointer }
|
|
|
+ AlgoStyle : Byte; { the algorithmically generated style }
|
|
|
+ TxFlags : Byte; { text specific flags }
|
|
|
+ TxHeight : Word; { text height }
|
|
|
+ TxWidth : Word; { text nominal width }
|
|
|
+ TxBaseline : Word; { text baseline }
|
|
|
+ TxSpacing : smallint; { text spacing (per character) }
|
|
|
+ RP_User : Pointer;
|
|
|
+ longreserved : Array [0..1] of Cardinal;
|
|
|
+ wordreserved : Array [0..6] of Word; { used to be a node }
|
|
|
+ reserved : Array [0..7] of Byte; { for future use }
|
|
|
+ end;
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+{ drawing modes }
|
|
|
+
|
|
|
+ JAM1 = 0; { jam 1 color into raster }
|
|
|
+ JAM2 = 1; { jam 2 colors into raster }
|
|
|
+ COMPLEMENT = 2; { XOR bits into raster }
|
|
|
+ INVERSVID = 4; { inverse video for drawing modes }
|
|
|
+
|
|
|
+{ these are the flag bits for RastPort flags }
|
|
|
+
|
|
|
+ FRST_DOT = $01; { draw the first dot of this line ? }
|
|
|
+ ONE_DOT = $02; { use one dot mode for drawing lines }
|
|
|
+ DBUFFER = $04; { flag set when RastPorts are double-buffered }
|
|
|
+
|
|
|
+ { only used for bobs }
|
|
|
+
|
|
|
+ AREAOUTLINE = $08; { used by areafiller }
|
|
|
+ NOCROSSFILL = $20; { areafills have no crossovers }
|
|
|
+
|
|
|
+{ there is only one style of clipping: raster clipping }
|
|
|
+{ this preserves the continuity of jaggies regardless of clip window }
|
|
|
+{ When drawing into a RastPort, if the ptr to ClipRect is nil then there }
|
|
|
+{ is no clipping done, this is dangerous but useful for speed }
|
|
|
+
|
|
|
+
|
|
|
+Const
|
|
|
+ CleanUp = $40;
|
|
|
+ CleanMe = CleanUp;
|
|
|
+
|
|
|
+ BltClearWait = 1; { Waits for blit to finish }
|
|
|
+ BltClearXY = 2; { Use Row/Bytes per row method }
|
|
|
+
|
|
|
+ { Useful minterms }
|
|
|
+
|
|
|
+ StraightCopy = $C0; { Vanilla copy }
|
|
|
+ InvertAndCopy = $30; { Invert the source before copy }
|
|
|
+ InvertDest = $50; { Forget source, invert dest }
|
|
|
+
|
|
|
+
|
|
|
+ { mode coercion definitions }
|
|
|
+
|
|
|
+const
|
|
|
+{ These flags are passed (in combination) to CoerceMode() to determine the
|
|
|
+ * type of coercion required.
|
|
|
+ }
|
|
|
+
|
|
|
+{ Ensure that the mode coerced to can display just as many colours as the
|
|
|
+ * ViewPort being coerced.
|
|
|
+ }
|
|
|
+ PRESERVE_COLORS = 1;
|
|
|
+
|
|
|
+{ Ensure that the mode coerced to is not interlaced. }
|
|
|
+ AVOID_FLICKER = 2;
|
|
|
+
|
|
|
+{ Coercion should ignore monitor compatibility issues. }
|
|
|
+ IGNORE_MCOMPAT = 4;
|
|
|
+
|
|
|
+
|
|
|
+ BIDTAG_COERCE = 1; { Private }
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+{ VSprite flags }
|
|
|
+{ user-set VSprite flags: }
|
|
|
+
|
|
|
+ SUSERFLAGS = $00FF; { mask of all user-settable VSprite-flags }
|
|
|
+ VSPRITE_f = $0001; { set if VSprite, clear if Bob }
|
|
|
+ { VSPRITE had to be changed for name conflict }
|
|
|
+ SAVEBACK = $0002; { set if background is to be saved/restored }
|
|
|
+ OVERLAY = $0004; { set to mask image of Bob onto background }
|
|
|
+ MUSTDRAW = $0008; { set if VSprite absolutely must be drawn }
|
|
|
+
|
|
|
+{ system-set VSprite flags: }
|
|
|
+
|
|
|
+ BACKSAVED = $0100; { this Bob's background has been saved }
|
|
|
+ BOBUPDATE = $0200; { temporary flag, useless to outside world }
|
|
|
+ GELGONE = $0400; { set if gel is completely clipped (offscreen) }
|
|
|
+ VSOVERFLOW = $0800; { VSprite overflow (if MUSTDRAW set we draw!) }
|
|
|
+
|
|
|
+{ Bob flags }
|
|
|
+{ these are the user flag bits }
|
|
|
+
|
|
|
+ BUSERFLAGS = $00FF; { mask of all user-settable Bob-flags }
|
|
|
+ SAVEBOB = $0001; { set to not erase Bob }
|
|
|
+ BOBISCOMP = $0002; { set to identify Bob as AnimComp }
|
|
|
+
|
|
|
+{ these are the system flag bits }
|
|
|
+
|
|
|
+ BWAITING = $0100; { set while Bob is waiting on 'after' }
|
|
|
+ BDRAWN = $0200; { set when Bob is drawn this DrawG pass}
|
|
|
+ BOBSAWAY = $0400; { set to initiate removal of Bob }
|
|
|
+ BOBNIX = $0800; { set when Bob is completely removed }
|
|
|
+ SAVEPRESERVE = $1000; { for back-restore during double-buffer}
|
|
|
+ OUTSTEP = $2000; { for double-clearing if double-buffer }
|
|
|
+
|
|
|
+{ defines for the animation procedures }
|
|
|
+
|
|
|
+ ANFRACSIZE = 6;
|
|
|
+ ANIMHALF = $0020;
|
|
|
+ RINGTRIGGER = $0001;
|
|
|
+
|
|
|
+
|
|
|
+{ UserStuff definitions
|
|
|
+ * the user can define these to be a single variable or a sub-structure
|
|
|
+ * if undefined by the user, the system turns these into innocuous variables
|
|
|
+ * see the manual for a thorough definition of the UserStuff definitions
|
|
|
+ *
|
|
|
+ }
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ VUserStuff = smallint; { Sprite user stuff }
|
|
|
+ BUserStuff = smallint; { Bob user stuff }
|
|
|
+ AUserStuff = smallint; { AnimOb user stuff }
|
|
|
+
|
|
|
+{********************** GEL STRUCTURES **********************************}
|
|
|
+
|
|
|
+ pVSprite = ^tVSprite;
|
|
|
+ tVSprite = record
|
|
|
+
|
|
|
+{ --------------------- SYSTEM VARIABLES ------------------------------- }
|
|
|
+{ GEL linked list forward/backward pointers sorted by y,x value }
|
|
|
+
|
|
|
+ NextVSprite : pVSprite;
|
|
|
+ PrevVSprite : pVSprite;
|
|
|
+
|
|
|
+{ GEL draw list constructed in the order the Bobs are actually drawn, then
|
|
|
+ * list is copied to clear list
|
|
|
+ * must be here in VSprite for system boundary detection
|
|
|
+ }
|
|
|
+
|
|
|
+ DrawPath : pVSprite; { pointer of overlay drawing }
|
|
|
+ ClearPath : pVSprite; { pointer for overlay clearing }
|
|
|
+
|
|
|
+{ the VSprite positions are defined in (y,x) order to make sorting
|
|
|
+ * sorting easier, since (y,x) as a long Longint
|
|
|
+ }
|
|
|
+
|
|
|
+ OldY, OldX : smallint; { previous position }
|
|
|
+
|
|
|
+{ --------------------- COMMON VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+ Flags : smallint; { VSprite flags }
|
|
|
+
|
|
|
+
|
|
|
+{ --------------------- USER VARIABLES ----------------------------------- }
|
|
|
+{ the VSprite positions are defined in (y,x) order to make sorting
|
|
|
+ * sorting easier, since (y,x) as a long Longint
|
|
|
+ }
|
|
|
+
|
|
|
+ Y, X : smallint; { screen position }
|
|
|
+
|
|
|
+ Height : smallint;
|
|
|
+ Width : smallint; { number of words per row of image data }
|
|
|
+ Depth : smallint; { number of planes of data }
|
|
|
+
|
|
|
+ MeMask : smallint; { which types can collide with this VSprite}
|
|
|
+ HitMask : smallint; { which types this VSprite can collide with}
|
|
|
+
|
|
|
+ ImageData : Pointer; { pointer to VSprite image }
|
|
|
+
|
|
|
+{ borderLine is the one-dimensional logical OR of all
|
|
|
+ * the VSprite bits, used for fast collision detection of edge
|
|
|
+ }
|
|
|
+
|
|
|
+ BorderLine : Pointer; { logical OR of all VSprite bits }
|
|
|
+ CollMask : Pointer; { similar to above except this is a matrix }
|
|
|
+
|
|
|
+{ pointer to this VSprite's color definitions (not used by Bobs) }
|
|
|
+
|
|
|
+ SprColors : Pointer;
|
|
|
+
|
|
|
+ VSBob : Pointer; { (BobPtr) points home if this VSprite
|
|
|
+ is part of a Bob }
|
|
|
+
|
|
|
+{ planePick flag: set bit selects a plane from image, clear bit selects
|
|
|
+ * use of shadow mask for that plane
|
|
|
+ * OnOff flag: if using shadow mask to fill plane, this bit (corresponding
|
|
|
+ * to bit in planePick) describes whether to fill with 0's or 1's
|
|
|
+ * There are two uses for these flags:
|
|
|
+ * - if this is the VSprite of a Bob, these flags describe how the Bob
|
|
|
+ * is to be drawn into memory
|
|
|
+ * - if this is a simple VSprite and the user intends on setting the
|
|
|
+ * MUSTDRAW flag of the VSprite, these flags must be set too to describe
|
|
|
+ * which color registers the user wants for the image
|
|
|
+ }
|
|
|
+
|
|
|
+ PlanePick : Shortint;
|
|
|
+ PlaneOnOff : Shortint;
|
|
|
+
|
|
|
+ VUserExt : VUserStuff; { user definable: see note above }
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+{ dBufPacket defines the values needed to be saved across buffer to buffer
|
|
|
+ * when in double-buffer mode
|
|
|
+ }
|
|
|
+
|
|
|
+ pDBufPacket = ^tDBufPacket;
|
|
|
+ tDBufPacket = record
|
|
|
+ BufY,
|
|
|
+ BufX : Word; { save other buffers screen coordinates }
|
|
|
+ BufPath : pVSprite; { carry the draw path over the gap }
|
|
|
+
|
|
|
+{ these pointers must be filled in by the user }
|
|
|
+{ pointer to other buffer's background save buffer }
|
|
|
+
|
|
|
+ BufBuffer : Pointer;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ pBob = ^tBob;
|
|
|
+ tBob = record
|
|
|
+{ blitter-objects }
|
|
|
+
|
|
|
+{ --------------------- SYSTEM VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+{ --------------------- COMMON VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+ Flags : smallint; { general purpose flags (see definitions below) }
|
|
|
+
|
|
|
+{ --------------------- USER VARIABLES ----------------------------------- }
|
|
|
+
|
|
|
+ SaveBuffer : Pointer; { pointer to the buffer for background save }
|
|
|
+
|
|
|
+{ used by Bobs for "cookie-cutting" and multi-plane masking }
|
|
|
+
|
|
|
+ ImageShadow : Pointer;
|
|
|
+
|
|
|
+{ pointer to BOBs for sequenced drawing of Bobs
|
|
|
+ * for correct overlaying of multiple component animations
|
|
|
+ }
|
|
|
+ Before : pBob; { draw this Bob before Bob pointed to by before }
|
|
|
+ After : pBob; { draw this Bob after Bob pointed to by after }
|
|
|
+
|
|
|
+ BobVSprite : pVSprite; { this Bob's VSprite definition }
|
|
|
+
|
|
|
+ BobComp : Pointer; { (AnimCompPtr) pointer to this Bob's AnimComp def }
|
|
|
+
|
|
|
+ DBuffer : Pointer; { pointer to this Bob's dBuf packet }
|
|
|
+
|
|
|
+ BUserExt : BUserStuff; { Bob user extension }
|
|
|
+ end;
|
|
|
+
|
|
|
+ pAnimComp = ^tAnimComp;
|
|
|
+ tAnimComp = record
|
|
|
+
|
|
|
+{ --------------------- SYSTEM VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+{ --------------------- COMMON VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+ Flags : smallint; { AnimComp flags for system & user }
|
|
|
+
|
|
|
+{ timer defines how long to keep this component active:
|
|
|
+ * if set non-zero, timer decrements to zero then switches to nextSeq
|
|
|
+ * if set to zero, AnimComp never switches
|
|
|
+ }
|
|
|
+
|
|
|
+ Timer : smallint;
|
|
|
+
|
|
|
+{ --------------------- USER VARIABLES ----------------------------------- }
|
|
|
+{ initial value for timer when the AnimComp is activated by the system }
|
|
|
+
|
|
|
+ TimeSet : smallint;
|
|
|
+
|
|
|
+{ pointer to next and previous components of animation object }
|
|
|
+
|
|
|
+ NextComp : pAnimComp;
|
|
|
+ PrevComp : pAnimComp;
|
|
|
+
|
|
|
+{ pointer to component component definition of next image in sequence }
|
|
|
+
|
|
|
+ NextSeq : pAnimComp;
|
|
|
+ PrevSeq : pAnimComp;
|
|
|
+
|
|
|
+ AnimCRoutine : Pointer; { Pointer of special animation procedure }
|
|
|
+
|
|
|
+ YTrans : smallint; { initial y translation (if this is a component) }
|
|
|
+ XTrans : smallint; { initial x translation (if this is a component) }
|
|
|
+
|
|
|
+ HeadOb : Pointer; { AnimObPtr }
|
|
|
+
|
|
|
+ AnimBob : pBob;
|
|
|
+ end;
|
|
|
+
|
|
|
+ pAnimOb = ^tAnimOb;
|
|
|
+ tAnimOb = record
|
|
|
+
|
|
|
+{ --------------------- SYSTEM VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+ NextOb,
|
|
|
+ PrevOb : pAnimOb;
|
|
|
+
|
|
|
+{ number of calls to Animate this AnimOb has endured }
|
|
|
+
|
|
|
+ Clock : Longint;
|
|
|
+
|
|
|
+ AnOldY,
|
|
|
+ AnOldX : smallint; { old y,x coordinates }
|
|
|
+
|
|
|
+{ --------------------- COMMON VARIABLES --------------------------------- }
|
|
|
+
|
|
|
+ AnY,
|
|
|
+ AnX : smallint; { y,x coordinates of the AnimOb }
|
|
|
+
|
|
|
+{ --------------------- USER VARIABLES ----------------------------------- }
|
|
|
+
|
|
|
+ YVel,
|
|
|
+ XVel : smallint; { velocities of this object }
|
|
|
+ YAccel,
|
|
|
+ XAccel : smallint; { accelerations of this object }
|
|
|
+
|
|
|
+ RingYTrans,
|
|
|
+ RingXTrans : smallint; { ring translation values }
|
|
|
+
|
|
|
+ AnimORoutine : Pointer; { Pointer of special animation
|
|
|
+ procedure }
|
|
|
+
|
|
|
+ HeadComp : pAnimComp; { pointer to first component }
|
|
|
+
|
|
|
+ AUserExt : AUserStuff; { AnimOb user extension }
|
|
|
+ end;
|
|
|
+
|
|
|
+ ppAnimOb = ^pAnimOb;
|
|
|
+
|
|
|
+
|
|
|
+{ ************************************************************************ }
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+ B2NORM = 0;
|
|
|
+ B2SWAP = 1;
|
|
|
+ B2BOBBER = 2;
|
|
|
+
|
|
|
+{ ************************************************************************ }
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+{ a structure to contain the 16 collision procedure addresses }
|
|
|
+
|
|
|
+ collTable = Array [0..15] of Pointer;
|
|
|
+ pcollTable = ^collTable;
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+{ These bit descriptors are used by the GEL collide routines.
|
|
|
+ * These bits are set in the hitMask and meMask variables of
|
|
|
+ * a GEL to describe whether or not these types of collisions
|
|
|
+ * can affect the GEL. BNDRY_HIT is described further below;
|
|
|
+ * this bit is permanently assigned as the boundary-hit flag.
|
|
|
+ * The other bit GEL_HIT is meant only as a default to cover
|
|
|
+ * any GEL hitting any other; the user may redefine this bit.
|
|
|
+ }
|
|
|
+
|
|
|
+ BORDERHIT = 0;
|
|
|
+
|
|
|
+{ These bit descriptors are used by the GEL boundry hit routines.
|
|
|
+ * When the user's boundry-hit routine is called (via the argument
|
|
|
+ * set by a call to SetCollision) the first argument passed to
|
|
|
+ * the user's routine is the Pointer of the GEL involved in the
|
|
|
+ * boundry-hit, and the second argument has the appropriate bit(s)
|
|
|
+ * set to describe which boundry was surpassed
|
|
|
+ }
|
|
|
+
|
|
|
+ TOPHIT = 1;
|
|
|
+ BOTTOMHIT = 2;
|
|
|
+ LEFTHIT = 4;
|
|
|
+ RIGHTHIT = 8;
|
|
|
+
|
|
|
+Type
|
|
|
+ pExtendedNode = ^tExtendedNode;
|
|
|
+ tExtendedNode = record
|
|
|
+ xln_Succ,
|
|
|
+ xln_Pred : pNode;
|
|
|
+ xln_Type : Byte;
|
|
|
+ xln_Pri : Shortint;
|
|
|
+ xln_Name : PChar;
|
|
|
+ xln_Subsystem : Byte;
|
|
|
+ xln_Subtype : Byte;
|
|
|
+ xln_Library : Longint;
|
|
|
+ xln_Init : Pointer;
|
|
|
+ END;
|
|
|
+
|
|
|
+CONST
|
|
|
+ SS_GRAPHICS = $02;
|
|
|
+
|
|
|
+ VIEW_EXTRA_TYPE = 1;
|
|
|
+ VIEWPORT_EXTRA_TYPE = 2;
|
|
|
+ SPECIAL_MONITOR_TYPE = 3;
|
|
|
+ MONITOR_SPEC_TYPE = 4;
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+{ structure used by AddTOFTask }
|
|
|
+
|
|
|
+ pIsrvstr = ^tIsrvstr;
|
|
|
+ tIsrvstr = record
|
|
|
+ is_Node : tNode;
|
|
|
+ Iptr : pIsrvstr; { passed to srvr by os }
|
|
|
+ code : Pointer;
|
|
|
+ ccode : Pointer;
|
|
|
+ Carg : Pointer;
|
|
|
+ end;
|
|
|
+
|
|
|
+Type
|
|
|
+ pAnalogSignalInterval = ^tAnalogSignalInterval;
|
|
|
+ tAnalogSignalInterval = record
|
|
|
+ asi_Start,
|
|
|
+ asi_Stop : Word;
|
|
|
+ END;
|
|
|
+
|
|
|
+ pSpecialMonitor = ^tSpecialMonitor;
|
|
|
+ tSpecialMonitor = record
|
|
|
+ spm_Node : tExtendedNode;
|
|
|
+ spm_Flags : Word;
|
|
|
+ do_monitor,
|
|
|
+ reserved1,
|
|
|
+ reserved2,
|
|
|
+ reserved3 : Pointer;
|
|
|
+ hblank,
|
|
|
+ vblank,
|
|
|
+ hsync,
|
|
|
+ vsync : tAnalogSignalInterval;
|
|
|
+ END;
|
|
|
+
|
|
|
+
|
|
|
+ pMonitorSpec = ^tMonitorSpec;
|
|
|
+ tMonitorSpec = record
|
|
|
+ ms_Node : tExtendedNode;
|
|
|
+ ms_Flags : Word;
|
|
|
+ ratioh,
|
|
|
+ ratiov : Longint;
|
|
|
+ total_rows,
|
|
|
+ total_colorclocks,
|
|
|
+ DeniseMaxDisplayColumn,
|
|
|
+ BeamCon0,
|
|
|
+ min_row : Word;
|
|
|
+ ms_Special : pSpecialMonitor;
|
|
|
+ ms_OpenCount : Word;
|
|
|
+ ms_transform,
|
|
|
+ ms_translate,
|
|
|
+ ms_scale : Pointer;
|
|
|
+ ms_xoffset,
|
|
|
+ ms_yoffset : Word;
|
|
|
+ ms_LegalView : tRectangle;
|
|
|
+ ms_maxoscan, { maximum legal overscan }
|
|
|
+ ms_videoscan : Pointer; { video display overscan }
|
|
|
+ DeniseMinDisplayColumn : Word;
|
|
|
+ DisplayCompatible : Cardinal;
|
|
|
+ DisplayInfoDataBase : tList;
|
|
|
+ DisplayInfoDataBaseSemaphore : tSignalSemaphore;
|
|
|
+ ms_MrgCop,
|
|
|
+ ms_LoadView,
|
|
|
+ ms_KillView : Longint;
|
|
|
+ END;
|
|
|
+
|
|
|
+const
|
|
|
+ TO_MONITOR = 0;
|
|
|
+ FROM_MONITOR = 1;
|
|
|
+ STANDARD_XOFFSET = 9;
|
|
|
+ STANDARD_YOFFSET = 0;
|
|
|
+
|
|
|
+ MSB_REQUEST_NTSC = 0;
|
|
|
+ MSB_REQUEST_PAL = 1;
|
|
|
+ MSB_REQUEST_SPECIAL = 2;
|
|
|
+ MSB_REQUEST_A2024 = 3;
|
|
|
+ MSB_DOUBLE_SPRITES = 4;
|
|
|
+ MSF_REQUEST_NTSC = 1;
|
|
|
+ MSF_REQUEST_PAL = 2;
|
|
|
+ MSF_REQUEST_SPECIAL = 4;
|
|
|
+ MSF_REQUEST_A2024 = 8;
|
|
|
+ MSF_DOUBLE_SPRITES = 16;
|
|
|
+
|
|
|
+
|
|
|
+{ obsolete, v37 compatible definitions follow }
|
|
|
+ REQUEST_NTSC = 1;
|
|
|
+ REQUEST_PAL = 2;
|
|
|
+ REQUEST_SPECIAL = 4;
|
|
|
+ REQUEST_A2024 = 8;
|
|
|
+
|
|
|
+ DEFAULT_MONITOR_NAME : PChar = 'default.monitor';
|
|
|
+ NTSC_MONITOR_NAME : PChar = 'ntsc.monitor';
|
|
|
+ PAL_MONITOR_NAME : PChar = 'pal.monitor';
|
|
|
+ STANDARD_MONITOR_MASK = ( REQUEST_NTSC OR REQUEST_PAL ) ;
|
|
|
+
|
|
|
+ STANDARD_NTSC_ROWS = 262;
|
|
|
+ STANDARD_PAL_ROWS = 312;
|
|
|
+ STANDARD_COLORCLOCKS = 226;
|
|
|
+ STANDARD_DENISE_MAX = 455;
|
|
|
+ STANDARD_DENISE_MIN = 93 ;
|
|
|
+ STANDARD_NTSC_BEAMCON = $0000;
|
|
|
+ STANDARD_PAL_BEAMCON = DISPLAYPAL ;
|
|
|
+
|
|
|
+ SPECIAL_BEAMCON = ( VARVBLANK OR LOLDIS OR VARVSYNC OR VARHSYNC OR VARBEAM OR CSBLANK OR VSYNCTRUE);
|
|
|
+
|
|
|
+ MIN_NTSC_ROW = 21 ;
|
|
|
+ MIN_PAL_ROW = 29 ;
|
|
|
+ STANDARD_VIEW_X = $81 ;
|
|
|
+ STANDARD_VIEW_Y = $2C ;
|
|
|
+ STANDARD_HBSTRT = $06 ;
|
|
|
+ STANDARD_HSSTRT = $0B ;
|
|
|
+ STANDARD_HSSTOP = $1C ;
|
|
|
+ STANDARD_HBSTOP = $2C ;
|
|
|
+ STANDARD_VBSTRT = $0122;
|
|
|
+ STANDARD_VSSTRT = $02A6;
|
|
|
+ STANDARD_VSSTOP = $03AA;
|
|
|
+ STANDARD_VBSTOP = $1066;
|
|
|
+
|
|
|
+ VGA_COLORCLOCKS = (STANDARD_COLORCLOCKS/2);
|
|
|
+ VGA_TOTAL_ROWS = (STANDARD_NTSC_ROWS*2);
|
|
|
+ VGA_DENISE_MIN = 59 ;
|
|
|
+ MIN_VGA_ROW = 29 ;
|
|
|
+ VGA_HBSTRT = $08 ;
|
|
|
+ VGA_HSSTRT = $0E ;
|
|
|
+ VGA_HSSTOP = $1C ;
|
|
|
+ VGA_HBSTOP = $1E ;
|
|
|
+ VGA_VBSTRT = $0000;
|
|
|
+ VGA_VSSTRT = $0153;
|
|
|
+ VGA_VSSTOP = $0235;
|
|
|
+ VGA_VBSTOP = $0CCD;
|
|
|
+
|
|
|
+ VGA_MONITOR_NAME : PChar = 'vga.monitor';
|
|
|
+
|
|
|
+{ NOTE: VGA70 definitions are obsolete - a VGA70 monitor has never been
|
|
|
+ * implemented.
|
|
|
+ }
|
|
|
+ VGA70_COLORCLOCKS = (STANDARD_COLORCLOCKS/2) ;
|
|
|
+ VGA70_TOTAL_ROWS = 449;
|
|
|
+ VGA70_DENISE_MIN = 59;
|
|
|
+ MIN_VGA70_ROW = 35 ;
|
|
|
+ VGA70_HBSTRT = $08 ;
|
|
|
+ VGA70_HSSTRT = $0E ;
|
|
|
+ VGA70_HSSTOP = $1C ;
|
|
|
+ VGA70_HBSTOP = $1E ;
|
|
|
+ VGA70_VBSTRT = $0000;
|
|
|
+ VGA70_VSSTRT = $02A6;
|
|
|
+ VGA70_VSSTOP = $0388;
|
|
|
+ VGA70_VBSTOP = $0F73;
|
|
|
+
|
|
|
+ VGA70_BEAMCON = (SPECIAL_BEAMCON XOR VSYNCTRUE);
|
|
|
+ VGA70_MONITOR_NAME : PChar = 'vga70.monitor';
|
|
|
+
|
|
|
+ BROADCAST_HBSTRT = $01 ;
|
|
|
+ BROADCAST_HSSTRT = $06 ;
|
|
|
+ BROADCAST_HSSTOP = $17 ;
|
|
|
+ BROADCAST_HBSTOP = $27 ;
|
|
|
+ BROADCAST_VBSTRT = $0000;
|
|
|
+ BROADCAST_VSSTRT = $02A6;
|
|
|
+ BROADCAST_VSSTOP = $054C;
|
|
|
+ BROADCAST_VBSTOP = $1C40;
|
|
|
+ BROADCAST_BEAMCON = ( LOLDIS OR CSBLANK );
|
|
|
+ RATIO_FIXEDPART = 4;
|
|
|
+ RATIO_UNITY = 16;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+Type
|
|
|
+ pRasInfo = ^tRasInfo;
|
|
|
+ tRasInfo = record { used by callers to and InitDspC() }
|
|
|
+ Next : pRasInfo; { used for dualpf }
|
|
|
+ BitMap : pBitMap;
|
|
|
+ RxOffset,
|
|
|
+ RyOffset : smallint; { scroll offsets in this BitMap }
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+ pView = ^tView;
|
|
|
+ tView = record
|
|
|
+ ViewPort : Pointer; { ViewPortPtr }
|
|
|
+ LOFCprList : pcprlist; { used for interlaced and noninterlaced }
|
|
|
+ SHFCprList : pcprlist; { only used during interlace }
|
|
|
+ DyOffset,
|
|
|
+ DxOffset : smallint; { for complete View positioning }
|
|
|
+ { offsets are +- adjustments to standard #s }
|
|
|
+ Modes : WORD; { such as INTERLACE, GENLOC }
|
|
|
+ end;
|
|
|
+
|
|
|
+{ these structures are obtained via GfxNew }
|
|
|
+{ and disposed by GfxFree }
|
|
|
+Type
|
|
|
+ pViewExtra = ^tViewExtra;
|
|
|
+ tViewExtra = record
|
|
|
+ n : tExtendedNode;
|
|
|
+ View : pView; { backwards link } { view in C-Includes }
|
|
|
+ Monitor : pMonitorSpec; { monitors for this view }
|
|
|
+ TopLine : Word;
|
|
|
+ END;
|
|
|
+
|
|
|
+
|
|
|
+ pViewPort = ^tViewPort;
|
|
|
+ tViewPort = record
|
|
|
+ Next : pViewPort;
|
|
|
+ ColorMap : Pointer; { table of colors for this viewport } { ColorMapPtr }
|
|
|
+ { if this is nil, MakeVPort assumes default values }
|
|
|
+ DspIns : pCopList; { user by MakeView() }
|
|
|
+ SprIns : pCopList; { used by sprite stuff }
|
|
|
+ ClrIns : pCopList; { used by sprite stuff }
|
|
|
+ UCopIns : pUCopList; { User copper list }
|
|
|
+ DWidth,
|
|
|
+ DHeight : smallint;
|
|
|
+ DxOffset,
|
|
|
+ DyOffset : smallint;
|
|
|
+ Modes : Word;
|
|
|
+ SpritePriorities : Byte; { used by makevp }
|
|
|
+ reserved : Byte;
|
|
|
+ RasInfo : pRasInfo;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+{ this structure is obtained via GfxNew }
|
|
|
+{ and disposed by GfxFree }
|
|
|
+
|
|
|
+ pViewPortExtra = ^tViewPortExtra;
|
|
|
+ tViewPortExtra = record
|
|
|
+ n : tExtendedNode;
|
|
|
+ ViewPort : pViewPort; { backwards link } { ViewPort in C-Includes }
|
|
|
+ DisplayClip : tRectangle; { makevp display clipping information }
|
|
|
+ { These are added for V39 }
|
|
|
+ VecTable : Pointer; { Private }
|
|
|
+ DriverData : Array[0..1] of Pointer;
|
|
|
+ Flags : WORD;
|
|
|
+ Origin : Array[0..1] of tPoint; { First visible point relative to the DClip.
|
|
|
+ * One for each possible playfield.
|
|
|
+ }
|
|
|
+ cop1ptr, { private }
|
|
|
+ cop2ptr : Cardinal; { private }
|
|
|
+ END;
|
|
|
+
|
|
|
+
|
|
|
+ pColorMap = ^tColorMap;
|
|
|
+ tColorMap = record
|
|
|
+ Flags : Byte;
|
|
|
+ CType : Byte; { This is "Type" in C includes }
|
|
|
+ Count : Word;
|
|
|
+ ColorTable : Pointer;
|
|
|
+ cm_vpe : pViewPortExtra;
|
|
|
+ LowColorBits : Pointer;
|
|
|
+ TransparencyPlane,
|
|
|
+ SpriteResolution,
|
|
|
+ SpriteResDefault,
|
|
|
+ AuxFlags : Byte;
|
|
|
+ cm_vp : pViewPort; { ViewPortPtr }
|
|
|
+ NormalDisplayInfo,
|
|
|
+ CoerceDisplayInfo : Pointer;
|
|
|
+ cm_batch_items : pTagItem;
|
|
|
+ VPModeID : Cardinal;
|
|
|
+ PalExtra : Pointer;
|
|
|
+ SpriteBase_Even,
|
|
|
+ SpriteBase_Odd,
|
|
|
+ Bp_0_base,
|
|
|
+ Bp_1_base : Word;
|
|
|
+ end;
|
|
|
+
|
|
|
+{ if Type == 0 then ColorMap is V1.2/V1.3 compatible }
|
|
|
+{ if Type != 0 then ColorMap is V36 compatible }
|
|
|
+{ the system will never create other than V39 type colormaps when running V39 }
|
|
|
+
|
|
|
+CONST
|
|
|
+ COLORMAP_TYPE_V1_2 = $00;
|
|
|
+ COLORMAP_TYPE_V1_4 = $01;
|
|
|
+ COLORMAP_TYPE_V36 = COLORMAP_TYPE_V1_4; { use this definition }
|
|
|
+ COLORMAP_TYPE_V39 = $02;
|
|
|
+
|
|
|
+
|
|
|
+{ Flags variable }
|
|
|
+ COLORMAP_TRANSPARENCY = $01;
|
|
|
+ COLORPLANE_TRANSPARENCY = $02;
|
|
|
+ BORDER_BLANKING = $04;
|
|
|
+ BORDER_NOTRANSPARENCY = $08;
|
|
|
+ VIDEOCONTROL_BATCH = $10;
|
|
|
+ USER_COPPER_CLIP = $20;
|
|
|
+
|
|
|
+
|
|
|
+CONST
|
|
|
+ EXTEND_VSTRUCT = $1000; { unused bit in Modes field of View }
|
|
|
+
|
|
|
+
|
|
|
+{ defines used for Modes in IVPargs }
|
|
|
+
|
|
|
+CONST
|
|
|
+ GENLOCK_VIDEO = $0002;
|
|
|
+ LACE = $0004;
|
|
|
+ SUPERHIRES = $0020;
|
|
|
+ PFBA = $0040;
|
|
|
+ EXTRA_HALFBRITE= $0080;
|
|
|
+ GENLOCK_AUDIO = $0100;
|
|
|
+ DUALPF = $0400;
|
|
|
+ HAM = $0800;
|
|
|
+ EXTENDED_MODE = $1000;
|
|
|
+ VP_HIDE = $2000;
|
|
|
+ SPRITES = $4000;
|
|
|
+ HIRES = $8000;
|
|
|
+
|
|
|
+ VPF_A2024 = $40;
|
|
|
+ VPF_AGNUS = $20;
|
|
|
+ VPF_TENHZ = $20;
|
|
|
+
|
|
|
+ BORDERSPRITES = $40;
|
|
|
+
|
|
|
+ CMF_CMTRANS = 0;
|
|
|
+ CMF_CPTRANS = 1;
|
|
|
+ CMF_BRDRBLNK = 2;
|
|
|
+ CMF_BRDNTRAN = 3;
|
|
|
+ CMF_BRDRSPRT = 6;
|
|
|
+
|
|
|
+ SPRITERESN_ECS = 0;
|
|
|
+{ ^140ns, except in 35ns viewport, where it is 70ns. }
|
|
|
+ SPRITERESN_140NS = 1;
|
|
|
+ SPRITERESN_70NS = 2;
|
|
|
+ SPRITERESN_35NS = 3;
|
|
|
+ SPRITERESN_DEFAULT = -1;
|
|
|
+
|
|
|
+{ AuxFlags : }
|
|
|
+ CMAB_FULLPALETTE = 0;
|
|
|
+ CMAF_FULLPALETTE = 1;
|
|
|
+ CMAB_NO_INTERMED_UPDATE = 1;
|
|
|
+ CMAF_NO_INTERMED_UPDATE = 2;
|
|
|
+ CMAB_NO_COLOR_LOAD = 2;
|
|
|
+ CMAF_NO_COLOR_LOAD = 4;
|
|
|
+ CMAB_DUALPF_DISABLE = 3;
|
|
|
+ CMAF_DUALPF_DISABLE = 8;
|
|
|
+
|
|
|
+Type
|
|
|
+ pPaletteExtra = ^tPaletteExtra;
|
|
|
+ tPaletteExtra = record { structure may be extended so watch out! }
|
|
|
+ pe_Semaphore : tSignalSemaphore; { shared semaphore for arbitration }
|
|
|
+ pe_FirstFree, { *private* }
|
|
|
+ pe_NFree, { number of free colors }
|
|
|
+ pe_FirstShared, { *private* }
|
|
|
+ pe_NShared : WORD; { *private* }
|
|
|
+ pe_RefCnt : Pointer; { *private* }
|
|
|
+ pe_AllocList : Pointer; { *private* }
|
|
|
+ pe_ViewPort : pViewPort; { back pointer to viewport }
|
|
|
+ pe_SharableColors : WORD; { the number of sharable colors. }
|
|
|
+ end;
|
|
|
+{ flags values for ObtainPen }
|
|
|
+Const
|
|
|
+ PENB_EXCLUSIVE = 0;
|
|
|
+ PENB_NO_SETCOLOR = 1;
|
|
|
+
|
|
|
+ PENF_EXCLUSIVE = 1;
|
|
|
+ PENF_NO_SETCOLOR = 2;
|
|
|
+
|
|
|
+{ obsolete names for PENF_xxx flags: }
|
|
|
+
|
|
|
+ PEN_EXCLUSIVE = PENF_EXCLUSIVE;
|
|
|
+ PEN_NO_SETCOLOR = PENF_NO_SETCOLOR;
|
|
|
+
|
|
|
+{ precision values for ObtainBestPen : }
|
|
|
+
|
|
|
+ PRECISION_EXACT = -1;
|
|
|
+ PRECISION_IMAGE = 0;
|
|
|
+ PRECISION_ICON = 16;
|
|
|
+ PRECISION_GUI = 32;
|
|
|
+
|
|
|
+
|
|
|
+{ tags for ObtainBestPen: }
|
|
|
+ OBP_Precision = $84000000;
|
|
|
+ OBP_FailIfBad = $84000001;
|
|
|
+
|
|
|
+{ From V39, MakeVPort() will return an error if there is not enough memory,
|
|
|
+ * or the requested mode cannot be opened with the requested depth with the
|
|
|
+ * given bitmap (for higher bandwidth alignments).
|
|
|
+ }
|
|
|
+
|
|
|
+ MVP_OK = 0; { you want to see this one }
|
|
|
+ MVP_NO_MEM = 1; { insufficient memory for intermediate workspace }
|
|
|
+ MVP_NO_VPE = 2; { ViewPort does not have a ViewPortExtra, and
|
|
|
+ * insufficient memory to allocate a temporary one.
|
|
|
+ }
|
|
|
+ MVP_NO_DSPINS = 3; { insufficient memory for intermidiate copper
|
|
|
+ * instructions.
|
|
|
+ }
|
|
|
+ MVP_NO_DISPLAY = 4; { BitMap data is misaligned for this viewport's
|
|
|
+ * mode and depth - see AllocBitMap().
|
|
|
+ }
|
|
|
+ MVP_OFF_BOTTOM = 5; { PRIVATE - you will never see this. }
|
|
|
+
|
|
|
+{ From V39, MrgCop() will return an error if there is not enough memory,
|
|
|
+ * or for some reason MrgCop() did not need to make any copper lists.
|
|
|
+ }
|
|
|
+
|
|
|
+ MCOP_OK = 0; { you want to see this one }
|
|
|
+ MCOP_NO_MEM = 1; { insufficient memory to allocate the system
|
|
|
+ * copper lists.
|
|
|
+ }
|
|
|
+ MCOP_NOP = 2; { MrgCop() did not merge any copper lists
|
|
|
+ * (eg, no ViewPorts in the list, or all marked as
|
|
|
+ * hidden).
|
|
|
+ }
|
|
|
+Type
|
|
|
+ pDBufInfo = ^tDBufInfo;
|
|
|
+ tDBufInfo = record
|
|
|
+ dbi_Link1 : Pointer;
|
|
|
+ dbi_Count1 : Cardinal;
|
|
|
+ dbi_SafeMessage : tMessage; { replied to when safe to write to old bitmap }
|
|
|
+ dbi_UserData1 : Pointer; { first user data }
|
|
|
+
|
|
|
+ dbi_Link2 : Pointer;
|
|
|
+ dbi_Count2 : Cardinal;
|
|
|
+ dbi_DispMessage : tMessage; { replied to when new bitmap has been displayed at least
|
|
|
+ once }
|
|
|
+ dbi_UserData2 : Pointer; { second user data }
|
|
|
+ dbi_MatchLong : Cardinal;
|
|
|
+ dbi_CopPtr1,
|
|
|
+ dbi_CopPtr2,
|
|
|
+ dbi_CopPtr3 : Pointer;
|
|
|
+ dbi_BeamPos1,
|
|
|
+ dbi_BeamPos2 : WORD;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ { include define file for graphics display mode IDs. }
|
|
|
+
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+ INVALID_ID = NOT 0;
|
|
|
+
|
|
|
+{ With all the new modes that are available under V38 and V39, it is highly
|
|
|
+ * recommended that you use either the asl.library screenmode requester,
|
|
|
+ * and/or the V39 graphics.library function BestModeIDA().
|
|
|
+ *
|
|
|
+ * DO NOT interpret the any of the bits in the ModeID for its meaning. For
|
|
|
+ * example, do not interpret bit 3 ($4) as meaning the ModeID is interlaced.
|
|
|
+ * Instead, use GetDisplayInfoData() with DTAG_DISP, and examine the DIPF_...
|
|
|
+ * flags to determine a ModeID's characteristics. The only exception to
|
|
|
+ * this rule is that bit 7 ($80) will always mean the ModeID is
|
|
|
+ * ExtraHalfBright, and bit 11 ($800) will always mean the ModeID is HAM.
|
|
|
+ }
|
|
|
+
|
|
|
+{ normal identifiers }
|
|
|
+
|
|
|
+ MONITOR_ID_MASK = $FFFF1000;
|
|
|
+
|
|
|
+ DEFAULT_MONITOR_ID = $00000000;
|
|
|
+ NTSC_MONITOR_ID = $00011000;
|
|
|
+ PAL_MONITOR_ID = $00021000;
|
|
|
+
|
|
|
+{ the following 22 composite keys are for Modes on the default Monitor.
|
|
|
+ * NTSC & PAL "flavors" of these particular keys may be made by or'ing
|
|
|
+ * the NTSC or PAL MONITOR_ID with the desired MODE_KEY...
|
|
|
+ *
|
|
|
+ * For example, to specifically open a PAL HAM interlaced ViewPort
|
|
|
+ * (or intuition screen), you would use the modeid of
|
|
|
+ * (PAL_MONITOR_ID OR HAMLACE_KEY)
|
|
|
+ }
|
|
|
+
|
|
|
+ LORES_KEY = $00000000;
|
|
|
+ HIRES_KEY = $00008000;
|
|
|
+ SUPER_KEY = $00008020;
|
|
|
+ HAM_KEY = $00000800;
|
|
|
+ LORESLACE_KEY = $00000004;
|
|
|
+ HIRESLACE_KEY = $00008004;
|
|
|
+ SUPERLACE_KEY = $00008024;
|
|
|
+ HAMLACE_KEY = $00000804;
|
|
|
+ LORESDPF_KEY = $00000400;
|
|
|
+ HIRESDPF_KEY = $00008400;
|
|
|
+ SUPERDPF_KEY = $00008420;
|
|
|
+ LORESLACEDPF_KEY = $00000404;
|
|
|
+ HIRESLACEDPF_KEY = $00008404;
|
|
|
+ SUPERLACEDPF_KEY = $00008424;
|
|
|
+ LORESDPF2_KEY = $00000440;
|
|
|
+ HIRESDPF2_KEY = $00008440;
|
|
|
+ SUPERDPF2_KEY = $00008460;
|
|
|
+ LORESLACEDPF2_KEY = $00000444;
|
|
|
+ HIRESLACEDPF2_KEY = $00008444;
|
|
|
+ SUPERLACEDPF2_KEY = $00008464;
|
|
|
+ EXTRAHALFBRITE_KEY = $00000080;
|
|
|
+ EXTRAHALFBRITELACE_KEY = $00000084;
|
|
|
+{ New for AA ChipSet (V39) }
|
|
|
+ HIRESHAM_KEY = $00008800;
|
|
|
+ SUPERHAM_KEY = $00008820;
|
|
|
+ HIRESEHB_KEY = $00008080;
|
|
|
+ SUPEREHB_KEY = $000080a0;
|
|
|
+ HIRESHAMLACE_KEY = $00008804;
|
|
|
+ SUPERHAMLACE_KEY = $00008824;
|
|
|
+ HIRESEHBLACE_KEY = $00008084;
|
|
|
+ SUPEREHBLACE_KEY = $000080a4;
|
|
|
+{ Added for V40 - may be useful modes for some games or animations. }
|
|
|
+ LORESSDBL_KEY = $00000008;
|
|
|
+ LORESHAMSDBL_KEY = $00000808;
|
|
|
+ LORESEHBSDBL_KEY = $00000088;
|
|
|
+ HIRESHAMSDBL_KEY = $00008808;
|
|
|
+
|
|
|
+
|
|
|
+{ VGA identifiers }
|
|
|
+
|
|
|
+ VGA_MONITOR_ID = $00031000;
|
|
|
+
|
|
|
+ VGAEXTRALORES_KEY = $00031004;
|
|
|
+ VGALORES_KEY = $00039004;
|
|
|
+ VGAPRODUCT_KEY = $00039024;
|
|
|
+ VGAHAM_KEY = $00031804;
|
|
|
+ VGAEXTRALORESLACE_KEY = $00031005;
|
|
|
+ VGALORESLACE_KEY = $00039005;
|
|
|
+ VGAPRODUCTLACE_KEY = $00039025;
|
|
|
+ VGAHAMLACE_KEY = $00031805;
|
|
|
+ VGAEXTRALORESDPF_KEY = $00031404;
|
|
|
+ VGALORESDPF_KEY = $00039404;
|
|
|
+ VGAPRODUCTDPF_KEY = $00039424;
|
|
|
+ VGAEXTRALORESLACEDPF_KEY = $00031405;
|
|
|
+ VGALORESLACEDPF_KEY = $00039405;
|
|
|
+ VGAPRODUCTLACEDPF_KEY = $00039425;
|
|
|
+ VGAEXTRALORESDPF2_KEY = $00031444;
|
|
|
+ VGALORESDPF2_KEY = $00039444;
|
|
|
+ VGAPRODUCTDPF2_KEY = $00039464;
|
|
|
+ VGAEXTRALORESLACEDPF2_KEY = $00031445;
|
|
|
+ VGALORESLACEDPF2_KEY = $00039445;
|
|
|
+ VGAPRODUCTLACEDPF2_KEY = $00039465;
|
|
|
+ VGAEXTRAHALFBRITE_KEY = $00031084;
|
|
|
+ VGAEXTRAHALFBRITELACE_KEY = $00031085;
|
|
|
+{ New for AA ChipSet (V39) }
|
|
|
+ VGAPRODUCTHAM_KEY = $00039824;
|
|
|
+ VGALORESHAM_KEY = $00039804;
|
|
|
+ VGAEXTRALORESHAM_KEY = VGAHAM_KEY;
|
|
|
+ VGAPRODUCTHAMLACE_KEY = $00039825;
|
|
|
+ VGALORESHAMLACE_KEY = $00039805;
|
|
|
+ VGAEXTRALORESHAMLACE_KEY = VGAHAMLACE_KEY;
|
|
|
+ VGAEXTRALORESEHB_KEY = VGAEXTRAHALFBRITE_KEY;
|
|
|
+ VGAEXTRALORESEHBLACE_KEY = VGAEXTRAHALFBRITELACE_KEY;
|
|
|
+ VGALORESEHB_KEY = $00039084;
|
|
|
+ VGALORESEHBLACE_KEY = $00039085;
|
|
|
+ VGAEHB_KEY = $000390a4;
|
|
|
+ VGAEHBLACE_KEY = $000390a5;
|
|
|
+{ These ModeIDs are the scandoubled equivalents of the above, with the
|
|
|
+ * exception of the DualPlayfield modes, as AA does not allow for scandoubling
|
|
|
+ * dualplayfield.
|
|
|
+ }
|
|
|
+ VGAEXTRALORESDBL_KEY = $00031000;
|
|
|
+ VGALORESDBL_KEY = $00039000;
|
|
|
+ VGAPRODUCTDBL_KEY = $00039020;
|
|
|
+ VGAEXTRALORESHAMDBL_KEY = $00031800;
|
|
|
+ VGALORESHAMDBL_KEY = $00039800;
|
|
|
+ VGAPRODUCTHAMDBL_KEY = $00039820;
|
|
|
+ VGAEXTRALORESEHBDBL_KEY = $00031080;
|
|
|
+ VGALORESEHBDBL_KEY = $00039080;
|
|
|
+ VGAPRODUCTEHBDBL_KEY = $000390a0;
|
|
|
+
|
|
|
+{ a2024 identifiers }
|
|
|
+
|
|
|
+ A2024_MONITOR_ID = $00041000;
|
|
|
+
|
|
|
+ A2024TENHERTZ_KEY = $00041000;
|
|
|
+ A2024FIFTEENHERTZ_KEY = $00049000;
|
|
|
+
|
|
|
+{ prototype identifiers (private) }
|
|
|
+
|
|
|
+ PROTO_MONITOR_ID = $00051000;
|
|
|
+
|
|
|
+
|
|
|
+{ These monitors and modes were added for the V38 release. }
|
|
|
+
|
|
|
+ EURO72_MONITOR_ID = $00061000;
|
|
|
+
|
|
|
+ EURO72EXTRALORES_KEY = $00061004;
|
|
|
+ EURO72LORES_KEY = $00069004;
|
|
|
+ EURO72PRODUCT_KEY = $00069024;
|
|
|
+ EURO72HAM_KEY = $00061804;
|
|
|
+ EURO72EXTRALORESLACE_KEY = $00061005;
|
|
|
+ EURO72LORESLACE_KEY = $00069005;
|
|
|
+ EURO72PRODUCTLACE_KEY = $00069025;
|
|
|
+ EURO72HAMLACE_KEY = $00061805;
|
|
|
+ EURO72EXTRALORESDPF_KEY = $00061404;
|
|
|
+ EURO72LORESDPF_KEY = $00069404;
|
|
|
+ EURO72PRODUCTDPF_KEY = $00069424;
|
|
|
+ EURO72EXTRALORESLACEDPF_KEY = $00061405;
|
|
|
+ EURO72LORESLACEDPF_KEY = $00069405;
|
|
|
+ EURO72PRODUCTLACEDPF_KEY = $00069425;
|
|
|
+ EURO72EXTRALORESDPF2_KEY = $00061444;
|
|
|
+ EURO72LORESDPF2_KEY = $00069444;
|
|
|
+ EURO72PRODUCTDPF2_KEY = $00069464;
|
|
|
+ EURO72EXTRALORESLACEDPF2_KEY = $00061445;
|
|
|
+ EURO72LORESLACEDPF2_KEY = $00069445;
|
|
|
+ EURO72PRODUCTLACEDPF2_KEY = $00069465;
|
|
|
+ EURO72EXTRAHALFBRITE_KEY = $00061084;
|
|
|
+ EURO72EXTRAHALFBRITELACE_KEY = $00061085;
|
|
|
+{ New AA modes (V39) }
|
|
|
+ EURO72PRODUCTHAM_KEY = $00069824;
|
|
|
+ EURO72PRODUCTHAMLACE_KEY = $00069825;
|
|
|
+ EURO72LORESHAM_KEY = $00069804;
|
|
|
+ EURO72LORESHAMLACE_KEY = $00069805;
|
|
|
+ EURO72EXTRALORESHAM_KEY = EURO72HAM_KEY;
|
|
|
+ EURO72EXTRALORESHAMLACE_KEY = EURO72HAMLACE_KEY ;
|
|
|
+ EURO72EXTRALORESEHB_KEY = EURO72EXTRAHALFBRITE_KEY;
|
|
|
+ EURO72EXTRALORESEHBLACE_KEY = EURO72EXTRAHALFBRITELACE_KEY;
|
|
|
+ EURO72LORESEHB_KEY = $00069084;
|
|
|
+ EURO72LORESEHBLACE_KEY = $00069085;
|
|
|
+ EURO72EHB_KEY = $000690a4;
|
|
|
+ EURO72EHBLACE_KEY = $000690a5;
|
|
|
+{ These ModeIDs are the scandoubled equivalents of the above, with the
|
|
|
+ * exception of the DualPlayfield modes, as AA does not allow for scandoubling
|
|
|
+ * dualplayfield.
|
|
|
+ }
|
|
|
+ EURO72EXTRALORESDBL_KEY = $00061000;
|
|
|
+ EURO72LORESDBL_KEY = $00069000;
|
|
|
+ EURO72PRODUCTDBL_KEY = $00069020;
|
|
|
+ EURO72EXTRALORESHAMDBL_KEY = $00061800;
|
|
|
+ EURO72LORESHAMDBL_KEY = $00069800;
|
|
|
+ EURO72PRODUCTHAMDBL_KEY = $00069820;
|
|
|
+ EURO72EXTRALORESEHBDBL_KEY = $00061080;
|
|
|
+ EURO72LORESEHBDBL_KEY = $00069080;
|
|
|
+ EURO72PRODUCTEHBDBL_KEY = $000690a0;
|
|
|
+
|
|
|
+
|
|
|
+ EURO36_MONITOR_ID = $00071000;
|
|
|
+
|
|
|
+{ Euro36 modeids can be ORed with the default modeids a la NTSC and PAL.
|
|
|
+ * For example, Euro36 SuperHires is
|
|
|
+ * (EURO36_MONITOR_ID OR SUPER_KEY)
|
|
|
+ }
|
|
|
+
|
|
|
+ SUPER72_MONITOR_ID = $00081000;
|
|
|
+
|
|
|
+{ Super72 modeids can be ORed with the default modeids a la NTSC and PAL.
|
|
|
+ * For example, Super72 SuperHiresLace (80$600) is
|
|
|
+ * (SUPER72_MONITOR_ID OR SUPERLACE_KEY).
|
|
|
+ * The following scandoubled Modes are the exception:
|
|
|
+ }
|
|
|
+ SUPER72LORESDBL_KEY = $00081008;
|
|
|
+ SUPER72HIRESDBL_KEY = $00089008;
|
|
|
+ SUPER72SUPERDBL_KEY = $00089028;
|
|
|
+ SUPER72LORESHAMDBL_KEY = $00081808;
|
|
|
+ SUPER72HIRESHAMDBL_KEY = $00089808;
|
|
|
+ SUPER72SUPERHAMDBL_KEY = $00089828;
|
|
|
+ SUPER72LORESEHBDBL_KEY = $00081088;
|
|
|
+ SUPER72HIRESEHBDBL_KEY = $00089088;
|
|
|
+ SUPER72SUPEREHBDBL_KEY = $000890a8;
|
|
|
+
|
|
|
+
|
|
|
+{ These monitors and modes were added for the V39 release. }
|
|
|
+
|
|
|
+ DBLNTSC_MONITOR_ID = $00091000;
|
|
|
+
|
|
|
+ DBLNTSCLORES_KEY = $00091000;
|
|
|
+ DBLNTSCLORESFF_KEY = $00091004;
|
|
|
+ DBLNTSCLORESHAM_KEY = $00091800;
|
|
|
+ DBLNTSCLORESHAMFF_KEY = $00091804;
|
|
|
+ DBLNTSCLORESEHB_KEY = $00091080;
|
|
|
+ DBLNTSCLORESEHBFF_KEY = $00091084;
|
|
|
+ DBLNTSCLORESLACE_KEY = $00091005;
|
|
|
+ DBLNTSCLORESHAMLACE_KEY = $00091805;
|
|
|
+ DBLNTSCLORESEHBLACE_KEY = $00091085;
|
|
|
+ DBLNTSCLORESDPF_KEY = $00091400;
|
|
|
+ DBLNTSCLORESDPFFF_KEY = $00091404;
|
|
|
+ DBLNTSCLORESDPFLACE_KEY = $00091405;
|
|
|
+ DBLNTSCLORESDPF2_KEY = $00091440;
|
|
|
+ DBLNTSCLORESDPF2FF_KEY = $00091444;
|
|
|
+ DBLNTSCLORESDPF2LACE_KEY = $00091445;
|
|
|
+ DBLNTSCHIRES_KEY = $00099000;
|
|
|
+ DBLNTSCHIRESFF_KEY = $00099004;
|
|
|
+ DBLNTSCHIRESHAM_KEY = $00099800;
|
|
|
+ DBLNTSCHIRESHAMFF_KEY = $00099804;
|
|
|
+ DBLNTSCHIRESLACE_KEY = $00099005;
|
|
|
+ DBLNTSCHIRESHAMLACE_KEY = $00099805;
|
|
|
+ DBLNTSCHIRESEHB_KEY = $00099080;
|
|
|
+ DBLNTSCHIRESEHBFF_KEY = $00099084;
|
|
|
+ DBLNTSCHIRESEHBLACE_KEY = $00099085;
|
|
|
+ DBLNTSCHIRESDPF_KEY = $00099400;
|
|
|
+ DBLNTSCHIRESDPFFF_KEY = $00099404;
|
|
|
+ DBLNTSCHIRESDPFLACE_KEY = $00099405;
|
|
|
+ DBLNTSCHIRESDPF2_KEY = $00099440;
|
|
|
+ DBLNTSCHIRESDPF2FF_KEY = $00099444;
|
|
|
+ DBLNTSCHIRESDPF2LACE_KEY = $00099445;
|
|
|
+ DBLNTSCEXTRALORES_KEY = $00091200;
|
|
|
+ DBLNTSCEXTRALORESHAM_KEY = $00091a00;
|
|
|
+ DBLNTSCEXTRALORESEHB_KEY = $00091280;
|
|
|
+ DBLNTSCEXTRALORESDPF_KEY = $00091600;
|
|
|
+ DBLNTSCEXTRALORESDPF2_KEY = $00091640;
|
|
|
+ DBLNTSCEXTRALORESFF_KEY = $00091204;
|
|
|
+ DBLNTSCEXTRALORESHAMFF_KEY = $00091a04;
|
|
|
+ DBLNTSCEXTRALORESEHBFF_KEY = $00091284;
|
|
|
+ DBLNTSCEXTRALORESDPFFF_KEY = $00091604;
|
|
|
+ DBLNTSCEXTRALORESDPF2FF_KEY = $00091644;
|
|
|
+ DBLNTSCEXTRALORESLACE_KEY = $00091205;
|
|
|
+ DBLNTSCEXTRALORESHAMLACE_KEY = $00091a05;
|
|
|
+ DBLNTSCEXTRALORESEHBLACE_KEY = $00091285;
|
|
|
+ DBLNTSCEXTRALORESDPFLACE_KEY = $00091605;
|
|
|
+ DBLNTSCEXTRALORESDPF2LACE_KEY = $00091645;
|
|
|
+
|
|
|
+ DBLPAL_MONITOR_ID = $000a1000;
|
|
|
+
|
|
|
+ DBLPALLORES_KEY = $000a1000;
|
|
|
+ DBLPALLORESFF_KEY = $000a1004;
|
|
|
+ DBLPALLORESHAM_KEY = $000a1800;
|
|
|
+ DBLPALLORESHAMFF_KEY = $000a1804;
|
|
|
+ DBLPALLORESEHB_KEY = $000a1080;
|
|
|
+ DBLPALLORESEHBFF_KEY = $000a1084;
|
|
|
+ DBLPALLORESLACE_KEY = $000a1005;
|
|
|
+ DBLPALLORESHAMLACE_KEY = $000a1805;
|
|
|
+ DBLPALLORESEHBLACE_KEY = $000a1085;
|
|
|
+ DBLPALLORESDPF_KEY = $000a1400;
|
|
|
+ DBLPALLORESDPFFF_KEY = $000a1404;
|
|
|
+ DBLPALLORESDPFLACE_KEY = $000a1405;
|
|
|
+ DBLPALLORESDPF2_KEY = $000a1440;
|
|
|
+ DBLPALLORESDPF2FF_KEY = $000a1444;
|
|
|
+ DBLPALLORESDPF2LACE_KEY = $000a1445;
|
|
|
+ DBLPALHIRES_KEY = $000a9000;
|
|
|
+ DBLPALHIRESFF_KEY = $000a9004;
|
|
|
+ DBLPALHIRESHAM_KEY = $000a9800;
|
|
|
+ DBLPALHIRESHAMFF_KEY = $000a9804;
|
|
|
+ DBLPALHIRESLACE_KEY = $000a9005;
|
|
|
+ DBLPALHIRESHAMLACE_KEY = $000a9805;
|
|
|
+ DBLPALHIRESEHB_KEY = $000a9080;
|
|
|
+ DBLPALHIRESEHBFF_KEY = $000a9084;
|
|
|
+ DBLPALHIRESEHBLACE_KEY = $000a9085;
|
|
|
+ DBLPALHIRESDPF_KEY = $000a9400;
|
|
|
+ DBLPALHIRESDPFFF_KEY = $000a9404;
|
|
|
+ DBLPALHIRESDPFLACE_KEY = $000a9405;
|
|
|
+ DBLPALHIRESDPF2_KEY = $000a9440;
|
|
|
+ DBLPALHIRESDPF2FF_KEY = $000a9444;
|
|
|
+ DBLPALHIRESDPF2LACE_KEY = $000a9445;
|
|
|
+ DBLPALEXTRALORES_KEY = $000a1200;
|
|
|
+ DBLPALEXTRALORESHAM_KEY = $000a1a00;
|
|
|
+ DBLPALEXTRALORESEHB_KEY = $000a1280;
|
|
|
+ DBLPALEXTRALORESDPF_KEY = $000a1600;
|
|
|
+ DBLPALEXTRALORESDPF2_KEY = $000a1640;
|
|
|
+ DBLPALEXTRALORESFF_KEY = $000a1204;
|
|
|
+ DBLPALEXTRALORESHAMFF_KEY = $000a1a04;
|
|
|
+ DBLPALEXTRALORESEHBFF_KEY = $000a1284;
|
|
|
+ DBLPALEXTRALORESDPFFF_KEY = $000a1604;
|
|
|
+ DBLPALEXTRALORESDPF2FF_KEY = $000a1644;
|
|
|
+ DBLPALEXTRALORESLACE_KEY = $000a1205;
|
|
|
+ DBLPALEXTRALORESHAMLACE_KEY = $000a1a05;
|
|
|
+ DBLPALEXTRALORESEHBLACE_KEY = $000a1285;
|
|
|
+ DBLPALEXTRALORESDPFLACE_KEY = $000a1605;
|
|
|
+ DBLPALEXTRALORESDPF2LACE_KEY = $000a1645;
|
|
|
+
|
|
|
+
|
|
|
+{ Use these tags for passing to BestModeID() (V39) }
|
|
|
+
|
|
|
+ SPECIAL_FLAGS = $100E;
|
|
|
+ { Original:
|
|
|
+ SPECIAL_FLAGS = DIPF_IS_DUALPF OR DIPF_IS_PF2PRI OR DIPF_IS_HAM OR DIPF_IS_EXTRAHALFBRITE;
|
|
|
+ ( Mu?te aufgrund eines Fehler in PCQ ge?ndert werden )
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ BIDTAG_DIPFMustHave = $80000001; { mask of the DIPF_ flags the ModeID must have }
|
|
|
+ { Default - NULL }
|
|
|
+ BIDTAG_DIPFMustNotHave = $80000002; { mask of the DIPF_ flags the ModeID must not have }
|
|
|
+ { Default - SPECIAL_FLAGS }
|
|
|
+ BIDTAG_ViewPort = $80000003; { ViewPort for which a ModeID is sought. }
|
|
|
+ { Default - NULL }
|
|
|
+ BIDTAG_NominalWidth = $80000004; { \ together make the aspect ratio and }
|
|
|
+ BIDTAG_NominalHeight = $80000005; { / override the vp->Width/Height. }
|
|
|
+ { Default - SourceID NominalDimensionInfo,
|
|
|
+ * or vp->DWidth/Height, or (640 * 200),
|
|
|
+ * in that preferred order.
|
|
|
+ }
|
|
|
+ BIDTAG_DesiredWidth = $80000006; { \ Nominal Width and Height of the }
|
|
|
+ BIDTAG_DesiredHeight = $80000007; { / returned ModeID. }
|
|
|
+ { Default - same as Nominal }
|
|
|
+ BIDTAG_Depth = $80000008; { ModeID must support this depth. }
|
|
|
+ { Default - vp->RasInfo->BitMap->Depth or 1 }
|
|
|
+ BIDTAG_MonitorID = $80000009; { ModeID must use this monitor. }
|
|
|
+ { Default - use best monitor available }
|
|
|
+ BIDTAG_SourceID = $8000000a; { instead of a ViewPort. }
|
|
|
+ { Default - VPModeID(vp) if BIDTAG_ViewPort is
|
|
|
+ * specified, else leave the DIPFMustHave and
|
|
|
+ * DIPFMustNotHave values untouched.
|
|
|
+ }
|
|
|
+ BIDTAG_RedBits = $8000000b; { \ }
|
|
|
+ BIDTAG_BlueBits = $8000000c; { > Match up from the database }
|
|
|
+ BIDTAG_GreenBits = $8000000d; { / }
|
|
|
+ { Default - 4 }
|
|
|
+ BIDTAG_GfxPrivate = $8000000e; { Private }
|
|
|
+
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+{ bplcon0 defines }
|
|
|
+
|
|
|
+ MODE_640 = $8000;
|
|
|
+ PLNCNTMSK = $7; { how many bit planes? }
|
|
|
+ { 0 = none, 1->6 = 1->6, 7 = reserved }
|
|
|
+ PLNCNTSHFT = 12; { bits to shift for bplcon0 }
|
|
|
+ PF2PRI = $40; { bplcon2 bit }
|
|
|
+ COLORON = $0200; { disable color burst }
|
|
|
+ DBLPF = $400;
|
|
|
+ HOLDNMODIFY = $800;
|
|
|
+ INTERLACE = 4; { interlace mode for 400 }
|
|
|
+
|
|
|
+{ bplcon1 defines }
|
|
|
+
|
|
|
+ PFA_FINE_SCROLL = $F;
|
|
|
+ PFB_FINE_SCROLL_SHIFT = 4;
|
|
|
+ PF_FINE_SCROLL_MASK = $F;
|
|
|
+
|
|
|
+{ display window start and stop defines }
|
|
|
+
|
|
|
+ DIW_HORIZ_POS = $7F; { horizontal start/stop }
|
|
|
+ DIW_VRTCL_POS = $1FF; { vertical start/stop }
|
|
|
+ DIW_VRTCL_POS_SHIFT = $7;
|
|
|
+
|
|
|
+{ Data fetch start/stop horizontal position }
|
|
|
+
|
|
|
+ DFTCH_MASK = $FF;
|
|
|
+
|
|
|
+{ vposr bits }
|
|
|
+
|
|
|
+ VPOSRLOF = $8000;
|
|
|
+
|
|
|
+ { include define file for displayinfo database }
|
|
|
+
|
|
|
+{ the "public" handle to a DisplayInfoRecord }
|
|
|
+Type
|
|
|
+
|
|
|
+ DisplayInfoHandle = Pointer;
|
|
|
+
|
|
|
+{ datachunk type identifiers }
|
|
|
+
|
|
|
+CONST
|
|
|
+ DTAG_DISP = $80000000;
|
|
|
+ DTAG_DIMS = $80001000;
|
|
|
+ DTAG_MNTR = $80002000;
|
|
|
+ DTAG_NAME = $80003000;
|
|
|
+ DTAG_VEC = $80004000; { internal use only }
|
|
|
+
|
|
|
+Type
|
|
|
+
|
|
|
+ pQueryHeader = ^tQueryHeader;
|
|
|
+ tQueryHeader = record
|
|
|
+ tructID, { datachunk type identifier }
|
|
|
+ DisplayID, { copy of display record key }
|
|
|
+ SkipID, { TAG_SKIP -- see tagitems.h }
|
|
|
+ Length : Cardinal; { length of local data in double-longwords }
|
|
|
+ END;
|
|
|
+
|
|
|
+ pDisplayInfo = ^tDisplayInfo;
|
|
|
+ tDisplayInfo = record
|
|
|
+ Header : tQueryHeader;
|
|
|
+ NotAvailable : Word; { IF NULL available, else see defines }
|
|
|
+ PropertyFlags : Cardinal; { Properties of this mode see defines }
|
|
|
+ Resolution : tPoint; { ticks-per-pixel X/Y }
|
|
|
+ PixelSpeed : Word; { aproximation in nanoseconds }
|
|
|
+ NumStdSprites : Word; { number of standard amiga sprites }
|
|
|
+ PaletteRange : Word; { distinguishable shades available }
|
|
|
+ SpriteResolution : tPoint; { std sprite ticks-per-pixel X/Y }
|
|
|
+ pad : Array[0..3] of Byte;
|
|
|
+ RedBits : Byte;
|
|
|
+ GreenBits : Byte;
|
|
|
+ BlueBits : Byte;
|
|
|
+ pad2 : array [0..4] of Byte;
|
|
|
+ reserved : Array[0..1] of Cardinal; { terminator }
|
|
|
+ END;
|
|
|
+
|
|
|
+{ availability }
|
|
|
+
|
|
|
+CONST
|
|
|
+ DI_AVAIL_NOCHIPS =$0001;
|
|
|
+ DI_AVAIL_NOMONITOR =$0002;
|
|
|
+ DI_AVAIL_NOTWITHGENLOCK =$0004;
|
|
|
+
|
|
|
+{ mode properties }
|
|
|
+
|
|
|
+ DIPF_IS_LACE = $00000001;
|
|
|
+ DIPF_IS_DUALPF = $00000002;
|
|
|
+ DIPF_IS_PF2PRI = $00000004;
|
|
|
+ DIPF_IS_HAM = $00000008;
|
|
|
+
|
|
|
+ DIPF_IS_ECS = $00000010; { note: ECS modes (SHIRES, VGA, AND **
|
|
|
+ PRODUCTIVITY) do not support **
|
|
|
+ attached sprites. **
|
|
|
+ }
|
|
|
+ DIPF_IS_AA = $00010000; { AA modes - may only be available
|
|
|
+ ** if machine has correct memory
|
|
|
+ ** type to support required
|
|
|
+ ** bandwidth - check availability.
|
|
|
+ ** (V39)
|
|
|
+ }
|
|
|
+ DIPF_IS_PAL = $00000020;
|
|
|
+ DIPF_IS_SPRITES = $00000040;
|
|
|
+ DIPF_IS_GENLOCK = $00000080;
|
|
|
+
|
|
|
+ DIPF_IS_WB = $00000100;
|
|
|
+ DIPF_IS_DRAGGABLE = $00000200;
|
|
|
+ DIPF_IS_PANELLED = $00000400;
|
|
|
+ DIPF_IS_BEAMSYNC = $00000800;
|
|
|
+
|
|
|
+ DIPF_IS_EXTRAHALFBRITE = $00001000;
|
|
|
+
|
|
|
+{ The following DIPF_IS_... flags are new for V39 }
|
|
|
+ DIPF_IS_SPRITES_ATT = $00002000; { supports attached sprites }
|
|
|
+ DIPF_IS_SPRITES_CHNG_RES = $00004000; { supports variable sprite resolution }
|
|
|
+ DIPF_IS_SPRITES_BORDER = $00008000; { sprite can be displayed in the border }
|
|
|
+ DIPF_IS_SCANDBL = $00020000; { scan doubled }
|
|
|
+ DIPF_IS_SPRITES_CHNG_BASE = $00040000;
|
|
|
+ { can change the sprite base colour }
|
|
|
+ DIPF_IS_SPRITES_CHNG_PRI = $00080000;
|
|
|
+ { can change the sprite priority
|
|
|
+ ** with respect to the playfield(s).
|
|
|
+ }
|
|
|
+ DIPF_IS_DBUFFER = $00100000; { can support double buffering }
|
|
|
+ DIPF_IS_PROGBEAM = $00200000; { is a programmed beam-sync mode }
|
|
|
+ DIPF_IS_FOREIGN = $80000000; { this mode is not native to the Amiga }
|
|
|
+
|
|
|
+Type
|
|
|
+ pDimensionInfo =^tDimensionInfo;
|
|
|
+ tDimensionInfo = record
|
|
|
+ Header : tQueryHeader;
|
|
|
+ MaxDepth, { log2( max number of colors ) }
|
|
|
+ MinRasterWidth, { minimum width in pixels }
|
|
|
+ MinRasterHeight, { minimum height in pixels }
|
|
|
+ MaxRasterWidth, { maximum width in pixels }
|
|
|
+ MaxRasterHeight : Word; { maximum height in pixels }
|
|
|
+ Nominal, { "standard" dimensions }
|
|
|
+ MaxOScan, { fixed, hardware dependant }
|
|
|
+ VideoOScan, { fixed, hardware dependant }
|
|
|
+ TxtOScan, { editable via preferences }
|
|
|
+ StdOScan : tRectangle; { editable via preferences }
|
|
|
+ pad : Array[0..13] of Byte;
|
|
|
+ reserved : Array[0..1] of Longint; { terminator }
|
|
|
+ END;
|
|
|
+
|
|
|
+ pMonitorInfo = ^tMonitorInfo;
|
|
|
+ tMonitorInfo = record
|
|
|
+ Header : tQueryHeader;
|
|
|
+ Mspc : pMonitorSpec; { pointer to monitor specification }
|
|
|
+ ViewPosition, { editable via preferences }
|
|
|
+ ViewResolution : tPoint; { standard monitor ticks-per-pixel }
|
|
|
+ ViewPositionRange : tRectangle; { fixed, hardware dependant }
|
|
|
+ TotalRows, { display height in scanlines }
|
|
|
+ TotalColorClocks, { scanline width in 280 ns units }
|
|
|
+ MinRow : Word; { absolute minimum active scanline }
|
|
|
+ Compatibility : smallint; { how this coexists with others }
|
|
|
+ pad : Array[0..31] of Byte;
|
|
|
+ MouseTicks : tPoint;
|
|
|
+ DefaultViewPosition : tPoint;
|
|
|
+ PreferredModeID : Cardinal;
|
|
|
+ reserved : Array[0..1] of Cardinal; { terminator }
|
|
|
+ END;
|
|
|
+
|
|
|
+{ monitor compatibility }
|
|
|
+
|
|
|
+CONST
|
|
|
+ MCOMPAT_MIXED = 0; { can share display with other MCOMPAT_MIXED }
|
|
|
+ MCOMPAT_SELF = 1; { can share only within same monitor }
|
|
|
+ MCOMPAT_NOBODY= -1; { only one viewport at a time }
|
|
|
+
|
|
|
+ DISPLAYNAMELEN = 32;
|
|
|
+
|
|
|
+Type
|
|
|
+ pNameInfo = ^tNameInfo;
|
|
|
+ tNameInfo = record
|
|
|
+ Header : tQueryHeader;
|
|
|
+ Name : Array[0..DISPLAYNAMELEN-1] of Char;
|
|
|
+ reserved : Array[0..1] of Cardinal; { terminator }
|
|
|
+ END;
|
|
|
+
|
|
|
+
|
|
|
+{****************************************************************************}
|
|
|
+
|
|
|
+{ The following VecInfo structure is PRIVATE, for our use only
|
|
|
+ * Touch these, and burn! (V39)
|
|
|
+ }
|
|
|
+Type
|
|
|
+ pVecInfo = ^tVecInfo;
|
|
|
+ tVecInfo = record
|
|
|
+ Header : tQueryHeader;
|
|
|
+ Vec : Pointer;
|
|
|
+ Data : Pointer;
|
|
|
+ vi_Type : WORD; { Type in C Includes }
|
|
|
+ pad : Array[0..2] of WORD;
|
|
|
+ reserved : Array[0..1] of Cardinal;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+CONST
|
|
|
+ VTAG_END_CM = $00000000;
|
|
|
+ VTAG_CHROMAKEY_CLR = $80000000;
|
|
|
+ VTAG_CHROMAKEY_SET = $80000001;
|
|
|
+ VTAG_BITPLANEKEY_CLR = $80000002;
|
|
|
+ VTAG_BITPLANEKEY_SET = $80000003;
|
|
|
+ VTAG_BORDERBLANK_CLR = $80000004;
|
|
|
+ VTAG_BORDERBLANK_SET = $80000005;
|
|
|
+ VTAG_BORDERNOTRANS_CLR = $80000006;
|
|
|
+ VTAG_BORDERNOTRANS_SET = $80000007;
|
|
|
+ VTAG_CHROMA_PEN_CLR = $80000008;
|
|
|
+ VTAG_CHROMA_PEN_SET = $80000009;
|
|
|
+ VTAG_CHROMA_PLANE_SET = $8000000A;
|
|
|
+ VTAG_ATTACH_CM_SET = $8000000B;
|
|
|
+ VTAG_NEXTBUF_CM = $8000000C;
|
|
|
+ VTAG_BATCH_CM_CLR = $8000000D;
|
|
|
+ VTAG_BATCH_CM_SET = $8000000E;
|
|
|
+ VTAG_NORMAL_DISP_GET = $8000000F;
|
|
|
+ VTAG_NORMAL_DISP_SET = $80000010;
|
|
|
+ VTAG_COERCE_DISP_GET = $80000011;
|
|
|
+ VTAG_COERCE_DISP_SET = $80000012;
|
|
|
+ VTAG_VIEWPORTEXTRA_GET = $80000013;
|
|
|
+ VTAG_VIEWPORTEXTRA_SET = $80000014;
|
|
|
+ VTAG_CHROMAKEY_GET = $80000015;
|
|
|
+ VTAG_BITPLANEKEY_GET = $80000016;
|
|
|
+ VTAG_BORDERBLANK_GET = $80000017;
|
|
|
+ VTAG_BORDERNOTRANS_GET = $80000018;
|
|
|
+ VTAG_CHROMA_PEN_GET = $80000019;
|
|
|
+ VTAG_CHROMA_PLANE_GET = $8000001A;
|
|
|
+ VTAG_ATTACH_CM_GET = $8000001B;
|
|
|
+ VTAG_BATCH_CM_GET = $8000001C;
|
|
|
+ VTAG_BATCH_ITEMS_GET = $8000001D;
|
|
|
+ VTAG_BATCH_ITEMS_SET = $8000001E;
|
|
|
+ VTAG_BATCH_ITEMS_ADD = $8000001F;
|
|
|
+ VTAG_VPMODEID_GET = $80000020;
|
|
|
+ VTAG_VPMODEID_SET = $80000021;
|
|
|
+ VTAG_VPMODEID_CLR = $80000022;
|
|
|
+ VTAG_USERCLIP_GET = $80000023;
|
|
|
+ VTAG_USERCLIP_SET = $80000024;
|
|
|
+ VTAG_USERCLIP_CLR = $80000025;
|
|
|
+{ The following tags are V39 specific. They will be ignored (returing error -3) by
|
|
|
+ earlier versions }
|
|
|
+ VTAG_PF1_BASE_GET = $80000026;
|
|
|
+ VTAG_PF2_BASE_GET = $80000027;
|
|
|
+ VTAG_SPEVEN_BASE_GET = $80000028;
|
|
|
+ VTAG_SPODD_BASE_GET = $80000029;
|
|
|
+ VTAG_PF1_BASE_SET = $8000002a;
|
|
|
+ VTAG_PF2_BASE_SET = $8000002b;
|
|
|
+ VTAG_SPEVEN_BASE_SET = $8000002c;
|
|
|
+ VTAG_SPODD_BASE_SET = $8000002d;
|
|
|
+ VTAG_BORDERSPRITE_GET = $8000002e;
|
|
|
+ VTAG_BORDERSPRITE_SET = $8000002f;
|
|
|
+ VTAG_BORDERSPRITE_CLR = $80000030;
|
|
|
+ VTAG_SPRITERESN_SET = $80000031;
|
|
|
+ VTAG_SPRITERESN_GET = $80000032;
|
|
|
+ VTAG_PF1_TO_SPRITEPRI_SET = $80000033;
|
|
|
+ VTAG_PF1_TO_SPRITEPRI_GET = $80000034;
|
|
|
+ VTAG_PF2_TO_SPRITEPRI_SET = $80000035;
|
|
|
+ VTAG_PF2_TO_SPRITEPRI_GET = $80000036;
|
|
|
+ VTAG_IMMEDIATE = $80000037;
|
|
|
+ VTAG_FULLPALETTE_SET = $80000038;
|
|
|
+ VTAG_FULLPALETTE_GET = $80000039;
|
|
|
+ VTAG_FULLPALETTE_CLR = $8000003A;
|
|
|
+ VTAG_DEFSPRITERESN_SET = $8000003B;
|
|
|
+ VTAG_DEFSPRITERESN_GET = $8000003C;
|
|
|
+
|
|
|
+{ all the following tags follow the new, rational standard for videocontrol tags:
|
|
|
+ * VC_xxx,state set the state of attribute 'xxx' to value 'state'
|
|
|
+ * VC_xxx_QUERY,&var get the state of attribute 'xxx' and store it into the longword
|
|
|
+ * pointed to by &var.
|
|
|
+ *
|
|
|
+ * The following are new for V40:
|
|
|
+ }
|
|
|
+
|
|
|
+ VC_IntermediateCLUpdate = $80000080;
|
|
|
+ { default=true. When set graphics will update the intermediate copper
|
|
|
+ * lists on color changes, etc. When false, it won't, and will be faster.
|
|
|
+ }
|
|
|
+ VC_IntermediateCLUpdate_Query = $80000081;
|
|
|
+
|
|
|
+ VC_NoColorPaletteLoad = $80000082;
|
|
|
+ { default = false. When set, graphics will only load color 0
|
|
|
+ * for this ViewPort, and so the ViewPort's colors will come
|
|
|
+ * from the previous ViewPort's.
|
|
|
+ *
|
|
|
+ * NB - Using this tag and VTAG_FULLPALETTE_SET together is undefined.
|
|
|
+ }
|
|
|
+ VC_NoColorPaletteLoad_Query = $80000083;
|
|
|
+
|
|
|
+ VC_DUALPF_Disable = $80000084;
|
|
|
+ { default = false. When this flag is set, the dual-pf bit
|
|
|
+ in Dual-Playfield screens will be turned off. Even bitplanes
|
|
|
+ will still come from the first BitMap and odd bitplanes
|
|
|
+ from the second BitMap, and both R[xy]Offsets will be
|
|
|
+ considered. This can be used (with appropriate palette
|
|
|
+ selection) for cross-fades between differently scrolling
|
|
|
+ images.
|
|
|
+ When this flag is turned on, colors will be loaded for
|
|
|
+ the viewport as if it were a single viewport of depth
|
|
|
+ depth1+depth2 }
|
|
|
+ VC_DUALPF_Disable_Query = $80000085;
|
|
|
+
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+ SPRITE_ATTACHED = $80;
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ pSimpleSprite = ^tSimpleSprite;
|
|
|
+ tSimpleSprite = record
|
|
|
+ posctldata : Pointer;
|
|
|
+ height : Word;
|
|
|
+ x,y : Word; { current position }
|
|
|
+ num : Word;
|
|
|
+ end;
|
|
|
+
|
|
|
+ pExtSprite = ^tExtSprite;
|
|
|
+ tExtSprite = record
|
|
|
+ es_SimpleSprite : tSimpleSprite; { conventional simple sprite structure }
|
|
|
+ es_wordwidth : WORD; { graphics use only, subject to change }
|
|
|
+ es_flags : WORD; { graphics use only, subject to change }
|
|
|
+ end;
|
|
|
+
|
|
|
+const
|
|
|
+{ tags for AllocSpriteData() }
|
|
|
+ SPRITEA_Width = $81000000;
|
|
|
+ SPRITEA_XReplication = $81000002;
|
|
|
+ SPRITEA_YReplication = $81000004;
|
|
|
+ SPRITEA_OutputHeight = $81000006;
|
|
|
+ SPRITEA_Attached = $81000008;
|
|
|
+ SPRITEA_OldDataFormat = $8100000a; { MUST pass in outputheight if using this tag }
|
|
|
+
|
|
|
+{ tags for GetExtSprite() }
|
|
|
+ GSTAG_SPRITE_NUM = $82000020;
|
|
|
+ GSTAG_ATTACHED = $82000022;
|
|
|
+ GSTAG_SOFTSPRITE = $82000024;
|
|
|
+
|
|
|
+{ tags valid for either GetExtSprite or ChangeExtSprite }
|
|
|
+ GSTAG_SCANDOUBLED = $83000000; { request "NTSC-Like" height if possible. }
|
|
|
+
|
|
|
+
|
|
|
+Type
|
|
|
+ pBitScaleArgs = ^tBitScaleArgs;
|
|
|
+ tBitScaleArgs = record
|
|
|
+ bsa_SrcX, bsa_SrcY, { source origin }
|
|
|
+ bsa_SrcWidth, bsa_SrcHeight, { source size }
|
|
|
+ bsa_XSrcFactor, bsa_YSrcFactor, { scale factor denominators }
|
|
|
+ bsa_DestX, bsa_DestY, { destination origin }
|
|
|
+ bsa_DestWidth, bsa_DestHeight, { destination size result }
|
|
|
+ bsa_XDestFactor, bsa_YDestFactor : Word; { scale factor numerators }
|
|
|
+ bsa_SrcBitMap, { source BitMap }
|
|
|
+ bsa_DestBitMap : pBitMap; { destination BitMap }
|
|
|
+ bsa_Flags : Cardinal; { reserved. Must be zero! }
|
|
|
+ bsa_XDDA, bsa_YDDA : Word; { reserved }
|
|
|
+ bsa_Reserved1,
|
|
|
+ bsa_Reserved2 : Longint;
|
|
|
+ END;
|
|
|
+
|
|
|
+ { tag definitions for GetRPAttr, SetRPAttr }
|
|
|
+
|
|
|
+const
|
|
|
+ RPTAG_Font = $80000000; { get/set font }
|
|
|
+ RPTAG_APen = $80000002; { get/set apen }
|
|
|
+ RPTAG_BPen = $80000003; { get/set bpen }
|
|
|
+ RPTAG_DrMd = $80000004; { get/set draw mode }
|
|
|
+ RPTAG_OutlinePen = $80000005; { get/set outline pen. corrected case. }
|
|
|
+ RPTAG_WriteMask = $80000006; { get/set WriteMask }
|
|
|
+ RPTAG_MaxPen = $80000007; { get/set maxpen }
|
|
|
+
|
|
|
+ RPTAG_DrawBounds = $80000008; { get only rastport draw bounds. pass &rect }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+TYPE
|
|
|
+
|
|
|
+ pRegionRectangle = ^tRegionRectangle;
|
|
|
+ tRegionRectangle = record
|
|
|
+ Next, Prev : pRegionRectangle;
|
|
|
+ bounds : tRectangle;
|
|
|
+ END;
|
|
|
+
|
|
|
+ pRegion = ^tRegion;
|
|
|
+ tRegion = record
|
|
|
+ bounds : tRectangle;
|
|
|
+ RegionRectangle : pRegionRectangle;
|
|
|
+ END;
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ pGfxBase = ^tGfxBase;
|
|
|
+ tGfxBase = record
|
|
|
+ LibNode : tLibrary;
|
|
|
+ ActiView : pView; { ViewPtr }
|
|
|
+ copinit : pcopinit; { (copinitptr) ptr to copper start up list }
|
|
|
+ cia : Pointer; { for 8520 resource use }
|
|
|
+ blitter : Pointer; { for future blitter resource use }
|
|
|
+ LOFlist : Pointer;
|
|
|
+ SHFlist : Pointer;
|
|
|
+ blthd,
|
|
|
+ blttl : pbltnode;
|
|
|
+ bsblthd,
|
|
|
+ bsblttl : pbltnode; { Previous four are (bltnodeptr) }
|
|
|
+ vbsrv,
|
|
|
+ timsrv,
|
|
|
+ bltsrv : tInterrupt;
|
|
|
+ TextFonts : tList;
|
|
|
+ DefaultFont : pTextFont; { TextFontPtr }
|
|
|
+ Modes : Word; { copy of current first bplcon0 }
|
|
|
+ VBlank : Shortint;
|
|
|
+ Debug : Shortint;
|
|
|
+ BeamSync : smallint;
|
|
|
+ system_bplcon0 : smallint; { it is ored into each bplcon0 for display }
|
|
|
+ SpriteReserved : Byte;
|
|
|
+ bytereserved : Byte;
|
|
|
+ Flags : Word;
|
|
|
+ BlitLock : smallint;
|
|
|
+ BlitNest : smallint;
|
|
|
+
|
|
|
+ BlitWaitQ : tList;
|
|
|
+ BlitOwner : pTask; { TaskPtr }
|
|
|
+ TOF_WaitQ : tList;
|
|
|
+ DisplayFlags : Word; { NTSC PAL GENLOC etc}
|
|
|
+
|
|
|
+ { Display flags are determined at power on }
|
|
|
+
|
|
|
+ SimpleSprites : Pointer; { SimpleSpritePtr ptr }
|
|
|
+ MaxDisplayRow : Word; { hardware stuff, do not use }
|
|
|
+ MaxDisplayColumn : Word; { hardware stuff, do not use }
|
|
|
+ NormalDisplayRows : Word;
|
|
|
+ NormalDisplayColumns : Word;
|
|
|
+
|
|
|
+ { the following are for standard non interlace, 1/2 wb width }
|
|
|
+
|
|
|
+ NormalDPMX : Word; { Dots per meter on display }
|
|
|
+ NormalDPMY : Word; { Dots per meter on display }
|
|
|
+ LastChanceMemory : pSignalSemaphore; { SignalSemaphorePtr }
|
|
|
+ LCMptr : Pointer;
|
|
|
+ MicrosPerLine : Word; { 256 time usec/line }
|
|
|
+ MinDisplayColumn : Word;
|
|
|
+ ChipRevBits0 : Byte;
|
|
|
+ MemType : Byte;
|
|
|
+ crb_reserved : Array[0..3] of Byte;
|
|
|
+ monitor_id : Word; { normally null }
|
|
|
+ hedley : Array[0..7] of Cardinal;
|
|
|
+ hedley_sprites : Array[0..7] of Cardinal; { sprite ptrs for intuition mouse }
|
|
|
+ hedley_sprites1 : Array[0..7] of Cardinal; { sprite ptrs for intuition mouse }
|
|
|
+ hedley_count : smallint;
|
|
|
+ hedley_flags : Word;
|
|
|
+ hedley_tmp : smallint;
|
|
|
+ hash_table : Pointer;
|
|
|
+ current_tot_rows : Word;
|
|
|
+ current_tot_cclks : Word;
|
|
|
+ hedley_hint : Byte;
|
|
|
+ hedley_hint2 : Byte;
|
|
|
+ nreserved : Array[0..3] of Cardinal;
|
|
|
+ a2024_sync_raster : Pointer;
|
|
|
+ control_delta_pal : Word;
|
|
|
+ control_delta_ntsc : Word;
|
|
|
+ current_monitor : pMonitorSpec;
|
|
|
+ MonitorList : tList;
|
|
|
+ default_monitor : pMonitorSpec;
|
|
|
+ MonitorListSemaphore : pSignalSemaphore;
|
|
|
+ DisplayInfoDataBase : Pointer;
|
|
|
+ TopLine : Word;
|
|
|
+ ActiViewCprSemaphore : pSignalSemaphore;
|
|
|
+ UtilityBase : Pointer; { for hook AND tag utilities }
|
|
|
+ ExecBase : Pointer; { to link with rom.lib }
|
|
|
+ bwshifts : Pointer;
|
|
|
+ StrtFetchMasks,
|
|
|
+ StopFetchMasks,
|
|
|
+ Overrun,
|
|
|
+ RealStops : Pointer;
|
|
|
+ SpriteWidth, { current width (in words) of sprites }
|
|
|
+ SpriteFMode : WORD; { current sprite fmode bits }
|
|
|
+ SoftSprites, { bit mask of size change knowledgeable sprites }
|
|
|
+ arraywidth : Shortint;
|
|
|
+ DefaultSpriteWidth : WORD; { what width intuition wants }
|
|
|
+ SprMoveDisable : Shortint;
|
|
|
+ WantChips,
|
|
|
+ BoardMemType,
|
|
|
+ Bugs : Byte;
|
|
|
+ gb_LayersBase : Pointer;
|
|
|
+ ColorMask : Cardinal;
|
|
|
+ IVector,
|
|
|
+ IData : Pointer;
|
|
|
+ SpecialCounter : Cardinal; { special for double buffering }
|
|
|
+ DBList : Pointer;
|
|
|
+ MonitorFlags : WORD;
|
|
|
+ ScanDoubledSprites,
|
|
|
+ BP3Bits : Byte;
|
|
|
+ MonitorVBlank : tAnalogSignalInterval;
|
|
|
+ natural_monitor : pMonitorSpec;
|
|
|
+ ProgData : Pointer;
|
|
|
+ ExtSprites : Byte;
|
|
|
+ pad3 : Byte;
|
|
|
+ GfxFlags : WORD;
|
|
|
+ VBCounter : Cardinal;
|
|
|
+ HashTableSemaphore : pSignalSemaphore;
|
|
|
+ HWEmul : Array[0..8] of Pointer;
|
|
|
+ end;
|
|
|
+
|
|
|
+const
|
|
|
+
|
|
|
+ NTSC = 1;
|
|
|
+ GENLOC = 2;
|
|
|
+ PAL = 4;
|
|
|
+ TODA_SAFE = 8;
|
|
|
+
|
|
|
+ BLITMSG_FAULT = 4;
|
|
|
+
|
|
|
+{ bits defs for ChipRevBits }
|
|
|
+ GFXB_BIG_BLITS = 0 ;
|
|
|
+ GFXB_HR_AGNUS = 0 ;
|
|
|
+ GFXB_HR_DENISE = 1 ;
|
|
|
+ GFXB_AA_ALICE = 2 ;
|
|
|
+ GFXB_AA_LISA = 3 ;
|
|
|
+ GFXB_AA_MLISA = 4 ; { internal use only. }
|
|
|
+
|
|
|
+ GFXF_BIG_BLITS = 1 ;
|
|
|
+ GFXF_HR_AGNUS = 1 ;
|
|
|
+ GFXF_HR_DENISE = 2 ;
|
|
|
+ GFXF_AA_ALICE = 4 ;
|
|
|
+ GFXF_AA_LISA = 8 ;
|
|
|
+ GFXF_AA_MLISA = 16; { internal use only }
|
|
|
+
|
|
|
+{ Pass ONE of these to SetChipRev() }
|
|
|
+ SETCHIPREV_A = GFXF_HR_AGNUS;
|
|
|
+ SETCHIPREV_ECS = (GFXF_HR_AGNUS OR GFXF_HR_DENISE);
|
|
|
+ SETCHIPREV_AA = (GFXF_AA_ALICE OR GFXF_AA_LISA OR SETCHIPREV_ECS);
|
|
|
+ SETCHIPREV_BEST= $ffffffff;
|
|
|
+
|
|
|
+{ memory type }
|
|
|
+ BUS_16 = 0;
|
|
|
+ NML_CAS = 0;
|
|
|
+ BUS_32 = 1;
|
|
|
+ DBL_CAS = 2;
|
|
|
+ BANDWIDTH_1X = (BUS_16 OR NML_CAS);
|
|
|
+ BANDWIDTH_2XNML= BUS_32;
|
|
|
+ BANDWIDTH_2XDBL= DBL_CAS;
|
|
|
+ BANDWIDTH_4X = (BUS_32 OR DBL_CAS);
|
|
|
+
|
|
|
+{ GfxFlags (private) }
|
|
|
+ NEW_DATABASE = 1;
|
|
|
+
|
|
|
+ GRAPHICSNAME : PChar = 'graphics.library';
|
|
|
+
|
|
|
+
|
|
|
+var
|
|
|
+ GfxBase : Pointer;
|
|
|
+
|
|
|
+
|
|
|
+function BltBitMap(srcBitMap : pBitMap location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destBitMap : pBitMap location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6'; mask : CARDINAL location 'd7'; tempA : pCHAR location 'a2') : LongInt;
|
|
|
+SysCall GfxBase 030;
|
|
|
+
|
|
|
+procedure BltTemplate(source : pCHAR location 'a0'; xSrc : LongInt location 'd0'; srcMod : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5');
|
|
|
+SysCall GfxBase 036;
|
|
|
+
|
|
|
+procedure ClearEOL(rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 042;
|
|
|
+
|
|
|
+procedure ClearScreen(rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 048;
|
|
|
+
|
|
|
+function TextLength(rp : pRastPort location 'a1'; string1 : pSHORTINT location 'a0'; count : CARDINAL location 'd0') : INTEGER;
|
|
|
+SysCall GfxBase 054;
|
|
|
+
|
|
|
+function Text(rp : pRastPort location 'a1'; string1: pSHORTINT location 'a0'; count : CARDINAL location 'd0') : LongInt;
|
|
|
+SysCall GfxBase 060;
|
|
|
+
|
|
|
+function SetFont(rp : pRastPort location 'a1'; textFont : pTextFont location 'a0') : LongInt;
|
|
|
+SysCall GfxBase 066;
|
|
|
+
|
|
|
+function OpenFont(textAttr : pTextAttr location 'a0') : pTextFont;
|
|
|
+SysCall GfxBase 072;
|
|
|
+
|
|
|
+procedure CloseFont(textFont : pTextFont location 'a1');
|
|
|
+SysCall GfxBase 078;
|
|
|
+
|
|
|
+function AskSoftStyle(rp : pRastPort location 'a1') : CARDINAL;
|
|
|
+SysCall GfxBase 084;
|
|
|
+
|
|
|
+function SetSoftStyle(rp : pRastPort location 'a1'; style : CARDINAL location 'd0'; enable : CARDINAL location 'd1') : CARDINAL;
|
|
|
+SysCall GfxBase 090;
|
|
|
+
|
|
|
+procedure AddBob(bob : pBob location 'a0'; rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 096;
|
|
|
+
|
|
|
+procedure AddVSprite(vSprite : pVSprite location 'a0'; rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 102;
|
|
|
+
|
|
|
+procedure DoCollision(rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 108;
|
|
|
+
|
|
|
+procedure DrawGList(rp : pRastPort location 'a1'; vp : pViewPort location 'a0');
|
|
|
+SysCall GfxBase 114;
|
|
|
+
|
|
|
+procedure InitGels(head : pVSprite location 'a0'; tail : pVSprite location 'a1'; gelsInfo : pGelsInfo location 'a2');
|
|
|
+SysCall GfxBase 120;
|
|
|
+
|
|
|
+procedure InitMasks(vSprite : pVSprite location 'a0');
|
|
|
+SysCall GfxBase 126;
|
|
|
+
|
|
|
+procedure RemIBob(bob : pBob location 'a0'; rp : pRastPort location 'a1'; vp : pViewPort location 'a2');
|
|
|
+SysCall GfxBase 132;
|
|
|
+
|
|
|
+procedure RemVSprite(vSprite : pVSprite location 'a0');
|
|
|
+SysCall GfxBase 138;
|
|
|
+
|
|
|
+procedure SortGList(rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 150;
|
|
|
+
|
|
|
+procedure AddAnimOb(anOb : pAnimOb location 'a0'; anKey : ppAnimOb location 'a1'; rp : pRastPort location 'a2');
|
|
|
+SysCall GfxBase 156;
|
|
|
+
|
|
|
+procedure Animate(anKey : ppAnimOb location 'a0'; rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 162;
|
|
|
+
|
|
|
+function GetGBuffers(anOb : pAnimOb location 'a0'; rp : pRastPort location 'a1'; flag : LongInt location 'd0') : BOOLEAN;
|
|
|
+SysCall GfxBase 168;
|
|
|
+
|
|
|
+procedure InitGMasks(anOb : pAnimOb location 'a0');
|
|
|
+SysCall GfxBase 174;
|
|
|
+
|
|
|
+procedure DrawEllipse(rp : pRastPort location 'a1'; xCenter : LongInt location 'd0'; yCenter : LongInt location 'd1'; a : LongInt location 'd2'; b : LongInt location 'd3');
|
|
|
+SysCall GfxBase 180;
|
|
|
+
|
|
|
+function AreaEllipse(rp : pRastPort location 'a1'; xCenter : LongInt location 'd0'; yCenter : LongInt location 'd1'; a : LongInt location 'd2'; b : LongInt location 'd3') : LongInt;
|
|
|
+SysCall GfxBase 186;
|
|
|
+
|
|
|
+procedure LoadRGB4(vp : pViewPort location 'a0'; VAR colors : Integer location 'a1'; count : LongInt location 'd0');
|
|
|
+SysCall GfxBase 192;
|
|
|
+
|
|
|
+procedure InitRastPort(rp : pRastPort location 'a1');
|
|
|
+SysCall GfxBase 198;
|
|
|
+
|
|
|
+procedure InitVPort(vp : pViewPort location 'a0');
|
|
|
+SysCall GfxBase 204;
|
|
|
+
|
|
|
+function MrgCop(view : pView location 'a1') : CARDINAL;
|
|
|
+SysCall GfxBase 210;
|
|
|
+
|
|
|
+function MakeVPort(view : pView location 'a0'; vp : pViewPort location 'a1') : CARDINAL;
|
|
|
+SysCall GfxBase 216;
|
|
|
+
|
|
|
+procedure LoadView(view : pView location 'a1');
|
|
|
+SysCall GfxBase 222;
|
|
|
+
|
|
|
+procedure WaitBlit;
|
|
|
+SysCall GfxBase 228;
|
|
|
+
|
|
|
+procedure SetRast(rp : pRastPort location 'a1'; pen : CARDINAL location 'd0');
|
|
|
+SysCall GfxBase 234;
|
|
|
+
|
|
|
+procedure Move(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1');
|
|
|
+SysCall GfxBase 240;
|
|
|
+
|
|
|
+procedure Draw(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1');
|
|
|
+SysCall GfxBase 246;
|
|
|
+
|
|
|
+function AreaMove(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : LongInt;
|
|
|
+SysCall GfxBase 252;
|
|
|
+
|
|
|
+function AreaDraw(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : LongInt;
|
|
|
+SysCall GfxBase 258;
|
|
|
+
|
|
|
+function AreaEnd(rp : pRastPort location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 264;
|
|
|
+
|
|
|
+procedure WaitTOF;
|
|
|
+SysCall GfxBase 270;
|
|
|
+
|
|
|
+procedure QBlit(blit : pbltnode location 'a1');
|
|
|
+SysCall GfxBase 276;
|
|
|
+
|
|
|
+procedure InitArea(areaInfo : pAreaInfo location 'a0'; vectorBuffer : POINTER location 'a1'; maxVectors : LongInt location 'd0');
|
|
|
+SysCall GfxBase 282;
|
|
|
+
|
|
|
+procedure SetRGB4(vp : pViewPort location 'a0'; index : LongInt location 'd0'; red : CARDINAL location 'd1'; green : CARDINAL location 'd2'; blue : CARDINAL location 'd3');
|
|
|
+SysCall GfxBase 288;
|
|
|
+
|
|
|
+procedure QBSBlit(blit : pbltnode location 'a1');
|
|
|
+SysCall GfxBase 294;
|
|
|
+
|
|
|
+procedure BltClear(memBlock : pCHAR location 'a1'; byteCount : CARDINAL location 'd0'; flags : CARDINAL location 'd1');
|
|
|
+SysCall GfxBase 300;
|
|
|
+
|
|
|
+procedure RectFill(rp : pRastPort location 'a1'; xMin : LongInt location 'd0'; yMin : LongInt location 'd1'; xMax : LongInt location 'd2'; yMax : LongInt location 'd3');
|
|
|
+SysCall GfxBase 306;
|
|
|
+
|
|
|
+procedure BltPattern(rp : pRastPort location 'a1'; mask : pCHAR location 'a0'; xMin : LongInt location 'd0'; yMin : LongInt location 'd1'; xMax : LongInt location 'd2'; yMax : LongInt location 'd3'; maskBPR : CARDINAL location 'd4');
|
|
|
+SysCall GfxBase 312;
|
|
|
+
|
|
|
+function ReadPixel(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : CARDINAL;
|
|
|
+SysCall GfxBase 318;
|
|
|
+
|
|
|
+function WritePixel(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : LongInt;
|
|
|
+SysCall GfxBase 324;
|
|
|
+
|
|
|
+function Flood(rp : pRastPort location 'a1'; mode : CARDINAL location 'd2'; x : LongInt location 'd0'; y : LongInt location 'd1') : BOOLEAN;
|
|
|
+SysCall GfxBase 330;
|
|
|
+
|
|
|
+procedure PolyDraw(rp : pRastPort location 'a1'; count : LongInt location 'd0'; VAR polyTable : INTEGER location 'a0');
|
|
|
+SysCall GfxBase 336;
|
|
|
+
|
|
|
+procedure SetAPen(rp : pRastPort location 'a1'; pen : CARDINAL location 'd0');
|
|
|
+SysCall GfxBase 342;
|
|
|
+
|
|
|
+procedure SetBPen(rp : pRastPort location 'a1'; pen : CARDINAL location 'd0');
|
|
|
+SysCall GfxBase 348;
|
|
|
+
|
|
|
+procedure SetDrMd(rp : pRastPort location 'a1'; drawMode : CARDINAL location 'd0');
|
|
|
+SysCall GfxBase 354;
|
|
|
+
|
|
|
+procedure InitView(view : pView location 'a1');
|
|
|
+SysCall GfxBase 360;
|
|
|
+
|
|
|
+procedure CBump(copList : pUCopList location 'a1');
|
|
|
+SysCall GfxBase 366;
|
|
|
+
|
|
|
+procedure CMove(copList : pUCopList location 'a1'; destination : POINTER location 'd0'; data : LongInt location 'd1');
|
|
|
+SysCall GfxBase 372;
|
|
|
+
|
|
|
+procedure CWait(copList : pUCopList location 'a1'; v : LongInt location 'd0'; h : LongInt location 'd1');
|
|
|
+SysCall GfxBase 378;
|
|
|
+
|
|
|
+function VBeamPos : LongInt;
|
|
|
+SysCall GfxBase 384;
|
|
|
+
|
|
|
+procedure InitBitMap(bitMap : pBitMap location 'a0'; depth : LongInt location 'd0'; width : LongInt location 'd1'; height : LongInt location 'd2');
|
|
|
+SysCall GfxBase 390;
|
|
|
+
|
|
|
+procedure ScrollRaster(rp : pRastPort location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; xMin : LongInt location 'd2'; yMin : LongInt location 'd3'; xMax : LongInt location 'd4'; yMax : LongInt location 'd5');
|
|
|
+SysCall GfxBase 396;
|
|
|
+
|
|
|
+procedure WaitBOVP(vp : pViewPort location 'a0');
|
|
|
+SysCall GfxBase 402;
|
|
|
+
|
|
|
+function GetSprite(sprite : pSimpleSprite location 'a0'; num : LongInt location 'd0') : INTEGER;
|
|
|
+SysCall GfxBase 408;
|
|
|
+
|
|
|
+procedure FreeSprite(num : LongInt location 'd0');
|
|
|
+SysCall GfxBase 414;
|
|
|
+
|
|
|
+procedure ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; VAR newData : Integer location 'a2');
|
|
|
+SysCall GfxBase 420;
|
|
|
+
|
|
|
+procedure MoveSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1');
|
|
|
+SysCall GfxBase 426;
|
|
|
+
|
|
|
+procedure LockLayerRom(layer : pLayer location 'a5');
|
|
|
+SysCall GfxBase 432;
|
|
|
+
|
|
|
+procedure UnlockLayerRom(layer : pLayer location 'a5');
|
|
|
+SysCall GfxBase 438;
|
|
|
+
|
|
|
+procedure SyncSBitMap(layer : pLayer location 'a0');
|
|
|
+SysCall GfxBase 444;
|
|
|
+
|
|
|
+procedure CopySBitMap(layer : pLayer location 'a0');
|
|
|
+SysCall GfxBase 450;
|
|
|
+
|
|
|
+procedure OwnBlitter;
|
|
|
+SysCall GfxBase 456;
|
|
|
+
|
|
|
+procedure DisownBlitter;
|
|
|
+SysCall GfxBase 462;
|
|
|
+
|
|
|
+function InitTmpRas(tmpRas : pTmpRas location 'a0'; buffer : pCHAR location 'a1'; size : LongInt location 'd0') : pTmpRas;
|
|
|
+SysCall GfxBase 468;
|
|
|
+
|
|
|
+procedure AskFont(rp : pRastPort location 'a1'; textAttr : pTextAttr location 'a0');
|
|
|
+SysCall GfxBase 474;
|
|
|
+
|
|
|
+procedure AddFont(textFont : pTextFont location 'a1');
|
|
|
+SysCall GfxBase 480;
|
|
|
+
|
|
|
+procedure RemFont(textFont : pTextFont location 'a1');
|
|
|
+SysCall GfxBase 486;
|
|
|
+
|
|
|
+function AllocRaster(width : CARDINAL location 'd0'; height : CARDINAL location 'd1') : pCHAR;
|
|
|
+SysCall GfxBase 492;
|
|
|
+
|
|
|
+procedure FreeRaster(p : pCHAR location 'a0'; width : CARDINAL location 'd0'; height : CARDINAL location 'd1');
|
|
|
+SysCall GfxBase 498;
|
|
|
+
|
|
|
+procedure AndRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1');
|
|
|
+SysCall GfxBase 504;
|
|
|
+
|
|
|
+function OrRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 510;
|
|
|
+
|
|
|
+function NewRegion : pRegion;
|
|
|
+SysCall GfxBase 516;
|
|
|
+
|
|
|
+function ClearRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 522;
|
|
|
+
|
|
|
+procedure ClearRegion(region : pRegion location 'a0');
|
|
|
+SysCall GfxBase 528;
|
|
|
+
|
|
|
+procedure DisposeRegion(region : pRegion location 'a0');
|
|
|
+SysCall GfxBase 534;
|
|
|
+
|
|
|
+procedure FreeVPortCopLists(vp : pViewPort location 'a0');
|
|
|
+SysCall GfxBase 540;
|
|
|
+
|
|
|
+procedure FreeCopList(copList : pCopList location 'a0');
|
|
|
+SysCall GfxBase 546;
|
|
|
+
|
|
|
+procedure ClipBlit(srcRP : pRastPort location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6');
|
|
|
+SysCall GfxBase 552;
|
|
|
+
|
|
|
+function XorRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 558;
|
|
|
+
|
|
|
+procedure FreeCprList(cprList : pcprlist location 'a0');
|
|
|
+SysCall GfxBase 564;
|
|
|
+
|
|
|
+function GetColorMap(entries : LongInt location 'd0') : pColorMap;
|
|
|
+SysCall GfxBase 570;
|
|
|
+
|
|
|
+procedure FreeColorMap(colorMap : pColorMap location 'a0');
|
|
|
+SysCall GfxBase 576;
|
|
|
+
|
|
|
+function GetRGB4(colorMap : pColorMap location 'a0'; entry : LongInt location 'd0') : CARDINAL;
|
|
|
+SysCall GfxBase 582;
|
|
|
+
|
|
|
+procedure ScrollVPort(vp : pViewPort location 'a0');
|
|
|
+SysCall GfxBase 588;
|
|
|
+
|
|
|
+function UCopperListInit(uCopList : pUCopList location 'a0'; n : LongInt location 'd0') : pCopList;
|
|
|
+SysCall GfxBase 594;
|
|
|
+
|
|
|
+procedure FreeGBuffers(anOb : pAnimOb location 'a0'; rp : pRastPort location 'a1'; flag : LongInt location 'd0');
|
|
|
+SysCall GfxBase 600;
|
|
|
+
|
|
|
+procedure BltBitMapRastPort(srcBitMap : pBitMap location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6');
|
|
|
+SysCall GfxBase 606;
|
|
|
+
|
|
|
+function OrRegionRegion(srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 612;
|
|
|
+
|
|
|
+function XorRegionRegion(srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 618;
|
|
|
+
|
|
|
+function AndRegionRegion(srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 624;
|
|
|
+
|
|
|
+procedure SetRGB4CM(colorMap : pColorMap location 'a0'; index : LongInt location 'd0'; red : CARDINAL location 'd1'; green : CARDINAL location 'd2'; blue : CARDINAL location 'd3');
|
|
|
+SysCall GfxBase 630;
|
|
|
+
|
|
|
+procedure BltMaskBitMapRastPort(srcBitMap : pBitMap location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6'; bltMask : pCHAR location 'a2');
|
|
|
+SysCall GfxBase 636;
|
|
|
+
|
|
|
+function AttemptLockLayerRom(layer : pLayer location 'a5') : BOOLEAN;
|
|
|
+SysCall GfxBase 654;
|
|
|
+
|
|
|
+function GfxNew(gfxNodeType : CARDINAL location 'd0') : POINTER;
|
|
|
+SysCall GfxBase 660;
|
|
|
+
|
|
|
+procedure GfxFree(gfxNodePtr : POINTER location 'a0');
|
|
|
+SysCall GfxBase 666;
|
|
|
+
|
|
|
+procedure GfxAssociate(associateNode : POINTER location 'a0'; gfxNodePtr : POINTER location 'a1');
|
|
|
+SysCall GfxBase 672;
|
|
|
+
|
|
|
+procedure BitMapScale(bitScaleArgs : pBitScaleArgs location 'a0');
|
|
|
+SysCall GfxBase 678;
|
|
|
+
|
|
|
+function ScalerDiv(factor : CARDINAL location 'd0'; numerator : CARDINAL location 'd1'; denominator : CARDINAL location 'd2') : Integer;
|
|
|
+SysCall GfxBase 684;
|
|
|
+
|
|
|
+function TextExtent(rp : pRastPort location 'a1'; string1: pSHORTINT location 'a0'; count : LongInt location 'd0'; textExtent : pTextExtent location 'a2') : INTEGER;
|
|
|
+SysCall GfxBase 690;
|
|
|
+
|
|
|
+function TextFit(rp : pRastPort location 'a1'; string1: pSHORTINT location 'a0'; strLen : CARDINAL location 'd0'; textExtent : pTextExtent location 'a2'; constrainingExtent : pTextExtent location 'a3'; strDirection : LongInt location 'd1'; constrainingBitWidth : CARDINAL location 'd2'; constrainingBitHeight : CARDINAL location 'd3') : CARDINAL;
|
|
|
+SysCall GfxBase 696;
|
|
|
+
|
|
|
+function GfxLookUp(associateNode : POINTER location 'a0') : POINTER;
|
|
|
+SysCall GfxBase 702;
|
|
|
+
|
|
|
+function VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : BOOLEAN;
|
|
|
+SysCall GfxBase 708;
|
|
|
+
|
|
|
+function OpenMonitor(monitorName : pSHORTINT location 'a1'; displayID : CARDINAL location 'd0') : pMonitorSpec;
|
|
|
+SysCall GfxBase 714;
|
|
|
+
|
|
|
+function CloseMonitor(monitorSpec : pMonitorSpec location 'a0') : BOOLEAN;
|
|
|
+SysCall GfxBase 720;
|
|
|
+
|
|
|
+function FindDisplayInfo(displayID : CARDINAL location 'd0') : POINTER;
|
|
|
+SysCall GfxBase 726;
|
|
|
+
|
|
|
+function NextDisplayInfo(displayID : CARDINAL location 'd0') : CARDINAL;
|
|
|
+SysCall GfxBase 732;
|
|
|
+
|
|
|
+function GetDisplayInfoData(handle : POINTER location 'a0'; buf : POINTER location 'a1'; size : CARDINAL location 'd0'; tagID : CARDINAL location 'd1'; displayID : CARDINAL location 'd2') : CARDINAL;
|
|
|
+SysCall GfxBase 756;
|
|
|
+
|
|
|
+procedure FontExtent(font : pTextFont location 'a0'; fontExtent : pTextExtent location 'a1');
|
|
|
+SysCall GfxBase 762;
|
|
|
+
|
|
|
+function ReadPixelLine8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; width : CARDINAL location 'd2'; array1 : pCHAR location 'a2'; tempRP : pRastPort location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 768;
|
|
|
+
|
|
|
+function WritePixelLine8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; width : CARDINAL location 'd2'; array1 : pCHAR location 'a2'; tempRP : pRastPort location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 774;
|
|
|
+
|
|
|
+function ReadPixelArray8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; xstop : CARDINAL location 'd2'; ystop : CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp : pRastPort location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 780;
|
|
|
+
|
|
|
+function WritePixelArray8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; xstop : CARDINAL location 'd2'; ystop : CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp : pRastPort location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 786;
|
|
|
+
|
|
|
+function GetVPModeID(vp : pViewPort location 'a0') : LongInt;
|
|
|
+SysCall GfxBase 792;
|
|
|
+
|
|
|
+function ModeNotAvailable(modeID : CARDINAL location 'd0') : LongInt;
|
|
|
+SysCall GfxBase 798;
|
|
|
+
|
|
|
+function WeighTAMatch(reqTextAttr : pTTextAttr location 'a0'; targetTextAttr : pTextAttr location 'a1'; targetTags : pTagItem location 'a2') : INTEGER;
|
|
|
+SysCall GfxBase 804;
|
|
|
+
|
|
|
+procedure EraseRect(rp : pRastPort location 'a1'; xMin : LongInt location 'd0'; yMin : LongInt location 'd1'; xMax : LongInt location 'd2'; yMax : LongInt location 'd3');
|
|
|
+SysCall GfxBase 810;
|
|
|
+
|
|
|
+function ExtendFont(font : pTextFont location 'a0'; fontTags : pTagItem location 'a1') : CARDINAL;
|
|
|
+SysCall GfxBase 816;
|
|
|
+
|
|
|
+procedure StripFont(font : pTextFont location 'a0');
|
|
|
+SysCall GfxBase 822;
|
|
|
+
|
|
|
+function CalcIVG(v : pView location 'a0'; vp : pViewPort location 'a1') : Integer;
|
|
|
+SysCall GfxBase 828;
|
|
|
+
|
|
|
+function AttachPalExtra(cm : pColorMap location 'a0'; vp : pViewPort location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 834;
|
|
|
+
|
|
|
+function ObtainBestPenA(cm : pColorMap location 'a0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3'; tags : pTagItem location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 840;
|
|
|
+
|
|
|
+procedure SetRGB32(vp : pViewPort location 'a0'; n : CARDINAL location 'd0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3');
|
|
|
+SysCall GfxBase 852;
|
|
|
+
|
|
|
+function GetAPen(rp : pRastPort location 'a0') : CARDINAL;
|
|
|
+SysCall GfxBase 858;
|
|
|
+
|
|
|
+function GetBPen(rp : pRastPort location 'a0') : CARDINAL;
|
|
|
+SysCall GfxBase 864;
|
|
|
+
|
|
|
+function GetDrMd(rp : pRastPort location 'a0') : CARDINAL;
|
|
|
+SysCall GfxBase 870;
|
|
|
+
|
|
|
+function GetOutlinePen(rp : pRastPort location 'a0') : CARDINAL;
|
|
|
+SysCall GfxBase 876;
|
|
|
+
|
|
|
+procedure LoadRGB32(vp : pViewPort location 'a0'; VAR table : CARDINAL location 'a1');
|
|
|
+SysCall GfxBase 882;
|
|
|
+
|
|
|
+function SetChipRev(want : CARDINAL location 'd0') : CARDINAL;
|
|
|
+SysCall GfxBase 888;
|
|
|
+
|
|
|
+procedure SetABPenDrMd(rp : pRastPort location 'a1'; apen : CARDINAL location 'd0'; bpen : CARDINAL location 'd1'; drawmode : CARDINAL location 'd2');
|
|
|
+SysCall GfxBase 894;
|
|
|
+
|
|
|
+procedure GetRGB32(cm : pColorMap location 'a0'; firstcolor : CARDINAL location 'd0'; ncolors : CARDINAL location 'd1'; VAR table : CARDINAL location 'a1');
|
|
|
+SysCall GfxBase 900;
|
|
|
+
|
|
|
+function AllocBitMap(sizex : CARDINAL location 'd0'; sizey : CARDINAL location 'd1'; depth : CARDINAL location 'd2'; flags : CARDINAL location 'd3'; friend_bitmap : pBitMap location 'a0') : pBitMap;
|
|
|
+SysCall GfxBase 918;
|
|
|
+
|
|
|
+procedure FreeBitMap(bm : pBitMap location 'a0');
|
|
|
+SysCall GfxBase 924;
|
|
|
+
|
|
|
+function GetExtSpriteA(ss : pExtSprite location 'a2'; tags : pTagItem location 'a1') : LongInt;
|
|
|
+SysCall GfxBase 930;
|
|
|
+
|
|
|
+function CoerceMode(vp : pViewPort location 'a0'; monitorid : CARDINAL location 'd0'; flags : CARDINAL location 'd1') : CARDINAL;
|
|
|
+SysCall GfxBase 936;
|
|
|
+
|
|
|
+procedure ChangeVPBitMap(vp : pViewPort location 'a0'; bm : pBitMap location 'a1'; db : pDBufInfo location 'a2');
|
|
|
+SysCall GfxBase 942;
|
|
|
+
|
|
|
+procedure ReleasePen(cm : pColorMap location 'a0'; n : CARDINAL location 'd0');
|
|
|
+SysCall GfxBase 948;
|
|
|
+
|
|
|
+function ObtainPen(cm : pColorMap location 'a0'; n : CARDINAL location 'd0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3'; f : LongInt location 'd4') : CARDINAL;
|
|
|
+SysCall GfxBase 954;
|
|
|
+
|
|
|
+function GetBitMapAttr(bm : pBitMap location 'a0'; attrnum : CARDINAL location 'd1') : CARDINAL;
|
|
|
+SysCall GfxBase 960;
|
|
|
+
|
|
|
+function AllocDBufInfo(vp : pViewPort location 'a0') : pDBufInfo;
|
|
|
+SysCall GfxBase 966;
|
|
|
+
|
|
|
+procedure FreeDBufInfo(dbi : pDBufInfo location 'a1');
|
|
|
+SysCall GfxBase 972;
|
|
|
+
|
|
|
+function SetOutlinePen(rp : pRastPort location 'a0'; pen : CARDINAL location 'd0') : CARDINAL;
|
|
|
+SysCall GfxBase 978;
|
|
|
+
|
|
|
+function SetWriteMask(rp : pRastPort location 'a0'; msk : CARDINAL location 'd0') : CARDINAL;
|
|
|
+SysCall GfxBase 984;
|
|
|
+
|
|
|
+procedure SetMaxPen(rp : pRastPort location 'a0'; maxpen : CARDINAL location 'd0');
|
|
|
+SysCall GfxBase 990;
|
|
|
+
|
|
|
+procedure SetRGB32CM(cm : pColorMap location 'a0'; n : CARDINAL location 'd0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3');
|
|
|
+SysCall GfxBase 996;
|
|
|
+
|
|
|
+procedure ScrollRasterBF(rp : pRastPort location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; xMin : LongInt location 'd2'; yMin : LongInt location 'd3'; xMax : LongInt location 'd4'; yMax : LongInt location 'd5');
|
|
|
+SysCall GfxBase 1002;
|
|
|
+
|
|
|
+function FindColor(cm : pColorMap location 'a3'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3'; maxcolor : LongInt location 'd4') : LongInt;
|
|
|
+SysCall GfxBase 1008;
|
|
|
+
|
|
|
+function AllocSpriteDataA(bm : pBitMap location 'a2'; tags : pTagItem location 'a1') : pExtSprite;
|
|
|
+SysCall GfxBase 1020;
|
|
|
+
|
|
|
+function ChangeExtSpriteA(vp : pViewPort location 'a0'; oldsprite : pExtSprite location 'a1'; newsprite : pExtSprite location 'a2'; tags : pTagItem location 'a3') : LongInt;
|
|
|
+SysCall GfxBase 1026;
|
|
|
+
|
|
|
+procedure FreeSpriteData(sp : pExtSprite location 'a2');
|
|
|
+SysCall GfxBase 1032;
|
|
|
+
|
|
|
+procedure SetRPAttrsA(rp : pRastPort location 'a0'; tags : pTagItem location 'a1');
|
|
|
+SysCall GfxBase 1038;
|
|
|
+
|
|
|
+procedure GetRPAttrsA(rp : pRastPort location 'a0'; tags : pTagItem location 'a1');
|
|
|
+SysCall GfxBase 1044;
|
|
|
+
|
|
|
+function BestModeIDA(tags : pTagItem location 'a0') : CARDINAL;
|
|
|
+SysCall GfxBase 1050;
|
|
|
+
|
|
|
+procedure WriteChunkyPixels(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; xstop : CARDINAL location 'd2'; ystop : CARDINAL location 'd3'; array1: pCHAR location 'a2'; bytesperrow : LongInt location 'd4');
|
|
|
+SysCall GfxBase 1056;
|
|
|
+
|
|
|
+function OpenFontTagList(textattr : pTextAttr location 'a0'; tags : pTagItem location 'a1') : pTextFont;
|
|
|
+SysCall GfxBase 1062;
|
|
|
+
|
|
|
+
|
|
|
+{ gfxmacros }
|
|
|
+procedure BNDRYOFF (w: pRastPort);
|
|
|
+procedure InitAnimate (animkey: ppAnimOb);
|
|
|
+procedure SetAfPt(w: pRastPort;p: Pointer; n: Byte);
|
|
|
+procedure SetDrPt(w: pRastPort;p: Word);
|
|
|
+procedure SetOPen(w: pRastPort;c: Byte);
|
|
|
+procedure SetWrMsk(w: pRastPort; m: Byte);
|
|
|
+
|
|
|
+procedure SafeSetOutlinePen(w : pRastPort; c : byte);
|
|
|
+procedure SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
|
|
|
+
|
|
|
+procedure OFF_DISPLAY (cust: pCustom);
|
|
|
+procedure ON_DISPLAY (cust: pCustom);
|
|
|
+procedure OFF_SPRITE (cust: pCustom);
|
|
|
+procedure ON_SPRITE (cust: pCustom);
|
|
|
+procedure OFF_VBLANK (cust: pCustom);
|
|
|
+procedure ON_VBLANK (cust: pCustom);
|
|
|
+
|
|
|
+{ unit/library initialization }
|
|
|
+function InitGraphicsLibrary : boolean;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+
|
|
|
+procedure BNDRYOFF (w: pRastPort);
|
|
|
+begin
|
|
|
+ with w^ do Flags := Flags And (Not AREAOUTLINE);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure InitAnimate (animkey: ppAnimOb);
|
|
|
+begin
|
|
|
+ animkey^ := NIL;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure SetAfPt(w: pRastPort;p: Pointer; n: Byte);
|
|
|
+begin
|
|
|
+ with w^ do begin
|
|
|
+ ArePointern := p;
|
|
|
+ AreaPtSz := n;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure SetDrPt(w: pRastPort;p: Word);
|
|
|
+begin
|
|
|
+ with w^ do begin
|
|
|
+ LinePtrn := p;
|
|
|
+ Flags := Flags or FRST_doT;
|
|
|
+ linpatcnt := 15;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure SetOPen(w: pRastPort;c: Byte);
|
|
|
+begin
|
|
|
+ with w^ do begin
|
|
|
+ AOlPen := c;
|
|
|
+ Flags := Flags or AREAOUTLINE;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{ This function is fine, but For OS39 the SetWriteMask() gfx function
|
|
|
+ should be prefered because it SHOULD operate with gfx boards as well.
|
|
|
+ At least I hope it does.... }
|
|
|
+procedure SetWrMsk(w: pRastPort; m: Byte);
|
|
|
+begin
|
|
|
+ w^.Mask := m;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure SafeSetOutlinePen(w : pRastPort; c : byte);
|
|
|
+begin
|
|
|
+ IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN begin
|
|
|
+ w^.AOlPen := c;
|
|
|
+ w^.Flags := w^.Flags or AREAOUTLINE;
|
|
|
+ end ELSE begin
|
|
|
+ c := SetOutlinePen(w,c);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
|
|
|
+ VAR x : smallint ;
|
|
|
+begin
|
|
|
+ IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN w^.Mask := BYTE(m)
|
|
|
+ ELSE x := SetWriteMask( w, m );
|
|
|
+end;
|
|
|
+
|
|
|
+procedure OFF_DISPLAY (cust: pCustom);
|
|
|
+begin
|
|
|
+ cust^.dmacon := BITCLR or DMAF_RASTER;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure ON_DISPLAY (cust: pCustom);
|
|
|
+begin
|
|
|
+ cust^.dmacon := BITSET or DMAF_RASTER;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure OFF_SPRITE (cust: pCustom);
|
|
|
+begin
|
|
|
+ cust^.dmacon := BITCLR or DMAF_SPRITE;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure ON_SPRITE (cust: pCustom);
|
|
|
+begin
|
|
|
+ cust^.dmacon := BITSET or DMAF_SPRITE;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure OFF_VBLANK (cust: pCustom);
|
|
|
+begin
|
|
|
+ cust^.intena := BITCLR or INTF_VERTB;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure ON_VBLANK (cust: pCustom);
|
|
|
+begin
|
|
|
+ cust^.intena := BITSET or INTF_VERTB;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+const
|
|
|
+ { Change VERSION and LIBVERSION to proper values }
|
|
|
+ VERSION : string[2] = '50';
|
|
|
+ LIBVERSION : longword = 50;
|
|
|
+
|
|
|
+var
|
|
|
+ graphics_exit : Pointer;
|
|
|
+
|
|
|
+procedure CloseGraphicsLibrary;
|
|
|
+begin
|
|
|
+ ExitProc := graphics_exit;
|
|
|
+ if GfxBase <> nil then begin
|
|
|
+ CloseLibrary(GfxBase);
|
|
|
+ GfxBase := nil;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function InitGraphicsLibrary : boolean;
|
|
|
+begin
|
|
|
+ GfxBase := nil;
|
|
|
+ GfxBase := OpenLibrary(GRAPHICSNAME,LIBVERSION);
|
|
|
+ if GfxBase <> nil then begin
|
|
|
+ graphics_exit := ExitProc;
|
|
|
+ ExitProc := @CloseGraphicsLibrary;
|
|
|
+ InitGraphicsLibrary:=True;
|
|
|
+ end else begin
|
|
|
+ InitGraphicsLibrary:=False;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+end.
|
|
|
+
|
|
|
+{
|
|
|
+ $Log$
|
|
|
+ Revision 1.1 2004-11-16 21:18:31 karoly
|
|
|
+ * initial revision
|
|
|
+
|
|
|
+}
|