sinclair/atm.cpp: fix MT08472 heap overflow/crash (#13123)

* MT08472: heap overflow
* fix palette range
This commit is contained in:
holub 2024-12-27 13:43:54 -05:00 committed by GitHub
parent dfe669f887
commit cd29cc1578
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 4 additions and 4 deletions

View File

@ -95,7 +95,7 @@ void atm_state::atm_port_ff_w(offs_t offset, u8 data)
{
// Must read current ULA value (which is doesn't work now) from the BUS.
// Good enough as non-border case is too complicated and possibly no software uses it.
u8 pen = get_border_color(m_screen->hpos(), m_screen->vpos());
u8 pen = 0x0f & get_border_color(m_screen->hpos(), m_screen->vpos());
m_palette_data[pen] = data;
m_palette->set_pen_color(pen,
(BIT(~data, 1) * 0xaa) | (BIT(~data, 6) * 0x55),
@ -440,12 +440,12 @@ void atm_state::machine_reset()
m_beta->enable();
m_beta_drive_selected = 0;
m_port_fe_data = -1;
m_port_7ffd_data = 0;
m_port_1ffd_data = -1;
m_port_77_data = 0;
m_br3 = 0;
m_palette_data = { 0xff };
atm_port_77_w(0x4000, 3); // m_port_77_data: CPM=0(on), PEN=0(off), PEN2=1(off); vmode: zx
}

View File

@ -102,7 +102,7 @@ protected:
bool m_pen2; // palette selector
u8 m_rg = 0b011; // 0:320x200lo, 2:640:200hi, 3:256x192zx, 6:80x25txt
u8 m_br3;
std::vector<u8> m_palette_data;
u8 m_palette_data[16];
u8 m_ata_data_latch;
u8 m_beta_drive_selected;
};

View File

@ -194,7 +194,7 @@ void pentevo_state::atm_port_ff_w(offs_t offset, u8 data)
{
if (BIT(m_port_bf_data, 5) && !m_pen2)
{
u8 pen = get_border_color(m_screen->hpos(), m_screen->vpos());
u8 pen = 0x0f & get_border_color(m_screen->hpos(), m_screen->vpos());
m_palette_data[pen] = data;
m_palette->set_pen_color(pen,
(BIT(~data, 1) * 0x88) | (BIT(~data, 6) * 0x44) | (BIT(~offset, 9) * 0x22) | (BIT(~offset, 14) * 0x11),