summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/saitek_corona.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/saitek_corona.cpp')
-rw-r--r--src/mame/drivers/saitek_corona.cpp329
1 files changed, 0 insertions, 329 deletions
diff --git a/src/mame/drivers/saitek_corona.cpp b/src/mame/drivers/saitek_corona.cpp
deleted file mode 100644
index da8f0528e87..00000000000
--- a/src/mame/drivers/saitek_corona.cpp
+++ /dev/null
@@ -1,329 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-// thanks-to:Berger
-/***************************************************************************
-
-Saitek Corona. Please refer to saitek_stratos.cpp for driver notes.
-
-To be brief, Saitek Corona has two "HELIOS" chips, I/O addressing is completely
-different compared to Stratos/Turbo King.
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/saitek_stratos.h"
-
-#include "cpu/m6502/m65c02.h"
-#include "machine/bankdev.h"
-#include "machine/nvram.h"
-#include "machine/sensorboard.h"
-#include "sound/dac.h"
-#include "sound/volt_reg.h"
-
-#include "softlist.h"
-#include "speaker.h"
-
-// internal artwork
-#include "saitek_corona.lh" // clickable
-
-
-namespace {
-
-// note: sub-class of saitek_stratos_state (see mame/includes/saitek_stratos.h, mame/drivers/saitek_stratos.cpp)
-
-class corona_state : public saitek_stratos_state
-{
-public:
- corona_state(const machine_config &mconfig, device_type type, const char *tag) :
- saitek_stratos_state(mconfig, type, tag),
- m_rombank(*this, "rombank"),
- m_board(*this, "board"),
- m_dac(*this, "dac"),
- m_inputs(*this, "IN.%u", 0)
- { }
-
- // machine configs
- void corona(machine_config &config);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
-private:
- // devices/pointers
- required_device<address_map_bank_device> m_rombank;
- required_device<sensorboard_device> m_board;
- required_device<dac_bit_interface> m_dac;
- required_ioport_array<8+1> m_inputs;
-
- void main_map(address_map &map);
- void rombank_map(address_map &map);
-
- // I/O handlers
- void update_leds();
- DECLARE_WRITE8_MEMBER(leds1_w);
- DECLARE_WRITE8_MEMBER(leds2_w);
- DECLARE_WRITE8_MEMBER(select1_w);
- DECLARE_WRITE8_MEMBER(select2_w);
- DECLARE_WRITE8_MEMBER(control1_w);
- DECLARE_WRITE8_MEMBER(control2_w);
- DECLARE_READ8_MEMBER(control1_r);
- DECLARE_READ8_MEMBER(control2_r);
- DECLARE_READ8_MEMBER(chessboard_r);
- DECLARE_WRITE8_MEMBER(lcd_reset_w);
-
- u8 m_control1;
- u8 m_control2;
- u8 m_select1;
- u8 m_select2;
- u8 m_led_data1;
- u8 m_led_data2;
-};
-
-void corona_state::machine_start()
-{
- saitek_stratos_state::machine_start();
-
- // zerofill
- m_control1 = 0;
- m_control2 = 0;
- m_select1 = 0;
- m_select2 = 0;
- m_led_data1 = 0;
- m_led_data2 = 0;
-
- // register for savestates
- save_item(NAME(m_control1));
- save_item(NAME(m_control2));
- save_item(NAME(m_select1));
- save_item(NAME(m_select2));
- save_item(NAME(m_led_data1));
- save_item(NAME(m_led_data2));
-}
-
-void corona_state::machine_reset()
-{
- saitek_stratos_state::machine_reset();
-
- m_rombank->set_bank(0);
-}
-
-
-
-/******************************************************************************
- I/O
-******************************************************************************/
-
-// HELIOS
-
-void corona_state::update_leds()
-{
- // button leds
- m_display->matrix_partial(0, 2, 1 << (m_control1 >> 5 & 1), (~m_led_data1 & 0xff), false);
- m_display->write_row(2, ~m_select1 >> 4 & 0xf);
-
- // chessboard leds
- m_display->matrix_partial(3, 8, 1 << (m_select1 & 0xf), m_led_data2);
-}
-
-WRITE8_MEMBER(corona_state::leds1_w)
-{
- // d0-d7: button led data
- m_led_data1 = data;
- update_leds();
-}
-
-WRITE8_MEMBER(corona_state::leds2_w)
-{
- // d0-d7: chessboard led data
- m_led_data2 = data;
- update_leds();
-}
-
-WRITE8_MEMBER(corona_state::select1_w)
-{
- // d0-d3: chessboard led select
- // d4-d7: black/white leds
- m_select1 = data;
- update_leds();
-}
-
-WRITE8_MEMBER(corona_state::select2_w)
-{
- // d0-d3: input mux
- // d4-d7: lcd data
- m_select2 = data;
-}
-
-WRITE8_MEMBER(corona_state::control1_w)
-{
- // d5: button led select
- m_control1 = data;
- update_leds();
-
- // d6: speaker out
- m_dac->write(data >> 6 & 1);
-}
-
-WRITE8_MEMBER(corona_state::control2_w)
-{
- // d0,d1: rombank
- m_rombank->set_bank(data & 3);
-
- // d2 rising edge: write to lcd
- if (~m_control2 & data & 4)
- lcd_data_w(m_select2 >> 4);
-
- // d6 rising edge: power-off request
- if (~m_control2 & data & 0x40)
- power_off();
-
- m_control2 = data;
-}
-
-READ8_MEMBER(corona_state::control1_r)
-{
- u8 data = 0;
-
- // d5: lcd status flag?
- if (m_lcd_ready)
- data |= 0x20;
-
- // d6: FREQ. SEL related?
-
- // d7: battery low
- data |= m_inputs[8]->read();
-
- return data;
-}
-
-READ8_MEMBER(corona_state::control2_r)
-{
- u8 data = 0;
- u8 sel = m_select2 & 0xf;
-
- // d5-d7: read button panel
- if (sel < 8)
- data |= m_inputs[sel]->read() << 5;
-
- return data;
-}
-
-READ8_MEMBER(corona_state::chessboard_r)
-{
- // d0-d7: chessboard sensors
- return ~m_board->read_file(m_select2 & 0xf);
-}
-
-WRITE8_MEMBER(corona_state::lcd_reset_w)
-{
- // reset lcd?
- m_lcd_ready = true;
- m_lcd_count = 0;
-}
-
-
-
-/******************************************************************************
- Address Maps
-******************************************************************************/
-
-void corona_state::main_map(address_map &map)
-{
- map(0x0000, 0x1fff).ram().share("nvram");
- map(0x2000, 0x2000).w(FUNC(corona_state::select1_w));
- map(0x2400, 0x2400).rw(FUNC(corona_state::chessboard_r), FUNC(corona_state::leds1_w));
- map(0x2600, 0x2600).rw(FUNC(corona_state::control1_r), FUNC(corona_state::control1_w));
- map(0x6000, 0x6000).w(FUNC(corona_state::select2_w));
- map(0x6200, 0x6200).w(FUNC(corona_state::lcd_reset_w));
- map(0x6400, 0x6400).w(FUNC(corona_state::leds2_w));
- map(0x6600, 0x6600).rw(FUNC(corona_state::control2_r), FUNC(corona_state::control2_w));
- map(0x8000, 0xffff).m(m_rombank, FUNC(address_map_bank_device::amap8));
-}
-
-void corona_state::rombank_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x00000, 0x0ffff).rom().region("maincpu", 0);
- map(0x10000, 0x17fff).r(m_extrom, FUNC(generic_slot_device::read_rom));
-}
-
-
-
-/******************************************************************************
- Input Ports
-******************************************************************************/
-
-static INPUT_PORTS_START( corona )
- PORT_INCLUDE( saitek_stratos )
-
- PORT_MODIFY("IN.5")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("LCD Scroll")
-INPUT_PORTS_END
-
-
-
-/******************************************************************************
- Machine Configs
-******************************************************************************/
-
-void corona_state::corona(machine_config &config)
-{
- /* basic machine hardware */
- M65C02(config, m_maincpu, 5_MHz_XTAL); // see set_cpu_freq
- m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map);
- m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(183));
-
- ADDRESS_MAP_BANK(config, "rombank").set_map(&corona_state::rombank_map).set_options(ENDIANNESS_LITTLE, 8, 17, 0x8000);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
- m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
- m_board->set_delay(attotime::from_msec(200));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(3+8, 8);
- config.set_default_layout(layout_saitek_corona);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
- VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
-
- /* extension rom */
- GENERIC_CARTSLOT(config, m_extrom, generic_plain_slot, "saitek_egr", "bin");
- m_extrom->set_device_load(FUNC(corona_state::extrom_load));
-
- SOFTWARE_LIST(config, "cart_list").set_original("saitek_egr");
-}
-
-
-
-/******************************************************************************
- ROM Definitions
-******************************************************************************/
-
-ROM_START( corona )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("w2_708g_u2.u2", 0x0000, 0x8000, CRC(52568bb4) SHA1(83fe91787e17bbefc2b3ec651ddb11c88990060d) )
- ROM_LOAD("bw2_708a_u3.u3", 0x8000, 0x8000, CRC(32848f73) SHA1(a447543e3eb4757f9afed26fde77b66985eb96a7) )
-ROM_END
-
-ROM_START( coronaa )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("w2_a14c_u2.u2", 0x0000, 0x8000, CRC(be82e199) SHA1(cfcc573774b6907ed137dca01fa7f3fce493a89f) )
- ROM_LOAD("bw2_a14_u3.u3", 0x8000, 0x8000, CRC(abe87285) SHA1(b15f7ddeac78d252cf413ba4085523e44c6d15df) )
-ROM_END
-
-} // anonymous namespace
-
-
-
-/******************************************************************************
- Drivers
-******************************************************************************/
-
-/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
-CONS( 1990, corona, 0, 0, corona, corona, corona_state, empty_init, "Saitek", "Kasparov Corona (ver. D+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka Corona II
-CONS( 1988, coronaa, corona, 0, corona, corona, corona_state, empty_init, "Saitek", "Kasparov Corona (ver. C)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )