summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-04-17 11:58:22 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-04-17 11:58:59 -0400
commitced8e963beb0bdbcccb803a63fc8a2868fb268da (patch)
treed97d3202409451cb2b16b3f1d0af6ee972b1d4f7
parentbfaf752379962be8e21c54471b3eb1a5e1abafb6 (diff)
cdi: Further decoupling of device emulation; improve clock documentation (nw)
-rw-r--r--src/emu/xtal.cpp3
-rw-r--r--src/mame/drivers/cdi.cpp32
-rw-r--r--src/mame/drivers/model2.cpp4
-rw-r--r--src/mame/drivers/model3.cpp6
-rw-r--r--src/mame/includes/cdi.h11
-rw-r--r--src/mame/machine/cdi070.cpp12
-rw-r--r--src/mame/machine/cdicdic.cpp7
-rw-r--r--src/mame/machine/cdislave.cpp8
8 files changed, 52 insertions, 31 deletions
diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp
index 02957f24467..68c262ee365 100644
--- a/src/emu/xtal.cpp
+++ b/src/emu/xtal.cpp
@@ -322,6 +322,7 @@ const double XTAL::known_xtals[] = {
29'376'000, /* 29.376_MHz_XTAL Qume QVT-103 */
29'491'200, /* 29.4912_MHz_XTAL Xerox Alto-II system clock (tagged 29.4MHz in the schematics) */
30'000'000, /* 30_MHz_XTAL Impera Magic Card */
+ 30'209'800, /* 30.2098_MHz_XTAL Philips CD-i NTSC (1920x NTSC line rate) */
30'476'100, /* 30.4761_MHz_XTAL Taito JC */
30'800'000, /* 30.8_MHz_XTAL 15IE-00-013 */
31'279'500, /* 31.2795_MHz_XTAL Wyse WY-30+ */
@@ -359,7 +360,7 @@ const double XTAL::known_xtals[] = {
44'452'800, /* 44.4528_MHz_XTAL TeleVideo 965 */
44'900'000, /* 44.9_MHz_XTAL IBM 8514 1024x768 43.5Hz graphics */
45'000'000, /* 45_MHz_XTAL Eolith with Hyperstone CPUs */
- 45'158'000, /* 45.158_MHz_XTAL Sega Model 2A video board, Model 3 CPU board */
+ 45'158'400, /* 45.1584_MHz_XTAL Philips CD-i CDIC, Sega Model 2A video, Sega Model 3 CPU */
45'619'200, /* 45.6192_MHz_XTAL DEC VK100 */
45'830'400, /* 45.8304_MHz_XTAL Microterm 5510 */
46'615'120, /* 46.61512_Mhz_XTAL Soundblaster 16 PCM base clock */
diff --git a/src/mame/drivers/cdi.cpp b/src/mame/drivers/cdi.cpp
index 94baae55947..aa4483b9d65 100644
--- a/src/mame/drivers/cdi.cpp
+++ b/src/mame/drivers/cdi.cpp
@@ -44,8 +44,16 @@ TODO:
#include "cdi.lh"
-#define CLOCK_A XTAL(30'000'000)
-#define CLOCK_B XTAL(19'660'800)
+// TODO: NTSC system clock is 30.2098 MHz; additional 4.9152 MHz XTAL provided for UART
+#define CLOCK_A 30_MHz_XTAL
+
+/*----------- debug defines -----------*/
+
+#define VERBOSE_LEVEL (1)
+
+#define ENABLE_VERBOSE_LOG (0)
+
+#define ENABLE_UART_PRINTING (0)
#if ENABLE_VERBOSE_LOG
static inline void ATTR_PRINTF(3,4) verboselog(device_t& device, int n_level, const char *s_fmt, ...)
@@ -827,7 +835,7 @@ void cdi_state::cdimono1_base(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &cdi_state::cdimono1_mem);
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cdi_state::cdi070_cpuspace);
- MCD212(config, m_mcd212, 0);
+ MCD212(config, m_mcd212, CLOCK_A);
m_mcd212->set_screen("screen");
m_mcd212->int1_callback().set(m_scc, FUNC(cdi68070_device::int1_w));
m_mcd212->int2_callback().set(m_scc, FUNC(cdi68070_device::int2_w));
@@ -854,7 +862,9 @@ void cdi_state::cdimono1_base(machine_config &config)
CDI_68070(config, m_scc, 0, "maincpu");
m_scc->iack4_callback().set_constant(0x80);
- CDI_CDIC(config, m_cdic, 0);
+ // IMS66490 CDIC input clocks are 22.5792 MHz and 19.3536 MHz (latter is generated by PLL circuit incorporating 19.3575 MHz XTAL)
+ // DSP input clock is 7.5264 MHz
+ CDI_CDIC(config, m_cdic, 45.1584_MHz_XTAL / 2);
m_cdic->int_callback().set(m_scc, FUNC(cdi68070_device::in4_w));
CDI_SLAVE(config, m_slave_hle, 0);
@@ -874,7 +884,7 @@ void cdi_state::cdimono1_base(machine_config &config)
m_cdda->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
m_cdda->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
- MK48T08(config, "mk48t08", 0);
+ MK48T08(config, "mk48t08");
}
// CD-i model 220 (Mono-II, NTSC)
@@ -884,7 +894,7 @@ void cdi_state::cdimono2(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &cdi_state::cdimono2_mem);
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cdi_state::cdi070_cpuspace);
- MCD212(config, m_mcd212, 0);
+ MCD212(config, m_mcd212, CLOCK_A);
m_mcd212->set_screen("screen");
m_mcd212->int1_callback().set(m_scc, FUNC(cdi68070_device::int1_w));
m_mcd212->int2_callback().set(m_scc, FUNC(cdi68070_device::int2_w));
@@ -911,9 +921,9 @@ void cdi_state::cdimono2(machine_config &config)
MCFG_MACHINE_RESET_OVERRIDE( cdi_state, cdimono2 )
CDI_68070(config, m_scc, 0, "maincpu");
- M68HC05EG(config, m_servo, XTAL(4'000'000));
+ M68HC05EG(config, m_servo, 4_MHz_XTAL); // FIXME: actually MC68HC05C8
m_servo->set_addrmap(AS_PROGRAM, &cdi_state::cdimono2_servo_mem);
- M68HC05EG(config, m_slave, XTAL(4'000'000));
+ M68HC05EG(config, m_slave, 4_MHz_XTAL); // FIXME: actually MC68HC05C8
m_slave->set_addrmap(AS_PROGRAM, &cdi_state::cdimono2_slave_mem);
CDROM(config, "cdrom").set_interface("cdi_cdrom");
@@ -942,7 +952,7 @@ void cdi_state::cdi910(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &cdi_state::cdi910_mem);
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cdi_state::cdi070_cpuspace);
- MCD212(config, m_mcd212, 0);
+ MCD212(config, m_mcd212, CLOCK_A);
m_mcd212->set_screen("screen");
m_mcd212->int1_callback().set(m_scc, FUNC(cdi68070_device::int1_w));
m_mcd212->int2_callback().set(m_scc, FUNC(cdi68070_device::int2_w));
@@ -969,9 +979,9 @@ void cdi_state::cdi910(machine_config &config)
MCFG_MACHINE_RESET_OVERRIDE( cdi_state, cdimono2 )
CDI_68070(config, m_scc, 0, "maincpu");
- M68HC05EG(config, m_servo, XTAL(4'000'000));
+ M68HC05EG(config, m_servo, 4_MHz_XTAL); // FIXME: actually MC68HSC05C8
m_servo->set_addrmap(AS_PROGRAM, &cdi_state::cdimono2_servo_mem);
- M68HC05EG(config, m_slave, XTAL(4'000'000));
+ M68HC05EG(config, m_slave, 4_MHz_XTAL); // FIXME: actually MC68HSC05C8
m_slave->set_addrmap(AS_PROGRAM, &cdi_state::cdimono2_slave_mem);
CDROM(config, "cdrom").set_interface("cdi_cdrom");
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp
index 9d4dc41a80d..692c687b0ec 100644
--- a/src/mame/drivers/model2.cpp
+++ b/src/mame/drivers/model2.cpp
@@ -2449,13 +2449,13 @@ void model2_state::model2_screen(machine_config &config)
void model2_state::model2_scsp(machine_config &config)
{
- M68000(config, m_audiocpu, 45158000/4); // SCSP Clock / 2
+ M68000(config, m_audiocpu, 45.1584_MHz_XTAL / 4); // SCSP Clock / 2
m_audiocpu->set_addrmap(AS_PROGRAM, &model2_state::model2_snd);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- SCSP(config, m_scsp, 45158000/2); // 45.158MHz XTAL at Video board(Model 2A-CRX)
+ SCSP(config, m_scsp, 45.1584_MHz_XTAL / 2); // 45.158MHz XTAL at Video board(Model 2A-CRX)
m_scsp->set_addrmap(0, &model2_state::scsp_map);
m_scsp->irq_cb().set(FUNC(model2_state::scsp_irq));
m_scsp->add_route(0, "lspeaker", 1.0);
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index ac9637de63d..29ccafb90cc 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -6024,7 +6024,7 @@ void model3_state::add_cpu_166mhz(machine_config &config)
void model3_state::add_base_devices(machine_config &config)
{
- M68000(config, m_audiocpu, 45158000/4); // SCSP Clock / 2
+ M68000(config, m_audiocpu, 45.1584_MHz_XTAL / 4); // SCSP Clock / 2
m_audiocpu->set_addrmap(AS_PROGRAM, &model3_state::model3_snd);
EEPROM_93C46_16BIT(config, m_eeprom);
@@ -6044,13 +6044,13 @@ void model3_state::add_base_devices(machine_config &config)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- SCSP(config, m_scsp1, 45158000/2); // 45.158 MHz XTAL
+ SCSP(config, m_scsp1, 45.1584_MHz_XTAL / 2); // 45.158 MHz XTAL
m_scsp1->set_addrmap(0, &model3_state::scsp1_map);
m_scsp1->irq_cb().set(FUNC(model3_state::scsp_irq));
m_scsp1->add_route(0, "lspeaker", 1.0);
m_scsp1->add_route(1, "rspeaker", 1.0);
- scsp_device &scsp2(SCSP(config, "scsp2", 45158000/2));
+ scsp_device &scsp2(SCSP(config, "scsp2", 45.1584_MHz_XTAL / 2));
scsp2.set_addrmap(0, &model3_state::scsp2_map);
scsp2.add_route(0, "lspeaker", 1.0);
scsp2.add_route(1, "rspeaker", 1.0);
diff --git a/src/mame/includes/cdi.h b/src/mame/includes/cdi.h
index d88deb73360..ef5e1b9c9cb 100644
--- a/src/mame/includes/cdi.h
+++ b/src/mame/includes/cdi.h
@@ -14,9 +14,6 @@
/*----------- driver state -----------*/
-#define CLOCK_A XTAL(30'000'000)
-#define CLOCK_B XTAL(19'660'800)
-
class cdi_state : public driver_device
{
public:
@@ -137,12 +134,4 @@ public:
void cdi070_cpuspace(address_map &map);
};
-/*----------- debug defines -----------*/
-
-#define VERBOSE_LEVEL (1)
-
-#define ENABLE_VERBOSE_LOG (0)
-
-#define ENABLE_UART_PRINTING (0)
-
#endif // MAME_INCLUDES_CDI_H
diff --git a/src/mame/machine/cdi070.cpp b/src/mame/machine/cdi070.cpp
index 1135577c0f2..fa47abfa71d 100644
--- a/src/mame/machine/cdi070.cpp
+++ b/src/mame/machine/cdi070.cpp
@@ -23,10 +23,17 @@ TODO:
#include "emu.h"
#include "machine/cdi070.h"
-#include "includes/cdi.h"
#include "cpu/m68000/m68000.h"
+/*----------- debug defines -----------*/
+
+#define VERBOSE_LEVEL (1)
+
+#define ENABLE_VERBOSE_LOG (0)
+
+#define ENABLE_UART_PRINTING (0)
+
// device type definition
DEFINE_DEVICE_TYPE(CDI_68070, cdi68070_device, "cdi68070", "CDI68070")
@@ -409,8 +416,9 @@ void cdi68070_device::set_timer_callback(int channel)
{
case 0:
{
+ // Timer clock period is 96/CLKOUT
uint32_t compare = 0x10000 - m_timers.timer0;
- attotime period = attotime::from_hz(CLOCK_A/192) * compare;
+ attotime period = m_maincpu->cycles_to_attotime(96 * compare);
m_timers.timer0_timer->adjust(period);
break;
}
diff --git a/src/mame/machine/cdicdic.cpp b/src/mame/machine/cdicdic.cpp
index 648e87a09f9..781c5d412ea 100644
--- a/src/mame/machine/cdicdic.cpp
+++ b/src/mame/machine/cdicdic.cpp
@@ -30,6 +30,13 @@ TODO:
#include "sound/cdda.h"
+/*----------- debug defines -----------*/
+
+#define VERBOSE_LEVEL (1)
+
+#define ENABLE_VERBOSE_LOG (0)
+
+
// device type definition
DEFINE_DEVICE_TYPE(CDI_CDIC, cdicdic_device, "cdicdic", "CDICDIC")
diff --git a/src/mame/machine/cdislave.cpp b/src/mame/machine/cdislave.cpp
index e7aee3e7d9b..dc86a98c78a 100644
--- a/src/mame/machine/cdislave.cpp
+++ b/src/mame/machine/cdislave.cpp
@@ -23,7 +23,13 @@ TODO:
#include "emu.h"
#include "machine/cdislave.h"
-#include "includes/cdi.h"
+
+
+/*----------- debug defines -----------*/
+
+#define VERBOSE_LEVEL (1)
+
+#define ENABLE_VERBOSE_LOG (0)
// device type definition