mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
New working machines
-------------------- Elektronika IM-05 [hap, RCgoff]
This commit is contained in:
parent
2ab562bece
commit
b79bab5504
@ -1,36 +1,53 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Radon17, Berger
|
||||
// thanks-to:Radon17, RCgoff, Berger
|
||||
/******************************************************************************
|
||||
|
||||
Электроника ИМ-01 (Elektronika IM-01)
|
||||
|
||||
Soviet chess computer, produced by Svetana from 1986-1992.
|
||||
ИМ-01Т is the same hardware, improved program and has 1 more difficulty level.
|
||||
ИМ-05 is also on similar hardware, it was released after the Soviet dissolution.
|
||||
|
||||
TODO:
|
||||
- emulate К1801ВМ1, using T11 for now and I hope it works ok
|
||||
- emulate К1801ВМ1/2, using T11 for now and I hope it works ok
|
||||
- emulate K1809BB1, IRQ is from here too (measured 177.4Hz)
|
||||
- emulate К1573ХМ1
|
||||
- It's running a bit too fast?: CPU clock was measured 4.61MHz, beeper
|
||||
frequency 3.73kHz and beeper duration 34.2ms. In MAME, beeper frequency is
|
||||
4.15kHz and duration is 31ms, meaning it's around 1.1 times faster, maybe
|
||||
К1801ВМ1 internal timing differs from T11, and/or MAME's T11 core timing
|
||||
itself is not 100% accurate.
|
||||
- Is im01t extra RAM chip used at all, and if so, where is it mapped?
|
||||
Even when trying to solve mate problems (level 7, and overclocked CPU),
|
||||
there are no unmapped writes.
|
||||
- What is 0x6000-0x7fff for? im01 will test for both RAM and ROM in this
|
||||
- Is im01t/im05 extra RAM chip used at all? Even when trying to solve mate
|
||||
problems (level 7, and overclocked CPU), there are no writes to it.
|
||||
- What is im01 0x6000-0x7fff for? it will test for both RAM and ROM in this
|
||||
area if no bus error was triggered, and will fail to boot up.
|
||||
- verify im05 XTAL and IRQ
|
||||
- verify im05 button functions
|
||||
|
||||
*******************************************************************************
|
||||
===============================================================================
|
||||
|
||||
Hardware notes:
|
||||
|
||||
ИМ-01:
|
||||
- К1801ВМ1 CPU (PDP-11 derived) @ ~4.61MHz (9216 кгц XTAL)
|
||||
- 16KB ROM (2*К1809РЕ1), 2KB RAM(К1809РУ1) (4KB RAM for ИМ-01Т)
|
||||
- K1809BB1 (I/O, counter)
|
||||
- 4-digit VFD 7seg panel(cyan, green window overlay), beeper
|
||||
|
||||
Keypad legend (excluding A1-H8 and black/white):
|
||||
ИМ-01Т:
|
||||
- 4KB RAM (2*К1809РУ1), but also seen with 1 К1809РУ1 like ИМ-01
|
||||
- rest is same as ИМ-01
|
||||
|
||||
ИМ-05:
|
||||
- КМ1801ВМ2 CPU (similar to К1801ВМ1)
|
||||
- 24KB ROM (3*К1809РЕ1), 4KB RAM (2*КР573РУ10)
|
||||
- К1573ХМ1 (I/O controller)
|
||||
- rest is same as ИМ-01
|
||||
|
||||
===============================================================================
|
||||
|
||||
ИМ-01 keypad legend (excluding A1-H8 and black/white):
|
||||
|
||||
Фиг: префиксная клавиша для ввода кода шахматной фигуры, - Prefix Key (hold)
|
||||
а также для установки фигур в начальную позицию,
|
||||
@ -56,6 +73,17 @@ N: чксло ходов - Show Moves
|
||||
|
||||
* note: hold Фиг
|
||||
|
||||
ИМ-05 keypad legend (differences shown, preliminary):
|
||||
|
||||
Реж: режима - Mode (no hold)
|
||||
НП: - - Reset
|
||||
СД: - - Cancel?
|
||||
↓: - - Confirm (level/piece)
|
||||
→: - - Forward
|
||||
CТА: - - Enter Move
|
||||
ПХ: - - Hint
|
||||
Р: - - Promotion (hold)
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -68,10 +96,13 @@ N: чксло ходов - Show Moves
|
||||
|
||||
// internal artwork
|
||||
#include "im01.lh" // clickable
|
||||
#include "im05.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
// ИМ-01 / shared
|
||||
|
||||
class im01_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -84,24 +115,26 @@ public:
|
||||
{ }
|
||||
|
||||
void im01(machine_config &config);
|
||||
void im01t(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<t11_device> m_maincpu;
|
||||
required_device<pwm_display_device> m_display;
|
||||
required_device<dac_bit_interface> m_dac;
|
||||
required_ioport_array<6> m_inputs;
|
||||
|
||||
void main_map(address_map &map);
|
||||
void im01_map(address_map &map);
|
||||
void im01t_map(address_map &map);
|
||||
|
||||
u8 irq_callback(offs_t offset);
|
||||
INTERRUPT_GEN_MEMBER(interrupt);
|
||||
|
||||
// I/O handlers
|
||||
void update_display();
|
||||
virtual u8 get_segs(u8 data) { return bitswap<8>(data,0,1,2,3,4,5,6,7); }
|
||||
u16 mux_r(offs_t offset, u16 mem_mask);
|
||||
void mux_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
u16 digit_r(offs_t offset, u16 mem_mask);
|
||||
@ -120,6 +153,24 @@ void im01_state::machine_start()
|
||||
save_item(NAME(m_digit_data));
|
||||
}
|
||||
|
||||
// ИМ-05
|
||||
|
||||
class im05_state : public im01_state
|
||||
{
|
||||
public:
|
||||
im05_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
im01_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void im05(machine_config &config);
|
||||
|
||||
private:
|
||||
void im05_map(address_map &map);
|
||||
|
||||
// digit segments are in a different order
|
||||
virtual u8 get_segs(u8 data) override { return bitswap<8>(data,0,1,6,4,2,3,5,7); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -150,7 +201,7 @@ INTERRUPT_GEN_MEMBER(im01_state::interrupt)
|
||||
|
||||
void im01_state::update_display()
|
||||
{
|
||||
m_display->matrix(m_inp_mux, bitswap<8>(m_digit_data,0,1,2,3,4,5,6,7));
|
||||
m_display->matrix(m_inp_mux, get_segs(m_digit_data));
|
||||
}
|
||||
|
||||
u16 im01_state::mux_r(offs_t offset, u16 mem_mask)
|
||||
@ -204,7 +255,7 @@ void im01_state::error_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void im01_state::main_map(address_map &map)
|
||||
void im01_state::im01_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x2000, 0x5fff).rom();
|
||||
@ -214,6 +265,18 @@ void im01_state::main_map(address_map &map)
|
||||
map(0xffe8, 0xffe9).w(FUNC(im01_state::error_w)).nopr();
|
||||
}
|
||||
|
||||
void im01_state::im01t_map(address_map &map)
|
||||
{
|
||||
im01_map(map);
|
||||
map(0x0800, 0x0fff).ram();
|
||||
}
|
||||
|
||||
void im05_state::im05_map(address_map &map)
|
||||
{
|
||||
im01t_map(map);
|
||||
map(0x6000, 0x7fff).rom();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -258,6 +321,44 @@ static INPUT_PORTS_START( im01 )
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Set Level")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( im05 )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A) PORT_NAME("A 1 / Pawn")
|
||||
PORT_BIT(0x02, 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(0x04, 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(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D) PORT_NAME("D 4 / Rook")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME(u8"Р (Promotion)")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("? (Verify Position)")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME(u8"ПХ (Hint)")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Forward")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME(u8"CТА (Enter)")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME(u8"CИ (Clear Entry)")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Confirm")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E) PORT_NAME("E 5 / Queen")
|
||||
PORT_BIT(0x02, 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(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G) PORT_NAME("G 7")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H) PORT_NAME("H 8")
|
||||
|
||||
PORT_START("IN.4")
|
||||
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_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_Z) PORT_NAME("White / 9")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME(u8"И (Show Analyzed Move)")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME(u8"Реж (Mode)")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Set Level")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_X) PORT_NAME("Black / 0")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME(u8"СД (Cancel)")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME(u8"НП (Reset)")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -269,9 +370,9 @@ void im01_state::im01(machine_config &config)
|
||||
// basic machine hardware
|
||||
T11(config, m_maincpu, 9.216_MHz_XTAL / 2); // actually К1801ВМ1
|
||||
m_maincpu->set_initial_mode(3 << 13);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &im01_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &im01_state::im01_map);
|
||||
m_maincpu->in_iack().set(FUNC(im01_state::irq_callback));
|
||||
m_maincpu->set_periodic_int(FUNC(im01_state::interrupt), attotime::from_hz(177));
|
||||
m_maincpu->set_periodic_int(FUNC(im01_state::interrupt), attotime::from_hz(177)); // measured
|
||||
|
||||
// video hardware
|
||||
PWM_DISPLAY(config, m_display).set_size(5, 7);
|
||||
@ -283,6 +384,26 @@ void im01_state::im01(machine_config &config)
|
||||
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
}
|
||||
|
||||
void im01_state::im01t(machine_config &config)
|
||||
{
|
||||
im01(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &im01_state::im01t_map);
|
||||
}
|
||||
|
||||
void im05_state::im05(machine_config &config)
|
||||
{
|
||||
im01(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &im05_state::im05_map);
|
||||
m_maincpu->set_periodic_int(FUNC(im05_state::interrupt), attotime::from_hz(512)); // approximation
|
||||
|
||||
// video hardware
|
||||
config.set_default_layout(layout_im05);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -301,6 +422,13 @@ ROM_START( im01t )
|
||||
ROM_LOAD("0000149", 0x4000, 0x2000, CRC(43b14589) SHA1(b083b631f38a26a335226bc474669ef7f332f541) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( im05 )
|
||||
ROM_REGION16_LE( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD("0000205", 0x2000, 0x2000, CRC(8aa51bcb) SHA1(211a3fa22627e828841121a735b4625a4bbff4da) )
|
||||
ROM_LOAD("0000206", 0x4000, 0x2000, CRC(3d3ecea6) SHA1(045abe1c935a8748b5a20a11f10f34c835c54156) )
|
||||
ROM_LOAD("0000207", 0x6000, 0x2000, CRC(3323378a) SHA1(94a890bff34699c8b8c516fb446872089778cf97) )
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
@ -311,4 +439,6 @@ ROM_END
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1986, im01, 0, 0, im01, im01, im01_state, empty_init, "Svetlana", "Elektronika IM-01", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1991, im01t, im01, 0, im01, im01, im01_state, empty_init, "Svetlana", "Elektronika IM-01T", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1991, im01t, im01, 0, im01t, im01, im01_state, empty_init, "Svetlana", "Elektronika IM-01T", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
||||
CONS( 1993, im05, 0, 0, im05, im05, im05_state, empty_init, "Svetlana", "Elektronika IM-05", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
304
src/mame/layout/im05.lay
Normal file
304
src/mame/layout/im05.lay
Normal file
@ -0,0 +1,304 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- NOTE: no chesspieces simulation here -->
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="under"><rect><color red="0.2" green="0.2" blue="0.2" /></rect></element>
|
||||
<element name="greenm"><rect><color red="0.2" green="1.0" blue="0.2" /></rect></element>
|
||||
|
||||
|
||||
<!-- button panel -->
|
||||
|
||||
<element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
|
||||
<element name="whitew"><rect><color red="1" green="1" blue="1" /></rect></element>
|
||||
<element name="blacka"><rect><color red="0.125" green="0.125" blue="0.125" /></rect></element>
|
||||
|
||||
<element name="but" defstate="0">
|
||||
<rect state="1"><color red="0.25" green="0.25" blue="0.25" /></rect>
|
||||
<rect state="0"><color red="0.1" green="0.1" blue="0.1" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="text_a">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="a" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_b">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="b" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_c">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="c" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_d">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="d" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_e">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="e" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_f">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="f" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_g">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="g" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_h">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="h" align="1"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
|
||||
<element name="text_0">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="0" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_1">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="1" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_2">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="2" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_3">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="3" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_4">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="4" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_5">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="5" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_6">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="6" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_7">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="7" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_8">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="8" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_9">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="9" align="2"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
|
||||
<element name="text_l1">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="Реж"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l2">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="НП"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l3">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="И"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l4">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="СД"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l5">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="N"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l6">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="≡"><color red="0.1" green="0.1" blue="0.1" /></text> <!-- triple dash -->
|
||||
</element>
|
||||
<element name="text_l7">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="→"><color red="0.1" green="0.1" blue="0.1" /></text> <!-- arrow right -->
|
||||
</element>
|
||||
<element name="text_l8">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="←"><color red="0.1" green="0.1" blue="0.1" /></text> <!-- arrow left -->
|
||||
</element>
|
||||
<element name="text_l9">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="ПХ"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l10">
|
||||
<disk>
|
||||
<bounds x="0" y="0" width="1" height="1" />
|
||||
<color red="0.1" green="0.1" blue="0.1" />
|
||||
</disk>
|
||||
<text string="↓"> <!-- arrow down -->
|
||||
<bounds x="0" y="0.1" width="1" height="0.7" />
|
||||
<color red="0.8" green="0.8" blue="0.8" />
|
||||
</text>
|
||||
</element>
|
||||
<element name="text_l11">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="?"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l12">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="CИ"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l13">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="Р"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
<element name="text_l14">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<text string="CТА"><color red="0.1" green="0.1" blue="0.1" /></text>
|
||||
</element>
|
||||
|
||||
<element name="disk_w">
|
||||
<disk>
|
||||
<bounds x="0" y="0" width="1" height="1" />
|
||||
<color red="0.1" green="0.1" blue="0.1" />
|
||||
</disk>
|
||||
<disk>
|
||||
<bounds x="0.1" y="0.1" width="0.8" height="0.8" />
|
||||
<color red="0.8" green="0.8" blue="0.8" />
|
||||
</disk>
|
||||
</element>
|
||||
<element name="disk_b">
|
||||
<disk><color red="0.1" green="0.1" blue="0.1" /></disk>
|
||||
</element>
|
||||
|
||||
<element name="text_p1"><image file="chess/bk.svg"/></element>
|
||||
<element name="text_p2"><image file="chess/bq.svg"/></element>
|
||||
<element name="text_p3"><image file="chess/br.svg"/></element>
|
||||
<element name="text_p4"><image file="chess/bb.svg"/></element>
|
||||
<element name="text_p5"><image file="chess/bn.svg"/></element>
|
||||
<element name="text_p6"><image file="chess/bp.svg"/></element>
|
||||
|
||||
<group name="panel">
|
||||
<element ref="white"><bounds x="5.3" y="7" width="19.7" height="51" /></element>
|
||||
|
||||
<element ref="whitew"><bounds x="5.5" y="20" width="5" height="36" /></element>
|
||||
<element ref="text_p1"><bounds x="6.2" y="22.45" width="2.8" height="2.8" /></element>
|
||||
<element ref="text_p2"><bounds x="6.2" y="28.45" width="2.8" height="2.8" /></element>
|
||||
<element ref="text_p3"><bounds x="6.2" y="34.45" width="2.8" height="2.8" /></element>
|
||||
<element ref="text_p4"><bounds x="6.2" y="40.45" width="2.8" height="2.8" /></element>
|
||||
<element ref="text_p5"><bounds x="6.2" y="46.45" width="2.8" height="2.8" /></element>
|
||||
<element ref="text_p6"><bounds x="6.2" y="52.45" width="2.8" height="2.8" /></element>
|
||||
<element ref="blacka" blend="add"><bounds x="5.5" y="20" width="5" height="36" /></element>
|
||||
<element ref="white" blend="multiply"><bounds x="5.5" y="20" width="5" height="36" /></element>
|
||||
|
||||
<element ref="text_h"><bounds x="10" y="8" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_g"><bounds x="10" y="14" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_f"><bounds x="10" y="20" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_e"><bounds x="10" y="26" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_d"><bounds x="10" y="32" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_c"><bounds x="10" y="38" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_b"><bounds x="10" y="44" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_a"><bounds x="10" y="50" width="1.5" height="1.8" /></element>
|
||||
|
||||
<element ref="text_8"><bounds x="12" y="8" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_7"><bounds x="12" y="14" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_6"><bounds x="12" y="20" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_9"><bounds x="17" y="20" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_0"><bounds x="22" y="20" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_5"><bounds x="12" y="26" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_4"><bounds x="12" y="32" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_3"><bounds x="12" y="38" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_2"><bounds x="12" y="44" width="1.5" height="1.8" /></element>
|
||||
<element ref="text_1"><bounds x="12" y="50" width="1.5" height="1.8" /></element>
|
||||
|
||||
<element ref="text_l1"> <bounds x="15" y="8" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l2"> <bounds x="20" y="8" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l3"> <bounds x="15" y="14" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l4"> <bounds x="20" y="14" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l5"> <bounds x="15" y="26" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l6"> <bounds x="20" y="26" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l7"> <bounds x="15" y="32" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l8"> <bounds x="20" y="32" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l9"> <bounds x="15" y="38" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l10"><bounds x="20.95" y="38.1" width="1.6" height="1.6" /></element>
|
||||
<element ref="text_l11"><bounds x="15" y="44" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l12"><bounds x="20" y="44" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l13"><bounds x="15" y="50" width="3.5" height="1.8" /></element>
|
||||
<element ref="text_l14"><bounds x="20" y="50" width="3.5" height="1.8" /></element>
|
||||
|
||||
<element ref="disk_w"><bounds x="15" y="20.25" width="1.2" height="1.2" /></element>
|
||||
<element ref="disk_b"><bounds x="20" y="20.25" width="1.2" height="1.2" /></element>
|
||||
|
||||
<element ref="but" inputtag="IN.3" inputmask="0x08"><bounds x="10" y="10" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.3" inputmask="0x04"><bounds x="10" y="16" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.3" inputmask="0x02"><bounds x="10" y="22" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.3" inputmask="0x01"><bounds x="10" y="28" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.0" inputmask="0x08"><bounds x="10" y="34" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.0" inputmask="0x04"><bounds x="10" y="40" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.0" inputmask="0x02"><bounds x="10" y="46" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.0" inputmask="0x01"><bounds x="10" y="52" width="3.5" height="3" /></element>
|
||||
|
||||
<element ref="but" inputtag="IN.4" inputmask="0x08"><bounds x="15" y="10" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.4" inputmask="0x04"><bounds x="15" y="16" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.4" inputmask="0x02"><bounds x="15" y="22" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.4" inputmask="0x01"><bounds x="15" y="28" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.1" inputmask="0x08"><bounds x="15" y="34" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.1" inputmask="0x04"><bounds x="15" y="40" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.1" inputmask="0x02"><bounds x="15" y="46" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.1" inputmask="0x01"><bounds x="15" y="52" width="3.5" height="3" /></element>
|
||||
|
||||
<element ref="but" inputtag="IN.5" inputmask="0x08"><bounds x="20" y="10" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.5" inputmask="0x04"><bounds x="20" y="16" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.5" inputmask="0x02"><bounds x="20" y="22" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.5" inputmask="0x01"><bounds x="20" y="28" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.2" inputmask="0x08"><bounds x="20" y="34" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.2" inputmask="0x04"><bounds x="20" y="40" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.2" inputmask="0x02"><bounds x="20" y="46" width="3.5" height="3" /></element>
|
||||
<element ref="but" inputtag="IN.2" inputmask="0x01"><bounds x="20" y="52" width="3.5" height="3" /></element>
|
||||
</group>
|
||||
|
||||
|
||||
<!-- display -->
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg><color red="0.2" green="1.0" blue="0.85" /></led7seg>
|
||||
</element>
|
||||
|
||||
<element name="led" defstate="0">
|
||||
<disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.85" /></disk>
|
||||
</element>
|
||||
|
||||
<group name="display">
|
||||
<bounds x="-0.9" y="11" width="19.3" height="6" />
|
||||
|
||||
<element name="digit4" ref="digit"><bounds x="-0.9" y="11" width="4" height="6" /></element>
|
||||
<element name="digit3" ref="digit"><bounds x="3.8" y="11" width="4" height="6" /></element>
|
||||
<element name="digit1" ref="digit"><bounds x="9.7" y="11" width="4" height="6" /></element>
|
||||
<element name="digit0" ref="digit"><bounds x="14.4" y="11" width="4" height="6" /></element>
|
||||
|
||||
<element name="2.0" ref="led"><bounds x="8.6" y="12.0" width="0.6" height="0.6" /></element>
|
||||
<element name="2.3" ref="led"><bounds x="8.4" y="15.5" width="0.6" height="0.6" /></element>
|
||||
</group>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout (Full)">
|
||||
<group ref="display"><bounds x="8.3" y="19.74" width="13.7" height="4.26" /></group>
|
||||
<element ref="under" blend="add"><bounds x="5.3" y="16.74" width="19.7" height="11" /></element>
|
||||
<element ref="greenm" blend="multiply"><bounds x="5.3" y="16.74" width="19.7" height="11" /></element>
|
||||
|
||||
<group ref="panel"><bounds x="5.3" y="27" width="19.7" height="51" /></group>
|
||||
</view>
|
||||
|
||||
<view name="Internal Layout (Display)">
|
||||
<group ref="display"><bounds x="8.3" y="19.74" width="13.7" height="4.26" /></group>
|
||||
<element ref="under" blend="add"><bounds x="5.3" y="16.74" width="19.7" height="10.26" /></element>
|
||||
<element ref="greenm" blend="multiply"><bounds x="5.3" y="16.74" width="19.7" height="10.26" /></element>
|
||||
</view>
|
||||
|
||||
</mamelayout>
|
@ -6,9 +6,9 @@
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
The Alpha-8201/830x isn't a real CPU. It is a Hitachi HD44801 4-bit MCU,
|
||||
programmed to interpret an external program using a custom instruction set.
|
||||
Alpha-8301 has an expanded instruction set, backwards compatible with Alpha-8201.
|
||||
The Alpha-8x0x isn't a real CPU. It is a Hitachi HD44801 4-bit MCU, programmed
|
||||
to interpret an external program using a custom instruction set. Alpha-8302
|
||||
has an expanded instruction set, backwards compatible with Alpha-8201.
|
||||
|
||||
|
||||
Game Year MCU
|
||||
@ -185,7 +185,7 @@ opcode mnemonic function flags
|
||||
1111--xx mirror for the above
|
||||
|
||||
Notes:
|
||||
[1] bug: the Z flag is not updated correctly after a LD A,Rn instruction. Fixed in 8302 (possibly 8301).
|
||||
[1] bug: the Z flag is not updated correctly after a LD A,Rn instruction. Fixed in 8302.
|
||||
|
||||
|
||||
8302 CONFIRMED OPCODES:
|
||||
|
@ -17163,6 +17163,7 @@ ikt5a //
|
||||
@source:im01.cpp
|
||||
im01
|
||||
im01t
|
||||
im05
|
||||
|
||||
@source:imds2.cpp
|
||||
imds2 // Intellec MDS series-II
|
||||
|
Loading…
Reference in New Issue
Block a user