mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
ajax.cpp, parodius.cpp: finders and other minor cleanups
This commit is contained in:
parent
bc88265458
commit
df5962a0fb
@ -2400,9 +2400,6 @@ files {
|
|||||||
MAME_DIR .. "src/mame/includes/88games.h",
|
MAME_DIR .. "src/mame/includes/88games.h",
|
||||||
MAME_DIR .. "src/mame/video/88games.cpp",
|
MAME_DIR .. "src/mame/video/88games.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/ajax.cpp",
|
MAME_DIR .. "src/mame/drivers/ajax.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/ajax.h",
|
|
||||||
MAME_DIR .. "src/mame/machine/ajax.cpp",
|
|
||||||
MAME_DIR .. "src/mame/video/ajax.cpp",
|
|
||||||
MAME_DIR .. "src/mame/drivers/aliens.cpp",
|
MAME_DIR .. "src/mame/drivers/aliens.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/aliens.h",
|
MAME_DIR .. "src/mame/includes/aliens.h",
|
||||||
MAME_DIR .. "src/mame/video/aliens.cpp",
|
MAME_DIR .. "src/mame/video/aliens.cpp",
|
||||||
@ -2567,8 +2564,6 @@ files {
|
|||||||
MAME_DIR .. "src/mame/includes/pandoras.h",
|
MAME_DIR .. "src/mame/includes/pandoras.h",
|
||||||
MAME_DIR .. "src/mame/video/pandoras.cpp",
|
MAME_DIR .. "src/mame/video/pandoras.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/parodius.cpp",
|
MAME_DIR .. "src/mame/drivers/parodius.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/parodius.h",
|
|
||||||
MAME_DIR .. "src/mame/video/parodius.cpp",
|
|
||||||
MAME_DIR .. "src/mame/drivers/pingpong.cpp",
|
MAME_DIR .. "src/mame/drivers/pingpong.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/pingpong.h",
|
MAME_DIR .. "src/mame/includes/pingpong.h",
|
||||||
MAME_DIR .. "src/mame/video/pingpong.cpp",
|
MAME_DIR .. "src/mame/video/pingpong.cpp",
|
||||||
|
@ -13,50 +13,433 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "includes/ajax.h"
|
|
||||||
#include "includes/konamipt.h"
|
|
||||||
|
|
||||||
#include "cpu/z80/z80.h"
|
#include "includes/konamipt.h"
|
||||||
|
#include "video/k051316.h"
|
||||||
|
#include "video/k051960.h"
|
||||||
|
#include "video/k052109.h"
|
||||||
|
#include "video/konami_helper.h"
|
||||||
|
|
||||||
#include "cpu/m6809/hd6309.h"
|
#include "cpu/m6809/hd6309.h"
|
||||||
#include "cpu/m6809/konami.h"
|
#include "cpu/m6809/konami.h"
|
||||||
|
#include "cpu/z80/z80.h"
|
||||||
|
#include "machine/gen_latch.h"
|
||||||
|
#include "machine/watchdog.h"
|
||||||
|
#include "sound/k007232.h"
|
||||||
#include "sound/ymopm.h"
|
#include "sound/ymopm.h"
|
||||||
|
|
||||||
|
#include "emupal.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
|
|
||||||
void ajax_state::ajax_main_map(address_map &map)
|
// configurable logging
|
||||||
|
#define LOG_LS138 (1U << 1)
|
||||||
|
|
||||||
|
//#define VERBOSE (LOG_GENERAL | LOG_LS138)
|
||||||
|
|
||||||
|
#include "logmacro.h"
|
||||||
|
|
||||||
|
#define LOGLS138(...) LOGMASKED(LOG_LS138, __VA_ARGS__)
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class ajax_state : public driver_device
|
||||||
{
|
{
|
||||||
map(0x0000, 0x01c0).rw(FUNC(ajax_state::ls138_f10_r), FUNC(ajax_state::ls138_f10_w)); /* bankswitch + sound command + FIRQ command */
|
public:
|
||||||
map(0x0800, 0x0807).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w)); /* sprite control registers */
|
ajax_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
map(0x0c00, 0x0fff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w)); /* sprite RAM 2128SL at J7 */
|
driver_device(mconfig, type, tag),
|
||||||
map(0x1000, 0x1fff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");/* palette */
|
m_maincpu(*this, "maincpu"),
|
||||||
map(0x2000, 0x3fff).ram().share("share1"); /* shared RAM with the 6809 */
|
m_audiocpu(*this, "audiocpu"),
|
||||||
map(0x4000, 0x5fff).ram(); /* RAM 6264L at K10 */
|
m_subcpu(*this, "sub"),
|
||||||
map(0x6000, 0x7fff).bankr("mainbank"); /* banked ROM */
|
m_watchdog(*this, "watchdog"),
|
||||||
map(0x8000, 0xffff).rom(); /* ROM N11 */
|
m_k007232(*this, "k007232_%u", 1U),
|
||||||
|
m_k052109(*this, "k052109"),
|
||||||
|
m_k051960(*this, "k051960"),
|
||||||
|
m_k051316(*this, "k051316"),
|
||||||
|
m_palette(*this, "palette"),
|
||||||
|
m_soundlatch(*this, "soundlatch"),
|
||||||
|
m_mainbank(*this, "mainbank"),
|
||||||
|
m_subbank(*this, "subbank"),
|
||||||
|
m_system(*this, "SYSTEM"),
|
||||||
|
m_pl(*this, "P%u", 1U),
|
||||||
|
m_dsw(*this, "DSW%u", 1U),
|
||||||
|
m_lamps(*this, "lamp%u", 0U)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void ajax(machine_config &config);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_start() override;
|
||||||
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// devices
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<cpu_device> m_audiocpu;
|
||||||
|
required_device<cpu_device> m_subcpu;
|
||||||
|
required_device<watchdog_timer_device> m_watchdog;
|
||||||
|
required_device_array<k007232_device, 2> m_k007232;
|
||||||
|
required_device<k052109_device> m_k052109;
|
||||||
|
required_device<k051960_device> m_k051960;
|
||||||
|
required_device<k051316_device> m_k051316;
|
||||||
|
required_device<palette_device> m_palette;
|
||||||
|
required_device<generic_latch_8_device> m_soundlatch;
|
||||||
|
|
||||||
|
required_memory_bank m_mainbank;
|
||||||
|
required_memory_bank m_subbank;
|
||||||
|
|
||||||
|
required_ioport m_system;
|
||||||
|
required_ioport_array<2> m_pl;
|
||||||
|
required_ioport_array<3> m_dsw;
|
||||||
|
output_finder<8> m_lamps;
|
||||||
|
|
||||||
|
// video-related
|
||||||
|
uint8_t m_priority = 0U;
|
||||||
|
|
||||||
|
// misc
|
||||||
|
uint8_t m_firq_enable = 0;
|
||||||
|
|
||||||
|
void sound_bank_w(uint8_t data);
|
||||||
|
uint8_t ls138_f10_r(offs_t offset);
|
||||||
|
void ls138_f10_w(offs_t offset, uint8_t data);
|
||||||
|
void sub_bankswitch_w(uint8_t data);
|
||||||
|
void main_bankswitch_w(uint8_t data);
|
||||||
|
void lamps_w(uint8_t data);
|
||||||
|
void k007232_extvol_w(uint8_t data);
|
||||||
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
void volume_callback0(uint8_t data);
|
||||||
|
void volume_callback1(uint8_t data);
|
||||||
|
K051316_CB_MEMBER(zoom_callback);
|
||||||
|
K052109_CB_MEMBER(tile_callback);
|
||||||
|
K051960_CB_MEMBER(sprite_callback);
|
||||||
|
|
||||||
|
void main_map(address_map &map);
|
||||||
|
void sound_map(address_map &map);
|
||||||
|
void sub_map(address_map &map);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// video
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Callbacks for the K052109
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
K052109_CB_MEMBER(ajax_state::tile_callback)
|
||||||
|
{
|
||||||
|
static const int layer_colorbase[] = { 1024 / 16, 0 / 16, 512 / 16 };
|
||||||
|
|
||||||
|
*code |= ((*color & 0x0f) << 8) | (bank << 12);
|
||||||
|
*color = layer_colorbase[layer] + ((*color & 0xf0) >> 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ajax_state::ajax_sub_map(address_map &map)
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Callbacks for the K051960
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
K051960_CB_MEMBER(ajax_state::sprite_callback)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x07ff).rw(m_k051316, FUNC(k051316_device::read), FUNC(k051316_device::write)); /* 051316 zoom/rotation layer */
|
enum { sprite_colorbase = 256 / 16 };
|
||||||
map(0x0800, 0x080f).w(m_k051316, FUNC(k051316_device::ctrl_w)); /* 051316 control registers */
|
|
||||||
map(0x1000, 0x17ff).r(m_k051316, FUNC(k051316_device::rom_r)); /* 051316 (ROM test) */
|
/* priority bits:
|
||||||
map(0x1800, 0x1800).w(FUNC(ajax_state::bankswitch_2_w)); /* bankswitch control */
|
4 over zoom (0 = have priority)
|
||||||
map(0x2000, 0x3fff).ram().share("share1"); /* shared RAM with the 052001 */
|
5 over B (0 = have priority)
|
||||||
map(0x4000, 0x7fff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write)); /* video RAM + color RAM + video registers */
|
6 over A (1 = have priority)
|
||||||
map(0x8000, 0x9fff).bankr("subbank"); /* banked ROM */
|
never over F
|
||||||
map(0xa000, 0xffff).rom().region("sub", 0x12000); /* ROM I16 */
|
*/
|
||||||
|
*priority = 0;
|
||||||
|
if ( *color & 0x10) *priority |= GFX_PMASK_4; // Z = 4
|
||||||
|
if (~*color & 0x40) *priority |= GFX_PMASK_2; // A = 2
|
||||||
|
if ( *color & 0x20) *priority |= GFX_PMASK_1; // B = 1
|
||||||
|
*color = sprite_colorbase + (*color & 0x0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ajax_state::ajax_sound_map(address_map &map)
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Callbacks for the K051316
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
K051316_CB_MEMBER(ajax_state::zoom_callback)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x7fff).rom(); /* ROM F6 */
|
enum { zoom_colorbase = 768 / 128 };
|
||||||
map(0x8000, 0x87ff).ram(); /* RAM 2128SL at D16 */
|
|
||||||
map(0x9000, 0x9000).w(FUNC(ajax_state::sound_bank_w)); /* 007232 bankswitch */
|
*code |= ((*color & 0x07) << 8);
|
||||||
map(0xa000, 0xa00d).rw(m_k007232_1, FUNC(k007232_device::read), FUNC(k007232_device::write)); /* 007232 registers (chip 1) */
|
*color = zoom_colorbase + ((*color & 0x08) >> 3);
|
||||||
map(0xb000, 0xb00d).rw(m_k007232_2, FUNC(k007232_device::read), FUNC(k007232_device::write)); /* 007232 registers (chip 2) */
|
}
|
||||||
map(0xb80c, 0xb80c).w(FUNC(ajax_state::k007232_extvol_w)); /* extra volume, goes to the 007232 w/ A11 */
|
|
||||||
/* selecting a different latch for the external port */
|
|
||||||
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); /* YM2151 */
|
/***************************************************************************
|
||||||
|
|
||||||
|
Display Refresh
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
uint32_t ajax_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
m_k052109->tilemap_update();
|
||||||
|
|
||||||
|
screen.priority().fill(0, cliprect);
|
||||||
|
|
||||||
|
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, 2, 0, 1);
|
||||||
|
if (m_priority)
|
||||||
|
{
|
||||||
|
// basic layer order is B, zoom, A, F
|
||||||
|
m_k051316->zoom_draw(screen, bitmap, cliprect, 0, 4);
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, 1, 0, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// basic layer order is B, A, zoom, F
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, 1, 0, 2);
|
||||||
|
m_k051316->zoom_draw(screen, bitmap, cliprect, 0, 4);
|
||||||
|
}
|
||||||
|
m_k051960->k051960_sprites_draw(bitmap, cliprect, screen.priority(), -1, -1);
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, 0, 0, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// machine
|
||||||
|
|
||||||
|
/* main_bankswitch_w:
|
||||||
|
Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at H11:
|
||||||
|
|
||||||
|
Bit Description
|
||||||
|
--- -----------
|
||||||
|
7 MRB3 Selects ROM N11/N12
|
||||||
|
6 CCOUNT2 Coin Counter 2 (*)
|
||||||
|
5 CCOUNT1 Coin Counter 1 (*)
|
||||||
|
4 SRESET Slave CPU Reset?
|
||||||
|
3 PRI0 Layer Priority Selector
|
||||||
|
2 MRB2 \
|
||||||
|
1 MRB1 | ROM Bank Select
|
||||||
|
0 MRB0 /
|
||||||
|
|
||||||
|
(*) The Coin Counters are handled by the Konami Custom 051550
|
||||||
|
*/
|
||||||
|
|
||||||
|
void ajax_state::main_bankswitch_w(uint8_t data)
|
||||||
|
{
|
||||||
|
int bank = 0;
|
||||||
|
|
||||||
|
// ROM select
|
||||||
|
if (!(data & 0x80))
|
||||||
|
bank += 4;
|
||||||
|
|
||||||
|
// coin counters
|
||||||
|
machine().bookkeeping().coin_counter_w(0, data & 0x20);
|
||||||
|
machine().bookkeeping().coin_counter_w(1, data & 0x40);
|
||||||
|
|
||||||
|
// priority
|
||||||
|
m_priority = data & 0x08;
|
||||||
|
|
||||||
|
// bank # (ROMS N11 and N12)
|
||||||
|
bank += (data & 0x07);
|
||||||
|
m_mainbank->set_entry(bank);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lamps_w:
|
||||||
|
Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at B9:
|
||||||
|
|
||||||
|
Bit Description
|
||||||
|
--- -----------
|
||||||
|
7 LAMP7 & LAMP8 - Game over lamps (*)
|
||||||
|
6 LAMP3 & LAMP4 - Game over lamps (*)
|
||||||
|
5 LAMP1 - Start lamp (*)
|
||||||
|
4 Control panel quaking (**)
|
||||||
|
3 Joystick vibration (**)
|
||||||
|
2 LAMP5 & LAMP6 - Power up lamps (*)
|
||||||
|
1 LAMP2 - Super weapon lamp (*)
|
||||||
|
0 unused
|
||||||
|
|
||||||
|
(*) The Lamps are handled by the M54585P
|
||||||
|
(**)Vibration/Quaking handled by these chips:
|
||||||
|
Chip Location Description
|
||||||
|
---- -------- -----------
|
||||||
|
PS2401-4 B21 ???
|
||||||
|
UPA1452H B22 ???
|
||||||
|
LS74 H2 Dual +ve edge trigger D-type Flip-flop with SET and RESET
|
||||||
|
LS393 C20 Dual -ve edge trigger 4-bit Binary Ripple Counter with Resets
|
||||||
|
*/
|
||||||
|
|
||||||
|
void ajax_state::lamps_w(uint8_t data)
|
||||||
|
{
|
||||||
|
m_lamps[1] = BIT(data, 1); // super weapon lamp
|
||||||
|
m_lamps[2] = BIT(data, 2); // power up lamps
|
||||||
|
m_lamps[5] = BIT(data, 2); // power up lamps
|
||||||
|
m_lamps[0] = BIT(data, 5); // start lamp
|
||||||
|
m_lamps[3] = BIT(data, 6); // game over lamps
|
||||||
|
m_lamps[6] = BIT(data, 6); // game over lamps
|
||||||
|
m_lamps[4] = BIT(data, 7); // game over lamps
|
||||||
|
m_lamps[7] = BIT(data, 7); // game over lamps
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ajax_ls138_f10:
|
||||||
|
The LS138 1-of-8 Decoder/Demultiplexer at F10 selects what to do:
|
||||||
|
|
||||||
|
Address R/W Description
|
||||||
|
------- --- -----------
|
||||||
|
0x0000 (r) ??? I think this read is because a CPU core bug
|
||||||
|
(w) 0x0000 NSFIRQ Trigger FIRQ on the M6809
|
||||||
|
0x0020 AFR Watchdog reset (handled by the 051550)
|
||||||
|
0x0040 (w) SOUND Cause interrupt on the Z80
|
||||||
|
0x0080 (w) SOUNDDATA Sound code number
|
||||||
|
0x00c0 (w) MBL1 Enables the LS273 at H11 (Banking + Coin counters)
|
||||||
|
0x0100 (r) MBL2 Enables 2P Inputs reading
|
||||||
|
0x0140 (w) MBL3 Enables the LS273 at B9 (Lamps + Vibration)
|
||||||
|
0x0180 (r) MIO1 Enables 1P Inputs + DIPSW #1 & #2 reading
|
||||||
|
0x01c0 (r) MIO2 Enables DIPSW #3 reading
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint8_t ajax_state::ls138_f10_r(offs_t offset)
|
||||||
|
{
|
||||||
|
int data = 0, index;
|
||||||
|
|
||||||
|
switch ((offset & 0x01c0) >> 6)
|
||||||
|
{
|
||||||
|
case 0x00: // ???
|
||||||
|
data = machine().rand();
|
||||||
|
break;
|
||||||
|
case 0x04: // 2P inputs
|
||||||
|
data = m_pl[1]->read();
|
||||||
|
break;
|
||||||
|
case 0x06: // 1P inputs + DIPSW #1 & #2
|
||||||
|
index = offset & 0x01;
|
||||||
|
data = (offset & 0x02) ? m_dsw[index]->read() : index ? m_pl[0]->read() : m_system->read();
|
||||||
|
break;
|
||||||
|
case 0x07: // DIPSW #3
|
||||||
|
data = m_dsw[2]->read();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
LOGLS138("%04x: (ls138_f10) read from an unknown address %02x\n", m_maincpu->pc(), offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ajax_state::ls138_f10_w(offs_t offset, uint8_t data)
|
||||||
|
{
|
||||||
|
switch ((offset & 0x01c0) >> 6)
|
||||||
|
{
|
||||||
|
case 0x00: // NSFIRQ + AFR
|
||||||
|
if (offset)
|
||||||
|
m_watchdog->watchdog_reset();
|
||||||
|
else{
|
||||||
|
if (m_firq_enable) // Cause interrupt on slave CPU
|
||||||
|
m_subcpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x01: // Cause interrupt on audio CPU
|
||||||
|
m_audiocpu->set_input_line(0, HOLD_LINE);
|
||||||
|
break;
|
||||||
|
case 0x02: // Sound command number
|
||||||
|
m_soundlatch->write(data);
|
||||||
|
break;
|
||||||
|
case 0x03: // Bankswitch + coin counters + priority
|
||||||
|
main_bankswitch_w(data);
|
||||||
|
break;
|
||||||
|
case 0x05: // Lamps + Joystick vibration + Control panel quaking
|
||||||
|
lamps_w(data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
LOGLS138("%04x: (ls138_f10) write %02x to an unknown address %02x\n", m_maincpu->pc(), data, offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sub_bankswitch_w:
|
||||||
|
Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at K14:
|
||||||
|
|
||||||
|
Bit Description
|
||||||
|
--- -----------
|
||||||
|
7 unused
|
||||||
|
6 RMRD Enable char ROM reading through the video RAM
|
||||||
|
5 RVO enables 051316 wraparound
|
||||||
|
4 FIRQST FIRQ control
|
||||||
|
3 SRB3 \
|
||||||
|
2 SRB2 |
|
||||||
|
1 SRB1 | ROM Bank Select
|
||||||
|
0 SRB0 /
|
||||||
|
*/
|
||||||
|
|
||||||
|
void ajax_state::sub_bankswitch_w(uint8_t data)
|
||||||
|
{
|
||||||
|
// enable char ROM reading through the video RAM
|
||||||
|
m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// bit 5 enables 051316 wraparound
|
||||||
|
m_k051316->wraparound_enable(data & 0x20);
|
||||||
|
|
||||||
|
// FIRQ control
|
||||||
|
m_firq_enable = data & 0x10;
|
||||||
|
|
||||||
|
// bank # (ROMS G16 and I16)
|
||||||
|
m_subbank->set_entry(data & 0x0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ajax_state::machine_start()
|
||||||
|
{
|
||||||
|
uint8_t *main = memregion("maincpu")->base();
|
||||||
|
uint8_t *sub = memregion("sub")->base();
|
||||||
|
|
||||||
|
m_lamps.resolve();
|
||||||
|
m_mainbank->configure_entries(0, 4, &main[0x00000], 0x2000);
|
||||||
|
m_mainbank->configure_entries(4, 8, &main[0x10000], 0x2000);
|
||||||
|
m_subbank->configure_entries(0, 9, &sub[0x00000], 0x2000);
|
||||||
|
|
||||||
|
save_item(NAME(m_priority));
|
||||||
|
save_item(NAME(m_firq_enable));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ajax_state::machine_reset()
|
||||||
|
{
|
||||||
|
m_priority = 0;
|
||||||
|
m_firq_enable = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ajax_state::main_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x01c0).rw(FUNC(ajax_state::ls138_f10_r), FUNC(ajax_state::ls138_f10_w)); // bankswitch + sound command + FIRQ command
|
||||||
|
map(0x0800, 0x0807).rw(m_k051960, FUNC(k051960_device::k051937_r), FUNC(k051960_device::k051937_w)); // sprite control registers
|
||||||
|
map(0x0c00, 0x0fff).rw(m_k051960, FUNC(k051960_device::k051960_r), FUNC(k051960_device::k051960_w)); // sprite RAM 2128SL at J7
|
||||||
|
map(0x1000, 0x1fff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
|
||||||
|
map(0x2000, 0x3fff).ram().share("main_sub_ram"); // shared RAM with the 6809
|
||||||
|
map(0x4000, 0x5fff).ram(); // RAM 6264L at K10
|
||||||
|
map(0x6000, 0x7fff).bankr(m_mainbank); // banked ROM
|
||||||
|
map(0x8000, 0xffff).rom(); // ROM N11
|
||||||
|
}
|
||||||
|
|
||||||
|
void ajax_state::sub_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x07ff).rw(m_k051316, FUNC(k051316_device::read), FUNC(k051316_device::write)); // 051316 zoom/rotation layer
|
||||||
|
map(0x0800, 0x080f).w(m_k051316, FUNC(k051316_device::ctrl_w)); // 051316 control registers
|
||||||
|
map(0x1000, 0x17ff).r(m_k051316, FUNC(k051316_device::rom_r)); // 051316 (ROM test)
|
||||||
|
map(0x1800, 0x1800).w(FUNC(ajax_state::sub_bankswitch_w)); // bankswitch control
|
||||||
|
map(0x2000, 0x3fff).ram().share("main_sub_ram"); // shared RAM with the 052001
|
||||||
|
map(0x4000, 0x7fff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write)); // video RAM + color RAM + video registers
|
||||||
|
map(0x8000, 0x9fff).bankr(m_subbank); // banked ROM
|
||||||
|
map(0xa000, 0xffff).rom().region("sub", 0x12000); // ROM I16
|
||||||
|
}
|
||||||
|
|
||||||
|
void ajax_state::sound_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x7fff).rom(); // ROM F6
|
||||||
|
map(0x8000, 0x87ff).ram(); // RAM 2128SL at D16
|
||||||
|
map(0x9000, 0x9000).w(FUNC(ajax_state::sound_bank_w)); // 007232 bankswitch
|
||||||
|
map(0xa000, 0xa00d).rw(m_k007232[0], FUNC(k007232_device::read), FUNC(k007232_device::write));
|
||||||
|
map(0xb000, 0xb00d).rw(m_k007232[1], FUNC(k007232_device::read), FUNC(k007232_device::write));
|
||||||
|
map(0xb80c, 0xb80c).w(FUNC(ajax_state::k007232_extvol_w)); // extra volume, goes to the 007232 w/ A11 selecting a different latch for the external port
|
||||||
|
map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); // YM2151
|
||||||
map(0xe000, 0xe000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
map(0xe000, 0xe000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +447,7 @@ void ajax_state::ajax_sound_map(address_map &map)
|
|||||||
static INPUT_PORTS_START( ajax )
|
static INPUT_PORTS_START( ajax )
|
||||||
PORT_START("DSW1")
|
PORT_START("DSW1")
|
||||||
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
|
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
|
||||||
/* "No Coin B" = coins produce sound, but no effect on coin counter */
|
// "No Coin B" = coins produce sound, but no effect on coin counter
|
||||||
|
|
||||||
PORT_START("DSW2")
|
PORT_START("DSW2")
|
||||||
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
|
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
|
||||||
@ -102,10 +485,10 @@ static INPUT_PORTS_START( ajax )
|
|||||||
PORT_DIPSETTING( 0x00, "Inverted" )
|
PORT_DIPSETTING( 0x00, "Inverted" )
|
||||||
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
|
||||||
PORT_START("SYSTEM") /* COINSW & START */
|
PORT_START("SYSTEM") // COINSW & START
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) /* service */
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) // service
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
@ -138,57 +521,55 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void ajax_state::sound_bank_w(uint8_t data)
|
void ajax_state::sound_bank_w(uint8_t data)
|
||||||
{
|
{
|
||||||
int bank_A, bank_B;
|
// banks # for the 007232 (chip 1)
|
||||||
|
int bank_A = BIT(data, 1);
|
||||||
|
int bank_B = BIT(data, 0);
|
||||||
|
m_k007232[0]->set_bank(bank_A, bank_B);
|
||||||
|
|
||||||
/* banks # for the 007232 (chip 1) */
|
// banks # for the 007232 (chip 2)
|
||||||
bank_A = BIT(data, 1);
|
|
||||||
bank_B = BIT(data, 0);
|
|
||||||
m_k007232_1->set_bank(bank_A, bank_B);
|
|
||||||
|
|
||||||
/* banks # for the 007232 (chip 2) */
|
|
||||||
bank_A = ((data >> 4) & 0x03);
|
bank_A = ((data >> 4) & 0x03);
|
||||||
bank_B = ((data >> 2) & 0x03);
|
bank_B = ((data >> 2) & 0x03);
|
||||||
m_k007232_2->set_bank(bank_A, bank_B);
|
m_k007232[1]->set_bank(bank_A, bank_B);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ajax_state::volume_callback0(uint8_t data)
|
void ajax_state::volume_callback0(uint8_t data)
|
||||||
{
|
{
|
||||||
m_k007232_1->set_volume(0, (data >> 4) * 0x11, 0);
|
m_k007232[0]->set_volume(0, (data >> 4) * 0x11, 0);
|
||||||
m_k007232_1->set_volume(1, 0, (data & 0x0f) * 0x11);
|
m_k007232[0]->set_volume(1, 0, (data & 0x0f) * 0x11);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ajax_state::k007232_extvol_w(uint8_t data)
|
void ajax_state::k007232_extvol_w(uint8_t data)
|
||||||
{
|
{
|
||||||
/* channel A volume (mono) */
|
// channel A volume (mono)
|
||||||
m_k007232_2->set_volume(0, (data & 0x0f) * 0x11/2, (data & 0x0f) * 0x11/2);
|
m_k007232[1]->set_volume(0, (data & 0x0f) * 0x11 / 2, (data & 0x0f) * 0x11 / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ajax_state::volume_callback1(uint8_t data)
|
void ajax_state::volume_callback1(uint8_t data)
|
||||||
{
|
{
|
||||||
/* channel B volume/pan */
|
// channel B volume/pan
|
||||||
m_k007232_2->set_volume(1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2);
|
m_k007232[1]->set_volume(1, (data & 0x0f) * 0x11 / 2, (data >> 4) * 0x11 / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ajax_state::ajax(machine_config &config)
|
void ajax_state::ajax(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
KONAMI(config, m_maincpu, XTAL(24'000'000)/2/4); /* 052001 12/4 MHz*/
|
KONAMI(config, m_maincpu, XTAL(24'000'000) / 2 / 4); // 052001 12/4 MHz
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &ajax_state::ajax_main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &ajax_state::main_map);
|
||||||
|
|
||||||
HD6309E(config, m_subcpu, 3000000); /* ? */
|
HD6309E(config, m_subcpu, 3000000); // ?
|
||||||
m_subcpu->set_addrmap(AS_PROGRAM, &ajax_state::ajax_sub_map);
|
m_subcpu->set_addrmap(AS_PROGRAM, &ajax_state::sub_map);
|
||||||
|
|
||||||
Z80(config, m_audiocpu, 3579545); /* 3.58 MHz */
|
Z80(config, m_audiocpu, 3579545); // 3.58 MHz
|
||||||
m_audiocpu->set_addrmap(AS_PROGRAM, &ajax_state::ajax_sound_map);
|
m_audiocpu->set_addrmap(AS_PROGRAM, &ajax_state::sound_map);
|
||||||
|
|
||||||
config.set_maximum_quantum(attotime::from_hz(600));
|
config.set_maximum_quantum(attotime::from_hz(600));
|
||||||
|
|
||||||
WATCHDOG_TIMER(config, m_watchdog);
|
WATCHDOG_TIMER(config, m_watchdog);
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
screen.set_raw(XTAL(24'000'000)/3, 528, 108, 412, 256, 16, 240);
|
screen.set_raw(XTAL(24'000'000) / 3, 528, 108, 412, 256, 16, 240);
|
||||||
// 6MHz dotclock is more realistic, however needs drawing updates. replace when ready
|
// 6MHz dotclock is more realistic, however needs drawing updates. replace when ready
|
||||||
// screen.set_raw(XTAL(24'000'000)/4, 396, hbend, hbstart, 256, 16, 240);
|
// screen.set_raw(XTAL(24'000'000)/4, 396, hbend, hbstart, 256, 16, 240);
|
||||||
screen.set_screen_update(FUNC(ajax_state::screen_update));
|
screen.set_screen_update(FUNC(ajax_state::screen_update));
|
||||||
@ -214,7 +595,7 @@ void ajax_state::ajax(machine_config &config)
|
|||||||
m_k051316->set_bpp(7);
|
m_k051316->set_bpp(7);
|
||||||
m_k051316->set_zoom_callback(FUNC(ajax_state::zoom_callback));
|
m_k051316->set_zoom_callback(FUNC(ajax_state::zoom_callback));
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "lspeaker").front_left();
|
SPEAKER(config, "lspeaker").front_left();
|
||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
@ -222,23 +603,23 @@ void ajax_state::ajax(machine_config &config)
|
|||||||
|
|
||||||
YM2151(config, "ymsnd", 3579545).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
|
YM2151(config, "ymsnd", 3579545).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0);
|
||||||
|
|
||||||
K007232(config, m_k007232_1, 3579545);
|
K007232(config, m_k007232[0], 3579545);
|
||||||
m_k007232_1->port_write().set(FUNC(ajax_state::volume_callback0));
|
m_k007232[0]->port_write().set(FUNC(ajax_state::volume_callback0));
|
||||||
m_k007232_1->add_route(0, "lspeaker", 0.20);
|
m_k007232[0]->add_route(0, "lspeaker", 0.20);
|
||||||
m_k007232_1->add_route(0, "rspeaker", 0.20);
|
m_k007232[0]->add_route(0, "rspeaker", 0.20);
|
||||||
m_k007232_1->add_route(1, "lspeaker", 0.20);
|
m_k007232[0]->add_route(1, "lspeaker", 0.20);
|
||||||
m_k007232_1->add_route(1, "rspeaker", 0.20);
|
m_k007232[0]->add_route(1, "rspeaker", 0.20);
|
||||||
|
|
||||||
K007232(config, m_k007232_2, 3579545);
|
K007232(config, m_k007232[1], 3579545);
|
||||||
m_k007232_2->port_write().set(FUNC(ajax_state::volume_callback1));
|
m_k007232[1]->port_write().set(FUNC(ajax_state::volume_callback1));
|
||||||
m_k007232_2->add_route(0, "lspeaker", 0.50);
|
m_k007232[1]->add_route(0, "lspeaker", 0.50);
|
||||||
m_k007232_2->add_route(1, "rspeaker", 0.50);
|
m_k007232[1]->add_route(1, "rspeaker", 0.50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
This set is using 27512 Roms on a sub-board instead of Mask roms
|
This set is using 27512 ROMs on a sub-board instead of Mask ROMs
|
||||||
-- info from Phil Morris
|
-- info from Phil Morris
|
||||||
|
|
||||||
These are normally on the main board in the form of large mask ROMs, but at one stage
|
These are normally on the main board in the form of large mask ROMs, but at one stage
|
||||||
@ -248,18 +629,18 @@ void ajax_state::ajax(machine_config &config)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ROM_START( ajax )
|
ROM_START( ajax )
|
||||||
ROM_REGION( 0x20000, "maincpu", 0 ) /* 052001 code */
|
ROM_REGION( 0x20000, "maincpu", 0 ) // 052001 code
|
||||||
ROM_LOAD( "770_m01.n11", 0x00000, 0x10000, CRC(4a64e53a) SHA1(acd249bfcb5f248c41b3e40c7c1bce1b8c645d3a) ) /* last 0x8000 fixed, first 0x8000 banked */
|
ROM_LOAD( "770_m01.n11", 0x00000, 0x10000, CRC(4a64e53a) SHA1(acd249bfcb5f248c41b3e40c7c1bce1b8c645d3a) ) // last 0x8000 fixed, first 0x8000 banked
|
||||||
ROM_LOAD( "770_l02.n12", 0x10000, 0x10000, CRC(ad7d592b) SHA1(c75d9696b16de231c479379dd02d33fe54021d88) ) /* banked ROM */
|
ROM_LOAD( "770_l02.n12", 0x10000, 0x10000, CRC(ad7d592b) SHA1(c75d9696b16de231c479379dd02d33fe54021d88) ) // banked ROM
|
||||||
|
|
||||||
ROM_REGION( 0x18000, "sub", 0 ) /* 96k */
|
ROM_REGION( 0x18000, "sub", 0 )
|
||||||
ROM_LOAD( "770_f04.g16", 0x00000, 0x10000, CRC(e0e4ec9c) SHA1(15ae09c3ad67ec626d8178ec1417f0c57ca4eca4) ) /* banked ROM */
|
ROM_LOAD( "770_f04.g16", 0x00000, 0x10000, CRC(e0e4ec9c) SHA1(15ae09c3ad67ec626d8178ec1417f0c57ca4eca4) ) // banked ROM
|
||||||
ROM_LOAD( "770_l05.i16", 0x10000, 0x08000, CRC(ed64fbb2) SHA1(429046edaf1299afa7fb9c385b4ef0c244ec2409) ) /* last 0x6000 fixed, first 0x2000 banked */
|
ROM_LOAD( "770_l05.i16", 0x10000, 0x08000, CRC(ed64fbb2) SHA1(429046edaf1299afa7fb9c385b4ef0c244ec2409) ) // last 0x6000 fixed, first 0x2000 banked
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the SOUND CPU */
|
ROM_REGION( 0x08000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "770_h03.f16", 0x00000, 0x08000, CRC(2ffd2afc) SHA1(ca2ef684f87bcf9b70b3ec66ec80685edaf04b9b) )
|
ROM_LOAD( "770_h03.f16", 0x00000, 0x08000, CRC(2ffd2afc) SHA1(ca2ef684f87bcf9b70b3ec66ec80685edaf04b9b) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x080000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_BYTE( "770c13-a.f3", 0x000000, 0x010000, CRC(4ef6fff2) SHA1(0a2953f6907738b795d96184329431539386a463) )
|
ROM_LOAD32_BYTE( "770c13-a.f3", 0x000000, 0x010000, CRC(4ef6fff2) SHA1(0a2953f6907738b795d96184329431539386a463) )
|
||||||
ROM_LOAD32_BYTE( "770c13-c.f4", 0x000001, 0x010000, CRC(97ffbab6) SHA1(97d9a39600eed918e12908a9abed0d4161c20ef6) )
|
ROM_LOAD32_BYTE( "770c13-c.f4", 0x000001, 0x010000, CRC(97ffbab6) SHA1(97d9a39600eed918e12908a9abed0d4161c20ef6) )
|
||||||
ROM_LOAD32_BYTE( "770c12-a.f5", 0x000002, 0x010000, CRC(6c0ade68) SHA1(35e4548a37e19210c767ef2ed4c514dbde6806c2) )
|
ROM_LOAD32_BYTE( "770c12-a.f5", 0x000002, 0x010000, CRC(6c0ade68) SHA1(35e4548a37e19210c767ef2ed4c514dbde6806c2) )
|
||||||
@ -269,7 +650,7 @@ ROM_START( ajax )
|
|||||||
ROM_LOAD32_BYTE( "770c12-b.e5", 0x040002, 0x010000, CRC(5f221cc6) SHA1(9a7a9c7853a3b582c4034b773cef08aee5391d6e) )
|
ROM_LOAD32_BYTE( "770c12-b.e5", 0x040002, 0x010000, CRC(5f221cc6) SHA1(9a7a9c7853a3b582c4034b773cef08aee5391d6e) )
|
||||||
ROM_LOAD32_BYTE( "770c12-d.e6", 0x040003, 0x010000, CRC(f1edb2f4) SHA1(3e66cc711e25cbf6e6a747d43a9efec0710d5b7a) )
|
ROM_LOAD32_BYTE( "770c12-d.e6", 0x040003, 0x010000, CRC(f1edb2f4) SHA1(3e66cc711e25cbf6e6a747d43a9efec0710d5b7a) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k051960", 0 ) /* sprites */
|
ROM_REGION( 0x100000, "k051960", 0 ) // sprites
|
||||||
ROM_LOAD32_BYTE( "770c09-a.f8", 0x000000, 0x010000, CRC(76690fb8) SHA1(afe267a37b65d63d3765dc3b88d8a8262446f786) )
|
ROM_LOAD32_BYTE( "770c09-a.f8", 0x000000, 0x010000, CRC(76690fb8) SHA1(afe267a37b65d63d3765dc3b88d8a8262446f786) )
|
||||||
ROM_LOAD32_BYTE( "770c09-e.f9", 0x000001, 0x010000, CRC(17b482c9) SHA1(3535197956f5bf5b564fec1ddbb3e3ea3bf1f7bd) )
|
ROM_LOAD32_BYTE( "770c09-e.f9", 0x000001, 0x010000, CRC(17b482c9) SHA1(3535197956f5bf5b564fec1ddbb3e3ea3bf1f7bd) )
|
||||||
ROM_LOAD32_BYTE( "770c08-a.f10", 0x000002, 0x010000, CRC(efd29a56) SHA1(2a9f138d1242a35162a3f092b0343dff899e3b83) )
|
ROM_LOAD32_BYTE( "770c08-a.f10", 0x000002, 0x010000, CRC(efd29a56) SHA1(2a9f138d1242a35162a3f092b0343dff899e3b83) )
|
||||||
@ -287,20 +668,20 @@ ROM_START( ajax )
|
|||||||
ROM_LOAD32_BYTE( "770c08-d.c10", 0x0c0002, 0x010000, CRC(91591777) SHA1(53f416a51f7075f070168bced7b6f925f54c7b84) )
|
ROM_LOAD32_BYTE( "770c08-d.c10", 0x0c0002, 0x010000, CRC(91591777) SHA1(53f416a51f7075f070168bced7b6f925f54c7b84) )
|
||||||
ROM_LOAD32_BYTE( "770c08-h.c11", 0x0c0003, 0x010000, CRC(d97d4b15) SHA1(e3d7d7adeec8c8c808acb9f84641fd3a6bf249be) )
|
ROM_LOAD32_BYTE( "770c08-h.c11", 0x0c0003, 0x010000, CRC(d97d4b15) SHA1(e3d7d7adeec8c8c808acb9f84641fd3a6bf249be) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k051316", 0 ) /* zoom/rotate */
|
ROM_REGION( 0x080000, "k051316", 0 ) // zoom/rotate
|
||||||
ROM_LOAD( "770c06.f4", 0x000000, 0x040000, CRC(d0c592ee) SHA1(c1be73dd259f2779d715659b177e47513776a0d4) )
|
ROM_LOAD( "770c06.f4", 0x000000, 0x040000, CRC(d0c592ee) SHA1(c1be73dd259f2779d715659b177e47513776a0d4) )
|
||||||
ROM_LOAD( "770c07.h4", 0x040000, 0x040000, CRC(0b399fb1) SHA1(fbe26f9aa9a655d08bebcdd79719d35134ca4dd5) )
|
ROM_LOAD( "770c07.h4", 0x040000, 0x040000, CRC(0b399fb1) SHA1(fbe26f9aa9a655d08bebcdd79719d35134ca4dd5) )
|
||||||
|
|
||||||
ROM_REGION( 0x0200, "proms", 0 )
|
ROM_REGION( 0x0200, "proms", 0 )
|
||||||
ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) /* priority encoder (not used) */
|
ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) // priority encoder (not used)
|
||||||
|
|
||||||
ROM_REGION( 0x040000, "k007232_1", 0 ) /* 007232 data (chip 1) */
|
ROM_REGION( 0x040000, "k007232_1", 0 )
|
||||||
ROM_LOAD( "770c10-a.a7", 0x000000, 0x010000, CRC(e45ec094) SHA1(540c56e1d778e6082db23aa3da64f6179b1f3635) )
|
ROM_LOAD( "770c10-a.a7", 0x000000, 0x010000, CRC(e45ec094) SHA1(540c56e1d778e6082db23aa3da64f6179b1f3635) )
|
||||||
ROM_LOAD( "770c10-b.a6", 0x010000, 0x010000, CRC(349db7d3) SHA1(210da067038abeb021a77b3bf2664c9a49b3410a) )
|
ROM_LOAD( "770c10-b.a6", 0x010000, 0x010000, CRC(349db7d3) SHA1(210da067038abeb021a77b3bf2664c9a49b3410a) )
|
||||||
ROM_LOAD( "770c10-c.a5", 0x020000, 0x010000, CRC(71cb1f05) SHA1(57399806746b659f52114fb7bd4e11a7992a2c5d) )
|
ROM_LOAD( "770c10-c.a5", 0x020000, 0x010000, CRC(71cb1f05) SHA1(57399806746b659f52114fb7bd4e11a7992a2c5d) )
|
||||||
ROM_LOAD( "770c10-d.a4", 0x030000, 0x010000, CRC(e8ab1844) SHA1(dc22c4d11d6396a051398ba9ec6380aa3f856e71) )
|
ROM_LOAD( "770c10-d.a4", 0x030000, 0x010000, CRC(e8ab1844) SHA1(dc22c4d11d6396a051398ba9ec6380aa3f856e71) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */
|
ROM_REGION( 0x080000, "k007232_2", 0 )
|
||||||
ROM_LOAD( "770c11-a.c6", 0x000000, 0x010000, CRC(8cccd9e0) SHA1(73e50a896ed212462046b7bfa04aad5e266425ca) )
|
ROM_LOAD( "770c11-a.c6", 0x000000, 0x010000, CRC(8cccd9e0) SHA1(73e50a896ed212462046b7bfa04aad5e266425ca) )
|
||||||
ROM_LOAD( "770c11-b.c5", 0x010000, 0x010000, CRC(0af2fedd) SHA1(038189210a73f668a0d913ff2dfc4ffa2e6bd5f4) )
|
ROM_LOAD( "770c11-b.c5", 0x010000, 0x010000, CRC(0af2fedd) SHA1(038189210a73f668a0d913ff2dfc4ffa2e6bd5f4) )
|
||||||
ROM_LOAD( "770c11-c.c4", 0x020000, 0x010000, CRC(7471f24a) SHA1(04d7a69ddc01017a773485fa891711d94c8ad47c) )
|
ROM_LOAD( "770c11-c.c4", 0x020000, 0x010000, CRC(7471f24a) SHA1(04d7a69ddc01017a773485fa891711d94c8ad47c) )
|
||||||
@ -312,73 +693,75 @@ ROM_START( ajax )
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( typhoon )
|
ROM_START( typhoon )
|
||||||
ROM_REGION( 0x20000, "maincpu", 0 ) /* 052001 code */
|
ROM_REGION( 0x20000, "maincpu", 0 ) // 052001 code
|
||||||
ROM_LOAD( "770_k01.n11", 0x00000, 0x10000, CRC(5ba74a22) SHA1(897d3309f2efb3bfa56e86581ee4a492e656788c) ) /* last 0x8000 fixed, first 0x8000 banked */
|
ROM_LOAD( "770_k01.n11", 0x00000, 0x10000, CRC(5ba74a22) SHA1(897d3309f2efb3bfa56e86581ee4a492e656788c) ) // last 0x8000 fixed, first 0x8000 banked
|
||||||
ROM_LOAD( "770_k02.n12", 0x10000, 0x10000, CRC(3bcf782a) SHA1(4b6127bced0b2519f8ad30587f32588a16368071) ) /* banked ROM */
|
ROM_LOAD( "770_k02.n12", 0x10000, 0x10000, CRC(3bcf782a) SHA1(4b6127bced0b2519f8ad30587f32588a16368071) ) // banked ROM
|
||||||
|
|
||||||
ROM_REGION( 0x18000, "sub", 0 ) /* 96k */
|
ROM_REGION( 0x18000, "sub", 0 )
|
||||||
ROM_LOAD( "770_f04.g16", 0x00000, 0x10000, CRC(e0e4ec9c) SHA1(15ae09c3ad67ec626d8178ec1417f0c57ca4eca4) ) /* banked ROM */
|
ROM_LOAD( "770_f04.g16", 0x00000, 0x10000, CRC(e0e4ec9c) SHA1(15ae09c3ad67ec626d8178ec1417f0c57ca4eca4) ) // banked ROM
|
||||||
ROM_LOAD( "770_k05.i16", 0x10000, 0x08000, CRC(0f1bebbb) SHA1(012a8867ee0febaaadd7bcbc91e462bda5d3a411) ) /* last 0x6000 fixed, first 0x2000 banked */
|
ROM_LOAD( "770_k05.i16", 0x10000, 0x08000, CRC(0f1bebbb) SHA1(012a8867ee0febaaadd7bcbc91e462bda5d3a411) ) // last 0x6000 fixed, first 0x2000 banked
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the SOUND CPU */
|
ROM_REGION( 0x08000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "770_h03.f16", 0x00000, 0x08000, CRC(2ffd2afc) SHA1(ca2ef684f87bcf9b70b3ec66ec80685edaf04b9b) )
|
ROM_LOAD( "770_h03.f16", 0x00000, 0x08000, CRC(2ffd2afc) SHA1(ca2ef684f87bcf9b70b3ec66ec80685edaf04b9b) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x080000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_WORD( "770c13.n22", 0x000000, 0x040000, CRC(b859ca4e) SHA1(f58678d503683f78cca0d5ed2d79f6f68ab3495a) )
|
ROM_LOAD32_WORD( "770c13.n22", 0x000000, 0x040000, CRC(b859ca4e) SHA1(f58678d503683f78cca0d5ed2d79f6f68ab3495a) )
|
||||||
ROM_LOAD32_WORD( "770c12.k22", 0x000002, 0x040000, CRC(50d14b72) SHA1(e3ff4a5aeefa6c10b5f7fec18297948b7c5acfdf) )
|
ROM_LOAD32_WORD( "770c12.k22", 0x000002, 0x040000, CRC(50d14b72) SHA1(e3ff4a5aeefa6c10b5f7fec18297948b7c5acfdf) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k051960", 0 ) /* sprites */
|
ROM_REGION( 0x100000, "k051960", 0 ) // sprites
|
||||||
ROM_LOAD32_WORD( "770c09.n4", 0x000000, 0x080000, CRC(1ab4a7ff) SHA1(fa007b41027f95d29d2a9f931a2fe235844db637) )
|
ROM_LOAD32_WORD( "770c09.n4", 0x000000, 0x080000, CRC(1ab4a7ff) SHA1(fa007b41027f95d29d2a9f931a2fe235844db637) )
|
||||||
ROM_LOAD32_WORD( "770c08.k4", 0x000002, 0x080000, CRC(a8e80586) SHA1(0401f59baa691905287cef94427f39e0c3f0adc6) )
|
ROM_LOAD32_WORD( "770c08.k4", 0x000002, 0x080000, CRC(a8e80586) SHA1(0401f59baa691905287cef94427f39e0c3f0adc6) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k051316", 0 ) /* zoom/rotate */
|
ROM_REGION( 0x080000, "k051316", 0 ) // zoom/rotate
|
||||||
ROM_LOAD( "770c06.f4", 0x000000, 0x040000, CRC(d0c592ee) SHA1(c1be73dd259f2779d715659b177e47513776a0d4) )
|
ROM_LOAD( "770c06.f4", 0x000000, 0x040000, CRC(d0c592ee) SHA1(c1be73dd259f2779d715659b177e47513776a0d4) )
|
||||||
ROM_LOAD( "770c07.h4", 0x040000, 0x040000, CRC(0b399fb1) SHA1(fbe26f9aa9a655d08bebcdd79719d35134ca4dd5) )
|
ROM_LOAD( "770c07.h4", 0x040000, 0x040000, CRC(0b399fb1) SHA1(fbe26f9aa9a655d08bebcdd79719d35134ca4dd5) )
|
||||||
|
|
||||||
ROM_REGION( 0x0200, "proms", 0 )
|
ROM_REGION( 0x0200, "proms", 0 )
|
||||||
ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) /* priority encoder (not used) */
|
ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) // priority encoder (not used)
|
||||||
|
|
||||||
ROM_REGION( 0x040000, "k007232_1", 0 ) /* 007232 data (chip 1) */
|
ROM_REGION( 0x040000, "k007232_1", 0 )
|
||||||
ROM_LOAD( "770c10", 0x000000, 0x040000, CRC(7fac825f) SHA1(581522d7a02dad16d2803ff344b4db133f767e6b) )
|
ROM_LOAD( "770c10", 0x000000, 0x040000, CRC(7fac825f) SHA1(581522d7a02dad16d2803ff344b4db133f767e6b) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */
|
ROM_REGION( 0x080000, "k007232_2", 0 )
|
||||||
ROM_LOAD( "770c11", 0x000000, 0x080000, CRC(299a615a) SHA1(29cdcc21998c72f4cf311792b904b79bde236bab) )
|
ROM_LOAD( "770c11", 0x000000, 0x080000, CRC(299a615a) SHA1(29cdcc21998c72f4cf311792b904b79bde236bab) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( ajaxj )
|
ROM_START( ajaxj )
|
||||||
ROM_REGION( 0x20000, "maincpu", 0 ) /* 052001 code */
|
ROM_REGION( 0x20000, "maincpu", 0 ) // 052001 code
|
||||||
ROM_LOAD( "770_l01.n11", 0x00000, 0x10000, CRC(7cea5274) SHA1(8e3b2b11a8189e3a1703b3b4b453fbb386f5537f) ) /* last 0x8000 fixed, first 0x8000 banked */
|
ROM_LOAD( "770_l01.n11", 0x00000, 0x10000, CRC(7cea5274) SHA1(8e3b2b11a8189e3a1703b3b4b453fbb386f5537f) ) // last 0x8000 fixed, first 0x8000 banked
|
||||||
ROM_LOAD( "770_l02.n12", 0x10000, 0x10000, CRC(ad7d592b) SHA1(c75d9696b16de231c479379dd02d33fe54021d88) ) /* banked ROM */
|
ROM_LOAD( "770_l02.n12", 0x10000, 0x10000, CRC(ad7d592b) SHA1(c75d9696b16de231c479379dd02d33fe54021d88) ) // banked ROM
|
||||||
|
|
||||||
ROM_REGION( 0x18000, "sub", 0 ) /* 96k */
|
ROM_REGION( 0x18000, "sub", 0 )
|
||||||
ROM_LOAD( "770_f04.g16", 0x00000, 0x10000, CRC(e0e4ec9c) SHA1(15ae09c3ad67ec626d8178ec1417f0c57ca4eca4) ) /* banked ROM */
|
ROM_LOAD( "770_f04.g16", 0x00000, 0x10000, CRC(e0e4ec9c) SHA1(15ae09c3ad67ec626d8178ec1417f0c57ca4eca4) ) // banked ROM
|
||||||
ROM_LOAD( "770_l05.i16", 0x10000, 0x8000, CRC(ed64fbb2) SHA1(429046edaf1299afa7fb9c385b4ef0c244ec2409) ) /* last 0x6000 fixed, first 0x2000 banked */
|
ROM_LOAD( "770_l05.i16", 0x10000, 0x08000, CRC(ed64fbb2) SHA1(429046edaf1299afa7fb9c385b4ef0c244ec2409) ) // last 0x6000 fixed, first 0x2000 banked
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the SOUND CPU */
|
ROM_REGION( 0x08000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "770_f03.f16", 0x00000, 0x08000, CRC(3fe914fd) SHA1(c691920402bd859e2bf765084704a8bfad302cfa) )
|
ROM_LOAD( "770_f03.f16", 0x00000, 0x08000, CRC(3fe914fd) SHA1(c691920402bd859e2bf765084704a8bfad302cfa) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x080000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_WORD( "770c13.n22", 0x000000, 0x040000, CRC(b859ca4e) SHA1(f58678d503683f78cca0d5ed2d79f6f68ab3495a) )
|
ROM_LOAD32_WORD( "770c13.n22", 0x000000, 0x040000, CRC(b859ca4e) SHA1(f58678d503683f78cca0d5ed2d79f6f68ab3495a) )
|
||||||
ROM_LOAD32_WORD( "770c12.k22", 0x000002, 0x040000, CRC(50d14b72) SHA1(e3ff4a5aeefa6c10b5f7fec18297948b7c5acfdf) )
|
ROM_LOAD32_WORD( "770c12.k22", 0x000002, 0x040000, CRC(50d14b72) SHA1(e3ff4a5aeefa6c10b5f7fec18297948b7c5acfdf) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k051960", 0 ) /* sprites */
|
ROM_REGION( 0x100000, "k051960", 0 ) // sprites
|
||||||
ROM_LOAD32_WORD( "770c09.n4", 0x000000, 0x080000, CRC(1ab4a7ff) SHA1(fa007b41027f95d29d2a9f931a2fe235844db637) )
|
ROM_LOAD32_WORD( "770c09.n4", 0x000000, 0x080000, CRC(1ab4a7ff) SHA1(fa007b41027f95d29d2a9f931a2fe235844db637) )
|
||||||
ROM_LOAD32_WORD( "770c08.k4", 0x000002, 0x080000, CRC(a8e80586) SHA1(0401f59baa691905287cef94427f39e0c3f0adc6) )
|
ROM_LOAD32_WORD( "770c08.k4", 0x000002, 0x080000, CRC(a8e80586) SHA1(0401f59baa691905287cef94427f39e0c3f0adc6) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k051316", 0 ) /* zoom/rotate */
|
ROM_REGION( 0x080000, "k051316", 0 ) // zoom/rotate
|
||||||
ROM_LOAD( "770c06.f4", 0x000000, 0x040000, CRC(d0c592ee) SHA1(c1be73dd259f2779d715659b177e47513776a0d4) )
|
ROM_LOAD( "770c06.f4", 0x000000, 0x040000, CRC(d0c592ee) SHA1(c1be73dd259f2779d715659b177e47513776a0d4) )
|
||||||
ROM_LOAD( "770c07.h4", 0x040000, 0x040000, CRC(0b399fb1) SHA1(fbe26f9aa9a655d08bebcdd79719d35134ca4dd5) )
|
ROM_LOAD( "770c07.h4", 0x040000, 0x040000, CRC(0b399fb1) SHA1(fbe26f9aa9a655d08bebcdd79719d35134ca4dd5) )
|
||||||
|
|
||||||
ROM_REGION( 0x0200, "proms", 0 )
|
ROM_REGION( 0x0200, "proms", 0 )
|
||||||
ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) /* priority encoder (not used) */
|
ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) // priority encoder (not used)
|
||||||
|
|
||||||
ROM_REGION( 0x040000, "k007232_1", 0 ) /* 007232 data (chip 1) */
|
ROM_REGION( 0x040000, "k007232_1", 0 )
|
||||||
ROM_LOAD( "770c10", 0x000000, 0x040000, CRC(7fac825f) SHA1(581522d7a02dad16d2803ff344b4db133f767e6b) )
|
ROM_LOAD( "770c10", 0x000000, 0x040000, CRC(7fac825f) SHA1(581522d7a02dad16d2803ff344b4db133f767e6b) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */
|
ROM_REGION( 0x080000, "k007232_2", 0 )
|
||||||
ROM_LOAD( "770c11", 0x000000, 0x080000, CRC(299a615a) SHA1(29cdcc21998c72f4cf311792b904b79bde236bab) )
|
ROM_LOAD( "770c11", 0x000000, 0x080000, CRC(299a615a) SHA1(29cdcc21998c72f4cf311792b904b79bde236bab) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
GAME( 1987, ajax, 0, ajax, ajax, ajax_state, empty_init, ROT90, "Konami", "Ajax", MACHINE_SUPPORTS_SAVE )
|
GAME( 1987, ajax, 0, ajax, ajax, ajax_state, empty_init, ROT90, "Konami", "Ajax", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1987, typhoon, ajax, ajax, ajax, ajax_state, empty_init, ROT90, "Konami", "Typhoon", MACHINE_SUPPORTS_SAVE )
|
GAME( 1987, typhoon, ajax, ajax, ajax, ajax_state, empty_init, ROT90, "Konami", "Typhoon", MACHINE_SUPPORTS_SAVE )
|
||||||
|
@ -9,89 +9,218 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "includes/parodius.h"
|
|
||||||
#include "includes/konamipt.h"
|
|
||||||
|
|
||||||
|
#include "includes/konamipt.h"
|
||||||
|
#include "video/k052109.h"
|
||||||
|
#include "video/k053244_k053245.h"
|
||||||
|
#include "video/k053251.h"
|
||||||
|
#include "video/konami_helper.h"
|
||||||
|
|
||||||
|
#include "cpu/m6809/konami.h" // for the callback and the firq irq definition
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
|
#include "machine/bankdev.h"
|
||||||
#include "machine/watchdog.h"
|
#include "machine/watchdog.h"
|
||||||
#include "sound/k053260.h"
|
#include "sound/k053260.h"
|
||||||
#include "sound/ymopm.h"
|
#include "sound/ymopm.h"
|
||||||
|
|
||||||
#include "emupal.h"
|
#include "emupal.h"
|
||||||
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
|
|
||||||
void parodius_state::parodius_videobank_w(uint8_t data)
|
namespace {
|
||||||
|
|
||||||
|
class parodius_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
parodius_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
driver_device(mconfig, type, tag),
|
||||||
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_audiocpu(*this, "audiocpu"),
|
||||||
|
m_bank0000(*this, "bank0000"),
|
||||||
|
m_k052109(*this, "k052109"),
|
||||||
|
m_k053245(*this, "k053245"),
|
||||||
|
m_k053251(*this, "k053251"),
|
||||||
|
m_mainbank(*this, "mainbank"),
|
||||||
|
m_view_2000(*this, "view_2000")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void parodius(machine_config &config);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_start() override;
|
||||||
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// devices
|
||||||
|
required_device<konami_cpu_device> m_maincpu;
|
||||||
|
required_device<cpu_device> m_audiocpu;
|
||||||
|
required_device<address_map_bank_device> m_bank0000;
|
||||||
|
required_device<k052109_device> m_k052109;
|
||||||
|
required_device<k05324x_device> m_k053245;
|
||||||
|
required_device<k053251_device> m_k053251;
|
||||||
|
|
||||||
|
required_memory_bank m_mainbank;
|
||||||
|
memory_view m_view_2000;
|
||||||
|
|
||||||
|
// video-related
|
||||||
|
uint8_t m_layer_colorbase[3]{};
|
||||||
|
uint8_t m_sprite_colorbase = 0;
|
||||||
|
int m_layerpri[3]{};
|
||||||
|
|
||||||
|
// misc
|
||||||
|
emu_timer *m_nmi_timer = nullptr;
|
||||||
|
|
||||||
|
void videobank_w(uint8_t data);
|
||||||
|
void _3fc0_w(uint8_t data);
|
||||||
|
void sh_irqtrigger_w(uint8_t data);
|
||||||
|
void sound_arm_nmi_w(uint8_t data);
|
||||||
|
TIMER_CALLBACK_MEMBER(nmi_timer);
|
||||||
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
K05324X_CB_MEMBER(sprite_callback);
|
||||||
|
K052109_CB_MEMBER(tile_callback);
|
||||||
|
void banking_callback(uint8_t data);
|
||||||
|
|
||||||
|
void bank0000_map(address_map &map);
|
||||||
|
void main_map(address_map &map);
|
||||||
|
void sound_map(address_map &map);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// video
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Callbacks for the K052109
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
K052109_CB_MEMBER(parodius_state::tile_callback)
|
||||||
|
{
|
||||||
|
*code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13);
|
||||||
|
*color = m_layer_colorbase[layer] + ((*color & 0xe0) >> 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Callbacks for the K053245
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
K05324X_CB_MEMBER(parodius_state::sprite_callback)
|
||||||
|
{
|
||||||
|
int pri = 0x20 | ((*color & 0x60) >> 2);
|
||||||
|
if (pri <= m_layerpri[2])
|
||||||
|
*priority = 0;
|
||||||
|
else if (pri > m_layerpri[2] && pri <= m_layerpri[1])
|
||||||
|
*priority = 0xf0;
|
||||||
|
else if (pri > m_layerpri[1] && pri <= m_layerpri[0])
|
||||||
|
*priority = 0xf0 | 0xcc;
|
||||||
|
else
|
||||||
|
*priority = 0xf0 | 0xcc | 0xaa;
|
||||||
|
|
||||||
|
*color = m_sprite_colorbase + (*color & 0x1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Start the video hardware emulation.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
uint32_t parodius_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
int bg_colorbase = m_k053251->get_palette_index(k053251_device::CI0);
|
||||||
|
m_sprite_colorbase = m_k053251->get_palette_index(k053251_device::CI1);
|
||||||
|
m_layer_colorbase[0] = m_k053251->get_palette_index(k053251_device::CI2);
|
||||||
|
m_layer_colorbase[1] = m_k053251->get_palette_index(k053251_device::CI4);
|
||||||
|
m_layer_colorbase[2] = m_k053251->get_palette_index(k053251_device::CI3);
|
||||||
|
|
||||||
|
m_k052109->tilemap_update();
|
||||||
|
|
||||||
|
int layer[3];
|
||||||
|
|
||||||
|
layer[0] = 0;
|
||||||
|
m_layerpri[0] = m_k053251->get_priority(k053251_device::CI2);
|
||||||
|
layer[1] = 1;
|
||||||
|
m_layerpri[1] = m_k053251->get_priority(k053251_device::CI4);
|
||||||
|
layer[2] = 2;
|
||||||
|
m_layerpri[2] = m_k053251->get_priority(k053251_device::CI3);
|
||||||
|
|
||||||
|
konami_sortlayers3(layer, m_layerpri);
|
||||||
|
|
||||||
|
screen.priority().fill(0, cliprect);
|
||||||
|
bitmap.fill(16 * bg_colorbase, cliprect);
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[0], 0, 1);
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 2);
|
||||||
|
m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4);
|
||||||
|
|
||||||
|
m_k053245->sprites_draw(bitmap, cliprect, screen.priority());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// machine
|
||||||
|
|
||||||
|
void parodius_state::videobank_w(uint8_t data)
|
||||||
{
|
{
|
||||||
if (data & 0xf8)
|
if (data & 0xf8)
|
||||||
logerror("%04x: videobank = %02x\n",m_maincpu->pc(),data);
|
logerror("%04x: videobank = %02x\n", m_maincpu->pc(), data);
|
||||||
|
|
||||||
/* bit 0 = select palette or work RAM at 0000-07ff */
|
// bit 0 = select palette or work RAM at 0000-07ff
|
||||||
/* bit 1 = select 052109 or 053245 at 2000-27ff */
|
// bit 1 = select 052109 or 053245 at 2000-27ff
|
||||||
/* bit 2 = select palette bank 0 or 1 */
|
// bit 2 = select palette bank 0 or 1
|
||||||
|
|
||||||
if (data & 1)
|
if (data & 1)
|
||||||
m_bank0000->set_bank(2 + ((data & 4) >> 2));
|
m_bank0000->set_bank(2 + ((data & 4) >> 2));
|
||||||
else
|
else
|
||||||
m_bank0000->set_bank(0);
|
m_bank0000->set_bank(0);
|
||||||
|
|
||||||
m_bank2000->set_bank((data & 2) >> 1);
|
m_view_2000.select((data & 2) >> 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void parodius_state::parodius_3fc0_w(uint8_t data)
|
void parodius_state::_3fc0_w(uint8_t data)
|
||||||
{
|
{
|
||||||
if ((data & 0xf4) != 0x10)
|
if ((data & 0xf4) != 0x10)
|
||||||
logerror("%04x: 3fc0 = %02x\n",m_maincpu->pc(),data);
|
logerror("%04x: 3fc0 = %02x\n", m_maincpu->pc(), data);
|
||||||
|
|
||||||
/* bit 0/1 = coin counters */
|
// bit 0/1 = coin counters
|
||||||
machine().bookkeeping().coin_counter_w(0, data & 0x01);
|
machine().bookkeeping().coin_counter_w(0, data & 0x01);
|
||||||
machine().bookkeeping().coin_counter_w(1, data & 0x02);
|
machine().bookkeeping().coin_counter_w(1, data & 0x02);
|
||||||
|
|
||||||
/* bit 3 = enable char ROM reading through the video RAM */
|
// bit 3 = enable char ROM reading through the video RAM
|
||||||
m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
|
m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
/* other bits unknown */
|
// other bits unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
void parodius_state::parodius_sh_irqtrigger_w(uint8_t data)
|
void parodius_state::sh_irqtrigger_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
|
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
TIMER_CALLBACK_MEMBER(parodius_state::nmi_timer)
|
||||||
void parodius_state::sound_nmi_callback( int param )
|
|
||||||
{
|
{
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, ( m_nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE );
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||||
|
|
||||||
nmi_enabled = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void parodius_state::device_timer(emu_timer &timer, device_timer_id id, int param)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case TIMER_NMI:
|
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw emu_fatalerror("Unknown id in parodius_state::device_timer");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void parodius_state::sound_arm_nmi_w(uint8_t data)
|
void parodius_state::sound_arm_nmi_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||||
timer_set(attotime::from_usec(50), TIMER_NMI); /* kludge until the K053260 is emulated correctly */
|
m_nmi_timer->adjust(attotime::from_usec(50)); // kludge until the K053260 is emulated correctly
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************/
|
/********************************************/
|
||||||
|
|
||||||
void parodius_state::parodius_map(address_map &map)
|
void parodius_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x07ff).m(m_bank0000, FUNC(address_map_bank_device::amap8));
|
map(0x0000, 0x07ff).m(m_bank0000, FUNC(address_map_bank_device::amap8));
|
||||||
map(0x0800, 0x1fff).ram();
|
map(0x0800, 0x1fff).ram();
|
||||||
map(0x2000, 0x5fff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write));
|
map(0x2000, 0x5fff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write));
|
||||||
map(0x2000, 0x27ff).m(m_bank2000, FUNC(address_map_bank_device::amap8));
|
map(0x2000, 0x27ff).view(m_view_2000);
|
||||||
|
m_view_2000[0](0x2000, 0x27ff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write));
|
||||||
|
m_view_2000[1](0x2000, 0x27ff).rw(m_k053245, FUNC(k05324x_device::k053245_r), FUNC(k05324x_device::k053245_w));
|
||||||
map(0x3f8c, 0x3f8c).portr("P1");
|
map(0x3f8c, 0x3f8c).portr("P1");
|
||||||
map(0x3f8d, 0x3f8d).portr("P2");
|
map(0x3f8d, 0x3f8d).portr("P2");
|
||||||
map(0x3f8e, 0x3f8e).portr("DSW3");
|
map(0x3f8e, 0x3f8e).portr("DSW3");
|
||||||
@ -99,11 +228,11 @@ void parodius_state::parodius_map(address_map &map)
|
|||||||
map(0x3f90, 0x3f90).portr("DSW2");
|
map(0x3f90, 0x3f90).portr("DSW2");
|
||||||
map(0x3fa0, 0x3faf).rw(m_k053245, FUNC(k05324x_device::k053244_r), FUNC(k05324x_device::k053244_w));
|
map(0x3fa0, 0x3faf).rw(m_k053245, FUNC(k05324x_device::k053244_r), FUNC(k05324x_device::k053244_w));
|
||||||
map(0x3fb0, 0x3fbf).w(m_k053251, FUNC(k053251_device::write));
|
map(0x3fb0, 0x3fbf).w(m_k053251, FUNC(k053251_device::write));
|
||||||
map(0x3fc0, 0x3fc0).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w(FUNC(parodius_state::parodius_3fc0_w));
|
map(0x3fc0, 0x3fc0).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w(FUNC(parodius_state::_3fc0_w));
|
||||||
map(0x3fc4, 0x3fc4).w(FUNC(parodius_state::parodius_videobank_w));
|
map(0x3fc4, 0x3fc4).w(FUNC(parodius_state::videobank_w));
|
||||||
map(0x3fc8, 0x3fc8).w(FUNC(parodius_state::parodius_sh_irqtrigger_w));
|
map(0x3fc8, 0x3fc8).w(FUNC(parodius_state::sh_irqtrigger_w));
|
||||||
map(0x3fcc, 0x3fcd).rw("k053260", FUNC(k053260_device::main_read), FUNC(k053260_device::main_write));
|
map(0x3fcc, 0x3fcd).rw("k053260", FUNC(k053260_device::main_read), FUNC(k053260_device::main_write));
|
||||||
map(0x6000, 0x9fff).bankr("bank1"); /* banked ROM */
|
map(0x6000, 0x9fff).bankr(m_mainbank); // banked ROM
|
||||||
map(0xa000, 0xffff).rom().region("maincpu", 0x3a000);
|
map(0xa000, 0xffff).rom().region("maincpu", 0x3a000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,13 +242,7 @@ void parodius_state::bank0000_map(address_map &map)
|
|||||||
map(0x1000, 0x1fff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
map(0x1000, 0x1fff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||||
}
|
}
|
||||||
|
|
||||||
void parodius_state::bank2000_map(address_map &map)
|
void parodius_state::sound_map(address_map &map)
|
||||||
{
|
|
||||||
map(0x0000, 0x07ff).rw(m_k052109, FUNC(k052109_device::read), FUNC(k052109_device::write));
|
|
||||||
map(0x0800, 0x0fff).rw(m_k053245, FUNC(k05324x_device::k053245_r), FUNC(k05324x_device::k053245_w));
|
|
||||||
}
|
|
||||||
|
|
||||||
void parodius_state::parodius_sound_map(address_map &map)
|
|
||||||
{
|
{
|
||||||
map(0x0000, 0xefff).rom();
|
map(0x0000, 0xefff).rom();
|
||||||
map(0xf000, 0xf7ff).ram();
|
map(0xf000, 0xf7ff).ram();
|
||||||
@ -143,7 +266,7 @@ static INPUT_PORTS_START( parodius )
|
|||||||
|
|
||||||
PORT_START("DSW1")
|
PORT_START("DSW1")
|
||||||
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
|
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1)
|
||||||
/* "No Coin B" = coins produce sound, but no effect on coin counter */
|
// "No Coin B" = coins produce sound, but no effect on coin counter
|
||||||
|
|
||||||
PORT_START("DSW2")
|
PORT_START("DSW2")
|
||||||
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
|
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
|
||||||
@ -193,8 +316,10 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void parodius_state::machine_start()
|
void parodius_state::machine_start()
|
||||||
{
|
{
|
||||||
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base(), 0x4000);
|
m_mainbank->configure_entries(0, 16, memregion("maincpu")->base(), 0x4000);
|
||||||
membank("bank1")->set_entry(0);
|
m_mainbank->set_entry(0);
|
||||||
|
|
||||||
|
m_nmi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(parodius_state::nmi_timer), this));
|
||||||
|
|
||||||
save_item(NAME(m_sprite_colorbase));
|
save_item(NAME(m_sprite_colorbase));
|
||||||
save_item(NAME(m_layer_colorbase));
|
save_item(NAME(m_layer_colorbase));
|
||||||
@ -211,7 +336,6 @@ void parodius_state::machine_reset()
|
|||||||
|
|
||||||
m_sprite_colorbase = 0;
|
m_sprite_colorbase = 0;
|
||||||
m_bank0000->set_bank(0);
|
m_bank0000->set_bank(0);
|
||||||
m_bank2000->set_bank(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void parodius_state::banking_callback(uint8_t data)
|
void parodius_state::banking_callback(uint8_t data)
|
||||||
@ -219,31 +343,30 @@ void parodius_state::banking_callback(uint8_t data)
|
|||||||
if (data & 0xf0)
|
if (data & 0xf0)
|
||||||
logerror("%s: setlines %02x\n", machine().describe_context(), data);
|
logerror("%s: setlines %02x\n", machine().describe_context(), data);
|
||||||
|
|
||||||
membank("bank1")->set_entry((data & 0x0f) ^ 0x0f);
|
m_mainbank->set_entry((data & 0x0f) ^ 0x0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void parodius_state::parodius(machine_config &config)
|
void parodius_state::parodius(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
KONAMI(config, m_maincpu, 3000000); /* 053248 */
|
KONAMI(config, m_maincpu, 3000000); // 053248
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &parodius_state::parodius_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &parodius_state::main_map);
|
||||||
m_maincpu->line().set(FUNC(parodius_state::banking_callback));
|
m_maincpu->line().set(FUNC(parodius_state::banking_callback));
|
||||||
|
|
||||||
Z80(config, m_audiocpu, 3579545);
|
Z80(config, m_audiocpu, 3579545);
|
||||||
m_audiocpu->set_addrmap(AS_PROGRAM, &parodius_state::parodius_sound_map); /* NMIs are triggered by the 053260 */
|
m_audiocpu->set_addrmap(AS_PROGRAM, &parodius_state::sound_map); // NMIs are triggered by the 053260
|
||||||
|
|
||||||
ADDRESS_MAP_BANK(config, "bank0000").set_map(&parodius_state::bank0000_map).set_options(ENDIANNESS_BIG, 8, 13, 0x800);
|
ADDRESS_MAP_BANK(config, "bank0000").set_map(&parodius_state::bank0000_map).set_options(ENDIANNESS_BIG, 8, 13, 0x800);
|
||||||
ADDRESS_MAP_BANK(config, "bank2000").set_map(&parodius_state::bank2000_map).set_options(ENDIANNESS_BIG, 8, 12, 0x800);
|
|
||||||
|
|
||||||
WATCHDOG_TIMER(config, "watchdog");
|
WATCHDOG_TIMER(config, "watchdog");
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
screen.set_refresh_hz(60);
|
screen.set_refresh_hz(60);
|
||||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||||
screen.set_size(64*8, 32*8);
|
screen.set_size(64*8, 32*8);
|
||||||
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
|
screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
|
||||||
screen.set_screen_update(FUNC(parodius_state::screen_update_parodius));
|
screen.set_screen_update(FUNC(parodius_state::screen_update));
|
||||||
screen.set_palette("palette");
|
screen.set_palette("palette");
|
||||||
|
|
||||||
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 2048).enable_shadows();
|
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 2048).enable_shadows();
|
||||||
@ -260,7 +383,7 @@ void parodius_state::parodius(machine_config &config)
|
|||||||
|
|
||||||
K053251(config, m_k053251, 0);
|
K053251(config, m_k053251, 0);
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "lspeaker").front_left();
|
SPEAKER(config, "lspeaker").front_left();
|
||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
@ -278,85 +401,88 @@ void parodius_state::parodius(machine_config &config)
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
ROM_START( parodius )
|
ROM_START( parodius )
|
||||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
|
ROM_REGION( 0x40000, "maincpu", 0 ) // code + banked ROMs
|
||||||
ROM_LOAD( "955l01.f5", 0x00000, 0x20000, CRC(49a658eb) SHA1(dd53060c4da99b8e1f896ebfec572296ef2b5665) )
|
ROM_LOAD( "955l01.f5", 0x00000, 0x20000, CRC(49a658eb) SHA1(dd53060c4da99b8e1f896ebfec572296ef2b5665) )
|
||||||
ROM_LOAD( "955l02.h5", 0x20000, 0x20000, CRC(161d7322) SHA1(a752f28c19c58263680221ad1119f2fd57df4723) )
|
ROM_LOAD( "955l02.h5", 0x20000, 0x20000, CRC(161d7322) SHA1(a752f28c19c58263680221ad1119f2fd57df4723) )
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
|
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
|
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x100000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
||||||
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k053245", 0 ) /* graphics */
|
ROM_REGION( 0x100000, "k053245", 0 ) // sprites
|
||||||
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
|
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) )
|
||||||
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
|
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) )
|
||||||
|
|
||||||
ROM_REGION( 0x80000, "k053260", 0 ) /* 053260 samples */
|
ROM_REGION( 0x80000, "k053260", 0 ) // samples
|
||||||
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( parodiuse ) /* Earlier version? */
|
ROM_START( parodiuse ) // Earlier version?
|
||||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
|
ROM_REGION( 0x40000, "maincpu", 0 ) // code + banked ROMs
|
||||||
ROM_LOAD( "2.f5", 0x00000, 0x20000, CRC(26a6410b) SHA1(06de782f593ab0da6d65376b66e273d6410c6c56) )
|
ROM_LOAD( "2.f5", 0x00000, 0x20000, CRC(26a6410b) SHA1(06de782f593ab0da6d65376b66e273d6410c6c56) )
|
||||||
ROM_LOAD( "3.h5", 0x20000, 0x20000, CRC(9410dbf2) SHA1(1c4d9317f83c33bace929a841ff4093d7178c428) )
|
ROM_LOAD( "3.h5", 0x20000, 0x20000, CRC(9410dbf2) SHA1(1c4d9317f83c33bace929a841ff4093d7178c428) )
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
|
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
|
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x100000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
||||||
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k053245", 0 ) /* graphics */
|
ROM_REGION( 0x100000, "k053245", 0 ) // sprites
|
||||||
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
|
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) )
|
||||||
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
|
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) )
|
||||||
|
|
||||||
ROM_REGION( 0x80000, "k053260", 0 ) /* 053260 samples */
|
ROM_REGION( 0x80000, "k053260", 0 ) // samples
|
||||||
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( parodiusj )
|
ROM_START( parodiusj )
|
||||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
|
ROM_REGION( 0x40000, "maincpu", 0 ) // code + banked ROMs
|
||||||
ROM_LOAD( "955e01.f5", 0x00000, 0x20000, CRC(49baa334) SHA1(8902fbb2228111b15de6537bd168241933df134d) )
|
ROM_LOAD( "955e01.f5", 0x00000, 0x20000, CRC(49baa334) SHA1(8902fbb2228111b15de6537bd168241933df134d) )
|
||||||
ROM_LOAD( "955e02.h5", 0x20000, 0x20000, CRC(14010d6f) SHA1(69fe162ea08c3bd4b3e78e9d10d278bd15444af4) )
|
ROM_LOAD( "955e02.h5", 0x20000, 0x20000, CRC(14010d6f) SHA1(69fe162ea08c3bd4b3e78e9d10d278bd15444af4) )
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
|
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
|
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x100000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
||||||
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k053245", 0 ) /* graphics */
|
ROM_REGION( 0x100000, "k053245", 0 ) // sprites
|
||||||
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
|
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) )
|
||||||
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
|
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) )
|
||||||
|
|
||||||
ROM_REGION( 0x80000, "k053260", 0 ) /* 053260 samples */
|
ROM_REGION( 0x80000, "k053260", 0 ) // samples
|
||||||
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( parodiusa )
|
ROM_START( parodiusa )
|
||||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
|
ROM_REGION( 0x40000, "maincpu", 0 ) // code + banked ROMs
|
||||||
ROM_LOAD( "b-18.f5", 0x00000, 0x20000, CRC(006356cd) SHA1(795011233059472c841c30831442a71579dff2b9) )
|
ROM_LOAD( "b-18.f5", 0x00000, 0x20000, CRC(006356cd) SHA1(795011233059472c841c30831442a71579dff2b9) )
|
||||||
ROM_LOAD( "b-19.h5", 0x20000, 0x20000, CRC(e5a16417) SHA1(a49567817fd4948e33913fab66106b8e16100b6a) )
|
ROM_LOAD( "b-19.h5", 0x20000, 0x20000, CRC(e5a16417) SHA1(a49567817fd4948e33913fab66106b8e16100b6a) )
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
|
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||||
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) ) /* Labeled as D-20 */
|
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) ) // Labeled as D-20
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k052109", 0 ) /* tiles */
|
ROM_REGION( 0x100000, "k052109", 0 ) // tiles
|
||||||
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
ROM_LOAD32_WORD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) )
|
||||||
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
ROM_LOAD32_WORD( "955d08.k24", 0x000002, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) )
|
||||||
|
|
||||||
ROM_REGION( 0x100000, "k053245", 0 ) /* graphics */
|
ROM_REGION( 0x100000, "k053245", 0 ) // sprites
|
||||||
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
|
ROM_LOAD32_WORD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) )
|
||||||
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
|
ROM_LOAD32_WORD( "955d06.k8", 0x000002, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) )
|
||||||
|
|
||||||
ROM_REGION( 0x80000, "k053260", 0 ) /* 053260 samples */
|
ROM_REGION( 0x80000, "k053260", 0 ) // samples
|
||||||
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
ROM_LOAD( "955d04.c5", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Game driver(s)
|
Game driver(s)
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Manuel Abadia
|
|
||||||
#ifndef MAME_INCLUDES_AJAX_H
|
|
||||||
#define MAME_INCLUDES_AJAX_H
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "machine/gen_latch.h"
|
|
||||||
#include "machine/watchdog.h"
|
|
||||||
#include "sound/k007232.h"
|
|
||||||
#include "video/k052109.h"
|
|
||||||
#include "video/k051960.h"
|
|
||||||
#include "video/k051316.h"
|
|
||||||
#include "video/konami_helper.h"
|
|
||||||
#include "emupal.h"
|
|
||||||
|
|
||||||
class ajax_state : public driver_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ajax_state(const machine_config &mconfig, device_type type, const char *tag) :
|
|
||||||
driver_device(mconfig, type, tag),
|
|
||||||
m_maincpu(*this, "maincpu"),
|
|
||||||
m_audiocpu(*this, "audiocpu"),
|
|
||||||
m_subcpu(*this, "sub"),
|
|
||||||
m_watchdog(*this, "watchdog"),
|
|
||||||
m_k007232_1(*this, "k007232_1"),
|
|
||||||
m_k007232_2(*this, "k007232_2"),
|
|
||||||
m_k052109(*this, "k052109"),
|
|
||||||
m_k051960(*this, "k051960"),
|
|
||||||
m_k051316(*this, "k051316"),
|
|
||||||
m_palette(*this, "palette"),
|
|
||||||
m_soundlatch(*this, "soundlatch"),
|
|
||||||
m_lamps(*this, "lamp%u", 0U)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
void ajax(machine_config &config);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void sound_bank_w(uint8_t data);
|
|
||||||
uint8_t ls138_f10_r(offs_t offset);
|
|
||||||
void ls138_f10_w(offs_t offset, uint8_t data);
|
|
||||||
void bankswitch_2_w(uint8_t data);
|
|
||||||
void bankswitch_w(uint8_t data);
|
|
||||||
void lamps_w(uint8_t data);
|
|
||||||
void k007232_extvol_w(uint8_t data);
|
|
||||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
|
||||||
void volume_callback0(uint8_t data);
|
|
||||||
void volume_callback1(uint8_t data);
|
|
||||||
K051316_CB_MEMBER(zoom_callback);
|
|
||||||
K052109_CB_MEMBER(tile_callback);
|
|
||||||
K051960_CB_MEMBER(sprite_callback);
|
|
||||||
void ajax_main_map(address_map &map);
|
|
||||||
void ajax_sound_map(address_map &map);
|
|
||||||
void ajax_sub_map(address_map &map);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void machine_start() override;
|
|
||||||
virtual void machine_reset() override;
|
|
||||||
|
|
||||||
/* video-related */
|
|
||||||
uint8_t m_priority = 0U;
|
|
||||||
|
|
||||||
/* misc */
|
|
||||||
int m_firq_enable = 0;
|
|
||||||
|
|
||||||
/* devices */
|
|
||||||
required_device<cpu_device> m_maincpu;
|
|
||||||
required_device<cpu_device> m_audiocpu;
|
|
||||||
required_device<cpu_device> m_subcpu;
|
|
||||||
required_device<watchdog_timer_device> m_watchdog;
|
|
||||||
required_device<k007232_device> m_k007232_1;
|
|
||||||
required_device<k007232_device> m_k007232_2;
|
|
||||||
required_device<k052109_device> m_k052109;
|
|
||||||
required_device<k051960_device> m_k051960;
|
|
||||||
required_device<k051316_device> m_k051316;
|
|
||||||
required_device<palette_device> m_palette;
|
|
||||||
required_device<generic_latch_8_device> m_soundlatch;
|
|
||||||
output_finder<8> m_lamps;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAME_INCLUDES_AJAX_H
|
|
@ -1,75 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Nicola Salmoria
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
Parodius
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
#ifndef MAME_INCLUDES_PARODIUS_H
|
|
||||||
#define MAME_INCLUDES_PARODIUS_H
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "cpu/m6809/konami.h" /* for the callback and the firq irq definition */
|
|
||||||
#include "machine/bankdev.h"
|
|
||||||
#include "video/k052109.h"
|
|
||||||
#include "video/k053244_k053245.h"
|
|
||||||
#include "video/k053251.h"
|
|
||||||
#include "video/konami_helper.h"
|
|
||||||
|
|
||||||
class parodius_state : public driver_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
TIMER_NMI
|
|
||||||
};
|
|
||||||
|
|
||||||
parodius_state(const machine_config &mconfig, device_type type, const char *tag) :
|
|
||||||
driver_device(mconfig, type, tag),
|
|
||||||
m_maincpu(*this, "maincpu"),
|
|
||||||
m_audiocpu(*this, "audiocpu"),
|
|
||||||
m_bank0000(*this, "bank0000"),
|
|
||||||
m_bank2000(*this, "bank2000"),
|
|
||||||
m_k052109(*this, "k052109"),
|
|
||||||
m_k053245(*this, "k053245"),
|
|
||||||
m_k053251(*this, "k053251")
|
|
||||||
{ }
|
|
||||||
|
|
||||||
/* video-related */
|
|
||||||
int m_layer_colorbase[3]{};
|
|
||||||
int m_sprite_colorbase = 0;
|
|
||||||
int m_layerpri[3]{};
|
|
||||||
|
|
||||||
/* misc */
|
|
||||||
//int m_nmi_enabled;
|
|
||||||
|
|
||||||
/* devices */
|
|
||||||
required_device<konami_cpu_device> m_maincpu;
|
|
||||||
required_device<cpu_device> m_audiocpu;
|
|
||||||
required_device<address_map_bank_device> m_bank0000;
|
|
||||||
required_device<address_map_bank_device> m_bank2000;
|
|
||||||
required_device<k052109_device> m_k052109;
|
|
||||||
required_device<k05324x_device> m_k053245;
|
|
||||||
required_device<k053251_device> m_k053251;
|
|
||||||
void parodius_videobank_w(uint8_t data);
|
|
||||||
void parodius_3fc0_w(uint8_t data);
|
|
||||||
void parodius_sh_irqtrigger_w(uint8_t data);
|
|
||||||
void sound_arm_nmi_w(uint8_t data);
|
|
||||||
virtual void machine_start() override;
|
|
||||||
virtual void machine_reset() override;
|
|
||||||
uint32_t screen_update_parodius(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
|
||||||
K05324X_CB_MEMBER(sprite_callback);
|
|
||||||
K052109_CB_MEMBER(tile_callback);
|
|
||||||
void banking_callback(uint8_t data);
|
|
||||||
|
|
||||||
void parodius(machine_config &config);
|
|
||||||
void bank0000_map(address_map &map);
|
|
||||||
void bank2000_map(address_map &map);
|
|
||||||
void parodius_map(address_map &map);
|
|
||||||
void parodius_sound_map(address_map &map);
|
|
||||||
protected:
|
|
||||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAME_INCLUDES_PARODIUS_H
|
|
@ -1,215 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Manuel Abadia
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
ajax.cpp
|
|
||||||
|
|
||||||
Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
|
|
||||||
I/O ports)
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "cpu/m6809/m6809.h"
|
|
||||||
#include "cpu/z80/z80.h"
|
|
||||||
#include "cpu/m6809/konami.h"
|
|
||||||
|
|
||||||
#include "includes/ajax.h"
|
|
||||||
|
|
||||||
/* bankswitch_w:
|
|
||||||
Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at H11:
|
|
||||||
|
|
||||||
Bit Description
|
|
||||||
--- -----------
|
|
||||||
7 MRB3 Selects ROM N11/N12
|
|
||||||
6 CCOUNT2 Coin Counter 2 (*)
|
|
||||||
5 CCOUNT1 Coin Counter 1 (*)
|
|
||||||
4 SRESET Slave CPU Reset?
|
|
||||||
3 PRI0 Layer Priority Selector
|
|
||||||
2 MRB2 \
|
|
||||||
1 MRB1 | ROM Bank Select
|
|
||||||
0 MRB0 /
|
|
||||||
|
|
||||||
(*) The Coin Counters are handled by the Konami Custom 051550
|
|
||||||
*/
|
|
||||||
|
|
||||||
void ajax_state::bankswitch_w(uint8_t data)
|
|
||||||
{
|
|
||||||
int bank = 0;
|
|
||||||
|
|
||||||
/* rom select */
|
|
||||||
if (!(data & 0x80))
|
|
||||||
bank += 4;
|
|
||||||
|
|
||||||
/* coin counters */
|
|
||||||
machine().bookkeeping().coin_counter_w(0, data & 0x20);
|
|
||||||
machine().bookkeeping().coin_counter_w(1, data & 0x40);
|
|
||||||
|
|
||||||
/* priority */
|
|
||||||
m_priority = data & 0x08;
|
|
||||||
|
|
||||||
/* bank # (ROMS N11 and N12) */
|
|
||||||
bank += (data & 0x07);
|
|
||||||
membank("mainbank")->set_entry(bank);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* lamps_w:
|
|
||||||
Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at B9:
|
|
||||||
|
|
||||||
Bit Description
|
|
||||||
--- -----------
|
|
||||||
7 LAMP7 & LAMP8 - Game over lamps (*)
|
|
||||||
6 LAMP3 & LAMP4 - Game over lamps (*)
|
|
||||||
5 LAMP1 - Start lamp (*)
|
|
||||||
4 Control panel quaking (**)
|
|
||||||
3 Joystick vibration (**)
|
|
||||||
2 LAMP5 & LAMP6 - Power up lamps (*)
|
|
||||||
1 LAMP2 - Super weapon lamp (*)
|
|
||||||
0 unused
|
|
||||||
|
|
||||||
(*) The Lamps are handled by the M54585P
|
|
||||||
(**)Vibration/Quaking handled by these chips:
|
|
||||||
Chip Location Description
|
|
||||||
---- -------- -----------
|
|
||||||
PS2401-4 B21 ???
|
|
||||||
UPA1452H B22 ???
|
|
||||||
LS74 H2 Dual +ve edge trigger D-type Flip-flop with SET and RESET
|
|
||||||
LS393 C20 Dual -ve edge trigger 4-bit Binary Ripple Counter with Resets
|
|
||||||
*/
|
|
||||||
|
|
||||||
void ajax_state::lamps_w(uint8_t data)
|
|
||||||
{
|
|
||||||
m_lamps[1] = BIT(data, 1); /* super weapon lamp */
|
|
||||||
m_lamps[2] = BIT(data, 2); /* power up lamps */
|
|
||||||
m_lamps[5] = BIT(data, 2); /* power up lamps */
|
|
||||||
m_lamps[0] = BIT(data, 5); /* start lamp */
|
|
||||||
m_lamps[3] = BIT(data, 6); /* game over lamps */
|
|
||||||
m_lamps[6] = BIT(data, 6); /* game over lamps */
|
|
||||||
m_lamps[4] = BIT(data, 7); /* game over lamps */
|
|
||||||
m_lamps[7] = BIT(data, 7); /* game over lamps */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ajax_ls138_f10:
|
|
||||||
The LS138 1-of-8 Decoder/Demultiplexer at F10 selects what to do:
|
|
||||||
|
|
||||||
Address R/W Description
|
|
||||||
------- --- -----------
|
|
||||||
0x0000 (r) ??? I think this read is because a CPU core bug
|
|
||||||
(w) 0x0000 NSFIRQ Trigger FIRQ on the M6809
|
|
||||||
0x0020 AFR Watchdog reset (handled by the 051550)
|
|
||||||
0x0040 (w) SOUND Cause interrupt on the Z80
|
|
||||||
0x0080 (w) SOUNDDATA Sound code number
|
|
||||||
0x00c0 (w) MBL1 Enables the LS273 at H11 (Banking + Coin counters)
|
|
||||||
0x0100 (r) MBL2 Enables 2P Inputs reading
|
|
||||||
0x0140 (w) MBL3 Enables the LS273 at B9 (Lamps + Vibration)
|
|
||||||
0x0180 (r) MIO1 Enables 1P Inputs + DIPSW #1 & #2 reading
|
|
||||||
0x01c0 (r) MIO2 Enables DIPSW #3 reading
|
|
||||||
*/
|
|
||||||
|
|
||||||
uint8_t ajax_state::ls138_f10_r(offs_t offset)
|
|
||||||
{
|
|
||||||
int data = 0, index;
|
|
||||||
static const char *const portnames[] = { "SYSTEM", "P1", "DSW1", "DSW2" };
|
|
||||||
|
|
||||||
switch ((offset & 0x01c0) >> 6)
|
|
||||||
{
|
|
||||||
case 0x00: /* ??? */
|
|
||||||
data = machine().rand();
|
|
||||||
break;
|
|
||||||
case 0x04: /* 2P inputs */
|
|
||||||
data = ioport("P2")->read();
|
|
||||||
break;
|
|
||||||
case 0x06: /* 1P inputs + DIPSW #1 & #2 */
|
|
||||||
index = offset & 0x01;
|
|
||||||
data = ioport((offset & 0x02) ? portnames[2 + index] : portnames[index])->read();
|
|
||||||
break;
|
|
||||||
case 0x07: /* DIPSW #3 */
|
|
||||||
data = ioport("DSW3")->read();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
logerror("%04x: (ls138_f10) read from an unknown address %02x\n",m_maincpu->pc(), offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ajax_state::ls138_f10_w(offs_t offset, uint8_t data)
|
|
||||||
{
|
|
||||||
switch ((offset & 0x01c0) >> 6)
|
|
||||||
{
|
|
||||||
case 0x00: /* NSFIRQ + AFR */
|
|
||||||
if (offset)
|
|
||||||
m_watchdog->watchdog_reset();
|
|
||||||
else{
|
|
||||||
if (m_firq_enable) /* Cause interrupt on slave CPU */
|
|
||||||
m_subcpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0x01: /* Cause interrupt on audio CPU */
|
|
||||||
m_audiocpu->set_input_line(0, HOLD_LINE);
|
|
||||||
break;
|
|
||||||
case 0x02: /* Sound command number */
|
|
||||||
m_soundlatch->write(data);
|
|
||||||
break;
|
|
||||||
case 0x03: /* Bankswitch + coin counters + priority*/
|
|
||||||
bankswitch_w(data);
|
|
||||||
break;
|
|
||||||
case 0x05: /* Lamps + Joystick vibration + Control panel quaking */
|
|
||||||
lamps_w(data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
logerror("%04x: (ls138_f10) write %02x to an unknown address %02x\n", m_maincpu->pc(), data, offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* bankswitch_w_2:
|
|
||||||
Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at K14:
|
|
||||||
|
|
||||||
Bit Description
|
|
||||||
--- -----------
|
|
||||||
7 unused
|
|
||||||
6 RMRD Enable char ROM reading through the video RAM
|
|
||||||
5 RVO enables 051316 wraparound
|
|
||||||
4 FIRQST FIRQ control
|
|
||||||
3 SRB3 \
|
|
||||||
2 SRB2 |
|
|
||||||
1 SRB1 | ROM Bank Select
|
|
||||||
0 SRB0 /
|
|
||||||
*/
|
|
||||||
|
|
||||||
void ajax_state::bankswitch_2_w(uint8_t data)
|
|
||||||
{
|
|
||||||
/* enable char ROM reading through the video RAM */
|
|
||||||
m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
|
|
||||||
|
|
||||||
/* bit 5 enables 051316 wraparound */
|
|
||||||
m_k051316->wraparound_enable(data & 0x20);
|
|
||||||
|
|
||||||
/* FIRQ control */
|
|
||||||
m_firq_enable = data & 0x10;
|
|
||||||
|
|
||||||
/* bank # (ROMS G16 and I16) */
|
|
||||||
membank("subbank")->set_entry(data & 0x0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ajax_state::machine_start()
|
|
||||||
{
|
|
||||||
uint8_t *MAIN = memregion("maincpu")->base();
|
|
||||||
uint8_t *SUB = memregion("sub")->base();
|
|
||||||
|
|
||||||
m_lamps.resolve();
|
|
||||||
membank("mainbank")->configure_entries(0, 4, &MAIN[0x00000], 0x2000);
|
|
||||||
membank("mainbank")->configure_entries(4, 8, &MAIN[0x10000], 0x2000);
|
|
||||||
membank("subbank")->configure_entries(0, 9, &SUB[0x00000], 0x2000);
|
|
||||||
|
|
||||||
save_item(NAME(m_priority));
|
|
||||||
save_item(NAME(m_firq_enable));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ajax_state::machine_reset()
|
|
||||||
{
|
|
||||||
m_priority = 0;
|
|
||||||
m_firq_enable = 0;
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Manuel Abadia
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
ajax.cpp
|
|
||||||
|
|
||||||
Functions to emulate the video hardware of the machine.
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "includes/ajax.h"
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Callbacks for the K052109
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
K052109_CB_MEMBER(ajax_state::tile_callback)
|
|
||||||
{
|
|
||||||
static const int layer_colorbase[] = { 1024 / 16, 0 / 16, 512 / 16 };
|
|
||||||
|
|
||||||
*code |= ((*color & 0x0f) << 8) | (bank << 12);
|
|
||||||
*color = layer_colorbase[layer] + ((*color & 0xf0) >> 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Callbacks for the K051960
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
K051960_CB_MEMBER(ajax_state::sprite_callback)
|
|
||||||
{
|
|
||||||
enum { sprite_colorbase = 256 / 16 };
|
|
||||||
|
|
||||||
/* priority bits:
|
|
||||||
4 over zoom (0 = have priority)
|
|
||||||
5 over B (0 = have priority)
|
|
||||||
6 over A (1 = have priority)
|
|
||||||
never over F
|
|
||||||
*/
|
|
||||||
*priority = 0;
|
|
||||||
if ( *color & 0x10) *priority |= GFX_PMASK_4; /* Z = 4 */
|
|
||||||
if (~*color & 0x40) *priority |= GFX_PMASK_2; /* A = 2 */
|
|
||||||
if ( *color & 0x20) *priority |= GFX_PMASK_1; /* B = 1 */
|
|
||||||
*color = sprite_colorbase + (*color & 0x0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Callbacks for the K051316
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
K051316_CB_MEMBER(ajax_state::zoom_callback)
|
|
||||||
{
|
|
||||||
enum { zoom_colorbase = 768 / 128 };
|
|
||||||
|
|
||||||
*code |= ((*color & 0x07) << 8);
|
|
||||||
*color = zoom_colorbase + ((*color & 0x08) >> 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Display Refresh
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
uint32_t ajax_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
|
||||||
{
|
|
||||||
m_k052109->tilemap_update();
|
|
||||||
|
|
||||||
screen.priority().fill(0, cliprect);
|
|
||||||
|
|
||||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, 2, 0, 1);
|
|
||||||
if (m_priority)
|
|
||||||
{
|
|
||||||
/* basic layer order is B, zoom, A, F */
|
|
||||||
m_k051316->zoom_draw(screen, bitmap, cliprect, 0, 4);
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, 1, 0, 2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* basic layer order is B, A, zoom, F */
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, 1, 0, 2);
|
|
||||||
m_k051316->zoom_draw(screen, bitmap, cliprect, 0, 4);
|
|
||||||
}
|
|
||||||
m_k051960->k051960_sprites_draw(bitmap, cliprect, screen.priority(), -1, -1);
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, 0, 0, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Nicola Salmoria
|
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "includes/parodius.h"
|
|
||||||
#include "screen.h"
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Callbacks for the K052109
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
K052109_CB_MEMBER(parodius_state::tile_callback)
|
|
||||||
{
|
|
||||||
*code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13);
|
|
||||||
*color = m_layer_colorbase[layer] + ((*color & 0xe0) >> 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Callbacks for the K053245
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
K05324X_CB_MEMBER(parodius_state::sprite_callback)
|
|
||||||
{
|
|
||||||
int pri = 0x20 | ((*color & 0x60) >> 2);
|
|
||||||
if (pri <= m_layerpri[2])
|
|
||||||
*priority = 0;
|
|
||||||
else if (pri > m_layerpri[2] && pri <= m_layerpri[1])
|
|
||||||
*priority = 0xf0;
|
|
||||||
else if (pri > m_layerpri[1] && pri <= m_layerpri[0])
|
|
||||||
*priority = 0xf0 | 0xcc;
|
|
||||||
else
|
|
||||||
*priority = 0xf0 | 0xcc | 0xaa;
|
|
||||||
|
|
||||||
*color = m_sprite_colorbase + (*color & 0x1f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Start the video hardware emulation.
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
uint32_t parodius_state::screen_update_parodius(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
|
||||||
{
|
|
||||||
int layer[3], bg_colorbase;
|
|
||||||
|
|
||||||
bg_colorbase = m_k053251->get_palette_index(k053251_device::CI0);
|
|
||||||
m_sprite_colorbase = m_k053251->get_palette_index(k053251_device::CI1);
|
|
||||||
m_layer_colorbase[0] = m_k053251->get_palette_index(k053251_device::CI2);
|
|
||||||
m_layer_colorbase[1] = m_k053251->get_palette_index(k053251_device::CI4);
|
|
||||||
m_layer_colorbase[2] = m_k053251->get_palette_index(k053251_device::CI3);
|
|
||||||
|
|
||||||
m_k052109->tilemap_update();
|
|
||||||
|
|
||||||
layer[0] = 0;
|
|
||||||
m_layerpri[0] = m_k053251->get_priority(k053251_device::CI2);
|
|
||||||
layer[1] = 1;
|
|
||||||
m_layerpri[1] = m_k053251->get_priority(k053251_device::CI4);
|
|
||||||
layer[2] = 2;
|
|
||||||
m_layerpri[2] = m_k053251->get_priority(k053251_device::CI3);
|
|
||||||
|
|
||||||
konami_sortlayers3(layer, m_layerpri);
|
|
||||||
|
|
||||||
screen.priority().fill(0, cliprect);
|
|
||||||
bitmap.fill(16 * bg_colorbase, cliprect);
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[0], 0,1);
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[1], 0,2);
|
|
||||||
m_k052109->tilemap_draw(screen, bitmap, cliprect, layer[2], 0,4);
|
|
||||||
|
|
||||||
m_k053245->sprites_draw(bitmap, cliprect, screen.priority());
|
|
||||||
return 0;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user