diff options
author | Fabio Priuli <etabeta78@users.noreply.github.com> | 2009-12-09 23:42:28 +0000 |
---|---|---|
committer | Fabio Priuli <etabeta78@users.noreply.github.com> | 2009-12-09 23:42:28 +0000 |
commit | 637085584beaef3a4e657aedc2676fcf5c7e6708 (patch) | |
tree | 0ecc1035d152cc36735ef22de270a46ae6534a2f /src/mame/drivers/kickgoal.c | |
parent | db86be935face855fa7bde117e17692a9fa005d0 (diff) |
Added driver data struct and save states to the following drivers:
kangaroo.c, karnov.c, kchamp.c, kickgoal.c, kingobox.c, kncljoe.c, koikoi.c, kopunch.c, ksayakyu.c and kyugo.c
Diffstat (limited to 'src/mame/drivers/kickgoal.c')
-rw-r--r-- | src/mame/drivers/kickgoal.c | 445 |
1 files changed, 231 insertions, 214 deletions
diff --git a/src/mame/drivers/kickgoal.c b/src/mame/drivers/kickgoal.c index c66317197f9..b3ecb6a5d2c 100644 --- a/src/mame/drivers/kickgoal.c +++ b/src/mame/drivers/kickgoal.c @@ -37,8 +37,9 @@ lev 7 : 0x7c : 0000 0000 - x #include "driver.h" #include "cpu/m68000/m68000.h" #include "cpu/pic16c5x/pic16c5x.h" -#include "machine/eeprom.h" +#include "machine/eepromdev.h" #include "sound/okim6295.h" +#include "includes/kickgoal.h" /************************************************************************** This table converts commands sent from the main CPU, into sample numbers @@ -108,27 +109,13 @@ Hollywood Action #define oki_time_base 0x08 -//static int kickgoal_sound; -//static int kickgoal_melody; -static int kickgoal_melody_loop; -//static int kickgoal_snd_bank; -static int snd_new, snd_sam[4]; - - -UINT16 *kickgoal_fgram, *kickgoal_bgram, *kickgoal_bg2ram, *kickgoal_scrram; -WRITE16_HANDLER( kickgoal_fgram_w ); -WRITE16_HANDLER( kickgoal_bgram_w ); -WRITE16_HANDLER( kickgoal_bg2ram_w ); - -VIDEO_START( kickgoal ); -VIDEO_UPDATE( kickgoal ); - -VIDEO_START( actionhw ); -VIDEO_UPDATE( actionhw ); +#ifdef UNUSED_FUNCTION +//static int kickgoal_sound; +//static int state->melody; +//static int kickgoal_snd_bank; -#ifdef UNUSED_FUNCTION static void kickgoal_play(const device_config *device, int melody, int data) { int status = okim6295_r(device,0); @@ -137,12 +124,12 @@ static void kickgoal_play(const device_config *device, int melody, int data) if (kickgoal_sound == 0) popmessage("Unknown sound command %02x",kickgoal_sound); if (melody) { - if (kickgoal_melody != kickgoal_sound) { - kickgoal_melody = kickgoal_sound; - kickgoal_melody_loop = kickgoal_sound; + if (state->melody != kickgoal_sound) { + state->melody = kickgoal_sound; + state->melody_loop = kickgoal_sound; if (status & 0x08) okim6295_w(device,0,0x40); - okim6295_w(device,0,(0x80 | kickgoal_melody)); + okim6295_w(device,0,(0x80 | state->melody)); okim6295_w(device,0,0x81); } } @@ -170,8 +157,8 @@ WRITE16_DEVICE_HANDLER( kickgoal_snd_w ) if (data >= 0x40) { if (data == 0xfe) { okim6295_w(device,0,0x40); /* Stop playing the melody */ - kickgoal_melody = 0x00; - kickgoal_melody_loop = 0x00; + state->melody = 0x00; + state->melody_loop = 0x00; } else { logerror("Unknown command (%02x) sent to the Sound controller\n",data); @@ -217,9 +204,11 @@ WRITE16_DEVICE_HANDLER( kickgoal_snd_w ) static WRITE16_DEVICE_HANDLER( actionhw_snd_w ) { + kickgoal_state *state = (kickgoal_state *)device->machine->driver_data; logerror("%s: Writing %04x to Sound CPU - mask %04x\n",cpuexec_describe_context(device->machine),data,mem_mask); - if (!ACCESSING_BITS_0_7) data >>= 8; + if (!ACCESSING_BITS_0_7) + data >>= 8; switch (data) { @@ -227,214 +216,221 @@ static WRITE16_DEVICE_HANDLER( actionhw_snd_w ) case 0xfd: okim6295_set_bank_base(device, (2 * 0x40000)); break; case 0xfe: okim6295_set_bank_base(device, (1 * 0x40000)); break; case 0xff: okim6295_set_bank_base(device, (3 * 0x40000)); break; - case 0x78: okim6295_w(device,0,data); - snd_sam[0]=00; snd_sam[1]=00; snd_sam[2]=00; snd_sam[3]=00; - break; - default: if (snd_new) /* Play new sample */ + case 0x78: + okim6295_w(device, 0, data); + state->snd_sam[0] = 00; state->snd_sam[1]= 00; state->snd_sam[2] = 00; state->snd_sam[3] = 00; + break; + default: + if (state->snd_new) /* Play new sample */ + { + if ((data & 0x80) && (state->snd_sam[3] != state->snd_new)) { - if ((data & 0x80) && (snd_sam[3] != snd_new)) + logerror("About to play sample %02x at vol %02x\n", state->snd_new, data); + if ((okim6295_r(device, 0) & 0x08) != 0x08) { - logerror("About to play sample %02x at vol %02x\n",snd_new,data); - if ((okim6295_r(device,0) & 0x08) != 0x08) - { - logerror("Playing sample %02x at vol %02x\n",snd_new,data); - okim6295_w(device,0,snd_new); - okim6295_w(device,0,data); - } - snd_new = 00; + logerror("Playing sample %02x at vol %02x\n", state->snd_new, data); + okim6295_w(device, 0, state->snd_new); + okim6295_w(device, 0, data); } - if ((data & 0x40) && (snd_sam[2] != snd_new)) - { - logerror("About to play sample %02x at vol %02x\n",snd_new,data); - if ((okim6295_r(device,0) & 0x04) != 0x04) - { - logerror("Playing sample %02x at vol %02x\n",snd_new,data); - okim6295_w(device,0,snd_new); - okim6295_w(device,0,data); - } - snd_new = 00; - } - if ((data & 0x20) && (snd_sam[1] != snd_new)) - { - logerror("About to play sample %02x at vol %02x\n",snd_new,data); - if ((okim6295_r(device,0) & 0x02) != 0x02) - { - logerror("Playing sample %02x at vol %02x\n",snd_new,data); - okim6295_w(device,0,snd_new); - okim6295_w(device,0,data); - } - snd_new = 00; - } - if ((data & 0x10) && (snd_sam[0] != snd_new)) + state->snd_new = 00; + } + if ((data & 0x40) && (state->snd_sam[2] != state->snd_new)) + { + logerror("About to play sample %02x at vol %02x\n", state->snd_new, data); + if ((okim6295_r(device, 0) & 0x04) != 0x04) { - logerror("About to play sample %02x at vol %02x\n",snd_new,data); - if ((okim6295_r(device,0) & 0x01) != 0x01) - { - logerror("Playing sample %02x at vol %02x\n",snd_new,data); - okim6295_w(device,0,snd_new); - okim6295_w(device,0,data); - } - snd_new = 00; + logerror("Playing sample %02x at vol %02x\n", state->snd_new, data); + okim6295_w(device, 0, state->snd_new); + okim6295_w(device, 0, data); } - break; + state->snd_new = 00; } - else if (data > 0x80) /* New sample command */ + if ((data & 0x20) && (state->snd_sam[1] != state->snd_new)) { - logerror("Next sample %02x\n",data); - snd_new = data; - break; + logerror("About to play sample %02x at vol %02x\n", state->snd_new, data); + if ((okim6295_r(device, 0) & 0x02) != 0x02) + { + logerror("Playing sample %02x at vol %02x\n", state->snd_new, data); + okim6295_w(device, 0, state->snd_new); + okim6295_w(device, 0, data); + } + state->snd_new = 00; } - else /* Turn a channel off */ + if ((data & 0x10) && (state->snd_sam[0] != state->snd_new)) { - logerror("Turning channel %02x off\n",data); - okim6295_w(device,0,data); - if (data & 0x40) snd_sam[3] = 00; - if (data & 0x20) snd_sam[2] = 00; - if (data & 0x10) snd_sam[1] = 00; - if (data & 0x08) snd_sam[0] = 00; - snd_new = 00; - break; + logerror("About to play sample %02x at vol %02x\n", state->snd_new, data); + if ((okim6295_r(device, 0) & 0x01) != 0x01) + { + logerror("Playing sample %02x at vol %02x\n", state->snd_new, data); + okim6295_w(device, 0, state->snd_new); + okim6295_w(device, 0, data); + } + state->snd_new = 00; } + break; + } + else if (data > 0x80) /* New sample command */ + { + logerror("Next sample %02x\n", data); + state->snd_new = data; + break; + } + else /* Turn a channel off */ + { + logerror("Turning channel %02x off\n", data); + okim6295_w(device, 0, data); + if (data & 0x40) state->snd_sam[3] = 00; + if (data & 0x20) state->snd_sam[2] = 00; + if (data & 0x10) state->snd_sam[1] = 00; + if (data & 0x08) state->snd_sam[0] = 00; + state->snd_new = 00; + break; + } } } - - -static int m6295_comm; -static int m6295_bank; -static UINT16 m6295_key_delay; static INTERRUPT_GEN( kickgoal_interrupt ) { - const device_config *adpcm = devtag_get_device(device->machine, "oki"); + kickgoal_state *state = (kickgoal_state *)device->machine->driver_data; - if ((okim6295_r(adpcm,0) & 0x08) == 0) + if ((okim6295_r(state->adpcm, 0) & 0x08) == 0) { - switch(kickgoal_melody_loop) + switch(state->melody_loop) { - case 0x060: kickgoal_melody_loop = 0x061; break; - case 0x061: kickgoal_melody_loop = 0x062; break; - case 0x062: kickgoal_melody_loop = 0x060; break; - - case 0x065: kickgoal_melody_loop = 0x165; break; - case 0x165: kickgoal_melody_loop = 0x265; break; - case 0x265: kickgoal_melody_loop = 0x365; break; - case 0x365: kickgoal_melody_loop = 0x066; break; - case 0x066: kickgoal_melody_loop = 0x067; break; - case 0x067: kickgoal_melody_loop = 0x068; break; - case 0x068: kickgoal_melody_loop = 0x065; break; - - case 0x063: kickgoal_melody_loop = 0x063; break; - case 0x064: kickgoal_melody_loop = 0x064; break; - case 0x069: kickgoal_melody_loop = 0x069; break; - case 0x06a: kickgoal_melody_loop = 0x06a; break; - case 0x06b: kickgoal_melody_loop = 0x06b; break; - case 0x06c: kickgoal_melody_loop = 0x06c; break; - - default: kickgoal_melody_loop = 0x00; break; + case 0x060: state->melody_loop = 0x061; break; + case 0x061: state->melody_loop = 0x062; break; + case 0x062: state->melody_loop = 0x060; break; + + case 0x065: state->melody_loop = 0x165; break; + case 0x165: state->melody_loop = 0x265; break; + case 0x265: state->melody_loop = 0x365; break; + case 0x365: state->melody_loop = 0x066; break; + case 0x066: state->melody_loop = 0x067; break; + case 0x067: state->melody_loop = 0x068; break; + case 0x068: state->melody_loop = 0x065; break; + + case 0x063: state->melody_loop = 0x063; break; + case 0x064: state->melody_loop = 0x064; break; + case 0x069: state->melody_loop = 0x069; break; + case 0x06a: state->melody_loop = 0x06a; break; + case 0x06b: state->melody_loop = 0x06b; break; + case 0x06c: state->melody_loop = 0x06c; break; + + default: state->melody_loop = 0x00; break; } - if (kickgoal_melody_loop) + if (state->melody_loop) { -// logerror("Changing to sample %02x\n",kickgoal_melody_loop); - okim6295_w(adpcm,0,((0x80 | kickgoal_melody_loop) & 0xff)); - okim6295_w(adpcm,0,0x81); +// logerror("Changing to sample %02x\n", state->melody_loop); + okim6295_w(state->adpcm, 0, ((0x80 | state->melody_loop) & 0xff)); + okim6295_w(state->adpcm, 0, 0x81); } } - if ( input_code_pressed_once(device->machine, KEYCODE_PGUP) ) + if (input_code_pressed_once(device->machine, KEYCODE_PGUP)) { - if (m6295_key_delay >= (0x60 * oki_time_base)) + if (state->m6295_key_delay >= (0x60 * oki_time_base)) { - m6295_bank += 0x01; - m6295_bank &= 0x03; - if (m6295_bank == 0x03) m6295_bank = 0x00; - popmessage("Changing Bank to %02x",m6295_bank); - okim6295_set_bank_base(adpcm, ((m6295_bank) * 0x40000)); - - if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00; - else m6295_key_delay = (0x30 * oki_time_base); + state->m6295_bank += 0x01; + state->m6295_bank &= 0x03; + if (state->m6295_bank == 0x03) + state->m6295_bank = 0x00; + popmessage("Changing Bank to %02x", state->m6295_bank); + okim6295_set_bank_base(state->adpcm, ((state->m6295_bank) * 0x40000)); + + if (state->m6295_key_delay == 0xffff) + state->m6295_key_delay = 0x00; + else + state->m6295_key_delay = (0x30 * oki_time_base); } else - m6295_key_delay += (0x01 * oki_time_base); + state->m6295_key_delay += (0x01 * oki_time_base); } - else if ( input_code_pressed_once(device->machine, KEYCODE_PGDN) ) + else if (input_code_pressed_once(device->machine, KEYCODE_PGDN)) { - if (m6295_key_delay >= (0x60 * oki_time_base)) + if (state->m6295_key_delay >= (0x60 * oki_time_base)) { - m6295_bank -= 0x01; - m6295_bank &= 0x03; - if (m6295_bank == 0x03) m6295_bank = 0x02; - popmessage("Changing Bank to %02x",m6295_bank); - okim6295_set_bank_base(adpcm, ((m6295_bank) * 0x40000)); - - if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00; - else m6295_key_delay = (0x30 * oki_time_base); + state->m6295_bank -= 0x01; + state->m6295_bank &= 0x03; + if (state->m6295_bank == 0x03) + state->m6295_bank = 0x02; + popmessage("Changing Bank to %02x", state->m6295_bank); + okim6295_set_bank_base(state->adpcm, ((state->m6295_bank) * 0x40000)); + + if (state->m6295_key_delay == 0xffff) + state->m6295_key_delay = 0x00; + else + state->m6295_key_delay = (0x30 * oki_time_base); } else - m6295_key_delay += (0x01 * oki_time_base); + state->m6295_key_delay += (0x01 * oki_time_base); } - else if ( input_code_pressed_once(device->machine, KEYCODE_INSERT) ) + else if (input_code_pressed_once(device->machine, KEYCODE_INSERT)) { - if (m6295_key_delay >= (0x60 * oki_time_base)) + if (state->m6295_key_delay >= (0x60 * oki_time_base)) { - m6295_comm += 1; - m6295_comm &= 0x7f; - if (m6295_comm == 0x00) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; } - if (m6295_comm == 0x60) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; } - if (m6295_comm == 0x65) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; } - if (m6295_comm == 0x69) { okim6295_set_bank_base(adpcm, (2 * 0x40000)); m6295_bank = 2; } - if (m6295_comm == 0x70) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; } - popmessage("Sound test command %02x on Bank %02x",m6295_comm,m6295_bank); - - if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00; - else m6295_key_delay = (0x5d * oki_time_base); + state->m6295_comm += 1; + state->m6295_comm &= 0x7f; + if (state->m6295_comm == 0x00) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; } + if (state->m6295_comm == 0x60) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; } + if (state->m6295_comm == 0x65) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; } + if (state->m6295_comm == 0x69) { okim6295_set_bank_base(state->adpcm, (2 * 0x40000)); state->m6295_bank = 2; } + if (state->m6295_comm == 0x70) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; } + popmessage("Sound test command %02x on Bank %02x", state->m6295_comm, state->m6295_bank); + + if (state->m6295_key_delay == 0xffff) + state->m6295_key_delay = 0x00; + else + state->m6295_key_delay = (0x5d * oki_time_base); } else - m6295_key_delay += (0x01 * oki_time_base); + state->m6295_key_delay += (0x01 * oki_time_base); } - else if ( input_code_pressed_once(device->machine, KEYCODE_DEL) ) + else if (input_code_pressed_once(device->machine, KEYCODE_DEL)) { - if (m6295_key_delay >= (0x60 * oki_time_base)) + if (state->m6295_key_delay >= (0x60 * oki_time_base)) { - m6295_comm -= 1; - m6295_comm &= 0x7f; - if (m6295_comm == 0x2b) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; } - if (m6295_comm == 0x64) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; } - if (m6295_comm == 0x68) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; } - if (m6295_comm == 0x6c) { okim6295_set_bank_base(adpcm, (2 * 0x40000)); m6295_bank = 2; } - if (m6295_comm == 0x76) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; } - popmessage("Sound test command %02x on Bank %02x",m6295_comm,m6295_bank); - - if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00; - else m6295_key_delay = (0x5d * oki_time_base); + state->m6295_comm -= 1; + state->m6295_comm &= 0x7f; + if (state->m6295_comm == 0x2b) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; } + if (state->m6295_comm == 0x64) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; } + if (state->m6295_comm == 0x68) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; } + if (state->m6295_comm == 0x6c) { okim6295_set_bank_base(state->adpcm, (2 * 0x40000)); state->m6295_bank = 2; } + if (state->m6295_comm == 0x76) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; } + popmessage("Sound test command %02x on Bank %02x", state->m6295_comm, state->m6295_bank); + + if (state->m6295_key_delay == 0xffff) + state->m6295_key_delay = 0x00; + else + state->m6295_key_delay = (0x5d * oki_time_base); } else - m6295_key_delay += (0x01 * oki_time_base); + state->m6295_key_delay += (0x01 * oki_time_base); } - else if ( input_code_pressed_once(device->machine, KEYCODE_Z) ) + else if (input_code_pressed_once(device->machine, KEYCODE_Z)) { - if (m6295_key_delay >= (0x80 * oki_time_base)) + if (state->m6295_key_delay >= (0x80 * oki_time_base)) { - okim6295_w(adpcm,0,0x78); - okim6295_w(adpcm,0,(0x80 | m6295_comm)); - okim6295_w(adpcm,0,0x11); + okim6295_w(state->adpcm, 0, 0x78); + okim6295_w(state->adpcm, 0, (0x80 | state->m6295_comm)); + okim6295_w(state->adpcm, 0, 0x11); - popmessage("Playing sound %02x on Bank %02x",m6295_comm,m6295_bank); + popmessage("Playing sound %02x on Bank %02x", state->m6295_comm, state->m6295_bank); - if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00; - else m6295_key_delay = (0x60 * oki_time_base); + if (state->m6295_key_delay == 0xffff) + state->m6295_key_delay = 0x00; + else + state->m6295_key_delay = (0x60 * oki_time_base); } else - m6295_key_delay += (0x01 * oki_time_base); -// logerror("Sending %02x to the sound CPU\n",m6295_comm); + state->m6295_key_delay += (0x01 * oki_time_base); +// logerror("Sending %02x to the sound CPU\n", state->m6295_comm); } - else m6295_key_delay = 0xffff; + else + state->m6295_key_delay = 0xffff; } -static const UINT8 *kickgoal_default_eeprom; -static int kickgoal_default_eeprom_length; - static const UINT8 kickgoal_default_eeprom_type1[128] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -447,30 +443,13 @@ static const UINT8 kickgoal_default_eeprom_type1[128] = { }; -static NVRAM_HANDLER( kickgoal ) -{ - if (read_or_write) - eeprom_save(file); - else - { - eeprom_init(machine, &eeprom_interface_93C46); - - if (file) eeprom_load(file); - else - { - if (kickgoal_default_eeprom) /* Sane Defaults */ - eeprom_set_data(kickgoal_default_eeprom,kickgoal_default_eeprom_length); - } - } -} - - static READ16_HANDLER( kickgoal_eeprom_r ) { + kickgoal_state *state = (kickgoal_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { - return eeprom_read_bit(); + return eepromdev_read_bit(state->eeprom); } return 0; } @@ -478,18 +457,19 @@ static READ16_HANDLER( kickgoal_eeprom_r ) static WRITE16_HANDLER( kickgoal_eeprom_w ) { + kickgoal_state *state = (kickgoal_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { switch (offset) { case 0: - eeprom_set_cs_line((data & 0x0001) ? CLEAR_LINE : ASSERT_LINE); + eepromdev_set_cs_line(state->eeprom, (data & 0x0001) ? CLEAR_LINE : ASSERT_LINE); break; case 1: - eeprom_set_clock_line((data & 0x0001) ? ASSERT_LINE : CLEAR_LINE); + eepromdev_set_clock_line(state->eeprom, (data & 0x0001) ? ASSERT_LINE : CLEAR_LINE); break; case 2: - eeprom_write_bit(data & 0x0001); + eepromdev_write_bit(state->eeprom, data & 0x0001); break; } } @@ -507,12 +487,12 @@ static ADDRESS_MAP_START( kickgoal_program_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x800004, 0x800005) AM_DEVWRITE("oki", actionhw_snd_w) AM_RANGE(0x900000, 0x900005) AM_WRITE(kickgoal_eeprom_w) AM_RANGE(0x900006, 0x900007) AM_READ(kickgoal_eeprom_r) - AM_RANGE(0xa00000, 0xa03fff) AM_RAM_WRITE(kickgoal_fgram_w) AM_BASE(&kickgoal_fgram) /* FG Layer */ - AM_RANGE(0xa04000, 0xa07fff) AM_RAM_WRITE(kickgoal_bgram_w) AM_BASE(&kickgoal_bgram) /* Higher BG Layer */ - AM_RANGE(0xa08000, 0xa0bfff) AM_RAM_WRITE(kickgoal_bg2ram_w) AM_BASE(&kickgoal_bg2ram) /* Lower BG Layer */ + AM_RANGE(0xa00000, 0xa03fff) AM_RAM_WRITE(kickgoal_fgram_w) AM_BASE_MEMBER(kickgoal_state, fgram) /* FG Layer */ + AM_RANGE(0xa04000, 0xa07fff) AM_RAM_WRITE(kickgoal_bgram_w) AM_BASE_MEMBER(kickgoal_state, bgram) /* Higher BG Layer */ + AM_RANGE(0xa08000, 0xa0bfff) AM_RAM_WRITE(kickgoal_bg2ram_w) AM_BASE_MEMBER(kickgoal_state, bg2ram) /* Lower BG Layer */ AM_RANGE(0xa0c000, 0xa0ffff) AM_RAM // more tilemap? - AM_RANGE(0xa10000, 0xa1000f) AM_WRITEONLY AM_BASE(&kickgoal_scrram) /* Scroll Registers */ - AM_RANGE(0xb00000, 0xb007ff) AM_WRITEONLY AM_BASE_SIZE_GENERIC(spriteram) /* Sprites */ + AM_RANGE(0xa10000, 0xa1000f) AM_WRITEONLY AM_BASE_MEMBER(kickgoal_state, scrram) /* Scroll Registers */ + AM_RANGE(0xb00000, 0xb007ff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(kickgoal_state, spriteram, spriteram_size) /* Sprites */ AM_RANGE(0xc00000, 0xc007ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram) /* Palette */ // actionhw reads this AM_RANGE(0xff0000, 0xffffff) AM_RAM ADDRESS_MAP_END @@ -663,10 +643,41 @@ GFXDECODE_END /* MACHINE drivers ***********************************************************/ +static MACHINE_START( kickgoal ) +{ + kickgoal_state *state = (kickgoal_state *)machine->driver_data; + + state->adpcm = devtag_get_device(machine, "oki"); + state->eeprom = devtag_get_device(machine, "eeprom"); + state_save_register_global_array(machine, state->snd_sam); + state_save_register_global(machine, state->melody_loop); + state_save_register_global(machine, state->snd_new); + state_save_register_global(machine, state->m6295_comm); + state_save_register_global(machine, state->m6295_bank); + state_save_register_global(machine, state->m6295_key_delay); +} + +static MACHINE_RESET( kickgoal ) +{ + kickgoal_state *state = (kickgoal_state *)machine->driver_data; + + state->melody_loop = 0; + state->snd_new = 0; + state->snd_sam[0] = 0; + state->snd_sam[1] = 0; + state->snd_sam[2] = 0; + state->snd_sam[3] = 0; + state->m6295_comm = 0; + state->m6295_bank = 0; + state->m6295_key_delay = 0; +} static MACHINE_DRIVER_START( kickgoal ) + /* driver data */ + MDRV_DRIVER_DATA(kickgoal_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(kickgoal_program_map) @@ -678,7 +689,10 @@ static MACHINE_DRIVER_START( kickgoal ) /* Program and Data Maps are internal to the MCU */ MDRV_CPU_IO_MAP(kickgoal_sound_io_map) - MDRV_NVRAM_HANDLER(kickgoal) + MDRV_MACHINE_START(kickgoal) + MDRV_MACHINE_RESET(kickgoal) + + MDRV_EEPROM_93C46_ADD("eeprom", 128, kickgoal_default_eeprom_type1) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -703,6 +717,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( actionhw ) + /* driver data */ + MDRV_DRIVER_DATA(kickgoal_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(kickgoal_program_map) @@ -713,7 +730,10 @@ static MACHINE_DRIVER_START( actionhw ) /* Program and Data Maps are internal to the MCU */ MDRV_CPU_IO_MAP(actionhw_io_map) - MDRV_NVRAM_HANDLER(kickgoal) // 93C46 really + MDRV_MACHINE_START(kickgoal) + MDRV_MACHINE_RESET(kickgoal) + + MDRV_EEPROM_93C46_ADD("eeprom", 128, kickgoal_default_eeprom_type1) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -806,11 +826,8 @@ static DRIVER_INIT( kickgoal ) /* fix "bug" that prevents game from writing to EEPROM */ rom[0x12b0/2] = 0x0001; #endif - - kickgoal_default_eeprom = kickgoal_default_eeprom_type1; - kickgoal_default_eeprom_length = sizeof(kickgoal_default_eeprom_type1); } -GAME( 1995, kickgoal,0, kickgoal, kickgoal, kickgoal, ROT0, "TCH", "Kick Goal", GAME_NO_SOUND ) -GAME( 1995, actionhw,0, actionhw, kickgoal, kickgoal, ROT0, "TCH", "Action Hollywood", GAME_IMPERFECT_SOUND ) +GAME( 1995, kickgoal,0, kickgoal, kickgoal, kickgoal, ROT0, "TCH", "Kick Goal", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1995, actionhw,0, actionhw, kickgoal, kickgoal, ROT0, "TCH", "Action Hollywood", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |