Paradise now supports SVGA word accesses.
This commit is contained in:
parent
ca4d8e9ffe
commit
26fb271fdc
1 changed files with 16 additions and 7 deletions
|
|
@ -30,11 +30,8 @@ typedef struct paradise_t
|
|||
uint32_t read_bank[4], write_bank[4];
|
||||
} paradise_t;
|
||||
|
||||
void paradise_write(uint32_t addr, uint8_t val, void *p);
|
||||
uint8_t paradise_read(uint32_t addr, void *p);
|
||||
void paradise_remap(paradise_t *paradise);
|
||||
|
||||
|
||||
void paradise_out(uint16_t addr, uint8_t val, void *p)
|
||||
{
|
||||
paradise_t *paradise = (paradise_t *)p;
|
||||
|
|
@ -236,7 +233,7 @@ void paradise_recalctimings(svga_t *svga)
|
|||
svga->render = svga_render_8bpp_highres;
|
||||
}
|
||||
|
||||
void paradise_write(uint32_t addr, uint8_t val, void *p)
|
||||
static void paradise_write(uint32_t addr, uint8_t val, void *p)
|
||||
{
|
||||
paradise_t *paradise = (paradise_t *)p;
|
||||
// pclog("paradise_write : %05X %02X ", addr, val);
|
||||
|
|
@ -244,8 +241,14 @@ void paradise_write(uint32_t addr, uint8_t val, void *p)
|
|||
// pclog("%08X\n", addr);
|
||||
svga_write_linear(addr, val, ¶dise->svga);
|
||||
}
|
||||
static void paradise_writew(uint32_t addr, uint16_t val, void *p)
|
||||
{
|
||||
paradise_t *paradise = (paradise_t *)p;
|
||||
addr = (addr & 0x7fff) + paradise->write_bank[(addr >> 15) & 3];
|
||||
svga_writew_linear(addr, val, ¶dise->svga);
|
||||
}
|
||||
|
||||
uint8_t paradise_read(uint32_t addr, void *p)
|
||||
static uint8_t paradise_read(uint32_t addr, void *p)
|
||||
{
|
||||
paradise_t *paradise = (paradise_t *)p;
|
||||
// pclog("paradise_read : %05X ", addr);
|
||||
|
|
@ -253,6 +256,12 @@ uint8_t paradise_read(uint32_t addr, void *p)
|
|||
// pclog("%08X\n", addr);
|
||||
return svga_read_linear(addr, ¶dise->svga);
|
||||
}
|
||||
static uint16_t paradise_readw(uint32_t addr, void *p)
|
||||
{
|
||||
paradise_t *paradise = (paradise_t *)p;
|
||||
addr = (addr & 0x7fff) + paradise->read_bank[(addr >> 15) & 3];
|
||||
return svga_readw_linear(addr, ¶dise->svga);
|
||||
}
|
||||
|
||||
void *paradise_pvga1a_init()
|
||||
{
|
||||
|
|
@ -268,7 +277,7 @@ void *paradise_pvga1a_init()
|
|||
NULL,
|
||||
NULL);
|
||||
|
||||
mem_mapping_set_handler(¶dise->svga.mapping, paradise_read, NULL, NULL, paradise_write, NULL, NULL);
|
||||
mem_mapping_set_handler(¶dise->svga.mapping, paradise_read, paradise_readw, NULL, paradise_write, paradise_writew, NULL);
|
||||
mem_mapping_set_p(¶dise->svga.mapping, paradise);
|
||||
|
||||
svga->crtc[0x31] = 'W';
|
||||
|
|
@ -299,7 +308,7 @@ void *paradise_wd90c11_init()
|
|||
NULL,
|
||||
NULL);
|
||||
|
||||
mem_mapping_set_handler(¶dise->svga.mapping, paradise_read, NULL, NULL, paradise_write, NULL, NULL);
|
||||
mem_mapping_set_handler(¶dise->svga.mapping, paradise_read, paradise_readw, NULL, paradise_write, paradise_writew, NULL);
|
||||
mem_mapping_set_p(¶dise->svga.mapping, paradise);
|
||||
|
||||
svga->crtc[0x31] = 'W';
|
||||
|
|
|
|||
Loading…
Reference in a new issue