comparison jag_video.h @ 1090:a68274a25e2f

Initial stab at implementing the Jaguar object processor
author Michael Pavone <pavone@retrodev.com>
date Sun, 16 Oct 2016 18:25:18 -0700
parents 87597a048d38
children faa3a4617f62
comparison
equal deleted inserted replaced
1089:87597a048d38 1090:a68274a25e2f
48 JAG_VIDEO_REGS 48 JAG_VIDEO_REGS
49 }; 49 };
50 #define LINEBUFFER_WORDS 720 50 #define LINEBUFFER_WORDS 720
51 51
52 typedef struct { 52 typedef struct {
53 uint32_t *output; 53 uint64_t im_data;
54 uint32_t output_pitch; 54 uint64_t prefetch;
55 uint16_t regs[JAG_VIDEO_REGS]; 55 uint32_t cycles;
56 uint32_t obj_start;
57 uint32_t link;
58 uint32_t data_address;
59 uint32_t cur_address;
60 uint32_t increment;
61 uint32_t line_pitch;
62 uint32_t lb_offset;
63 int16_t xpos;
64 uint16_t ypos;
65 uint16_t height;
66 int16_t hscale;
67 int16_t vscale;
68 int16_t hremainder;
69 int16_t remainder;
70 uint8_t bpp;
71 uint8_t line_phrases;
72 uint8_t state;
73 uint8_t type;
74 uint8_t im_bits;
75 uint8_t pal_offset;
76 uint8_t has_prefetch;
77 uint8_t hflip;
78 uint8_t addpixels;
79 uint8_t transparent;
80 uint8_t leftclip;
81 } object_processor;
82
83 typedef struct {
84 void *system;
85 uint32_t *output;
86 uint32_t output_pitch;
87 uint16_t regs[JAG_VIDEO_REGS];
56 88
57 uint16_t clut[256]; 89 uint16_t clut[256];
58 uint16_t line_buffer_a[LINEBUFFER_WORDS]; 90 uint16_t line_buffer_a[LINEBUFFER_WORDS];
59 uint16_t line_buffer_b[LINEBUFFER_WORDS]; 91 uint16_t line_buffer_b[LINEBUFFER_WORDS];
60 uint16_t *write_line_buffer; 92 uint16_t *write_line_buffer;
61 93
62 uint32_t cycles; 94 uint32_t cycles;
63 uint8_t pclock_div; 95 uint32_t op_cycles;
64 uint8_t pclock_counter; 96 uint8_t pclock_div;
65 uint8_t mode; 97 uint8_t pclock_counter;
98 uint8_t mode;
99
100 object_processor op;
101
66 } jag_video; 102 } jag_video;
67 103
68 104
69 jag_video *jag_video_init(void); 105 jag_video *jag_video_init(void);
70 void jag_video_run(jag_video *context, uint32_t target_cycle); 106 void jag_video_run(jag_video *context, uint32_t target_cycle);