diff options
| author | 2010-07-23 21:58:39 +0000 | |
|---|---|---|
| committer | 2010-07-23 21:58:39 +0000 | |
| commit | 57018dfd3fd4846eff4679733945e23fa0070df3 (patch) | |
| tree | 434bc0b234a8b88187b4a4a19a8e8ca83d72bb75 | |
| parent | 5927d924d38b6c98df47c1d6862fef4bfdbd2b85 (diff) | |
djboy.c: Hooked up Beast MCU and removed simulation code. [Phil Bennett]
| -rw-r--r-- | src/mame/drivers/djboy.c | 608 | ||||
| -rw-r--r-- | src/mame/includes/djboy.h | 58 |
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 ); |
