summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2021-11-29 16:42:13 +0100
committer hap <happppp@users.noreply.github.com>2021-11-29 16:42:13 +0100
commit0858f6cb85376a0841da6e3d442cd9ed7f66c9c2 (patch)
tree2609f66c86057279ca269be62dbd4dbc3978f4f3
parentf7930b625c6732857b5e1d440de6d8c0ca22d0c3 (diff)
Machines promoted to working
---------------------------- Elektronika IM-01T [hap, Radon17, Berger]
-rw-r--r--src/mame/drivers/debut.cpp21
-rw-r--r--src/mame/drivers/im01.cpp91
2 files changed, 69 insertions, 43 deletions
diff --git a/src/mame/drivers/debut.cpp b/src/mame/drivers/debut.cpp
index 50c7922998f..81799511095 100644
--- a/src/mame/drivers/debut.cpp
+++ b/src/mame/drivers/debut.cpp
@@ -29,7 +29,7 @@ A bit more detailed, list of other Soviet standard TTL chips used and their equi
- К561ЛЕ5А = CD4001
- PC74HC259P = the odd one out
-keypad legend:
+Keypad legend:
АН - анализ (analysis, switches view info)
ХОД - ходи (force move)
@@ -44,10 +44,12 @@ keypad legend:
******************************************************************************/
#include "emu.h"
+
#include "cpu/i86/i86.h"
#include "machine/sensorboard.h"
#include "sound/dac.h"
#include "video/pwm.h"
+
#include "speaker.h"
// internal artwork
@@ -98,20 +100,17 @@ private:
DECLARE_WRITE_LINE_MEMBER(lcd_update_w);
u8 m_latch[5];
- u8 m_dac_data;
- u8 m_lcd_update;
+ u8 m_dac_data = 0;
+ u8 m_lcd_update = 0;
};
void debut_state::machine_start()
{
+ memset(m_latch, 0, sizeof(m_latch));
+
// resolve handlers
m_out_digit.resolve();
- // zerofill
- memset(m_latch, 0, sizeof(m_latch));
- m_dac_data = 0;
- m_lcd_update = 0;
-
// register for savestates
save_item(NAME(m_latch));
save_item(NAME(m_dac_data));
@@ -229,7 +228,7 @@ INPUT_PORTS_END
void debut_state::debutm(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
I8086(config, m_maincpu, 16.2_MHz_XTAL / 3);
m_maincpu->set_periodic_int(FUNC(debut_state::interrupt), attotime::from_hz(380));
m_maincpu->set_addrmap(AS_PROGRAM, &debut_state::main_map);
@@ -240,12 +239,12 @@ void debut_state::debutm(machine_config &config)
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
- /* video hardware */
+ // video hardware
PWM_DISPLAY(config, m_display).set_size(2, 9);
m_display->set_bri_maximum(0.5);
config.set_default_layout(layout_debutm);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
}
diff --git a/src/mame/drivers/im01.cpp b/src/mame/drivers/im01.cpp
index c60eb642ff4..596e010ef13 100644
--- a/src/mame/drivers/im01.cpp
+++ b/src/mame/drivers/im01.cpp
@@ -6,13 +6,7 @@
Электроника ИМ-01 (Elektronika IM-01)
Soviet chess computer, produced by Svetana from 1986-1992.
-IM-01T is the same hardware, the program has more difficulty levels.
-
-Hardware notes:
-- К1801ВМ1 CPU (PDP-11 derived) @ ~4.61MHz
-- 16KB ROM (2*К1809РЕ1), 2KB RAM(К1809РУ1)
-- K1809BB1 (I/O, counter)
-- 4-digit VFD 7seg panel(cyan, green window overlay), beeper
+IM-01T is the same hardware, improved program and has 1 more difficulty level.
TODO:
- emulate К1801ВМ1, using T11 for now and I hope it works ok
@@ -24,8 +18,41 @@ TODO:
and/or T11 core timing itself is not 100% accurate. There's a big "but":
these measurements are from the older IM-01.
- verify actual XTAL, the label couldn't be seen
+- add button panel to internal artwork
- dump/add im01 (rom serial 106/107)
+*******************************************************************************
+
+Hardware notes:
+- К1801ВМ1 CPU (PDP-11 derived) @ ~4.61MHz
+- 16KB ROM (2*К1809РЕ1), 2KB RAM(К1809РУ1)
+- K1809BB1 (I/O, counter)
+- 4-digit VFD 7seg panel(cyan, green window overlay), beeper
+
+Keypad legend (excluding A1-H8 and black/white):
+
+Фиг: префиксная клавиша для ввода кода шахматной фигуры, - Prefix Key (hold)
+ а также для установки фигур в начальную позицию,
+ сброса фигур с доски и изменения очередности хода
+
+НП: установка фигур в начальную позицию - Reset Board
+СД: сброс всех фигур с доски - Clear Board
+↓: ввод в компьютер Вашего хода, - Enter
+ а также фигуры при установке позиции
+
+ПХ: передача хода компьютера - Move
+≡: индикация уровня сложности - Set Level (hold)
+↑: индикация текущего уровня - Show Depth
+CИ: сброс информации на индикаторе - Clear Entry
+?: проверка позиции - Verify Position
+Вар: ввод варианта - Enter Variant
+ (несколько ходов подряд за белых и черных)
+
+↺: ход назад - Take Back
+И: индикация анализируемого хода - Show Analyzed Move
+N: чксло ходов - Show Moves
+РЗ: установка режима решения шахматных задач - Position Mode
+
******************************************************************************/
#include "emu.h"
@@ -184,40 +211,40 @@ void im01_state::main_map(address_map &map)
static INPUT_PORTS_START( im01 )
PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) // d4 1311r
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) // c3
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) // b2
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) // a1 4342r
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D) PORT_NAME("D 4 / Rook")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C) PORT_NAME("C 3 / Bishop")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B) PORT_NAME("B 2 / Knight")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A) PORT_NAME("A 1 / Pawn")
PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) // verify?
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME(u8"N (Show Moves)")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME(u8"Вар (Enter Variant)")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("? (Verify Position)")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Show Depth")
PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) // enter
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME(u8"ПХ (Move)")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME(u8"CИ (Clear Entry)")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) // h8
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) // g7
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) // f6
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) // e5
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H) PORT_NAME("H 8")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G) PORT_NAME("G 7")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F) PORT_NAME("F 6 / King")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E) PORT_NAME("E 5 / Queen")
PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME(u8"Фиг (Prefix Key)")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME(u8"И (Show Analyzed Move)")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("White")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME(u8"РЗ (Position Mode)")
PORT_START("IN.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) // lv
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME(u8"НП (Reset Board)") // hold Фиг
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME(u8"СД (Clear Board)") // hold Фиг
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Black")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Set Level")
INPUT_PORTS_END
@@ -266,4 +293,4 @@ ROM_END
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
-CONS( 1986, im01t, 0, 0, im01, im01, im01_state, empty_init, "Svetlana", "Elektronika IM-01T", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+CONS( 1986, im01t, 0, 0, im01, im01, im01_state, empty_init, "Svetlana", "Elektronika IM-01T", MACHINE_SUPPORTS_SAVE )