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