diff options
-rw-r--r-- | src/mame/drivers/debut.cpp | 21 | ||||
-rw-r--r-- | src/mame/drivers/im01.cpp | 91 |
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 ) |