summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/intellect02.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/intellect02.cpp')
-rw-r--r--src/mame/drivers/intellect02.cpp284
1 files changed, 0 insertions, 284 deletions
diff --git a/src/mame/drivers/intellect02.cpp b/src/mame/drivers/intellect02.cpp
deleted file mode 100644
index 3a2b9f731f0..00000000000
--- a/src/mame/drivers/intellect02.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-// thanks-to:Alex_LG, Berger
-/******************************************************************************
-
-Интеллект-02 (Intellect-02) driver
-
-This is a Soviet electronic board game console, a dozen or so cartridge games were
-announced(can't say for certain how many released). PCB labels have prefix ДМП,
-it's assumed to have been designed by НИИ БРЭА (SRI BREA). First shown in 1983,
-produced during around 1985-1992.
-
-hardware notes:
-- КР580ВМ80А CPU (i8080A clone) @ 1.5MHz
-- КР580ИК55 (i8255 clone)
-- 1 KB RAM (8*КР565РУ2), cartridge port
-- 4-digit 7seg panel, 2 leds, 16 buttons, game board above it
-
-The chess/checkers board is detachable, with a board for Kalah underneath it.
-
-The hardware is very similar to Fidelity Chess Challenger 3. Actually, one of the
-first cartridges for this system, a Chess program, is a modified Chess Challenger 3 ROM.
-The chess engine was kept identical. (note: the "lose" LED is used for "check" in this game)
-The 2nd(4-level) chess cartridge is completely different, not a CC3 clone.
-
-Intellect-01 looks like it didn't get further than a prototype. It was a dedicated
-chess computer, probably a clone of CC3.
-
-keypad legend:
-
-СБ - сброс (reset)
-ВВ - ввод (input)
-ВИ - выбор игры (game select)
-СТ - стирание (erase)
-ПП - просмотр позиции (view position)
-УИ - уровень игры (game level)
-
-******************************************************************************/
-
-#include "emu.h"
-
-#include "cpu/i8085/i8085.h"
-#include "machine/i8255.h"
-#include "sound/beep.h"
-#include "video/pwm.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
-#include "softlist.h"
-#include "speaker.h"
-
-// internal artwork
-#include "intellect02.lh" // clickable
-
-
-namespace {
-
-class intel02_state : public driver_device
-{
-public:
- intel02_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_ppi8255(*this, "ppi8255"),
- m_display(*this, "display"),
- m_beeper(*this, "beeper"),
- m_cart(*this, "cartslot"),
- m_inputs(*this, "IN.%u", 0)
- { }
-
- // machine configs
- void intel02(machine_config &config);
-
- DECLARE_INPUT_CHANGED_MEMBER(reset_button);
-
-protected:
- virtual void machine_start() override;
-
-private:
- // devices/pointers
- required_device<cpu_device> m_maincpu;
- required_device<i8255_device> m_ppi8255;
- required_device<pwm_display_device> m_display;
- required_device<beep_device> m_beeper;
- required_device<generic_slot_device> m_cart;
- required_ioport_array<2> m_inputs;
-
- // address maps
- void main_map(address_map &map);
- void main_io(address_map &map);
-
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
-
- // I/O handlers
- void update_display();
- DECLARE_READ8_MEMBER(input_r);
- DECLARE_WRITE8_MEMBER(digit_w);
- DECLARE_WRITE8_MEMBER(control_w);
-
- u8 m_digit_data;
- u8 m_led_select;
-};
-
-void intel02_state::machine_start()
-{
- // zerofill
- m_digit_data = 0;
- m_led_select = 0;
-
- // register for savestates
- save_item(NAME(m_digit_data));
- save_item(NAME(m_led_select));
-}
-
-INPUT_CHANGED_MEMBER(intel02_state::reset_button)
-{
- // reset button goes to 8080/8255 RESET pins simultaneously (via 7474, and also a maze of NAND gates to who knows where)
- m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
- if (newval)
- m_ppi8255->reset();
-}
-
-
-
-/******************************************************************************
- I/O
-******************************************************************************/
-
-// cartridge
-
-DEVICE_IMAGE_LOAD_MEMBER(intel02_state::cart_load)
-{
- u32 size = m_cart->common_get_size("rom");
- m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
- m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
-
- return image_init_result::PASS;
-}
-
-
-// I8255 PPI
-
-void intel02_state::update_display()
-{
- m_display->matrix(m_led_select, m_digit_data);
-}
-
-READ8_MEMBER(intel02_state::input_r)
-{
- // d0-d3: buttons through a maze of logic gates
- // basically giving each button its own 4-bit scancode
- u8 data = count_leading_zeros(m_inputs[0]->read()) - 17;
-
- // d4: Vcc, d5-d7: buttons (direct)
- return data | (~m_inputs[1]->read() << 4 & 0xf0);
-}
-
-WRITE8_MEMBER(intel02_state::digit_w)
-{
- // d0-d6: digit segment data, d7: N/C
- m_digit_data = bitswap<7>(data,0,1,2,3,4,5,6);
- update_display();
-}
-
-WRITE8_MEMBER(intel02_state::control_w)
-{
- // d0-d5: select digit/leds
- m_led_select = data;
- update_display();
-
- // d6: N/C (it's a delay timer on CC3)
-
- // d7: enable beeper
- m_beeper->set_state(BIT(data, 7));
-}
-
-
-
-/******************************************************************************
- Address Maps
-******************************************************************************/
-
-void intel02_state::main_map(address_map &map)
-{
- map(0x0000, 0x1fff).r("cartslot", FUNC(generic_slot_device::read_rom));
- map(0xf000, 0xf3ff).ram();
-}
-
-void intel02_state::main_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0xf4, 0xf7).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
-}
-
-
-
-/******************************************************************************
- Input Ports
-******************************************************************************/
-
-static INPUT_PORTS_START( intel02 )
- PORT_START("IN.0")
- PORT_BIT(0x0007, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("ПП (View Position)")
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("УИ (Game Level)")
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H) PORT_NAME("H8")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G) PORT_NAME("G7")
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F) PORT_NAME("F6")
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E) PORT_NAME("E5")
- PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D) PORT_NAME("D4")
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C) PORT_NAME("C3")
- PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B) PORT_NAME("B2")
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A) PORT_NAME("A1")
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("ВВ (Input)")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("ВИ (Game Select)")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("СТ (Erase)")
-
- PORT_START("RESET")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, intel02_state, reset_button, 0) PORT_NAME("СБ (Reset)")
-INPUT_PORTS_END
-
-
-
-/******************************************************************************
- Machine Configs
-******************************************************************************/
-
-void intel02_state::intel02(machine_config &config)
-{
- /* basic machine hardware */
- I8080A(config, m_maincpu, 1500000); // measured (no XTAL)
- m_maincpu->set_addrmap(AS_PROGRAM, &intel02_state::main_map);
- m_maincpu->set_addrmap(AS_IO, &intel02_state::main_io);
-
- I8255(config, m_ppi8255);
- m_ppi8255->in_pa_callback().set(FUNC(intel02_state::input_r));
- m_ppi8255->out_pb_callback().set(FUNC(intel02_state::digit_w));
- m_ppi8255->tri_pb_callback().set_constant(0);
- m_ppi8255->out_pc_callback().set(FUNC(intel02_state::control_w));
- m_ppi8255->tri_pc_callback().set_constant(0x80);
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(6, 7);
- m_display->set_segmask(0xf, 0x7f);
- config.set_default_layout(layout_intellect02);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- BEEP(config, m_beeper, 3640); // measured, from RC circuit
- m_beeper->add_route(ALL_OUTPUTS, "speaker", 0.25);
-
- /* cartridge */
- GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "intellect02", "bin");
- m_cart->set_device_load(FUNC(intel02_state::cart_load));
- m_cart->set_must_be_loaded(true);
-
- SOFTWARE_LIST(config, "cart_list").set_original("intellect02");
-}
-
-
-
-/******************************************************************************
- ROM Definitions
-******************************************************************************/
-
-ROM_START( intel02 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
- // nothing here, it's on a cartridge
-ROM_END
-
-} // anonymous namespace
-
-
-
-/******************************************************************************
- Drivers
-******************************************************************************/
-
-// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
-CONS( 1985, intel02, 0, 0, intel02, intel02, intel02_state, empty_init, "BREA Research Institute", "Intellect-02", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )