summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/hiscore/hiscore.dat304
-rw-r--r--scripts/target/mame/mess.lua2
-rw-r--r--src/devices/bus/cbmiec/fd2000.cpp2
-rw-r--r--src/emu/natkeyboard.cpp35
-rw-r--r--src/emu/natkeyboard.h3
-rw-r--r--src/emu/video.cpp2
-rw-r--r--src/emu/video.h2
-rw-r--r--src/frontend/mame/luaengine.cpp19
-rw-r--r--src/frontend/mame/ui/ui.cpp23
-rw-r--r--src/frontend/mame/ui/ui.h1
-rw-r--r--src/mame/drivers/expro02.cpp43
-rw-r--r--src/mame/drivers/falco5220.cpp95
-rw-r--r--src/mame/drivers/lucky37.cpp4
-rw-r--r--src/mame/drivers/saitek_corona.cpp156
-rw-r--r--src/mame/drivers/saitek_stratos.cpp431
-rw-r--r--src/mame/drivers/segac2.cpp2
-rw-r--r--src/mame/drivers/system1.cpp29
-rw-r--r--src/mame/drivers/terminal.cpp11
-rw-r--r--src/mame/includes/saitek_stratos.h72
-rw-r--r--src/mame/layout/saitek_corona.lay661
-rw-r--r--src/mame/mame.lst8
-rw-r--r--src/mame/mess.flt1
-rw-r--r--src/mame/video/dpb_brushproc.cpp14
-rw-r--r--src/mame/video/dpb_brushproc.h5
24 files changed, 1553 insertions, 372 deletions
diff --git a/plugins/hiscore/hiscore.dat b/plugins/hiscore/hiscore.dat
index 4b758a51991..f712eb19526 100644
--- a/plugins/hiscore/hiscore.dat
+++ b/plugins/hiscore/hiscore.dat
@@ -20,6 +20,7 @@
; Based on the Unofficial hiscore.dat file from http://highscore.mameworld.info/
;
; This hiscore.dat is only usable with lua enabled versions of mame since 0.172
+; For examples of @delay & shared memory see: Gorf/Missile Command (share) & blastoff (@delay)
;@s:1942.cpp
@@ -99,6 +100,11 @@ undoukai:
;@s:8080bw.cpp
+supinvsion:
+searthie:
+@:maincpu,program,20f4,02,00,50
+
+
alieninvp2:
cosmicin:
galmonst:
@@ -343,10 +349,6 @@ schaserc:
@:maincpu,program,233f,03,01,00
-searthie:
-@:maincpu,program,20f4,02,00,50
-
-
;*******cosmo
cosmo:
@:maincpu,program,2038,3,00,00
@@ -792,6 +794,13 @@ valtric:
;@s:arkanoid.cpp
+;**** let game run for about 5 seconds before playing ****
+tetrsark:
+tetrsark2:
+@:maincpu,program,c539,1,00,00
+@delay=4
+
+
;arkanoid:[Special thanks to Cananas for enhancing this entry]
ark1ball:
arkangc:
@@ -1726,6 +1735,7 @@ sboblbobla:
sboblboblb:
sboblbobld:
sboblboble:
+sboblboblf:
@:maincpu,program,e654,23,00,48
@:maincpu,program,e67b,3,1f,13
@:maincpu,program,e64c,3,00,00
@@ -3277,6 +3287,17 @@ lostwrldo:
;@s:cps2.cpp
+;pzloop2:******puzz loop 2 (euro 010302)
+;** stage scores not right ** ** you must wait untill the hiscore table has displayed **
+;** at least once before you start a game for this save to work ****
+pzloop2:
+pzloop2j:
+pzloop2jd:
+pzloop2jr1:
+@:maincpu,program,ff2cbc,3ae,4d,20
+@:maincpu,program,ff2cc8,1,20,20
+
+
;xmcotar1d:******X-Men: Children of the Atom (Euro 950105 Phoenix Edition)
xmcota:
xmcotaa:
@@ -3348,15 +3369,6 @@ mshvsfu1d:
@:maincpu,program,ff2b0c,63,00,03
-;pzloop2:******puzz loop 2 (euro 010302)
-;** stage scores not right ** ** you must wait untill the hiscore table has displayed **
-;** at least once before you start a game for this save to work ****
-pzloop2:
-pzloop2j:
-@:maincpu,program,ff2cbc,3ae,4d,20
-@:maincpu,program,ff2cc8,1,20,20
-
-
;(rockman 2 : the power fighters (japan 960708))
;megamn2d:******Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg)
megaman2:
@@ -4613,6 +4625,12 @@ destroyr:
@:maincpu,program,e0,1,00,00
+;@s:dfruit.cpp
+
+gemcrush:
+@:maincpu,program,8fc3,3c,47,12
+
+
;@s:dietgo.cpp
;******diet go go (euro v1.1 1992.09.26)
@@ -4663,6 +4681,25 @@ djboyua:
;@s:dkong.cpp
+;dkongf:******Donkey Kong Foundry (hack)
+dkong:
+dkongf:
+dkonghrd:
+dkongj:
+dkongjo:
+dkongjo1:
+dkongo:
+dkongpe:
+@:maincpu,program,6100,aa,94,76
+@:maincpu,program,60b8,03,50,00
+@:maincpu,program,7641,01,00,00
+@:maincpu,program,7621,01,00,00
+@:maincpu,program,7601,01,07,07
+@:maincpu,program,75e1,01,06,06
+@:maincpu,program,75c1,01,05,05
+@:maincpu,program,75a1,01,00,00
+
+
;*******street heat - cardinal amusements
strtheat:
strtheata:
@@ -4734,24 +4771,6 @@ hunchbkd:
@:maincpu,program,1c73,1,01,01
-;dkongf:******Donkey Kong Foundry (hack)
-dkong:
-dkongf:
-dkonghrd:
-dkongj:
-dkongjo:
-dkongjo1:
-dkongo:
-@:maincpu,program,6100,aa,94,76
-@:maincpu,program,60b8,03,50,00
-@:maincpu,program,7641,01,00,00
-@:maincpu,program,7621,01,00,00
-@:maincpu,program,7601,01,07,07
-@:maincpu,program,75e1,01,06,06
-@:maincpu,program,75c1,01,05,05
-@:maincpu,program,75a1,01,00,00
-
-
herodk:
herodku:
@:maincpu,program,3c44,50,00,00
@@ -5953,13 +5972,31 @@ galaxiac:
;@s:galaxian.cpp
-;(omega)
-omega:
-omegaa:
-omegab:
-theend:
-theends:
-@:maincpu,program,c060,4d,00,20
+;mooncmw:******Moon War (Moon Cresta bootleg)
+eagle:
+eagle2:
+eagle3:
+fantazia:
+mooncmw:
+mooncptc:
+mooncreg:
+mooncrs2:
+mooncrs3:
+mooncrs4:
+mooncrs5:
+mooncrsb:
+mooncrsl:
+mooncrst:
+mooncrstu:
+mooncrstuk:
+mooncrstuku:
+smooncrs:
+spcdrag:
+spcdraga:
+sstarcrs:
+starfgmc:
+stera:
+@:maincpu,program,8042,54,00,24
;amidar:[Special thanks to Cananas for enhancing this entry]
@@ -5972,6 +6009,7 @@ amigo:
amigo2:
scobra:
scobrab:
+scobrae2:
scobrag:
scobraggi:
scobras:
@@ -5980,6 +6018,15 @@ scobrase:
@:maincpu,program,80a8,03,00,01
+;(omega)
+omega:
+omegaa:
+omegab:
+theend:
+theends:
+@:maincpu,program,c060,4d,00,20
+
+
;(zero time)
asideral:
astrians:
@@ -6229,32 +6276,6 @@ moonqsr:
@:maincpu,program,804e,30,00,9f
-;mooncmw:******Moon War (Moon Cresta bootleg)
-eagle:
-eagle2:
-eagle3:
-fantazia:
-mooncmw:
-mooncptc:
-mooncreg:
-mooncrs2:
-mooncrs3:
-mooncrs4:
-mooncrsb:
-mooncrsl:
-mooncrst:
-mooncrstu:
-mooncrstuk:
-mooncrstuku:
-smooncrs:
-spcdrag:
-spcdraga:
-sstarcrs:
-starfgmc:
-stera:
-@:maincpu,program,8042,54,00,24
-
-
;frogf:******Frogger (Falcon bootleg)
frogf:
@:maincpu,program,83f0,c,04,05
@@ -6795,6 +6816,12 @@ homo:
;@s:gottlieb.cpp
+;*** daily scores saved, others saved in nvram !!! Don't Reset game (F3) !!! ***
+krull:
+@:maincpu,program,b3d,103,7f,00
+@delay=4
+
+
reactor:
@:maincpu,program,04d8,80,0a,00
@:maincpu,program,05bc,80,12,00
@@ -7691,8 +7718,8 @@ lemmings:
;******lethal enforcers (us ver uae)
lethalen:
-lethalenub:
lethalenead:
+lethalenub:
@:maincpu,program,3390,50,41,00
@:maincpu,program,33de,1,70,70
@@ -7898,6 +7925,12 @@ vs10yardu:
;@s:m62.cpp
+kidnikib:
+yanchamr:
+@:maincpu,program,e062,6e,00,20
+@:maincpu,program,e02b,3,00,00
+
+
;*******horizon(By Firebrand)
horizon:
@:maincpu,program,e801,96,28,23
@@ -7910,11 +7943,6 @@ lithero:
@:maincpu,program,e02b,3,00,00
-yanchamr:
-@:maincpu,program,e062,6e,00,20
-@:maincpu,program,e02b,3,00,00
-
-
lotlot:
@:maincpu,program,e96b,226,02,00
@:maincpu,program,e956,3,02,17
@@ -8778,6 +8806,12 @@ metlfrzr:
;@s:metro.cpp
+;********Last Fortress - Toride (German)
+lastfortg:
+lastfortj:
+@:maincpu,program,c0db1a,0a,01,64
+
+
;(pang pomms)
pangpoms:
pangpomsm:
@@ -8845,11 +8879,6 @@ vmetaln:
@:maincpu,program,ff000e,53,00,49
-;********Last Fortress - Toride (German)
-lastfortg:
-@:maincpu,program,c0db1a,0a,01,64
-
-
;(pururun)
pururun:
@:maincpu,program,80f2b8,4b,00,85
@@ -9546,6 +9575,17 @@ ncv1j2:
;@s:namcos1.cpp
+;*******boxy boy (us) & souko ban deluxe (japan)
+;** do not use in game reset (f3) or save fails !! **
+;** saves hi-score and hiscore table - not step records **
+boxyboy:
+boxyboya:
+soukobdx:
+@:maincpu,program,22d,3,00,00
+@:maincpu,program,255,2c,09,00
+@:maincpu,program,500f,1,03,03
+
+
;***** blastoff experimental @delay entry *******
;@:maincpu,program,400e,1,fe,fe ;**origional timer code **
blastoff:
@@ -9568,16 +9608,6 @@ pacmaniao:
@:subcpu,program,61c,4,00,00
-;*******boxy boy (us) & souko ban deluxe (japan)
-;** do not use in game reset (f3) or save fails !! **
-;** saves hi-score and hiscore table - not step records **
-boxyboy:
-soukobdx:
-@:maincpu,program,22d,3,00,00
-@:maincpu,program,255,2c,09,00
-@:maincpu,program,500f,1,03,03
-
-
;(beraboh man (japan version c)) and clones (by GeoMan)
berabohm:
berabohmb:
@@ -9930,6 +9960,13 @@ pairsten:
;@s:nemesis.cpp
+gradius:
+gradiusb:
+@:maincpu,program,195f0,8c,00,00
+@:maincpu,program,70098,4,00,00
+@:maincpu,program,7009a,1,73,73
+
+
citybomb:
citybombj:
@:maincpu,program,80700,50,00,22
@@ -9948,12 +9985,6 @@ twinbee:
@:maincpu,program,1eba0,4,00,00
-gradius:
-@:maincpu,program,195f0,8c,00,00
-@:maincpu,program,70098,4,00,00
-@:maincpu,program,7009a,1,73,73
-
-
konamigt:
@:maincpu,program,60105,1,00,00
@:maincpu,program,60106,2,10,00
@@ -10206,6 +10237,14 @@ pclubysa:
;@s:nmk16.cpp
+;(gunnail)
+gunnail:
+gunnailb:
+@:maincpu,program,faf00,6e,00,49
+@:maincpu,program,fa800,78,00,55
+@:maincpu,program,fe004,f93,00,50
+
+
;(stagger i (japan)) (by GeoMan)
;(sen jin - guardian storm (korea)) (by GeoMan)
grdnstrm:
@@ -10331,13 +10370,6 @@ vandykejal2:
@:maincpu,program,f00d1,3,00,00
-;(gunnail)
-gunnail:
-@:maincpu,program,faf00,6e,00,49
-@:maincpu,program,fa800,78,00,55
-@:maincpu,program,fe004,f93,00,50
-
-
;airattcka:******Air Attack (set 2)
airattck:
airattcka:
@@ -10582,13 +10614,6 @@ paclandm2:
;@s:pacman.cpp
-;******Crush Roller (Kural TWT)
-crush4:
-crush5:
-@:maincpu,program,4c80,3,00,00
-@:maincpu,program,4c83,1,04,04
-
-
;*** puckman/pacman (and clones) for pacmame & regular mame builds **
;abscam:******Abscam
;mspacmbe:******Ms. Pac-Man (bootleg, (encrypted))
@@ -10649,6 +10674,7 @@ mspacmanbco:
mspacmanbg:
mspacmanbg2:
mspacmanbgd:
+mspacmanbi:
mspacmancr:
mspacmat:
mspacmbe:
@@ -10684,6 +10710,13 @@ titanpac:
@:maincpu,program,43d1,01,48,48
+;******Crush Roller (Kural TWT)
+crush4:
+crush5:
+@:maincpu,program,4c80,3,00,00
+@:maincpu,program,4c83,1,04,04
+
+
mspacmanbhe:
@:maincpu,program,4e88,04,00,00
@:maincpu,program,43ed,06,40,40
@@ -11830,15 +11863,29 @@ demoneye:
;@s:redclash.cpp
-redclash:
-redclasha:
+redclasht:
+redclashta:
@:maincpu,program,6023,4,00,00
@:maincpu,program,6320,6,23,1d
+@:maincpu,program,41bd,01,00,00
+@:maincpu,program,41dd,01,00,00
+@:maincpu,program,41fd,01,06,06
+@:maincpu,program,421d,01,01,01
+@:maincpu,program,423d,01,01,01
+@:maincpu,program,425d,01,01,01
+@delay=2.5
-redclashk:
+redclash:
+redclashs:
@:maincpu,program,6023,4,00,00
@:maincpu,program,6320,6,1a,1e
+@:maincpu,program,41bd,01,00,00
+@:maincpu,program,41dd,01,00,00
+@:maincpu,program,41fd,01,06,06
+@:maincpu,program,421d,01,01,01
+@:maincpu,program,423d,01,01,01
+@:maincpu,program,425d,01,01,01
;ZeroHour (by GeoMan)
@@ -13180,6 +13227,12 @@ starforce:
;@s:seta.cpp
+thunderl:
+thunderlbl:
+thunderlbl2:
+@:maincpu,program,ffe108,cc,00,41
+
+
msgundamb:
@:maincpu,program,20424f,63,01,10
@@ -13350,11 +13403,6 @@ metafox:
@:maincpu,program,f014e6,8c,00,14
-thunderl:
-thunderlbl:
-@:maincpu,program,ffe108,cc,00,41
-
-
;******pairs love:
pairlove:
@:maincpu,program,f00748,63,00,2d
@@ -15248,6 +15296,11 @@ megablstu:
;@s:taito_f3.cpp
+gunlocko:
+@:maincpu,program,40eff0,40,41,00
+@:maincpu,program,4022f6,4,01,00
+
+
;(landmaker (japan))
landmakr:
landmakrj:
@@ -17124,6 +17177,11 @@ upscope:
;@s:vamphalf.cpp
+mrdig:
+@:maincpu,program,13d29e,145e,47,50
+@:maincpu,program,13e6fb,1,50,50
+
+
poosho:
@:maincpu,program,ae148,60,00,00
@:maincpu,program,ae1af,01,1d,1d
@@ -17138,11 +17196,6 @@ aoh:
@:maincpu,program,28e784,f8,4b,01
-mrdig:
-@:maincpu,program,13d29e,145e,41,50
-@:maincpu,program,13e6e8,1,57,57
-
-
jmpbreak:
@:maincpu,program,95098,5f,00,67
@@ -17236,6 +17289,14 @@ vendettaz:
;@s:vicdual.cpp
+;carnival:*note* resetting corrupts the screen not the file
+carnival:
+carnivalb:
+carnivalc:
+@:maincpu,program,e397,3c,00,00
+@:maincpu,program,e5a2,9,20,20
+
+
;******n-sub (upright)
nsub:
@:maincpu,program,8397,2,00,00
@@ -17319,13 +17380,6 @@ alphaho:
@:maincpu,program,e4cb,c,00,00
-;carnival:*note* resetting corrupts the screen not the file
-carnival:
-carnivalc:
-@:maincpu,program,e397,3c,00,00
-@:maincpu,program,e5a2,9,20,20
-
-
startrks:
@:maincpu,program,d78a,5,30,30
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 2a3049e20d1..9020ab3996c 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -3060,7 +3060,9 @@ files {
MAME_DIR .. "src/mame/drivers/saitek_cp2000.cpp",
MAME_DIR .. "src/mame/drivers/saitek_delta1.cpp",
MAME_DIR .. "src/mame/drivers/saitek_risc2500.cpp",
+ MAME_DIR .. "src/mame/includes/saitek_stratos.h",
MAME_DIR .. "src/mame/drivers/saitek_stratos.cpp",
+ MAME_DIR .. "src/mame/drivers/saitek_corona.cpp", -- subdriver of saitek_stratos
}
createMESSProjects(_target, _subtarget, "samcoupe")
diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp
index 3136d991593..c4d1bd311c1 100644
--- a/src/devices/bus/cbmiec/fd2000.cpp
+++ b/src/devices/bus/cbmiec/fd2000.cpp
@@ -239,7 +239,7 @@ void fd4000_device::device_add_mconfig(machine_config &config)
add_common_devices(config);
m_maincpu->set_addrmap(AS_PROGRAM, &fd4000_device::fd4000_mem);
PC8477A(config, m_fdc, 24_MHz_XTAL);
- FLOPPY_CONNECTOR(config, PC8477AV1_TAG":0", fd4000_floppies, "35hd", floppy_image_device::default_floppy_formats, true);//fd2000_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, PC8477AV1_TAG":0", fd4000_floppies, "35ed", floppy_image_device::default_floppy_formats, true);//fd2000_device::floppy_formats);
}
diff --git a/src/emu/natkeyboard.cpp b/src/emu/natkeyboard.cpp
index 9a50109eb6f..17782815d22 100644
--- a/src/emu/natkeyboard.cpp
+++ b/src/emu/natkeyboard.cpp
@@ -486,6 +486,13 @@ void natural_keyboard::post_utf8(const char *text, size_t length, const attotime
}
+void natural_keyboard::post_utf8(const std::string &text, const attotime &rate)
+{
+ if (!text.empty())
+ post_utf8(text.c_str(), text.size(), rate);
+}
+
+
//-------------------------------------------------
// post_coded - post a coded string
//-------------------------------------------------
@@ -564,6 +571,34 @@ void natural_keyboard::post_coded(const char *text, size_t length, const attotim
}
+void natural_keyboard::post_coded(const std::string &text, const attotime &rate)
+{
+ if (!text.empty())
+ post_coded(text.c_str(), text.size(), rate);
+}
+
+
+//-------------------------------------------------
+// paste - does a paste from the keyboard
+//-------------------------------------------------
+
+void natural_keyboard::paste()
+{
+ // retrieve the clipboard text
+ char *text = osd_get_clipboard_text();
+
+ // was a result returned?
+ if (text != nullptr)
+ {
+ // post the text
+ post_utf8(text);
+
+ // free the string
+ free(text);
+ }
+}
+
+
//-------------------------------------------------
// build_codes - given an input port table, create
// an input code table useful for mapping unicode
diff --git a/src/emu/natkeyboard.h b/src/emu/natkeyboard.h
index aa29bf4503c..fa3df156285 100644
--- a/src/emu/natkeyboard.h
+++ b/src/emu/natkeyboard.h
@@ -53,7 +53,10 @@ public:
void post(char32_t ch);
void post(const char32_t *text, size_t length = 0, const attotime &rate = attotime::zero);
void post_utf8(const char *text, size_t length = 0, const attotime &rate = attotime::zero);
+ void post_utf8(const std::string &text, const attotime &rate = attotime::zero);
void post_coded(const char *text, size_t length = 0, const attotime &rate = attotime::zero);
+ void post_coded(const std::string &text, const attotime &rate = attotime::zero);
+ void paste();
// debugging
void dump(std::ostream &str) const;
diff --git a/src/emu/video.cpp b/src/emu/video.cpp
index c4ade5f7948..2c1617e4fb2 100644
--- a/src/emu/video.cpp
+++ b/src/emu/video.cpp
@@ -788,7 +788,7 @@ inline bool video_manager::effective_autoframeskip() const
// forward
//-------------------------------------------------
-inline int video_manager::effective_frameskip() const
+int video_manager::effective_frameskip() const
{
// if we're fast forwarding, use the maximum frameskip
if (m_fastforward)
diff --git a/src/emu/video.h b/src/emu/video.h
index a5f76fa81f1..aa5390fd579 100644
--- a/src/emu/video.h
+++ b/src/emu/video.h
@@ -83,6 +83,7 @@ public:
// current speed helpers
std::string speed_text();
double speed_percent() const { return m_speed_percent; }
+ int effective_frameskip() const;
// snapshots
void save_snapshot(screen_device *screen, emu_file &file);
@@ -117,7 +118,6 @@ private:
// effective value helpers
bool effective_autoframeskip() const;
- int effective_frameskip() const;
bool effective_throttle() const;
// speed and throttling helpers
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index 9a374f66095..1a9e5c1a389 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -1671,6 +1671,7 @@ void lua_engine::initialize()
sol().registry().new_usertype<ioport_manager>("ioport", "new", sol::no_constructor,
"count_players", &ioport_manager::count_players,
+ "natkeyboard", &ioport_manager::natkeyboard,
"ports", sol::property([this](ioport_manager &im) {
sol::table port_table = sol().create_table();
for (auto &port : im.ports())
@@ -1678,6 +1679,23 @@ void lua_engine::initialize()
return port_table;
}));
+/* natkeyboard library
+ *
+ * manager:machine():ioport():natkeyboard()
+ *
+ * natkeyboard.empty - is the natural keyboard buffer empty?
+ * natkeyboard.in_use - is the natural keyboard in use?
+ * natkeyboard:paste() - paste clipboard data
+ * natkeyboard:post() - post data to natural keyboard
+ * natkeyboard:post_coded() - post data to natural keyboard
+ */
+
+ sol().registry().new_usertype<natural_keyboard>("natkeyboard", "new", sol::no_constructor,
+ "empty", sol::property(&natural_keyboard::empty),
+ "in_use", sol::property(&natural_keyboard::in_use, &natural_keyboard::set_in_use),
+ "paste", &natural_keyboard::paste,
+ "post", [](natural_keyboard &nat, const std::string &text) { nat.post_utf8(text); },
+ "post_coded", [](natural_keyboard &nat, const std::string &text) { nat.post_coded(text); });
/* ioport_port library
*
@@ -1850,6 +1868,7 @@ void lua_engine::initialize()
"skip_this_frame", &video_manager::skip_this_frame,
"speed_factor", &video_manager::speed_factor,
"speed_percent", &video_manager::speed_percent,
+ "effective_frameskip", &video_manager::effective_frameskip,
"frame_update", &video_manager::frame_update,
"size", [](video_manager &vm) {
s32 width, height;
diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp
index a0b55307dc6..20badec3162 100644
--- a/src/frontend/mame/ui/ui.cpp
+++ b/src/frontend/mame/ui/ui.cpp
@@ -915,27 +915,6 @@ bool mame_ui_manager::can_paste()
//-------------------------------------------------
-// paste - does a paste from the keyboard
-//-------------------------------------------------
-
-void mame_ui_manager::paste()
-{
- // retrieve the clipboard text
- char *text = osd_get_clipboard_text();
-
- // was a result returned?
- if (text != nullptr)
- {
- // post the text
- machine().ioport().natkeyboard().post_utf8(text);
-
- // free the string
- free(text);
- }
-}
-
-
-//-------------------------------------------------
// draw_fps_counter
//-------------------------------------------------
@@ -1115,7 +1094,7 @@ uint32_t mame_ui_manager::handler_ingame(render_container &container)
{
// paste command
if (machine().ui_input().pressed(IPT_UI_PASTE))
- paste();
+ machine().ioport().natkeyboard().paste();
}
image_handler_ingame();
diff --git a/src/frontend/mame/ui/ui.h b/src/frontend/mame/ui/ui.h
index 9f37485e260..6367fa5a54f 100644
--- a/src/frontend/mame/ui/ui.h
+++ b/src/frontend/mame/ui/ui.h
@@ -203,7 +203,6 @@ public:
void show_mouse(bool status);
virtual bool is_menu_active() override;
bool can_paste();
- void paste();
void image_handler_ingame();
void increase_frameskip();
void decrease_frameskip();
diff --git a/src/mame/drivers/expro02.cpp b/src/mame/drivers/expro02.cpp
index 52811f73571..e0a14fbeb59 100644
--- a/src/mame/drivers/expro02.cpp
+++ b/src/mame/drivers/expro02.cpp
@@ -1785,24 +1785,46 @@ ROM_START( zipzap )
ROM_LOAD16_BYTE( "ud17.bin", 0x000001, 0x40000, BAD_DUMP CRC(2901fae1) SHA1(0d6ca6d48c5586c05f3c02aee51a95da38b3751f) )
ROM_LOAD16_BYTE( "ue17.bin", 0x000000, 0x40000, BAD_DUMP CRC(da6c3fc8) SHA1(4bc01bc6f62553f6ac4f7252f7d9bf0d639f6935) )
/* gfx bitmaps */
+ ROM_LOAD16_BYTE( "937.bin", 0x100000, 0x80000, CRC(61dd653f) SHA1(68b5ae3423363cc64d933836bf6881431dad021a) ) // good, girls
+ ROM_LOAD16_BYTE( "941.bin", 0x100001, 0x80000, CRC(320321ed) SHA1(00b52cd34cd86c105ff6dbd0248ff239de31c851) )
+ ROM_LOAD16_BYTE( "936.bin", 0x200000, 0x80000, CRC(596543cc) SHA1(10a0eab4ca4a8749f1703ff6fcc80d731d07d087) ) // good, girls
+ ROM_LOAD16_BYTE( "940.bin", 0x200001, 0x80000, CRC(0c9dfb53) SHA1(541bd8c79408b7415713b517eacdd565d0ac5cb8) )
+ ROM_LOAD16_BYTE( "934.bin", 0x300000, 0x80000, CRC(1e65988a) SHA1(64d6f8cbdb28755515d9bbf52f589ce1176fed58) ) // good, girls
+ ROM_LOAD16_BYTE( "939.bin", 0x300001, 0x80000, CRC(8790a6a3) SHA1(94f39e48b75144cab191e2de4284c28d18b8f1c7) )
ROM_LOAD16_BYTE( "938.bin", 0x400000, 0x80000, CRC(61c06b60) SHA1(b3abae020009a48b99862766e0981e1118159a47) ) // good title background
ROM_LOAD16_BYTE( "942.bin", 0x400001, 0x80000, CRC(282413b8) SHA1(e2ecaaa3c5b2355eadc016b73d7d658f25e1e0db) ) // (and corrupt gfx on select mode screen)
- ROM_LOAD16_BYTE( "934.bin", 0x300000, 0x80000, CRC(1e65988a) SHA1(64d6f8cbdb28755515d9bbf52f589ce1176fed58) ) // good, girls
- ROM_LOAD16_BYTE( "939.bin", 0x300001, 0x80000, CRC(8790a6a3) SHA1(94f39e48b75144cab191e2de4284c28d18b8f1c7))
+ ROM_REGION( 0x100000, "kan_spr", 0 ) // sprites
+ ROM_LOAD( "u5.bin", 0x000000, 0x80000, CRC(c274d8b5) SHA1(2c45961aaf8311f027a734df7e33fe085dfdd099) )
- ROM_LOAD16_BYTE( "936.bin", 0x200000, 0x80000, CRC(596543cc) SHA1(10a0eab4ca4a8749f1703ff6fcc80d731d07d087) ) // good, girls
- ROM_LOAD16_BYTE( "940.bin", 0x200001, 0x80000, CRC(0c9dfb53) SHA1(541bd8c79408b7415713b517eacdd565d0ac5cb8) )
+ ROM_REGION( 0x100000, "oki", 0 ) /* Samples */
+ ROM_LOAD( "snd.bin", 0x00000, 0x80000, CRC(bc20423e) SHA1(1f4bd52ec4f9b3b3e6b10ac2b3afaadf76a2c7c9) ) // Missing a sound ROM??
+ ROM_RELOAD( 0x80000, 0x80000 )
+ROM_END
- ROM_LOAD16_BYTE( "937.bin", 0x100000, 0x80000, CRC(61dd653f) SHA1(68b5ae3423363cc64d933836bf6881431dad021a) ) // good, girls
- ROM_LOAD16_BYTE( "941.bin", 0x100001, 0x80000, CRC(320321ed) SHA1(00b52cd34cd86c105ff6dbd0248ff239de31c851) )
+ROM_START( zipzapa )
+ ROM_REGION( 0x500000, "maincpu", 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "30.ud17", 0x000001, 0x20000, CRC(769ec252) SHA1(abb0e91036d0643146d81b652defb8f6fb0b5a58) )
+ ROM_LOAD16_BYTE( "31.ue17", 0x000000, 0x20000, CRC(e098ef98) SHA1(d08db27e4c6ae9a3f46c40d3c816c2efe23ac92b) )
+ /* gfx bitmaps */
+ ROM_LOAD16_BYTE( "37.rd2b", 0x100000, 0x80000, CRC(0b59d718) SHA1(9e7a9bff55396953f7ccfeb1d968e3e814cd3990) )
+ ROM_LOAD16_BYTE( "33.rd2a", 0x100001, 0x80000, CRC(df35c8f5) SHA1(69b7aeea9af03611bae12a899ece53068df62eec) )
+ ROM_LOAD16_BYTE( "38.rd3b", 0x200000, 0x80000, CRC(575dfc8c) SHA1(4400d5f0f6d63bfc10894c28de3fe8aa83ee49a9) )
+ ROM_LOAD16_BYTE( "34.rd3a", 0x200001, 0x80000, CRC(f8bd156b) SHA1(6c95c597898b0dca1b3ccece0e46d67333fdc6ea) )
+ ROM_LOAD16_BYTE( "39", 0x300000, 0x80000, CRC(302375c0) SHA1(1618bafab0bec265db9f2414f65fef7e3467e13c) )
+ ROM_LOAD16_BYTE( "35", 0x300001, 0x80000, CRC(9b6409a6) SHA1(aa0c38a149bd33e287f2ada5960429352bd63a23) )
+ ROM_LOAD16_BYTE( "36.rd1b", 0x400000, 0x80000, CRC(f3256bbb) SHA1(0ca9a02f1824b72fc903bc78d83392297b076094) )
+ ROM_LOAD16_BYTE( "32.rd1a", 0x400001, 0x80000, CRC(1dd511a9) SHA1(c8c96ad9e56e1990bdaee5ba8e1942c1de180ef2) )
ROM_REGION( 0x100000, "kan_spr", 0 ) // sprites
- ROM_LOAD( "u5.bin", 0x000000, 0x80000, CRC(c274d8b5) SHA1(2c45961aaf8311f027a734df7e33fe085dfdd099) )
+ ROM_LOAD( "40.u5", 0x000000, 0x80000, CRC(c274d8b5) SHA1(2c45961aaf8311f027a734df7e33fe085dfdd099) ) // == u5.bin above
ROM_REGION( 0x100000, "oki", 0 ) /* Samples */
- ROM_LOAD( "snd.bin", 0x00000, 0x80000, CRC(bc20423e) SHA1(1f4bd52ec4f9b3b3e6b10ac2b3afaadf76a2c7c9) )
- ROM_RELOAD( 0x80000, 0x80000 )
+ ROM_LOAD( "29.ub6", 0x00000, 0x20000, CRC(2cf3b8ea) SHA1(84a306a1afdc04c9828e5fbda2c050183d9006a3) ) // Correct loading??
+ ROM_RELOAD( 0x20000, 0x20000 )
+ ROM_RELOAD( 0x40000, 0x20000 )
+ ROM_RELOAD( 0x60000, 0x20000 )
+ ROM_LOAD( "28.uc6", 0x80000, 0x80000, CRC(e5d026c7) SHA1(7e011d14ec8da493250ec7506909417e64690e73) ) // bad dump or loading / banking issue??
ROM_END
@@ -1888,4 +1910,5 @@ GAME( 1996, pgalvip, 0, galhustl, galhustl, expro02_state, empty_init,
GAME( 1997, pgalvipa, pgalvip, galhustl, galhustl, expro02_state, empty_init, ROT0, "<unknown>", "Pocket Gals V.I.P (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1997, galhustl, pgalvip, galhustl, galhustl, expro02_state, empty_init, ROT0, "ACE International", "Gals Hustler", MACHINE_SUPPORTS_SAVE ) // hack of the above?
-GAME( 1995, zipzap, 0, zipzap, zipzap, expro02_state, empty_init, ROT90, "Barko Corp", "Zip & Zap", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1995, zipzap, 0, zipzap, zipzap, expro02_state, empty_init, ROT90, "Barko Corp", "Zip & Zap (Explicit)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // "A" nudity level
+GAME( 1995, zipzapa, zipzap, zipzap, zipzap, expro02_state, empty_init, ROT90, "Barko Corp", "Zip & Zap (Less Explicit)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // "B" nudity level
diff --git a/src/mame/drivers/falco5220.cpp b/src/mame/drivers/falco5220.cpp
index a90fa022edd..d94a872ef7b 100644
--- a/src/mame/drivers/falco5220.cpp
+++ b/src/mame/drivers/falco5220.cpp
@@ -27,9 +27,11 @@
#include "emu.h"
//#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
+#include "machine/bankdev.h"
#include "machine/nvram.h"
#include "machine/z80ctc.h"
#include "machine/z80sio.h"
+#include "emupal.h"
#include "screen.h"
class falco5220_state : public driver_device
@@ -38,8 +40,12 @@ public:
falco5220_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_rambank(*this, "rambank")
, m_screen(*this, "screen")
, m_rombank(*this, "rombank")
+ , m_ram(*this, "ram")
+ , m_charram(*this, "charram")
+ , m_5a(0)
{
}
@@ -53,40 +59,94 @@ private:
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void rombank_w(u8 data);
+ void rambank_w(u8 data);
+ void unk5a_w(u8 data);
void mem_map(address_map &map);
+ void bank_map(address_map &map);
void io_map(address_map &map);
required_device<z80_device> m_maincpu;
+ required_device<address_map_bank_device> m_rambank;
required_device<screen_device> m_screen;
-
required_memory_bank m_rombank;
- //required_shared_ptr<u8> m_cram; // 1x or 2x NEC D43256C-10L
- //required_shared_ptr<u8> m_aram; // 1x or 2x NEC D43256C-10L
+ required_shared_ptr<u8> m_ram;
+ required_shared_ptr<u8> m_charram;
+
+ u8 m_5a;
};
u32 falco5220_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
+ offs_t start = m_5a ? 0x0000 : 0x2000;
+
+ for (int col = 0; col < 25; col++)
+ {
+ for (int row = 0; row < 80; row++)
+ {
+ u8 code = m_ram[start + col * 80 + row];
+ u8 attr = m_ram[start + 0x1000 + col * 80 + row];
+
+ for (int y = 0; y < 16; y++)
+ {
+ u8 gfx = m_charram[code << 4 | y];
+
+ // underline
+ if (BIT(attr, 0) && y == 15)
+ gfx = 0xff;
+
+ for (int x = 0; x < 8; x++)
+ bitmap.pix32(col*16 + y, row*8 + x) = BIT(gfx, x) ? rgb_t::white() : rgb_t::black();
+ }
+ }
+ }
+
return 0;
}
+void falco5220_state::rambank_w(u8 data)
+{
+ if (data < 9)
+ m_rambank->set_bank(data);
+ else
+ logerror("rambank_w: %02x\n", data);
+}
+
void falco5220_state::rombank_w(u8 data)
{
m_rombank->set_entry(data & 3);
}
+void falco5220_state::unk5a_w(u8 data)
+{
+ logerror("5a = %02x\n", data);
+ m_5a = data;
+}
+
void falco5220_state::mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("roms", 0);
map(0x8000, 0xbfff).bankr("rombank");
map(0xc000, 0xdfff).ram().share("nvram");
- map(0xe000, 0xffff).ram();
+ map(0xe000, 0xffff).m(m_rambank, FUNC(address_map_bank_device::amap8));
+}
+
+void falco5220_state::bank_map(address_map &map)
+{
+ map(0x00000, 0x0ffff).ram().share("ram"); // 2x NEC D43256C-10L? (5220s only has 2x HY6264P-10)
+ map(0x10000, 0x11fff).ram().share("charram"); // CXK5864AP-10L / HY6264LP-12?
}
void falco5220_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).w(FUNC(falco5220_state::rombank_w));
+// map(0x50, 0x50).r // keyboard data
+// map(0x51, 0x51).r // keyboard status
+ map(0x52, 0x52).w(FUNC(falco5220_state::rambank_w));
+// map(0x54, 0x54).w // vram address (low)?
+// map(0x55, 0x55).w // vram address (high)?
+ map(0x5a, 0x5a).w(FUNC(falco5220_state::unk5a_w)); // 5220s only?
map(0x60, 0x63).rw("sio", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
map(0x70, 0x73).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x88, 0x8b).nopw(); // second SIO?
@@ -101,11 +161,27 @@ void falco5220_state::machine_start()
void falco5220_state::machine_reset()
{
m_rombank->set_entry(0);
+ m_rambank->set_bank(0);
}
static INPUT_PORTS_START(falco5220)
INPUT_PORTS_END
+static const gfx_layout char_layout =
+{
+ 8,16,
+ 512,
+ 1,
+ { 0 },
+ { 7, 6, 5, 4, 3, 2, 1, 0 },
+ { STEP16(0, 8) },
+ 8*16
+};
+
+static GFXDECODE_START(chars)
+ GFXDECODE_RAM("charram", 0, char_layout, 0, 1)
+GFXDECODE_END
+
static const z80_daisy_config daisy_chain[] =
{
{ "ctc" },
@@ -120,6 +196,12 @@ void falco5220_state::falco5220(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &falco5220_state::io_map);
m_maincpu->set_daisy_config(daisy_chain);
+ ADDRESS_MAP_BANK(config, m_rambank);
+ m_rambank->set_map(&falco5220_state::bank_map);
+ m_rambank->set_data_width(8);
+ m_rambank->set_addr_width(17);
+ m_rambank->set_stride(0x2000);
+
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // CXK5864AP-10L + battery
z80ctc_device &ctc(Z80CTC(config, "ctc", 12.288_MHz_XTAL / 2)); // Z0843006PSC
@@ -131,8 +213,13 @@ void falco5220_state::falco5220(machine_config &config)
sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_color(rgb_t::amber());
screen.set_raw(37.98_MHz_XTAL, 1500, 0, 1320, 422, 0, 400); // 25.32 kHz/60 Hz confirmed
screen.set_screen_update(FUNC(falco5220_state::screen_update));
+
+ PALETTE(config, "palette", palette_device::MONOCHROME_HIGHLIGHT);
+
+ GFXDECODE(config, "gfxdecode", "palette", chars);
}
ROM_START(falco5220e)
diff --git a/src/mame/drivers/lucky37.cpp b/src/mame/drivers/lucky37.cpp
index f803972b8ed..a4b7ba0dd8e 100644
--- a/src/mame/drivers/lucky37.cpp
+++ b/src/mame/drivers/lucky37.cpp
@@ -2,7 +2,7 @@
// copyright-holders:
/*
- This hardware seems to be an evolution of the one found in lucky37.cpp. Its main components are:
+ This hardware seems to be an evolution of the one found in lucky74.cpp. Its main components are:
* A001 CPU block, containing probably a Z80 or compatible CPU and ROM(s) (not dumped).
Dumper description after opening it: 3 unknown/white chips, which had no pins, with no markings.
* HD647180X0P6 MCU with internal ROM (not dumped)
@@ -130,7 +130,7 @@ ROM_START( lucky21 )
ROM_REGION( 0x8000, "mcu", 0 )
ROM_LOAD( "internal_rom", 0x0000, 0x8000, NO_DUMP )
- ROM_REGION( 0xc0000, "unsorted", 0 )
+ ROM_REGION( 0xc0000, "unsorted", 0 ) // no ROM 6 present
ROM_LOAD( "1.bin", 0x00000, 0x20000, CRC(2198b736) SHA1(556fd89dc9d1183a672324b7e1bb6350331459d2) )
ROM_LOAD( "2.bin", 0x20000, 0x20000, CRC(fe7bbfef) SHA1(5b1413d26049e4e5c04e05a71f552d2999d57ed5) )
ROM_LOAD( "3.bin", 0x40000, 0x20000, CRC(c4c3f642) SHA1(4dba751f74717e4ef158f21c3e2a1b2d4802bb51) )
diff --git a/src/mame/drivers/saitek_corona.cpp b/src/mame/drivers/saitek_corona.cpp
new file mode 100644
index 00000000000..32cc8f1a2fe
--- /dev/null
+++ b/src/mame/drivers/saitek_corona.cpp
@@ -0,0 +1,156 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+Saitek Corona. This is a subclass of saitek_corona_state.
+Please refer to saitek_stratos.cpp for driver notes.
+
+To be brief, Saitek Corona has two "HELIOS" chips, I/O addressing is completely
+different compared to Stratos/Turbo King.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "includes/saitek_stratos.h"
+
+#include "cpu/m6502/m65c02.h"
+#include "machine/nvram.h"
+#include "machine/sensorboard.h"
+#include "sound/dac.h"
+#include "sound/volt_reg.h"
+
+#include "softlist.h"
+#include "speaker.h"
+
+// internal artwork
+#include "saitek_corona.lh" // clickable
+
+
+class corona_state : public saitek_stratos_state
+{
+public:
+ corona_state(const machine_config &mconfig, device_type type, const char *tag) :
+ saitek_stratos_state(mconfig, type, tag),
+ m_board(*this, "board"),
+ m_dac(*this, "dac")
+ { }
+
+ // machine drivers
+ void corona(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ // devices/pointers
+ required_device<sensorboard_device> m_board;
+ required_device<dac_bit_interface> m_dac;
+
+ void main_map(address_map &map);
+};
+
+void corona_state::machine_start()
+{
+ saitek_stratos_state::machine_start();
+}
+
+void corona_state::machine_reset()
+{
+ saitek_stratos_state::machine_reset();
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+// HELIOS
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void corona_state::main_map(address_map &map)
+{
+ map(0x0000, 0x1fff).ram();
+ map(0x8000, 0xffff).rom();
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( corona )
+ PORT_INCLUDE( saitek_stratos )
+
+ PORT_MODIFY("IN.6")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM)
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
+void corona_state::corona(machine_config &config)
+{
+ /* basic machine hardware */
+ M65C02(config, m_maincpu, 5_MHz_XTAL); // see set_cpu_freq
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map);
+ m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(100));
+
+ SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
+ m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
+ m_board->set_delay(attotime::from_msec(200));
+
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(2+4, 8+1);
+ config.set_default_layout(layout_saitek_corona);
+
+ TIMER(config, "lcd_busy").configure_generic(timer_device::expired_delegate());
+
+ /* sound hardware */
+ SPEAKER(config, "speaker").front_center();
+ DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
+ VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+
+ /* extension rom */
+ GENERIC_CARTSLOT(config, m_extrom, generic_plain_slot, "saitek_egr", "bin");
+ m_extrom->set_device_load(FUNC(corona_state::extrom_load), this);
+
+ SOFTWARE_LIST(config, "cart_list").set_original("saitek_egr");
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( corona )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("w2_708g_u2.u2", 0x0000, 0x8000, CRC(52568bb4) SHA1(83fe91787e17bbefc2b3ec651ddb11c88990060d) )
+ ROM_LOAD("bw2_708a_u3.u3", 0x8000, 0x8000, CRC(32848f73) SHA1(a447543e3eb4757f9afed26fde77b66985eb96a7) )
+ROM_END
+
+ROM_START( coronaa )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("w2_a14c_u2.u2", 0x0000, 0x8000, CRC(be82e199) SHA1(cfcc573774b6907ed137dca01fa7f3fce493a89f) )
+ ROM_LOAD("bw2_a14_u3.u3", 0x8000, 0x8000, CRC(abe87285) SHA1(b15f7ddeac78d252cf413ba4085523e44c6d15df) )
+ROM_END
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1988, corona, 0, 0, corona, corona, corona_state, empty_init, "Saitek", "Kasparov Corona (ver. D+)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Corona II
+CONS( 1988, coronaa, corona, 0, corona, corona, corona_state, empty_init, "Saitek", "Kasparov Corona (ver. D)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp
index 16544f69ae5..2d6ca005429 100644
--- a/src/mame/drivers/saitek_stratos.cpp
+++ b/src/mame/drivers/saitek_stratos.cpp
@@ -2,149 +2,188 @@
// copyright-holders:Olivier Galibert, hap
/***************************************************************************
-Scisys Kasparov Stratos Chess Computer
+SciSys/Saitek Stratos chesscomputer family (1986-1990)
+(SciSys renamed themselves to Saitek in 1987)
+
+- Stratos
+- Turbo King
+- Corona --> it's in saitek_corona.cpp
+- *Simultano
+
+*: not dumped yet
+
+IMPORTANT: The user is expected to press the STOP button to turn off the computer.
+When not using -autosave, press that button before exiting MAME, or NVRAM can get corrupt.
+If that happens, the chesscomputer will become unresponsive on next boot. To force a
+cold boot, press ACL, then hold the PLAY button and press GO.
+
+*******************************************************************************
+
+Hardware notes:
+- W65C02 or R65C02 at 5MHz or 5.67MHz (for latter, box says 6MHz but that's a marketing lie)
+- 2*32KB ROM + optional 32KB Endgame ROM sold separately
+- 8KB RAM + another 8KB RAM(latter not populated on every PCB)
+- NEC gate array for all I/O, Saitek calls it HELIOS
+- side leds are tri-color (red + green, combined = yellow)
+- unknown LCDC under epoxy blob, suspected to be an MCU
+
+Stratos/Turbo King are identical.
+Corona has magnet sensors and two HELIOS chips.
+Simultano has an extra LCD screen representing the chessboard state.
TODO:
- emulate LCD at lower level, probably an MCU with embedded LCDC
- add LCD 7*7 DMD, it's in m_lcd_data[0x30 to 0x3b] but scrambled
-- corona: different addressmap, 64 leds
- tking different internal artwork
-- interrupt timing is derived from the main XTAL, but result should be similar with 5MHz and 5.67MHz,
+- irq timing is derived from the main XTAL, but result should be similar with 5MHz and 5.67MHz,
there are a couple of "FREQ. SEL" nodes on the PCB, maybe related (not the ones in input ports)
+- tking(old revisions) and stratos slow responsive buttons, related to irq timing, but if that's changed,
+ the led blinking and in-game clock is too fast
- does nvram.u7 work? it's cleared during boot, but not used after
-- clean up driver
***************************************************************************/
#include "emu.h"
+#include "includes/saitek_stratos.h"
+
#include "cpu/m6502/m65c02.h"
#include "machine/nvram.h"
#include "machine/sensorboard.h"
-#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
-#include "video/pwm.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
#include "softlist.h"
#include "speaker.h"
-#include <algorithm>
-
// internal artwork
#include "saitek_stratos.lh" // clickable
-class stratos_state : public driver_device
+
+class stratos_state : public saitek_stratos_state
{
public:
stratos_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
+ saitek_stratos_state(mconfig, type, tag),
m_nvram(*this, "nvram.u7"),
m_rombank(*this, "rombank"),
m_nvrambank(*this, "nvrambank"),
- m_lcd_busy(*this, "lcd_busy"),
m_board(*this, "board"),
- m_display(*this, "display"),
- m_dac(*this, "dac"),
- m_extrom(*this, "extrom"),
- m_out_digit(*this, "digit%u", 0U),
- m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U),
- m_inputs(*this, "IN.%u", 0)
+ m_dac(*this, "dac")
{ }
+ // machine drivers
void stratos(machine_config &config);
- void corona(machine_config &config);
void tking2(machine_config &config);
- DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); }
- DECLARE_INPUT_CHANGED_MEMBER(acl_button) { if (newval) power_off(); }
- DECLARE_INPUT_CHANGED_MEMBER(go_button);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
private:
- DECLARE_WRITE8_MEMBER(p2000_w);
- DECLARE_READ8_MEMBER(p2200_r);
- DECLARE_WRITE8_MEMBER(p2200_w);
- DECLARE_WRITE8_MEMBER(p2400_w);
+ // devices/pointers
+ required_device<nvram_device> m_nvram;
+ required_memory_bank m_rombank;
+ required_memory_bank m_nvrambank;
+ required_device<sensorboard_device> m_board;
+ required_device<dac_bit_interface> m_dac;
+
+ void main_map(address_map &map);
+ void update_leds();
+
+ // I/O handlers
+ DECLARE_WRITE8_MEMBER(select_w);
+ DECLARE_READ8_MEMBER(chessboard_r);
+ DECLARE_WRITE8_MEMBER(sound_w);
+ DECLARE_WRITE8_MEMBER(leds_w);
DECLARE_READ8_MEMBER(control_r);
DECLARE_WRITE8_MEMBER(control_w);
DECLARE_READ8_MEMBER(lcd_r);
- DECLARE_WRITE8_MEMBER(lcd_w);
-
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load);
DECLARE_READ8_MEMBER(extrom_r);
- void main_map(address_map &map);
-
- void set_cpu_freq();
+ std::unique_ptr<u8[]> m_nvram_data;
- std::unique_ptr<uint8_t[]> m_nvram_data;
u8 m_select;
u8 m_control;
u8 m_led_data;
- bool m_power;
-
- u8 m_lcd_address;
- u8 m_lcd_count;
- u8 m_lcd_data[0x40];
-
- void update_leds();
- void update_lcd();
- void power_off();
- virtual void machine_reset() override;
- virtual void machine_start() override;
-
- required_device<m65c02_device> m_maincpu;
- required_device<nvram_device> m_nvram;
- required_memory_bank m_rombank;
- required_memory_bank m_nvrambank;
- required_device<timer_device> m_lcd_busy;
- required_device<sensorboard_device> m_board;
- required_device<pwm_display_device> m_display;
- required_device<dac_bit_interface> m_dac;
- required_device<generic_slot_device> m_extrom;
- output_finder<8+1> m_out_digit;
- output_finder<4, 16, 4> m_out_lcd;
- required_ioport_array<8+1> m_inputs;
};
+// saitek_stratos_state
-void stratos_state::machine_start()
+void saitek_stratos_state::machine_start()
{
// resolve handlers
m_out_digit.resolve();
m_out_lcd.resolve();
- m_nvram_data = std::make_unique<uint8_t[]>(0x2000);
- m_nvram->set_base(m_nvram_data.get(), 0x2000);
-
- m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x8000);
- m_nvrambank->configure_entries(0, 2, m_nvram_data.get(), 0x1000);
-
- m_control = 0x00;
- m_select = 0x00;
+ // zerofill
+ m_power = false;
+ m_lcd_count = 0;
+ m_lcd_address = 0;
+
+ // register for savestates
+ save_item(NAME(m_power));
+ save_item(NAME(m_lcd_count));
+ save_item(NAME(m_lcd_address));
+ save_item(NAME(m_lcd_data));
}
-void stratos_state::machine_reset()
+void saitek_stratos_state::machine_reset()
{
m_power = true;
+ m_lcd_count = 0;
+ clear_lcd();
+
set_cpu_freq();
- m_rombank->set_entry(0);
- m_nvrambank->set_entry(0);
}
-void stratos_state::set_cpu_freq()
+void saitek_stratos_state::set_cpu_freq()
{
+ // released with either 5MHz or 5.67MHz speeds
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 5.67_MHz_XTAL : 5_MHz_XTAL);
}
-void stratos_state::update_leds()
+// stratos_state
+
+void stratos_state::machine_start()
{
- m_display->matrix_partial(0, 2, 1 << (m_control >> 5 & 1), (~m_led_data & 0xff) | (~m_control << 6 & 0x100));
+ saitek_stratos_state::machine_start();
+
+ // init banks
+ m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x8000);
+
+ m_nvram_data = make_unique_clear<u8[]>(0x2000);
+ save_pointer(NAME(m_nvram_data), 0x2000);
+ m_nvram->set_base(m_nvram_data.get(), 0x2000);
+ m_nvrambank->configure_entries(0, 2, m_nvram_data.get(), 0x1000);
+
+ // zerofill
+ m_select = 0;
+ m_control = 0;
+ m_led_data = 0;
+
+ // register for savestates
+ save_item(NAME(m_select));
+ save_item(NAME(m_control));
+ save_item(NAME(m_led_data));
}
-INPUT_CHANGED_MEMBER(stratos_state::go_button)
+void stratos_state::machine_reset()
+{
+ saitek_stratos_state::machine_reset();
+
+ m_rombank->set_entry(0);
+ m_nvrambank->set_entry(0);
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+// soft power on/off
+
+INPUT_CHANGED_MEMBER(saitek_stratos_state::go_button)
{
if (newval && !m_power)
{
@@ -153,7 +192,21 @@ INPUT_CHANGED_MEMBER(stratos_state::go_button)
}
}
-DEVICE_IMAGE_LOAD_MEMBER(stratos_state::extrom_load)
+void saitek_stratos_state::power_off()
+{
+ m_power = false;
+ m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+
+ // clear display
+ m_display->matrix(0, 0);
+ clear_lcd();
+ update_lcd();
+}
+
+
+// Endgame ROM
+
+DEVICE_IMAGE_LOAD_MEMBER(saitek_stratos_state::extrom_load)
{
u32 size = m_extrom->common_get_size("rom");
@@ -177,26 +230,69 @@ READ8_MEMBER(stratos_state::extrom_r)
}
-WRITE8_MEMBER(stratos_state::p2000_w)
+// LCD HLE
+
+void saitek_stratos_state::update_lcd()
{
- // d0-d3: input/led mux
- // d4-d7: chessboard led data
- m_select = data;
- m_display->matrix_partial(2, 4, ~m_select >> 4 & 0xf, 1 << (m_select & 0xf));
+ // output individual segments
+ for (int i = 0; i < 0x40; i++)
+ for (int j = 0; j < 4; j++)
+ m_out_lcd[i >> 4][i & 0xf][j] = BIT(m_lcd_data[i], j);
+
+ m_out_digit[0] = 0; // where?
+
+ // upper digits
+ for (int i = 0; i < 4; i++)
+ m_out_digit[i + 1] = (m_lcd_data[0x01 + i * 2] << 4 | m_lcd_data[0x01 + i * 2 + 1]) & 0x7f;
+
+ // lower digits
+ for (int i = 0; i < 4; i++)
+ m_out_digit[i + 5] = (m_lcd_data[0x11 + i * 2] << 4 | m_lcd_data[0x11 + i * 2 + 1]) & 0x7f;
}
-READ8_MEMBER(stratos_state::p2200_r)
+void saitek_stratos_state::lcd_w(u8 data)
{
- // d0-d7: chessboard sensors
- return ~m_board->read_file(m_select & 0xf);
+ // d0-d3: lcd data
+ // d4-d7: unused?
+ data &= 0xf;
+
+ if (m_lcd_count == 0)
+ m_lcd_address = data;
+ else
+ {
+ // write to lcd row
+ if (m_lcd_address > 0 && m_lcd_address <= 4)
+ m_lcd_data[(((m_lcd_address - 1) << 4) + (m_lcd_count - 1)) & 0x3f] = data;
+ }
+
+ // it expects a specific number of writes for each row
+ const u8 maxcount[5] = { 1, 9, 9, 1, 12 };
+ if (m_lcd_address > 4 || m_lcd_count == maxcount[m_lcd_address])
+ {
+ m_lcd_count = 0;
+ update_lcd();
+ }
+ else
+ m_lcd_count++;
+
+ m_lcd_busy->adjust(attotime::from_usec(50)); // ?
}
-WRITE8_MEMBER(stratos_state::p2200_w)
+READ8_MEMBER(stratos_state::lcd_r)
{
- m_dac->write(1);
+ // unknown, maybe resets lcd controller
+ return 0;
}
-WRITE8_MEMBER(stratos_state::p2400_w)
+
+// HELIOS
+
+void stratos_state::update_leds()
+{
+ m_display->matrix_partial(0, 2, 1 << (m_control >> 5 & 1), (~m_led_data & 0xff) | (~m_control << 6 & 0x100));
+}
+
+WRITE8_MEMBER(stratos_state::leds_w)
{
// d0-d7: button leds data
m_led_data = data;
@@ -205,6 +301,25 @@ WRITE8_MEMBER(stratos_state::p2400_w)
m_dac->write(0); // guessed
}
+WRITE8_MEMBER(stratos_state::sound_w)
+{
+ m_dac->write(1);
+}
+
+WRITE8_MEMBER(stratos_state::select_w)
+{
+ // d0-d3: input/led mux
+ // d4-d7: chessboard led data
+ m_select = data;
+ m_display->matrix_partial(2, 4, ~m_select >> 4 & 0xf, 1 << (m_select & 0xf));
+}
+
+READ8_MEMBER(stratos_state::chessboard_r)
+{
+ // d0-d7: chessboard sensors
+ return ~m_board->read_file(m_select & 0xf);
+}
+
READ8_MEMBER(stratos_state::control_r)
{
u8 data = 0;
@@ -227,18 +342,6 @@ READ8_MEMBER(stratos_state::control_r)
return data;
}
-void stratos_state::power_off()
-{
- m_power = false;
- m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
-
- // clear display
- m_display->matrix(0, 0);
-
- std::fill_n(m_lcd_data, ARRAY_LENGTH(m_lcd_data), 0);
- update_lcd();
-}
-
WRITE8_MEMBER(stratos_state::control_w)
{
u8 prev = m_control;
@@ -259,64 +362,18 @@ WRITE8_MEMBER(stratos_state::control_w)
power_off();
}
-void stratos_state::update_lcd()
-{
- // output individual segments
- for (int i = 0; i < 0x40; i++)
- for (int j = 0; j < 4; j++)
- m_out_lcd[i >> 4][i & 0xf][j] = BIT(m_lcd_data[i], j);
- m_out_digit[0] = 0; // where?
- // upper digits
- for (int i = 0; i < 4; i++)
- m_out_digit[i + 1] = (m_lcd_data[0x01 + i * 2] << 4 | m_lcd_data[0x01 + i * 2 + 1]) & 0x7f;
-
- // lower digits
- for (int i = 0; i < 4; i++)
- m_out_digit[i + 5] = (m_lcd_data[0x11 + i * 2] << 4 | m_lcd_data[0x11 + i * 2 + 1]) & 0x7f;
-}
-
-READ8_MEMBER(stratos_state::lcd_r)
-{
- // unknown, maybe resets lcd controller
- return 0;
-}
-
-WRITE8_MEMBER(stratos_state::lcd_w)
-{
- // d0-d3: lcd data
- // d4-d7: unused?
- data &= 0xf;
-
- if (m_lcd_count == 0)
- m_lcd_address = data;
- else
- {
- // write to lcd row
- if (m_lcd_address > 0 && m_lcd_address <= 4)
- m_lcd_data[(((m_lcd_address - 1) << 4) + (m_lcd_count - 1)) & 0x3f] = data;
- }
-
- // it expects a specific number of writes for each row
- const u8 maxcount[5] = { 1, 9, 9, 1, 12 };
- if (m_lcd_address > 4 || m_lcd_count == maxcount[m_lcd_address])
- {
- m_lcd_count = 0;
- update_lcd();
- }
- else
- m_lcd_count++;
-
- m_lcd_busy->adjust(attotime::from_usec(50)); // ?
-}
+/******************************************************************************
+ Address Maps
+******************************************************************************/
void stratos_state::main_map(address_map &map)
{
map(0x0000, 0x1fff).ram().share("nvram.u6");
- map(0x2000, 0x2000).w(FUNC(stratos_state::p2000_w));
- map(0x2200, 0x2200).rw(FUNC(stratos_state::p2200_r), FUNC(stratos_state::p2200_w));
- map(0x2400, 0x2400).w(FUNC(stratos_state::p2400_w));
+ map(0x2000, 0x2000).w(FUNC(stratos_state::select_w));
+ map(0x2200, 0x2200).rw(FUNC(stratos_state::chessboard_r), FUNC(stratos_state::sound_w));
+ map(0x2400, 0x2400).w(FUNC(stratos_state::leds_w));
map(0x2600, 0x2600).rw(FUNC(stratos_state::control_r), FUNC(stratos_state::control_w));
map(0x2800, 0x37ff).bankrw("nvrambank");
map(0x3800, 0x3800).rw(FUNC(stratos_state::lcd_r), FUNC(stratos_state::lcd_w));
@@ -324,7 +381,13 @@ void stratos_state::main_map(address_map &map)
map(0x8000, 0xffff).bankr("rombank");
}
-static INPUT_PORTS_START( stratos )
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+INPUT_PORTS_START( saitek_stratos )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Set Up")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
@@ -346,7 +409,7 @@ static INPUT_PORTS_START( stratos )
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("King")
PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Play")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Play")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("Tab / Color")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
@@ -371,22 +434,28 @@ static INPUT_PORTS_START( stratos )
PORT_CONFSETTING( 0x80, DEF_STR( Normal ) )
PORT_START("RESET")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, go_button, nullptr) PORT_NAME("Go")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, acl_button, nullptr) PORT_NAME("ACL")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, go_button, nullptr) PORT_NAME("Go")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, acl_button, nullptr) PORT_NAME("ACL")
PORT_START("FAKE")
- PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, cpu_freq, nullptr) // factory set
+ PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, cpu_freq, nullptr) // factory set
PORT_CONFSETTING( 0x00, "5MHz" )
PORT_CONFSETTING( 0x01, "5.67MHz" )
INPUT_PORTS_END
static INPUT_PORTS_START( tking2 )
- PORT_INCLUDE( stratos )
+ PORT_INCLUDE( saitek_stratos )
PORT_MODIFY("IN.5")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_CUSTOM)
INPUT_PORTS_END
+
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
void stratos_state::stratos(machine_config &config)
{
/* basic machine hardware */
@@ -401,12 +470,12 @@ void stratos_state::stratos(machine_config &config)
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(350));
- TIMER(config, "lcd_busy").configure_generic(timer_device::expired_delegate());
-
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(2+4, 8+1);
config.set_default_layout(layout_saitek_stratos);
+ TIMER(config, "lcd_busy").configure_generic(timer_device::expired_delegate());
+
/* sound hardware */
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
@@ -419,22 +488,21 @@ void stratos_state::stratos(machine_config &config)
SOFTWARE_LIST(config, "cart_list").set_original("saitek_egr");
}
-void stratos_state::corona(machine_config &config)
-{
- stratos(config);
-
- m_board->set_type(sensorboard_device::MAGNETS);
-}
-
void stratos_state::tking2(machine_config &config)
{
stratos(config);
+ m_maincpu->set_periodic_int(FUNC(stratos_state::irq0_line_hold), attotime::from_hz(100));
- // seems much more responsive
+ // seems much more responsive (not just because of higher irq rate)
m_board->set_delay(attotime::from_msec(200));
}
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
ROM_START( stratos )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("w1y01f_728m_u3.u3", 0x0000, 0x8000, CRC(b58a7256) SHA1(75b3a3a65f4ca8d52aa5b17a06319bff59d9014f) )
@@ -447,6 +515,7 @@ ROM_START( stratosa )
ROM_LOAD("bw1_819n_u4.u4", 0x8000, 0x8000, CRC(cb0de631) SHA1(f78d40213be21775966cbc832d64acd9b73de632) )
ROM_END
+
ROM_START( tking ) // PCB rev. 10
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("y01f_713d_u3.u3", 0x0000, 0x8000, CRC(b8c6d853) SHA1(98923f44bbbd2ea17c269850971d3df229e6057e) )
@@ -465,26 +534,16 @@ ROM_START( tkingb ) // PCB rev. 7
ROM_LOAD("y01f-b_819o_u4.u4", 0x8000, 0x8000, CRC(336040d4) SHA1(aca662b8cc4d6bafd61ca158c768ba8896117169) )
ROM_END
-ROM_START( corona )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("w2_708g_u2.u2", 0x0000, 0x8000, CRC(52568bb4) SHA1(83fe91787e17bbefc2b3ec651ddb11c88990060d) )
- ROM_LOAD("bw2_708a_u3.u3", 0x8000, 0x8000, CRC(32848f73) SHA1(a447543e3eb4757f9afed26fde77b66985eb96a7) )
-ROM_END
-
-ROM_START( coronaa )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("w2_a14c_u2.u2", 0x0000, 0x8000, CRC(be82e199) SHA1(cfcc573774b6907ed137dca01fa7f3fce493a89f) )
- ROM_LOAD("bw2_a14_u3.u3", 0x8000, 0x8000, CRC(abe87285) SHA1(b15f7ddeac78d252cf413ba4085523e44c6d15df) )
-ROM_END
-/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
-CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1986, stratosa, stratos, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+/******************************************************************************
+ Drivers
+******************************************************************************/
-CONS( 1990, tking, 0, 0, tking2, tking2, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 1, ver. D)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II
-CONS( 1988, tkinga, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // oldest?
-CONS( 1988, tkingb, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 3)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1986, stratos, 0, 0, stratos, saitek_stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1986, stratosa, stratos, 0, stratos, saitek_stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, corona, 0, 0, corona, stratos, stratos_state, empty_init, "Saitek", "Kasparov Corona (ver. D+)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Corona II
-CONS( 1988, coronaa, corona, 0, corona, stratos, stratos_state, empty_init, "Saitek", "Kasparov Corona (ver. D)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, tking, 0, 0, tking2, tking2, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 1, ver. D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II
+CONS( 1988, tkinga, tking, 0, stratos, saitek_stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // oldest?
+CONS( 1988, tkingb, tking, 0, stratos, saitek_stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/segac2.cpp b/src/mame/drivers/segac2.cpp
index 8400c3e51e5..909c5505632 100644
--- a/src/mame/drivers/segac2.cpp
+++ b/src/mame/drivers/segac2.cpp
@@ -2019,7 +2019,7 @@ ROM_START( puyopuy2 ) /* Puyo Puyo 2 (c)1994 Compile */
ROM_END
-ROM_START( potopoto ) /* Poto Poto (c)1994 Sega */
+ROM_START( potopoto ) /* Poto Poto (c)1994 Sega - 834-10778 (EMP5032 labeled 317-0218) */
ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD16_BYTE( "epr-16662a.ic32", 0x000000, 0x040000, CRC(bbd305d6) SHA1(1a4f4869fefac188c69bc67df0b625e43a0c3f1f) )
ROM_LOAD16_BYTE( "epr-16661a.ic31", 0x000001, 0x040000, CRC(5a7d14f4) SHA1(a615b5f481256366db7b1c6302a8dcb69708102b) )
diff --git a/src/mame/drivers/system1.cpp b/src/mame/drivers/system1.cpp
index 4a0dbf7c8da..9ff8c00d12a 100644
--- a/src/mame/drivers/system1.cpp
+++ b/src/mame/drivers/system1.cpp
@@ -3091,8 +3091,7 @@ ROM_START( bullfgt )
ROM_LOAD( "epr-6070.93", 0x4000, 0x4000, CRC(34f080df) SHA1(0e7d28e3325c8c3f06438fde29ea0ffe57fc325f) ) /* epr-6070.93 */
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
ROM_START( thetogyu )
@@ -3145,8 +3144,7 @@ ROM_START( spatter )
ROM_LOAD( "epr-6309.110", 0xc000, 0x4000, CRC(7423ad98) SHA1(e19b4c64795f30e1491520160d315e4148d58df2) )
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
ROM_START( spattera )
@@ -3173,8 +3171,7 @@ ROM_START( spattera )
ROM_LOAD( "epr-6309.110", 0xc000, 0x4000, CRC(7423ad98) SHA1(e19b4c64795f30e1491520160d315e4148d58df2) )
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
ROM_START( ssanchan )
@@ -3201,8 +3198,7 @@ ROM_START( ssanchan )
ROM_LOAD( "epr-6309.110", 0xc000, 0x4000, CRC(7423ad98) SHA1(e19b4c64795f30e1491520160d315e4148d58df2) )
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
@@ -3390,8 +3386,7 @@ ROM_START( nprinces )
ROM_LOAD( "epr-6549.05", 0xc000, 0x4000, CRC(d2057668) SHA1(ded2a04f7555eb3b1e4da57901ca00635de2c043) ) /* epr-6549.2 */
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
ROM_START( nprinceso )
@@ -4273,8 +4268,7 @@ ROM_START( wboy2 )
ROM_LOAD( "epr-7488.05", 0xc000, 0x4000, CRC(007c2f1b) SHA1(c2f1376144a49d20cb35384648e06d06978474c1) ) /* epr-7488.2 */
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
ROM_START( wboy2u )
@@ -4304,8 +4298,7 @@ ROM_START( wboy2u )
ROM_LOAD( "epr-7488.05", 0xc000, 0x4000, CRC(007c2f1b) SHA1(c2f1376144a49d20cb35384648e06d06978474c1) ) /* epr-7488.2 */
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
- /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
ROM_START( wboy3 )
@@ -4533,7 +4526,7 @@ ROM_START( wbdeluxe )
ROM_LOAD( "epr-7488.05", 0xc000, 0x4000, CRC(007c2f1b) SHA1(c2f1376144a49d20cb35384648e06d06978474c1) ) /* epr-7488.2 */
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
+ ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* pr-5317.106 */
ROM_END
@@ -4621,7 +4614,11 @@ ROM_START( gardiaj ) /* Sega game ID# 834-6119-02 GARDIA */
ROM_LOAD( "pr-7343.ic8", 0x0200, 0x0100, CRC(371c44a6) SHA1(ac37458d1feb6566b09a795b20c21953d4ab109d) ) /* palette blue component */
ROM_REGION( 0x0100, "proms", 0 )
- ROM_LOAD( "pr5317.ic28", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
+ ROM_LOAD( "pr5317.ic28", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) ) /* MB7114E */
+
+ ROM_REGION( 0x0400, "plds", 0 )
+ ROM_LOAD( "315-5137.bin", 0x00000, 0x0104, CRC(6ffd9e6f) SHA1(a60a3a2ec5bc256b18bfff0fec0172ee2e4fd955) ) /* TI PAL16R4A-2CN Located at IC10 */
+ ROM_LOAD( "315-5138.bin", 0x00000, 0x0104, CRC(dd223015) SHA1(8d70f91b118e8653dda1efee3eaea287ae63809f) ) /* TI PAL16R4ACN Located at IC11 */
ROM_END
diff --git a/src/mame/drivers/terminal.cpp b/src/mame/drivers/terminal.cpp
index 618e97de484..e3df889d092 100644
--- a/src/mame/drivers/terminal.cpp
+++ b/src/mame/drivers/terminal.cpp
@@ -87,6 +87,16 @@ ROM_START( 7951om ) // TTL (no cpu) // 1k x 6bits display ram 64-characters uppe
ROM_END
+ROM_START( swtpc8212 ) // MC6802P, 2xMC6821P, INS8250N, MCM66750, MC6845P, bank of 8 dips, crystals unknown. On the back is a 25-pin RS-232 port, and a 25-pin printer port.
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "8224g_ver.1.1_6oct80.ic1", 0xf000, 0x0800, CRC(7d7f3c21) SHA1(f7e6e20b36a1c724a4e348bc784d0b7b5fb462a3) )
+ ROM_LOAD( "8224g_ver.1.1_6oct80.ic2", 0xf800, 0x0800, CRC(2b118c22) SHA1(5fa031c834c7c582d5715764941499fcef51f477) )
+
+ ROM_REGION( 0x0800, "chargen", 0 )
+ ROM_LOAD( "grafix_8x12_22aug80.bin", 0x0000, 0x0800, CRC(a525ed65) SHA1(813d2e85ddb258c5b032b959e695ad33200cbcc4) )
+ROM_END
+
+
ROM_START( teleguide ) // order unknown // i8051, i8031 (layout very similar to loewed) // 64k ram + battery-backed nvram // b&w
ROM_REGION( 0x38000, "maincpu", 0 )
ROM_LOAD( "cardreader_17044-068_349-1163.bin", 0x00000, 0x10000, CRC(3c980c0d) SHA1(9904ffd283a11defbe3daf2cb9029bcead8b02d0) )
@@ -102,4 +112,5 @@ COMP( 1991, alcat258, 0, 0, terminal, terminal, terminal_state, empty
COMP( 1992, loewed, 0, 0, terminal, terminal, terminal_state, empty_init, "Loewe", "Multitel D", MACHINE_IS_SKELETON )
COMP( 1988, loewe715, 0, 0, terminal, terminal, terminal_state, empty_init, "Loewe", "Multicom 715L", MACHINE_IS_SKELETON )
COMP( 1987, 7951om, 0, 0, terminal, terminal, terminal_state, empty_init, "Mera-Elzab", "7951om", MACHINE_IS_SKELETON )
+COMP( 1980, swtpc8212, 0, 0, terminal, terminal, terminal_state, empty_init, "Southwest Technical Products Corporation", "SWTPC 8212", MACHINE_IS_SKELETON )
COMP( 1992, teleguide, 0, 0, terminal, terminal, terminal_state, empty_init, "Loewe / Televerket", "Teleguide", MACHINE_IS_SKELETON )
diff --git a/src/mame/includes/saitek_stratos.h b/src/mame/includes/saitek_stratos.h
new file mode 100644
index 00000000000..231ea8b53b9
--- /dev/null
+++ b/src/mame/includes/saitek_stratos.h
@@ -0,0 +1,72 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/*
+
+ Saitek Stratos family chess computers shared class
+ Used in: saitek_stratos.cpp (main driver), saitek_corona.cpp
+
+*/
+
+#ifndef MAME_INCLUDES_SAITEK_STRATOS_H
+#define MAME_INCLUDES_SAITEK_STRATOS_H
+
+#pragma once
+
+#include "machine/timer.h"
+#include "video/pwm.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+#include <algorithm>
+
+
+class saitek_stratos_state : public driver_device
+{
+public:
+ saitek_stratos_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_lcd_busy(*this, "lcd_busy"),
+ m_display(*this, "display"),
+ m_extrom(*this, "extrom"),
+ m_out_digit(*this, "digit%u", 0U),
+ m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U),
+ m_inputs(*this, "IN.%u", 0)
+ { }
+
+ DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); }
+ DECLARE_INPUT_CHANGED_MEMBER(acl_button) { if (newval) power_off(); }
+ DECLARE_INPUT_CHANGED_MEMBER(go_button);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void device_post_load() override { update_lcd(); }
+
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<timer_device> m_lcd_busy;
+ required_device<pwm_display_device> m_display;
+ required_device<generic_slot_device> m_extrom;
+ output_finder<8+1> m_out_digit;
+ output_finder<4, 16, 4> m_out_lcd;
+ required_ioport_array<8+1> m_inputs;
+
+ // common handlers
+ void clear_lcd() { std::fill_n(m_lcd_data, ARRAY_LENGTH(m_lcd_data), 0); }
+ void update_lcd();
+ void power_off();
+ void set_cpu_freq();
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load);
+ void lcd_w(u8 data);
+
+ bool m_power;
+ u8 m_lcd_count;
+ u8 m_lcd_address;
+ u8 m_lcd_data[0x40];
+};
+
+INPUT_PORTS_EXTERN( saitek_stratos );
+
+#endif // MAME_INCLUDES_SAITEK_STRATOS_H
diff --git a/src/mame/layout/saitek_corona.lay b/src/mame/layout/saitek_corona.lay
new file mode 100644
index 00000000000..af4152e892a
--- /dev/null
+++ b/src/mame/layout/saitek_corona.lay
@@ -0,0 +1,661 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="black"><rect><color red="0.21" green="0.2" blue="0.2" /></rect></element>
+ <element name="whitew"><rect><color red="1" green="1" blue="1" /></rect></element>
+ <element name="text_mode"><text string="Mode" align="1"><color red="0.36" green="0.35" blue="0.35" /></text></element>
+
+ <!-- our digit element is bright-on-dark, this means the lcd panel is the wrong colour here -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="1.0" blue="1.0" /></led7seg>
+ </element>
+ <element name="ldot" defstate="0">
+ <rect state="1"><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><color red="0.12157" green="0.12157" blue="0.12157" /></rect>
+ </element>
+
+ <element name="ledo">
+ <rect><color red="0.1" green="0.1" blue="0.1" /></rect>
+ </element>
+ <element name="ledr" defstate="0">
+ <rect state="0"><color red="0" green="0" blue="0" /></rect>
+ <rect state="1"><color red="1" green="0" blue="0" /></rect>
+ </element>
+ <element name="ledg" defstate="0">
+ <rect state="0"><color red="0" green="0" blue="0" /></rect>
+ <rect state="1"><color red="0" green="1" blue="0" /></rect>
+ </element>
+
+ <element name="led" defstate="0">
+ <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
+ <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
+ </element>
+
+ <element name="hl" defstate="0">
+ <text string=" "/>
+ <rect state="1"><color red="1" green="1" blue="1" /></rect>
+ </element>
+
+ <element name="text_go">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Go"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_stop">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Stop"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_newgame">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="New Game"> <color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_sound">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Sound"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_plus">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="+"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_minus">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="-"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_function">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Function"> <color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_tabcolor">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Tab/Color"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+
+ <element name="text_normal">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Normal"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_analysis">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Analysis"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_setup">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Set Up"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_level">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Level"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_library">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Library"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_info">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Info"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_scroll">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="LCD Scroll"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_play">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Play"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+
+ <element name="text_white"><text string="White"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+ <element name="text_black"><text string="Black"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+ <element name="text_check"><text string="Check"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+ <element name="text_end"><text string="End"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+
+ <element name="text_p1"><image file="chess/wk.png"/></element>
+ <element name="text_p2"><image file="chess/wq.png"/></element>
+ <element name="text_p3"><image file="chess/wr.png"/></element>
+ <element name="text_p4"><image file="chess/wb.png"/></element>
+ <element name="text_p5"><image file="chess/wn.png"/></element>
+ <element name="text_p6"><image file="chess/wp.png"/></element>
+
+ <element name="text_1">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="1" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="2" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="3" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="4" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_5">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="5" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_6">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="6" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_7">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="7" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_8">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="8" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+
+ <element name="text_a">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="A"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_b">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="B"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_c">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="C"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_d">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="D"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_e">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="E"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_f">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="F"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_g">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="G"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_h">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="H"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+
+
+<!-- sb board -->
+
+ <element name="cblack"><rect><color red="0.41" green="0.4" blue="0.39" /></rect></element>
+ <element name="cwhite"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
+
+ <element name="hlbb" defstate="0">
+ <text string=" "><bounds x="0" y="0" width="1" height="1" /></text>
+ <disk state="1">
+ <bounds x="0.12" y="0.12" width="0.76" height="0.76" />
+ <color red="0" green="0" blue="0" />
+ </disk>
+ </element>
+
+ <element name="piece" defstate="0">
+ <image file="chess/wp.png" state="1"/>
+ <image file="chess/wn.png" state="2"/>
+ <image file="chess/wb.png" state="3"/>
+ <image file="chess/wr.png" state="4"/>
+ <image file="chess/wq.png" state="5"/>
+ <image file="chess/wk.png" state="6"/>
+
+ <image file="chess/bp.png" state="7"/>
+ <image file="chess/bn.png" state="8"/>
+ <image file="chess/bb.png" state="9"/>
+ <image file="chess/br.png" state="10"/>
+ <image file="chess/bq.png" state="11"/>
+ <image file="chess/bk.png" state="12"/>
+
+ <!-- selected pieces -->
+ <image file="chess/wp.png" state="13"><color alpha="0.5" /></image>
+ <image file="chess/wn.png" state="14"><color alpha="0.5" /></image>
+ <image file="chess/wb.png" state="15"><color alpha="0.5" /></image>
+ <image file="chess/wr.png" state="16"><color alpha="0.5" /></image>
+ <image file="chess/wq.png" state="17"><color alpha="0.5" /></image>
+ <image file="chess/wk.png" state="18"><color alpha="0.5" /></image>
+
+ <image file="chess/bp.png" state="19"><color alpha="0.5" /></image>
+ <image file="chess/bn.png" state="20"><color alpha="0.5" /></image>
+ <image file="chess/bb.png" state="21"><color alpha="0.5" /></image>
+ <image file="chess/br.png" state="22"><color alpha="0.5" /></image>
+ <image file="chess/bq.png" state="23"><color alpha="0.5" /></image>
+ <image file="chess/bk.png" state="24"><color alpha="0.5" /></image>
+ </element>
+
+ <group name="sb_board">
+ <bounds x="0" y="0" width="80" height="80" />
+
+ <!-- squares (avoid seams) -->
+ <bezel element="cwhite"><bounds x="0" y="0" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="10" y="0" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="20" y="0" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="30" y="0" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="40" y="0" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="50" y="0" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="60" y="0" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="70" y="0" width="10" height="11" /></bezel>
+
+ <bezel element="cblack"><bounds x="0" y="10" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="10" y="10" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="20" y="10" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="30" y="10" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="40" y="10" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="50" y="10" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="60" y="10" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="70" y="10" width="10" height="11" /></bezel>
+
+ <bezel element="cwhite"><bounds x="0" y="20" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="10" y="20" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="20" y="20" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="30" y="20" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="40" y="20" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="50" y="20" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="60" y="20" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="70" y="20" width="10" height="11" /></bezel>
+
+ <bezel element="cblack"><bounds x="0" y="30" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="10" y="30" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="20" y="30" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="30" y="30" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="40" y="30" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="50" y="30" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="60" y="30" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="70" y="30" width="10" height="11" /></bezel>
+
+ <bezel element="cwhite"><bounds x="0" y="40" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="10" y="40" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="20" y="40" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="30" y="40" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="40" y="40" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="50" y="40" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="60" y="40" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="70" y="40" width="10" height="11" /></bezel>
+
+ <bezel element="cblack"><bounds x="0" y="50" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="10" y="50" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="20" y="50" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="30" y="50" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="40" y="50" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="50" y="50" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="60" y="50" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="70" y="50" width="10" height="11" /></bezel>
+
+ <bezel element="cwhite"><bounds x="0" y="60" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="10" y="60" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="20" y="60" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="30" y="60" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="40" y="60" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="50" y="60" width="11" height="11" /></bezel>
+ <bezel element="cwhite"><bounds x="60" y="60" width="11" height="11" /></bezel>
+ <bezel element="cblack"><bounds x="70" y="60" width="10" height="11" /></bezel>
+
+ <bezel element="cblack"><bounds x="0" y="70" width="11" height="10" /></bezel>
+ <bezel element="cwhite"><bounds x="10" y="70" width="11" height="10" /></bezel>
+ <bezel element="cblack"><bounds x="20" y="70" width="11" height="10" /></bezel>
+ <bezel element="cwhite"><bounds x="30" y="70" width="11" height="10" /></bezel>
+ <bezel element="cblack"><bounds x="40" y="70" width="11" height="10" /></bezel>
+ <bezel element="cwhite"><bounds x="50" y="70" width="11" height="10" /></bezel>
+ <bezel element="cblack"><bounds x="60" y="70" width="11" height="10" /></bezel>
+ <bezel element="cwhite"><bounds x="70" y="70" width="10" height="10" /></bezel>
+
+ <!-- coords -->
+ <bezel element="text_8"><bounds x="0.25" y="4.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_7"><bounds x="0.25" y="14.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_6"><bounds x="0.25" y="24.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_5"><bounds x="0.25" y="34.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_4"><bounds x="0.25" y="44.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_3"><bounds x="0.25" y="54.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_2"><bounds x="0.25" y="64.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_1"><bounds x="0.25" y="74.3" width="2" height="1.4" /></bezel>
+
+ <bezel element="text_a"><bounds x="4" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_b"><bounds x="14" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_c"><bounds x="24" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_d"><bounds x="34" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_e"><bounds x="44" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_f"><bounds x="54" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_g"><bounds x="64" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_h"><bounds x="74" y="78.55" width="2" height="1.4" /></bezel>
+
+ <!-- leds -->
+ <repeat count="8">
+ <param name="y" start="8.3" increment="10" />
+ <param name="i2" start="7" increment="-1" />
+
+ <repeat count="8">
+ <param name="x" start="0.2" increment="10" />
+ <param name="i1" start="2" increment="1" />
+ <bezel name="~i1~.~i2~" element="led"><bounds x="~x~" y="~y~" width="1.5" height="1.5" /></bezel>
+ </repeat>
+ </repeat>
+
+ <!-- sensors, pieces -->
+ <repeat count="8">
+ <param name="y" start="0" increment="10" />
+ <param name="i" start="8" increment="-1" />
+
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+ <bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
+
+ <bezel name="piece_a~i~" element="piece"><bounds x="0" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_b~i~" element="piece"><bounds x="10" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_c~i~" element="piece"><bounds x="20" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_d~i~" element="piece"><bounds x="30" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_e~i~" element="piece"><bounds x="40" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_f~i~" element="piece"><bounds x="50" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_g~i~" element="piece"><bounds x="60" y="~y~" width="10" height="10" /></bezel>
+ <bezel name="piece_h~i~" element="piece"><bounds x="70" y="~y~" width="10" height="10" /></bezel>
+ </repeat>
+ </group>
+
+
+<!-- sb ui -->
+
+ <element name="hlub" defstate="0">
+ <rect state="1"><color red="0" green="0" blue="0" /></rect>
+ </element>
+
+ <element name="text_uit1"><text string="S.BOARD"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uit2"><text string="INTERFACE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uib1"><text string="BOARD:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uib2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uib3">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uis1"><text string="SPAWN:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uih1"><text string="HAND:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uih2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu1"><text string="UNDO:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uiu2a">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2b">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2c">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2d">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu3a" defstate="0">
+ <simplecounter maxstate="999" digits="1" align="2">
+ <color red="0.81" green="0.8" blue="0.79" />
+ </simplecounter>
+ </element>
+ <element name="text_uiu3b"><text string="/"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uiu3c" defstate="0">
+ <simplecounter maxstate="999" digits="1" align="1">
+ <color red="0.81" green="0.8" blue="0.79" />
+ </simplecounter>
+ </element>
+
+ <group name="sb_ui">
+ <bounds x="0" y="0" width="10" height="80" />
+ <bezel element="cblack"><bounds x="0" y="0" width="10" height="1" /></bezel>
+ <bezel element="cblack"><bounds x="0" y="7" width="10" height="1" /></bezel>
+ <bezel element="cblack"><bounds x="0" y="79" width="10" height="1" /></bezel>
+ <bezel element="text_uit1"><bounds x="0" y="2" width="10" height="2" /></bezel>
+ <bezel element="text_uit2"><bounds x="0" y="4" width="10" height="2" /></bezel>
+
+ <!-- board -->
+ <bezel element="text_uib1"><bounds x="0" y="9" width="10" height="2" /></bezel>
+ <bezel element="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></bezel>
+ <bezel element="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></bezel>
+
+ <bezel element="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></bezel>
+ <bezel element="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></bezel>
+
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></bezel>
+
+ <!-- spawn -->
+ <bezel element="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></bezel>
+ <bezel element="cwhite"><bounds x="1" y="23" width="8" height="12" /></bezel>
+ <bezel element="cwhite"><bounds x="1" y="36" width="8" height="12" /></bezel>
+
+ <bezel name="piece_ui1" element="piece"><bounds x="1" y="23" width="4" height="4" /></bezel>
+ <bezel name="piece_ui2" element="piece"><bounds x="1" y="27" width="4" height="4" /></bezel>
+ <bezel name="piece_ui3" element="piece"><bounds x="1" y="31" width="4" height="4" /></bezel>
+ <bezel name="piece_ui4" element="piece"><bounds x="5" y="23" width="4" height="4" /></bezel>
+ <bezel name="piece_ui5" element="piece"><bounds x="5" y="27" width="4" height="4" /></bezel>
+ <bezel name="piece_ui6" element="piece"><bounds x="5" y="31" width="4" height="4" /></bezel>
+ <bezel name="piece_ui7" element="piece"><bounds x="1" y="36" width="4" height="4" /></bezel>
+ <bezel name="piece_ui8" element="piece"><bounds x="1" y="40" width="4" height="4" /></bezel>
+ <bezel name="piece_ui9" element="piece"><bounds x="1" y="44" width="4" height="4" /></bezel>
+ <bezel name="piece_ui10" element="piece"><bounds x="5" y="36" width="4" height="4" /></bezel>
+ <bezel name="piece_ui11" element="piece"><bounds x="5" y="40" width="4" height="4" /></bezel>
+ <bezel name="piece_ui12" element="piece"><bounds x="5" y="44" width="4" height="4" /></bezel>
+
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></bezel>
+
+ <!-- hand -->
+ <bezel element="text_uih1"><bounds x="0" y="51" width="10" height="2" /></bezel>
+ <bezel element="cblack"><bounds x="1" y="53.5" width="8" height="6" /></bezel>
+ <bezel name="piece_ui0" element="piece"><bounds x="2" y="53.5" width="6" height="6" /></bezel>
+
+ <bezel element="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></bezel>
+ <bezel element="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></bezel>
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></bezel>
+
+ <!-- undo -->
+ <bezel element="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></bezel>
+ <bezel element="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></bezel>
+ <bezel element="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></bezel>
+ <bezel element="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></bezel>
+ <bezel element="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></bezel>
+ <bezel element="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></bezel>
+ <bezel element="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></bezel>
+ <bezel element="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></bezel>
+ <bezel element="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></bezel>
+
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
+ <bezel element="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
+
+ <bezel name="count_ui0" element="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></bezel>
+ <bezel name="count_ui1" element="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></bezel>
+ <bezel element="text_uiu3b"><bounds x="4" y="75" width="2" height="2" /></bezel>
+ </group>
+
+
+<!-- lcd panel -->
+
+ <group name="lcd1">
+ <bounds x="15.5" y="0" width="22.5" height="14" />
+
+ <bezel name="digit0" element="digit"><bounds x="15.5" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="20" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="24" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="30" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit4" element="digit"><bounds x="34" y="0" width="4" height="6" /></bezel>
+
+ <bezel name="lcd0.0.0" element="ldot"><bounds x="28.91" y="1.8" width="0.6" height="0.6" /></bezel>
+ <bezel name="lcd0.0.0" element="ldot"><bounds x="28.69" y="3.65" width="0.6" height="0.6" /></bezel>
+
+ <bezel name="digit5" element="digit"><bounds x="20" y="8" width="4" height="6" /></bezel>
+ <bezel name="digit6" element="digit"><bounds x="24" y="8" width="4" height="6" /></bezel>
+ <bezel name="digit7" element="digit"><bounds x="30" y="8" width="4" height="6" /></bezel>
+ <bezel name="digit8" element="digit"><bounds x="34" y="8" width="4" height="6" /></bezel>
+
+ <bezel name="lcd1.0.0" element="ldot"><bounds x="28.91" y="9.8" width="0.6" height="0.6" /></bezel>
+ <bezel name="lcd1.0.0" element="ldot"><bounds x="28.69" y="11.65" width="0.6" height="0.6" /></bezel>
+ </group>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-2.5" right="103" top="8.5" bottom="102" />
+
+ <group ref="sb_board"><bounds x="10" y="10" width="80" height="80" /></group>
+ <group ref="sb_ui"><bounds x="-1.5" y="10" width="10" height="80" /></group>
+
+ <group ref="lcd1"><bounds x="26.64" y="92" width="12.86" height="8" /></group>
+ <bezel element="whitew"><bounds x="25.14" y="91.5" width="14.86" height="9" /><color alpha="0.125" /></bezel>
+
+ <!-- button panel -->
+ <element ref="black"><bounds x="92.5" y="40.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="44.25" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="45.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="49.25" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="50.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="54.25" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="55.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="59.25" width="9" height="0.25" /></element>
+
+ <element ref="text_mode"><bounds x="92.5" y="59.4" width="9" height="1.4" /></element>
+ <element ref="black"><bounds x="91.75" y="60.5" width="0.25" height="24" /></element>
+ <element ref="black"><bounds x="102" y="60.5" width="0.25" height="24" /></element>
+
+ <element ref="black"><bounds x="92.5" y="10.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="15.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="20.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="25.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="30.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="35.5" width="9" height="4" /></element>
+
+ <element ref="black"><bounds x="92.5" y="60.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="65.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="70.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="75.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="80.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="85.5" width="9" height="4" /></element>
+
+ <element ref="black"><bounds x="45.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="45.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="55.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="55.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="70.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="70.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="80.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="80.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="96.5" width="9" height="4" /></element>
+
+ <element ref="text_go"> <bounds x="45.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_stop"> <bounds x="45.6" y="97.5" width="8.8" height="2" /></element>
+ <element ref="text_newgame"> <bounds x="55.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_sound"> <bounds x="55.6" y="97.5" width="8.8" height="2" /></element>
+ <element ref="text_plus"> <bounds x="70.6" y="92.0" width="8.8" height="3" /></element>
+ <element ref="text_minus"> <bounds x="70.6" y="96.6" width="8.8" height="3.8" /></element>
+ <element ref="text_function"><bounds x="80.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_tabcolor"><bounds x="80.6" y="97.5" width="8.8" height="2" /></element>
+ <element ref="text_scroll"> <bounds x="92.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_play"> <bounds x="92.6" y="97.5" width="8.8" height="2" /></element>
+
+ <element ref="text_p1"><bounds x="95.4" y="10.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p2"><bounds x="95.4" y="15.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p3"><bounds x="95.4" y="20.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p4"><bounds x="95.4" y="25.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p5"><bounds x="95.4" y="30.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p6"><bounds x="95.4" y="35.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+
+ <element ref="text_white"> <bounds x="92.6" y="41.5" width="8.8" height="2" /></element>
+ <element ref="text_black"> <bounds x="92.6" y="46.5" width="8.8" height="2" /></element>
+ <element ref="text_check"> <bounds x="92.6" y="51.5" width="8.8" height="2" /></element>
+ <element ref="text_end"> <bounds x="92.6" y="56.5" width="8.8" height="2" /></element>
+
+ <element ref="text_normal"> <bounds x="92.6" y="61.5" width="8.8" height="2" /></element>
+ <element ref="text_analysis"><bounds x="92.6" y="66.5" width="8.8" height="2" /></element>
+ <element ref="text_setup"> <bounds x="92.6" y="71.5" width="8.8" height="2" /></element>
+ <element ref="text_level"> <bounds x="92.6" y="76.5" width="8.8" height="2" /></element>
+ <element ref="text_library"> <bounds x="92.6" y="81.5" width="8.8" height="2" /></element>
+ <element ref="text_info"> <bounds x="92.6" y="86.5" width="8.8" height="2" /></element>
+
+ <element ref="ledo"><bounds x="93" y="11" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="16" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="21" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="26" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="31" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="36" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="41" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="46" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="51" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="56" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="61" width="1.6" height="0.6" /></element>
+
+ <element ref="ledr" name="1.7" blend="add"><bounds x="93" y="11" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.6" blend="add"><bounds x="93" y="16" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.5" blend="add"><bounds x="93" y="21" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.4" blend="add"><bounds x="93" y="26" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.3" blend="add"><bounds x="93" y="31" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.2" blend="add"><bounds x="93" y="36" width="1.6" height="0.6" /></element>
+
+ <element ref="ledg" name="0.7" blend="add"><bounds x="93" y="11" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.6" blend="add"><bounds x="93" y="16" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.5" blend="add"><bounds x="93" y="21" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.4" blend="add"><bounds x="93" y="26" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.3" blend="add"><bounds x="93" y="31" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.2" blend="add"><bounds x="93" y="36" width="1.6" height="0.6" /></element>
+
+ <element ref="ledr" name="0.8" blend="add"><bounds x="93" y="41" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.8" blend="add"><bounds x="93" y="46" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="0.0" blend="add"><bounds x="93" y="51" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.0" blend="add"><bounds x="93" y="56" width="1.6" height="0.6" /></element>
+
+ <element ref="ledg" name="0.1" blend="add"><bounds x="93" y="61" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.1" blend="add"><bounds x="93" y="61" width="1.6" height="0.6" /></element>
+
+ <element ref="hl" inputtag="IN.3" inputmask="0x04"><bounds x="92.5" y="10.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.3" inputmask="0x01"><bounds x="92.5" y="15.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.2" inputmask="0x01"><bounds x="92.5" y="20.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.2" inputmask="0x04"><bounds x="92.5" y="25.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.3" inputmask="0x02"><bounds x="92.5" y="30.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.2" inputmask="0x02"><bounds x="92.5" y="35.5" width="9" height="4" /><color alpha="0.15" /></element>
+
+ <element ref="hl" inputtag="IN.7" inputmask="0x04"><bounds x="92.5" y="60.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.7" inputmask="0x02"><bounds x="92.5" y="65.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.0" inputmask="0x01"><bounds x="92.5" y="70.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.0" inputmask="0x02"><bounds x="92.5" y="75.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.6" inputmask="0x01"><bounds x="92.5" y="80.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.6" inputmask="0x02"><bounds x="92.5" y="85.5" width="9" height="4" /><color alpha="0.15" /></element>
+
+ <element ref="hl" inputtag="RESET" inputmask="0x01"><bounds x="45.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.1" inputmask="0x02"><bounds x="45.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.1" inputmask="0x04"><bounds x="55.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.1" inputmask="0x01"><bounds x="55.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.5" inputmask="0x01"><bounds x="70.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.4" inputmask="0x04"><bounds x="70.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.5" inputmask="0x02"><bounds x="80.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.4" inputmask="0x02"><bounds x="80.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.x" inputmask="0x01"><bounds x="92.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.4" inputmask="0x01"><bounds x="92.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index f5244544745..3c3b6c7ce28 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -12842,6 +12842,7 @@ smissw //
supmodel // (c) 1994 Comad & New Japan System
wownfant // (c) 2002 Comad
zipzap // (c) 1995 Barko Corp
+zipzapa // (c) 1995 Barko Corp
@source:exprraid.cpp
exprraid // (c) 1986 Data East Corporation
@@ -34111,6 +34112,10 @@ sage2 //
@source:saitek_chesstrv.cpp
chesstrv //
+@source:saitek_corona.cpp
+corona
+coronaa
+
@source:saitek_cp2000.cpp
cp2000 //
@@ -34122,8 +34127,6 @@ risc2500 //
montreux //
@source:saitek_stratos.cpp
-corona
-coronaa
stratos
stratosa
tking
@@ -37753,6 +37756,7 @@ t4490 // Terco 4490 Mill CNC Control (c) 1986
alcat258 //
loewe715 //
loewed //
+swtpc8212 //
teleguide //
@source:terracre.cpp
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index f486bb025cd..1ba447dd2f1 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -692,6 +692,7 @@ rzone.cpp
sacstate.cpp
sage2.cpp
saitek_chesstrv.cpp
+saitek_corona.cpp
saitek_cp2000.cpp
saitek_delta1.cpp
saitek_risc2500.cpp
diff --git a/src/mame/video/dpb_brushproc.cpp b/src/mame/video/dpb_brushproc.cpp
index 5bbbd5e8db3..e85bb000d12 100644
--- a/src/mame/video/dpb_brushproc.cpp
+++ b/src/mame/video/dpb_brushproc.cpp
@@ -49,6 +49,9 @@ dpb7000_brushproc_card_device::dpb7000_brushproc_card_device(const machine_confi
, m_prom_addr(0)
, m_prom_base(nullptr)
, m_prom_out(0)
+ , m_pal_in(0)
+ , m_pal_base(nullptr)
+ , m_pal_out(0)
, m_store1(*this)
, m_store2(*this)
, m_mult_fa(*this, "mult_fa")
@@ -59,6 +62,7 @@ dpb7000_brushproc_card_device::dpb7000_brushproc_card_device(const machine_confi
, m_alu_fe(*this, "alu_fe")
, m_alu_ee(*this, "alu_ee")
, m_prom(*this, "prom")
+ , m_pal(*this, "pal")
{
}
@@ -98,6 +102,9 @@ void dpb7000_brushproc_card_device::device_start()
save_item(NAME(m_prom_addr));
save_item(NAME(m_prom_out));
+ save_item(NAME(m_pal_in));
+ save_item(NAME(m_pal_out));
+
m_store1.resolve_safe();
m_store2.resolve_safe();
}
@@ -139,6 +146,10 @@ void dpb7000_brushproc_card_device::device_reset()
m_prom_base = m_prom->base();
m_prom_out = 0;
+ m_pal_in = 0;
+ m_pal_base = m_pal->base();
+ m_pal_out = 0;
+
m_mult_fa->xm_w(0);
m_mult_fa->ym_w(0);
m_mult_fa->rs_w(0);
@@ -170,6 +181,9 @@ void dpb7000_brushproc_card_device::device_add_mconfig(machine_config &config)
ROM_START( dpb7000_brushproc )
ROM_REGION(0x200, "prom", 0)
ROM_LOAD("pb-02c-17593-baa.bin", 0x000, 0x200, CRC(a74cc1f5) SHA1(3b789d5a29c70c93dec56f44be8c14b41915bdef))
+
+ ROM_REGION16_BE(0x800, "pal", 0)
+ ROMX_LOAD("pb-02c-17593-hba.bin", 0x000, 0x800, CRC(76018e4f) SHA1(73d995e2e78410676061d45857756d5305a9984a), ROM_GROUPWORD)
ROM_END
const tiny_rom_entry *dpb7000_brushproc_card_device::device_rom_region() const
diff --git a/src/mame/video/dpb_brushproc.h b/src/mame/video/dpb_brushproc.h
index 9f8625b947d..2ae645edded 100644
--- a/src/mame/video/dpb_brushproc.h
+++ b/src/mame/video/dpb_brushproc.h
@@ -106,6 +106,10 @@ protected:
uint8_t *m_prom_base;
uint8_t m_prom_out;
+ uint16_t m_pal_in;
+ uint8_t *m_pal_base;
+ uint16_t m_pal_out;
+
devcb_write8 m_store1;
devcb_write8 m_store2;
@@ -117,6 +121,7 @@ protected:
required_device<sn74s381_device> m_alu_fe;
required_device<sn74s381_device> m_alu_ee;
required_memory_region m_prom;
+ required_memory_region m_pal;
};
// device type definition