summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2021-02-23 13:16:51 +0100
committer Dirk Best <mail@dirk-best.de>2021-02-23 13:18:08 +0100
commitb8eba35dde3580aa01ad352f896b63b0639daaa8 (patch)
tree2492dad97506bc63b55219dd19eddedfb78514c4
parent0a2caa105dafac435294f9f33fa56c35c299d004 (diff)
m3: XTAL updates [Steve Hunt]
-rw-r--r--src/mame/drivers/m3.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/mame/drivers/m3.cpp b/src/mame/drivers/m3.cpp
index ffba720ad8b..26ac947cdff 100644
--- a/src/mame/drivers/m3.cpp
+++ b/src/mame/drivers/m3.cpp
@@ -17,13 +17,17 @@
- M-THREE/345 (SA850, 8" double sided, Winchester 10 MB)
Hardware:
- - Z80
+ - MK3880N-IRL (Z80)
- 64 KB RAM
- Z80 CTC
- 2x D8255AC PPI
- D8251A
- MC6845P CRTC
- FD1793 FDC
+ - XTAL X1 21.??? Mhz (unreadable)
+ - XTAL X2 16 MHz
+ - XTAL X3 4.9152 MHz
+ - Keyboard XTAL 6.1?? MHz (assumed to be 6.144 MHz)
TODO:
- Initial PC is currently hacked to f000
@@ -31,6 +35,7 @@
- Printer interface
- Buzzer
- Map the rest of the keys, verify existing keys
+ - Switch FDC to 1 MHz for 5.25" drives
Notes:
- No offical software available, but a custom version of CP/M
@@ -576,14 +581,15 @@ static void m3_floppies(device_slot_interface &device)
void m3_state::m3(machine_config &config)
{
- Z80(config, m_maincpu, 3'000'000); // should be 2.5 MHz, but then it's too slow for the floppy
+ Z80(config, m_maincpu, 4.9152_MHz_XTAL / 2);
+ m_maincpu->set_clock_scale(1.2f); // needs to be overclocked or its too slow for the floppy
m_maincpu->set_addrmap(AS_PROGRAM, &m3_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &m3_state::io_map);
m_maincpu->set_daisy_config(daisy_chain);
Z80CTC(config, m_ctc, 0); // unknown clock
m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- m_ctc->set_clk<0>(2'457'600 / 2); // unknown clock. this gives the usart 9600 baud by default
+ m_ctc->set_clk<0>(4.9152_MHz_XTAL / 4);
m_ctc->zc_callback<0>().set("usart", FUNC(i8251_device::write_txc));
m_ctc->zc_callback<0>().append("usart", FUNC(i8251_device::write_rxc));
@@ -606,14 +612,14 @@ void m3_state::m3(machine_config &config)
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green()));
- screen.set_raw(10'920'000, 707, 0, 560, 309, 0, 240); // unknown clock, hand-tuned to ~50 fps
+ screen.set_raw(21'840'000 / 2, 707, 0, 560, 309, 0, 240); // unknown clock, hand-tuned to ~50 fps
screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
GFXDECODE(config, "gfxdecode", m_palette, chars);
PALETTE(config, m_palette, palette_device::MONOCHROME);
- mc6845_device &crtc(MC6845(config, "crtc", 10'920'000 / 7)); // unknown clock
+ mc6845_device &crtc(MC6845(config, "crtc", 21'840'000 / 2 / 7)); // unknown clock
crtc.set_screen("screen");
crtc.set_show_border_area(false);
crtc.set_char_width(7);
@@ -621,14 +627,14 @@ void m3_state::m3(machine_config &config)
crtc.out_vsync_callback().set(m_ctc, FUNC(z80ctc_device::trg2));
// floppy
- FD1793(config, m_fdc, 2'000'000); // unknown clock
+ FD1793(config, m_fdc, 16_MHz_XTAL / 8);
m_fdc->intrq_wr_callback().set(FUNC(m3_state::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(m3_state::fdc_drq_w));
FLOPPY_CONNECTOR(config, "fdc:0", m3_floppies, "sa850", floppy_image_device::default_floppy_formats);
FLOPPY_CONNECTOR(config, "fdc:1", m3_floppies, "sa850", floppy_image_device::default_floppy_formats);
// keyboard
- I8035(config, m_kbdmcu, 3'000'000); // unknown clock
+ I8035(config, m_kbdmcu, 6.144_MHz_XTAL);
m_kbdmcu->set_addrmap(AS_PROGRAM, &m3_state::kbd_mem_map);
m_kbdmcu->set_addrmap(AS_IO, &m3_state::kbd_io_map);
m_kbdmcu->p1_in_cb().set(FUNC(m3_state::kbd_p1_r));