Revision 5dcb6b91 hw/tcx.c
b/hw/tcx.c | ||
---|---|---|
31 | 31 |
#define TCX_TEC_NREGS 0x1000 |
32 | 32 |
|
33 | 33 |
typedef struct TCXState { |
34 |
uint32_t addr;
|
|
34 |
target_phys_addr_t addr;
|
|
35 | 35 |
DisplayState *ds; |
36 | 36 |
uint8_t *vram; |
37 | 37 |
uint32_t *vram24, *cplane; |
... | ... | |
359 | 359 |
{ |
360 | 360 |
TCXState *s = opaque; |
361 | 361 |
|
362 |
qemu_put_be32s(f, (uint32_t *)&s->addr); |
|
363 | 362 |
qemu_put_be32s(f, (uint32_t *)&s->vram); |
364 | 363 |
qemu_put_be32s(f, (uint32_t *)&s->vram24); |
365 | 364 |
qemu_put_be32s(f, (uint32_t *)&s->cplane); |
... | ... | |
377 | 376 |
{ |
378 | 377 |
TCXState *s = opaque; |
379 | 378 |
|
380 |
if (version_id != 2)
|
|
379 |
if (version_id != 3)
|
|
381 | 380 |
return -EINVAL; |
382 | 381 |
|
383 |
qemu_get_be32s(f, (uint32_t *)&s->addr); |
|
384 | 382 |
qemu_get_be32s(f, (uint32_t *)&s->vram); |
385 | 383 |
qemu_get_be32s(f, (uint32_t *)&s->vram24); |
386 | 384 |
qemu_get_be32s(f, (uint32_t *)&s->cplane); |
... | ... | |
492 | 490 |
tcx_dummy_writel, |
493 | 491 |
}; |
494 | 492 |
|
495 |
void tcx_init(DisplayState *ds, uint32_t addr, uint8_t *vram_base,
|
|
493 |
void tcx_init(DisplayState *ds, target_phys_addr_t addr, uint8_t *vram_base,
|
|
496 | 494 |
unsigned long vram_offset, int vram_size, int width, int height, |
497 | 495 |
int depth) |
498 | 496 |
{ |
... | ... | |
513 | 511 |
// 8-bit plane |
514 | 512 |
s->vram = vram_base; |
515 | 513 |
size = vram_size; |
516 |
cpu_register_physical_memory(addr + 0x00800000, size, vram_offset); |
|
514 |
cpu_register_physical_memory(addr + 0x00800000ULL, size, vram_offset);
|
|
517 | 515 |
vram_offset += size; |
518 | 516 |
vram_base += size; |
519 | 517 |
|
520 | 518 |
io_memory = cpu_register_io_memory(0, tcx_dac_read, tcx_dac_write, s); |
521 |
cpu_register_physical_memory(addr + 0x00200000, TCX_DAC_NREGS, io_memory); |
|
519 |
cpu_register_physical_memory(addr + 0x00200000ULL, TCX_DAC_NREGS, io_memory);
|
|
522 | 520 |
|
523 | 521 |
dummy_memory = cpu_register_io_memory(0, tcx_dummy_read, tcx_dummy_write, |
524 | 522 |
s); |
525 |
cpu_register_physical_memory(addr + 0x00700000, TCX_TEC_NREGS, |
|
523 |
cpu_register_physical_memory(addr + 0x00700000ULL, TCX_TEC_NREGS,
|
|
526 | 524 |
dummy_memory); |
527 | 525 |
if (depth == 24) { |
528 | 526 |
// 24-bit plane |
529 | 527 |
size = vram_size * 4; |
530 | 528 |
s->vram24 = (uint32_t *)vram_base; |
531 | 529 |
s->vram24_offset = vram_offset; |
532 |
cpu_register_physical_memory(addr + 0x02000000, size, vram_offset); |
|
530 |
cpu_register_physical_memory(addr + 0x02000000ULL, size, vram_offset);
|
|
533 | 531 |
vram_offset += size; |
534 | 532 |
vram_base += size; |
535 | 533 |
|
... | ... | |
537 | 535 |
size = vram_size * 4; |
538 | 536 |
s->cplane = (uint32_t *)vram_base; |
539 | 537 |
s->cplane_offset = vram_offset; |
540 |
cpu_register_physical_memory(addr + 0x0a000000, size, vram_offset); |
|
538 |
cpu_register_physical_memory(addr + 0x0a000000ULL, size, vram_offset);
|
|
541 | 539 |
graphic_console_init(s->ds, tcx24_update_display, |
542 | 540 |
tcx24_invalidate_display, tcx24_screen_dump, s); |
543 | 541 |
} else { |
544 |
cpu_register_physical_memory(addr + 0x00300000, TCX_THC_NREGS_8, |
|
542 |
cpu_register_physical_memory(addr + 0x00300000ULL, TCX_THC_NREGS_8,
|
|
545 | 543 |
dummy_memory); |
546 | 544 |
graphic_console_init(s->ds, tcx_update_display, tcx_invalidate_display, |
547 | 545 |
tcx_screen_dump, s); |
548 | 546 |
} |
549 | 547 |
// NetBSD writes here even with 8-bit display |
550 |
cpu_register_physical_memory(addr + 0x00301000, TCX_THC_NREGS_24, |
|
548 |
cpu_register_physical_memory(addr + 0x00301000ULL, TCX_THC_NREGS_24,
|
|
551 | 549 |
dummy_memory); |
552 | 550 |
|
553 |
register_savevm("tcx", addr, 1, tcx_save, tcx_load, s);
|
|
551 |
register_savevm("tcx", addr, 3, tcx_save, tcx_load, s);
|
|
554 | 552 |
qemu_register_reset(tcx_reset, s); |
555 | 553 |
tcx_reset(s); |
556 | 554 |
dpy_resize(s->ds, width, height); |
Also available in: Unified diff