mirror of
https://github.com/holub/mame
synced 2025-07-06 02:18:09 +03:00
(MESS) Apollo: fix out-of-bounds framebuffer access crash on OS X [Hans Ostermeyer]
This commit is contained in:
parent
264bb9021e
commit
a46daa5a15
@ -113,19 +113,23 @@ public:
|
||||
void device_reset();
|
||||
void device_reset_mono19i();
|
||||
|
||||
// monochrome
|
||||
// monochrome control
|
||||
READ8_DEVICE_HANDLER( apollo_mcr_r );
|
||||
WRITE8_DEVICE_HANDLER( apollo_mcr_w );
|
||||
READ16_DEVICE_HANDLER( apollo_mgm_r );
|
||||
WRITE16_DEVICE_HANDLER( apollo_mgm_w );
|
||||
|
||||
// color
|
||||
// monochrome and color memory
|
||||
READ16_DEVICE_HANDLER( apollo_mem_r );
|
||||
WRITE16_DEVICE_HANDLER( apollo_mem_w );
|
||||
|
||||
// color control
|
||||
READ8_DEVICE_HANDLER( apollo_ccr_r );
|
||||
WRITE8_DEVICE_HANDLER( apollo_ccr_w );
|
||||
|
||||
UINT32 screen_update(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void vblank_state_changed(device_t *device, screen_device &screen, bool vblank_state);
|
||||
|
||||
int is_mono() { return m_n_planes == 1; }
|
||||
|
||||
private:
|
||||
class lut_fifo;
|
||||
class bt458;
|
||||
@ -1368,7 +1372,7 @@ void apollo_graphics::blt(UINT32 dest_addr, UINT16 mem_mask)
|
||||
Color graphics memory space at A0000 - BFFFF
|
||||
***************************************************************************/
|
||||
|
||||
READ16_DEVICE_HANDLER( apollo_graphics::apollo_mgm_r )
|
||||
READ16_DEVICE_HANDLER( apollo_graphics::apollo_mem_r )
|
||||
{
|
||||
UINT16 data;
|
||||
UINT32 src_addr;
|
||||
@ -1407,7 +1411,7 @@ READ16_DEVICE_HANDLER( apollo_graphics::apollo_mgm_r )
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( apollo_graphics::apollo_mgm_w )
|
||||
WRITE16_DEVICE_HANDLER( apollo_graphics::apollo_mem_w )
|
||||
{
|
||||
UINT32 dest_addr;
|
||||
UINT32 src_addr;
|
||||
@ -1892,9 +1896,10 @@ WRITE8_DEVICE_HANDLER( apollo_graphics::apollo_ccr_w )
|
||||
|
||||
READ16_DEVICE_HANDLER( apollo_cgm_r )
|
||||
{
|
||||
if (!apollo_config(APOLLO_CONF_MONO_15I))
|
||||
apollo_graphics *apollo_graphics = get_safe_token(device);
|
||||
if (!apollo_graphics->is_mono())
|
||||
{
|
||||
return apollo_mgm_r(device, space, offset, mem_mask);
|
||||
return apollo_graphics->apollo_mem_r(device, space, offset, mem_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1904,9 +1909,10 @@ READ16_DEVICE_HANDLER( apollo_cgm_r )
|
||||
|
||||
WRITE16_DEVICE_HANDLER( apollo_cgm_w )
|
||||
{
|
||||
if (!apollo_config(APOLLO_CONF_MONO_15I))
|
||||
apollo_graphics *apollo_graphics = get_safe_token(device);
|
||||
if (!apollo_graphics->is_mono())
|
||||
{
|
||||
apollo_mgm_w(device, space, offset, data, mem_mask);
|
||||
apollo_graphics->apollo_mem_w(device, space, offset, data, mem_mask);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2261,11 +2267,21 @@ WRITE8_DEVICE_HANDLER( apollo_mcr_w )
|
||||
READ16_DEVICE_HANDLER( apollo_mgm_r )
|
||||
{
|
||||
apollo_graphics *apollo_graphics = get_safe_token(device);
|
||||
return apollo_graphics->apollo_mgm_r(device, space, offset, mem_mask);
|
||||
if (apollo_graphics->is_mono())
|
||||
{
|
||||
return apollo_graphics->apollo_mem_r(device, space, offset, mem_mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0xffff;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( apollo_mgm_w )
|
||||
{
|
||||
apollo_graphics *apollo_graphics = get_safe_token(device);
|
||||
apollo_graphics->apollo_mgm_w(device, space, offset, data, mem_mask);
|
||||
if (apollo_graphics->is_mono())
|
||||
{
|
||||
apollo_graphics->apollo_mem_w(device, space, offset, data, mem_mask);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user