diff --git a/src/devices/video/upd7220.h b/src/devices/video/upd7220.h index 41d901bc07f..646d614bca0 100644 --- a/src/devices/video/upd7220.h +++ b/src/devices/video/upd7220.h @@ -69,7 +69,6 @@ public: set_screen(std::forward(screen_tag)); } - template void set_display_pixels(T &&... args) { m_display_cb.set(std::forward(args)...); } template void set_draw_text(T &&... args) { m_draw_text_cb.set(std::forward(args)...); } @@ -233,6 +232,13 @@ public: // construction/destruction upd7220a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template + upd7220a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, T &&screen_tag) + : upd7220a_device(mconfig, tag, owner, clock) + { + set_screen(std::forward(screen_tag)); + } + protected: virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; diff --git a/src/mame/nec/pc9801.cpp b/src/mame/nec/pc9801.cpp index 0d8df345495..cf0960c61e0 100644 --- a/src/mame/nec/pc9801.cpp +++ b/src/mame/nec/pc9801.cpp @@ -2231,6 +2231,18 @@ void pc9801_atapi_devices(device_slot_interface &device) device.option_add("pc98_cd", PC98_CD); } +void pc9801_state::config_video(machine_config &config) +{ + m_hgdc[0]->set_addrmap(0, &pc9801_state::upd7220_1_map); + m_hgdc[0]->set_draw_text(FUNC(pc9801_state::hgdc_draw_text)); + m_hgdc[0]->vsync_wr_callback().set(m_hgdc[1], FUNC(upd7220_device::ext_sync_w)); + m_hgdc[0]->vsync_wr_callback().append(FUNC(pc9801_state::vrtc_irq)); + + m_hgdc[1]->set_addrmap(0, &pc9801_state::upd7220_2_map); + m_hgdc[1]->set_display_pixels(FUNC(pc9801_state::hgdc_display_pixels)); +} + + void pc9801_state::config_keyboard(machine_config &config) { I8251(config, m_sio_kbd, 0); @@ -2432,14 +2444,8 @@ void pc9801_state::pc9801_common(machine_config &config) m_screen->set_screen_update(FUNC(pc9801_state::screen_update)); UPD7220(config, m_hgdc[0], 21.0526_MHz_XTAL / 8, "screen"); - m_hgdc[0]->set_addrmap(0, &pc9801_state::upd7220_1_map); - m_hgdc[0]->set_draw_text(FUNC(pc9801_state::hgdc_draw_text)); - m_hgdc[0]->vsync_wr_callback().set(m_hgdc[1], FUNC(upd7220_device::ext_sync_w)); - m_hgdc[0]->vsync_wr_callback().append(FUNC(pc9801_state::vrtc_irq)); - UPD7220(config, m_hgdc[1], 21.0526_MHz_XTAL / 8, "screen"); - m_hgdc[1]->set_addrmap(0, &pc9801_state::upd7220_2_map); - m_hgdc[1]->set_display_pixels(FUNC(pc9801_state::hgdc_display_pixels)); + config_video(config); SPEAKER(config, "mono").front_center(); diff --git a/src/mame/nec/pc9801.h b/src/mame/nec/pc9801.h index 8e0a45f72ca..b7785127f9d 100644 --- a/src/mame/nec/pc9801.h +++ b/src/mame/nec/pc9801.h @@ -199,6 +199,7 @@ protected: DECLARE_MACHINE_START(pc9801_common); DECLARE_MACHINE_RESET(pc9801_common); + void config_video(machine_config &config); void config_keyboard(machine_config &config); void pc9801_mouse(machine_config &config); void pc9801_cbus(machine_config &config); diff --git a/src/mame/nec/pc9821.cpp b/src/mame/nec/pc9821.cpp index 0fe6f3460f1..a5f0c22a9c6 100644 --- a/src/mame/nec/pc9821.cpp +++ b/src/mame/nec/pc9821.cpp @@ -803,6 +803,12 @@ void pc9821_state::pc9821(machine_config &config) PALETTE(config.replace(), m_palette, FUNC(pc9821_state::pc9801_palette), 16 + 16 + 256); + // win95 expects to be A revision, otherwise it will overlay startup text prompts over desktop GFX + // NOTE: possibly this bump happened around PC-9801BX series + UPD7220A(config.replace(), m_hgdc[0], 21.0526_MHz_XTAL / 8, "screen"); + UPD7220A(config.replace(), m_hgdc[1], 21.0526_MHz_XTAL / 8, "screen"); + config_video(config); + PC98_119_KBD(config.replace(), m_keyb, 0); m_keyb->rxd_callback().set("sio_kbd", FUNC(i8251_device::write_rxd));