summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author holub <andrei.holub@gmail.com>2025-10-01 13:32:08 -0400
committer GitHub <noreply@github.com>2025-10-01 19:32:08 +0200
commite62c2c924f6faf805f14a9a924fe6a7e83a26ae4 (patch)
tree757d985259e0f91a616598c1be5a9b059807ec8d
parentc248948d6500bdcfd54da21fd910432b60cc8d30 (diff)
sinclair/screen_ula.cpp: Fixed Timex screen1 selection (#14247)
-rw-r--r--src/mame/sinclair/screen_ula.cpp3
-rw-r--r--src/mame/sinclair/specnext.cpp7
2 files changed, 6 insertions, 4 deletions
diff --git a/src/mame/sinclair/screen_ula.cpp b/src/mame/sinclair/screen_ula.cpp
index b354b0f1012..06b1abbe1fe 100644
--- a/src/mame/sinclair/screen_ula.cpp
+++ b/src/mame/sinclair/screen_ula.cpp
@@ -94,10 +94,11 @@ void screen_ula_device::draw(screen_device &screen, bitmap_rgb32 &bitmap, const
void screen_ula_device::draw_ula(bitmap_rgb32 &bitmap, const rectangle &clip, bool flash, bitmap_ind8 &priority_bitmap, u8 pcode)
{
const bool hicolor = screen_mode() == 2; // timex hicolor
+ const bool timex_alt = !m_ula_shadow_en && screen_mode() == 1;
flash &= !m_ulanext_en && !m_ulap_en;
const rgb_t gt0 = rgbexpand<3,3,3>((m_global_transparent << 1) | 0, 6, 3, 0);
const rgb_t gt1 = rgbexpand<3,3,3>((m_global_transparent << 1) | 1, 6, 3, 0);
- const u8 *screen_location = m_host_ram_ptr + ((m_ula_shadow_en ? 7 : 5) << 14);
+ const u8 *screen_location = m_host_ram_ptr + ((m_ula_shadow_en ? 7 : 5) << 14) + (timex_alt ? 0x2000 : 0);
const u16 x_min = (((clip.left() - m_offset_h) >> 1) + m_ula_scroll_x) % SCREEN_AREA.width();
for (u16 vpos = clip.top(); vpos <= clip.bottom(); vpos++)
diff --git a/src/mame/sinclair/specnext.cpp b/src/mame/sinclair/specnext.cpp
index 18f3f942db3..1a28ea21367 100644
--- a/src/mame/sinclair/specnext.cpp
+++ b/src/mame/sinclair/specnext.cpp
@@ -1038,6 +1038,7 @@ u8 specnext_state::port_ff_r()
void specnext_state::port_ff_w(u8 data)
{
+ m_screen->update_now();
m_port_ff_data = data; // ==port_ff_dat_tmx
m_ula_scr->port_ff_reg_w(m_port_ff_data);
nr_6a_lores_radastan_xor_w(m_nr_6a_lores_radastan_xor);
@@ -1972,7 +1973,7 @@ void specnext_state::reg_w(offs_t nr_wr_reg, u8 nr_wr_dat)
m_nr_22_line_interrupt_en = BIT(nr_wr_dat, 1);
m_nr_23_line_interrupt = (m_nr_23_line_interrupt & ~0x0100) | (BIT(nr_wr_dat, 0) << 8);
line_irq_adjust();
- m_port_ff_data = (m_port_ff_data & 0xbf) | (BIT(nr_wr_dat, 1) << 6);
+ port_ff_w((m_port_ff_data & 0xbf) | (BIT(nr_wr_dat, 1) << 6));
break;
case 0x23:
m_nr_23_line_interrupt = (m_nr_23_line_interrupt & ~0x00ff) | nr_wr_dat;
@@ -2128,7 +2129,7 @@ void specnext_state::reg_w(offs_t nr_wr_reg, u8 nr_wr_dat)
m_nr_68_ula_stencil_mode = BIT(nr_wr_dat, 0);
break;
case 0x69:
- m_port_ff_data = (m_port_ff_data & 0xc0) | (nr_wr_dat & 0x3f);
+ port_ff_w((m_port_ff_data & 0xc0) | (nr_wr_dat & 0x3f));
port_7ffd_reg_w((m_port_7ffd_data & ~0x08) | (BIT(nr_wr_dat, 6) << 3));
port_123b_layer2_en_w(BIT(nr_wr_dat, 7));
break;
@@ -2291,7 +2292,7 @@ void specnext_state::reg_w(offs_t nr_wr_reg, u8 nr_wr_dat)
m_nr_c4_int_en_0_expbus = BIT(nr_wr_dat, 7);
m_nr_22_line_interrupt_en = BIT(nr_wr_dat, 1);
line_irq_adjust();
- m_port_ff_data = (m_port_ff_data & 0xbf) | (BIT(~nr_wr_dat, 0) << 6);
+ port_ff_w((m_port_ff_data & 0xbf) | (BIT(~nr_wr_dat, 0) << 6));
break;
case 0xc5:
{