summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author Michael Zapf <Michael.Zapf@mizapf.de>2018-08-19 21:37:11 +0200
committer Michael Zapf <Michael.Zapf@mizapf.de>2018-08-19 21:37:11 +0200
commit88f1b0c21b22daf847fc6237b441f93619f58404 (patch)
tree298215da38ebb701c5868e69b5b117eb080eb410 /src/mame
parent7a2880f8ee32370db4521f482affbc777cabf865 (diff)
ti99: Minor config changes, simplified ti99 config, use new cassette output.
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/geneve.cpp2
-rw-r--r--src/mame/drivers/ti99_2.cpp14
-rw-r--r--src/mame/drivers/ti99_4p.cpp6
-rw-r--r--src/mame/drivers/ti99_4x.cpp205
-rw-r--r--src/mame/drivers/ti99_8.cpp7
5 files changed, 66 insertions, 168 deletions
diff --git a/src/mame/drivers/geneve.cpp b/src/mame/drivers/geneve.cpp
index 82407bb1213..27e0eb8a61d 100644
--- a/src/mame/drivers/geneve.cpp
+++ b/src/mame/drivers/geneve.cpp
@@ -773,7 +773,7 @@ MACHINE_CONFIG_START(geneve_state::geneve_common)
// User interface devices
GENEVE_KEYBOARD(config, m_keyboard, 0).int_cb().set(FUNC(geneve_state::keyboard_interrupt));
- TI99_JOYPORT(config, m_joyport, 0).configure_slot(false, false);
+ TI99_JOYPORT(config, m_joyport, 0).configure_slot(bus::ti99::joyport::PLAIN);
TI99_COLORBUS(config, m_colorbus, 0).configure_slot();
// PFM expansion
diff --git a/src/mame/drivers/ti99_2.cpp b/src/mame/drivers/ti99_2.cpp
index 1ae9e16b92f..c2eeee8afe3 100644
--- a/src/mame/drivers/ti99_2.cpp
+++ b/src/mame/drivers/ti99_2.cpp
@@ -145,18 +145,14 @@
ROM dumps
---------
- Hard to believe, but we have access to two people with one 24K and
- one 32K version, and we were able to dumps the ROMs correctly.
+ Although these machines are extremely rare, we were lucky to get in
+ contact with users of both console variants and got dumps from
+ their machines.
The ROMs contain a stripped-down version of TI BASIC, but without
the specific graphics subprograms. Programs written on the 99/2 should
run on the 99/4A, but the opposite is not true.
- TODO
- ----
- * Fix cassette
- * Add Hexbus
-
Original implementation: Raphael Nabet; December 1999, 2000
Michael Zapf, May 2018
@@ -474,8 +470,8 @@ void ti99_2_state::ti99_2(machine_config& config)
RAM(config, TI992_RAM_TAG).set_default_size("4096").set_default_value(0);
// Cassette drives
- // There is no route from the cassette to some audio output, so we don't hear it.
- // Cassette drives
+ // There is no route from the cassette to some audio input,
+ // so we don't hear it.
CASSETTE(config, "cassette", 0);
// Hexbus
diff --git a/src/mame/drivers/ti99_4p.cpp b/src/mame/drivers/ti99_4p.cpp
index f52505b58f3..7c1c73a25ee 100644
--- a/src/mame/drivers/ti99_4p.cpp
+++ b/src/mame/drivers/ti99_4p.cpp
@@ -1049,12 +1049,10 @@ void ti99_4p_state::ti99_4p_60hz(machine_config& config)
// Cassette drives
SPEAKER(config, "cass_out").front_center();
- CASSETTE(config, "cassette", 0);
-
- WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
+ CASSETTE(config, "cassette", 0).add_route(ALL_OUTPUTS, "cass_out", 0.25);
// Joystick port
- TI99_JOYPORT(config, m_joyport, 0).configure_slot(false, false);
+ TI99_JOYPORT(config, m_joyport, 0).configure_slot(bus::ti99::joyport::PLAIN);
}
diff --git a/src/mame/drivers/ti99_4x.cpp b/src/mame/drivers/ti99_4x.cpp
index d4578d41a8a..0947d0818bc 100644
--- a/src/mame/drivers/ti99_4x.cpp
+++ b/src/mame/drivers/ti99_4x.cpp
@@ -41,7 +41,6 @@
#include "emu.h"
#include "cpu/tms9900/tms9900.h"
-#include "sound/wave.h"
#include "machine/tms9901.h"
#include "imagedev/cassette.h"
@@ -93,7 +92,7 @@ public:
m_joyport(*this, TI_JOYPORT_TAG),
m_datamux(*this, TI99_DATAMUX_TAG),
m_video(*this, TI_VDP_TAG),
- m_cassette1(*this, "cassette"),
+ m_cassette1(*this, "cassette1"),
m_cassette2(*this, "cassette2"),
m_keyboard(*this, "COL%u", 0U),
m_alpha(*this, "ALPHA"),
@@ -102,6 +101,7 @@ public:
{ }
// Configurations
+ void ti99_4_common(machine_config &config);
void ti99_4(machine_config &config);
void ti99_4_50hz(machine_config &config);
void ti99_4ev_60hz(machine_config &config);
@@ -627,6 +627,8 @@ WRITE_LINE_MEMBER( ti99_4x_state::cs2_motor )
with computer sound.
We do not really need to emulate this as the tape recorder generates sound
on its own.
+ TODO: Emulate a pop sound when turning on/off the audio gate; there are
+ some few programs that generate a sound with this feature
*/
WRITE_LINE_MEMBER( ti99_4x_state::audio_gate )
{
@@ -824,7 +826,6 @@ WRITE_LINE_MEMBER( ti99_4x_state::notconnected )
void ti99_4x_state::driver_start()
{
m_nready_combined = 0;
- logerror("model = %d\n", m_model);
// Removing the TMS9928a requires to add a replacement for the GROMCLK.
// In the real hardware this is a circuit (REPL99x) that fits into the VDP socket
if (m_model == MODEL_4EV)
@@ -851,14 +852,11 @@ void ti99_4x_state::driver_reset()
m_gromclk_timer->adjust(attotime::zero, 0, attotime::from_hz(XTAL(10'738'635)/24));
}
-/**********************************************************************
- TI-99/4 - predecessor of the more popular TI-99/4A
-***********************************************************************/
-
-void ti99_4x_state::ti99_4(machine_config& config)
+/**********************************************************
+ Common configuration
+**********************************************************/
+void ti99_4x_state::ti99_4_common(machine_config& config)
{
- m_model = MODEL_4;
-
// CPU
TMS9900(config, m_cpu, 3000000);
m_cpu->set_addrmap(AS_PROGRAM, &ti99_4x_state::memmap);
@@ -872,7 +870,6 @@ void ti99_4x_state::ti99_4(machine_config& config)
// Main board
TMS9901(config, m_tms9901, 3000000);
m_tms9901->read_cb().set(FUNC(ti99_4x_state::read_by_9901));
- m_tms9901->p_out_cb(0).set(FUNC(ti99_4x_state::handset_ack));
m_tms9901->p_out_cb(2).set(FUNC(ti99_4x_state::keyC0));
m_tms9901->p_out_cb(3).set(FUNC(ti99_4x_state::keyC1));
m_tms9901->p_out_cb(4).set(FUNC(ti99_4x_state::keyC2));
@@ -882,8 +879,10 @@ void ti99_4x_state::ti99_4(machine_config& config)
m_tms9901->p_out_cb(9).set(FUNC(ti99_4x_state::cassette_output));
m_tms9901->intlevel_cb().set(FUNC(ti99_4x_state::tms9901_interrupt));
+ // Databus multiplexer
TI99_DATAMUX(config, m_datamux, 0).ready_cb().set(FUNC(ti99_4x_state::console_ready_dmux));
+ // Cartridge port (aka GROMport)
TI99_GROMPORT(config, m_gromport, 0);
m_gromport->ready_cb().set(FUNC(ti99_4x_state::console_ready_cart));
m_gromport->reset_cb().set(FUNC(ti99_4x_state::console_reset));
@@ -898,25 +897,16 @@ void ti99_4x_state::ti99_4(machine_config& config)
// Software list
SOFTWARE_LIST(config, "cart_list_ti99").set_type("ti99_cart", SOFTWARE_LIST_ORIGINAL_SYSTEM);
- // Input/output port
+ // I/O port
TI99_IOPORT(config, m_ioport, 0);
- m_ioport->configure_slot(false);
m_ioport->extint_cb().set(FUNC(ti99_4x_state::extint));
m_ioport->ready_cb().set(TI99_DATAMUX_TAG, FUNC(bus::ti99::internal::datamux_device::ready_line));
- // Sound hardware
- SPEAKER(config, "sound_out").front_center();
- sn94624_device& soundgen(SN94624(config, TI_SOUNDCHIP_TAG, 3579545/8));
- soundgen.ready_cb().set(FUNC(ti99_4x_state::console_ready_sound));
- soundgen.add_route(ALL_OUTPUTS, "sound_out", 0.75);
-
- // Cassette drives
+ // Cassette drives. Second drive is record-only.
SPEAKER(config, "cass_out").front_center();
- CASSETTE(config, "cassette", 0);
+ CASSETTE(config, "cassette1", 0).add_route(ALL_OUTPUTS, "cass_out", 0.25);
CASSETTE(config, "cassette2", 0);
- WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
-
// GROM devices
tmc0430_device& grom0(TMC0430(config, TI99_GROM0_TAG, 0));
grom0.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
@@ -929,10 +919,34 @@ void ti99_4x_state::ti99_4(machine_config& config)
tmc0430_device& grom2(TMC0430(config, TI99_GROM2_TAG, 0));
grom2.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
grom2.set_region_and_ident(TI99_CONSOLEGROM, 0x4000, 2);
+}
- // Joystick port
+/**********************************************************************
+ TI-99/4 - predecessor of the more popular TI-99/4A
+***********************************************************************/
+
+void ti99_4x_state::ti99_4(machine_config& config)
+{
+ // Common configuration
+ ti99_4_common(config);
+ m_model = MODEL_4;
+
+ // Main board
+ // Add handset interrupt to 9901
+ m_tms9901->p_out_cb(0).set(FUNC(ti99_4x_state::handset_ack));
+
+ // Input/output port: normal config
+ m_ioport->configure_slot(bus::ti99::internal::PLAIN);
+
+ // Sound hardware (not in EVPC variant)
+ SPEAKER(config, "sound_out").front_center();
+ sn94624_device& soundgen(SN94624(config, TI_SOUNDCHIP_TAG, 3579545/8));
+ soundgen.ready_cb().set(FUNC(ti99_4x_state::console_ready_sound));
+ soundgen.add_route(ALL_OUTPUTS, "sound_out", 0.75);
+
+ // Joystick port. We can connect a joyport mouse or a handset (99/4-specific).
TI99_JOYPORT(config, m_joyport, 0);
- m_joyport->configure_slot(true, true);
+ m_joyport->configure_slot(bus::ti99::joyport::MOUSE | bus::ti99::joyport::HANDSET);
m_joyport->int_cb().set(FUNC(ti99_4x_state::handset_interrupt_in));
}
@@ -988,81 +1002,25 @@ void ti99_4x_state::ti99_4_50hz(machine_config& config)
void ti99_4x_state::ti99_4a(machine_config& config)
{
+ // Common configuration
+ ti99_4_common(config);
m_model = MODEL_4A;
- // CPU
- TMS9900(config, m_cpu, 3000000);
- m_cpu->set_addrmap(AS_PROGRAM, &ti99_4x_state::memmap);
- m_cpu->set_addrmap(AS_IO, &ti99_4x_state::crumap);
- m_cpu->set_addrmap(tms99xx_device::AS_SETOFFSET, &ti99_4x_state::memmap_setoffset);
- m_cpu->extop_cb().set(FUNC(ti99_4x_state::external_operation));
- m_cpu->intlevel_cb().set(FUNC(ti99_4x_state::interrupt_level));
- m_cpu->clkout_cb().set(FUNC(ti99_4x_state::clock_out));
- m_cpu->dbin_cb().set(FUNC(ti99_4x_state::dbin_line));
-
// Main board
- TMS9901(config, m_tms9901, 3000000);
- m_tms9901->read_cb().set(FUNC(ti99_4x_state::read_by_9901));
- m_tms9901->p_out_cb(2).set(FUNC(ti99_4x_state::keyC0));
- m_tms9901->p_out_cb(3).set(FUNC(ti99_4x_state::keyC1));
- m_tms9901->p_out_cb(4).set(FUNC(ti99_4x_state::keyC2));
+ // Add Alphalock to 9901
m_tms9901->p_out_cb(5).set(FUNC(ti99_4x_state::alphaW));
- m_tms9901->p_out_cb(6).set(FUNC(ti99_4x_state::cs1_motor));
- m_tms9901->p_out_cb(7).set(FUNC(ti99_4x_state::cs2_motor));
- m_tms9901->p_out_cb(8).set(FUNC(ti99_4x_state::audio_gate));
- m_tms9901->p_out_cb(9).set(FUNC(ti99_4x_state::cassette_output));
- m_tms9901->intlevel_cb().set(FUNC(ti99_4x_state::tms9901_interrupt));
-
- TI99_DATAMUX(config, m_datamux, 0).ready_cb().set(FUNC(ti99_4x_state::console_ready_dmux));
- TI99_GROMPORT(config, m_gromport, 0);
- m_gromport->ready_cb().set(FUNC(ti99_4x_state::console_ready_cart));
- m_gromport->reset_cb().set(FUNC(ti99_4x_state::console_reset));
- m_gromport->configure_slot(false);
-
- // Scratch pad RAM 256 bytes
- RAM(config, TI99_PADRAM_TAG).set_default_size("256").set_default_value(0);
-
- // Optional RAM expansion
- RAM(config, TI99_EXPRAM_TAG).set_default_size("32K").set_default_value(0);
+ // Input/output port: Normal config
+ m_ioport->configure_slot(bus::ti99::internal::PLAIN);
- // Software list
- SOFTWARE_LIST(config, "cart_list_ti99").set_type("ti99_cart", SOFTWARE_LIST_ORIGINAL_SYSTEM);
-
- // Input/output port
- TI99_IOPORT(config, m_ioport, 0);
- m_ioport->configure_slot(false);
- m_ioport->extint_cb().set(FUNC(ti99_4x_state::extint));
- m_ioport->ready_cb().set(TI99_DATAMUX_TAG, FUNC(bus::ti99::internal::datamux_device::ready_line));
-
- // Sound hardware
+ // Sound hardware (not in EVPC variant)
SPEAKER(config, "sound_out").front_center();
sn94624_device& soundgen(SN94624(config, TI_SOUNDCHIP_TAG, 3579545/8));
soundgen.ready_cb().set(FUNC(ti99_4x_state::console_ready_sound));
soundgen.add_route(ALL_OUTPUTS, "sound_out", 0.75);
- // Cassette drives
- SPEAKER(config, "cass_out").front_center();
- CASSETTE(config, "cassette", 0);
- CASSETTE(config, "cassette2", 0);
-
- WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
-
- // GROM devices
- tmc0430_device& grom0(TMC0430(config, TI99_GROM0_TAG, 0));
- grom0.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
- grom0.set_region_and_ident(TI99_CONSOLEGROM, 0x0000, 0);
-
- tmc0430_device& grom1(TMC0430(config, TI99_GROM1_TAG, 0));
- grom1.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
- grom1.set_region_and_ident(TI99_CONSOLEGROM, 0x2000, 1);
-
- tmc0430_device& grom2(TMC0430(config, TI99_GROM2_TAG, 0));
- grom2.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
- grom2.set_region_and_ident(TI99_CONSOLEGROM, 0x4000, 2);
-
// Joystick port
- TI99_JOYPORT(config, m_joyport, 0).configure_slot(true, false);
+ TI99_JOYPORT(config, m_joyport, 0).configure_slot(bus::ti99::joyport::MOUSE);
}
/*
@@ -1156,78 +1114,25 @@ void ti99_4x_state::ti99_4qi_60hz(machine_config& config)
void ti99_4x_state::ti99_4ev_60hz(machine_config& config)
{
+ // Common configuration
+ ti99_4_common(config);
m_model = MODEL_4EV;
- // CPU
- TMS9900(config, m_cpu, 3000000);
- m_cpu->set_addrmap(AS_PROGRAM, &ti99_4x_state::memmap);
- m_cpu->set_addrmap(AS_IO, &ti99_4x_state::crumap);
- m_cpu->set_addrmap(tms99xx_device::AS_SETOFFSET, &ti99_4x_state::memmap_setoffset);
- m_cpu->extop_cb().set(FUNC(ti99_4x_state::external_operation));
- m_cpu->intlevel_cb().set(FUNC(ti99_4x_state::interrupt_level));
- m_cpu->clkout_cb().set(FUNC(ti99_4x_state::clock_out));
- m_cpu->dbin_cb().set(FUNC(ti99_4x_state::dbin_line));
-
// Main board
- TMS9901(config, m_tms9901, 3000000);
- m_tms9901->read_cb().set(FUNC(ti99_4x_state::read_by_9901));
- m_tms9901->p_out_cb(2).set(FUNC(ti99_4x_state::keyC0));
- m_tms9901->p_out_cb(3).set(FUNC(ti99_4x_state::keyC1));
- m_tms9901->p_out_cb(4).set(FUNC(ti99_4x_state::keyC2));
+ // Add Alphalock
m_tms9901->p_out_cb(5).set(FUNC(ti99_4x_state::alphaW));
- m_tms9901->p_out_cb(6).set(FUNC(ti99_4x_state::cs1_motor));
- m_tms9901->p_out_cb(7).set(FUNC(ti99_4x_state::cs2_motor));
- m_tms9901->p_out_cb(8).set(FUNC(ti99_4x_state::audio_gate));
- m_tms9901->p_out_cb(9).set(FUNC(ti99_4x_state::cassette_output));
- m_tms9901->intlevel_cb().set(FUNC(ti99_4x_state::tms9901_interrupt));
-
- TI99_DATAMUX(config, m_datamux, 0).ready_cb().set(FUNC(ti99_4x_state::console_ready_dmux));
-
- TI99_GROMPORT(config, m_gromport, 0);
- m_gromport->ready_cb().set(FUNC(ti99_4x_state::console_ready_cart));
- m_gromport->reset_cb().set(FUNC(ti99_4x_state::console_reset));
- m_gromport->configure_slot(false);
-
- // Scratch pad RAM 256 bytes
- RAM(config, TI99_PADRAM_TAG).set_default_size("256").set_default_value(0);
-
- // Optional RAM expansion
- RAM(config, TI99_EXPRAM_TAG).set_default_size("32K").set_default_value(0);
// EVPC connector
+ // This is needed for delivering the video interrupt from the
+ // EVPC expansion card into the console, after the video processor has been removed
TI99_EVPCCONN(config, TI99_EVPC_CONN_TAG, 0).vdpint_cb().set(FUNC(ti99_4x_state::video_interrupt_evpc_in));
- // Software list
- SOFTWARE_LIST(config, "cart_list_ti99").set_type("ti99_cart", SOFTWARE_LIST_ORIGINAL_SYSTEM);
-
- // Input/output port
- TI99_IOPORT(config, m_ioport, 0);
- m_ioport->configure_slot(true);
- m_ioport->extint_cb().set(FUNC(ti99_4x_state::extint));
- m_ioport->ready_cb().set(TI99_DATAMUX_TAG, FUNC(bus::ti99::internal::datamux_device::ready_line));
-
- // Cassette drives
- SPEAKER(config, "cass_out").front_center();
- CASSETTE(config, "cassette", 0);
- CASSETTE(config, "cassette2", 0);
-
- WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
-
- // GROM devices
- tmc0430_device& grom0(TMC0430(config, TI99_GROM0_TAG, 0));
- grom0.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
- grom0.set_region_and_ident(TI99_CONSOLEGROM, 0x0000, 0);
-
- tmc0430_device& grom1(TMC0430(config, TI99_GROM1_TAG, 0));
- grom1.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
- grom1.set_region_and_ident(TI99_CONSOLEGROM, 0x2000, 1);
-
- tmc0430_device& grom2(TMC0430(config, TI99_GROM2_TAG, 0));
- grom2.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
- grom2.set_region_and_ident(TI99_CONSOLEGROM, 0x4000, 2);
+ // Input/output port: Configure for EVPC
+ m_ioport->configure_slot(bus::ti99::internal::WITH_PEB_AND_EVPC);
// Joystick port
- TI99_JOYPORT(config, m_joyport, 0).configure_slot(false, false);
+ // No joyport mouse, since we have a bus mouse with the EVPC
+ TI99_JOYPORT(config, m_joyport, 0).configure_slot(bus::ti99::joyport::PLAIN);
}
/*****************************************************************************
diff --git a/src/mame/drivers/ti99_8.cpp b/src/mame/drivers/ti99_8.cpp
index f4a49328ca5..119fc5c4e72 100644
--- a/src/mame/drivers/ti99_8.cpp
+++ b/src/mame/drivers/ti99_8.cpp
@@ -782,7 +782,7 @@ void ti99_8_state::ti99_8(machine_config& config)
// I/O port
TI99_IOPORT(config, m_ioport, 0);
- m_ioport->configure_slot(false);
+ m_ioport->configure_slot(bus::ti99::internal::PLAIN);
m_ioport->extint_cb().set(FUNC(ti99_8_state::extint));
m_ioport->ready_cb().set(TI998_MAINBOARD_TAG, FUNC(mainboard8_device::pbox_ready));
@@ -807,8 +807,7 @@ void ti99_8_state::ti99_8(machine_config& config)
// Cassette drive
SPEAKER(config, "cass_out").front_center();
- CASSETTE(config, "cassette", 0);
- WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
+ CASSETTE(config, "cassette", 0).add_route(ALL_OUTPUTS, "cass_out", 0.25);;
// GROM library
tmc0430_device& sgrom0(TMC0430(config, TI998_SYSGROM0_TAG, 0));
@@ -903,7 +902,7 @@ void ti99_8_state::ti99_8(machine_config& config)
p3grom2.set_region_and_ident(TI998_GROMLIB3_REG, 0x4000, 2);
// Joystick port
- TI99_JOYPORT(config, m_joyport, 0).configure_slot(true, false);
+ TI99_JOYPORT(config, m_joyport, 0).configure_slot(bus::ti99::joyport::MOUSE);
}
/*