From 7cfa4f95bf92fa4912655f2ffb52d50aecb6f55d Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 3 Oct 2012 16:29:31 +0000 Subject: [PATCH] FIREBIRD - more wip --- .gitattributes | 1 + src/mame/drivers/nsm.c | 72 +++++++++++++++-- src/mame/layout/nsm.lay | 173 ++++++++++++++++++++++++++++++++++++++++ src/mame/mame.mak | 2 + 4 files changed, 242 insertions(+), 6 deletions(-) create mode 100644 src/mame/layout/nsm.lay diff --git a/.gitattributes b/.gitattributes index db16a655aaf..839ceab5b35 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4363,6 +4363,7 @@ src/mame/layout/neogeo.lay svneol=native#text/plain src/mame/layout/noraut11.lay svneol=native#text/plain src/mame/layout/noraut12.lay svneol=native#text/plain src/mame/layout/novoplay.lay svneol=native#text/plain +src/mame/layout/nsm.lay svneol=native#text/plain src/mame/layout/outrun.lay svneol=native#text/plain src/mame/layout/overdriv.lay svneol=native#text/plain src/mame/layout/paradice.lay svneol=native#text/plain diff --git a/src/mame/drivers/nsm.c b/src/mame/drivers/nsm.c index cb3027b51f3..94ca370c179 100644 --- a/src/mame/drivers/nsm.c +++ b/src/mame/drivers/nsm.c @@ -3,12 +3,20 @@ Pinball NSM (Lowen) : Hot Fire Birds + Schematic and PinMAME used as references + + Everything in this machine is controlled by a serial bus based on the + processor's CRU pins (serial i/o). It needs a T.I. specialist to get this + working. + *********************************************************************************/ #include "emu.h" #include "cpu/tms9900/tms9900l.h" #include "sound/ay8910.h" #include "machine/nvram.h" +#include "nsm.lh" + class nsm_state : public driver_device { @@ -19,6 +27,8 @@ public: { } DECLARE_READ8_MEMBER(ff_r); + DECLARE_WRITE8_MEMBER(cru_w); + DECLARE_WRITE8_MEMBER(oe_w); protected: // devices @@ -26,6 +36,9 @@ protected: // driver_device overrides virtual void machine_reset(); +private: + UINT8 m_cru_data[9]; + UINT8 m_cru_count; public: DECLARE_DRIVER_INIT(nsm); }; @@ -41,18 +54,62 @@ static ADDRESS_MAP_START( nsm_map, AS_PROGRAM, 8, nsm_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( nsm_io_map, AS_IO, 8, nsm_state ) - AM_RANGE(0x0000, 0x0001) AM_READ(ff_r) - AM_RANGE(0x0010, 0x0011) AM_READNOP - AM_RANGE(0x0060, 0x0061) AM_READNOP + // 00-71 selected by IC600 (74LS151) + AM_RANGE(0x0000, 0x0001) AM_READ(ff_r) // 5v supply + AM_RANGE(0x0010, 0x0011) AM_READNOP // antenna + AM_RANGE(0x0020, 0x0021) AM_READNOP // reset circuit + AM_RANGE(0x0030, 0x0031) AM_READ(ff_r) // service plug + AM_RANGE(0x0040, 0x0041) AM_READ(ff_r) // service plug + AM_RANGE(0x0050, 0x0051) AM_READ(ff_r) // test of internal battery + AM_RANGE(0x0060, 0x0061) AM_READ(ff_r) // sum of analog outputs of ay2 + AM_RANGE(0x0070, 0x0071) AM_READNOP // serial data in AM_RANGE(0x0f70, 0x0f7d) AM_WRITENOP AM_RANGE(0x0fe4, 0x0fff) AM_READNOP - AM_RANGE(0x7f80, 0x7fd1) AM_WRITENOP + AM_RANGE(0x7fb0, 0x7fbf) AM_WRITE(cru_w) + AM_RANGE(0x7fd0, 0x7fd1) AM_WRITE(oe_w) ADDRESS_MAP_END static INPUT_PORTS_START( nsm ) INPUT_PORTS_END -READ8_MEMBER( nsm_state::ff_r ) { return 0xff; } +READ8_MEMBER( nsm_state::ff_r ) { return 1; } + +WRITE8_MEMBER( nsm_state::oe_w ) +{ + m_cru_count = 0; +} + +WRITE8_MEMBER( nsm_state::cru_w ) +{ + UINT8 i,j; + int segments; + for (i = 1; i < 9;i++) + m_cru_data[i] = (m_cru_data[i] >> 1) | (BIT(m_cru_data[i-1], 0) ? 0x80 : 0); + + m_cru_data[0] = (m_cru_data[0] >> 1) | (BIT(data, 0) ? 0x80 : 0); + + m_cru_count++; + + if (m_cru_count == 72) + { + m_cru_count = 0; + //for (i = 0; i < 8; i++) printf("%02X ",m_cru_data[i]);printf("\n"); + for (i = 0; i < 8; i++) + { + if (BIT(m_cru_data[0], i)) + { + for (j = 0; j < 5; j++) + { + segments = m_cru_data[8-j]^0xff; + output_set_digit_value(j * 10 + i, BITSWAP16(segments, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 4, 3, 2, 1, 0)); + } + } + } + } +} + + + void nsm_state::machine_reset() { @@ -68,6 +125,9 @@ static MACHINE_CONFIG_START( nsm, nsm_state ) MCFG_CPU_PROGRAM_MAP(nsm_map) MCFG_CPU_IO_MAP(nsm_io_map) + /* Video */ + MCFG_DEFAULT_LAYOUT(layout_nsm) + /* Sound */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("ay1", AY8912, 11052000/8) @@ -98,4 +158,4 @@ ROM_END / The Games (1985) /-------------------------------------------------------------------*/ -GAME(1985, firebird, 0, nsm, nsm, nsm_state, nsm, ROT0, "NSM", "Hot Fire Birds", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_MECHANICAL) +GAME(1985, firebird, 0, nsm, nsm, nsm_state, nsm, ROT0, "NSM", "Hot Fire Birds", GAME_NOT_WORKING | GAME_MECHANICAL) diff --git a/src/mame/layout/nsm.lay b/src/mame/layout/nsm.lay new file mode 100644 index 00000000000..a9f8a018fb6 --- /dev/null +++ b/src/mame/layout/nsm.lay @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.mak b/src/mame/mame.mak index f38f55ce03e..5d079682bac 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -2158,6 +2158,8 @@ $(DRIVERS)/neogeo.o: $(LAYOUT)/neogeo.lh $(DRIVERS)/norautp.o: $(LAYOUT)/noraut11.lh \ $(LAYOUT)/noraut12.lh +$(DRIVERS)/nsm.o: $(LAYOUT)/nsm.lh + $(DRIVERS)/overdriv.o: $(LAYOUT)/overdriv.lh $(DRIVERS)/peplus.o: $(LAYOUT)/peplus.lh \