diff options
| author | 2026-04-25 08:07:05 -0700 | |
|---|---|---|
| committer | 2026-04-25 11:07:05 -0400 | |
| commit | d3c426df8f0baed9379f6425fdd6c7cdf17b3054 (patch) | |
| tree | ac0c1f9b0111403824064c23ede8f9aadfe20f47 | |
| parent | 120007e241d2f20384313e78e76d413e81982e12 (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.h | 1 | ||||
| -rw-r--r-- | src/devices/bus/a2bus/a2eext80col.h | 1 | ||||
| -rw-r--r-- | src/devices/bus/a2bus/a2eramworks3.h | 1 | ||||
| -rw-r--r-- | src/devices/bus/a2bus/a2estd80col.cpp | 2 | ||||
| -rw-r--r-- | src/devices/bus/a2bus/a2estd80col.h | 1 | ||||
| -rw-r--r-- | src/mame/apple/apple2video.cpp | 13 |
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); |
