mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-29 12:23:46 +02:00

because -1 is a valid argument for this function there. This bug is also in the original AmigaOS C SDK, which specifies this argument as ULONG, and defines -1 as valid argument for it. git-svn-id: trunk@11981 -
2837 lines
101 KiB
ObjectPascal
2837 lines
101 KiB
ObjectPascal
{
|
|
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 gfxMove(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 : longint 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.
|