summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/nb1413m3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/nb1413m3.c')
-rw-r--r--src/mame/machine/nb1413m3.c708
1 files changed, 708 insertions, 0 deletions
diff --git a/src/mame/machine/nb1413m3.c b/src/mame/machine/nb1413m3.c
new file mode 100644
index 00000000000..1b45a3ab7ba
--- /dev/null
+++ b/src/mame/machine/nb1413m3.c
@@ -0,0 +1,708 @@
+/******************************************************************************
+
+ Machine Hardware for Nichibutsu Mahjong series.
+
+ Driver by Takahiro Nogi <nogi@kt.rim.or.jp> 1999/11/05 -
+
+******************************************************************************/
+/******************************************************************************
+Memo:
+
+******************************************************************************/
+
+#include "driver.h"
+#include "cpu/z80/z80.h"
+#include "nb1413m3.h"
+
+
+#define NB1413M3_DEBUG 0
+#define NB1413M3_CHEAT 0
+
+
+int nb1413m3_type;
+int nb1413m3_sndromregion;
+int nb1413m3_sndrombank1;
+int nb1413m3_sndrombank2;
+int nb1413m3_busyctr;
+int nb1413m3_busyflag;
+int nb1413m3_inputport;
+UINT8 *nb1413m3_nvram;
+size_t nb1413m3_nvram_size;
+
+static int nb1413m3_74ls193_counter;
+static int nb1413m3_nmi_count; // for debug
+static int nb1413m3_nmi_clock;
+static int nb1413m3_nmi_enable;
+static int nb1413m3_counter;
+static int nb1413m3_gfxradr_l;
+static int nb1413m3_gfxradr_h;
+static int nb1413m3_gfxrombank;
+static int nb1413m3_outcoin_enable;
+static int nb1413m3_outcoin_flag;
+
+
+#define NB1413M3_TIMER_BASE 20000000
+static TIMER_CALLBACK( nb1413m3_timer_callback )
+{
+ timer_set(attotime_mul(ATTOTIME_IN_HZ(NB1413M3_TIMER_BASE), 256), 0, nb1413m3_timer_callback);
+
+ nb1413m3_74ls193_counter++;
+ nb1413m3_74ls193_counter &= 0x0f;
+
+ if (nb1413m3_74ls193_counter == 0x0f)
+ {
+
+ if (nb1413m3_nmi_enable)
+ {
+ cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE);
+ nb1413m3_nmi_count++;
+ }
+
+#if 1
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_TAIWANMB:
+ nb1413m3_74ls193_counter = 0x05; // 130 ???
+ break;
+ case NB1413M3_OMOTESND:
+ nb1413m3_74ls193_counter = 0x05; // 130 ???
+ break;
+ case NB1413M3_PASTELG:
+ nb1413m3_74ls193_counter = 0x02; // 96 ???
+ break;
+ case NB1413M3_HYHOO:
+ case NB1413M3_HYHOO2:
+ nb1413m3_74ls193_counter = 0x05; // 128 ???
+ break;
+ }
+#endif
+ }
+
+#if 0
+ // nbmj1413m3_nmi_clock_w ?w??
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8688 Z80:5.00MHz (20000000/4)
+ // 7 144-145 mjsikaku, mjsikakb, otonano, mjcamera
+
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8891 Z80:5.00MHz (20000000/4)
+ // 7 144-145 msjiken, telmahjn, mjcamerb, mmcamera
+
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8688 Z80:5.00MHz (20000000/4)
+ // 6 130-131 kaguya, kaguya2, idhimitu
+
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8891 Z80:5.00MHz (20000000/4)
+ // 6 130-131 hanamomo, gionbana, mgion, abunai, mjfocus, mjfocusm, peepshow, scandal, scandalm, mgmen89,
+ // mjnanpas, mjnanpaa, mjnanpau, bananadr, mladyhtr, chinmoku, club90s, club90sa, lovehous,
+ // maiko, mmaiko, hanaoji, pairsten
+
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8991 Z80:5MHz (25000000/5)
+ // 6 130-131 galkoku, hyouban, galkaika, tokyogal, tokimbsj, mcontest, uchuuai
+
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8688 Z80:5.00MHz (20000000/4)
+ // 6 81- 82 crystalg(DAC?????x??), crystal2(DAC?????x??)
+ // 6 130-131 bijokkoy(?A?j????), bijokkog(?A?j????)
+
+ // ----------------------------------------------------------------------------------------------------------------
+ // nbmj8688 Z80:5.00MHz (20000000/4)
+ // 4 108-109 bijokkoy(?A?j????), bijokkog(?A?j????)
+
+ // ----------------------------------------------------------------------------------------------------------------
+
+ // nbmj1413m3_nmi_clock_w ???w??
+ //*5 130-131? hyhoo, hyhoo2 5.00MHz (????????DAC???????x???????????c)
+ //*5 130-131? taiwanmb 5.00MHz (???@??????????DAC???????x?s??)
+ //*5 128-129? omotesnd 5.00MHz
+ //*2 100-101? pastelg 2.496MHz (19968000/8) ???
+#endif
+}
+
+MACHINE_RESET( nb1413m3 )
+{
+ nb1413m3_nmi_clock = 0;
+ nb1413m3_nmi_enable = 0;
+ nb1413m3_nmi_count = 0;
+ nb1413m3_74ls193_counter = 0;
+ nb1413m3_counter = 0;
+ nb1413m3_sndromregion = REGION_SOUND1;
+ nb1413m3_sndrombank1 = 0;
+ nb1413m3_sndrombank2 = 0;
+ nb1413m3_busyctr = 0;
+ nb1413m3_busyflag = 1;
+ nb1413m3_gfxradr_l = 0;
+ nb1413m3_gfxradr_h = 0;
+ nb1413m3_gfxrombank = 0;
+ nb1413m3_inputport = 0xff;
+ nb1413m3_outcoin_flag = 1;
+
+ nb1413m3_74ls193_counter = 0;
+
+ timer_call_after_resynch(0, nb1413m3_timer_callback);
+}
+
+WRITE8_HANDLER( nb1413m3_nmi_clock_w )
+{
+ nb1413m3_nmi_clock = data;
+
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_APPAREL:
+ case NB1413M3_CITYLOVE:
+ case NB1413M3_MCITYLOV:
+ case NB1413M3_SECOLOVE:
+ case NB1413M3_SEIHA:
+ case NB1413M3_SEIHAM:
+ case NB1413M3_IEMOTO:
+ case NB1413M3_IEMOTOM:
+ case NB1413M3_BIJOKKOY:
+ case NB1413M3_BIJOKKOG:
+ case NB1413M3_RYUUHA:
+ case NB1413M3_OJOUSAN:
+ case NB1413M3_OJOUSANM:
+ case NB1413M3_KORINAI:
+ case NB1413M3_KORINAIM:
+ case NB1413M3_HOUSEMNQ:
+ case NB1413M3_HOUSEMN2:
+ case NB1413M3_LIVEGAL:
+ case NB1413M3_ORANGEC:
+ case NB1413M3_ORANGECI:
+ case NB1413M3_VIPCLUB:
+ case NB1413M3_MMSIKAKU:
+ case NB1413M3_KANATUEN:
+ case NB1413M3_KYUHITO:
+ nb1413m3_nmi_clock -= 1;
+ break;
+#if 1
+ case NB1413M3_NIGHTLOV:
+ nb1413m3_nmi_enable = ((data & 0x08) >> 3);
+ nb1413m3_nmi_enable |= ((data & 0x01) ^ 0x01);
+ nb1413m3_nmi_clock -= 1;
+
+ nb1413m3_sndrombank1 = 1;
+ break;
+#endif
+ }
+
+ nb1413m3_74ls193_counter = ((nb1413m3_nmi_clock & 0xf0) >> 4);
+
+}
+
+INTERRUPT_GEN( nb1413m3_interrupt )
+{
+#if 0
+ if (!cpu_getiloops())
+ {
+// nb1413m3_busyflag = 1;
+// nb1413m3_busyctr = 0;
+ cpunum_set_input_line(0, 0, HOLD_LINE);
+ }
+ if (nb1413m3_nmi_enable)
+ {
+ cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE);
+ }
+
+ #if NB1413M3_CHEAT
+ #include "nbmjchet.inc"
+ #endif
+#else
+// nb1413m3_busyflag = 1;
+// nb1413m3_busyctr = 0;
+ cpunum_set_input_line(0, 0, HOLD_LINE);
+
+#if NB1413M3_DEBUG
+ popmessage("NMI SW:%01X CLOCK:%02X COUNT:%02X", nb1413m3_nmi_enable, nb1413m3_nmi_clock, nb1413m3_nmi_count);
+ nb1413m3_nmi_count = 0;
+#endif
+
+ #if NB1413M3_CHEAT
+ #include "nbmjchet.inc"
+ #endif
+#endif
+}
+
+NVRAM_HANDLER( nb1413m3 )
+{
+ if (read_or_write)
+ mame_fwrite(file, nb1413m3_nvram, nb1413m3_nvram_size);
+ else
+ {
+ if (file)
+ mame_fread(file, nb1413m3_nvram, nb1413m3_nvram_size);
+ else
+ memset(nb1413m3_nvram, 0, nb1413m3_nvram_size);
+ }
+}
+
+READ8_HANDLER( nb1413m3_sndrom_r )
+{
+ int rombank;
+
+ /* get top 8 bits of the I/O port address */
+ offset = (offset << 8) | (activecpu_get_reg(Z80_BC) >> 8);
+
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_IEMOTO:
+ case NB1413M3_IEMOTOM:
+ case NB1413M3_SEIHA:
+ case NB1413M3_SEIHAM:
+ case NB1413M3_RYUUHA:
+ case NB1413M3_OJOUSAN:
+ case NB1413M3_OJOUSANM:
+ case NB1413M3_MJSIKAKU:
+ case NB1413M3_MMSIKAKU:
+ case NB1413M3_KORINAI:
+ case NB1413M3_KORINAIM:
+ rombank = (nb1413m3_sndrombank2 << 1) + (nb1413m3_sndrombank1 & 0x01);
+ break;
+ case NB1413M3_HYHOO:
+ case NB1413M3_HYHOO2:
+ rombank = (nb1413m3_sndrombank1 & 0x01);
+ break;
+ case NB1413M3_APPAREL: // no samples
+ case NB1413M3_NIGHTLOV: // 0-1
+ case NB1413M3_SECOLOVE: // 0-1
+ case NB1413M3_CITYLOVE: // 0-1
+ case NB1413M3_MCITYLOV: // 0-1
+ case NB1413M3_HOUSEMNQ: // 0-1
+ case NB1413M3_HOUSEMN2: // 0-1
+ case NB1413M3_LIVEGAL: // 0-1
+ case NB1413M3_ORANGEC: // 0-1
+ case NB1413M3_KAGUYA: // 0-3
+ case NB1413M3_KAGUYA2: // 0-3 + 4-5 for protection
+ case NB1413M3_BIJOKKOY: // 0-7
+ case NB1413M3_BIJOKKOG: // 0-7
+ case NB1413M3_OTONANO: // 0-7
+ case NB1413M3_MJCAMERA: // 0 + 4-5 for protection
+ case NB1413M3_IDHIMITU: // 0 + 4-5 for protection
+ case NB1413M3_KANATUEN: // 0 + 6 for protection
+ rombank = nb1413m3_sndrombank1;
+ break;
+ case NB1413M3_TAIWANMB:
+ case NB1413M3_OMOTESND:
+ case NB1413M3_SCANDAL:
+ case NB1413M3_SCANDALM:
+ case NB1413M3_MJFOCUSM:
+ case NB1413M3_BANANADR:
+ offset = (((offset & 0x7f00) >> 8) | ((offset & 0x0080) >> 0) | ((offset & 0x007f) << 8));
+ rombank = (nb1413m3_sndrombank1 >> 1);
+ break;
+ case NB1413M3_MMCAMERA:
+ case NB1413M3_MSJIKEN:
+ case NB1413M3_HANAMOMO:
+ case NB1413M3_TELMAHJN:
+ case NB1413M3_GIONBANA:
+ case NB1413M3_MGION:
+ case NB1413M3_MGMEN89:
+ case NB1413M3_MJFOCUS:
+ case NB1413M3_GALKOKU:
+ case NB1413M3_HYOUBAN:
+ case NB1413M3_MJNANPAS:
+ case NB1413M3_MLADYHTR:
+ case NB1413M3_CLUB90S:
+ case NB1413M3_LOVEHOUS:
+ case NB1413M3_CHINMOKU:
+ case NB1413M3_GALKAIKA:
+ case NB1413M3_MCONTEST:
+ case NB1413M3_UCHUUAI:
+ case NB1413M3_TOKIMBSJ:
+ case NB1413M3_TOKYOGAL:
+ case NB1413M3_MAIKO:
+ case NB1413M3_MMAIKO:
+ case NB1413M3_HANAOJI:
+ case NB1413M3_PAIRSNB:
+ case NB1413M3_PAIRSTEN:
+ default:
+ rombank = (nb1413m3_sndrombank1 >> 1);
+ break;
+ }
+
+ offset += 0x08000 * rombank;
+
+#if NB1413M3_DEBUG
+ popmessage("Sound ROM %02X:%05X [B1:%02X B2:%02X]", rombank, offset, nb1413m3_sndrombank1, nb1413m3_sndrombank2);
+#endif
+
+ if (offset < memory_region_length(nb1413m3_sndromregion))
+ return memory_region(nb1413m3_sndromregion)[offset];
+ else
+ {
+ popmessage("read past sound ROM length (%05x[%02X])",offset, rombank);
+ return 0;
+ }
+}
+
+WRITE8_HANDLER( nb1413m3_sndrombank1_w )
+{
+ // if (data & 0x02) coin counter ?
+ nb1413m3_outcoin_w(0, data); // (data & 0x04) >> 2;
+ nb1413m3_nmi_enable = ((data & 0x20) >> 5);
+ nb1413m3_sndrombank1 = (((data & 0xc0) >> 5) | ((data & 0x10) >> 4));
+}
+
+WRITE8_HANDLER( nb1413m3_sndrombank2_w )
+{
+ nb1413m3_sndrombank2 = (data & 0x03);
+}
+
+READ8_HANDLER( nb1413m3_gfxrom_r )
+{
+ UINT8 *GFXROM = memory_region(REGION_GFX1);
+
+ return GFXROM[(0x20000 * (nb1413m3_gfxrombank | ((nb1413m3_sndrombank1 & 0x02) << 3))) + ((0x0200 * nb1413m3_gfxradr_h) + (0x0002 * nb1413m3_gfxradr_l)) + (offset & 0x01)];
+}
+
+WRITE8_HANDLER( nb1413m3_gfxrombank_w )
+{
+ nb1413m3_gfxrombank = (((data & 0xc0) >> 4) + (data & 0x03));
+}
+
+WRITE8_HANDLER( nb1413m3_gfxradr_l_w )
+{
+ nb1413m3_gfxradr_l = data;
+}
+
+WRITE8_HANDLER( nb1413m3_gfxradr_h_w )
+{
+ nb1413m3_gfxradr_h = data;
+}
+
+WRITE8_HANDLER( nb1413m3_inputportsel_w )
+{
+ nb1413m3_inputport = data;
+}
+
+READ8_HANDLER( nb1413m3_inputport0_r )
+{
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_PASTELG:
+ return ((input_port_3_r(0) & 0xfe) | (nb1413m3_busyflag & 0x01));
+ case NB1413M3_TAIWANMB:
+ return ((input_port_3_r(0) & 0xfc) | ((nb1413m3_outcoin_flag & 0x01) << 1) | (nb1413m3_busyflag & 0x01));
+ case NB1413M3_HYHOO:
+ case NB1413M3_HYHOO2:
+ return ((input_port_2_r(0) & 0xfe) | (nb1413m3_busyflag & 0x01));
+ default:
+ return ((input_port_2_r(0) & 0xfc) | ((nb1413m3_outcoin_flag & 0x01) << 1) | (nb1413m3_busyflag & 0x01));
+ }
+}
+
+READ8_HANDLER( nb1413m3_inputport1_r )
+{
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_PASTELG:
+ case NB1413M3_THREEDS:
+ case NB1413M3_TAIWANMB:
+ switch ((nb1413m3_inputport ^ 0xff) & 0x1f)
+ {
+ case 0x01: return readinputport(4);
+ case 0x02: return readinputport(5);
+ case 0x04: return readinputport(6);
+ case 0x08: return readinputport(7);
+ case 0x10: return readinputport(8);
+ default: return (readinputport(4) & readinputport(5) & readinputport(6) & readinputport(7) & readinputport(8));
+ }
+ break;
+ case NB1413M3_HYHOO:
+ case NB1413M3_HYHOO2:
+ switch ((nb1413m3_inputport ^ 0xff) & 0x07)
+ {
+ case 0x01: return readinputport(3);
+ case 0x02: return readinputport(4);
+ case 0x04: return 0xff;
+ default: return 0xff;
+ }
+ break;
+ case NB1413M3_MSJIKEN:
+ case NB1413M3_TELMAHJN:
+ if (readinputport(0) & 0x80)
+ {
+ switch ((nb1413m3_inputport ^ 0xff) & 0x1f)
+ {
+ case 0x01: return readinputport(3);
+ case 0x02: return readinputport(4);
+ case 0x04: return readinputport(5);
+ case 0x08: return readinputport(6);
+ case 0x10: return readinputport(7);
+ default: return (readinputport(3) & readinputport(4) & readinputport(5) & readinputport(6) & readinputport(7));
+ }
+ }
+ else return readinputport(14);
+ break;
+ case NB1413M3_PAIRSNB:
+ case NB1413M3_PAIRSTEN:
+ return readinputport(3);
+ break;
+ default:
+ switch ((nb1413m3_inputport ^ 0xff) & 0x1f)
+ {
+ case 0x01: return readinputport(3);
+ case 0x02: return readinputport(4);
+ case 0x04: return readinputport(5);
+ case 0x08: return readinputport(6);
+ case 0x10: return readinputport(7);
+ default: return (readinputport(3) & readinputport(4) & readinputport(5) & readinputport(6) & readinputport(7));
+ }
+ break;
+ }
+}
+
+READ8_HANDLER( nb1413m3_inputport2_r )
+{
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_PASTELG:
+ case NB1413M3_THREEDS:
+ case NB1413M3_TAIWANMB:
+ switch ((nb1413m3_inputport ^ 0xff) & 0x1f)
+ {
+ case 0x01: return readinputport(9);
+ case 0x02: return readinputport(10);
+ case 0x04: return readinputport(11);
+ case 0x08: return readinputport(12);
+ case 0x10: return readinputport(13);
+ default: return (readinputport(9) & readinputport(10) & readinputport(11) & readinputport(12) & readinputport(13));
+ }
+ break;
+ case NB1413M3_HYHOO:
+ case NB1413M3_HYHOO2:
+ switch ((nb1413m3_inputport ^ 0xff) & 0x07)
+ {
+ case 0x01: return 0xff;
+ case 0x02: return 0xff;
+ case 0x04: return readinputport(5);
+ default: return 0xff;
+ }
+ break;
+ case NB1413M3_MSJIKEN:
+ case NB1413M3_TELMAHJN:
+ if (readinputport(0) & 0x80)
+ {
+ switch ((nb1413m3_inputport ^ 0xff) & 0x1f)
+ {
+ case 0x01: return readinputport(8);
+ case 0x02: return readinputport(9);
+ case 0x04: return readinputport(10);
+ case 0x08: return readinputport(11);
+ case 0x10: return readinputport(12);
+ default: return (readinputport(8) & readinputport(9) & readinputport(10) & readinputport(11) & readinputport(12));
+ }
+ }
+ else return readinputport(13);
+ break;
+ case NB1413M3_PAIRSNB:
+ case NB1413M3_PAIRSTEN:
+ return readinputport(4);
+ break;
+ default:
+ switch ((nb1413m3_inputport ^ 0xff) & 0x1f)
+ {
+ case 0x01: return readinputport(8);
+ case 0x02: return readinputport(9);
+ case 0x04: return readinputport(10);
+ case 0x08: return readinputport(11);
+ case 0x10: return readinputport(12);
+ default: return (readinputport(8) & readinputport(9) & readinputport(10) & readinputport(11) & readinputport(12));
+ }
+ break;
+ }
+}
+
+READ8_HANDLER( nb1413m3_inputport3_r )
+{
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_TAIWANMB:
+ case NB1413M3_IEMOTOM:
+ case NB1413M3_OJOUSANM:
+ case NB1413M3_SEIHAM:
+ case NB1413M3_RYUUHA:
+ case NB1413M3_KORINAIM:
+ case NB1413M3_HYOUBAN:
+ case NB1413M3_TOKIMBSJ:
+ case NB1413M3_MJFOCUSM:
+ case NB1413M3_SCANDALM:
+ case NB1413M3_BANANADR:
+ case NB1413M3_FINALBNY:
+ case NB1413M3_MMSIKAKU:
+ return ((nb1413m3_outcoin_flag & 0x01) << 1);
+ break;
+ case NB1413M3_LOVEHOUS:
+ case NB1413M3_MAIKO:
+ case NB1413M3_MMAIKO:
+ case NB1413M3_HANAOJI:
+ return ((input_port_13_r(0) & 0xfd) | ((nb1413m3_outcoin_flag & 0x01) << 1));
+ break;
+ default:
+ return 0xff;
+ break;
+ }
+}
+
+READ8_HANDLER( nb1413m3_dipsw1_r )
+{
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_KANATUEN:
+ case NB1413M3_KYUHITO:
+ return readinputport(1);
+ break;
+ case NB1413M3_TAIWANMB:
+ return ((readinputport(0) & 0xf0) | ((readinputport(1) & 0xf0) >> 4));
+ break;
+ case NB1413M3_OTONANO:
+ case NB1413M3_MJCAMERA:
+ case NB1413M3_IDHIMITU:
+ case NB1413M3_KAGUYA2:
+ return (((readinputport(0) & 0x0f) << 4) | (readinputport(1) & 0x0f));
+ break;
+ case NB1413M3_SCANDAL:
+ case NB1413M3_SCANDALM:
+ case NB1413M3_MJFOCUSM:
+ case NB1413M3_GALKOKU:
+ case NB1413M3_HYOUBAN:
+ case NB1413M3_GALKAIKA:
+ case NB1413M3_MCONTEST:
+ case NB1413M3_UCHUUAI:
+ case NB1413M3_TOKIMBSJ:
+ case NB1413M3_TOKYOGAL:
+ return ((readinputport(0) & 0x0f) | ((readinputport(1) & 0x0f) << 4));
+ break;
+ case NB1413M3_TRIPLEW1:
+ case NB1413M3_NTOPSTAR:
+ case NB1413M3_PSTADIUM:
+ case NB1413M3_TRIPLEW2:
+ case NB1413M3_VANILLA:
+ case NB1413M3_FINALBNY:
+ case NB1413M3_MJLSTORY:
+ case NB1413M3_QMHAYAKU:
+ case NB1413M3_MJGOTTUB:
+ return (((readinputport(1) & 0x01) >> 0) | ((readinputport(1) & 0x04) >> 1) |
+ ((readinputport(1) & 0x10) >> 2) | ((readinputport(1) & 0x40) >> 3) |
+ ((readinputport(0) & 0x01) << 4) | ((readinputport(0) & 0x04) << 3) |
+ ((readinputport(0) & 0x10) << 2) | ((readinputport(0) & 0x40) << 1));
+ break;
+ default:
+ return readinputport(0);
+ break;
+ }
+}
+
+READ8_HANDLER( nb1413m3_dipsw2_r )
+{
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_KANATUEN:
+ case NB1413M3_KYUHITO:
+ return readinputport(0);
+ break;
+ case NB1413M3_TAIWANMB:
+ return (((readinputport(0) & 0x0f) << 4) | (readinputport(1) & 0x0f));
+ break;
+ case NB1413M3_OTONANO:
+ case NB1413M3_MJCAMERA:
+ case NB1413M3_IDHIMITU:
+ case NB1413M3_KAGUYA2:
+ return ((readinputport(0) & 0xf0) | ((readinputport(1) & 0xf0) >> 4));
+ break;
+ case NB1413M3_SCANDAL:
+ case NB1413M3_SCANDALM:
+ case NB1413M3_MJFOCUSM:
+ case NB1413M3_GALKOKU:
+ case NB1413M3_HYOUBAN:
+ case NB1413M3_GALKAIKA:
+ case NB1413M3_MCONTEST:
+ case NB1413M3_UCHUUAI:
+ case NB1413M3_TOKIMBSJ:
+ case NB1413M3_TOKYOGAL:
+ return (((readinputport(0) & 0xf0) >> 4) | (readinputport(1) & 0xf0));
+ break;
+ case NB1413M3_TRIPLEW1:
+ case NB1413M3_NTOPSTAR:
+ case NB1413M3_PSTADIUM:
+ case NB1413M3_TRIPLEW2:
+ case NB1413M3_VANILLA:
+ case NB1413M3_FINALBNY:
+ case NB1413M3_MJLSTORY:
+ case NB1413M3_QMHAYAKU:
+ case NB1413M3_MJGOTTUB:
+ return (((readinputport(1) & 0x02) >> 1) | ((readinputport(1) & 0x08) >> 2) |
+ ((readinputport(1) & 0x20) >> 3) | ((readinputport(1) & 0x80) >> 4) |
+ ((readinputport(0) & 0x02) << 3) | ((readinputport(0) & 0x08) << 2) |
+ ((readinputport(0) & 0x20) << 1) | ((readinputport(0) & 0x80) << 0));
+ break;
+ default:
+ return readinputport(1);
+ break;
+ }
+}
+
+READ8_HANDLER( nb1413m3_dipsw3_l_r )
+{
+ return ((readinputport(2) & 0xf0) >> 4);
+}
+
+READ8_HANDLER( nb1413m3_dipsw3_h_r )
+{
+ return ((readinputport(2) & 0x0f) >> 0);
+}
+
+WRITE8_HANDLER( nb1413m3_outcoin_w )
+{
+ static int counter = 0;
+
+ nb1413m3_outcoin_enable = (data & 0x04) >> 2;
+
+ switch (nb1413m3_type)
+ {
+ case NB1413M3_TAIWANMB:
+ case NB1413M3_IEMOTOM:
+ case NB1413M3_OJOUSANM:
+ case NB1413M3_SEIHAM:
+ case NB1413M3_RYUUHA:
+ case NB1413M3_KORINAIM:
+ case NB1413M3_MMSIKAKU:
+ case NB1413M3_HYOUBAN:
+ case NB1413M3_TOKIMBSJ:
+ case NB1413M3_MJFOCUSM:
+ case NB1413M3_SCANDALM:
+ case NB1413M3_BANANADR:
+ case NB1413M3_MGION:
+ case NB1413M3_HANAOJI:
+ case NB1413M3_FINALBNY:
+ case NB1413M3_LOVEHOUS:
+ case NB1413M3_MMAIKO:
+ if (nb1413m3_outcoin_enable)
+ {
+ if (counter++ == 2)
+ {
+ nb1413m3_outcoin_flag ^= 1;
+ counter = 0;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ set_led_status(2, nb1413m3_outcoin_flag); // out coin
+}
+
+WRITE8_HANDLER( nb1413m3_vcrctrl_w )
+{
+ if (data & 0x08)
+ {
+ popmessage(" ** VCR CONTROL ** ");
+ set_led_status(2, 1);
+ }
+ else
+ {
+ set_led_status(2, 0);
+ }
+}