Revision bc24a225 hw/blizzard.c
b/hw/blizzard.c | ||
---|---|---|
28 | 28 |
|
29 | 29 |
typedef void (*blizzard_fn_t)(uint8_t *, const uint8_t *, unsigned int); |
30 | 30 |
|
31 |
struct blizzard_s {
|
|
31 |
typedef struct {
|
|
32 | 32 |
uint8_t reg; |
33 | 33 |
uint32_t addr; |
34 | 34 |
int swallow; |
... | ... | |
120 | 120 |
int pitch; |
121 | 121 |
blizzard_fn_t line_fn; |
122 | 122 |
} data; |
123 |
}; |
|
123 |
} BlizzardState;
|
|
124 | 124 |
|
125 | 125 |
/* Bytes(!) per pixel */ |
126 | 126 |
static const int blizzard_iformat_bpp[0x10] = { |
... | ... | |
144 | 144 |
*v = 0x80 + ((0xe0e * r - 0x0bc7 * g - 0x247 * b) >> 13); |
145 | 145 |
} |
146 | 146 |
|
147 |
static void blizzard_window(struct blizzard_s *s)
|
|
147 |
static void blizzard_window(BlizzardState *s)
|
|
148 | 148 |
{ |
149 | 149 |
uint8_t *src, *dst; |
150 | 150 |
int bypp[2]; |
... | ... | |
175 | 175 |
fn(dst, src, bypl[2]); |
176 | 176 |
} |
177 | 177 |
|
178 |
static int blizzard_transfer_setup(struct blizzard_s *s)
|
|
178 |
static int blizzard_transfer_setup(BlizzardState *s)
|
|
179 | 179 |
{ |
180 | 180 |
if (s->source > 3 || !s->bpp || |
181 | 181 |
s->ix[1] < s->ix[0] || s->iy[1] < s->iy[0]) |
... | ... | |
199 | 199 |
return 1; |
200 | 200 |
} |
201 | 201 |
|
202 |
static void blizzard_reset(struct blizzard_s *s)
|
|
202 |
static void blizzard_reset(BlizzardState *s)
|
|
203 | 203 |
{ |
204 | 204 |
s->reg = 0; |
205 | 205 |
s->swallow = 0; |
... | ... | |
280 | 280 |
} |
281 | 281 |
|
282 | 282 |
static inline void blizzard_invalidate_display(void *opaque) { |
283 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
283 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
284 | 284 |
|
285 | 285 |
s->invalidate = 1; |
286 | 286 |
} |
287 | 287 |
|
288 | 288 |
static uint16_t blizzard_reg_read(void *opaque, uint8_t reg) |
289 | 289 |
{ |
290 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
290 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
291 | 291 |
|
292 | 292 |
switch (reg) { |
293 | 293 |
case 0x00: /* Revision Code */ |
... | ... | |
490 | 490 |
|
491 | 491 |
static void blizzard_reg_write(void *opaque, uint8_t reg, uint16_t value) |
492 | 492 |
{ |
493 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
493 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
494 | 494 |
|
495 | 495 |
switch (reg) { |
496 | 496 |
case 0x04: /* PLL M-Divider */ |
... | ... | |
831 | 831 |
|
832 | 832 |
uint16_t s1d13745_read(void *opaque, int dc) |
833 | 833 |
{ |
834 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
834 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
835 | 835 |
uint16_t value = blizzard_reg_read(s, s->reg); |
836 | 836 |
|
837 | 837 |
if (s->swallow -- > 0) |
... | ... | |
844 | 844 |
|
845 | 845 |
void s1d13745_write(void *opaque, int dc, uint16_t value) |
846 | 846 |
{ |
847 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
847 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
848 | 848 |
|
849 | 849 |
if (s->swallow -- > 0) |
850 | 850 |
return; |
... | ... | |
860 | 860 |
void s1d13745_write_block(void *opaque, int dc, |
861 | 861 |
void *buf, size_t len, int pitch) |
862 | 862 |
{ |
863 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
863 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
864 | 864 |
|
865 | 865 |
while (len > 0) { |
866 | 866 |
if (s->reg == 0x90 && dc && |
... | ... | |
886 | 886 |
|
887 | 887 |
static void blizzard_update_display(void *opaque) |
888 | 888 |
{ |
889 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
889 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
890 | 890 |
int y, bypp, bypl, bwidth; |
891 | 891 |
uint8_t *src, *dst; |
892 | 892 |
|
... | ... | |
935 | 935 |
} |
936 | 936 |
|
937 | 937 |
static void blizzard_screen_dump(void *opaque, const char *filename) { |
938 |
struct blizzard_s *s = (struct blizzard_s *) opaque;
|
|
938 |
BlizzardState *s = (BlizzardState *) opaque;
|
|
939 | 939 |
|
940 | 940 |
blizzard_update_display(opaque); |
941 | 941 |
if (s && ds_get_data(s->state)) |
... | ... | |
955 | 955 |
|
956 | 956 |
void *s1d13745_init(qemu_irq gpio_int) |
957 | 957 |
{ |
958 |
struct blizzard_s *s = (struct blizzard_s *) qemu_mallocz(sizeof(*s));
|
|
958 |
BlizzardState *s = (BlizzardState *) qemu_mallocz(sizeof(*s));
|
|
959 | 959 |
|
960 | 960 |
s->fb = qemu_malloc(0x180000); |
961 | 961 |
|
Also available in: Unified diff