mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
New working machine added
--------- R-Zone: Indy 500 [hap, Sean Riddle]
This commit is contained in:
parent
79a1cdaff0
commit
cfaad61eff
@ -2811,6 +2811,7 @@ files {
|
||||
createMESSProjects(_target, _subtarget, "sharp")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/hh_sm510.cpp",
|
||||
MAME_DIR .. "src/mame/includes/hh_sm510.h",
|
||||
MAME_DIR .. "src/mame/video/mz700.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/mz700.cpp",
|
||||
MAME_DIR .. "src/mame/includes/mz700.h",
|
||||
@ -3122,6 +3123,7 @@ files {
|
||||
MAME_DIR .. "src/mame/machine/gamecom.cpp",
|
||||
MAME_DIR .. "src/mame/video/gamecom.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/k28.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/rzone.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "tigertel")
|
||||
|
@ -36,6 +36,10 @@
|
||||
#define MCFG_SM510_WRITE_R_CB(_devcb) \
|
||||
devcb = &sm510_base_device::set_write_r_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
// R port can be set to direct control with a mask option (default false)
|
||||
#define MCFG_SM510_R_DIRECT_CONTROL(_direct) \
|
||||
sm510_base_device::set_r_direct_control(*device, _direct);
|
||||
|
||||
// LCD segment outputs: H1-4 as offset(low), a/b/c 1-16 as data d0-d15
|
||||
#define MCFG_SM510_WRITE_SEGA_CB(_devcb) \
|
||||
devcb = &sm510_base_device::set_write_sega_callback(*device, DEVCB_##_devcb);
|
||||
@ -81,8 +85,8 @@ a1 48 | | 28 b10
|
||||
H4 49 | | 27 a11
|
||||
H3 50 | | 26 b11
|
||||
H2 51 | | 25 a12
|
||||
H1 52 | SM510 | 24 b12
|
||||
S1 53 | SM511 | 23 a13
|
||||
H1 52 | | 24 b12
|
||||
S1 53 | SM510 | 23 a13
|
||||
S2 54 | | 22 b13
|
||||
S3 55 | | 21 a14
|
||||
S4 56 | | 20 b14
|
||||
@ -108,6 +112,7 @@ public:
|
||||
, m_prgwidth(prgwidth)
|
||||
, m_datawidth(datawidth)
|
||||
, m_stack_levels(stack_levels)
|
||||
, m_r_direct(false)
|
||||
, m_lcd_ram_a(*this, "lcd_ram_a"), m_lcd_ram_b(*this, "lcd_ram_b"), m_lcd_ram_c(*this, "lcd_ram_c")
|
||||
, m_write_sega(*this), m_write_segb(*this), m_write_segc(*this), m_write_segbs(*this)
|
||||
, m_melody_rom(*this, "melody")
|
||||
@ -123,6 +128,7 @@ public:
|
||||
template <class Object> static devcb_base &set_read_b_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_read_b.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_write_s_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_s.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_write_r_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_r.set_callback(std::forward<Object>(cb)); }
|
||||
static void set_r_direct_control(device_t &device, bool direct) { downcast<sm510_base_device &>(device).m_r_direct = direct; }
|
||||
|
||||
template <class Object> static devcb_base &set_write_sega_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_sega.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_write_segb_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_segb.set_callback(std::forward<Object>(cb)); }
|
||||
@ -179,6 +185,7 @@ protected:
|
||||
bool m_skip;
|
||||
u8 m_w;
|
||||
u8 m_r, m_r_out;
|
||||
bool m_r_direct;
|
||||
bool m_k_active;
|
||||
bool m_halt;
|
||||
int m_clk_div;
|
||||
|
@ -5,7 +5,7 @@
|
||||
Sharp SM510 MCU core implementation
|
||||
|
||||
TODO:
|
||||
- buzzer control divider bit is mask-programmable?
|
||||
- X
|
||||
|
||||
*/
|
||||
|
||||
@ -55,10 +55,20 @@ offs_t sm510_device::disasm_disassemble(std::ostream &stream, offs_t pc, const u
|
||||
|
||||
void sm510_device::clock_melody()
|
||||
{
|
||||
// buzzer from divider, R2 inverse phase
|
||||
u8 out = m_div >> 2 & 1;
|
||||
out |= (out << 1 ^ 2);
|
||||
out &= m_r;
|
||||
u8 out = 0;
|
||||
|
||||
if (m_r_direct)
|
||||
{
|
||||
// direct output
|
||||
out = m_r & 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
// buzzer from divider, R2 inverse phase
|
||||
out = m_div >> 2 & 1;
|
||||
out |= (out << 1 ^ 2);
|
||||
out &= m_r;
|
||||
}
|
||||
|
||||
// output to R pins
|
||||
if (out != m_r_out)
|
||||
|
@ -4,6 +4,8 @@
|
||||
/***************************************************************************
|
||||
|
||||
Sharp SM5xx family handhelds.
|
||||
List of child drivers:
|
||||
- rzone: Tiger R-Zone
|
||||
|
||||
TODO:
|
||||
- improve LCD segments in SVGs for: gnw_mc25, gnw_eg26, exospace
|
||||
@ -14,9 +16,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/hh_sm510.h"
|
||||
#include "cpu/sm510/sm510.h"
|
||||
#include "cpu/sm510/sm500.h"
|
||||
#include "sound/spkrdev.h"
|
||||
#include "rendlay.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -28,61 +30,6 @@
|
||||
//#include "hh_sm500_test.lh" // "
|
||||
|
||||
|
||||
class hh_sm510_state : public driver_device
|
||||
{
|
||||
public:
|
||||
hh_sm510_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_inp_lines(0),
|
||||
m_display_wait(33)
|
||||
{ }
|
||||
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_ioport_array<7> m_inp_matrix; // max 7
|
||||
output_finder<16, 16, 4> m_out_x;
|
||||
optional_device<speaker_sound_device> m_speaker;
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed inputs mask
|
||||
int m_inp_lines; // number of input mux columns
|
||||
u8 m_s; // MCU S output pins
|
||||
u8 m_r; // MCU R output pins
|
||||
|
||||
u8 read_inputs(int columns);
|
||||
|
||||
virtual void update_k_line();
|
||||
virtual DECLARE_INPUT_CHANGED_MEMBER(input_changed);
|
||||
virtual DECLARE_INPUT_CHANGED_MEMBER(acl_button);
|
||||
virtual DECLARE_WRITE16_MEMBER(sm510_lcd_segment_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(sm500_lcd_segment_w);
|
||||
virtual DECLARE_READ8_MEMBER(input_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(input_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(piezo_r1_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(piezo_r2_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(piezo_input_w);
|
||||
|
||||
// display common
|
||||
int m_display_wait; // lcd segment on/off-delay in milliseconds (default 33ms)
|
||||
u8 m_display_x_len; // lcd number of groups
|
||||
u8 m_display_y_len; // lcd number of segments
|
||||
u8 m_display_z_len; // lcd number of commons
|
||||
u32 m_display_state[0x20]; // lcd segment data (max. 5-bit offset)
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
void set_display_size(u8 x, u8 y, u8 z);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void hh_sm510_state::machine_start()
|
||||
@ -2335,46 +2282,35 @@ ROM_START( tsjam )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( rzindy500 )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD( "10_22", 0x0000, 0x1000, CRC(99a746d0) SHA1(64264499d45a566fa9a0801c20e7fa27eac18da6) )
|
||||
|
||||
ROM_REGION( 533414, "svg", 0)
|
||||
ROM_LOAD( "rzindy500.svg", 0, 533414, CRC(21c9bd2e) SHA1(549f079c5bd5883b21dc9b29b281a73728ed7827) )
|
||||
ROM_END
|
||||
// YEAR NAME PARENT COMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1989, kdribble, 0, 0, kdribble, kdribble, kdribble_state, 0, "Konami", "Double Dribble (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, ktopgun, 0, 0, ktopgun, ktopgun, ktopgun_state, 0, "Konami", "Top Gun (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kcontra, 0, 0, kcontra, kcontra, kcontra_state, 0, "Konami", "Contra (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, ktmnt, 0, 0, ktmnt, ktmnt, ktmnt_state, 0, "Konami", "Teenage Mutant Ninja Turtles (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kgradius, 0, 0, kgradius, kgradius, kgradius_state, 0, "Konami", "Gradius (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kloneran, 0, 0, kloneran, kloneran, kloneran_state, 0, "Konami", "Lone Ranger (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kblades, 0, 0, kblades, kblades, kblades_state, 0, "Konami", "Blades of Steel (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, knfl, 0, 0, knfl, knfl, knfl_state, 0, "Konami", "NFL Football (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kbilly, 0, 0, kbilly, kbilly, kbilly_state, 0, "Konami", "The Adventures of Bayou Billy (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1991, kbucky, 0, 0, kbucky, kbucky, kbucky_state, 0, "Konami", "Bucky O'Hare (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1991, kgarfld, 0, 0, kgarfld, kgarfld, kgarfld_state, 0, "Konami", "Garfield (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1981, gnw_mc25, 0, 0, mc25, mc25, mc25_state, 0, "Nintendo", "Game & Watch: Mickey Mouse", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1981, gnw_eg26, gnw_mc25, 0, eg26, mc25, mc25_state, 0, "Nintendo", "Game & Watch: Egg", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1984, nupogodi, gnw_mc25, 0, nupogodi, mc25, mc25_state, 0, "Elektronika", "Nu, pogodi!", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, exospace, gnw_mc25, 0, exospace, exospace, mc25_state, 0, "Elektronika", "Explorers of Space", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1982, gnw_dm53, 0, 0, dm53, dm53, dm53_state, 0, "Nintendo", "Game & Watch: Mickey & Donald", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, gnw_jr55, 0, 0, jr55, jr55, jr55_state, 0, "Nintendo", "Game & Watch: Donkey Kong II", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, gnw_mw56, 0, 0, mw56, mw56, mw56_state, 0, "Nintendo", "Game & Watch: Mario Bros.", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
// YEAR NAME PARENT COMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1989, kdribble, 0, 0, kdribble, kdribble, kdribble_state, 0, "Konami", "Double Dribble (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, ktopgun, 0, 0, ktopgun, ktopgun, ktopgun_state, 0, "Konami", "Top Gun (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kcontra, 0, 0, kcontra, kcontra, kcontra_state, 0, "Konami", "Contra (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, ktmnt, 0, 0, ktmnt, ktmnt, ktmnt_state, 0, "Konami", "Teenage Mutant Ninja Turtles (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kgradius, 0, 0, kgradius, kgradius, kgradius_state, 0, "Konami", "Gradius (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kloneran, 0, 0, kloneran, kloneran, kloneran_state, 0, "Konami", "Lone Ranger (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kblades, 0, 0, kblades, kblades, kblades_state, 0, "Konami", "Blades of Steel (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, knfl, 0, 0, knfl, knfl, knfl_state, 0, "Konami", "NFL Football (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, kbilly, 0, 0, kbilly, kbilly, kbilly_state, 0, "Konami", "The Adventures of Bayou Billy (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1991, kbucky, 0, 0, kbucky, kbucky, kbucky_state, 0, "Konami", "Bucky O'Hare (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1991, kgarfld, 0, 0, kgarfld, kgarfld, kgarfld_state, 0, "Konami", "Garfield (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1982, gnw_dj101, 0, 0, dj101, dj101, dj101_state, 0, "Nintendo", "Game & Watch: Donkey Kong Jr. (new wide screen)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, gnw_ml102, 0, 0, ml102, ml102, ml102_state, 0, "Nintendo", "Game & Watch: Mario's Cement Factory (new wide screen)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1981, gnw_mc25, 0, 0, mc25, mc25, mc25_state, 0, "Nintendo", "Game & Watch: Mickey Mouse", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1981, gnw_eg26, gnw_mc25, 0, eg26, mc25, mc25_state, 0, "Nintendo", "Game & Watch: Egg", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1984, nupogodi, gnw_mc25, 0, nupogodi, mc25, mc25_state, 0, "Elektronika", "Nu, pogodi!", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1989, exospace, gnw_mc25, 0, exospace, exospace, mc25_state, 0, "Elektronika", "Explorers of Space", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1984, gnw_bx301, 0, 0, bx301, bx301, bx301_state, 0, "Nintendo", "Game & Watch: Boxing", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1982, gnw_dm53, 0, 0, dm53, dm53, dm53_state, 0, "Nintendo", "Game & Watch: Mickey & Donald", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, gnw_jr55, 0, 0, jr55, jr55, jr55_state, 0, "Nintendo", "Game & Watch: Donkey Kong II", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, gnw_mw56, 0, 0, mw56, mw56, mw56_state, 0, "Nintendo", "Game & Watch: Mario Bros.", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1982, gnw_dj101, 0, 0, dj101, dj101, dj101_state, 0, "Nintendo", "Game & Watch: Donkey Kong Jr. (new wide screen)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, gnw_ml102, 0, 0, ml102, ml102, ml102_state, 0, "Nintendo", "Game & Watch: Mario's Cement Factory (new wide screen)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1984, gnw_bx301, 0, 0, bx301, bx301, bx301_state, 0, "Nintendo", "Game & Watch: Boxing", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1988, tgaunt, 0, 0, tgaunt, tgaunt, tgaunt_state, 0, "Tiger Electronics (licensed from Tengen)", "Gauntlet (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1988, tddragon, 0, 0, tddragon, tddragon, tddragon_state, 0, "Tiger Electronics (licensed from Tradewest/Technos)", "Double Dragon (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1991, tsonic, 0, 0, tsonic, tsonic, tsonic_state, 0, "Tiger Electronics (licensed from Sega)", "Sonic The Hedgehog (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1996, tsjam, 0, 0, tsjam, tsjam, tsjam_state, 0, "Tiger Electronics", "Space Jam (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1996, rzindy500, 0, 0, tsjam, tsjam, tsjam_state, 0, "Tiger Electronics (licensed from Sega)", "R-Zone: Indy 500", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
|
||||
CONS( 1988, tgaunt, 0, 0, tgaunt, tgaunt, tgaunt_state, 0, "Tiger Electronics (licensed from Tengen)", "Gauntlet (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1988, tddragon, 0, 0, tddragon, tddragon, tddragon_state, 0, "Tiger Electronics (licensed from Tradewest/Technos)", "Double Dragon (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1991, tsonic, 0, 0, tsonic, tsonic, tsonic_state, 0, "Tiger Electronics (licensed from Sega)", "Sonic The Hedgehog (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1996, tsjam, 0, 0, tsjam, tsjam, tsjam_state, 0, "Tiger Electronics", "Space Jam (handheld)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -72,6 +72,7 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "includes/hh_ucom4.h"
|
||||
#include "video/hlcd0515.h"
|
||||
#include "rendlay.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
235
src/mame/drivers/rzone.cpp
Normal file
235
src/mame/drivers/rzone.cpp
Normal file
@ -0,0 +1,235 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap, Sean Riddle
|
||||
/***************************************************************************
|
||||
|
||||
** subclass of hh_sm510_state (includes/hh_sm510.h, drivers/hh_sm510.cpp) **
|
||||
|
||||
Tiger R-Zone driver
|
||||
|
||||
This is a backwards console, the heart of the machine is the cartridge.
|
||||
|
||||
TODO:
|
||||
- x
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/hh_sm510.h"
|
||||
#include "cpu/sm510/sm510.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "rzone.lh"
|
||||
|
||||
class rzone_state : public hh_sm510_state
|
||||
{
|
||||
public:
|
||||
rzone_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: hh_sm510_state(mconfig, type, tag),
|
||||
m_led_out(*this, "led%u", 0U),
|
||||
m_led_off(*this, "led_off")
|
||||
{ }
|
||||
|
||||
output_finder<1> m_led_out;
|
||||
required_device<timer_device> m_led_off;
|
||||
|
||||
int m_led_pin;
|
||||
int m_sctrl;
|
||||
int m_sclock;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(led_off_callback) { m_led_out[0] = m_led_pin ? 1 : 0; }
|
||||
DECLARE_WRITE_LINE_MEMBER(led_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(audio_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(sctrl_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(sclock_w);
|
||||
DECLARE_READ_LINE_MEMBER(sdata_r);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(t1_write_r);
|
||||
DECLARE_WRITE8_MEMBER(t1_write_s);
|
||||
virtual DECLARE_READ8_MEMBER(input_r) override;
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
};
|
||||
|
||||
|
||||
// machine start
|
||||
|
||||
void rzone_state::machine_start()
|
||||
{
|
||||
hh_sm510_state::machine_start();
|
||||
|
||||
// resolve handlers
|
||||
m_led_out.resolve();
|
||||
|
||||
// zerofill
|
||||
m_led_pin = 0;
|
||||
m_sctrl = 0;
|
||||
m_sclock = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_led_pin));
|
||||
save_item(NAME(m_sctrl));
|
||||
save_item(NAME(m_sclock));
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
I/O
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// console
|
||||
|
||||
WRITE_LINE_MEMBER(rzone_state::led_w)
|
||||
{
|
||||
// LED: enable backlight
|
||||
if (state)
|
||||
m_led_out[0] = 1;
|
||||
|
||||
// delay led off to prevent flickering
|
||||
if (!state && m_led_pin)
|
||||
m_led_off->adjust(attotime::from_msec(30));
|
||||
|
||||
m_led_pin = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(rzone_state::audio_w)
|
||||
{
|
||||
// Audio: speaker out
|
||||
m_speaker->level_w(state ? 1 : 0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(rzone_state::sctrl_w)
|
||||
{
|
||||
// SCTRL: 74165 SH/LD: reload inputs while low
|
||||
if (!state || !m_sctrl)
|
||||
m_inp_mux = m_inp_matrix[0]->read();
|
||||
|
||||
m_sctrl = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(rzone_state::sclock_w)
|
||||
{
|
||||
// SCLOCK: 74165 CLK: shift inputs on rising edge when 74165 SH/LD is high
|
||||
if (m_sctrl && !m_sclock && state)
|
||||
m_inp_mux >>= 1;
|
||||
|
||||
m_sclock = state;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(rzone_state::sdata_r)
|
||||
{
|
||||
// SDATA: 74165 Q
|
||||
sctrl_w(m_sctrl); // reload inputs if needed
|
||||
return m_inp_mux & 1;
|
||||
}
|
||||
|
||||
|
||||
// cartridge type 1
|
||||
|
||||
WRITE8_MEMBER(rzone_state::t1_write_r)
|
||||
{
|
||||
// R1: Audio
|
||||
audio_w(data & 1);
|
||||
|
||||
// R2: SCTRL
|
||||
sctrl_w(data >> 1 & 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(rzone_state::t1_write_s)
|
||||
{
|
||||
// S1: LED
|
||||
led_w(data & 1);
|
||||
|
||||
// S2: SCLOCK
|
||||
sclock_w(data >> 1 & 1);
|
||||
}
|
||||
|
||||
READ8_MEMBER(rzone_state::input_r)
|
||||
{
|
||||
// K1: SDATA
|
||||
return sdata_r();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Inputs
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( rzone )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_POWER_ON ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // A
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // B
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) // C
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) // D
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_NAME("Sound")
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_SELECT )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_POWER_OFF )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Pause")
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_START )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Machine Config
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static MACHINE_CONFIG_START( rzindy500 )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", SM510, XTAL_32_768kHz) // no external XTAL
|
||||
MCFG_SM510_WRITE_SEGS_CB(WRITE16(hh_sm510_state, sm510_lcd_segment_w))
|
||||
MCFG_SM510_READ_K_CB(READ8(rzone_state, input_r))
|
||||
MCFG_SM510_WRITE_S_CB(WRITE8(rzone_state, t1_write_s))
|
||||
MCFG_SM510_WRITE_R_CB(WRITE8(rzone_state, t1_write_r))
|
||||
MCFG_SM510_R_DIRECT_CONTROL(true)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_SVG_ADD("screen", "svg")
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_SIZE(1425, 1080)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1425-1, 0, 1080-1)
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD("led_off", rzone_state, led_off_callback)
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_sm510_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_rzone)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Game driver(s)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( rzindy500 )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD( "10_22", 0x0000, 0x1000, CRC(99a746d0) SHA1(64264499d45a566fa9a0801c20e7fa27eac18da6) )
|
||||
|
||||
ROM_REGION( 533407, "svg", 0)
|
||||
ROM_LOAD( "rzindy500.svg", 0, 533407, CRC(07f72e35) SHA1(034972c1255f8899b53a94063d6c66bdef089ce9) )
|
||||
ROM_END
|
||||
|
||||
|
||||
// YEAR NAME PARENT COMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1995, rzindy500, 0, 0, rzindy500, rzone, rzone_state, 0, "Tiger Electronics (licensed from Sega)", "R-Zone: Indy 500", MACHINE_SUPPORTS_SAVE )
|
70
src/mame/includes/hh_sm510.h
Normal file
70
src/mame/includes/hh_sm510.h
Normal file
@ -0,0 +1,70 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/*
|
||||
|
||||
Sharp SM5xx family handhelds.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef MAME_INCLUDES_HH_SM510_H
|
||||
#define MAME_INCLUDES_HH_SM510_H
|
||||
|
||||
#include "sound/spkrdev.h"
|
||||
|
||||
|
||||
class hh_sm510_state : public driver_device
|
||||
{
|
||||
public:
|
||||
hh_sm510_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_inp_lines(0),
|
||||
m_display_wait(33)
|
||||
{ }
|
||||
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_ioport_array<7> m_inp_matrix; // max 7
|
||||
output_finder<16, 16, 4> m_out_x;
|
||||
optional_device<speaker_sound_device> m_speaker;
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed inputs mask
|
||||
int m_inp_lines; // number of input mux columns
|
||||
u8 m_s; // MCU S output pins
|
||||
u8 m_r; // MCU R output pins
|
||||
|
||||
u8 read_inputs(int columns);
|
||||
|
||||
virtual void update_k_line();
|
||||
virtual DECLARE_INPUT_CHANGED_MEMBER(input_changed);
|
||||
virtual DECLARE_INPUT_CHANGED_MEMBER(acl_button);
|
||||
virtual DECLARE_WRITE16_MEMBER(sm510_lcd_segment_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(sm500_lcd_segment_w);
|
||||
virtual DECLARE_READ8_MEMBER(input_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(input_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(piezo_r1_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(piezo_r2_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(piezo_input_w);
|
||||
|
||||
// display common
|
||||
int m_display_wait; // lcd segment on/off-delay in milliseconds (default 33ms)
|
||||
u8 m_display_x_len; // lcd number of groups
|
||||
u8 m_display_y_len; // lcd number of segments
|
||||
u8 m_display_z_len; // lcd number of commons
|
||||
u32 m_display_state[0x20]; // lcd segment data (max. 5-bit offset)
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
void set_display_size(u8 x, u8 y, u8 z);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_HH_SM510_H
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:hap
|
||||
/*
|
||||
|
||||
NEC uCOM4 MCU tabletops/handhelds or other simple devices,
|
||||
NEC uCOM4 MCU tabletops/handhelds or other simple devices.
|
||||
|
||||
*/
|
||||
|
||||
@ -12,8 +12,6 @@
|
||||
#include "cpu/ucom4/ucom4.h"
|
||||
#include "sound/spkrdev.h"
|
||||
|
||||
#include "rendlay.h"
|
||||
|
||||
|
||||
class hh_ucom4_state : public driver_device
|
||||
{
|
||||
|
21
src/mame/layout/rzone.lay
Normal file
21
src/mame/layout/rzone.lay
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="static_red"><rect><color red="1.0" green="0.2" blue="0.23" /></rect></element>
|
||||
|
||||
<element name="led" defstate="0">
|
||||
<rect state="0"><color red="0" green="0" blue="0" /></rect>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<screen index="0"><bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" /></screen>
|
||||
<overlay element="static_red"><bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" /></overlay>
|
||||
<bezel name="led0" element="led"><bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" /></bezel>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
@ -14625,7 +14625,6 @@ knfl // Konami
|
||||
ktmnt // Konami
|
||||
ktopgun // Konami
|
||||
nupogodi // Elektronika
|
||||
rzindy500 // Tiger
|
||||
tddragon // Tiger
|
||||
tgaunt // Tiger
|
||||
tsjam // Tiger
|
||||
@ -32482,6 +32481,9 @@ rvoicepc //
|
||||
@source:rx78.cpp
|
||||
rx78 //
|
||||
|
||||
@source:rzone.cpp
|
||||
rzindy500 //
|
||||
|
||||
@source:s11.cpp
|
||||
gmine_l2 //
|
||||
grand_l3 //
|
||||
|
@ -550,6 +550,7 @@ rsc55.cpp
|
||||
rt1715.cpp
|
||||
rvoice.cpp
|
||||
rx78.cpp
|
||||
rzone.cpp
|
||||
sacstate.cpp
|
||||
sage2.cpp
|
||||
samcoupe.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user