More sonarlint work

This commit is contained in:
Jasmine Iwanek
2023-06-09 23:46:54 -04:00
parent 0d1d069af4
commit ee695e71f9
218 changed files with 6282 additions and 3845 deletions

View File

@@ -194,7 +194,7 @@ typedef struct _mem_mapping_ {
/* There is never a needed to pass a pointer to the mapping itself, it is much preferable to
prepare a structure with the requires data (usually, the base address and mask) instead. */
void *p; /* backpointer to device */
void *priv; /* backpointer to device */
} mem_mapping_t;
#ifdef USE_NEW_DYNAREC
@@ -207,9 +207,9 @@ extern uint64_t *byte_code_present_mask;
# define EVICT_NOT_IN_LIST ((uint32_t) -1)
typedef struct page_t {
void (*write_b)(uint32_t addr, uint8_t val, struct page_t *p);
void (*write_w)(uint32_t addr, uint16_t val, struct page_t *p);
void (*write_l)(uint32_t addr, uint32_t val, struct page_t *p);
void (*write_b)(uint32_t addr, uint8_t val, struct page_t *page);
void (*write_w)(uint32_t addr, uint16_t val, struct page_t *page);
void (*write_l)(uint32_t addr, uint32_t val, struct page_t *page);
uint8_t *mem;
@@ -218,9 +218,11 @@ typedef struct page_t {
/*Head of codeblock tree associated with this page*/
uint16_t head;
uint64_t code_present_mask, dirty_mask;
uint64_t code_present_mask;
uint64_t dirty_mask;
uint32_t evict_prev, evict_next;
uint32_t evict_prev;
uint32_t evict_next;
uint64_t *byte_dirty_mask;
uint64_t *byte_code_present_mask;
@@ -228,31 +230,33 @@ typedef struct page_t {
extern uint32_t purgable_page_list_head;
__attribute__((always_inline)) static inline int
page_in_evict_list(page_t *p)
page_in_evict_list(page_t *page)
{
return (p->evict_prev != EVICT_NOT_IN_LIST);
return (page->evict_prev != EVICT_NOT_IN_LIST);
}
void page_remove_from_evict_list(page_t *p);
void page_add_to_evict_list(page_t *p);
void page_remove_from_evict_list(page_t *page);
void page_add_to_evict_list(page_t *page);
#else
typedef struct _page_ {
void (*write_b)(uint32_t addr, uint8_t val, struct _page_ *p);
void (*write_w)(uint32_t addr, uint16_t val, struct _page_ *p);
void (*write_l)(uint32_t addr, uint32_t val, struct _page_ *p);
void (*write_b)(uint32_t addr, uint8_t val, struct _page_ *page);
void (*write_w)(uint32_t addr, uint16_t val, struct _page_ *page);
void (*write_l)(uint32_t addr, uint32_t val, struct _page_ *page);
uint8_t *mem;
uint64_t code_present_mask[4],
dirty_mask[4];
uint64_t code_present_mask[4];
uint64_t dirty_mask[4];
struct codeblock_t *block[4], *block_2[4];
struct codeblock_t *block[4];
struct codeblock_t *block_2[4];
/*Head of codeblock tree associated with this page*/
struct codeblock_t *head;
} page_t;
#endif
extern uint8_t *ram, *ram2;
extern uint8_t *ram;
extern uint8_t *ram2;
extern uint32_t rammask;
extern uint8_t *rom;
@@ -336,37 +340,37 @@ extern void addwritelookup(uint32_t virt, uint32_t phys);
extern void mem_mapping_set(mem_mapping_t *,
uint32_t base,
uint32_t size,
uint8_t (*read_b)(uint32_t addr, void *p),
uint16_t (*read_w)(uint32_t addr, void *p),
uint32_t (*read_l)(uint32_t addr, void *p),
void (*write_b)(uint32_t addr, uint8_t val, void *p),
void (*write_w)(uint32_t addr, uint16_t val, void *p),
void (*write_l)(uint32_t addr, uint32_t val, void *p),
uint8_t (*read_b)(uint32_t addr, void *priv),
uint16_t (*read_w)(uint32_t addr, void *priv),
uint32_t (*read_l)(uint32_t addr, void *priv),
void (*write_b)(uint32_t addr, uint8_t val, void *priv),
void (*write_w)(uint32_t addr, uint16_t val, void *priv),
void (*write_l)(uint32_t addr, uint32_t val, void *priv),
uint8_t *exec,
uint32_t flags,
void *p);
void *priv);
extern void mem_mapping_add(mem_mapping_t *,
uint32_t base,
uint32_t size,
uint8_t (*read_b)(uint32_t addr, void *p),
uint16_t (*read_w)(uint32_t addr, void *p),
uint32_t (*read_l)(uint32_t addr, void *p),
void (*write_b)(uint32_t addr, uint8_t val, void *p),
void (*write_w)(uint32_t addr, uint16_t val, void *p),
void (*write_l)(uint32_t addr, uint32_t val, void *p),
uint8_t (*read_b)(uint32_t addr, void *priv),
uint16_t (*read_w)(uint32_t addr, void *priv),
uint32_t (*read_l)(uint32_t addr, void *priv),
void (*write_b)(uint32_t addr, uint8_t val, void *priv),
void (*write_w)(uint32_t addr, uint16_t val, void *priv),
void (*write_l)(uint32_t addr, uint32_t val, void *priv),
uint8_t *exec,
uint32_t flags,
void *p);
void *priv);
extern void mem_mapping_set_handler(mem_mapping_t *,
uint8_t (*read_b)(uint32_t addr, void *p),
uint16_t (*read_w)(uint32_t addr, void *p),
uint32_t (*read_l)(uint32_t addr, void *p),
void (*write_b)(uint32_t addr, uint8_t val, void *p),
void (*write_w)(uint32_t addr, uint16_t val, void *p),
void (*write_l)(uint32_t addr, uint32_t val, void *p));
uint8_t (*read_b)(uint32_t addr, void *priv),
uint16_t (*read_w)(uint32_t addr, void *priv),
uint32_t (*read_l)(uint32_t addr, void *priv),
void (*write_b)(uint32_t addr, uint8_t val, void *priv),
void (*write_w)(uint32_t addr, uint16_t val, void *priv),
void (*write_l)(uint32_t addr, uint32_t val, void *priv));
extern void mem_mapping_set_p(mem_mapping_t *, void *p);
extern void mem_mapping_set_p(mem_mapping_t *, void *priv);
extern void mem_mapping_set_addr(mem_mapping_t *,
uint32_t base, uint32_t size);
@@ -407,9 +411,9 @@ extern uint64_t mmutranslate_noabrt(uint32_t addr, int rw);
extern void mem_invalidate_range(uint32_t start_addr, uint32_t end_addr);
extern void mem_write_ramb_page(uint32_t addr, uint8_t val, page_t *p);
extern void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *p);
extern void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *p);
extern void mem_write_ramb_page(uint32_t addr, uint8_t val, page_t *page);
extern void mem_write_ramw_page(uint32_t addr, uint16_t val, page_t *page);
extern void mem_write_raml_page(uint32_t addr, uint32_t val, page_t *page);
extern void mem_flush_write_page(uint32_t addr, uint32_t virt);
extern void mem_reset_page_blocks(void);

View File

@@ -40,10 +40,11 @@ typedef struct midi_in_handler_t {
int cnt;
uint32_t len;
void (*msg)(void *p, uint8_t *msg, uint32_t len);
int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort);
struct midi_in_handler_t *p;
struct midi_in_handler_t *prev, *next;
void (*msg)(void *priv, uint8_t *msg, uint32_t len);
int (*sysex)(void *priv, uint8_t *buffer, uint32_t len, int abort);
struct midi_in_handler_t *priv;
struct midi_in_handler_t *prev;
struct midi_in_handler_t *next;
} midi_in_handler_t;
typedef struct midi_t {
@@ -77,7 +78,7 @@ extern void midi_raw_out_byte(uint8_t val);
extern void midi_clear_buffer(void);
extern void midi_poll(void);
extern void midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg, uint32_t len), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p);
extern void midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg, uint32_t len), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *priv);
extern void midi_in_handlers_clear(void);
extern void midi_in_msg(uint8_t *msg, uint32_t len);
extern void midi_in_sysex(uint8_t *buffer, uint32_t len);

View File

@@ -69,7 +69,7 @@ enum {
PCI_CARD_SOUND = 0x13,
PCI_CARD_IDE = 0x14,
PCI_CARD_NETWORK = 0x15,
PCI_CARD_BRIDGE = 0x16,
PCI_CARD_BRIDGE = 0x16
};
enum {

View File

@@ -47,8 +47,8 @@ typedef struct pc_timer_t {
double period; /* This is used for large period timers to count
the microseconds and split the period. */
void (*callback)(void *p);
void *p;
void (*callback)(void *priv);
void *priv;
struct pc_timer_t *prev;
struct pc_timer_t *next;
@@ -76,7 +76,7 @@ extern void timer_init(void);
/*Add new timer. If start_timer is set, timer will be enabled with a zero
timestamp - this is useful for permanently enabled timers*/
extern void timer_add(pc_timer_t *timer, void (*callback)(void *p), void *p, int start_timer);
extern void timer_add(pc_timer_t *timer, void (*callback)(void *priv), void *priv, int start_timer);
/*1us in 32:32 format*/
extern uint64_t TIMER_USEC;
@@ -162,16 +162,16 @@ timer_get_remaining_u64(pc_timer_t *timer)
/*Set timer callback function*/
static __inline void
timer_set_callback(pc_timer_t *timer, void (*callback)(void *p))
timer_set_callback(pc_timer_t *timer, void (*callback)(void *priv))
{
timer->callback = callback;
}
/*Set timer private data*/
static __inline void
timer_set_p(pc_timer_t *timer, void *p)
timer_set_p(pc_timer_t *timer, void *priv)
{
timer->p = p;
timer->priv = priv;
}
/* The API for big timer periods starts here. */
@@ -209,7 +209,7 @@ timer_process_inline(void)
if (timer->flags & TIMER_SPLIT)
timer_advance_ex(timer, 0); /* We're splitting a > 1 s period into multiple <= 1 s periods. */
else if (timer->callback != NULL) /* Make sure it's no NULL, so that we can have a NULL callback when no operation is needed. */
timer->callback(timer->p);
timer->callback(timer->priv);
}
timer_target = timer_head->ts.ts32.integer;

View File

@@ -39,14 +39,18 @@ typedef struct ibm8514_t {
struct {
uint16_t subsys_cntl;
uint16_t setup_md;
uint8_t advfunc_cntl, ext_advfunc_cntl;
uint16_t cur_y, cur_y_bitres;
uint16_t cur_x, cur_x_bitres;
uint8_t advfunc_cntl;
uint8_t ext_advfunc_cntl;
uint16_t cur_y;
uint16_t cur_y_bitres;
uint16_t cur_x;
uint16_t cur_x_bitres;
int16_t desty_axstp;
int16_t destx_distp;
int16_t err_term;
int16_t maj_axis_pcnt;
uint16_t cmd, cmd_back;
uint16_t cmd;
uint16_t cmd_back;
uint16_t short_stroke;
uint16_t bkgd_color;
uint16_t frgd_color;
@@ -57,63 +61,120 @@ typedef struct ibm8514_t {
uint16_t frgd_mix;
uint16_t multifunc_cntl;
uint16_t multifunc[16];
int16_t clip_left, clip_top;
int16_t clip_left;
int16_t clip_top;
uint8_t pix_trans[2];
int poly_draw;
int ssv_state;
int16_t x1, x2, x3, y1, y2;
int sys_cnt, sys_cnt2;
int x1;
int x2;
int x3;
int y1;
int y2;
int sys_cnt;
int sys_cnt2;
int temp_cnt;
int16_t cx, cy, oldcy;
int16_t sx, sy;
int16_t dx, dy;
int16_t cx;
int16_t cy;
int16_t oldcy;
int16_t sx;
int16_t sy;
int16_t dx;
int16_t dy;
int16_t err;
uint32_t src, dest;
uint32_t newsrc_blt, newdest_blt;
uint32_t newdest_in, newdest_out;
uint8_t *writemono, *nibbleset;
int x_count, xx_count, y_count;
int input, output;
uint32_t src;
uint16_t dest;
uint32_t newsrc_blt;
uint16_t newdest_blt;
uint32_t newdest_in;
uint16_t newdest_out;
uint8_t *writemono;
uint8_t *nibbleset;
int x_count;
int xx_count;
int y_count;
int input;
int output;
uint16_t cur_x_bit12, cur_y_bit12;
uint16_t cur_x_bit12;
uint16_t cur_y_bit12;
int ssv_len;
uint8_t ssv_dir;
uint8_t ssv_draw;
int odd_in, odd_out;
int odd_in;
int odd_out;
uint16_t scratch;
int fill_state, xdir, ydir;
int fill_state;
int xdir;
int ydir;
uint32_t ge_offset;
} accel;
uint16_t test;
int ibm_mode;
int ibm_mode;
int v_total, dispend, v_syncstart, split,
h_disp, h_disp_old, h_total, h_disp_time, rowoffset,
dispon, hdisp_on, linecountff,
vc, linepos, oddeven, cursoron, blink, scrollcache,
firstline, lastline, firstline_draw, lastline_draw,
displine, fullchange;
uint32_t ma, maback;
int v_total;
int dispend;
int v_syncstart;
int split;
int h_disp;
int h_disp_old;
int h_total;
int h_disp_time;
int rowoffset;
int dispon;
int hdisp_on;
int linecountff;
int vc;
int linepos;
int oddeven;
int cursoron;
int blink;
int scrollcache;
int firstline;
int lastline;
int firstline_draw;
int lastline_draw;
int displine;
int fullchange;
uint32_t ma;
uint32_t maback;
uint8_t *vram, *changedvram, linedbl;
uint8_t *vram;
uint8_t *changedvram;
uint8_t linedbl;
uint8_t data_available, data_available2;
uint8_t scanmodulos, rowcount;
int htotal, hdisp, vtadj, vdadj, vsadj, sc,
vtb, vdb, vsb, vsyncstart, vsyncwidth;
int vtotal, vdisp;
int disp_cntl, interlace;
uint8_t subsys_cntl, subsys_stat;
uint8_t data_available;
uint8_t data_available2;
uint8_t scanmodulos;
uint8_t rowcount;
int htotal;
int hdisp;
int vtadj;
int vdadj;
int vsadj;
int sc;
int vtb;
int vdb;
int vsb;
int vsyncstart;
int vsyncwidth;
int vtotal;
int vdisp;
int disp_cntl;
int interlace;
uint8_t subsys_cntl;
uint8_t subsys_stat;
atomic_int force_busy, force_busy2;
atomic_int force_busy;
atomic_int force_busy2;
int blitter_busy;
uint64_t blitter_time;
uint64_t status_time;
int pitch;
int ext_pitch;
int ext_crt_pitch;
int pitch;
int ext_pitch;
int ext_crt_pitch;
} ibm8514_t;
#endif /*VIDEO_8514A_H*/

View File

@@ -32,8 +32,12 @@ enum {
typedef struct ati_eeprom_t {
uint16_t data[256];
int oldclk, oldena;
int opcode, state, count, out;
int oldclk;
int oldena;
int opcode;
int state;
int count;
int out;
int wp;
uint32_t dat;
int type;

View File

@@ -28,21 +28,31 @@ typedef struct cga_t {
uint8_t cgastat;
uint8_t cgamode, cgacol;
uint8_t cgamode;
uint8_t cgacol;
int fontbase;
int linepos, displine;
int sc, vc;
int linepos;
int displine;
int sc;
int vc;
int cgadispon;
int con, coff, cursoron, cgablink;
int vsynctime, vadj;
uint16_t ma, maback;
int con;
int coff;
int cursoron;
int cgablink;
int vsynctime;
int vadj;
uint16_t ma;
uint16_t maback;
int oddeven;
uint64_t dispontime, dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
pc_timer_t timer;
int firstline, lastline;
int firstline;
int lastline;
int drawcursor;

View File

@@ -27,11 +27,26 @@ typedef struct ega_t {
rom_t bios_rom;
uint8_t crtcreg, gdcaddr, attraddr, attrff,
attr_palette_enable, seqaddr, miscout,
writemask, la, lb, lc, ld,
stat, colourcompare, colournocare, scrblank,
plane_mask, pad, pad0, pad1;
uint8_t crtcreg;
uint8_t gdcaddr;
uint8_t attraddr;
uint8_t attrff;
uint8_t attr_palette_enable;
uint8_t seqaddr;
uint8_t miscout;
uint8_t writemask;
uint8_t la;
uint8_t lb;
uint8_t lc;
uint8_t ld;
uint8_t stat;
uint8_t colourcompare;
uint8_t colournocare;
uint8_t scrblank;
uint8_t plane_mask;
uint8_t pad;
uint8_t pad0;
uint8_t pad1;
uint8_t crtc[32];
uint8_t gdcreg[16];
uint8_t attrregs[32];
@@ -41,25 +56,72 @@ typedef struct ega_t {
uint8_t *vram;
int vidclock, fast, extvram, vres,
readmode, writemode, readplane, vrammask,
chain4, chain2_read, chain2_write, con,
oddeven_page, oddeven_chain, vc, sc,
dispon, hdisp_on, cursoron, blink, fullchange,
linepos, vslines, linecountff, oddeven,
lowres, interlace, linedbl, lindebl, rowcount,
vtotal, dispend, vsyncstart, split,
hdisp, hdisp_old, htotal, hdisp_time, rowoffset,
vblankstart, scrollcache, firstline, lastline,
firstline_draw, lastline_draw, x_add, y_add,
displine, res_x, res_y, bpp, index;
int vidclock;
int fast;
int extvram;
int vres;
int readmode;
int writemode;
int readplane;
int vrammask;
int chain4;
int chain2_read;
int chain2_write;
int con;
int oddeven_page;
int oddeven_chain;
int vc;
int sc;
int dispon;
int hdisp_on;
int cursoron;
int blink;
int fullchange;
int linepos;
int vslines;
int linecountff;
int oddeven;
int lowres;
int interlace;
int linedbl;
int lindebl;
int rowcount;
int vtotal;
int dispend;
int vsyncstart;
int split;
int hdisp;
int hdisp_old;
int htotal;
int hdisp_time;
int rowoffset;
int vblankstart;
int scrollcache;
int firstline;
int lastline;
int firstline_draw;
int lastline_draw;
int x_add;
int y_add;
int displine;
int res_x;
int res_y;
int bpp;
int index;
uint32_t charseta, charsetb, ma_latch, ma,
maback, ca, vram_limit, overscan_color;
uint32_t charseta;
uint32_t charsetb;
uint32_t ma_latch;
uint32_t ma;
uint32_t maback;
uint32_t ca;
uint32_t vram_limit;
uint32_t overscan_color;
uint32_t *pallook;
uint64_t dispontime, dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
pc_timer_t timer;
double clock;
@@ -97,18 +159,22 @@ extern void ega_recalctimings(struct ega_t *ega);
extern void ega_recalc_remap_func(struct ega_t *ega);
#endif
extern void ega_out(uint16_t addr, uint8_t val, void *p);
extern uint8_t ega_in(uint16_t addr, void *p);
extern void ega_poll(void *p);
extern void ega_write(uint32_t addr, uint8_t val, void *p);
extern uint8_t ega_read(uint32_t addr, void *p);
extern void ega_out(uint16_t addr, uint8_t val, void *priv);
extern uint8_t ega_in(uint16_t addr, void *priv);
extern void ega_poll(void *priv);
extern void ega_write(uint32_t addr, uint8_t val, void *priv);
extern uint8_t ega_read(uint32_t addr, void *priv);
extern int firstline_draw, lastline_draw;
extern int firstline_draw;
extern int lastline_draw;
extern int displine;
extern int sc;
extern uint32_t ma, ca;
extern int con, cursoron, cgablink;
extern uint32_t ma;
extern uint32_t ca;
extern int con;
extern int cursoron;
extern int cgablink;
extern int scrollcache;

View File

@@ -25,30 +25,32 @@
typedef struct {
mem_mapping_t mapping;
uint8_t crtc[32], charbuffer[4096];
uint8_t crtc[32];
uint8_t charbuffer[4096];
int crtcreg;
uint8_t ctrl,
ctrl2,
stat;
uint8_t ctrl;
uint8_t ctrl2;
uint8_t stat;
uint64_t dispontime,
dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
pc_timer_t timer;
int firstline,
lastline;
int firstline;
int lastline;
int linepos,
displine;
int vc,
sc;
uint16_t ma,
maback;
int con, coff,
cursoron;
int dispon,
blink;
int linepos;
int displine;
int vc;
int sc;
uint16_t ma;
uint16_t maback;
int con;
int coff;
int cursoron;
int dispon;
int blink;
int vsynctime;
int vadj;

View File

@@ -11,18 +11,27 @@ typedef struct mda_t {
uint8_t crtc[32];
int crtcreg;
uint8_t ctrl, stat;
uint8_t ctrl;
uint8_t stat;
uint64_t dispontime, dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
pc_timer_t timer;
int firstline, lastline;
int firstline;
int lastline;
int linepos, displine;
int vc, sc;
uint16_t ma, maback;
int con, coff, cursoron;
int dispon, blink;
int linepos;
int displine;
int vc;
int sc;
uint16_t ma;
uint16_t maback;
int con;
int coff;
int cursoron;
int dispon;
int blink;
int vsynctime;
int vadj;
int monitor_index;

View File

@@ -59,10 +59,10 @@ typedef struct pgc {
mem_mapping_t mapping;
mem_mapping_t cga_mapping;
pgc_cl_t *clist,
*clcur;
const pgc_cmd_t *master,
*commands;
pgc_cl_t *clist;
pgc_cl_t *clcur;
const pgc_cmd_t *master;
const pgc_cmd_t *commands;
uint8_t mapram[2048]; /* host <> PGC communication buffer */
uint8_t *cga_vram;
@@ -73,10 +73,18 @@ typedef struct pgc {
uint32_t userpal[256];
uint32_t maxw, maxh; /* maximum framebuffer size */
uint32_t visw, vish; /* maximum screen size */
uint32_t screenw, screenh;
int16_t pan_x, pan_y;
uint16_t win_x1, win_x2, win_y1, win_y2;
uint16_t vp_x1, vp_x2, vp_y1, vp_y2;
uint32_t screenw;
uint32_t screenh;
int16_t pan_x;
int16_t pan_y;
uint16_t win_x1;
uint16_t win_x2;
uint16_t win_y1;
uint16_t win_y2;
uint16_t vp_x1;
uint16_t vp_x2;
uint16_t vp_y1;
uint16_t vp_y2;
int16_t fill_pattern[16];
int16_t line_pattern;
uint8_t draw_mode;
@@ -86,7 +94,9 @@ typedef struct pgc {
uint8_t tjust_v; /* vert alignment 1=bottom 2=ctr 3=top*/
int32_t tsize; /* horizontal spacing */
int32_t x, y, z; /* drawing position */
int32_t x;
int32_t y;
int32_t z; /* drawing position */
thread_t *pgc_thread;
event_t *pgc_wake_thread;
@@ -98,18 +108,23 @@ typedef struct pgc {
int ascii_mode;
int result_count;
int fontbase;
int linepos,
displine;
int fontbase;
int linepos;
int displine;
int vc;
int cgadispon;
int con, coff, cursoron, cgablink;
int vsynctime, vadj;
uint16_t ma, maback;
int con;
int coff;
int cursoron;
int cgablink;
int vsynctime;
int vadj;
uint16_t ma;
uint16_t maback;
int oddeven;
uint64_t dispontime,
dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
pc_timer_t timer;
double native_pixel_clock;
@@ -140,10 +155,14 @@ extern void pgc_init(pgc_t *,
extern void pgc_sto_raster(pgc_t *, int16_t *x, int16_t *y);
extern void pgc_ito_raster(pgc_t *, int32_t *x, int32_t *y);
extern void pgc_dto_raster(pgc_t *, double *x, double *y);
// extern int pgc_input_byte(pgc_t *, uint8_t *val);
// extern int pgc_output_byte(pgc_t *, uint8_t val);
#if 0
extern int pgc_input_byte(pgc_t *, uint8_t *val);
extern int pgc_output_byte(pgc_t *, uint8_t val);
#endif
extern int pgc_output_string(pgc_t *, const char *val);
// extern int pgc_error_byte(pgc_t *, uint8_t val);
#if 0
extern int pgc_error_byte(pgc_t *, uint8_t val);
#endif
extern int pgc_error_string(pgc_t *, const char *val);
extern int pgc_error(pgc_t *, int err);

View File

@@ -36,11 +36,18 @@
# define FLAG_512K_MASK 512
struct monitor_t;
typedef struct {
int ena,
x, y, xoff, yoff, cur_xsize, cur_ysize,
v_acc, h_acc;
uint32_t addr, pitch;
typedef struct hwcursor_t {
int ena;
int x;
int y;
int xoff;
int yoff;
int cur_xsize;
int cur_ysize;
int v_acc;
int h_acc;
uint32_t addr;
uint32_t pitch;
} hwcursor_t;
typedef union {
@@ -55,25 +62,78 @@ typedef struct svga_t {
xga_t xga;
mem_mapping_t mapping;
uint8_t fast, chain4, chain2_write, chain2_read,
ext_overscan, bus_size,
lowres, interlace, linedbl, rowcount,
set_reset_disabled, bpp, ramdac_type, fb_only,
readmode, writemode, readplane,
hwcursor_oddeven, dac_hwcursor_oddeven, overlay_oddeven,
fcr, hblank_overscan;
uint8_t fast;
uint8_t chain4;
uint8_t chain2_write;
uint8_t chain2_read;
uint8_t ext_overscan;
uint8_t bus_size;
uint8_t lowres;
uint8_t interlace;
uint8_t linedbl;
uint8_t rowcount;
uint8_t set_reset_disabled;
uint8_t bpp;
uint8_t ramdac_type;
uint8_t fb_only;
uint8_t readmode;
uint8_t writemode;
uint8_t readplane;
uint8_t hwcursor_oddeven;
uint8_t dac_hwcursor_oddeven;
uint8_t overlay_oddeven;
uint8_t fcr;
uint8_t hblank_overscan;
int dac_addr, dac_pos, dac_r, dac_g,
vtotal, dispend, vsyncstart, split, vblankstart,
hdisp, hdisp_old, htotal, hdisp_time, rowoffset,
dispon, hdisp_on,
vc, sc, linepos, vslines, linecountff, oddeven,
con, cursoron, blink, scrollcache, char_width,
firstline, lastline, firstline_draw, lastline_draw,
displine, fullchange, x_add, y_add, pan,
vram_display_mask, vidclock, dots_per_clock, hblank_ext,
hwcursor_on, dac_hwcursor_on, overlay_on, set_override,
hblankstart, hblankend, hblank_sub, hblank_end_val, hblank_end_len;
int dac_addr;
int dac_pos;
int dac_r;
int dac_g;
int vtotal;
int dispend;
int vsyncstart;
int split;
int vblankstart;
int hdisp;
int hdisp_old;
int htotal;
int hdisp_time;
int rowoffset;
int dispon;
int hdisp_on;
int vc;
int sc;
int linepos;
int vslines;
int linecountff;
int oddeven;
int con;
int cursoron;
int blink;
int scrollcache;
int char_width;
int firstline;
int lastline;
int firstline_draw;
int lastline_draw;
int displine;
int fullchange;
int x_add;
int y_add;
int pan;
int vram_display_mask;
int vidclock;
int dots_per_clock;
int hblank_ext;
int hwcursor_on;
int dac_hwcursor_on;
int overlay_on;
int set_override;
int hblankstart;
int hblankend;
int hblank_sub;
int hblank_end_val;
int hblank_end_len;
/*The three variables below allow us to implement memory maps like that seen on a 1MB Trio64 :
0MB-1MB - VRAM
@@ -84,29 +144,41 @@ typedef struct svga_t {
For the example memory map, decode_mask would be 4MB-1 (4MB address space), vram_max would be 2MB
(present video memory only responds to first 2MB), vram_mask would be 1MB-1 (video memory wraps at 1MB)
*/
uint32_t decode_mask, vram_max,
vram_mask,
charseta, charsetb,
adv_flags, ma_latch,
ca_adj, ma, maback,
write_bank, read_bank,
extra_banks[2],
banked_mask,
ca, overscan_color,
*map8, pallook[512];
uint32_t decode_mask;
uint32_t vram_max;
uint32_t vram_mask;
uint32_t charseta;
uint32_t charsetb;
uint32_t adv_flags;
uint32_t ma_latch;
uint32_t ca_adj;
uint32_t ma;
uint32_t maback;
uint32_t write_bank;
uint32_t read_bank;
uint32_t extra_banks[2];
uint32_t banked_mask;
uint32_t ca;
uint32_t overscan_color;
uint32_t *map8;
uint32_t pallook[512];
PALETTE vgapal;
uint64_t dispontime, dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
latch_t latch;
pc_timer_t timer;
double clock;
hwcursor_t hwcursor, hwcursor_latch,
dac_hwcursor, dac_hwcursor_latch,
overlay, overlay_latch;
hwcursor_t hwcursor;
hwcursor_t hwcursor_latch;
hwcursor_t dac_hwcursor;
hwcursor_t dac_hwcursor_latch;
hwcursor_t overlay;
hwcursor_t overlay_latch;
void (*render)(struct svga_t *svga);
void (*recalctimings_ex)(struct svga_t *svga);
@@ -137,20 +209,35 @@ typedef struct svga_t {
/*If set then another device is driving the monitor output and the SVGA
card should not attempt to display anything */
int override;
void *p;
void *priv;
uint8_t crtc[256], gdcreg[256], attrregs[32], seqregs[256],
egapal[16],
*vram, *changedvram;
uint8_t crtc[256];
uint8_t gdcreg[256];
uint8_t attrregs[32];
uint8_t seqregs[256];
uint8_t egapal[16];
uint8_t *vram;
uint8_t *changedvram;
uint8_t crtcreg, gdcaddr,
attrff, attr_palette_enable, attraddr, seqaddr,
miscout, cgastat, scrblank,
plane_mask, writemask,
colourcompare, colournocare,
dac_mask, dac_status,
dpms, dpms_ui,
ksc5601_sbyte_mask, ksc5601_udc_area_msb[2];
uint8_t crtcreg;
uint8_t gdcaddr;
uint8_t attrff;
uint8_t attr_palette_enable;
uint8_t attraddr;
uint8_t seqaddr;
uint8_t miscout;
uint8_t cgastat;
uint8_t scrblank;
uint8_t plane_mask;
uint8_t writemask;
uint8_t colourcompare;
uint8_t colournocare;
uint8_t dac_mask;
uint8_t dac_status;
uint8_t dpms;
uint8_t dpms_ui;
uint8_t ksc5601_sbyte_mask;
uint8_t ksc5601_udc_area_msb[2];
int ksc5601_swap_mode;
uint16_t ksc5601_english_font_type;
@@ -172,7 +259,8 @@ typedef struct svga_t {
int remap_required;
uint32_t (*remap_func)(struct svga_t *svga, uint32_t in_addr);
void *ramdac, *clock_gen;
void *ramdac;
void *clock_gen;
/* Monitor Index */
uint8_t monitor_index;

View File

@@ -20,12 +20,16 @@
#ifndef VIDEO_SVGA_RENDER_H
#define VIDEO_SVGA_RENDER_H
extern int firstline_draw, lastline_draw;
extern int firstline_draw;
extern int lastline_draw;
extern int displine;
extern int sc;
extern uint32_t ma, ca;
extern int con, cursoron, cgablink;
extern uint32_t ma;
extern uint32_t ca;
extern int con;
extern int cursoron;
extern int cgablink;
extern int scrollcache;

View File

@@ -18,6 +18,6 @@
#ifndef VIDEO_VOODOO_BANSHEE_H
#define VIDEO_VOODOO_BANSHEE_H
void banshee_set_overlay_addr(void *p, uint32_t addr);
void banshee_set_overlay_addr(void *priv, uint32_t addr);
#endif /*VIDEO_VOODOO_BANSHEE_H*/

View File

@@ -38,7 +38,9 @@ typedef struct voodoo_x86_data_t {
int is_tiled;
} voodoo_x86_data_t;
// static voodoo_x86_data_t voodoo_x86_data[2][BLOCK_NUM];
#if 0
static voodoo_x86_data_t voodoo_x86_data[2][BLOCK_NUM];
#endif
static int last_block[4] = { 0, 0 };
static int next_block_to_write[4] = { 0, 0 };
@@ -234,10 +236,12 @@ codegen_texture_fetch(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *pa
addlong(1);
addbyte(0x28); /*SUB DL, CL*/
addbyte(0xca);
// addbyte(0x8a); /*MOV DL, params->tex_shift[RSI+ECX*4]*/
// addbyte(0x94);
// addbyte(0x8e);
// addlong(offsetof(voodoo_params_t, tex_shift));
#if 0
addbyte(0x8a); /*MOV DL, params->tex_shift[RSI+ECX*4]*/
addbyte(0x94);
addbyte(0x8e);
addlong(offsetof(voodoo_params_t, tex_shift));
#endif
addbyte(0xd3); /*SHL EBP, CL*/
addbyte(0xe5);
addbyte(0x8b); /*MOV EAX, state->tex_s[RDI]*/
@@ -656,24 +660,29 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
int depth_jump_pos = 0;
int depth_jump_pos2 = 0;
int loop_jump_pos = 0;
// xmm_01_w = (__m128i)0x0001000100010001ull;
// xmm_ff_w = (__m128i)0x00ff00ff00ff00ffull;
// xmm_ff_b = (__m128i)0x00000000ffffffffull;
#if 0
xmm_01_w = (__m128i)0x0001000100010001ull;
xmm_ff_w = (__m128i)0x00ff00ff00ff00ffull;
xmm_ff_b = (__m128i)0x00000000ffffffffull;
#endif
xmm_01_w = _mm_set_epi32(0, 0, 0x00010001, 0x00010001);
xmm_ff_w = _mm_set_epi32(0, 0, 0x00ff00ff, 0x00ff00ff);
xmm_ff_b = _mm_set_epi32(0, 0, 0, 0x00ffffff);
minus_254 = _mm_set_epi32(0, 0, 0xff02ff02, 0xff02ff02);
// *(uint64_t *)&const_1_48 = 0x45b0000000000000ull;
// block_pos = 0;
// voodoo_get_depth = &code_block[block_pos];
#if 0
*(uint64_t *)&const_1_48 = 0x45b0000000000000ull;
block_pos = 0;
voodoo_get_depth = &code_block[block_pos];
#endif
/*W at (%esp+4)
Z at (%esp+12)
new_depth at (%esp+16)*/
// if ((params->fbzMode & FBZ_DEPTH_ENABLE) && (depth_op == DEPTHOP_NEVER))
// {
// addbyte(0xC3); /*RET*/
// return;
// }
#if 0
if ((params->fbzMode & FBZ_DEPTH_ENABLE) && (depth_op == DEPTHOP_NEVER)) {
addbyte(0xC3); /*RET*/
return;
}
#endif
addbyte(0x55); /*PUSH RBP*/
addbyte(0x57); /*PUSH RDI*/
addbyte(0x56); /*PUSH RSI*/
@@ -796,7 +805,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x75); /*JNZ got_depth*/
depth_jump_pos = block_pos;
addbyte(0);
// addbyte(4+5+2+3+2+5+5+3+2+2+2+/*3+*/3+2+6+4+5+2+3);
#if 0
addbyte(4+5+2+3+2+5+5+3+2+2+2+/*3+*/3+2+6+4+5+2+3);
#endif
addbyte(0x8b); /*MOV EDX, w*/
addbyte(0x97);
addlong(offsetof(voodoo_state_t, w));
@@ -810,7 +821,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x74); /*JZ got_depth*/
depth_jump_pos2 = block_pos;
addbyte(0);
// addbyte(5+5+3+2+2+2+/*3+*/3+2+6+4+5+2+3);
#if 0
addbyte(5+5+3+2+2+2+/*3+*/3+2+6+4+5+2+3);
#endif
addbyte(0xb9); /*MOV ECX, 19*/
addlong(19);
addbyte(0x0f); /*BSR EAX, EDX*/
@@ -2224,10 +2237,12 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(10);
addbyte(0x01); /*ADD EAX, EBX*/
addbyte(0xd8);
/* int fog_idx = (w_depth >> 10) & 0x3f;
#if 0
int fog_idx = (w_depth >> 10) & 0x3f;
fog_a = params->fogTable[fog_idx].fog;
fog_a += (params->fogTable[fog_idx].dfog * ((w_depth >> 2) & 0xff)) >> 10;*/
fog_a = params->fogTable[fog_idx].fog;
fog_a += (params->fogTable[fog_idx].dfog * ((w_depth >> 2) & 0xff)) >> 10;
#endif
break;
case FOG_Z:
@@ -2239,7 +2254,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(12);
addbyte(0x25); /*AND EAX, 0xff*/
addlong(0xff);
// fog_a = (z >> 20) & 0xff;
#if 0
fog_a = (z >> 20) & 0xff;
#endif
break;
case FOG_ALPHA:
@@ -2261,7 +2278,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x0f); /*CMOVAE EAX, EBX*/
addbyte(0x43);
addbyte(0xc3);
// fog_a = CLAMP(ia >> 12);
#if 0
fog_a = CLAMP(ia >> 12);
#endif
break;
case FOG_W:
@@ -2282,7 +2301,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x0f); /*CMOVAE EAX, EBX*/
addbyte(0x43);
addbyte(0xc3);
// fog_a = CLAMP(w >> 32);
#if 0
fog_a = CLAMP(w >> 32);
#endif
break;
}
addbyte(0x01); /*ADD EAX, EAX*/
@@ -3164,12 +3185,11 @@ int voodoo_recomp = 0;
static inline void *
voodoo_get_block(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *state, int odd_even)
{
int c;
int b = last_block[odd_even];
voodoo_x86_data_t *voodoo_x86_data = voodoo->codegen_data;
voodoo_x86_data_t *data;
for (c = 0; c < 8; c++) {
for (uint8_t c = 0; c < 8; c++) {
data = &voodoo_x86_data[odd_even + c * 4]; //&voodoo_x86_data[odd_even][b];
if (state->xdir == data->xdir && params->alphaMode == data->alphaMode && params->fbzMode == data->fbzMode && params->fogMode == data->fogMode && params->fbzColorPath == data->fbzColorPath && (voodoo->trexInit1[0] & (1 << 18)) == data->trexInit1 && params->textureMode[0] == data->textureMode[0] && params->textureMode[1] == data->textureMode[1] && (params->tLOD[0] & LOD_MASK) == data->tLOD[0] && (params->tLOD[1] & LOD_MASK) == data->tLOD[1] && ((params->col_tiled || params->aux_tiled) ? 1 : 0) == data->is_tiled) {
@@ -3181,7 +3201,9 @@ voodoo_get_block(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *stat
}
voodoo_recomp++;
data = &voodoo_x86_data[odd_even + next_block_to_write[odd_even] * 4];
// code_block = data->code_block;
#if 0
code_block = data->code_block;
#endif
voodoo_generate(data->code_block, voodoo, params, state, depth_op);
@@ -3205,11 +3227,9 @@ voodoo_get_block(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *stat
void
voodoo_codegen_init(voodoo_t *voodoo)
{
int c;
voodoo->codegen_data = plat_mmap(sizeof(voodoo_x86_data_t) * BLOCK_NUM * 4, 1);
for (c = 0; c < 256; c++) {
for (uint16_t c = 0; c < 256; c++) {
int d[4];
int _ds = c & 0xf;
int dt = c >> 4;

View File

@@ -639,24 +639,29 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
int depth_jump_pos = 0;
int depth_jump_pos2 = 0;
int loop_jump_pos = 0;
// xmm_01_w = (__m128i)0x0001000100010001ull;
// xmm_ff_w = (__m128i)0x00ff00ff00ff00ffull;
// xmm_ff_b = (__m128i)0x00000000ffffffffull;
#if 0
xmm_01_w = (__m128i)0x0001000100010001ull;
xmm_ff_w = (__m128i)0x00ff00ff00ff00ffull;
xmm_ff_b = (__m128i)0x00000000ffffffffull;
#endif
xmm_01_w = _mm_set_epi32(0, 0, 0x00010001, 0x00010001);
xmm_ff_w = _mm_set_epi32(0, 0, 0x00ff00ff, 0x00ff00ff);
xmm_ff_b = _mm_set_epi32(0, 0, 0, 0x00ffffff);
minus_254 = _mm_set_epi32(0, 0, 0xff02ff02, 0xff02ff02);
// *(uint64_t *)&const_1_48 = 0x45b0000000000000ull;
// block_pos = 0;
// voodoo_get_depth = &code_block[block_pos];
#if 0
*(uint64_t *)&const_1_48 = 0x45b0000000000000ull;
block_pos = 0;
voodoo_get_depth = &code_block[block_pos];
#endif
/*W at (%esp+4)
Z at (%esp+12)
new_depth at (%esp+16)*/
// if ((params->fbzMode & FBZ_DEPTH_ENABLE) && (depth_op == DEPTHOP_NEVER))
// {
// addbyte(0xC3); /*RET*/
// return;
// }
#if 0
if ((params->fbzMode & FBZ_DEPTH_ENABLE) && (depth_op == DEPTHOP_NEVER)) {
addbyte(0xC3); /*RET*/
return;
}
#endif
addbyte(0x55); /*PUSH EBP*/
addbyte(0x57); /*PUSH EDI*/
addbyte(0x56); /*PUSH ESI*/
@@ -871,16 +876,19 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
fatal("Bad depth_op\n");
} else if ((params->fbzMode & FBZ_DEPTH_ENABLE) && (depthop == DEPTHOP_NEVER)) {
addbyte(0xC3); /*RET*/
// addbyte(0x30); /*XOR EAX, EAX*/
// addbyte(0xc0);
#if 0
addbyte(0x30); /*XOR EAX, EAX*/
addbyte(0xc0);
#endif
}
#if 0
else {
addbyte(0xb0); /*MOV AL, 1*/
addbyte(1);
}
// else
// {
// addbyte(0xb0); /*MOV AL, 1*/
// addbyte(1);
// }
// voodoo_combine = &code_block[block_pos];
voodoo_combine = &code_block[block_pos];
#endif
/*XMM0 = colour*/
/*XMM2 = 0 (for unpacking*/
@@ -2076,12 +2084,13 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x05);
addlong((uint32_t) &xmm_ff_b);
}
// #if 0
// addbyte(0x66); /*MOVD state->out[EDI], XMM0*/
// addbyte(0x0f);
// addbyte(0x7e);
// addbyte(0x87);
// addlong(offsetof(voodoo_state_t, out));
#if 0
addbyte(0x66); /*MOVD state->out[EDI], XMM0*/
addbyte(0x0f);
addbyte(0x7e);
addbyte(0x87);
addlong(offsetof(voodoo_state_t, out));
#endif
if (params->fogMode & FOG_ENABLE) {
if (params->fogMode & FOG_CONSTANT) {
addbyte(0x66); /*MOVD XMM3, params->fogColor[ESI]*/
@@ -2093,11 +2102,18 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x0f);
addbyte(0xdc);
addbyte(0xc3);
/* src_r += params->fogColor.r;
src_g += params->fogColor.g;
src_b += params->fogColor.b; */
#if 0
src_r += params->fogColor.r;
src_g += params->fogColor.g;
src_b += params->fogColor.b; */
#endif
} else {
/*int fog_r, fog_g, fog_b, fog_a; */
#if 0
int fog_r;
int fog_g;
int fog_b;
int fog_a;
#endif
addbyte(0x66); /*PUNPCKLBW XMM0, XMM2*/
addbyte(0x0f);
@@ -2168,10 +2184,12 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x01); /*ADD EAX, EBX*/
addbyte(0xd8);
/* int fog_idx = (w_depth >> 10) & 0x3f;
#if 0
int fog_idx = (w_depth >> 10) & 0x3f;
fog_a = params->fogTable[fog_idx].fog;
fog_a += (params->fogTable[fog_idx].dfog * ((w_depth >> 2) & 0xff)) >> 10;*/
fog_a = params->fogTable[fog_idx].fog;
fog_a += (params->fogTable[fog_idx].dfog * ((w_depth >> 2) & 0xff)) >> 10;
#endif
break;
case FOG_Z:
@@ -2183,7 +2201,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(12);
addbyte(0x25); /*AND EAX, 0xff*/
addlong(0xff);
// fog_a = (z >> 20) & 0xff;
#if 0
fog_a = (z >> 20) & 0xff;
#endif
break;
case FOG_ALPHA:
@@ -2205,7 +2225,9 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x0f); /*CMOVAE EAX, EBX*/
addbyte(0x43);
addbyte(0xc3);
// fog_a = CLAMP(ia >> 12);
#if 0
fog_a = CLAMP(ia >> 12);
#endif
break;
case FOG_W:
@@ -2226,13 +2248,16 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x0f); /*CMOVAE EAX, EBX*/
addbyte(0x43);
addbyte(0xc3);
// fog_a = CLAMP(w >> 32);
#if 0
fog_a = CLAMP(w >> 32);
#endif
break;
}
addbyte(0x01); /*ADD EAX, EAX*/
addbyte(0xc0);
// fog_a++;
#if 0
fog_a++;
#endif
addbyte(0x66); /*PMULLW XMM3, alookup+4[EAX*8]*/
addbyte(0x0f);
addbyte(0xd5);
@@ -2244,9 +2269,11 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x71);
addbyte(0xe3);
addbyte(7);
/* fog_r = (fog_r * fog_a) >> 8;
fog_g = (fog_g * fog_a) >> 8;
fog_b = (fog_b * fog_a) >> 8;*/
#if 0
fog_r = (fog_r * fog_a) >> 8;
fog_g = (fog_g * fog_a) >> 8;
fog_b = (fog_b * fog_a) >> 8;
#endif
if (params->fogMode & FOG_MULT) {
addbyte(0xf3); /*MOV XMM0, XMM3*/
@@ -2258,9 +2285,11 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x0f);
addbyte(0xfd);
addbyte(0xc3);
/* src_r += fog_r;
src_g += fog_g;
src_b += fog_b;*/
#if 0
src_r += fog_r;
src_g += fog_g;
src_b += fog_b;
#endif
}
addbyte(0x66); /*PACKUSWB XMM0, XMM0*/
addbyte(0x0f);
@@ -2268,9 +2297,11 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0xc0);
}
/* src_r = CLAMP(src_r);
src_g = CLAMP(src_g);
src_b = CLAMP(src_b);*/
#if 0
src_r = CLAMP(src_r);
src_g = CLAMP(src_g);
src_b = CLAMP(src_b);
#endif
}
if ((params->alphaMode & 1) && (alpha_func != AFUNC_NEVER) && (alpha_func != AFUNC_ALWAYS)) {
@@ -2696,12 +2727,13 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0x67);
addbyte(0xc0);
}
// #endif
// addbyte(0x8b); /*MOV EDX, x (ESP+12)*/
// addbyte(0x54);
// addbyte(0x24);
// addbyte(12);
#if 0
addbyte(0x8b); /*MOV EDX, x (ESP+12)*/
addbyte(0x54);
addbyte(0x24);
addbyte(12);
#endif
addbyte(0x8b); /*MOV EDX, state->x[EDI]*/
addbyte(0x97);
@@ -2716,9 +2748,11 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
addbyte(0xc0);
if (params->fbzMode & FBZ_RGB_WMASK) {
// addbyte(0x89); /*MOV state->rgb_out[EDI], EAX*/
// addbyte(0x87);
// addlong(offsetof(voodoo_state_t, rgb_out));
#if 0
addbyte(0x89); /*MOV state->rgb_out[EDI], EAX*/
addbyte(0x87);
addlong(offsetof(voodoo_state_t, rgb_out));
#endif
if (dither) {
addbyte(0x8b); /*MOV ESI, real_y (ESP+16)*/
@@ -3118,7 +3152,9 @@ voodoo_get_block(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *stat
}
voodoo_recomp++;
data = &codegen_data[odd_even + next_block_to_write[odd_even] * 4];
// code_block = data->code_block;
#if 0
code_block = data->code_block;
#endif
voodoo_generate(data->code_block, voodoo, params, state, depth_op);
@@ -3142,11 +3178,9 @@ voodoo_get_block(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *stat
void
voodoo_codegen_init(voodoo_t *voodoo)
{
int c;
voodoo->codegen_data = plat_mmap(sizeof(voodoo_x86_data_t) * BLOCK_NUM * 4, 1);
for (c = 0; c < 256; c++) {
for (uint16_t c = 0; c < 256; c++) {
int d[4];
int _ds = c & 0xf;
int dt = c >> 4;

View File

@@ -596,7 +596,9 @@ typedef struct voodoo_t {
uint32_t vidOverlayDudxOffsetSrcWidth;
uint32_t vidOverlayDvdy;
uint32_t vidOverlayDvdyOffset;
// uint32_t vidDesktopOverlayStride;
#if 0
uint32_t vidDesktopOverlayStride;
#endif
int start_x;
int start_y;

View File

@@ -20,7 +20,7 @@
#include <86box/rom.h>
typedef struct {
typedef struct xga_hwcursor_t {
int ena;
int x;
int y;
@@ -37,11 +37,14 @@ typedef struct xga_t {
mem_mapping_t video_mapping;
rom_t bios_rom;
rom_t vga_bios_rom;
xga_hwcursor_t hwcursor, hwcursor_latch;
xga_hwcursor_t hwcursor;
xga_hwcursor_t hwcursor_latch;
PALETTE extpal;
uint8_t test, atest[2], testpixel;
;
uint8_t test;
uint8_t atest[2];
uint8_t testpixel;
uint8_t pos_regs[8];
uint8_t disp_addr;
uint8_t cfg_reg;
@@ -54,33 +57,43 @@ typedef struct xga_t {
uint8_t regs_idx;
uint8_t hwc_hotspot_x;
uint8_t hwc_hotspot_y;
uint8_t disp_cntl_1, disp_cntl_2;
uint8_t clk_sel_1, clk_sel_2;
uint8_t disp_cntl_1;
uint8_t disp_cntl_2;
uint8_t clk_sel_1;
uint8_t clk_sel_2;
uint8_t hwc_control;
uint8_t bus_arb;
uint8_t isa_pos_enable;
uint8_t hwcursor_oddeven;
uint8_t cfg_reg_instance;
uint8_t rowcount;
uint8_t pal_idx, pal_idx_prefetch;
uint8_t pal_idx;
uint8_t pal_idx_prefetch;
uint8_t pal_seq;
uint8_t pal_mask;
uint8_t pal_r, pal_r_prefetch;
uint8_t pal_g, pal_g_prefetch;
uint8_t pal_b, pal_b_prefetch;
uint8_t pal_r;
uint8_t pal_r_prefetch;
uint8_t pal_g;
uint8_t pal_g_prefetch;
uint8_t pal_b;
uint8_t pal_b_prefetch;
uint8_t sprite_data[1024];
uint8_t scrollcache;
uint8_t direct_color;
uint8_t dma_channel;
uint8_t instance_isa, instance_num, ext_mem_addr;
uint8_t *vram, *changedvram;
uint8_t instance_isa;
uint8_t instance_num;
uint8_t ext_mem_addr;
uint8_t *vram;
uint8_t *changedvram;
int16_t hwc_pos_x;
int16_t hwc_pos_y;
uint16_t pos_idx;
uint16_t htotal;
uint16_t sprite_idx, sprite_idx_prefetch;
uint16_t sprite_idx;
uint16_t sprite_idx_prefetch;
uint16_t hdisp;
uint16_t vtotal;
uint16_t vdispend;
@@ -88,41 +101,74 @@ typedef struct xga_t {
uint16_t vsyncstart;
uint16_t linecmp;
uint16_t pix_map_width;
uint16_t sprite_pal_addr_idx, old_pal_addr_idx;
uint16_t sprite_pal_addr_idx;
uint16_t old_pal_addr_idx;
uint16_t sprite_pal_addr_idx_prefetch;
int v_total, dispend, v_syncstart, split, v_blankstart,
h_disp, h_disp_old, h_total, h_disp_time, rowoffset,
dispon, h_disp_on, vc, sc, linepos, oddeven, firstline, lastline,
firstline_draw, lastline_draw, displine, fullchange, interlace,
char_width, hwcursor_on;
int pal_pos, pal_pos_prefetch;
int v_total;
int dispend;
int v_syncstart;
int split;
int v_blankstart;
int h_disp;
int h_disp_old;
int h_total;
int h_disp_time;
int rowoffset;
int dispon;
int h_disp_on;
int vc;
int sc;
int linepos;
int oddeven;
int firstline;
int lastline;
int firstline_draw;
int lastline_draw;
int displine;
int fullchange;
int interlace;
int char_width;
int hwcursor_on;
int pal_pos;
int pal_pos_prefetch;
int on;
int op_mode_reset, linear_endian_reverse;
int sprite_pos, sprite_pos_prefetch, cursor_data_on;
int pal_test, a5_test;
int type, bus;
int op_mode_reset;
int linear_endian_reverse;
int sprite_pos;
int sprite_pos_prefetch;
int cursor_data_on;
int pal_test;
int a5_test;
int type;
int bus;
uint32_t linear_base, linear_size, banked_mask;
uint32_t linear_base;
uint32_t linear_size;
uint32_t banked_mask;
uint32_t base_addr_1mb;
uint32_t hwc_color0, hwc_color1;
uint32_t hwc_color0;
uint32_t hwc_color1;
uint32_t disp_start_addr;
uint32_t ma_latch;
uint32_t vram_size;
uint32_t vram_mask;
uint32_t rom_addr;
uint32_t ma, maback;
uint32_t ma;
uint32_t maback;
uint32_t extpallook[256];
uint32_t read_bank, write_bank;
uint32_t read_bank;
uint32_t write_bank;
uint32_t px_map_base;
uint64_t dispontime, dispofftime;
uint64_t dispontime;
uint64_t dispofftime;
struct
{
struct {
uint8_t control;
uint8_t px_map_idx;
uint8_t frgd_mix, bkgd_mix;
uint8_t frgd_mix;
uint8_t bkgd_mix;
uint8_t cc_cond;
uint8_t octant;
uint8_t draw_mode;
@@ -133,15 +179,19 @@ typedef struct xga_t {
uint8_t short_stroke_vector4;
int16_t bres_err_term;
int16_t bres_k1, bres_k2;
int16_t bres_k1;
int16_t bres_k2;
uint16_t blt_width;
uint16_t blt_height;
uint16_t mask_map_origin_x_off;
uint16_t mask_map_origin_y_off;
uint16_t src_map_x, src_map_y;
uint16_t dst_map_x, dst_map_y;
uint16_t pat_map_x, pat_map_y;
uint16_t src_map_x;
uint16_t src_map_y;
uint16_t dst_map_x;
uint16_t dst_map_y;
uint16_t pat_map_x;
uint16_t pat_map_y;
int ssv_state;
int pat_src;
@@ -149,7 +199,14 @@ typedef struct xga_t {
int dst_map;
int bkgd_src;
int fore_src;
int x, y, sx, sy, dx, dy, px, py;
int x;
int y;
int sx;
int sy;
int dx;
int dy;
int px;
int py;
int pattern;
int command_len;
@@ -157,7 +214,8 @@ typedef struct xga_t {
uint32_t color_cmp;
uint32_t carry_chain;
uint32_t plane_mask;
uint32_t frgd_color, bkgd_color;
uint32_t frgd_color;
uint32_t bkgd_color;
uint32_t command;
uint32_t dir_cmd;