~ubuntu-branches/debian/sid/mame/sid

« back to all changes in this revision

Viewing changes to src/mame/drivers/niyanpai.c

  • Committer: Package Import Robot
  • Author(s): Jordi Mallach, Emmanuel Kasper, Jordi Mallach
  • Date: 2012-06-05 20:02:23 UTC
  • mfrom: (0.3.1) (0.1.4)
  • Revision ID: package-import@ubuntu.com-20120605200223-gnlpogjrg6oqe9md
Tags: 0.146-1
[ Emmanuel Kasper ]
* New upstream release
* Drop patch to fix man pages section and patches to link with flac 
  and jpeg system lib: all this has been pushed upstream by Cesare Falco
* Add DM-Upload-Allowed: yes field.

[ Jordi Mallach ]
* Create a "gnu" TARGETOS stanza that defines NO_AFFINITY_NP.
* Stop setting TARGETOS to "unix" in d/rules. It should be autodetected,
  and set to the appropriate value.
* mame_manpage_section.patch: Change mame's manpage section to 6 (games),
  in the TH declaration.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
    Mahjong Housoukyoku Honbanchuu
15
15
    (c)199? Nihon Bussan Co.,Ltd.
16
16
 
 
17
    Zoku Mahjong Housoukyoku Honbanchuu
 
18
    (c)199? Nihon Bussan Co.,Ltd.
 
19
 
17
20
    Driver by Takahiro Nogi <nogi@kt.rim.or.jp> 2000/12/23 -
18
21
 
19
22
******************************************************************************/
45
48
#include "includes/niyanpai.h"
46
49
 
47
50
 
48
 
#define SIGNED_DAC      0               // 0:unsigned DAC, 1:signed DAC
49
 
#if SIGNED_DAC
50
 
#define DAC_WRITE       dac_signed_w
51
 
#else
52
 
#define DAC_WRITE       dac_w
53
 
#endif
54
 
 
55
 
 
56
51
static void niyanpai_soundbank_w(running_machine &machine, int data)
57
52
{
58
 
        UINT8 *SNDROM = machine.region("audiocpu")->base();
59
 
 
60
 
        memory_set_bankptr(machine, "bank1", &SNDROM[0x08000 + (0x8000 * (data & 0x03))]);
61
 
}
62
 
 
63
 
static READ8_HANDLER( niyanpai_sound_r )
64
 
{
65
 
        return soundlatch_r(space, 0);
66
 
}
67
 
 
68
 
static WRITE16_HANDLER( niyanpai_sound_w )
69
 
{
70
 
        soundlatch_w(space, 0, ((data >> 8) & 0xff));
71
 
}
72
 
 
73
 
static WRITE8_HANDLER( niyanpai_soundclr_w )
74
 
{
75
 
        soundlatch_clear_w(space, 0, 0);
 
53
        UINT8 *SNDROM = machine.root_device().memregion("audiocpu")->base();
 
54
 
 
55
        machine.root_device().membank("bank1")->set_base(&SNDROM[0x08000 + (0x8000 * (data & 0x03))]);
 
56
}
 
57
 
 
58
READ8_MEMBER(niyanpai_state::niyanpai_sound_r)
 
59
{
 
60
        return soundlatch_byte_r(space, 0);
 
61
}
 
62
 
 
63
WRITE16_MEMBER(niyanpai_state::niyanpai_sound_w)
 
64
{
 
65
        soundlatch_byte_w(space, 0, ((data >> 8) & 0xff));
 
66
}
 
67
 
 
68
WRITE8_MEMBER(niyanpai_state::niyanpai_soundclr_w)
 
69
{
 
70
        soundlatch_clear_byte_w(space, 0, 0);
76
71
}
77
72
 
78
73
 
79
74
/* TMPZ84C011 PIO emulation */
80
75
 
81
 
static READ8_HANDLER( tmpz84c011_pio_r )
 
76
READ8_MEMBER(niyanpai_state::tmpz84c011_pio_r)
82
77
{
83
78
        int portdata;
84
79
 
101
96
                        break;
102
97
 
103
98
                default:
104
 
                        logerror("%s: TMPZ84C011_PIO Unknown Port Read %02X\n", space->machine().describe_context(), offset);
 
99
                        logerror("%s: TMPZ84C011_PIO Unknown Port Read %02X\n", machine().describe_context(), offset);
105
100
                        portdata = 0xff;
106
101
                        break;
107
102
        }
109
104
        return portdata;
110
105
}
111
106
 
112
 
static WRITE8_HANDLER( tmpz84c011_pio_w)
 
107
WRITE8_MEMBER(niyanpai_state::tmpz84c011_pio_w)
113
108
{
114
109
        switch (offset)
115
110
        {
116
111
                case 0:                 /* PA_0 */
117
 
                        niyanpai_soundbank_w(space->machine(), data & 0x03);
 
112
                        niyanpai_soundbank_w(machine(), data & 0x03);
118
113
                        break;
119
114
                case 1:                 /* PB_0 */
120
 
                        DAC_WRITE(space->machine().device("dac2"), 0, data);
 
115
                        dac_w(machine().device("dac1"), 0, data);
121
116
                        break;
122
117
                case 2:                 /* PC_0 */
123
 
                        DAC_WRITE(space->machine().device("dac1"), 0, data);
 
118
                        dac_w(machine().device("dac2"), 0, data);
124
119
                        break;
125
120
                case 3:                 /* PD_0 */
126
121
                        break;
129
124
                        break;
130
125
 
131
126
                default:
132
 
                        logerror("%s: TMPZ84C011_PIO Unknown Port Write %02X, %02X\n", space->machine().describe_context(), offset, data);
 
127
                        logerror("%s: TMPZ84C011_PIO Unknown Port Write %02X, %02X\n", machine().describe_context(), offset, data);
133
128
                        break;
134
129
        }
135
130
}
136
131
 
137
132
/* CPU interface */
138
 
static READ8_HANDLER( tmpz84c011_0_pa_r )
139
 
{
140
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
141
 
        return (tmpz84c011_pio_r(space,0) & ~state->m_pio_dir[0]) | (state->m_pio_latch[0] & state->m_pio_dir[0]);
142
 
}
143
 
 
144
 
static READ8_HANDLER( tmpz84c011_0_pb_r )
145
 
{
146
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
147
 
        return (tmpz84c011_pio_r(space,1) & ~state->m_pio_dir[1]) | (state->m_pio_latch[1] & state->m_pio_dir[1]);
148
 
}
149
 
 
150
 
static READ8_HANDLER( tmpz84c011_0_pc_r )
151
 
{
152
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
153
 
        return (tmpz84c011_pio_r(space,2) & ~state->m_pio_dir[2]) | (state->m_pio_latch[2] & state->m_pio_dir[2]);
154
 
}
155
 
 
156
 
static READ8_HANDLER( tmpz84c011_0_pd_r )
157
 
{
158
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
159
 
        return (tmpz84c011_pio_r(space,3) & ~state->m_pio_dir[3]) | (state->m_pio_latch[3] & state->m_pio_dir[3]);
160
 
}
161
 
 
162
 
static READ8_HANDLER( tmpz84c011_0_pe_r )
163
 
{
164
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
165
 
        return (tmpz84c011_pio_r(space,4) & ~state->m_pio_dir[4]) | (state->m_pio_latch[4] & state->m_pio_dir[4]);
166
 
}
167
 
 
168
 
static WRITE8_HANDLER( tmpz84c011_0_pa_w )
169
 
{
170
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
171
 
        state->m_pio_latch[0] = data;
 
133
READ8_MEMBER(niyanpai_state::tmpz84c011_0_pa_r)
 
134
{
 
135
        return (tmpz84c011_pio_r(space,0) & ~m_pio_dir[0]) | (m_pio_latch[0] & m_pio_dir[0]);
 
136
}
 
137
 
 
138
READ8_MEMBER(niyanpai_state::tmpz84c011_0_pb_r)
 
139
{
 
140
        return (tmpz84c011_pio_r(space,1) & ~m_pio_dir[1]) | (m_pio_latch[1] & m_pio_dir[1]);
 
141
}
 
142
 
 
143
READ8_MEMBER(niyanpai_state::tmpz84c011_0_pc_r)
 
144
{
 
145
        return (tmpz84c011_pio_r(space,2) & ~m_pio_dir[2]) | (m_pio_latch[2] & m_pio_dir[2]);
 
146
}
 
147
 
 
148
READ8_MEMBER(niyanpai_state::tmpz84c011_0_pd_r)
 
149
{
 
150
        return (tmpz84c011_pio_r(space,3) & ~m_pio_dir[3]) | (m_pio_latch[3] & m_pio_dir[3]);
 
151
}
 
152
 
 
153
READ8_MEMBER(niyanpai_state::tmpz84c011_0_pe_r)
 
154
{
 
155
        return (tmpz84c011_pio_r(space,4) & ~m_pio_dir[4]) | (m_pio_latch[4] & m_pio_dir[4]);
 
156
}
 
157
 
 
158
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_pa_w)
 
159
{
 
160
        m_pio_latch[0] = data;
172
161
        tmpz84c011_pio_w(space, 0, data);
173
162
}
174
163
 
175
 
static WRITE8_HANDLER( tmpz84c011_0_pb_w )
 
164
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_pb_w)
176
165
{
177
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
178
 
        state->m_pio_latch[1] = data;
 
166
        m_pio_latch[1] = data;
179
167
        tmpz84c011_pio_w(space, 1, data);
180
168
}
181
 
static WRITE8_HANDLER( tmpz84c011_0_pc_w )
 
169
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_pc_w)
182
170
{
183
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
184
 
        state->m_pio_latch[2] = data;
 
171
        m_pio_latch[2] = data;
185
172
        tmpz84c011_pio_w(space, 2, data);
186
173
}
187
174
 
188
 
static WRITE8_HANDLER( tmpz84c011_0_pd_w )
 
175
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_pd_w)
189
176
{
190
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
191
 
        state->m_pio_latch[3] = data;
 
177
        m_pio_latch[3] = data;
192
178
        tmpz84c011_pio_w(space, 3, data);
193
179
}
194
180
 
195
 
static WRITE8_HANDLER( tmpz84c011_0_pe_w )
 
181
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_pe_w)
196
182
{
197
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
198
 
        state->m_pio_latch[4] = data;
 
183
        m_pio_latch[4] = data;
199
184
        tmpz84c011_pio_w(space, 4, data);
200
185
}
201
186
 
202
 
static READ8_HANDLER( tmpz84c011_0_dir_pa_r )
203
 
{
204
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
205
 
        return state->m_pio_dir[0];
206
 
}
207
 
 
208
 
static READ8_HANDLER( tmpz84c011_0_dir_pb_r )
209
 
{
210
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
211
 
        return state->m_pio_dir[1];
212
 
}
213
 
 
214
 
static READ8_HANDLER( tmpz84c011_0_dir_pc_r )
215
 
{
216
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
217
 
        return state->m_pio_dir[2];
218
 
}
219
 
 
220
 
static READ8_HANDLER( tmpz84c011_0_dir_pd_r )
221
 
{
222
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
223
 
        return state->m_pio_dir[3];
224
 
}
225
 
 
226
 
static READ8_HANDLER( tmpz84c011_0_dir_pe_r )
227
 
{
228
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
229
 
        return state->m_pio_dir[4];
230
 
}
231
 
 
232
 
static WRITE8_HANDLER( tmpz84c011_0_dir_pa_w )
233
 
{
234
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
235
 
        state->m_pio_dir[0] = data;
236
 
}
237
 
 
238
 
static WRITE8_HANDLER( tmpz84c011_0_dir_pb_w )
239
 
{
240
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
241
 
        state->m_pio_dir[1] = data;
242
 
}
243
 
 
244
 
static WRITE8_HANDLER( tmpz84c011_0_dir_pc_w )
245
 
{
246
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
247
 
        state->m_pio_dir[2] = data;
248
 
}
249
 
 
250
 
static WRITE8_HANDLER( tmpz84c011_0_dir_pd_w )
251
 
{
252
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
253
 
        state->m_pio_dir[3] = data;
254
 
}
255
 
 
256
 
static WRITE8_HANDLER( tmpz84c011_0_dir_pe_w )
257
 
{
258
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
259
 
        state->m_pio_dir[4] = data;
 
187
READ8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pa_r)
 
188
{
 
189
        return m_pio_dir[0];
 
190
}
 
191
 
 
192
READ8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pb_r)
 
193
{
 
194
        return m_pio_dir[1];
 
195
}
 
196
 
 
197
READ8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pc_r)
 
198
{
 
199
        return m_pio_dir[2];
 
200
}
 
201
 
 
202
READ8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pd_r)
 
203
{
 
204
        return m_pio_dir[3];
 
205
}
 
206
 
 
207
READ8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pe_r)
 
208
{
 
209
        return m_pio_dir[4];
 
210
}
 
211
 
 
212
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pa_w)
 
213
{
 
214
        m_pio_dir[0] = data;
 
215
}
 
216
 
 
217
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pb_w)
 
218
{
 
219
        m_pio_dir[1] = data;
 
220
}
 
221
 
 
222
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pc_w)
 
223
{
 
224
        m_pio_dir[2] = data;
 
225
}
 
226
 
 
227
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pd_w)
 
228
{
 
229
        m_pio_dir[3] = data;
 
230
}
 
231
 
 
232
WRITE8_MEMBER(niyanpai_state::tmpz84c011_0_dir_pe_w)
 
233
{
 
234
        m_pio_dir[4] = data;
260
235
}
261
236
 
262
237
 
279
254
        for (i = 0; i < 5; i++)
280
255
        {
281
256
                state->m_pio_dir[i] = state->m_pio_latch[i] = 0;
282
 
                tmpz84c011_pio_w(space, i, 0);
 
257
                state->tmpz84c011_pio_w(*space, i, 0);
283
258
        }
284
259
}
285
260
 
286
261
static DRIVER_INIT( niyanpai )
287
262
{
288
263
        niyanpai_state *state = machine.driver_data<niyanpai_state>();
289
 
        UINT8 *SNDROM = machine.region("audiocpu")->base();
 
264
        UINT8 *SNDROM = state->memregion("audiocpu")->base();
290
265
 
291
266
        // sound program patch
292
267
        SNDROM[0x0213] = 0x00;                  // DI -> NOP
299
274
}
300
275
 
301
276
 
302
 
static READ16_HANDLER( niyanpai_dipsw_r )
 
277
READ16_MEMBER(niyanpai_state::niyanpai_dipsw_r)
303
278
{
304
279
        UINT8 dipsw_a, dipsw_b;
305
280
 
306
 
        dipsw_a = (((input_port_read(space->machine(), "DSWA") & 0x01) << 7) | ((input_port_read(space->machine(), "DSWA") & 0x02) << 5) |
307
 
                           ((input_port_read(space->machine(), "DSWA") & 0x04) << 3) | ((input_port_read(space->machine(), "DSWA") & 0x08) << 1) |
308
 
                           ((input_port_read(space->machine(), "DSWA") & 0x10) >> 1) | ((input_port_read(space->machine(), "DSWA") & 0x20) >> 3) |
309
 
                           ((input_port_read(space->machine(), "DSWA") & 0x40) >> 5) | ((input_port_read(space->machine(), "DSWA") & 0x80) >> 7));
 
281
        dipsw_a = (((ioport("DSWA")->read() & 0x01) << 7) | ((ioport("DSWA")->read() & 0x02) << 5) |
 
282
                           ((ioport("DSWA")->read() & 0x04) << 3) | ((ioport("DSWA")->read() & 0x08) << 1) |
 
283
                           ((ioport("DSWA")->read() & 0x10) >> 1) | ((ioport("DSWA")->read() & 0x20) >> 3) |
 
284
                           ((ioport("DSWA")->read() & 0x40) >> 5) | ((ioport("DSWA")->read() & 0x80) >> 7));
310
285
 
311
 
        dipsw_b = (((input_port_read(space->machine(), "DSWB") & 0x01) << 7) | ((input_port_read(space->machine(), "DSWB") & 0x02) << 5) |
312
 
                           ((input_port_read(space->machine(), "DSWB") & 0x04) << 3) | ((input_port_read(space->machine(), "DSWB") & 0x08) << 1) |
313
 
                           ((input_port_read(space->machine(), "DSWB") & 0x10) >> 1) | ((input_port_read(space->machine(), "DSWB") & 0x20) >> 3) |
314
 
                           ((input_port_read(space->machine(), "DSWB") & 0x40) >> 5) | ((input_port_read(space->machine(), "DSWB") & 0x80) >> 7));
 
286
        dipsw_b = (((ioport("DSWB")->read() & 0x01) << 7) | ((ioport("DSWB")->read() & 0x02) << 5) |
 
287
                           ((ioport("DSWB")->read() & 0x04) << 3) | ((ioport("DSWB")->read() & 0x08) << 1) |
 
288
                           ((ioport("DSWB")->read() & 0x10) >> 1) | ((ioport("DSWB")->read() & 0x20) >> 3) |
 
289
                           ((ioport("DSWB")->read() & 0x40) >> 5) | ((ioport("DSWB")->read() & 0x80) >> 7));
315
290
 
316
291
        return ((dipsw_a << 8) | dipsw_b);
317
292
}
318
293
 
319
 
static READ16_HANDLER( musobana_inputport_0_r )
 
294
READ16_MEMBER(niyanpai_state::musobana_inputport_0_r)
320
295
{
321
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
322
296
        int portdata;
323
297
 
324
 
        switch ((state->m_musobana_inputport ^ 0xff00) >> 8)
 
298
        switch ((m_musobana_inputport ^ 0xff00) >> 8)
325
299
        {
326
 
                case 0x01:      portdata = input_port_read(space->machine(), "KEY0"); break;
327
 
                case 0x02:      portdata = input_port_read(space->machine(), "KEY1"); break;
328
 
                case 0x04:      portdata = input_port_read(space->machine(), "KEY2"); break;
329
 
                case 0x08:      portdata = input_port_read(space->machine(), "KEY3"); break;
330
 
                case 0x10:      portdata = input_port_read(space->machine(), "KEY4"); break;
331
 
                default:        portdata = input_port_read(space->machine(), "KEY0") & input_port_read(space->machine(), "KEY1") & input_port_read(space->machine(), "KEY2")
332
 
                                                                & input_port_read(space->machine(), "KEY3") & input_port_read(space->machine(), "KEY4"); break;
 
300
                case 0x01:      portdata = ioport("KEY0")->read(); break;
 
301
                case 0x02:      portdata = ioport("KEY1")->read(); break;
 
302
                case 0x04:      portdata = ioport("KEY2")->read(); break;
 
303
                case 0x08:      portdata = ioport("KEY3")->read(); break;
 
304
                case 0x10:      portdata = ioport("KEY4")->read(); break;
 
305
                default:        portdata = ioport("KEY0")->read() & ioport("KEY1")->read() & ioport("KEY2")->read()
 
306
                                                                & ioport("KEY3")->read() & ioport("KEY4")->read(); break;
333
307
        }
334
308
 
335
309
        return (portdata);
336
310
}
337
311
 
338
 
static CUSTOM_INPUT( musobana_outcoin_flag_r )
 
312
CUSTOM_INPUT_MEMBER(niyanpai_state::musobana_outcoin_flag_r)
339
313
{
340
 
        niyanpai_state *state = field.machine().driver_data<niyanpai_state>();
341
 
        address_space *space = field.machine().device("maincpu")->memory().space(AS_PROGRAM);
 
314
        address_space *space = machine().device("maincpu")->memory().space(AS_PROGRAM);
342
315
        // tmp68301_parallel_interface[0x05]
343
316
        //  bit 0   coin counter
344
317
        //  bit 2   motor on
345
318
        //  bit 3   coin lock
346
319
 
347
 
        if (tmp68301_parallel_interface_r(space, 0x0005, 0x00ff) & 0x0004) state->m_musobana_outcoin_flag ^= 1;
348
 
        else state->m_musobana_outcoin_flag = 1;
 
320
        if (tmp68301_parallel_interface_r(space, 0x0005, 0x00ff) & 0x0004) m_musobana_outcoin_flag ^= 1;
 
321
        else m_musobana_outcoin_flag = 1;
349
322
 
350
 
        return state->m_musobana_outcoin_flag & 0x01;
 
323
        return m_musobana_outcoin_flag & 0x01;
351
324
}
352
325
 
353
 
static WRITE16_HANDLER ( musobana_inputport_w )
 
326
WRITE16_MEMBER(niyanpai_state::musobana_inputport_w)
354
327
{
355
 
        niyanpai_state *state = space->machine().driver_data<niyanpai_state>();
356
 
        state->m_musobana_inputport = data;
 
328
        m_musobana_inputport = data;
357
329
}
358
330
 
359
 
static ADDRESS_MAP_START( tmp68301_regs, AS_PROGRAM, 16 )
360
 
        AM_RANGE(0xfffc00, 0xfffc0f) AM_READWRITE(tmp68301_address_decoder_r,tmp68301_address_decoder_w)
361
 
        AM_RANGE(0xfffc80, 0xfffc9f) AM_READWRITE(tmp68301_interrupt_controller_r,tmp68301_interrupt_controller_w)
362
 
        AM_RANGE(0xfffd00, 0xfffd0f) AM_READWRITE(tmp68301_parallel_interface_r,tmp68301_parallel_interface_w)
363
 
        AM_RANGE(0xfffd80, 0xfffdaf) AM_READWRITE(tmp68301_serial_interface_r,tmp68301_serial_interface_w)
364
 
        AM_RANGE(0xfffe00, 0xfffe4f) AM_READWRITE(tmp68301_timer_r,tmp68301_timer_w)
 
331
static ADDRESS_MAP_START( tmp68301_regs, AS_PROGRAM, 16, niyanpai_state )
 
332
        AM_RANGE(0xfffc00, 0xfffc0f) AM_READWRITE_LEGACY(tmp68301_address_decoder_r,tmp68301_address_decoder_w)
 
333
        AM_RANGE(0xfffc80, 0xfffc9f) AM_READWRITE_LEGACY(tmp68301_interrupt_controller_r,tmp68301_interrupt_controller_w)
 
334
        AM_RANGE(0xfffd00, 0xfffd0f) AM_READWRITE_LEGACY(tmp68301_parallel_interface_r,tmp68301_parallel_interface_w)
 
335
        AM_RANGE(0xfffd80, 0xfffdaf) AM_READWRITE_LEGACY(tmp68301_serial_interface_r,tmp68301_serial_interface_w)
 
336
        AM_RANGE(0xfffe00, 0xfffe4f) AM_READWRITE_LEGACY(tmp68301_timer_r,tmp68301_timer_w)
365
337
ADDRESS_MAP_END
366
338
 
367
 
static ADDRESS_MAP_START( niyanpai_map, AS_PROGRAM, 16 )
 
339
static ADDRESS_MAP_START( niyanpai_map, AS_PROGRAM, 16, niyanpai_state )
368
340
        AM_RANGE(0x000000, 0x03ffff) AM_ROM
369
341
        AM_RANGE(0x040000, 0x040fff) AM_RAM AM_SHARE("nvram")
370
342
 
399
371
        AM_IMPORT_FROM( tmp68301_regs )
400
372
ADDRESS_MAP_END
401
373
 
402
 
static ADDRESS_MAP_START( musobana_map, AS_PROGRAM, 16 )
 
374
static ADDRESS_MAP_START( musobana_map, AS_PROGRAM, 16, niyanpai_state )
403
375
        AM_RANGE(0x000000, 0x03ffff) AM_ROM
404
376
        AM_RANGE(0x040000, 0x040fff) AM_RAM
405
377
 
437
409
        AM_IMPORT_FROM( tmp68301_regs )
438
410
ADDRESS_MAP_END
439
411
 
440
 
static ADDRESS_MAP_START( mhhonban_map, AS_PROGRAM, 16 )
 
412
static ADDRESS_MAP_START( mhhonban_map, AS_PROGRAM, 16, niyanpai_state )
441
413
        AM_RANGE(0x000000, 0x03ffff) AM_ROM
442
414
        AM_RANGE(0x040000, 0x040fff) AM_RAM
443
415
 
477
449
        AM_IMPORT_FROM( tmp68301_regs )
478
450
ADDRESS_MAP_END
479
451
 
480
 
 
481
 
static ADDRESS_MAP_START( niyanpai_sound_map, AS_PROGRAM, 8 )
 
452
static ADDRESS_MAP_START( zokumahj_map, AS_PROGRAM, 16, niyanpai_state )
 
453
        AM_RANGE(0x000000, 0x03ffff) AM_ROM
 
454
        AM_RANGE(0x0ff000, 0x0fffff) AM_RAM
 
455
 
 
456
        AM_RANGE(0x0e0000, 0x0e08ff) AM_READWRITE(niyanpai_palette_r,niyanpai_palette_w)
 
457
        AM_RANGE(0x0e0900, 0x0e11ff) AM_RAM                             // palette work ram?
 
458
 
 
459
        AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram")
 
460
        AM_RANGE(0x0c0000, 0x0cffff) AM_RAM
 
461
 
 
462
        AM_RANGE(0x200000, 0x200001) AM_WRITE(niyanpai_sound_w)
 
463
 
 
464
        AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w)     // inputport select
 
465
        AM_RANGE(0x240000, 0x240009) AM_WRITENOP                        // unknown
 
466
        AM_RANGE(0x240200, 0x2403ff) AM_WRITENOP                        // unknown
 
467
 
 
468
        AM_RANGE(0x240400, 0x240403) AM_READ(niyanpai_blitter_0_r)
 
469
        AM_RANGE(0x240400, 0x24041f) AM_WRITE(niyanpai_blitter_0_w)
 
470
        AM_RANGE(0x240420, 0x24043f) AM_WRITE(niyanpai_clut_0_w)
 
471
 
 
472
        AM_RANGE(0x240600, 0x240603) AM_READ(niyanpai_blitter_1_r)
 
473
        AM_RANGE(0x240600, 0x24061f) AM_WRITE(niyanpai_blitter_1_w)
 
474
        AM_RANGE(0x240620, 0x24063f) AM_WRITE(niyanpai_clut_1_w)
 
475
 
 
476
        AM_RANGE(0x240800, 0x240803) AM_READ(niyanpai_blitter_2_r)
 
477
        AM_RANGE(0x240800, 0x24081f) AM_WRITE(niyanpai_blitter_2_w)
 
478
        AM_RANGE(0x240820, 0x24083f) AM_WRITE(niyanpai_clut_2_w)
 
479
 
 
480
        AM_RANGE(0x240a00, 0x240a01) AM_WRITE(niyanpai_clutsel_0_w)
 
481
        AM_RANGE(0x240c00, 0x240c01) AM_WRITE(niyanpai_clutsel_1_w)
 
482
        AM_RANGE(0x240e00, 0x240e01) AM_WRITE(niyanpai_clutsel_2_w)
 
483
 
 
484
        AM_RANGE(0x280000, 0x280001) AM_READ(niyanpai_dipsw_r)
 
485
        AM_RANGE(0x280200, 0x280201) AM_READ(musobana_inputport_0_r)
 
486
        AM_RANGE(0x280400, 0x280401) AM_READ_PORT("SYSTEM")
 
487
 
 
488
        AM_IMPORT_FROM( tmp68301_regs )
 
489
ADDRESS_MAP_END
 
490
 
 
491
 
 
492
static ADDRESS_MAP_START( niyanpai_sound_map, AS_PROGRAM, 8, niyanpai_state )
482
493
        AM_RANGE(0x0000, 0x77ff) AM_ROM
483
494
        AM_RANGE(0x7800, 0x7fff) AM_RAM
484
495
        AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
485
496
ADDRESS_MAP_END
486
497
 
487
 
static ADDRESS_MAP_START( niyanpai_sound_io_map, AS_IO, 8 )
 
498
static ADDRESS_MAP_START( niyanpai_sound_io_map, AS_IO, 8, niyanpai_state )
488
499
        ADDRESS_MAP_GLOBAL_MASK(0xff)
489
 
        AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("ctc", z80ctc_r, z80ctc_w)
 
500
        AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("ctc", z80ctc_r, z80ctc_w)
490
501
        AM_RANGE(0x50, 0x50) AM_READWRITE(tmpz84c011_0_pa_r, tmpz84c011_0_pa_w)
491
502
        AM_RANGE(0x51, 0x51) AM_READWRITE(tmpz84c011_0_pb_r, tmpz84c011_0_pb_w)
492
503
        AM_RANGE(0x52, 0x52) AM_READWRITE(tmpz84c011_0_pc_r, tmpz84c011_0_pc_w)
497
508
        AM_RANGE(0x56, 0x56) AM_READWRITE(tmpz84c011_0_dir_pc_r, tmpz84c011_0_dir_pc_w)
498
509
        AM_RANGE(0x34, 0x34) AM_READWRITE(tmpz84c011_0_dir_pd_r, tmpz84c011_0_dir_pd_w)
499
510
        AM_RANGE(0x44, 0x44) AM_READWRITE(tmpz84c011_0_dir_pe_r, tmpz84c011_0_dir_pe_w)
500
 
        AM_RANGE(0x80, 0x81) AM_DEVWRITE("ymsnd", ym3812_w)
 
511
        AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("ymsnd", ym3812_w)
501
512
ADDRESS_MAP_END
502
513
 
503
514
 
712
723
        PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 )                   // CREDIT CLEAR
713
724
        PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE3 )                 // MEMORY RESET
714
725
        PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SERVICE2 )                 // ANALYZER
715
 
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(musobana_outcoin_flag_r, NULL)      // OUT COIN
 
726
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, niyanpai_state,musobana_outcoin_flag_r, NULL)   // OUT COIN
716
727
        PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
717
728
        PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )                                   // TEST
718
729
 
778
789
        PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 )                   // CREDIT CLEAR
779
790
        PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE3 )                 // MEMORY RESET
780
791
        PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SERVICE2 )                 // ANALYZER
781
 
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(musobana_outcoin_flag_r, NULL)      // OUT COIN
 
792
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, niyanpai_state,musobana_outcoin_flag_r, NULL)   // OUT COIN
782
793
        PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
783
794
        PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )                                   // TEST
784
795
 
797
808
        PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
798
809
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
799
810
        PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
800
 
        PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
801
811
        PORT_DIPSETTING(    0x08, DEF_STR( 1C_1C ) )
 
812
        PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) )
802
813
        PORT_DIPNAME( 0x10, 0x00, "DIPSW 1-5" )
803
814
        PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
804
815
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
844
855
        PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 )                   // CREDIT CLEAR
845
856
        PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE3 )                 // MEMORY RESET
846
857
        PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SERVICE2 )                 // ANALYZER
847
 
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(musobana_outcoin_flag_r, NULL)      // OUT COIN
 
858
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, niyanpai_state,musobana_outcoin_flag_r, NULL)   // OUT COIN
 
859
        PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 
860
        PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )                                   // TEST
 
861
 
 
862
        PORT_INCLUDE( nbmjctrl_16 )
 
863
INPUT_PORTS_END
 
864
 
 
865
static INPUT_PORTS_START( zokumahj )    // I don't have manual for this game.
 
866
        PORT_START("DSWA")
 
867
        PORT_DIPNAME( 0x01, 0x01, "DIPSW 1-1" )
 
868
        PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
 
869
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
870
        PORT_DIPNAME( 0x02, 0x02, "DIPSW 1-2" )
 
871
        PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
 
872
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
873
        PORT_DIPNAME( 0x04, 0x04, "DIPSW 1-3" )
 
874
        PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
 
875
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
876
        PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
 
877
        PORT_DIPSETTING(    0x08, DEF_STR( 1C_1C ) )
 
878
        PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) )
 
879
        PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" )
 
880
        PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
 
881
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
882
        PORT_DIPNAME( 0x20, 0x00, DEF_STR( Flip_Screen ) )
 
883
        PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
 
884
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
885
        PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
 
886
        PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
 
887
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
888
        PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" )
 
889
        PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
 
890
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
891
 
 
892
        PORT_START("DSWB")
 
893
        PORT_DIPNAME( 0x01, 0x01, "DIPSW 2-1" )
 
894
        PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
 
895
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
896
        PORT_DIPNAME( 0x02, 0x02, "DIPSW 2-2" )
 
897
        PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
 
898
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
899
        PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
 
900
        PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
 
901
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
902
        PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
 
903
        PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
 
904
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
905
        PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
 
906
        PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
 
907
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
908
        PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
 
909
        PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
 
910
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
911
        PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" )
 
912
        PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
 
913
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
914
        PORT_DIPNAME( 0x80, 0x80, "Option Test" )
 
915
        PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
 
916
        PORT_DIPSETTING(    0x00, DEF_STR( On ) )
 
917
 
 
918
        PORT_START("SYSTEM")
 
919
        PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 )                    // COIN1
 
920
        PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )                    // COIN2
 
921
        PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START3 )                   // CREDIT CLEAR
 
922
        PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE3 )                 // MEMORY RESET
 
923
        PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SERVICE2 )                 // ANALYZER
 
924
        PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, niyanpai_state,musobana_outcoin_flag_r, NULL)   // OUT COIN
848
925
        PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
849
926
        PORT_SERVICE( 0x8000, IP_ACTIVE_LOW )                                   // TEST
850
927
 
889
966
        MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
890
967
        MCFG_SCREEN_UPDATE_STATIC(niyanpai)
891
968
 
892
 
        MCFG_PALETTE_LENGTH(768)
 
969
        MCFG_PALETTE_LENGTH(256*3)
893
970
 
894
971
        MCFG_VIDEO_START(niyanpai)
895
972
 
897
974
        MCFG_SPEAKER_STANDARD_MONO("mono")
898
975
 
899
976
        MCFG_SOUND_ADD("ymsnd", YM3812, 4000000)
900
 
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70)
 
977
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
901
978
 
902
979
        MCFG_SOUND_ADD("dac1", DAC, 0)
903
 
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
 
980
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
904
981
 
905
982
        MCFG_SOUND_ADD("dac2", DAC, 0)
906
983
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
920
997
        MCFG_CPU_PROGRAM_MAP(mhhonban_map)
921
998
MACHINE_CONFIG_END
922
999
 
 
1000
static MACHINE_CONFIG_DERIVED( zokumahj, niyanpai )
 
1001
 
 
1002
        /* basic machine hardware */
 
1003
        MCFG_CPU_MODIFY("maincpu")
 
1004
        MCFG_CPU_PROGRAM_MAP(zokumahj_map)
 
1005
MACHINE_CONFIG_END
 
1006
 
923
1007
 
924
1008
ROM_START( niyanpai )
925
1009
        ROM_REGION( 0x40000, "maincpu", 0 ) /* TMP68301 main program */
997
1081
        ROM_LOAD( "u107.bin",  0x280000, 0x80000, CRC(efc85912) SHA1(b9d523fd5f9ce879e2ed6916c89940be1d738a1c) )
998
1082
ROM_END
999
1083
 
1000
 
 
1001
 
GAME( 1996, niyanpai, 0, niyanpai, niyanpai, niyanpai, ROT0, "Nichibutsu", "Niyanpai (Japan)", 0 )
1002
 
GAME( 1995, musobana, 0, musobana, musobana, niyanpai, ROT0, "Nichibutsu / Yubis", "Musoubana (Japan)", 0 )
1003
 
GAME( 1994, 4psimasy, 0, musobana, 4psimasy, niyanpai, ROT0, "Sphinx / AV Japan", "Mahjong 4P Simasyo (Japan)", 0 )
1004
 
GAME( 199?, mhhonban, 0, mhhonban, mhhonban, niyanpai, ROT0, "Nichibutsu?", "Mahjong Housoukyoku Honbanchuu (Japan)", 0 )
 
1084
ROM_START( zokumahj )
 
1085
        ROM_REGION( 0x40000, "maincpu", 0 ) /* TMP68301 main program */
 
1086
        ROM_LOAD16_BYTE( "1.bin", 0x00000, 0x20000, CRC(53ca34a9) SHA1(5a1e2660442665efd529ec6c98ffc994c6103419) )
 
1087
        ROM_LOAD16_BYTE( "2.bin", 0x00001, 0x20000, CRC(474f9303) SHA1(4b03e3b6b6ee864dfcce3978f19bf329e39b3fe7) )
 
1088
 
 
1089
        ROM_REGION( 0x20000, "audiocpu", 0 ) /* TMPZ84C011 sound program */
 
1090
        ROM_LOAD( "3.bin",  0x000000, 0x20000, CRC(48407507) SHA1(afd24d16d487fd2b6548d967e2f1ae122e2633a2) )
 
1091
 
 
1092
        ROM_REGION( 0x300000, "gfx1", 0 ) /* gfx */
 
1093
        ROM_LOAD( "4.bin",  0x000000, 0x80000, CRC(2b3e88b4) SHA1(d49a81f1bc6ac5b56df36caf7ee7188a917d947f) )
 
1094
        ROM_LOAD( "5.bin",  0x080000, 0x80000, CRC(cfe9477a) SHA1(9d08f5b1d638cef7d8dc97bdd9d98627f9af1ef9) )
 
1095
        ROM_LOAD( "6.bin",  0x100000, 0x80000, CRC(2d62df76) SHA1(83fe8e0a853c0137e7c77ecde762617c082774e5) )
 
1096
        ROM_LOAD( "7.bin",  0x180000, 0x80000, CRC(75922e76) SHA1(4ad23e241a1a223e0fcd4fd26bd695b1a68c258a) )
 
1097
        ROM_LOAD( "8.bin",  0x200000, 0x80000, CRC(22b3befa) SHA1(e44635e021962ce29b4e129ae394c794038aef39) )
 
1098
        ROM_LOAD( "9.bin",  0x280000, 0x80000, CRC(f72d83af) SHA1(4b897b40765084fd9483065fd0eb0e29cbcfa5ac) )
 
1099
ROM_END
 
1100
 
 
1101
 
 
1102
GAME( 1996, niyanpai, 0,        niyanpai, niyanpai, niyanpai, ROT0, "Nichibutsu", "Niyanpai (Japan)", 0 )
 
1103
GAME( 1995, musobana, 0,        musobana, musobana, niyanpai, ROT0, "Nichibutsu / Yubis", "Musoubana (Japan)", 0 )
 
1104
GAME( 1994, 4psimasy, 0,        musobana, 4psimasy, niyanpai, ROT0, "Sphinx / AV Japan", "Mahjong 4P Simasyo (Japan)", 0 )
 
1105
GAME( 199?, mhhonban, 0,        mhhonban, mhhonban, niyanpai, ROT0, "Nichibutsu?", "Mahjong Housoukyoku Honbanchuu (Japan)", 0 )
 
1106
GAME( 199?, zokumahj, mhhonban, zokumahj, zokumahj, niyanpai, ROT0, "Nichibutsu?", "Zoku Mahjong Housoukyoku (Japan)", 0 )