hh_sm510.cpp: added new game Uchitel' arifmetiki (#13742)

New working systems
-------------------
Uchitel' arifmetiki (Elektronika) [Milan Galcik, Igor Nys]

* Renamed Amusing Arithmetic to Vesolaya arifmetika, updated Nu, pogodi! release year.
This commit is contained in:
MilanBA 2025-05-26 13:29:50 +02:00 committed by GitHub
parent 477ec55dbb
commit 6b37f12278
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 130 additions and 15 deletions

View File

@ -35,7 +35,7 @@ TODO:
gnw_climbern, gnw_dkcirc, gnw_dkhockey, gnw_dkjrp, gnw_dkong3, gnw_gcliff, gnw_climbern, gnw_dkcirc, gnw_dkhockey, gnw_dkjrp, gnw_dkong3, gnw_gcliff,
gnw_mariocmt, gnw_mariocmta, gnw_mariotj, gnw_mbaway, gnw_mmousep, gnw_mariocmt, gnw_mariocmta, gnw_mariotj, gnw_mbaway, gnw_mmousep,
gnw_pinball, gnw_popeyep, gnw_sbuster, gnw_snoopyp, gnw_zelda, trtreisl, gnw_pinball, gnw_popeyep, gnw_sbuster, gnw_snoopyp, gnw_zelda, trtreisl,
trspacadv, amusarit trspacadv, vesarif, uchitari
================================================================================ ================================================================================
@ -4526,7 +4526,7 @@ ROM_END
* KB1013VK1-2 MCU * KB1013VK1-2 MCU
* lcd screen with custom segments, 1-bit sound * lcd screen with custom segments, 1-bit sound
In 1984, Электроника (Elektronika, USSR) released an unlicensed clone of In 1983, Электроника (Elektronika, USSR) released an unlicensed clone of
Nintendo G&W Egg: Ну, погоди! (Nu, pogodi!). This was followed by several other Nintendo G&W Egg: Ну, погоди! (Nu, pogodi!). This was followed by several other
titles that were the same under the hood, only differing in graphics. They also titles that were the same under the hood, only differing in graphics. They also
made a slightly modified version, adding a new game mode (by pressing A+B) made a slightly modified version, adding a new game mode (by pressing A+B)
@ -4970,19 +4970,19 @@ ROM_END
*******************************************************************************/ *******************************************************************************/
class amusarit_state : public hh_sm510_state class vesarif_state : public hh_sm510_state
{ {
public: public:
amusarit_state(const machine_config &mconfig, device_type type, const char *tag) : vesarif_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_sm510_state(mconfig, type, tag) hh_sm510_state(mconfig, type, tag)
{ } { }
void amusarit(machine_config &config); void vesarif(machine_config &config);
}; };
// inputs // inputs
static INPUT_PORTS_START( amusarit ) static INPUT_PORTS_START( vesarif )
PORT_START("IN.0") // S1 PORT_START("IN.0") // S1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Start") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Start")
@ -5001,22 +5001,135 @@ INPUT_PORTS_END
// config // config
void amusarit_state::amusarit(machine_config &config) void vesarif_state::vesarif(machine_config &config)
{ {
sm511_common(config, 1672, 1080); // 1326 x 856 sm511_common(config, 1672, 1080); // 1326 x 856
} }
// roms // roms
ROM_START( amusarit ) ROM_START( vesarif )
ROM_REGION( 0x1000, "maincpu", 0 ) ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "amusarit.program", 0x0000, 0x1000, CRC(ae9053ef) SHA1(40dcda3616c9f430e04e20aef22e7db6b2b94f37) ) ROM_LOAD( "vesarif.program", 0x0000, 0x1000, CRC(ae9053ef) SHA1(40dcda3616c9f430e04e20aef22e7db6b2b94f37) )
ROM_REGION( 0x100, "maincpu:melody", 0 ) ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "amusarit.melody", 0x000, 0x100, BAD_DUMP CRC(28fb8872) SHA1(18db11d27d8af2fddf8bba8080e05e2fa50b8215) ) // decap needed for verification ROM_LOAD( "vesarif.melody", 0x000, 0x100, BAD_DUMP CRC(28fb8872) SHA1(18db11d27d8af2fddf8bba8080e05e2fa50b8215) ) // decap needed for verification
ROM_REGION( 81241, "screen", 0) ROM_REGION( 81240, "screen", 0)
ROM_LOAD( "amusarit.svg", 0, 81241, CRC(c9f52593) SHA1(36461b5f880e6c8fa281d46d7449528f3b324059) ) ROM_LOAD( "vesarif.svg", 0, 81240, CRC(27121109) SHA1(63d53e5718b1a014a5cfd7dffa5cb17469fa3182) )
ROM_END
/*******************************************************************************
Elektronika Учитель арифметики(?) (Uchitel' arifmetiki(?), model ???)
* КБ1515ХМ3-2 9108 001 (no decap); seems to be compatible with КБ1013ВК7-2
which in turn is compatible with Sharp SM511
* lcd screen with custom segments, 1-bit sound
* ROM signature: ALEXANDER GAGANOV USSR, MOSCOW
There is no evidence of a real unit yet. Only two hardware parts are
available at the moment: PCB with chip, and LCD (in fact, there must have been
two PCBs; the other one was for the keypad, battery compartment and speaker).
Both parts were found in ruins of the factory in Vinnytsia (Ukraine) formerly
producing LCD games.
As the device did not come into mass production, it's considered to be
just a prototype. The game title is not fully determined. There is a reference
to a game called "Учитель арифметики" in the Микропроцессорные средства и
системы magazine (year 1990, number 4, page 38), and this reference was
taken as the most probable name for this game.
*******************************************************************************/
class uchitari_state : public hh_sm510_state
{
public:
uchitari_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_sm510_state(mconfig, type, tag)
{ }
void uchitari(machine_config &config);
};
// inputs
static INPUT_PORTS_START( uchitari )
PORT_START("IN.0") // S1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("Evaluate Entry")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_CHANGED_CB(input_changed) PORT_NAME("Start Exam")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.1") // S2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_CHANGED_CB(input_changed) PORT_NAME("Evaluate Division Entries")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_CHANGED_CB(input_changed) PORT_NAME("Mode")
PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x30, NOTEQUALS, 0x00) // Alarm / Exam Level
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.2") // S3
PORT_BIT( 0x01, 0x01, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // "0"/Minute
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHANGED_CB(input_changed) PORT_NAME("Clear entry / Correction")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("5")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.3") // S4
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("6")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("+")
PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x0c, NOTEQUALS, 0x00) // "1"/Hour
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.4") // S5
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("7")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("-")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("2")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.5") // S6
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("8")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHANGED_CB(input_changed) PORT_NAME(u8"×")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("3")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.6") // S7
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("9")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME(u8"÷")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("4")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("ACL")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_ON ) PORT_CHANGED_CB(acl_button) PORT_NAME("ACL")
PORT_START("FAKE") // some of the buttons are presumed to be physically separate but electronically the same
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("0")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHANGED_CB(input_changed) PORT_NAME("Minute")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_CB(input_changed) PORT_NAME("1")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LEFT) PORT_CHANGED_CB(input_changed) PORT_NAME("Hour")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_CHANGED_CB(input_changed) PORT_NAME("Alarm")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_CHANGED_CB(input_changed) PORT_NAME("Exam Level")
INPUT_PORTS_END
// config
void uchitari_state::uchitari(machine_config &config)
{
sm511_common(config, 1520, 1080); // 1341 x 953
}
// roms
ROM_START( uchitari )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "uchitari.program", 0x0000, 0x1000, CRC(1d2d7abb) SHA1(10d90f63813cddc5c986ed3942c64ee6d67f545e) )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "uchitari.melody", 0x000, 0x100, BAD_DUMP CRC(28041942) SHA1(a36e246b215499b7392c28fddf1aad499016a480) ) // decap needed for verification
ROM_REGION( 98301, "screen", 0)
ROM_LOAD( "uchitari.svg", 0, 98301, CRC(584a5ce4) SHA1(6971c6aee3ccb3acd3ea52d2ef0edf740db3c56d) )
ROM_END ROM_END
@ -12244,7 +12357,7 @@ SYST( 1984, bassmate, 0, 0, bassmate, bassmate, bassm
// Elektronika (G&W clones) // Elektronika (G&W clones)
SYST( 1988, taynyoke, gnw_octopus, 0, taynyoke, gnw_octopus, gnw_octopus_state, empty_init, "bootleg (Elektronika)", "Tayny okeana", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1988, taynyoke, gnw_octopus, 0, taynyoke, gnw_octopus, gnw_octopus_state, empty_init, "bootleg (Elektronika)", "Tayny okeana", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1989, vespovar, gnw_chef, 0, vespovar, gnw_chef, gnw_chef_state, empty_init, "bootleg (Elektronika)", "Vesyolyy povar", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1989, vespovar, gnw_chef, 0, vespovar, gnw_chef, gnw_chef_state, empty_init, "bootleg (Elektronika)", "Vesyolyy povar", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1984, nupogodi, gnw_mmouse, 0, nupogodi, gnw_mmouse, nupogodi_state, empty_init, "bootleg (Elektronika)", "Nu, pogodi!", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1983, nupogodi, gnw_mmouse, 0, nupogodi, gnw_mmouse, nupogodi_state, empty_init, "bootleg (Elektronika)", "Nu, pogodi!", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1988, ehockey, gnw_mmouse, 0, ehockey, gnw_mmouse, nupogodi_state, empty_init, "bootleg (Elektronika)", "Hockey (Elektronika)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1988, ehockey, gnw_mmouse, 0, ehockey, gnw_mmouse, nupogodi_state, empty_init, "bootleg (Elektronika)", "Hockey (Elektronika)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1989, rkosmosa, gnw_mmouse, 0, rkosmosa, rkosmosa, nupogodi_state, empty_init, "bootleg (Elektronika)", "Razvedchiki kosmosa", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1989, rkosmosa, gnw_mmouse, 0, rkosmosa, rkosmosa, nupogodi_state, empty_init, "bootleg (Elektronika)", "Razvedchiki kosmosa", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1989, okhota, gnw_mmouse, 0, okhota, gnw_mmouse, nupogodi_state, empty_init, "bootleg (Elektronika)", "Okhota", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1989, okhota, gnw_mmouse, 0, okhota, gnw_mmouse, nupogodi_state, empty_init, "bootleg (Elektronika)", "Okhota", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
@ -12263,7 +12376,8 @@ SYST( 1989, kosmicmt, gnw_fire, 0, kosmicmt, gnw_fire, gnw_f
// Elektronika (original) // Elektronika (original)
SYST( 1990, auslalom, 0, 0, auslalom, auslalom, auslalom_state, empty_init, "Elektronika", "Autoslalom", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1990, auslalom, 0, 0, auslalom, auslalom, auslalom_state, empty_init, "Elektronika", "Autoslalom", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 199?, elbaskb, 0, 0, elbaskb, elbaskb, elbaskb_state, empty_init, "Elektronika", "Basketbol (Elektronika)", MACHINE_SUPPORTS_SAVE ) SYST( 199?, elbaskb, 0, 0, elbaskb, elbaskb, elbaskb_state, empty_init, "Elektronika", "Basketbol (Elektronika)", MACHINE_SUPPORTS_SAVE )
SYST( 1992, amusarit, 0, 0, amusarit, amusarit, amusarit_state, empty_init, "Elektronika", "Amusing Arithmetic", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1992, vesarif, 0, 0, vesarif, vesarif, vesarif_state, empty_init, "Elektronika", "Vesolaya arifmetika", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1991, uchitari, 0, 0, uchitari, uchitari, uchitari_state, empty_init, "Elektronika", "Uchitel' arifmetiki (prototype?)", MACHINE_SUPPORTS_SAVE )
// Konami // Konami
SYST( 1989, kdribble, 0, 0, kdribble, kdribble, kdribble_state, empty_init, "Konami", "Double Dribble (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) SYST( 1989, kdribble, 0, 0, kdribble, kdribble, kdribble_state, empty_init, "Konami", "Double Dribble (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )

View File

@ -19449,7 +19449,6 @@ rw30r
rw31r rw31r
@source:handheld/hh_sm510.cpp @source:handheld/hh_sm510.cpp
amusarit
atakaast atakaast
auslalom auslalom
bassmate bassmate
@ -19620,6 +19619,8 @@ tvindictr
twworld twworld
txmen txmen
txmenpx txmenpx
uchitari
vesarif
vespovar vespovar
vfutbol vfutbol