ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/include/video.h
Revision: 1.4
Committed: 2004-04-13T22:22:22Z (20 years, 7 months ago) by gbeauche
Content type: text/plain
Branch: MAIN
Changes since 1.3: +1 -0 lines
Log Message:
Fix DGA mode for emulated PPC targets. It currently doesn't work in native
mode as the stack is corrupted and we are jumping to garbage when moving
the mouse. Also add 1152x768 resolution from PBG4, but make timing match
the 1152x870 version.

Cleanups, further merges from Basilisk II tree.

File Contents

# User Rev Content
1 cebix 1.1 /*
2     * video.h - Video/graphics emulation
3     *
4 cebix 1.2 * SheepShaver (C) 1997-2004 Marc Hellwig and Christian Bauer
5 cebix 1.1 *
6     * This program is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19     */
20    
21     #ifndef VIDEO_H
22     #define VIDEO_H
23    
24     extern bool VideoActivated(void);
25     extern bool VideoSnapshot(int xsize, int ysize, uint8 *p);
26    
27     extern int16 VideoDoDriverIO(void *spaceID, void *commandID, void *commandContents, uint32 commandCode, uint32 commandKind);
28    
29     // System specific and internal functions/data
30     struct VideoInfo {
31     int viType; // Screen/Window
32     uint32 viRowBytes; // width of each row in memory
33     uint16 viXsize,viYsize; // Window
34     uint32 viAppleMode; // Screen Color Depth
35     uint32 viAppleID; // Screen DisplayID
36     };
37    
38     extern struct VideoInfo VModes[]; // List of available video modes
39    
40     enum { // viAppleMode
41     APPLE_1_BIT = 0x80,
42     APPLE_2_BIT,
43     APPLE_4_BIT,
44     APPLE_8_BIT,
45     APPLE_16_BIT,
46     APPLE_32_BIT
47     };
48    
49 gbeauche 1.3 // 1, 2, 4 and 8 bit depths use a color palette
50     inline bool IsDirectMode(int mode)
51     {
52     return mode == APPLE_16_BIT || mode == APPLE_32_BIT;
53     }
54    
55     // Return the depth code that corresponds to the specified bits-per-pixel value
56     inline int DepthModeForPixelDepth(int depth)
57     {
58     switch (depth) {
59     case 1: return APPLE_1_BIT;
60     case 2: return APPLE_2_BIT;
61     case 4: return APPLE_4_BIT;
62     case 8: return APPLE_8_BIT;
63     case 15: case 16: return APPLE_16_BIT;
64     case 24: case 32: return APPLE_32_BIT;
65     default: return APPLE_1_BIT;
66     }
67     }
68    
69     // Return a bytes-per-row value (assuming no padding) for the specified depth and pixel width
70     inline uint32 TrivialBytesPerRow(uint32 width, int mode)
71     {
72     switch (mode) {
73     case APPLE_1_BIT: return width / 8;
74     case APPLE_2_BIT: return width / 4;
75     case APPLE_4_BIT: return width / 2;
76     case APPLE_8_BIT: return width;
77     case APPLE_16_BIT: return width * 2;
78     case APPLE_32_BIT: return width * 4;
79     default: return width;
80     }
81     }
82    
83 cebix 1.1 enum { // viAppleID
84     APPLE_640x480 = 0x81,
85     APPLE_W_640x480,
86     APPLE_800x600,
87     APPLE_W_800x600,
88     APPLE_1024x768,
89 gbeauche 1.4 APPLE_1152x768,
90 cebix 1.1 APPLE_1152x900,
91     APPLE_1280x1024,
92     APPLE_1600x1200,
93     APPLE_ID_MIN = APPLE_640x480,
94     APPLE_ID_MAX = APPLE_1600x1200
95     };
96    
97     enum { // Display type
98     DIS_INVALID,
99     DIS_SCREEN,
100     DIS_WINDOW
101     };
102    
103     extern bool video_activated; // Flag: video display activated, mouse and keyboard data valid
104     extern uint32 screen_base; // Frame buffer base address
105     extern int cur_mode; // Number of current video mode (index in VModes array)
106     extern int display_type; // Current display type (see above)
107     extern rgb_color mac_pal[256];
108     extern uint8 remap_mac_be[256];
109     extern uint8 MacCursor[68];
110    
111     struct GammaTbl;
112    
113     struct VidLocals{
114     uint16 saveMode;
115     uint32 saveData;
116     uint16 savePage;
117     uint32 saveBaseAddr;
118     GammaTbl *gammaTable; // Current gamma table
119     uint32 maxGammaTableSize; // Biggest gamma table allocated
120     uint32 saveVidParms;
121     bool luminanceMapping; // Luminance mapping on/off
122     int32 cursorX; // Hardware cursor state. Unused, but must be remembered
123     int32 cursorY;
124     uint32 cursorVisible;
125     uint32 cursorSet;
126     uint32 vslServiceID; // VSL interrupt service ID
127     bool interruptsEnabled; // VBL interrupts on/off
128     uint32 regEntryID[4];
129     };
130    
131     extern VidLocals *private_data; // Pointer to driver local variables (there is only one display, so this is ok)
132    
133     extern bool VideoInit(void);
134     extern void VideoExit(void);
135     extern void VideoVBL(void);
136     extern void VideoInstallAccel(void);
137     extern void VideoQuitFullScreen(void);
138    
139     extern void video_set_palette(void);
140     extern void video_set_cursor(void);
141     extern int16 video_mode_change(VidLocals *csSave, uint32 ParamPtr);
142    
143     extern int16 VSLDoInterruptService(uint32 arg1);
144     extern void NQDMisc(uint32 arg1, void *arg2);
145    
146     extern bool keyfile_valid;
147    
148     #endif