diff options
author | Angelo Salese <angelosa@users.noreply.github.com> | 2011-05-23 15:18:30 +0000 |
---|---|---|
committer | Angelo Salese <angelosa@users.noreply.github.com> | 2011-05-23 15:18:30 +0000 |
commit | b756d28cb28584832d6842445c442e9f3d0392f1 (patch) | |
tree | 1e520ff629e9d26e6832590e1a2ba6efebab754d /src | |
parent | b93dd974c6dc59009807e6289300d2de5570e48e (diff) |
Porting from MESS, nw
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/imagedev/cassette.c | 1 | ||||
-rw-r--r-- | src/emu/imagedev/cassette.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/saturn.c | 138 |
3 files changed, 59 insertions, 82 deletions
diff --git a/src/emu/imagedev/cassette.c b/src/emu/imagedev/cassette.c index 313a3b2c4a8..d6ef61cf533 100644 --- a/src/emu/imagedev/cassette.c +++ b/src/emu/imagedev/cassette.c @@ -12,7 +12,6 @@ #include "ui.h" -#define CASSETTE_TAG "cassette" #define ANIMATION_FPS 1 #define ANIMATION_FRAMES 4 diff --git a/src/emu/imagedev/cassette.h b/src/emu/imagedev/cassette.h index f742a00c13b..743186f254d 100644 --- a/src/emu/imagedev/cassette.h +++ b/src/emu/imagedev/cassette.h @@ -76,6 +76,8 @@ DECLARE_LEGACY_IMAGE_DEVICE(CASSETTE, cassette); /*************************************************************************** DEVICE CONFIGURATION MACROS ***************************************************************************/ +#define CASSETTE_TAG "cassette" +#define CASSETTE2_TAG "cassette2" #define MCFG_CASSETTE_ADD(_tag, _config) \ MCFG_DEVICE_ADD(_tag, CASSETTE, 0) \ diff --git a/src/mame/drivers/saturn.c b/src/mame/drivers/saturn.c index 3d7445f9341..36500b4f307 100644 --- a/src/mame/drivers/saturn.c +++ b/src/mame/drivers/saturn.c @@ -341,25 +341,6 @@ static int DectoBCD(int num) 7f -w EXLE2/1 */ -static void system_reset(address_space *space) -{ - saturn_state *state = space->machine().driver_data<saturn_state>(); - - /*Only backup ram and SMPC ram are retained after that this command is issued.*/ - memset(state->m_scu_regs ,0x00,0x000100); - memset(state->m_scsp_regs,0x00,0x001000); - memset(state->m_sound_ram,0x00,0x080000); - memset(state->m_workram_h,0x00,0x100000); - memset(state->m_workram_l,0x00,0x100000); - memset(state->m_vdp2_regs,0x00,0x040000); - memset(state->m_vdp2_vram,0x00,0x100000); - memset(state->m_vdp2_cram,0x00,0x080000); - memset(state->m_vdp1_vram,0x00,0x100000); - - //A-Bus - /*Order is surely wrong but whatever...*/ -} - static READ8_HANDLER( stv_SMPC_r8 ) { saturn_state *state = space->machine().driver_data<saturn_state>(); @@ -409,6 +390,47 @@ static void stv_select_game(running_machine &machine, int gameno) machine.scheduler().timer_set(attotime::zero, FUNC(stv_bankswitch_state), gameno); } +static void smpc_master_on(running_machine &machine) +{ + saturn_state *state = machine.driver_data<saturn_state>(); + + device_set_input_line(state->m_maincpu, INPUT_LINE_RESET, CLEAR_LINE); +} + +static void smpc_slave_enable(running_machine &machine,UINT8 cmd) +{ + saturn_state *state = machine.driver_data<saturn_state>(); + + device_set_input_line(state->m_slave, INPUT_LINE_RESET, cmd ? ASSERT_LINE : CLEAR_LINE); +} + +static void smpc_sound_enable(running_machine &machine,UINT8 cmd) +{ + saturn_state *state = machine.driver_data<saturn_state>(); + + device_set_input_line(state->m_audiocpu, INPUT_LINE_RESET, cmd ? ASSERT_LINE : CLEAR_LINE); + state->m_en_68k = cmd ^ 1; +} + +static void smpc_system_reset(running_machine &machine) +{ + saturn_state *state = machine.driver_data<saturn_state>(); + + /*Only backup ram and SMPC ram are retained after that this command is issued.*/ + memset(state->m_scu_regs ,0x00,0x000100); + memset(state->m_scsp_regs,0x00,0x001000); + memset(state->m_sound_ram,0x00,0x080000); + memset(state->m_workram_h,0x00,0x100000); + memset(state->m_workram_l,0x00,0x100000); + memset(state->m_vdp2_regs,0x00,0x040000); + memset(state->m_vdp2_vram,0x00,0x100000); + memset(state->m_vdp2_cram,0x00,0x080000); + memset(state->m_vdp1_vram,0x00,0x100000); + //A-Bus + + device_set_input_line(state->m_maincpu, INPUT_LINE_RESET, PULSE_LINE); +} + static WRITE8_HANDLER( stv_SMPC_w8 ) { saturn_state *state = space->machine().driver_data<saturn_state>(); @@ -483,42 +505,27 @@ static WRITE8_HANDLER( stv_SMPC_w8 ) { case 0x00: if(LOG_SMPC) logerror ("SMPC: Master ON\n"); - state->m_smpc_ram[0x5f]=0x00; + smpc_master_on(space->machine()); break; //in theory 0x01 is for Master OFF,but obviously is not used. case 0x02: - if(LOG_SMPC) logerror ("SMPC: Slave ON\n"); - state->m_smpc_ram[0x5f]=0x02; - cputag_set_input_line(space->machine(), "slave", INPUT_LINE_RESET, CLEAR_LINE); - break; case 0x03: - if(LOG_SMPC) logerror ("SMPC: Slave OFF\n"); - state->m_smpc_ram[0x5f]=0x03; - space->machine().scheduler().trigger(1000); - cputag_set_input_line(space->machine(), "slave", INPUT_LINE_RESET, ASSERT_LINE); + if(LOG_SMPC) logerror ("SMPC: Slave %s\n",(data & 1) ? "off" : "on"); + smpc_slave_enable(space->machine(),(data & 1)); break; case 0x06: - if(LOG_SMPC) logerror ("SMPC: Sound ON\n"); - /* wrong? */ - state->m_smpc_ram[0x5f]=0x06; - cputag_set_input_line(space->machine(), "audiocpu", INPUT_LINE_RESET, CLEAR_LINE); - break; case 0x07: - if(LOG_SMPC) logerror ("SMPC: Sound OFF\n"); - state->m_smpc_ram[0x5f]=0x07; + if(LOG_SMPC) logerror ("SMPC: Sound %s, ignored\n",(data & 1) ? "off" : "on"); break; /*CD (SH-1) ON/OFF,guess that this is needed for Sports Fishing games...*/ //case 0x08: //case 0x09: case 0x0d: if(LOG_SMPC) logerror ("SMPC: System Reset\n"); - state->m_smpc_ram[0x5f]=0x0d; - cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE); - system_reset(space); + smpc_system_reset(space->machine()); break; case 0x0e: if(LOG_SMPC) logerror ("SMPC: Change Clock to 352\n"); - state->m_smpc_ram[0x5f]=0x0e; space->machine().device("maincpu")->set_unscaled_clock(MASTER_CLOCK_352/2); space->machine().device("slave")->set_unscaled_clock(MASTER_CLOCK_352/2); space->machine().device("audiocpu")->set_unscaled_clock(MASTER_CLOCK_352/5); @@ -526,7 +533,6 @@ static WRITE8_HANDLER( stv_SMPC_w8 ) break; case 0x0f: if(LOG_SMPC) logerror ("SMPC: Change Clock to 320\n"); - state->m_smpc_ram[0x5f]=0x0f; space->machine().device("maincpu")->set_unscaled_clock(MASTER_CLOCK_320/2); space->machine().device("slave")->set_unscaled_clock(MASTER_CLOCK_320/2); space->machine().device("audiocpu")->set_unscaled_clock(MASTER_CLOCK_320/5); @@ -535,7 +541,6 @@ static WRITE8_HANDLER( stv_SMPC_w8 ) /*"Interrupt Back"*/ case 0x10: if(LOG_SMPC) logerror ("SMPC: Status Acquire\n"); - state->m_smpc_ram[0x5f]=0x10; state->m_smpc_ram[0x21] = (0x80) | ((state->m_NMI_reset & 1) << 6); //state->m_smpc_ram[0x23] = DectoBCD(systime.local_time.year /100); //state->m_smpc_ram[0x25] = DectoBCD(systime.local_time.year %100); @@ -589,36 +594,32 @@ static WRITE8_HANDLER( stv_SMPC_w8 ) state->m_smpc_ram[0x27] = state->m_smpc_ram[0x05]; state->m_smpc_ram[0x25] = state->m_smpc_ram[0x03]; state->m_smpc_ram[0x23] = state->m_smpc_ram[0x01]; - state->m_smpc_ram[0x5f]=0x16; break; /* SMPC memory setting*/ case 0x17: if(LOG_SMPC) logerror ("SMPC: memory setting\n"); - state->m_smpc_ram[0x5f]=0x17; break; case 0x18: if(LOG_SMPC) logerror ("SMPC: NMI request\n"); - state->m_smpc_ram[0x5f]=0x18; /*NMI is unconditionally requested?*/ cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_NMI, PULSE_LINE); break; case 0x19: if(LOG_SMPC) logerror ("SMPC: NMI Enable\n"); - state->m_smpc_ram[0x5f]=0x19; state->m_NMI_reset = 0; state->m_smpc_ram[0x21] = (0x80) | ((state->m_NMI_reset & 1) << 6); break; case 0x1a: if(LOG_SMPC) logerror ("SMPC: NMI Disable\n"); - state->m_smpc_ram[0x5f]=0x1a; state->m_NMI_reset = 1; state->m_smpc_ram[0x21] = (0x80) | ((state->m_NMI_reset & 1) << 6); break; default: - if(LOG_SMPC) logerror ("cpu '%s' (PC=%08X) SMPC: undocumented Command %02x\n", space->device().tag(), cpu_get_pc(&space->device()), data); + printf ("cpu '%s' (PC=%08X) SMPC: undocumented Command %02x\n", space->device().tag(), cpu_get_pc(&space->device()), data); } // we've processed the command, clear status flag + state->m_smpc_ram[0x5f] = data; //read-back command state->m_smpc_ram[0x63] = 0x00; /*TODO:emulate the timing of each command...*/ } @@ -781,45 +782,28 @@ static WRITE8_HANDLER( saturn_SMPC_w8 ) { case 0x00: if(LOG_SMPC) logerror ("SMPC: Master ON\n"); - state->m_smpc_ram[0x5f]=0x00; + smpc_master_on(space->machine()); break; - //in theory 0x01 is for Master OFF,but obviously is not used. + //in theory 0x01 is for Master OFF case 0x02: - if(LOG_SMPC) logerror ("SMPC: Slave ON\n"); - state->m_smpc_ram[0x5f]=0x02; - cputag_set_input_line(machine, "slave", INPUT_LINE_RESET, CLEAR_LINE); - break; case 0x03: - if(LOG_SMPC) logerror ("SMPC: Slave OFF\n"); - state->m_smpc_ram[0x5f]=0x03; - machine.scheduler().trigger(1000); - cputag_set_input_line(machine, "slave", INPUT_LINE_RESET, ASSERT_LINE); + if(LOG_SMPC) logerror ("SMPC: Slave %s\n",(data & 1) ? "off" : "on"); + smpc_slave_enable(space->machine(),data & 1); break; case 0x06: - if(LOG_SMPC) logerror ("SMPC: Sound ON\n"); - /* wrong? */ - state->m_smpc_ram[0x5f]=0x06; - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_RESET, CLEAR_LINE); - state->m_en_68k = 1; - break; case 0x07: - if(LOG_SMPC) logerror ("SMPC: Sound OFF\n"); - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_RESET, ASSERT_LINE); - state->m_en_68k = 0; - state->m_smpc_ram[0x5f]=0x07; + if(LOG_SMPC) logerror ("SMPC: Sound %s\n",(data & 1) ? "off" : "on"); + smpc_sound_enable(space->machine(),data & 1); break; /*CD (SH-1) ON/OFF,guess that this is needed for Sports Fishing games...*/ //case 0x08: //case 0x09: case 0x0d: if(LOG_SMPC) logerror ("SMPC: System Reset\n"); - state->m_smpc_ram[0x5f]=0x0d; - cputag_set_input_line(machine, "maincpu", INPUT_LINE_RESET, PULSE_LINE); - system_reset(space); + smpc_system_reset(space->machine()); break; case 0x0e: if(LOG_SMPC) logerror ("SMPC: Change Clock to 352\n"); - state->m_smpc_ram[0x5f]=0x0e; machine.device("maincpu")->set_unscaled_clock(MASTER_CLOCK_352/2); machine.device("slave")->set_unscaled_clock(MASTER_CLOCK_352/2); machine.device("audiocpu")->set_unscaled_clock(MASTER_CLOCK_352/5); @@ -827,7 +811,6 @@ static WRITE8_HANDLER( saturn_SMPC_w8 ) break; case 0x0f: if(LOG_SMPC) logerror ("SMPC: Change Clock to 320\n"); - state->m_smpc_ram[0x5f]=0x0f; machine.device("maincpu")->set_unscaled_clock(MASTER_CLOCK_320/2); machine.device("slave")->set_unscaled_clock(MASTER_CLOCK_320/2); machine.device("audiocpu")->set_unscaled_clock(MASTER_CLOCK_320/5); @@ -836,7 +819,6 @@ static WRITE8_HANDLER( saturn_SMPC_w8 ) /*"Interrupt Back"*/ case 0x10: if(LOG_SMPC) logerror ("SMPC: Status Acquire (IntBack)\n"); - state->m_smpc_ram[0x5f]=0x10; state->m_smpc_ram[0x21] = (0x80) | ((state->m_NMI_reset & 1) << 6); state->m_smpc_ram[0x23] = dec_2_bcd(systime.local_time.year / 100); state->m_smpc_ram[0x25] = dec_2_bcd(systime.local_time.year % 100); @@ -895,7 +877,6 @@ static WRITE8_HANDLER( saturn_SMPC_w8 ) state->m_smpc_ram[0x27] = state->m_smpc_ram[0x05]; state->m_smpc_ram[0x25] = state->m_smpc_ram[0x03]; state->m_smpc_ram[0x23] = state->m_smpc_ram[0x01]; - state->m_smpc_ram[0x5f]=0x16; break; /* SMPC memory setting*/ case 0x17: @@ -904,33 +885,28 @@ static WRITE8_HANDLER( saturn_SMPC_w8 ) state->m_smpc.SMEM[1] = state->m_smpc_ram[3]; state->m_smpc.SMEM[2] = state->m_smpc_ram[5]; state->m_smpc.SMEM[3] = state->m_smpc_ram[7]; - - state->m_smpc_ram[0x5f]=0x17; break; case 0x18: if(LOG_SMPC) logerror ("SMPC: NMI request\n"); - state->m_smpc_ram[0x5f]=0x18; /*NMI is unconditionally requested?*/ cputag_set_input_line(machine, "maincpu", INPUT_LINE_NMI, PULSE_LINE); break; case 0x19: if(LOG_SMPC) logerror ("SMPC: NMI Enable\n"); - state->m_smpc_ram[0x5f]=0x19; state->m_NMI_reset = 0; state->m_smpc_ram[0x21] = (0x80) | ((state->m_NMI_reset & 1) << 6); break; case 0x1a: if(LOG_SMPC) logerror ("SMPC: NMI Disable\n"); - state->m_smpc_ram[0x5f]=0x1a; state->m_NMI_reset = 1; state->m_smpc_ram[0x21] = (0x80) | ((state->m_NMI_reset & 1) << 6); - break; default: - if(LOG_SMPC) logerror ("cpu %s (PC=%08X) SMPC: undocumented Command %02x\n", space->device().tag(), cpu_get_pc(&space->device()), data); + printf ("cpu %s (PC=%08X) SMPC: undocumented Command %02x\n", space->device().tag(), cpu_get_pc(&space->device()), data); } // we've processed the command, clear status flag + state->m_smpc_ram[0x5f] = data; //read-back command state->m_smpc_ram[0x63] = 0x00; /*TODO:emulate the timing of each command...*/ } |