|
|
1.1 root 1: /*
2: * UAE - The U*nix Amiga Emulator
3: *
4: * Picasso96 Support Module Header
5: *
6: * Copyright 1997 Brian King <[email protected], [email protected]>
7: */
8:
9: #if defined PICASSO96_SUPPORTED
10:
11: #define PICASSO96
12:
13: #define JAM1 0
14: #define JAM2 1
15: #define COMP 2
16: #define INVERS 4
17:
18: struct ScreenResolution
19: {
20: uae_u32 width; /* in pixels */
21: uae_u32 height; /* in pixels */
22: };
23:
24: #define MAX_PICASSO_MODES 64
25:
26: struct PicassoResolution
27: {
28: struct Resolutions *next;
29: struct ScreenResolution res;
30: int depth;
31: int refresh;
32: char name[25];
33: };
34: extern struct PicassoResolution DisplayModes[MAX_PICASSO_MODES];
35:
36:
37: /* Types for RGBFormat used */
38: typedef enum {
39: RGBFB_NONE, /* no valid RGB format (should not happen) */
40: RGBFB_CLUT, /* palette mode, set colors when opening screen using
41: tags or use SetRGB32/LoadRGB32(...) */
42: RGBFB_R8G8B8, /* TrueColor RGB (8 bit each) */
43: RGBFB_B8G8R8, /* TrueColor BGR (8 bit each) */
44: RGBFB_R5G6B5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B),
45: format: gggbbbbbrrrrrggg */
46: RGBFB_R5G5B5PC, /* HiColor15 (5 bit each), format: gggbbbbb0rrrrrgg */
47: RGBFB_A8R8G8B8, /* 4 Byte TrueColor ARGB (A unused alpha channel) */
48: RGBFB_A8B8G8R8, /* 4 Byte TrueColor ABGR (A unused alpha channel) */
49: RGBFB_R8G8B8A8, /* 4 Byte TrueColor RGBA (A unused alpha channel) */
50: RGBFB_B8G8R8A8, /* 4 Byte TrueColor BGRA (A unused alpha channel) */
51: RGBFB_R5G6B5, /* HiColor16 (5 bit R, 6 bit G, 5 bit B),
52: format: rrrrrggggggbbbbb */
53: RGBFB_R5G5B5, /* HiColor15 (5 bit each), format: 0rrrrrgggggbbbbb */
54: RGBFB_B5G6R5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B),
55: format: gggrrrrrbbbbbggg */
56: RGBFB_B5G5R5PC, /* HiColor15 (5 bit each), format: gggrrrrr0bbbbbbgg */
57:
58: /* By now, the following formats are for use with a hardware window only
59: (bitmap operations may be implemented incompletely) */
60:
61: RGBFB_Y4U2V2, /* 2 Byte TrueColor YUV (CCIR recommendation CCIR601).
62: Each two-pixel unit is stored as one longword
63: containing luminance (Y) for each of the two pixels,
64: and chrominance (U,V) for alternate pixels.
65: The missing chrominance values are generated by
66: interpolation. (Y1-U0-Y0-V0) */
67: RGBFB_Y4U1V1, /* 1 Byte TrueColor ACCUPAK. Four adjacent pixels form
68: a packet of 5 bits Y (luminance) each pixel and 6 bits
69: U and V (chrominance) shared by the four pixels */
70:
71: RGBFB_MaxFormats
72: } RGBFTYPE;
73:
74: #define RGBFF_NONE (1<<RGBFB_NONE)
75: #define RGBFF_CLUT (1<<RGBFB_CLUT)
76: #define RGBFF_R8G8B8 (1<<RGBFB_R8G8B8)
77: #define RGBFF_B8G8R8 (1<<RGBFB_B8G8R8)
78: #define RGBFF_R5G6B5PC (1<<RGBFB_R5G6B5PC)
79: #define RGBFF_R5G5B5PC (1<<RGBFB_R5G5B5PC)
80: #define RGBFF_A8R8G8B8 (1<<RGBFB_A8R8G8B8)
81: #define RGBFF_A8B8G8R8 (1<<RGBFB_A8B8G8R8)
82: #define RGBFF_R8G8B8A8 (1<<RGBFB_R8G8B8A8)
83: #define RGBFF_B8G8R8A8 (1<<RGBFB_B8G8R8A8)
84: #define RGBFF_R5G6B5 (1<<RGBFB_R5G6B5)
85: #define RGBFF_R5G5B5 (1<<RGBFB_R5G5B5)
86: #define RGBFF_B5G6R5PC (1<<RGBFB_B5G6R5PC)
87: #define RGBFF_B5G5R5PC (1<<RGBFB_B5G5R5PC)
88: #define RGBFF_Y4U2V2 (1<<RGBFB_Y4U2V2)
89: #define RGBFF_Y4U1V1 (1<<RGBFB_Y4U1V1)
90:
91: /************************************************************************/
92:
93: #define RGBFF_PLANAR RGBFF_NONE
94: #define RGBFF_CHUNKY RGBFF_CLUT
95:
96: #define RGBFB_PLANAR RGBFB_NONE
97: #define RGBFB_CHUNKY RGBFB_CLUT
98:
99: /************************************************************************/
100:
101: enum{
102: PLANAR,
103: CHUNKY,
104: HICOLOR,
105: TRUECOLOR,
106: TRUEALPHA,
107: MAXMODES
108: };
109:
110: /************************************************************************/
111: struct MyCLUTEntry {
112: uae_u8 Red;
113: uae_u8 Green;
114: uae_u8 Blue;
115: uae_u8 Pad;
116: };
117:
118: struct ColorIndexMapping {
119: uae_u32 ColorMask;
120: uae_u32 Colors[256];
121: };
122:
123: struct CLUTEntry {
124: uae_u8 Red;
125: uae_u8 Green;
126: uae_u8 Blue;
127: };
128:
129: #define PSSO_BitMap_BytesPerRow 0
130: #define PSSO_BitMap_Rows 2
131: #define PSSO_BitMap_Flags 4
132: #define PSSO_BitMap_Depth 5
133: #define PSSO_BitMap_pad 6
134: #define PSSO_BitMap_Planes 8
135: #define PSSO_BitMap_sizeof 40
136:
137: struct BitMap
138: {
139: uae_u16 BytesPerRow;
140: uae_u16 Rows;
141: uae_u8 Flags;
142: uae_u8 Depth;
143: uae_u16 pad;
144: uae_u8 *Planes[8];
145: };
146:
147: /************************************************************************/
148:
149: #define SETTINGSNAMEMAXCHARS 30
150: #define BOARDNAMEMAXCHARS 30
151:
152: struct Settings{
153: uae_u32 BoardType;
154: /* a value discribing assignment to nth board local to boardtype
155: * to be used for reassignment when boards are added or removed. */
156: uae_u16 LocalOrdering;
157: uae_s16 LastSelected;
158: char NameField[SETTINGSNAMEMAXCHARS];
159: /* neu! */
160: char *BoardName;
161: };
162:
163: #define MAXRESOLUTIONNAMELENGTH 22
164:
165: /********************************
166: * only used within rtg.library *
167: ********************************/
168:
169: #define PSSO_LibResolution_P96ID 14
170: #define PSSO_LibResolution_Name 20
171: #define PSSO_LibResolution_DisplayID 42 /* Name + MAXRESOLUTIONNAMELENGTH */
172: #define PSSO_LibResolution_Width 46
173: #define PSSO_LibResolution_Height 48
174: #define PSSO_LibResolution_Flags 50
175: #define PSSO_LibResolution_Modes 52
176: #define PSSO_LibResolution_BoardInfo (52 + MAXMODES*4)
177: #define PSSO_LibResolution_sizeof (60 + MAXMODES*4)
178:
179: struct LibResolution{
180: char P96ID[6];
181: char Name[MAXRESOLUTIONNAMELENGTH];
182: uae_u32 DisplayID;
183: uae_u16 Width;
184: uae_u16 Height;
185: uae_u16 Flags;
186: uaecptr Modes[MAXMODES];
187: uaecptr BoardInfo;
188: };
189:
190: #define P96B_FAMILY 0 /* obsolete (Resolution is an entire family) */
191: #define P96B_PUBLIC 1 /* Resolution should be added to the public */
192: #define P96B_MONITOOL 2
193:
194: #define P96F_FAMILY (1<<P96B_FAMILY) /* obsolete */
195: #define P96F_PUBLIC (1<<P96B_PUBLIC)
196: #define P96F_MONITOOL (1<<P96B_MONITOOL)
197:
198: #define PSSO_ModeInfo_OpenCount 14
199: #define PSSO_ModeInfo_Active 16
200: #define PSSO_ModeInfo_Width 18
201: #define PSSO_ModeInfo_Height 20
202: #define PSSO_ModeInfo_Depth 22
203: #define PSSO_ModeInfo_Flags 23
204: #define PSSO_ModeInfo_HorTotal 24
205: #define PSSO_ModeInfo_HorBlankSize 26
206: #define PSSO_ModeInfo_HorSyncStart 28
207: #define PSSO_ModeInfo_HorSyncSize 30
208: #define PSSO_ModeInfo_HorSyncSkew 32
209: #define PSSO_ModeInfo_HorEnableSkew 33
210: #define PSSO_ModeInfo_VerTotal 34
211: #define PSSO_ModeInfo_VerBlankSize 36
212: #define PSSO_ModeInfo_VerSyncStart 38
213: #define PSSO_ModeInfo_VerSyncSize 40
214: #define PSSO_ModeInfo_first_union 42
215: #define PSSO_ModeInfo_second_union 43
216: #define PSSO_ModeInfo_PixelClock 44
217: #define PSSO_ModeInfo_sizeof 48
218:
219: #define PSSO_RenderInfo_Memory 0
220: #define PSSO_RenderInfo_BytesPerRow 4
221: #define PSSO_RenderInfo_pad 6
222: #define PSSO_RenderInfo_RGBFormat 8
223: #define PSSO_RenderInfo_sizeof /* ??? */
224:
225: struct RenderInfo {
226: uae_u8 *Memory;
227: uae_s16 BytesPerRow;
228: uae_s16 pad;
229: RGBFTYPE RGBFormat;
230: };
231:
232: #define PSSO_Pattern_Memory 0
233: #define PSSO_Pattern_XOffset 4
234: #define PSSO_Pattern_YOffset 6
235: #define PSSO_Pattern_FgPen 8
236: #define PSSO_Pattern_BgPen 12
237: #define PSSO_Pattern_Size 16
238: #define PSSO_Pattern_DrawMode 17
239: #define PSSO_Pattern_sizeof 18
240: struct Pattern {
241: char *Memory;
242: uae_u16 XOffset, YOffset;
243: uae_u32 FgPen, BgPen;
244: uae_u8 Size; /* Width: 16, Height: (1<<pat_Size) */
245: uae_u8 DrawMode;
246: };
247:
248: #define PSSO_Template_Memory 0
249: #define PSSO_Template_BytesPerRow 4
250: #define PSSO_Template_XOffset 6
251: #define PSSO_Template_DrawMode 7
252: #define PSSO_Template_FgPen 8
253: #define PSSO_Template_BgPen 12
254: #define PSSO_Template_sizeof 16
255:
256: struct Template {
257: char *Memory;
258: uae_s16 BytesPerRow;
259: uae_u8 XOffset;
260: uae_u8 DrawMode;
261: uae_u32 FgPen;
262: uae_u32 BgPen;
263: };
264:
265: #define PSSO_BoardInfo_MemoryBase 4
266: #define PSSO_BoardInfo_MemorySize 12
267: #define PSSO_BoardInfo_BoardName 16
268: #define PSSO_BoardInfo_VBIName 20
269: #define PSSO_BoardInfo_CardBase 52
270: #define PSSO_BoardInfo_ChipBase 56
271: #define PSSO_BoardInfo_ExecBase 60
272: #define PSSO_BoardInfo_UtilBase 64
273: #define PSSO_BoardInfo_HardInterrupt 68
274: #define PSSO_BoardInfo_SoftInterrupt 90
275: #define PSSO_BoardInfo_BoardLock 112
276: #define PSSO_BoardInfo_ResolutionsList 158
277: #define PSSO_BoardInfo_BoardType 170
278: #define PSSO_BoardInfo_PaletteChipType 174
279: #define PSSO_BoardInfo_GraphicsControllerType 178
280: #define PSSO_BoardInfo_MoniSwitch 182
281: #define PSSO_BoardInfo_BitsPerCannon 184
282: #define PSSO_BoardInfo_Flags 186
283: #define PSSO_BoardInfo_SoftSpriteFlags 190
284: #define PSSO_BoardInfo_ChipFlags 192
285: #define PSSO_BoardInfo_CardFlags 194
286: #define PSSO_BoardInfo_BoardNum 198
287: #define PSSO_BoardInfo_RGBFormats 200
288: #define PSSO_BoardInfo_MaxHorValue 202
289: #define PSSO_BoardInfo_MaxVerValue (202 + 2*MAXMODES)
290: #define PSSO_BoardInfo_MaxHorResolution (202 + 4*MAXMODES)
291: #define PSSO_BoardInfo_MaxVerResolution (202 + 6*MAXMODES)
292: #define PSSO_BoardInfo_MaxMemorySize (202 + 8*MAXMODES)
293: #define PSSO_BoardInfo_MaxChunkSize (202 + 8*MAXMODES + 4)
294: #define PSSO_BoardInfo_PixelClockArray (202 + 8*MAXMODES + 8)
295: #define PSSO_BoardInfo_PixelClockCount (202 + 8*MAXMODES + 12)
296: #define PSSO_BoardInfo_AllocCardMem (202 + 12*MAXMODES + 12)
297: #define PSSO_BoardInfo_SpecialFeatures (202 + 12*MAXMODES + 12 + 68*4)
298: #define PSSO_BoardInfo_ModeInfo (202 + 12*MAXMODES + 12 + 68*4 + 12)
299: #define PSSO_BoardInfo_CLUT (202 + 12*MAXMODES + 12 + 68*4 + 32)
300:
301: struct BoardInfo{
302: uae_u8 *RegisterBase, *MemoryBase, *MemoryIOBase;
303: uae_u32 MemorySize;
304: char *BoardName, VBIName[32];
305:
306: uae_u16 MoniSwitch;
307: uae_u16 BitsPerCannon;
308: uae_u32 Flags;
309: uae_u16 SoftSpriteFlags;
310: uae_u16 ChipFlags; /* private, chip specific, not touched by RTG */
311: uae_u32 CardFlags; /* private, card specific, not touched by RTG */
312:
313: uae_u16 BoardNum;
314: uae_s16 RGBFormats;
315:
316: uae_u16 MaxHorValue[MAXMODES];
317: uae_u16 MaxVerValue[MAXMODES];
318: uae_u16 MaxHorResolution[MAXMODES];
319: uae_u16 MaxVerResolution[MAXMODES];
320: uae_u32 MaxMemorySize, MaxChunkSize;
321: };
322:
323: /* BoardInfo flags */
324: /* 0-15: hardware flags */
325: /* 16-31: user flags */
326: #define BIB_HARDWARESPRITE 0 /* board has hardware sprite */
327: #define BIB_NOMEMORYMODEMIX 1 /* board does not support modifying planar bitmaps while displaying chunky and vice versa */
328: #define BIB_NEEDSALIGNMENT 2 /* bitmaps have to be aligned (not yet supported!) */
329: #define BIB_DBLSCANDBLSPRITEY 8 /* hardware sprite y position is doubled on doublescan display modes */
330: #define BIB_ILACEHALFSPRITEY 9 /* hardware sprite y position is halved on interlace display modes */
331: #define BIB_ILACEDBLROWOFFSET 10 /* doubled row offset in interlaced display modes needs additional horizontal bit */
332:
333: #define BIB_FLICKERFIXER 12 /* board can flicker fix Amiga RGB signal */
334: #define BIB_VIDEOCAPTURE 13 /* board can capture video data to a memory area */
335: #define BIB_VIDEOWINDOW 14 /* board can display a second mem area as a pip */
336: #define BIB_BLITTER 15 /* board has blitter */
337:
338: #define BIB_HIRESSPRITE 16 /* mouse sprite has double resolution */
339: #define BIB_BIGSPRITE 17 /* user wants big mouse sprite */
340: #define BIB_BORDEROVERRIDE 18 /* user wants to override system overscan border prefs */
341: #define BIB_BORDERBLANK 19 /* user wants border blanking */
342: #define BIB_INDISPLAYCHAIN 20 /* board switches Amiga signal */
343: #define BIB_QUIET 21 /* not yet implemented */
344: #define BIB_NOMASKBLITS 22 /* perform blits without taking care of mask */
345: #define BIB_NOC2PBLITS 23 /* use CPU for planar to chunky conversions */
346: #define BIB_NOBLITTER 24 /* disable all blitter functions */
347:
348: #define BIB_IGNOREMASK BIB_NOMASKBLITS
349:
350: #define BIF_HARDWARESPRITE (1<<BIB_HARDWARESPRITE)
351: #define BIF_NOMEMORYMODEMIX (1<<BIB_NOMEMORYMODEMIX)
352: #define BIF_NEEDSALIGNMENT (1<<BIB_NEEDSALIGNMENT)
353: #define BIF_DBLSCANDBLSPRITEY (1<<BIB_DBLSCANDBLSPRITEY)
354: #define BIF_ILACEHALFSPRITEY (1<<BIB_ILACEHALFSPRITEY)
355: #define BIF_ILACEDBLROWOFFSET (1<<BIB_ILACEDBLROWOFFSET)
356: #define BIF_FLICKERFIXER (1<<BIB_FLICKERFIXER)
357: #define BIF_VIDEOCAPTURE (1<<BIB_VIDEOCAPTURE)
358: #define BIF_VIDEOWINDOW (1<<BIB_VIDEOWINDOW)
359: #define BIF_BLITTER (1<<BIB_BLITTER)
360: #define BIF_HIRESSPRITE (1<<BIB_HIRESSPRITE)
361: #define BIF_BIGSPRITE (1<<BIB_BIGSPRITE)
362: #define BIF_BORDEROVERRIDE (1<<BIB_BORDEROVERRIDE)
363: #define BIF_BORDERBLANK (1<<BIB_BORDERBLANK)
364: #define BIF_INDISPLAYCHAIN (1<<BIB_INDISPLAYCHAIN)
365: #define BIF_QUIET (1<<BIB_QUIET)
366: #define BIF_NOMASKBLITS (1<<BIB_NOMASKBLITS)
367: #define BIF_NOC2PBLITS (1<<BIB_NOC2PBLITS)
368: #define BIF_NOBLITTER (1<<BIB_NOBLITTER)
369:
370: #define BIF_IGNOREMASK BIF_NOMASKBLITS
371:
372: /************************************************************************/
373: struct picasso96_state_struct
374: {
375: uae_u32 RGBFormat; /* true-colour, CLUT, hi-colour, etc. */
376: struct MyCLUTEntry CLUT[256]; /* Duh! */
377: uaecptr Address; /* Active screen address (Amiga-side) */
378: uaecptr Extent; /* End address of screen (Amiga-side) */
379: uae_u16 Width; /* Active display width (From SetGC) */
380: uae_u16 VirtualWidth;/* Total screen width (From SetPanning) */
381: uae_u16 BytesPerRow; /* Total screen width in bytes (From SetGC) */
382: uae_u16 Height; /* Active display height (From SetGC) */
383: uae_u16 VirtualHeight; /* Total screen height */
384: uae_u8 GC_Depth; /* From SetGC() */
385: uae_u8 GC_Flags; /* From SetGC() */
386: long XOffset; /* From SetPanning() */
387: long YOffset; /* From SetPanning() */
388: uae_u8 SwitchState; /* From SetSwitch() - 0 is Amiga, 1 is Picasso */
389: uae_u8 BytesPerPixel;
390: uae_u8 CardFound;
391: };
392:
393: extern void InitPicasso96 (void);
394:
395: extern uae_u32 picasso_SetDisplay (void);
396: extern uae_u32 picasso_WaitVerticalSync (void);
397: extern uae_u32 picasso_CalculateBytesPerRow (void);
398: extern uae_u32 picasso_FillRect (void);
399: extern uae_u32 picasso_BlitRect (void);
400: extern uae_u32 picasso_InvertRect (void);
401: extern uae_u32 picasso_SetPanning (void);
402: extern uae_u32 picasso_SetGC (void);
403: extern uae_u32 picasso_SetDAC (void);
404: extern uae_u32 picasso_SetColorArray (void);
405: extern uae_u32 picasso_SetSwitch (void);
406: extern uae_u32 picasso_SetSwitch (void);
407: extern uae_u32 picasso_FindCard (void);
408: extern uae_u32 picasso_InitCard (void);
409: extern uae_u32 picasso_BlitPlanar2Chunky (void);
410: extern uae_u32 picasso_BlitPlanar2Direct (void);
411: extern uae_u32 picasso_BlitTemplate (void);
412: extern uae_u32 picasso_BlitPattern (void);
413: extern uae_u32 picasso_BlitRectNoMaskComplete (void);
414:
415: extern uae_u32 gfxmem_mask;
416: extern uae_u8 *gfxmemory;
417:
418: extern int uaegfx_card_found;
419:
420: extern struct picasso96_state_struct picasso96_state;
421:
422: #ifdef _WIN32
423: extern unsigned int timer_id;
424: #endif
425:
426: extern int DX_FillRect(uaecptr mem, uae_u16 X, uae_u16 Y, uae_u16 Width, uae_u16 Height, uae_u32 Pen, uae_u8 Bpp);
427: extern void DX_BlitRect(struct RenderInfo *ri, uae_u16 srcx, uae_u16 srcy, uae_u16 dstx, uae_u16 dsty, uae_u16 w, uae_u16 h);
428: extern void DX_BlitRectFromBuffer(struct RenderInfo *ri, uae_u8* buffer, uae_u16 dstx, uae_u16 dsty, uae_u16 w, uae_u16 h);
429: extern void DX_InvertRect(struct RenderInfo *ri, uae_u16 X, uae_u16 Y, uae_u16 Width, uae_u16 Height);
430: extern void DX_SetPalette(int start, int count);
431: extern int DX_FillResolutions (uae_u16 *);
432: extern int DX_BitsPerCannon (void);
433: extern void DX_Invalidate (int first, int last);
434: extern void picasso_enablescreen (int on);
435:
436: extern uae_u8 *gfxmemory;
437:
438: struct picasso_vidbuf_description {
439: int width, height, depth;
440: int rowbytes, pixbytes;
441: int extra_mem; /* nonzero if there's a second buffer that must be updated */
442: };
443:
444: extern struct picasso_vidbuf_description picasso_vidinfo;
445:
446: extern void gfx_set_picasso_modeinfo (int w, int h, int d);
447: extern void gfx_set_picasso_baseaddr (uaecptr);
448: extern void gfx_set_picasso_state (int on);
449:
450: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.