1 typedef struct svga_t
2 {
3         mem_mapping_t mapping;
4 
5         uint8_t crtcreg;
6         uint8_t crtc[128];
7         uint8_t gdcreg[64];
8         int gdcaddr;
9         uint8_t attrregs[32];
10         int attraddr, attrff;
11         int attr_palette_enable;
12         uint8_t seqregs[64];
13         int seqaddr;
14 
15         uint8_t miscout;
16         int vidclock;
17 
18         /*The three variables below allow us to implement memory maps like that seen on a 1MB Trio64 :
19           0MB-1MB - VRAM
20           1MB-2MB - VRAM mirror
21           2MB-4MB - open bus
22           4MB-xMB - mirror of above
23 
24           For the example memory map, decode_mask would be 4MB-1 (4MB address space), vram_max would be 2MB
25           (present video memory only responds to first 2MB), vram_mask would be 1MB-1 (video memory wraps at 1MB)
26         */
27         uint32_t decode_mask;
28         uint32_t vram_max;
29         uint32_t vram_mask;
30 
31         uint8_t la, lb, lc, ld;
32 
33         uint8_t dac_mask, dac_status;
34         int dac_read, dac_write, dac_pos;
35         int dac_r, dac_g;
36 
37         uint8_t cgastat;
38 
39         uint8_t plane_mask;
40 
41         int fb_only;
42 
43         int fast;
44         uint8_t colourcompare, colournocare;
45         int readmode, writemode, readplane;
46         int chain4, chain2_write, chain2_read;
47         uint8_t writemask;
48         uint32_t charseta, charsetb;
49 
50         int set_reset_disabled;
51 
52         uint8_t egapal[16];
53         uint32_t pallook[256];
54         PALETTE vgapal;
55 
56         int ramdac_type;
57 
58         int vtotal, dispend, vsyncstart, split, vblankstart;
59         int hdisp,  hdisp_old, htotal,  hdisp_time, rowoffset;
60         int lowres, interlace;
61         int linedbl, rowcount;
62         double clock;
63         uint32_t ma_latch;
64         int bpp;
65 
66         int dispontime, dispofftime;
67         int vidtime;
68 
69         uint8_t scrblank;
70 
71         int dispon;
72         int hdisp_on;
73 
74         uint32_t ma, maback, ca;
75         int vc;
76         int sc;
77         int linepos, vslines, linecountff, oddeven;
78         int con, cursoron, blink;
79         int scrollcache;
80 
81         int firstline, lastline;
82         int firstline_draw, lastline_draw;
83         int displine;
84 
85         uint8_t *vram;
86         uint8_t *changedvram;
87         uint32_t vram_display_mask;
88         uint32_t banked_mask;
89 
90         uint32_t write_bank, read_bank;
91 
92         int fullchange;
93 
94         int video_res_x, video_res_y, video_bpp;
95         int frames, fps;
96 
97         struct
98         {
99                 int ena;
100                 int x, y;
101                 int xoff, yoff;
102                 int xsize, ysize;
103                 uint32_t addr;
104                 uint32_t pitch;
105                 int v_acc, h_acc;
106         } hwcursor, hwcursor_latch, overlay, overlay_latch;
107 
108         int hwcursor_on;
109         int overlay_on;
110 
111         int hwcursor_oddeven;
112         int overlay_oddeven;
113 
114         void (*render)(struct svga_t *svga);
115         void (*recalctimings_ex)(struct svga_t *svga);
116 
117         void    (*video_out)(uint16_t addr, uint8_t val, void *p);
118         uint8_t (*video_in) (uint16_t addr, void *p);
119 
120         void (*hwcursor_draw)(struct svga_t *svga, int displine);
121 
122         void (*overlay_draw)(struct svga_t *svga, int displine);
123 
124         void (*vblank_start)(struct svga_t *svga);
125 
126         /*If set then another device is driving the monitor output and the SVGA
127           card should not attempt to display anything */
128         int override;
129         void *p;
130 
131         uint8_t ksc5601_sbyte_mask;
132 } svga_t;
133 
134 extern int svga_init(svga_t *svga, void *p, int memsize,
135                void (*recalctimings_ex)(struct svga_t *svga),
136                uint8_t (*video_in) (uint16_t addr, void *p),
137                void    (*video_out)(uint16_t addr, uint8_t val, void *p),
138                void (*hwcursor_draw)(struct svga_t *svga, int displine),
139                void (*overlay_draw)(struct svga_t *svga, int displine));
140 void svga_close(svga_t *svga);
141 extern void svga_recalctimings(svga_t *svga);
142 
143 
144 uint8_t  svga_read(uint32_t addr, void *p);
145 uint16_t svga_readw(uint32_t addr, void *p);
146 uint32_t svga_readl(uint32_t addr, void *p);
147 void     svga_write(uint32_t addr, uint8_t val, void *p);
148 void     svga_writew(uint32_t addr, uint16_t val, void *p);
149 void     svga_writel(uint32_t addr, uint32_t val, void *p);
150 uint8_t  svga_read_linear(uint32_t addr, void *p);
151 uint16_t svga_readw_linear(uint32_t addr, void *p);
152 uint32_t svga_readl_linear(uint32_t addr, void *p);
153 void     svga_write_linear(uint32_t addr, uint8_t val, void *p);
154 void     svga_writew_linear(uint32_t addr, uint16_t val, void *p);
155 void     svga_writel_linear(uint32_t addr, uint32_t val, void *p);
156 
157 void svga_add_status_info(char *s, int max_len, void *p);
158 
159 extern uint8_t svga_rotate[8][256];
160 
161 void svga_out(uint16_t addr, uint8_t val, void *p);
162 uint8_t svga_in(uint16_t addr, void *p);
163 
164 svga_t *svga_get_pri();
165 void svga_set_override(svga_t *svga, int val);
166 
167 #define RAMDAC_6BIT 0
168 #define RAMDAC_8BIT 1
169 void svga_set_ramdac_type(svga_t *svga, int type);
170 
171 void svga_doblit(int y1, int y2, int wx, int wy, svga_t *svga);
172