summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arekkusu42 <arekkusu42@users.noreply.github.com>2026-04-25 08:07:05 -0700
committer GitHub <noreply@github.com>2026-04-25 11:07:05 -0400
commitd3c426df8f0baed9379f6425fdd6c7cdf17b3054 (patch)
treeac0c1f9b0111403824064c23ede8f9aadfe20f47
parent120007e241d2f20384313e78e76d413e81982e12 (diff)
apple2video: fix -aux std80 crash (#15252)
* apple2video: fix -aux std80 crash by applying m_aux_mask to DGR and DHGR a2eauxslot: remove unused allow_dhr()
-rw-r--r--src/devices/bus/a2bus/a2eauxslot.h1
-rw-r--r--src/devices/bus/a2bus/a2eext80col.h1
-rw-r--r--src/devices/bus/a2bus/a2eramworks3.h1
-rw-r--r--src/devices/bus/a2bus/a2estd80col.cpp2
-rw-r--r--src/devices/bus/a2bus/a2estd80col.h1
-rw-r--r--src/mame/apple/apple2video.cpp13
6 files changed, 6 insertions, 13 deletions
diff --git a/src/devices/bus/a2bus/a2eauxslot.h b/src/devices/bus/a2bus/a2eauxslot.h
index fb7b2936c29..84357b6daaa 100644
--- a/src/devices/bus/a2bus/a2eauxslot.h
+++ b/src/devices/bus/a2bus/a2eauxslot.h
@@ -110,7 +110,6 @@ public:
virtual u8 *get_vram_ptr() = 0;
virtual u8 *get_auxbank_ptr() = 0;
virtual u16 get_auxbank_mask() = 0;
- virtual bool allow_dhr() { return true; }
device_a2eauxslot_card_interface *next() const { return m_next; }
diff --git a/src/devices/bus/a2bus/a2eext80col.h b/src/devices/bus/a2bus/a2eext80col.h
index 9e79193e99d..6669c6432cb 100644
--- a/src/devices/bus/a2bus/a2eext80col.h
+++ b/src/devices/bus/a2bus/a2eext80col.h
@@ -38,7 +38,6 @@ protected:
virtual u8 *get_vram_ptr() override;
virtual u8 *get_auxbank_ptr() override;
virtual u16 get_auxbank_mask() override;
- virtual bool allow_dhr() override { return true; }
private:
u8 m_ram[64*1024];
diff --git a/src/devices/bus/a2bus/a2eramworks3.h b/src/devices/bus/a2bus/a2eramworks3.h
index b837b0dac0d..fb4e1633736 100644
--- a/src/devices/bus/a2bus/a2eramworks3.h
+++ b/src/devices/bus/a2bus/a2eramworks3.h
@@ -36,7 +36,6 @@ protected:
virtual u8 *get_vram_ptr() override;
virtual u8 *get_auxbank_ptr() override;
virtual u16 get_auxbank_mask() override;
- virtual bool allow_dhr() override { return true; }
virtual void write_c07x(u8 offset, u8 data) override;
int m_bank;
diff --git a/src/devices/bus/a2bus/a2estd80col.cpp b/src/devices/bus/a2bus/a2estd80col.cpp
index ab5d4bc48d1..4e508421cda 100644
--- a/src/devices/bus/a2bus/a2estd80col.cpp
+++ b/src/devices/bus/a2bus/a2estd80col.cpp
@@ -4,7 +4,7 @@
a2estd80col.cpp
- Apple IIe Standard 80 Column Card (2K of RAM, no double-hi-res)
+ Apple IIe Standard 80 Column Card (1K of RAM, no double-hi-res)
*********************************************************************/
diff --git a/src/devices/bus/a2bus/a2estd80col.h b/src/devices/bus/a2bus/a2estd80col.h
index 9d52676893f..49cc0f42cf8 100644
--- a/src/devices/bus/a2bus/a2estd80col.h
+++ b/src/devices/bus/a2bus/a2estd80col.h
@@ -38,7 +38,6 @@ protected:
virtual u8 *get_vram_ptr() override;
virtual u8 *get_auxbank_ptr() override;
virtual u16 get_auxbank_mask() override;
- virtual bool allow_dhr() override { return false; } // we don't allow DHR
private:
u8 m_ram[0x400];
diff --git a/src/mame/apple/apple2video.cpp b/src/mame/apple/apple2video.cpp
index 18fe19c1717..bae2a8dc189 100644
--- a/src/mame/apple/apple2video.cpp
+++ b/src/mame/apple/apple2video.cpp
@@ -684,7 +684,7 @@ void a2_video_device::lores_update(screen_device &screen, bitmap_ind16 &bitmap,
/* calculate address */
uint32_t const address = start_address + ((((row/8) & 0x07) << 7) | (((row/8) & 0x18) * 5));
uint8_t const *const vram = m_ram_ptr + address;
- uint8_t const *const vaux = Double ? (m_aux_ptr + address) : nullptr;
+ uint8_t const *const vaux = Double ? (m_aux_ptr + (address & m_aux_mask)) : nullptr;
auto const NIBBLE = [&row] (auto byte) { return ((byte) >> (row & 4)) & 0x0f; };
if (render_perfect_blocks)
{
@@ -870,7 +870,7 @@ void a2_video_device::hgr_update(screen_device &screen, bitmap_ind16 &bitmap, co
void a2_video_device::dhgr_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow)
{
- int const page = use_page_2() ? m_hgr2 : 0x2000;
+ uint32_t const page = use_page_2() ? m_hgr2 : 0x2000;
int const rgbmode = rgb_monitor() ? m_rgbmode : -1;
beginrow = (std::max)(beginrow, cliprect.top());
@@ -881,14 +881,11 @@ void a2_video_device::dhgr_update(screen_device &screen, bitmap_ind16 &bitmap, c
// B&W/Green/Amber monitor, IIgs force-monochrome-DHR setting, or IIe RGB card monochrome DHR
bool const monochrome = monochrome_monitor() || (m_newvideo & 0x20) || rgbmode == 0;
- uint8_t const *const vram = &m_ram_ptr[page];
- uint8_t const *const vaux = (m_aux_ptr ? m_aux_ptr : vram) + page;
-
for (int row = beginrow; row <= endrow; row++)
{
- int const offset = ((((row/8) & 0x07) << 7) | (((row/8) & 0x18) * 5)) | ((row & 7) << 10);
- uint8_t const *const vram_row = vram + offset;
- uint8_t const *const vaux_row = vaux + offset;
+ uint32_t const address = page + ((((row/8) & 0x07) << 7) | (((row/8) & 0x18) * 5) | ((row & 7) << 10));
+ uint8_t const *const vram_row = m_ram_ptr + address;
+ uint8_t const *const vaux_row = m_aux_ptr + (address & m_aux_mask);
uint16_t *p = &bitmap.pix(row);