From 7149fab8335f53b73980b41b1e9a155f9e8101cc Mon Sep 17 00:00:00 2001 From: angelosa Date: Sat, 2 Nov 2024 22:52:38 +0100 Subject: video/upd7220.cpp: horizontal multiplier is x16 if in gfx mode, x8 otherwise * fix microbx2 and pc9801:diremono --- src/devices/video/upd7220.cpp | 16 +++++----------- src/mame/misc/microbox2.cpp | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp index eebf00c4391..b7729478461 100644 --- a/src/devices/video/upd7220.cpp +++ b/src/devices/video/upd7220.cpp @@ -383,17 +383,11 @@ inline void upd7220_device::update_blank_timer(int state) inline void upd7220_device::recompute_parameters() { - int horiz_mult = 16, vert_mult = 1; - /* TODO: assume that the pitch also controls number of horizontal pixels in a single cell */ - // horiz_mult = 4 if both mixed and interlace? - if((m_mode & UPD7220_MODE_DISPLAY_MASK) == UPD7220_MODE_DISPLAY_MIXED) - horiz_mult = 8; - else if((m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON) - { - // in interlaced mode every line contains both fields - horiz_mult = 8; // TODO this breaks microbx2, compis uhrg video, characters are 16 pixels wide in interlaced mode too - vert_mult = 2; - } + // microbx2 wants horizontal multiplier of x16 + // pc9801:diremono sets up m_mode to be specifically in character mode, wanting x8 here + // TODO: verify compis uhrg video & high reso Hyper 98 + const int horiz_mult = (m_mode & UPD7220_MODE_DISPLAY_MASK) == UPD7220_MODE_DISPLAY_GRAPHICS ? 16 : 8; + const int vert_mult = (m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON ? 2 : 1; int horiz_pix_total = (m_hs + m_hbp + m_hfp + m_aw) * horiz_mult; int vert_pix_total = (m_vs + m_vbp + m_al + m_vfp) * vert_mult; diff --git a/src/mame/misc/microbox2.cpp b/src/mame/misc/microbox2.cpp index 736fc5cb0a7..1bd293ed39e 100644 --- a/src/mame/misc/microbox2.cpp +++ b/src/mame/misc/microbox2.cpp @@ -302,10 +302,10 @@ void microbx2_state::microbx2(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, µbx2_state::mem_map); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_raw(16_MHz_XTAL, 1024, 0, 768, 674, 31, 607); + screen.set_raw(16_MHz_XTAL / 3, 1024, 0, 768, 674, 31, 607); screen.set_screen_update("gdc", FUNC(upd7220a_device::screen_update)); - upd7220a_device &gdc(UPD7220A(config, "gdc", 16_MHz_XTAL / 8)); + upd7220a_device &gdc(UPD7220A(config, "gdc", 16_MHz_XTAL / 3)); // unverified clock, hand tuned for ~60 Hz gdc.set_addrmap(0, µbx2_state::upd7220_map); gdc.set_display_pixels(FUNC(microbx2_state::display_pixels)); gdc.set_screen("screen"); -- cgit v1.2.3