summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/informer_207_376.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/informer_207_376.cpp')
-rw-r--r--src/mame/drivers/informer_207_376.cpp48
1 files changed, 34 insertions, 14 deletions
diff --git a/src/mame/drivers/informer_207_376.cpp b/src/mame/drivers/informer_207_376.cpp
index 964363dc0e8..011cbb1987e 100644
--- a/src/mame/drivers/informer_207_376.cpp
+++ b/src/mame/drivers/informer_207_376.cpp
@@ -13,7 +13,6 @@
- X2212P NVRAM
TODO:
- - Redump bad ROMs
- Dump keyboard controller and emulate it (currently HLE'd)
- Problably needs improvements to at least the Z80SCC to
properly support synchrous modes
@@ -88,11 +87,13 @@ private:
void mem_map(address_map &map);
MC6845_UPDATE_ROW(crtc_update_row);
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void vsync_w(int state);
void nmi_control_w(uint8_t data);
void unk_8400_w(uint8_t data);
+ bool m_display_enabled;
bool m_nmi_enabled;
};
@@ -150,6 +151,10 @@ MC6845_UPDATE_ROW( informer_207_376_state::crtc_update_row )
if (x == cursor_x)
data = 0xff;
+ // the line above the status bar seems to be hardcoded
+ if (y == 274)
+ data = 0xff;
+
// draw 8 pixels of the character
bitmap.pix32(y, x * 8 + 7) = pen[BIT(data, 0)];
bitmap.pix32(y, x * 8 + 6) = pen[BIT(data, 1)];
@@ -162,6 +167,16 @@ MC6845_UPDATE_ROW( informer_207_376_state::crtc_update_row )
}
}
+uint32_t informer_207_376_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ if (m_display_enabled)
+ m_crtc->screen_update(screen, bitmap, cliprect);
+ else
+ bitmap.fill(rgb_t::black(), cliprect);
+
+ return 0;
+}
+
static const gfx_layout char_layout =
{
8,11,
@@ -196,19 +211,24 @@ void informer_207_376_state::unk_8400_w(uint8_t data)
// 7------- beeper
// -6------ unknown
// --5----- 1=internal modem, 0=host rs232
- // ---43210 unknown
+ // ---43--- unknown
+ // -----2-- display enabled?
+ // ------10 unknown
m_beep->set_state(BIT(data, 7));
+ m_display_enabled = bool(BIT(data, 2));
}
void informer_207_376_state::machine_start()
{
// register for save states
+ save_item(NAME(m_display_enabled));
save_item(NAME(m_nmi_enabled));
}
void informer_207_376_state::machine_reset()
{
+ m_display_enabled = false;
m_nmi_enabled = false;
}
@@ -224,7 +244,7 @@ void printer_devices(device_slot_interface &device)
void informer_207_376_state::informer_207_376(machine_config &config)
{
- MC6809(config, m_maincpu, 36_MHz_XTAL / 4); // unknown clock
+ MC6809(config, m_maincpu, 36_MHz_XTAL / 4); // unknown clock divisor
m_maincpu->set_addrmap(AS_PROGRAM, &informer_207_376_state::mem_map);
input_merger_device &cpu_irq(INPUT_MERGER_ANY_HIGH(config, "cpu_irq"));
@@ -233,14 +253,14 @@ void informer_207_376_state::informer_207_376(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 2x X2212P
PIT8253(config, m_pit);
- m_pit->set_clk<0>(4915200 / 2);
+ m_pit->set_clk<0>(2.457600_MHz_XTAL);
m_pit->out_handler<0>().set(m_acia[1], FUNC(acia6850_device::write_txc));
m_pit->out_handler<0>().append(m_acia[1], FUNC(acia6850_device::write_rxc));
- m_pit->set_clk<1>(4915200 / 2);
+ m_pit->set_clk<1>(2.457600_MHz_XTAL);
m_pit->out_handler<1>().set(m_acia[0], FUNC(acia6850_device::write_txc));
m_pit->out_handler<1>().append(m_acia[0], FUNC(acia6850_device::write_rxc));
- SCC85C30(config, m_scc, 4915200);
+ SCC85C30(config, m_scc, 0); // externally clocked?
m_scc->out_txda_callback().set("com1", FUNC(rs232_port_device::write_txd));
m_scc->out_dtra_callback().set("com1", FUNC(rs232_port_device::write_dtr));
m_scc->out_rtsa_callback().set("com1", FUNC(rs232_port_device::write_rts));
@@ -249,11 +269,11 @@ void informer_207_376_state::informer_207_376(machine_config &config)
m_scc->out_rtsb_callback().set("com2", FUNC(rs232_port_device::write_rts));
m_scc->out_int_callback().set("cpu_irq", FUNC(input_merger_device::in_w<0>));
- ACIA6850(config, m_acia[0], 0); // unknown clock
+ ACIA6850(config, m_acia[0]);
m_acia[0]->txd_handler().set("kbd", FUNC(informer_207_376_kbd_hle_device::rx_w));
m_acia[0]->irq_handler().set("cpu_irq", FUNC(input_merger_device::in_w<1>));
- ACIA6850(config, m_acia[1], 0); // unknown clock
+ ACIA6850(config, m_acia[1]);
m_acia[1]->txd_handler().set("printer", FUNC(rs232_port_device::write_txd));
rs232_port_device &com1(RS232_PORT(config, "com1", default_rs232_devices, nullptr));
@@ -274,14 +294,14 @@ void informer_207_376_state::informer_207_376(machine_config &config)
// video
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_color(rgb_t::green());
- m_screen->set_raw(14400000, 800, 0, 640, 300, 0, 286); // unknown clock
- m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+ m_screen->set_raw(36_MHz_XTAL / 2.5, 800, 0, 640, 300, 0, 286);
+ m_screen->set_screen_update(FUNC(informer_207_376_state::screen_update));
PALETTE(config, m_palette, palette_device::MONOCHROME);
GFXDECODE(config, "gfxdecode", m_palette, chars);
- MC6845(config, m_crtc, 1800000); // unknown clock
+ MC6845(config, m_crtc, 36_MHz_XTAL / 20);
m_crtc->set_screen("screen");
m_crtc->set_show_border_area(false);
m_crtc->set_char_width(8);
@@ -301,15 +321,15 @@ void informer_207_376_state::informer_207_376(machine_config &config)
ROM_START( in207376 )
ROM_REGION(0x6000, "maincpu", 0)
// M2764A F1
- // 79590-023 376SNA V1.00 201C 7224 (our checksum: 7264)
- ROM_LOAD("79590-023.z37", 0x0000, 0x2000, BAD_DUMP CRC(ed4ff488) SHA1(fdd95c520d0288ea483b5d2e8e6c8eecb04063c1))
+ // 79590-023 376SNA V1.00 201C 7224 (checksum matches)
+ ROM_LOAD("79590-023.z37", 0x0000, 0x2000, CRC(61d49637) SHA1(aabcd55af88ff0b6a198eef04a88f58cc8f65dcc))
// M27128AF1
// 79589-023 376 SNAV1.00 201C E86F (checksum matches)
ROM_LOAD("79589-023.z36", 0x2000, 0x4000, CRC(cdfaf629) SHA1(1f21ef6848020726ef3d7ab05166ac8590d58476))
ROM_REGION(0x1000, "chargen", 0)
// TMS2732AGL-25
- // 79573-001 V1.00 376/8 CHAR. GEN.
+ // 79573-001 V1.00 376/8 CHAR. GEN.
ROM_LOAD("79573-001.z6", 0x0000, 0x1000, CRC(f704b827) SHA1(bcc56eeb8681c2bebe3a9f4b6b78c0373c06d875))
ROM_END