116
116
*************************************/
118
static WRITE8_HANDLER( champbas_watchdog_reset_w )
120
champbas_state *state = space->machine().driver_data<champbas_state>();
121
state->m_watchdog_count = 0;
124
static CUSTOM_INPUT( champbas_watchdog_bit2 )
126
champbas_state *state = field.machine().driver_data<champbas_state>();
127
return BIT(state->m_watchdog_count, 2);
131
static WRITE8_HANDLER( irq_enable_w )
133
champbas_state *state = space->machine().driver_data<champbas_state>();
135
state->m_irq_mask = data & 1;
137
if (!state->m_irq_mask)
138
device_set_input_line(state->m_maincpu, 0, CLEAR_LINE);
118
WRITE8_MEMBER(champbas_state::champbas_watchdog_reset_w)
120
m_watchdog_count = 0;
123
CUSTOM_INPUT_MEMBER(champbas_state::champbas_watchdog_bit2)
125
return BIT(m_watchdog_count, 2);
129
WRITE8_MEMBER(champbas_state::irq_enable_w)
132
m_irq_mask = data & 1;
135
device_set_input_line(m_maincpu, 0, CLEAR_LINE);
141
138
static TIMER_CALLBACK( exctsccr_fm_callback )
158
155
*************************************/
160
static WRITE8_HANDLER( champbas_mcu_switch_w )
157
WRITE8_MEMBER(champbas_state::champbas_mcu_switch_w)
162
159
// switch shared RAM between CPU and MCU bus
163
160
// FIXME not implemented
166
static WRITE8_HANDLER( champbas_mcu_halt_w )
163
WRITE8_MEMBER(champbas_state::champbas_mcu_halt_w)
168
champbas_state *state = space->machine().driver_data<champbas_state>();
170
166
// MCU not present/not used in champbas
171
if (state->m_mcu == NULL)
175
device_set_input_line(state->m_mcu, INPUT_LINE_HALT, data ? ASSERT_LINE : CLEAR_LINE);
171
device_set_input_line(m_mcu, INPUT_LINE_HALT, data ? ASSERT_LINE : CLEAR_LINE);
179
175
/* champbja another protection */
180
static READ8_HANDLER( champbja_alt_protection_r )
176
READ8_MEMBER(champbas_state::champbja_alt_protection_r)
218
214
*************************************/
220
static ADDRESS_MAP_START( talbot_map, AS_PROGRAM, 8 )
216
static ADDRESS_MAP_START( talbot_map, AS_PROGRAM, 8, champbas_state )
221
217
AM_RANGE(0x0000, 0x5fff) AM_ROM
222
218
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE("share1") /* MCU shared RAM */
223
AM_RANGE(0x7000, 0x7001) AM_DEVWRITE("aysnd", ay8910_data_address_w)
224
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE_MEMBER(champbas_state, m_bg_videoram)
219
AM_RANGE(0x7000, 0x7001) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
220
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_SHARE("bg_videoram")
225
221
AM_RANGE(0x8800, 0x8fef) AM_RAM
226
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_BASE_SIZE_MEMBER(champbas_state, m_spriteram, m_spriteram_size)
222
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram")
228
224
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
229
225
AM_RANGE(0xa040, 0xa040) AM_READ_PORT("P2")
239
235
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w)
240
236
AM_RANGE(0xa007, 0xa007) AM_WRITE(champbas_mcu_switch_w)
242
AM_RANGE(0xa060, 0xa06f) AM_WRITEONLY AM_BASE_MEMBER(champbas_state, m_spriteram_2)
238
AM_RANGE(0xa060, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram_2")
243
239
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(champbas_watchdog_reset_w)
247
static ADDRESS_MAP_START( champbas_main_map, AS_PROGRAM, 8 )
243
static ADDRESS_MAP_START( champbas_main_map, AS_PROGRAM, 8, champbas_state )
248
244
AM_RANGE(0x0000, 0x5fff) AM_ROM
249
245
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE("share1")
250
AM_RANGE(0x7000, 0x7001) AM_DEVWRITE("aysnd", ay8910_data_address_w)
246
AM_RANGE(0x7000, 0x7001) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
251
247
AM_RANGE(0x7800, 0x7fff) AM_ROM // champbb2 only
252
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE_MEMBER(champbas_state, m_bg_videoram)
248
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_SHARE("bg_videoram")
253
249
AM_RANGE(0x8800, 0x8fef) AM_RAM
254
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_BASE_SIZE_MEMBER(champbas_state, m_spriteram, m_spriteram_size)
250
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram")
256
252
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
257
253
AM_RANGE(0xa040, 0xa040) AM_READ_PORT("P2")
267
263
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w) // MCU not present/not used in champbas
268
264
AM_RANGE(0xa007, 0xa007) AM_WRITE(champbas_mcu_switch_w) // MCU not present/not used in champbas
270
AM_RANGE(0xa060, 0xa06f) AM_RAM AM_BASE_MEMBER(champbas_state, m_spriteram_2)
271
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
266
AM_RANGE(0xa060, 0xa06f) AM_RAM AM_SHARE("spriteram_2")
267
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_byte_w)
272
268
/* AM_RANGE(0xa0a0, 0xa0a0) ???? */
273
269
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(champbas_watchdog_reset_w)
276
272
AM_RANGE(0x6800, 0x68ff) AM_READ(champbja_alt_protection_r)
279
static ADDRESS_MAP_START( exctsccrb_main_map, AS_PROGRAM, 8 )
275
static ADDRESS_MAP_START( exctsccrb_main_map, AS_PROGRAM, 8, champbas_state )
280
276
AM_RANGE(0x0000, 0x5fff) AM_ROM
281
277
// AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE("share1") // MCU not used (though it's present on the board)
282
AM_RANGE(0x7000, 0x7001) AM_DEVWRITE("aysnd", ay8910_data_address_w)
278
AM_RANGE(0x7000, 0x7001) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_address_w)
283
279
// AM_RANGE(0x7800, 0x7fff) AM_ROM // champbb2 only
284
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE_MEMBER(champbas_state, m_bg_videoram)
285
AM_RANGE(0x8800, 0x8fff) AM_RAM AM_BASE_MEMBER(champbas_state, m_spriteram_2) /* ??? */
280
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_SHARE("bg_videoram")
281
AM_RANGE(0x8800, 0x8fff) AM_RAM AM_SHARE("spriteram_2") /* ??? */
287
283
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
288
284
AM_RANGE(0xa040, 0xa040) AM_READ_PORT("P2")
296
292
AM_RANGE(0xa006, 0xa006) AM_WRITENOP /* MCU is not used, but some leftover code still writes here */
297
293
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* MCU is not used, but some leftover code still writes here */
299
AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_BASE_MEMBER(champbas_state, m_spriteram) /* Sprite Pos */
300
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
295
AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram") /* Sprite Pos */
296
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_byte_w)
301
297
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(watchdog_reset_w)
305
static ADDRESS_MAP_START( exctsccr_main_map, AS_PROGRAM, 8 )
301
static ADDRESS_MAP_START( exctsccr_main_map, AS_PROGRAM, 8, champbas_state )
306
302
AM_RANGE(0x0000, 0x5fff) AM_ROM
307
303
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE("share1")
308
304
AM_RANGE(0x7c00, 0x7fff) AM_RAM
309
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE_MEMBER(champbas_state, m_bg_videoram)
310
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_BASE_MEMBER(champbas_state, m_spriteram_2) /* ??? */
305
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_SHARE("bg_videoram")
306
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("spriteram_2") /* ??? */
312
308
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
313
309
AM_RANGE(0xa040, 0xa040) AM_READ_PORT("P2")
321
317
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w)
322
318
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but i dont need it */
324
AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_BASE_MEMBER(champbas_state, m_spriteram) /* Sprite pos */
325
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
320
AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram") /* Sprite pos */
321
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_byte_w)
326
322
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(watchdog_reset_w)
331
static ADDRESS_MAP_START( champbas_sub_map, AS_PROGRAM, 8 )
327
static ADDRESS_MAP_START( champbas_sub_map, AS_PROGRAM, 8, champbas_state )
332
328
AM_RANGE(0x0000, 0x5fff) AM_ROM
333
AM_RANGE(0x6000, 0x7fff) AM_READ(soundlatch_r)
329
AM_RANGE(0x6000, 0x7fff) AM_READ(soundlatch_byte_r)
334
330
AM_RANGE(0x8000, 0x9fff) AM_WRITENOP // 4-bit return code to main CPU (not used)
335
AM_RANGE(0xa000, 0xbfff) AM_WRITE(soundlatch_clear_w)
336
AM_RANGE(0xc000, 0xdfff) AM_DEVWRITE("dac", champbas_dac_w)
331
AM_RANGE(0xa000, 0xbfff) AM_WRITE(soundlatch_clear_byte_w)
332
AM_RANGE(0xc000, 0xdfff) AM_DEVWRITE_LEGACY("dac", champbas_dac_w)
337
333
AM_RANGE(0xe000, 0xe3ff) AM_MIRROR(0x1c00) AM_RAM
341
static ADDRESS_MAP_START( exctsccr_sub_map, AS_PROGRAM, 8 )
337
static ADDRESS_MAP_START( exctsccr_sub_map, AS_PROGRAM, 8, champbas_state )
342
338
AM_RANGE(0x0000, 0x8fff) AM_ROM
343
339
AM_RANGE(0xa000, 0xa7ff) AM_RAM
344
AM_RANGE(0xc008, 0xc008) AM_DEVWRITE("dac1", champbas_dac_w)
345
AM_RANGE(0xc009, 0xc009) AM_DEVWRITE("dac2", champbas_dac_w)
346
AM_RANGE(0xc00c, 0xc00c) AM_WRITE(soundlatch_clear_w)
347
AM_RANGE(0xc00d, 0xc00d) AM_READ(soundlatch_r)
340
AM_RANGE(0xc008, 0xc008) AM_DEVWRITE_LEGACY("dac1", champbas_dac_w)
341
AM_RANGE(0xc009, 0xc009) AM_DEVWRITE_LEGACY("dac2", champbas_dac_w)
342
AM_RANGE(0xc00c, 0xc00c) AM_WRITE(soundlatch_clear_byte_w)
343
AM_RANGE(0xc00d, 0xc00d) AM_READ(soundlatch_byte_r)
348
344
// AM_RANGE(0xc00f, 0xc00f) AM_WRITENOP /* ??? */
351
static ADDRESS_MAP_START( exctsccr_sound_io_map, AS_IO, 8 )
347
static ADDRESS_MAP_START( exctsccr_sound_io_map, AS_IO, 8, champbas_state )
352
348
ADDRESS_MAP_GLOBAL_MASK( 0x00ff )
353
AM_RANGE(0x82, 0x83) AM_DEVWRITE("ay1", ay8910_data_address_w)
354
AM_RANGE(0x86, 0x87) AM_DEVWRITE("ay2", ay8910_data_address_w)
355
AM_RANGE(0x8a, 0x8b) AM_DEVWRITE("ay3", ay8910_data_address_w)
356
AM_RANGE(0x8e, 0x8f) AM_DEVWRITE("ay4", ay8910_data_address_w)
349
AM_RANGE(0x82, 0x83) AM_DEVWRITE_LEGACY("ay1", ay8910_data_address_w)
350
AM_RANGE(0x86, 0x87) AM_DEVWRITE_LEGACY("ay2", ay8910_data_address_w)
351
AM_RANGE(0x8a, 0x8b) AM_DEVWRITE_LEGACY("ay3", ay8910_data_address_w)
352
AM_RANGE(0x8e, 0x8f) AM_DEVWRITE_LEGACY("ay4", ay8910_data_address_w)
360
static ADDRESS_MAP_START( mcu_map, AS_PROGRAM, 8 )
356
static ADDRESS_MAP_START( mcu_map, AS_PROGRAM, 8, champbas_state )
361
357
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_SHARE("share1") /* main CPU shared RAM */
405
401
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
406
402
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
407
403
PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
408
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(champbas_watchdog_bit2, NULL) // bit 2 of the watchdog counter
404
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, champbas_state,champbas_watchdog_bit2, NULL) // bit 2 of the watchdog counter
410
406
PORT_START("SYSTEM")
411
407
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
1242
1238
GAME( 1983, exctsccr, 0, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer", GAME_SUPPORTS_SAVE )
1243
1239
GAME( 1983, exctsccra, exctsccr, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (alternate music)", GAME_SUPPORTS_SAVE )
1244
GAME( 1983, exctsccrj, exctsccr, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (Japan)", GAME_SUPPORTS_SAVE )
1240
GAME( 1983, exctsccrj, exctsccr, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (Japan set 1)", GAME_SUPPORTS_SAVE )
1245
1241
GAME( 1983, exctsccrj2, exctsccr, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (Japan set 2)", GAME_SUPPORTS_SAVE )
1246
1242
GAME( 1983, exctsccrb, exctsccr, exctsccrb,exctsccr, exctsccr, ROT270, "bootleg", "Exciting Soccer (bootleg)", GAME_SUPPORTS_SAVE )
1247
1243
GAME( 1984, exctscc2, 0, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer II", GAME_SUPPORTS_SAVE )