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];
|
uint32_t read_bank[4], write_bank[4];
|
||||||
} paradise_t;
|
} 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_remap(paradise_t *paradise);
|
||||||
|
|
||||||
|
|
||||||
void paradise_out(uint16_t addr, uint8_t val, void *p)
|
void paradise_out(uint16_t addr, uint8_t val, void *p)
|
||||||
{
|
{
|
||||||
paradise_t *paradise = (paradise_t *)p;
|
paradise_t *paradise = (paradise_t *)p;
|
||||||
|
|
@ -236,7 +233,7 @@ void paradise_recalctimings(svga_t *svga)
|
||||||
svga->render = svga_render_8bpp_highres;
|
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;
|
paradise_t *paradise = (paradise_t *)p;
|
||||||
// pclog("paradise_write : %05X %02X ", addr, val);
|
// 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);
|
// pclog("%08X\n", addr);
|
||||||
svga_write_linear(addr, val, ¶dise->svga);
|
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;
|
paradise_t *paradise = (paradise_t *)p;
|
||||||
// pclog("paradise_read : %05X ", addr);
|
// pclog("paradise_read : %05X ", addr);
|
||||||
|
|
@ -253,6 +256,12 @@ uint8_t paradise_read(uint32_t addr, void *p)
|
||||||
// pclog("%08X\n", addr);
|
// pclog("%08X\n", addr);
|
||||||
return svga_read_linear(addr, ¶dise->svga);
|
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()
|
void *paradise_pvga1a_init()
|
||||||
{
|
{
|
||||||
|
|
@ -268,7 +277,7 @@ void *paradise_pvga1a_init()
|
||||||
NULL,
|
NULL,
|
||||||
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);
|
mem_mapping_set_p(¶dise->svga.mapping, paradise);
|
||||||
|
|
||||||
svga->crtc[0x31] = 'W';
|
svga->crtc[0x31] = 'W';
|
||||||
|
|
@ -299,7 +308,7 @@ void *paradise_wd90c11_init()
|
||||||
NULL,
|
NULL,
|
||||||
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);
|
mem_mapping_set_p(¶dise->svga.mapping, paradise);
|
||||||
|
|
||||||
svga->crtc[0x31] = 'W';
|
svga->crtc[0x31] = 'W';
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue