summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Phil Bennett <philipjbennett@users.noreply.github.com>2010-07-23 21:58:39 +0000
committer Phil Bennett <philipjbennett@users.noreply.github.com>2010-07-23 21:58:39 +0000
commit57018dfd3fd4846eff4679733945e23fa0070df3 (patch)
tree434bc0b234a8b88187b4a4a19a8e8ca83d72bb75
parent5927d924d38b6c98df47c1d6862fef4bfdbd2b85 (diff)
djboy.c: Hooked up Beast MCU and removed simulation code. [Phil Bennett]
-rw-r--r--src/mame/drivers/djboy.c608
-rw-r--r--src/mame/includes/djboy.h58
2 files changed, 158 insertions, 508 deletions
diff --git a/src/mame/drivers/djboy.c b/src/mame/drivers/djboy.c
index 55551015fdc..0726c33bad4 100644
--- a/src/mame/drivers/djboy.c
+++ b/src/mame/drivers/djboy.c
@@ -136,9 +136,7 @@ Notes:
|OUTPUT MONO ON|
|--------------------------------------------|
- TODO: Hook-up Beast MCU and remove simulation.
- The internal ROM has been hand-typed from a photograph of the
- chip die and should marked BAD_DUMP until confirmed correct.
+ To do: Finish verifying the Beast internal ROM and remove BAD_DUMP flag
*/
#include "emu.h"
@@ -153,437 +151,29 @@ Notes:
/* KANEKO BEAST state */
-static void ProtectionOut( running_machine *machine, int i, UINT8 data )
-{
- djboy_state *state = (djboy_state *)machine->driver_data;
-
- if (state->prot_available_data_count == i)
- state->prot_output_buffer[state->prot_available_data_count++] = data;
- else
- {
- logerror("prot_output_buffer overflow!\n");
- exit(1);
- }
-} /* ProtectionOut */
-
-static int GetLives( running_machine *machine )
-{
- int dsw = input_port_read(machine, "DSW2");
- switch (dsw & 0x30)
- {
- case 0x10: return 3;
- case 0x00: return 5;
- case 0x20: return 7;
- case 0x30: return 9;
- }
- return 0;
-} /* GetLives */
-
-
-static WRITE8_HANDLER( coinplus_w )
-{
- djboy_state *state = (djboy_state *)space->machine->driver_data;
-
- int dsw = input_port_read(space->machine, "DSW1");
- coin_counter_w(space->machine, 0, data & 1);
- coin_counter_w(space->machine, 1, data & 2);
-
- if (data & 1)
- { /* TODO: coinage adjustments */
- logerror("COIN A+\n");
- switch ((dsw & 0x30) >> 4)
- {
- case 0: state->coin += 4; break; /* 1 coin, 1 credit */
- case 1: state->coin += 8; break; /* 1 coin, 2 credits */
- case 2: state->coin += 2; break; /* 2 coins, 1 credit */
- case 3: state->coin += 6; break; /* 2 coins, 3 credits */
- }
- }
- if (data & 2)
- {
- logerror("COIN B+\n");
- switch ((dsw & 0xc0) >> 6)
- {
- case 0: state->coin += 4; break; /* 1 coin, 1 credit */
- case 1: state->coin += 8; break; /* 1 coin, 2 credits */
- case 2: state->coin += 2; break; /* 2 coins, 1 credit */
- case 3: state->coin += 6; break; /* 2 coins, 3 credits */
- }
- }
-} /* coinplus_w */
-
-static void OutputProtectionState( running_machine *machine, int i, int type )
-{
- djboy_state *state = (djboy_state *)machine->driver_data;
- int io = ~input_port_read(machine, "IN0");
- int dat = 0x00;
-
- switch (state->mDjBoyState)
- {
- case eDJBOY_ATTRACT_HIGHSCORE:
- if (state->coin >= 4)
- {
- dat = 0x01;
- state->mDjBoyState = eDJBOY_PRESS_P1_START;
- logerror("COIN UP\n");
- }
- else if (state->complete)
- {
- dat = 0x06;
- state->mDjBoyState = eDJBOY_ATTRACT_TITLE;
- }
- break;
-
- case eDJBOY_ATTRACT_TITLE:
- if (state->coin >= 4)
- {
- dat = 0x01;
- state->mDjBoyState = eDJBOY_PRESS_P1_START;
- logerror("COIN UP\n");
- }
- else if (state->complete)
- {
- dat = 0x15;
- state->mDjBoyState = eDJBOY_ATTRACT_GAMEPLAY;
- }
- break;
-
- case eDJBOY_ATTRACT_GAMEPLAY:
- if (state->coin>=4)
- {
- dat = 0x01;
- state->mDjBoyState = eDJBOY_PRESS_P1_START;
- logerror("COIN UP\n");
- }
- else if (state->complete)
- {
- dat = 0x0b;
- state->mDjBoyState = eDJBOY_ATTRACT_HIGHSCORE;
- }
- break;
-
- case eDJBOY_PRESS_P1_START:
- if (io & 1) /* p1 start */
- {
- dat = 0x16;
- state->mDjBoyState = eDJBOY_ACTIVE_GAMEPLAY;
- logerror("P1 START\n");
- }
- else if (state->coin >= 8)
- {
- dat = 0x05;
- state->mDjBoyState = eDJBOY_PRESS_P1_OR_P2_START;
- logerror("COIN2 UP\n");
- }
- break;
-
- case eDJBOY_PRESS_P1_OR_P2_START:
- if (io & 1) /* p1 start */
- {
- dat = 0x16;
- state->mDjBoyState = eDJBOY_ACTIVE_GAMEPLAY;
- state->lives[0] = GetLives(machine);
- logerror("P1 START!\n");
- state->coin -= 4;
- }
- else if (io & 2) /* p2 start */
- {
- dat = 0x0a;
- state->mDjBoyState = eDJBOY_ACTIVE_GAMEPLAY;
- state->lives[0] = GetLives(machine);
- state->lives[1] = GetLives(machine);
- logerror("P2 START!\n");
- state->coin -= 8;
- }
- break;
-
- case eDJBOY_ACTIVE_GAMEPLAY:
- if (state->lives[0] == 0 && state->lives[1] == 0 && state->complete) /* continue countdown complete */
- {
- dat = 0x0f;
- logerror("countdown complete!\n");
- state->mDjBoyState = eDJBOY_ATTRACT_HIGHSCORE;
- }
- else if (state->coin >= 4)
- {
- if ((io & 1) && state->lives[0] == 0)
- {
- dat = 0x12; /* continue (P1) */
- state->lives[0] = GetLives(machine);
- state->mDjBoyState = eDJBOY_ACTIVE_GAMEPLAY;
- state->coin -= 4;
- logerror("P1 CONTINUE!\n");
- }
- else if ((io & 2) && state->lives[1] == 0)
- {
- dat = 0x08; /* continue (P2) */
- state->lives[1] = GetLives(machine);
- state->mDjBoyState = eDJBOY_ACTIVE_GAMEPLAY;
- state->coin -= 4;
- logerror("P2 CONTINUE!\n");
- }
- }
- break;
- }
- state->complete = 0;
- ProtectionOut(machine, i, dat);
-} /* OutputProtectionState */
-
-static void CommonProt( running_machine *machine, int i, int type )
-{
- djboy_state *state = (djboy_state *)machine->driver_data;
- int displayedCredits = state->coin / 4;
- if (displayedCredits > 9)
- displayedCredits = 9;
-
- ProtectionOut(machine, i++, displayedCredits);
- ProtectionOut(machine, i++, input_port_read(machine, "IN0")); /* COIN/START */
- OutputProtectionState(machine, i, type);
-} /* CommonProt */
-
static WRITE8_HANDLER( beast_data_w )
{
djboy_state *state = (djboy_state *)space->machine->driver_data;
- state->prot_busy_count = 1;
-
- logerror("0x%04x: prot_w(0x%02x)\n", cpu_get_pc(space->cpu), data);
-
- watchdog_reset_w(space, 0, 0);
-
- if (state->prot_mode == ePROT_WAIT_DSW1_WRITEBACK)
- {
- logerror("[DSW1_WRITEBACK]\n");
- ProtectionOut(space->machine, 0, input_port_read(space->machine, "DSW2")); /* DSW2 */
- state->prot_mode = ePROT_WAIT_DSW2_WRITEBACK;
- }
- else if (state->prot_mode == ePROT_WAIT_DSW2_WRITEBACK)
- {
- logerror("[DSW2_WRITEBACK]\n");
- state->prot_mode = ePROT_STORE_PARAM;
- state->prot_offs = 0;
- }
- else if (state->prot_mode == ePROT_STORE_PARAM)
- {
- logerror("prot param[%d]: 0x%02x\n", state->prot_offs, data);
- if (state->prot_offs < 8)
- state->prot_param[state->prot_offs++] = data;
-
- if(state->prot_offs == 8)
- state->prot_mode = ePROT_NORMAL;
- }
- else if (state->prot_mode == ePROT_WRITE_BYTE)
- { /* pc == 0x79cd */
- state->prot_ram[(state->prot_offs++) & 0x7f] = data;
- state->prot_mode = ePROT_WRITE_BYTES;
- }
- else
- {
- switch (data)
- {
- case 0x00:
- if (state->prot_mode == ePROT_WRITE_BYTES)
- { /* next byte is data to write to internal prot RAM */
- state->prot_mode = ePROT_WRITE_BYTE;
- }
- else if (state->prot_mode == ePROT_READ_BYTES)
- { /* request next byte of internal prot RAM */
- ProtectionOut(space->machine, 0, state->prot_ram[(state->prot_offs++) & 0x7f]);
- }
- else
- logerror("UNEXPECTED PREFIX!\n");
- break;
-
- case 0x01: // pc=7389
- OutputProtectionState(space->machine, 0, 0x01);
- break;
-
- case 0x02:
- CommonProt(space->machine, 0, 0x02);
- break;
-
- case 0x03: /* prepare for memory write to protection device ram (pc == 0x7987) */ // -> 0x02
- logerror("[WRITE BYTES]\n");
- state->prot_mode = ePROT_WRITE_BYTES;
- state->prot_offs = 0;
- break;
-
- case 0x04:
- ProtectionOut(space->machine, 0, 0); // ?
- ProtectionOut(space->machine, 1, 0); // ?
- ProtectionOut(space->machine, 2, 0); // ?
- ProtectionOut(space->machine, 3, 0); // ?
- CommonProt(space->machine, 4, 0x04);
- break;
-
- case 0x05: /* 0x71f4 */
- ProtectionOut(space->machine, 0, input_port_read(space->machine, "IN1")); // to $42
- ProtectionOut(space->machine, 1, 0); // ?
- ProtectionOut(space->machine, 2, input_port_read(space->machine, "IN2")); // to $43
- ProtectionOut(space->machine, 3, 0); // ?
- ProtectionOut(space->machine, 4, 0); // ?
- CommonProt(space->machine, 5, 0x05);
- break;
-
- case 0x07:
- CommonProt(space->machine, 0, 0x07);
- break;
-
- case 0x08: /* pc == 0x727a */
- ProtectionOut(space->machine, 0, input_port_read(space->machine, "IN0")); /* COIN/START */
- ProtectionOut(space->machine, 1, input_port_read(space->machine, "IN1")); /* JOY1 */
- ProtectionOut(space->machine, 2, input_port_read(space->machine, "IN2")); /* JOY2 */
- ProtectionOut(space->machine, 3, input_port_read(space->machine, "DSW1")); /* DSW1 */
- ProtectionOut(space->machine, 4, input_port_read(space->machine, "DSW2")); /* DSW2 */
- CommonProt(space->machine, 5, 0x08);
- break;
-
- case 0x09:
- ProtectionOut(space->machine, 0, 0); // ?
- ProtectionOut(space->machine, 1, 0); // ?
- ProtectionOut(space->machine, 2, 0); // ?
- CommonProt(space->machine, 3, 0x09);
- break;
-
- case 0x0a:
- CommonProt(space->machine, 0, 0x0a);
- break;
-
- case 0x0c:
- CommonProt(space->machine, 1, 0x0c);
- break;
-
- case 0x0d:
- CommonProt(space->machine, 2, 0x0d);
- break;
-
- case 0xfe: /* prepare for memory read from protection device ram (pc == 0x79ee, 0x7a3f) */
- if (state->prot_mode == ePROT_WRITE_BYTES)
- {
- state->prot_mode = ePROT_READ_BYTES;
- logerror("[READ BYTES]\n");
- }
- else
- {
- state->prot_mode = ePROT_WRITE_BYTES;
- logerror("[WRITE BYTES*]\n");
- }
- state->prot_offs = 0;
- break;
-
- case 0xff: /* read DSW (pc == 0x714d) */
- ProtectionOut(space->machine, 0, input_port_read(space->machine, "DSW1")); /* DSW1 */
- state->prot_mode = ePROT_WAIT_DSW1_WRITEBACK;
- break;
-
- case 0xa9: /* 1-player game: P1 dies
- 2-player game: P2 dies */
- if (state->lives[0] > 0 && state->lives[1] > 0 )
- {
- state->lives[1]--;
- logerror("%02x P2 DIE(%d)\n", data, state->lives[1]);
- }
- else if (state->lives[0] > 0)
- {
- state->lives[0]--;
- logerror("%02x P1 DIE(%d)\n", data, state->lives[0]);
- }
- else
- {
- logerror("%02x COMPLETE.\n", data);
- state->complete = 0xa9;
- }
- break;
-
- case 0x92: /* p2 lost life; in 2-p game, P1 died */
- if (state->lives[0] > 0 && state->lives[1] > 0 )
- {
- state->lives[0]--;
- logerror("%02x P1 DIE(%d)\n", data, state->lives[0]);
- }
- else if (state->lives[1] > 0)
- {
- state->lives[1]--;
- logerror("%02x P2 DIE (%d)\n", data, state->lives[1]);
- }
- else
- {
- logerror("%02x COMPLETE.\n", data);
- state->complete = 0x92;
- }
- break;
-
- case 0xa3: /* p2 bonus life */
- state->lives[1]++;
- logerror("%02x P2 BONUS(%d)\n", data, state->lives[1]);
- break;
-
- case 0xa5: /* p1 bonus life */
- state->lives[0]++;
- logerror("%02x P1 BONUS(%d)\n", data, state->lives[0]);
- break;
-
- case 0xad: /* 1p game start ack */
- logerror("%02x 1P GAME START\n", data);
- break;
-
- case 0xb0: /* 1p+2p game start ack */
- logerror("%02x 1P+2P GAME START\n", data);
- break;
-
- case 0xb3: /* 1p continue ack */
- logerror("%02x 1P CONTINUE\n", data);
- break;
-
- case 0xb7: /* 2p continue ack */
- logerror("%02x 2P CONTINUE\n", data);
- break;
-
- default:
- case 0x97:
- case 0x9a:
- logerror("!!0x%04x: prot_w(0x%02x)\n", cpu_get_pc(space->cpu), data);
- break;
- }
- }
-} /* beast_data_w */
+ state->data_to_beast = data;
+ state->z80_to_beast_full = 1;
+ state->beast_int0_l = 0;
+ cpu_set_input_line(state->beast, INPUT_LINE_IRQ0, ASSERT_LINE);
+}
static READ8_HANDLER( beast_data_r )
-{ /* port#4 */
+{
djboy_state *state = (djboy_state *)space->machine->driver_data;
- UINT8 data = 0x00;
- if (state->prot_available_data_count)
- {
- int i;
- data = state->prot_output_buffer[0];
- state->prot_available_data_count--;
- for (i = 0; i < state->prot_available_data_count; i++)
- state->prot_output_buffer[i] = state->prot_output_buffer[i + 1];
- }
- else
- {
- logerror("prot_r: data expected!\n");
- }
- logerror("0x%04x: prot_r() == 0x%02x\n", cpu_get_pc(space->cpu), data);
- return data;
-} /* beast_data_r */
+
+ state->beast_to_z80_full = 0;
+ return state->data_to_z80;
+}
static READ8_HANDLER( beast_status_r )
-{ /* port 0xc */
+{
djboy_state *state = (djboy_state *)space->machine->driver_data;
- UINT8 result = 0;
-
- if (state->prot_busy_count)
- {
- state->prot_busy_count--;
- result |= 1 << 3;
- }
- if (!state->prot_available_data_count)
- {
- result |= 1 << 2;
- }
- return result;
-} /* beast_status_r */
+ return (!state->beast_to_z80_full << 2) | (state->z80_to_beast_full << 3);
+}
/******************************************************************************/
@@ -642,6 +232,12 @@ static WRITE8_HANDLER( cpu1_bankswitch_w )
}
}
+static WRITE8_HANDLER( coin_count_w )
+{
+ coin_counter_w(space->machine, 0, data & 1);
+ coin_counter_w(space->machine, 1, data & 2);
+}
+
/******************************************************************************/
static WRITE8_HANDLER( trigger_nmi_on_sound_cpu2 )
@@ -688,12 +284,12 @@ static ADDRESS_MAP_START( cpu1_port_am, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(cpu1_bankswitch_w)
AM_RANGE(0x02, 0x02) AM_WRITE(trigger_nmi_on_sound_cpu2)
- AM_RANGE(0x04, 0x04) AM_READWRITE(beast_data_r,beast_data_w)
+ AM_RANGE(0x04, 0x04) AM_READWRITE(beast_data_r, beast_data_w)
AM_RANGE(0x06, 0x06) AM_WRITE(djboy_scrolly_w)
AM_RANGE(0x08, 0x08) AM_WRITE(djboy_scrollx_w)
AM_RANGE(0x0a, 0x0a) AM_WRITE(trigger_nmi_on_cpu0)
AM_RANGE(0x0c, 0x0c) AM_READ(beast_status_r)
- AM_RANGE(0x0e, 0x0e) AM_WRITE(coinplus_w)
+ AM_RANGE(0x0e, 0x0e) AM_WRITE(coin_count_w)
ADDRESS_MAP_END
/******************************************************************************/
@@ -715,13 +311,102 @@ ADDRESS_MAP_END
/******************************************************************************/
+static READ8_HANDLER( beast_p0_r )
+{
+ // ?
+ return 0;
+}
+
+static WRITE8_HANDLER( beast_p0_w )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+
+ if (!BIT(state->beast_p0, 1) && BIT(data, 1))
+ {
+ state->beast_to_z80_full = 1;
+ state->data_to_z80 = state->beast_p1;
+ }
+
+ if (BIT(data, 0) == 1)
+ state->z80_to_beast_full = 0;
+
+ state->beast_p0 = data;
+}
+
+static READ8_HANDLER( beast_p1_r )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+
+ if (BIT(state->beast_p0, 0) == 0)
+ return state->data_to_beast;
+ else
+ return 0; // ?
+}
+
+static WRITE8_HANDLER( beast_p1_w )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+
+ if (data == 0xff)
+ {
+ state->beast_int0_l = 1;
+ cpu_set_input_line(state->beast, INPUT_LINE_IRQ0, CLEAR_LINE);
+ }
+
+ state->beast_p1 = data;
+}
+
+static READ8_HANDLER( beast_p2_r )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+
+ switch ((state->beast_p0 >> 2) & 3)
+ {
+ case 0: return input_port_read(space->machine, "IN1");
+ case 1: return input_port_read(space->machine, "IN2");
+ case 2: return input_port_read(space->machine, "IN0");
+ default: return 0xff;
+ }
+}
+
+static WRITE8_HANDLER( beast_p2_w )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+ state->beast_p2 = data;
+}
+
+static READ8_HANDLER( beast_p3_r )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+
+ UINT8 dsw = 0;
+ UINT8 dsw1 = ~input_port_read(space->machine, "DSW1");
+ UINT8 dsw2 = ~input_port_read(space->machine, "DSW2");
+
+ switch ((state->beast_p0 >> 5) & 3)
+ {
+ case 0: dsw = (BIT(dsw2, 4) << 3) | (BIT(dsw2, 0) << 2) | (BIT(dsw1, 4) << 1) | BIT(dsw1, 0); break;
+ case 1: dsw = (BIT(dsw2, 5) << 3) | (BIT(dsw2, 1) << 2) | (BIT(dsw1, 5) << 1) | BIT(dsw1, 1); break;
+ case 2: dsw = (BIT(dsw2, 6) << 3) | (BIT(dsw2, 2) << 2) | (BIT(dsw1, 6) << 1) | BIT(dsw1, 2); break;
+ case 3: dsw = (BIT(dsw2, 7) << 3) | (BIT(dsw2, 3) << 2) | (BIT(dsw1, 7) << 1) | BIT(dsw1, 3); break;
+ }
+ return (dsw << 4) | (state->beast_int0_l << 2) | (state->beast_to_z80_full << 3);
+}
+
+static WRITE8_HANDLER( beast_p3_w )
+{
+ djboy_state *state = (djboy_state *)space->machine->driver_data;
+
+ state->beast_p3 = data;
+ cpu_set_input_line(state->cpu1, INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE);
+}
/* Program/data maps are defined in the 8051 core */
static ADDRESS_MAP_START( djboy_mcu_io_map, ADDRESS_SPACE_IO, 8 )
-// AM_RANGE(MCS51_PORT_P0,MCS51_PORT_P0)
-// AM_RANGE(MCS51_PORT_P1,MCS51_PORT_P1)
-// AM_RANGE(MCS51_PORT_P2,MCS51_PORT_P2)
-// AM_RANGE(MCS51_PORT_P3,MCS51_PORT_P3)
+ AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE(beast_p0_r, beast_p0_w)
+ AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READWRITE(beast_p1_r, beast_p1_w)
+ AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE(beast_p2_r, beast_p2_w)
+ AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(beast_p3_r, beast_p3_w)
ADDRESS_MAP_END
/******************************************************************************/
@@ -863,26 +548,25 @@ static MACHINE_START( djboy )
state->maincpu = machine->device("maincpu");
state->cpu1 = machine->device("cpu1");
state->cpu2 = machine->device("cpu2");
+ state->beast = machine->device("beast");
state->pandora = machine->device("pandora");
state_save_register_global(machine, state->videoreg);
state_save_register_global(machine, state->scrollx);
state_save_register_global(machine, state->scrolly);
- /* Kaneko BEAST */
- state_save_register_global(machine, state->coin);
- state_save_register_global(machine, state->complete);
state_save_register_global(machine, state->addr);
- state_save_register_global_array(machine, state->lives);
-
- state_save_register_global(machine, state->mDjBoyState );
- state_save_register_global(machine, state->prot_mode);
- state_save_register_global(machine, state->prot_busy_count);
- state_save_register_global(machine, state->prot_available_data_count);
- state_save_register_global(machine, state->prot_offs);
- state_save_register_global_array(machine, state->prot_output_buffer);
- state_save_register_global_array(machine, state->prot_ram);
- state_save_register_global_array(machine, state->prot_param);
+
+ /* Kaneko BEAST */
+ state_save_register_global(machine, state->data_to_beast);
+ state_save_register_global(machine, state->data_to_z80);
+ state_save_register_global(machine, state->beast_to_z80_full);
+ state_save_register_global(machine, state->z80_to_beast_full);
+ state_save_register_global(machine, state->beast_int0_l);
+ state_save_register_global(machine, state->beast_p0);
+ state_save_register_global(machine, state->beast_p1);
+ state_save_register_global(machine, state->beast_p2);
+ state_save_register_global(machine, state->beast_p3);
}
static MACHINE_RESET( djboy )
@@ -893,34 +577,22 @@ static MACHINE_RESET( djboy )
state->scrollx = 0;
state->scrolly = 0;
- /* Kaneko BEAST */
- state->coin = 0;
- state->complete = 0;
state->addr = 0xff;
- state->lives[0] = 0;
- state->lives[1] = 0;
-
- state->prot_busy_count = 0;
- state->prot_available_data_count = 0;
- state->prot_offs = 0;
-
- memset(state->prot_output_buffer, 0, PROT_OUTPUT_BUFFER_SIZE);
- memset(state->prot_ram, 0, 0x80);
- memset(state->prot_param, 0, 8);
- state->mDjBoyState = eDJBOY_ATTRACT_HIGHSCORE;
- state->prot_mode = ePROT_NORMAL;
+ state->beast_int0_l = 1;
+ state->beast_to_z80_full = 0;
+ state->z80_to_beast_full = 0;
}
static MACHINE_DRIVER_START( djboy )
MDRV_DRIVER_DATA(djboy_state)
- MDRV_CPU_ADD("maincpu", Z80,6000000)
+ MDRV_CPU_ADD("maincpu", Z80, 6000000)
MDRV_CPU_PROGRAM_MAP(cpu0_am)
MDRV_CPU_IO_MAP(cpu0_port_am)
- MDRV_CPU_VBLANK_INT_HACK(djboy_interrupt,2)
+ MDRV_CPU_VBLANK_INT_HACK(djboy_interrupt, 2)
- MDRV_CPU_ADD("cpu1", Z80,6000000)
+ MDRV_CPU_ADD("cpu1", Z80, 6000000)
MDRV_CPU_PROGRAM_MAP(cpu1_am)
MDRV_CPU_IO_MAP(cpu1_port_am)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
@@ -930,7 +602,7 @@ static MACHINE_DRIVER_START( djboy )
MDRV_CPU_IO_MAP(cpu2_port_am)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
- MDRV_CPU_ADD("mcu", I80C51, 6000000)
+ MDRV_CPU_ADD("beast", I80C51, 6000000)
MDRV_CPU_IO_MAP(djboy_mcu_io_map)
MDRV_QUANTUM_TIME(HZ(6000))
@@ -982,8 +654,8 @@ ROM_START( djboy )
ROM_LOAD( "bs200.8c", 0x00000, 0x0c000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_CONTINUE( 0x10000, 0x14000 )
- ROM_REGION( 0x1000, "mcu", 0 ) /* MSM80C51F microcontroller */
- ROM_LOAD( "beast.9s", 0x00000, 0x1000, BAD_DUMP CRC(73cae0a8) SHA1(1456ad3387d1255b9ca44f3e3505e458b0ed078c) )
+ ROM_REGION( 0x1000, "beast", 0 ) /* MSM80C51F microcontroller */
+ ROM_LOAD( "beast.9s", 0x00000, 0x1000, BAD_DUMP CRC(6e889917) SHA1(ff4c483b4876f7976e671bb8e6f3da537be6e099) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* sprites */
ROM_LOAD( "bs000.1h", 0x000000, 0x80000, CRC(be4bf805) SHA1(a73c564575fe89d26225ca8ec2d98b6ac319ac18) )
@@ -1018,8 +690,8 @@ ROM_START( djboya )
ROM_LOAD( "bs200.8c", 0x00000, 0x0c000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_CONTINUE( 0x10000, 0x14000 )
- ROM_REGION( 0x1000, "mcu", 0 ) /* MSM80C51F microcontroller*/
- ROM_LOAD( "beast.9s", 0x00000, 0x1000, BAD_DUMP CRC(73cae0a8) SHA1(1456ad3387d1255b9ca44f3e3505e458b0ed078c) )
+ ROM_REGION( 0x1000, "beast", 0 ) /* MSM80C51F microcontroller*/
+ ROM_LOAD( "beast.9s", 0x00000, 0x1000, BAD_DUMP CRC(6e889917) SHA1(ff4c483b4876f7976e671bb8e6f3da537be6e099) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* sprites */
ROM_LOAD( "bs000.1h", 0x000000, 0x80000, CRC(be4bf805) SHA1(a73c564575fe89d26225ca8ec2d98b6ac319ac18) )
@@ -1054,8 +726,8 @@ ROM_START( djboyj )
ROM_LOAD( "bs200.8c", 0x00000, 0x0c000, CRC(f6c19e51) SHA1(82193f71122df07cce0a7f057a87b89eb2d587a1) )
ROM_CONTINUE( 0x10000, 0x14000 )
- ROM_REGION( 0x1000, "mcu", 0 ) /* MSM80C51F microcontroller */
- ROM_LOAD( "beast.9s", 0x00000, 0x1000, BAD_DUMP CRC(73cae0a8) SHA1(1456ad3387d1255b9ca44f3e3505e458b0ed078c) )
+ ROM_REGION( 0x1000, "beast", 0 ) /* MSM80C51F microcontroller */
+ ROM_LOAD( "beast.9s", 0x00000, 0x1000, BAD_DUMP CRC(6e889917) SHA1(ff4c483b4876f7976e671bb8e6f3da537be6e099) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* sprites */
ROM_LOAD( "bs000.1h", 0x000000, 0x80000, CRC(be4bf805) SHA1(a73c564575fe89d26225ca8ec2d98b6ac319ac18) )
diff --git a/src/mame/includes/djboy.h b/src/mame/includes/djboy.h
index 739400933ed..783ddf814d7 100644
--- a/src/mame/includes/djboy.h
+++ b/src/mame/includes/djboy.h
@@ -14,59 +14,37 @@ public:
djboy_state(running_machine &machine) { }
/* memory pointers */
- UINT8 * videoram;
- UINT8 * paletteram;
+ UINT8 *videoram;
+ UINT8 *paletteram;
+
+ /* ROM banking */
+ UINT8 bankxor;
+ UINT8 addr;
/* video-related */
- tilemap_t *background;
- UINT8 videoreg, scrollx, scrolly;
+ tilemap_t *background;
+ UINT8 videoreg, scrollx, scrolly;
/* Kaneko BEAST state */
- int prot_busy_count;
- UINT8 prot_output_buffer[PROT_OUTPUT_BUFFER_SIZE];
- int prot_available_data_count;
- int prot_offs; /* internal state */
- UINT8 prot_ram[0x80]; /* internal RAM */
- UINT8 prot_param[8];
- int coin;
- int complete;
- int lives[2];
- int addr;
- int bankxor;
- int mDjBoyState;
- int prot_mode;
+ UINT8 data_to_beast;
+ UINT8 data_to_z80;
+ UINT8 beast_to_z80_full;
+ UINT8 z80_to_beast_full;
+ UINT8 beast_int0_l;
+ UINT8 beast_p0;
+ UINT8 beast_p1;
+ UINT8 beast_p2;
+ UINT8 beast_p3;
/* devices */
running_device *maincpu;
running_device *cpu1;
running_device *cpu2;
running_device *pandora;
+ running_device *beast;
};
-// mDjBoyState
-enum
-{
- eDJBOY_ATTRACT_HIGHSCORE = 0,
- eDJBOY_ATTRACT_TITLE,
- eDJBOY_ATTRACT_GAMEPLAY,
- eDJBOY_PRESS_P1_START,
- eDJBOY_PRESS_P1_OR_P2_START,
- eDJBOY_ACTIVE_GAMEPLAY
-};
-
-// prot_mode
-enum
-{
- ePROT_NORMAL = 0,
- ePROT_WRITE_BYTES,
- ePROT_WRITE_BYTE,
- ePROT_READ_BYTES,
- ePROT_WAIT_DSW1_WRITEBACK,
- ePROT_WAIT_DSW2_WRITEBACK,
- ePROT_STORE_PARAM
-};
-
/*----------- defined in video/djboy.c -----------*/
WRITE8_HANDLER( djboy_scrollx_w );