mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
dec8: correct cpu clocks for some games, make mcu-side comms edge-triggered, remove non-existant coin3 on 2 player games (it was service coin in some cases), misc cleanups,
ghostb3a: this version expects longer irq trigger, srdarwinb: hook up coin inputs Clones promoted to working -------------------------- The Real Ghostbusters (US 3 Players, revision 2) [hap] SRD: Super Real Darwin (Japan, bootleg) [hap]
This commit is contained in:
parent
b0267c4767
commit
1af09712d7
@ -1772,14 +1772,17 @@ static GFXDECODE_START( gfx_secretab )
|
||||
GFXDECODE_ENTRY( "tiles2", 0, automat_tilelayout2, 0x300, 0x10 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
// DECO video CRTC, pixel clock is unverified (actually 24MHz/4?)
|
||||
void dec0_state::set_screen_raw_params_data_east(machine_config &config)
|
||||
void dec0_state::set_screen_raw_params(machine_config &config)
|
||||
{
|
||||
m_screen->set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248);
|
||||
// m_screen->set_refresh_hz(57.41);
|
||||
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); / 57.41 Hz, 529us Vblank
|
||||
// m_screen->set_size(32*8, 32*8);
|
||||
// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
|
||||
m_screen->set_raw(XTAL(12'000'000) / 2, 384, 0, 256, 272, 8, 248);
|
||||
}
|
||||
|
||||
void dec0_state::dec0_base(machine_config &config)
|
||||
@ -1788,12 +1791,7 @@ void dec0_state::dec0_base(machine_config &config)
|
||||
BUFFERED_SPRITERAM16(config, m_spriteram);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
set_screen_raw_params_data_east(config);
|
||||
//m_screen->set_refresh_hz(57.41);
|
||||
//m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 57.41 Hz, 529us Vblank */
|
||||
//m_screen->set_size(32*8, 32*8);
|
||||
//m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
|
||||
//screen update callback differs per game
|
||||
set_screen_raw_params(config);
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_dec0);
|
||||
@ -1930,9 +1928,7 @@ void dec0_automat_state::automat(machine_config &config)
|
||||
BUFFERED_SPRITERAM16(config, m_spriteram);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
// m_screen->set_refresh_hz(57.41);
|
||||
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 57.41 Hz, 529us Vblank */
|
||||
set_screen_raw_params_data_east(config);
|
||||
set_screen_raw_params(config);
|
||||
m_screen->set_screen_update(FUNC(dec0_automat_state::screen_update_automat));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
@ -2006,9 +2002,7 @@ void dec0_automat_state::secretab(machine_config &config) // all clocks verified
|
||||
BUFFERED_SPRITERAM16(config, m_spriteram);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
// m_screen->set_refresh_hz(57.41);
|
||||
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); // 57.41 Hz, 529us Vblank
|
||||
set_screen_raw_params_data_east(config);
|
||||
set_screen_raw_params(config);
|
||||
m_screen->set_screen_update(FUNC(dec0_automat_state::screen_update_secretab));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
|
@ -84,7 +84,7 @@ protected:
|
||||
void robocop_colpri_cb(u32 &colour, u32 &pri_mask);
|
||||
void baddudes_tile_cb(tile_data &tileinfo, u32 &tile, u32 &colour, u32 &flags);
|
||||
|
||||
void set_screen_raw_params_data_east(machine_config &config);
|
||||
void set_screen_raw_params(machine_config &config);
|
||||
|
||||
void h6280_decrypt(const char *cputag);
|
||||
void dec0_map(address_map &map) ATTR_COLD;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -32,6 +32,7 @@ protected:
|
||||
m_screen(*this, "screen"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_soundirq(*this, "soundirq"),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_tilegen(*this, "tilegen%u", 1),
|
||||
m_mainbank(*this, "mainbank"),
|
||||
@ -42,28 +43,24 @@ protected:
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(audiocpu_nmi_clear);
|
||||
|
||||
void buffer_spriteram16_w(u8 data);
|
||||
void sound_w(u8 data);
|
||||
void main_irq_on_w(u8 data);
|
||||
void main_irq_off_w(u8 data);
|
||||
void main_firq_off_w(u8 data);
|
||||
void sub_irq_on_w(u8 data);
|
||||
void sub_irq_off_w(u8 data);
|
||||
void sub_firq_off_w(u8 data);
|
||||
void both_firq_off_w(u8 data);
|
||||
void flip_screen_w(u8 data);
|
||||
void bg_ram_w(offs_t offset, u8 data);
|
||||
u8 bg_ram_r(offs_t offset);
|
||||
void videoram_w(offs_t offset, u8 data);
|
||||
|
||||
void set_screen_raw_params_data_east(machine_config &config);
|
||||
void set_screen_raw_params(machine_config &config);
|
||||
|
||||
void allocate_buffered_spriteram16();
|
||||
void dec8_s_map(address_map &map) ATTR_COLD;
|
||||
void oscar_s_map(address_map &map) ATTR_COLD;
|
||||
|
||||
/* devices */
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<cpu_device> m_subcpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
@ -71,28 +68,27 @@ protected:
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<deco_rmc3_device> m_palette;
|
||||
optional_device<input_merger_device> m_soundirq;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
optional_device_array<deco_bac06_device, 2> m_tilegen;
|
||||
|
||||
/* memory regions */
|
||||
// memory regions
|
||||
required_memory_bank m_mainbank;
|
||||
|
||||
/* memory pointers */
|
||||
// memory pointers
|
||||
required_shared_ptr<u8> m_videoram;
|
||||
optional_shared_ptr<u8> m_bg_ram;
|
||||
|
||||
std::unique_ptr<u16[]> m_buffered_spriteram16; // for the mxc06 sprite chip emulation (oscar, cobra)
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
tilemap_t *m_fix_tilemap = nullptr;
|
||||
int m_scroll[4]{};
|
||||
int m_game_uses_priority = 0;
|
||||
// video-related
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
tilemap_t *m_fix_tilemap = nullptr;
|
||||
int m_scroll[4]{};
|
||||
int m_game_uses_priority = 0;
|
||||
|
||||
/* misc */
|
||||
bool m_coin_state = false;
|
||||
|
||||
emu_timer *m_6502_timer = nullptr;
|
||||
// misc
|
||||
bool m_coin_state = false;
|
||||
};
|
||||
|
||||
// with I8751 MCU
|
||||
@ -101,40 +97,31 @@ class dec8_mcu_state_base : public dec8_state_base
|
||||
protected:
|
||||
dec8_mcu_state_base(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
dec8_state_base(mconfig, type, tag),
|
||||
m_mcu(*this, "mcu"),
|
||||
m_coin_port(*this, "I8751")
|
||||
m_mcu(*this, "mcu")
|
||||
{
|
||||
}
|
||||
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(mcu_irq_clear);
|
||||
|
||||
u8 i8751_h_r();
|
||||
u8 i8751_l_r();
|
||||
void i8751_w(offs_t offset, u8 data);
|
||||
u8 i8751_hi_r();
|
||||
u8 i8751_lo_r();
|
||||
virtual void i8751_hi_w(u8 data);
|
||||
void i8751_lo_w(u8 data);
|
||||
|
||||
u8 i8751_port0_r();
|
||||
void i8751_port0_w(u8 data);
|
||||
u8 i8751_port1_r();
|
||||
void i8751_port1_w(u8 data);
|
||||
|
||||
void i8751_reset_w(u8 data);
|
||||
|
||||
required_device<i8751_device> m_mcu;
|
||||
|
||||
/* ports */
|
||||
required_ioport m_coin_port;
|
||||
optional_device<i8751_device> m_mcu;
|
||||
|
||||
// MCU communication
|
||||
u8 m_i8751_p2 = 0;
|
||||
u8 m_i8751_p2 = 0;
|
||||
int m_i8751_port0 = 0;
|
||||
int m_i8751_port1 = 0;
|
||||
int m_i8751_return = 0;
|
||||
int m_i8751_value = 0;
|
||||
|
||||
emu_timer *m_i8751_timer = nullptr;
|
||||
};
|
||||
|
||||
// with unique sprite hardware
|
||||
@ -147,6 +134,8 @@ public:
|
||||
}
|
||||
|
||||
void srdarwin(machine_config &config);
|
||||
void srdarwinb(machine_config &config);
|
||||
|
||||
void init_srdarwinb();
|
||||
|
||||
protected:
|
||||
@ -160,10 +149,11 @@ private:
|
||||
TILE_GET_INFO_MEMBER(get_fix_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap);
|
||||
|
||||
void main_map(address_map &map) ATTR_COLD;
|
||||
void srdarwinb_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
// with 'karnov' sprite hardware
|
||||
@ -172,16 +162,56 @@ class lastmisn_state : public dec8_mcu_state_base
|
||||
public:
|
||||
lastmisn_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
dec8_mcu_state_base(mconfig, type, tag),
|
||||
m_spritegen_krn(*this, "spritegen_krn"),
|
||||
m_spritegen_krn(*this, "spritegen_krn")
|
||||
{
|
||||
}
|
||||
|
||||
void lastmisn(machine_config &config);
|
||||
void shackled(machine_config &config);
|
||||
|
||||
protected:
|
||||
DECLARE_VIDEO_START(lastmisn);
|
||||
u32 screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
required_device<deco_karnovsprites_device> m_spritegen_krn;
|
||||
|
||||
private:
|
||||
void lastmisn_control_w(u8 data);
|
||||
void shackled_control_w(u8 data);
|
||||
void lastmisn_scrollx_w(u8 data);
|
||||
void lastmisn_scrolly_w(u8 data);
|
||||
void mcu_to_main_w(u8 data);
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows);
|
||||
TILE_GET_INFO_MEMBER(get_lastmisn_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info);
|
||||
|
||||
DECLARE_VIDEO_START(shackled);
|
||||
|
||||
u32 screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void shackled_coin_irq(int state);
|
||||
|
||||
void lastmisn_map(address_map &map) ATTR_COLD;
|
||||
void lastmisn_sub_map(address_map &map) ATTR_COLD;
|
||||
void shackled_map(address_map &map) ATTR_COLD;
|
||||
void shackled_sub_map(address_map &map) ATTR_COLD;
|
||||
void ym3526_s_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
// different interrupt handling
|
||||
class ghostb_state : public lastmisn_state
|
||||
{
|
||||
public:
|
||||
ghostb_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
lastmisn_state(mconfig, type, tag),
|
||||
m_nmigate(*this, "nmigate")
|
||||
{
|
||||
}
|
||||
|
||||
void garyoret(machine_config &config);
|
||||
void ghostb(machine_config &config);
|
||||
void lastmisn(machine_config &config);
|
||||
void meikyuh(machine_config &config);
|
||||
void shackled(machine_config &config);
|
||||
|
||||
void init_meikyuhbl();
|
||||
|
||||
@ -189,62 +219,48 @@ protected:
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
|
||||
virtual void i8751_hi_w(u8 data) override;
|
||||
void gondo_i8751_hi_w(u8 data);
|
||||
void ghostb_bank_w(u8 data);
|
||||
void gondo_scroll_w(offs_t offset, u8 data);
|
||||
void gondo_mcu_to_main_w(u8 data);
|
||||
void mcu_to_main_w(u8 data);
|
||||
void sound_w(u8 data);
|
||||
|
||||
TIMER_CALLBACK_MEMBER(audiocpu_nmi_clear);
|
||||
TIMER_CALLBACK_MEMBER(mcu_irq_clear);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_gondo_fix_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_gondo_tile_info);
|
||||
|
||||
DECLARE_VIDEO_START(lastmisn);
|
||||
uint32_t screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void screen_vblank(int state);
|
||||
|
||||
required_device<deco_karnovsprites_device> m_spritegen_krn;
|
||||
optional_device<input_merger_device> m_nmigate;
|
||||
|
||||
private:
|
||||
void lastmisn_control_w(u8 data);
|
||||
void shackled_control_w(u8 data);
|
||||
void lastmisn_scrollx_w(u8 data);
|
||||
void lastmisn_scrolly_w(u8 data);
|
||||
void shackled_mcu_to_main_w(u8 data);
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_ghostb_fix_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_lastmisn_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info);
|
||||
|
||||
DECLARE_VIDEO_START(garyoret);
|
||||
DECLARE_VIDEO_START(ghostb);
|
||||
DECLARE_VIDEO_START(shackled);
|
||||
|
||||
uint32_t screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void shackled_coin_irq(int state);
|
||||
|
||||
void lastmisn_map(address_map &map) ATTR_COLD;
|
||||
void lastmisn_sub_map(address_map &map) ATTR_COLD;
|
||||
void ghostb_map(address_map &map) ATTR_COLD;
|
||||
void garyoret_map(address_map &map) ATTR_COLD;
|
||||
void meikyuh_map(address_map &map) ATTR_COLD;
|
||||
void shackled_map(address_map &map) ATTR_COLD;
|
||||
void shackled_sub_map(address_map &map) ATTR_COLD;
|
||||
void ym3526_s_map(address_map &map) ATTR_COLD;
|
||||
|
||||
bool m_secclr = false;
|
||||
bool m_nmi_enable = false;
|
||||
bool m_secclr = false;
|
||||
bool m_nmi_enable = false;
|
||||
|
||||
emu_timer *m_6502_timer = nullptr;
|
||||
emu_timer *m_i8751_timer = nullptr;
|
||||
};
|
||||
|
||||
// with rotary joystick
|
||||
class gondo_state : public lastmisn_state
|
||||
class gondo_state : public ghostb_state
|
||||
{
|
||||
public:
|
||||
gondo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
lastmisn_state(mconfig, type, tag),
|
||||
ghostb_state(mconfig, type, tag),
|
||||
m_analog_io(*this, "AN%u", 0U),
|
||||
m_in_io(*this, "IN%u", 0U)
|
||||
{
|
||||
@ -258,7 +274,7 @@ protected:
|
||||
private:
|
||||
template<unsigned Which> u8 player_io_r(offs_t offset);
|
||||
|
||||
uint32_t screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void gondo_colpri_cb(u32 &colour, u32 &pri_mask);
|
||||
|
||||
@ -291,8 +307,8 @@ private:
|
||||
DECLARE_VIDEO_START(cobracom);
|
||||
DECLARE_VIDEO_START(oscar);
|
||||
|
||||
uint32_t screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void coin_irq(int state);
|
||||
void coin_clear_w(u8 data);
|
||||
@ -340,8 +356,8 @@ private:
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_memory_bank m_soundbank;
|
||||
|
||||
int m_toggle = 0;
|
||||
int m_msm5205next = 0;
|
||||
int m_toggle = 0;
|
||||
int m_msm5205next = 0;
|
||||
};
|
||||
|
||||
#endif // MAME_DATAEAST_DEC8_H
|
||||
|
@ -8,9 +8,9 @@ Cobra Command:
|
||||
256 colours, palette generated by ram.
|
||||
|
||||
The Real Ghostbusters:
|
||||
1 Deco VSC30 (M60348) (on DE-0259-1 sub board)
|
||||
1 Deco HMC20 (M60232) (on DE-0259-1 sub board)
|
||||
1 x BAC06 (on DE-0273-1 board)
|
||||
1 Deco VSC30 (M60348) (on DE-0259-1 sub board)
|
||||
1 Deco HMC20 (M60232) (on DE-0259-1 sub board)
|
||||
1 x BAC06 (on DE-0273-1 board)
|
||||
|
||||
1 playfield, same as above, with rowscroll
|
||||
1024 colours from 2 proms.
|
||||
@ -21,25 +21,24 @@ Super Real Darwin:
|
||||
Closer to earlier Darwin 4078 board than above games.
|
||||
|
||||
Last Mission/Shackled:
|
||||
Has 1 Deco VSC30 (M60348) (From readme file)
|
||||
Has 1 Deco HMC20 (M60232) (From readme file)
|
||||
Has 1 Deco VSC30 (M60348) (From readme file)
|
||||
Has 1 Deco HMC20 (M60232) (From readme file)
|
||||
|
||||
1 playfield
|
||||
Sprite hardware same as Karnov.
|
||||
(Shackled) Palettes 8-15 for tiles seem to have priority over sprites.
|
||||
1 playfield
|
||||
Sprite hardware same as Karnov.
|
||||
(Shackled) Palettes 8-15 for tiles seem to have priority over sprites.
|
||||
|
||||
Gondomania:
|
||||
Has two large square surface mount chips: [ DRL 40, 8053, 8649a ]
|
||||
Has 1 Deco VSC30 (M60348)
|
||||
Has 1 Deco HMC20 (M60232)
|
||||
Priority - all tiles with *pens* 8-15 appear over sprites with palettes 8-15.
|
||||
Has two large square surface mount chips: [ DRL 40, 8053, 8649a ]
|
||||
Has 1 Deco VSC30 (M60348)
|
||||
Has 1 Deco HMC20 (M60232)
|
||||
Priority - all tiles with *pens* 8-15 appear over sprites with palettes 8-15.
|
||||
|
||||
Oscar:
|
||||
Uses MXC-06 custom chip for sprites.
|
||||
Uses BAC-06 custom chip for background.
|
||||
I can't find what makes the fix chars...
|
||||
Priority - tiles with palettes 8-15 have their *pens* 8-15 appearing over
|
||||
sprites.
|
||||
Uses MXC-06 custom chip for sprites.
|
||||
Uses BAC-06 custom chip for background.
|
||||
I can't find what makes the fix chars...
|
||||
Priority - tiles with palettes 8-15 have their *pens* 8-15 appearing over sprites.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -80,14 +79,14 @@ void srdarwin_state::control_w(offs_t offset, u8 data)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0: /* Top 3 bits - bank switch, bottom 4 - scroll MSB */
|
||||
case 0: // Top 3 bits - bank switch, bottom 4 - scroll MSB
|
||||
m_mainbank->set_entry((data >> 5));
|
||||
m_scroll[0] = data & 0xf;
|
||||
return;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_scroll[1] = data;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -113,7 +112,7 @@ void lastmisn_state::lastmisn_control_w(u8 data)
|
||||
|
||||
void lastmisn_state::shackled_control_w(u8 data)
|
||||
{
|
||||
/* Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs */
|
||||
// Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs
|
||||
m_mainbank->set_entry(data & 0x0f);
|
||||
|
||||
m_scroll[0] = (data >> 5) & 1;
|
||||
@ -130,20 +129,20 @@ void lastmisn_state::lastmisn_scrolly_w(u8 data)
|
||||
m_scroll[3] = data;
|
||||
}
|
||||
|
||||
void lastmisn_state::gondo_scroll_w(offs_t offset, u8 data)
|
||||
void ghostb_state::gondo_scroll_w(offs_t offset, u8 data)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x0:
|
||||
m_scroll[1] = data; /* X LSB */
|
||||
m_scroll[1] = data; // X LSB
|
||||
break;
|
||||
case 0x8:
|
||||
m_scroll[3] = data; /* Y LSB */
|
||||
m_scroll[3] = data; // Y LSB
|
||||
break;
|
||||
case 0x10:
|
||||
m_scroll[0] = (data >> 0) & 1; /* Bit 0: X MSB */
|
||||
m_scroll[2] = (data >> 1) & 1; /* Bit 1: Y MSB */
|
||||
/* Bit 2 is also used in Gondo & Garyoret */
|
||||
m_scroll[0] = (data >> 0) & 1; // Bit 0: X MSB
|
||||
m_scroll[2] = (data >> 1) & 1; // Bit 1: Y MSB
|
||||
// Bit 2 is also used in Gondo & Garyoret
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -154,14 +153,14 @@ void dec8_state_base::allocate_buffered_spriteram16()
|
||||
save_pointer(NAME(m_buffered_spriteram16), 0x800/2);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap)
|
||||
{
|
||||
u8 *buffered_spriteram = m_spriteram->buffer();
|
||||
|
||||
/* Sprites */
|
||||
// Sprites
|
||||
for (int offs = 0x200 - 4; offs >= 0; offs -= 4)
|
||||
{
|
||||
u32 pri_mask = 0;
|
||||
@ -185,10 +184,11 @@ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
{
|
||||
sy = 240 - sy;
|
||||
sx = 240 - sx;
|
||||
if (fx) fx = 0; else fx = 1;
|
||||
fx = !fx;
|
||||
sy2 = sy - 16;
|
||||
}
|
||||
else sy2 = sy + 16;
|
||||
else
|
||||
sy2 = sy + 16;
|
||||
|
||||
m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
|
||||
code,
|
||||
@ -204,6 +204,7 @@ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
void oscar_state::cobracom_colpri_cb(u32 &colour, u32 &pri_mask)
|
||||
@ -215,7 +216,7 @@ void oscar_state::cobracom_colpri_cb(u32 &colour, u32 &pri_mask)
|
||||
colour &= 3;
|
||||
}
|
||||
|
||||
uint32_t oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0,cliprect);
|
||||
bool flip = m_tilegen[0]->get_flip_state();
|
||||
@ -231,8 +232,8 @@ uint32_t oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
TILE_GET_INFO_MEMBER(oscar_state::get_cobracom_fix_tile_info)
|
||||
{
|
||||
@ -240,10 +241,7 @@ TILE_GET_INFO_MEMBER(oscar_state::get_cobracom_fix_tile_info)
|
||||
int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8);
|
||||
int color = (tile & 0xe000) >> 13;
|
||||
|
||||
tileinfo.set(0,
|
||||
tile & 0xfff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(0, tile & 0xfff, color, 0);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(oscar_state,cobracom)
|
||||
@ -256,9 +254,10 @@ VIDEO_START_MEMBER(oscar_state,cobracom)
|
||||
m_game_uses_priority = 0;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
uint32_t lastmisn_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 ghostb_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_tilegen[0]->deco_bac06_pf_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_spritegen_krn->draw_sprites(screen, bitmap, cliprect, m_buffered_spriteram16.get(), 0x400);
|
||||
@ -266,22 +265,19 @@ uint32_t lastmisn_state::screen_update_ghostb(screen_device &screen, bitmap_ind1
|
||||
return 0;
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(lastmisn_state::get_ghostb_fix_tile_info)
|
||||
TILE_GET_INFO_MEMBER(ghostb_state::get_ghostb_fix_tile_info)
|
||||
{
|
||||
int offs = tile_index << 1;
|
||||
int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8);
|
||||
int color = (tile & 0xc00) >> 10;
|
||||
|
||||
tileinfo.set(0,
|
||||
tile & 0x3ff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(0, tile & 0x3ff, color, 0);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(lastmisn_state,ghostb)
|
||||
VIDEO_START_MEMBER(ghostb_state,ghostb)
|
||||
{
|
||||
allocate_buffered_spriteram16();
|
||||
m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_ghostb_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_ghostb_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_fix_tilemap->set_transparent_pen(0);
|
||||
|
||||
m_game_uses_priority = 0;
|
||||
@ -290,6 +286,7 @@ VIDEO_START_MEMBER(lastmisn_state,ghostb)
|
||||
save_item(NAME(m_nmi_enable));
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// we mimic the priority scheme in dec0.cpp, this was originally a bit different, so this could be wrong
|
||||
@ -299,7 +296,7 @@ void oscar_state::oscar_tile_cb(tile_data &tileinfo, u32 &tile, u32 &colour, u32
|
||||
colour &= 7;
|
||||
}
|
||||
|
||||
uint32_t oscar_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 oscar_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bool flip = m_tilegen[0]->get_flip_state();
|
||||
m_tilegen[0]->set_flip_screen(flip);
|
||||
@ -319,10 +316,7 @@ TILE_GET_INFO_MEMBER(oscar_state::get_oscar_fix_tile_info)
|
||||
int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8);
|
||||
int color = (tile & 0xf000) >> 14;
|
||||
|
||||
tileinfo.set(0,
|
||||
tile&0xfff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(0, tile & 0xfff, color, 0);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(oscar_state,oscar)
|
||||
@ -337,9 +331,10 @@ VIDEO_START_MEMBER(oscar_state,oscar)
|
||||
m_game_uses_priority = 1;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
uint32_t lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8)+ m_scroll[1]));
|
||||
m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8)+ m_scroll[3]));
|
||||
@ -350,7 +345,7 @@ uint32_t lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_in
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1]));
|
||||
m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8) + m_scroll[3]));
|
||||
@ -366,7 +361,7 @@ uint32_t lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_in
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(lastmisn_state::lastmisn_scan_rows)
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
// logical (col,row) -> memory offset
|
||||
return ((col & 0x0f) + ((row & 0x0f) << 4)) + ((col & 0x10) << 4) + ((row & 0x10) << 5);
|
||||
}
|
||||
|
||||
@ -381,10 +376,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_tile_info)
|
||||
else
|
||||
tileinfo.category = 0;
|
||||
|
||||
tileinfo.set(1,
|
||||
tile & 0xfff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(1, tile & 0xfff, color, 0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_fix_tile_info)
|
||||
@ -393,10 +385,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_fix_tile_info)
|
||||
int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8);
|
||||
int color = (tile & 0xc000) >> 14;
|
||||
|
||||
tileinfo.set(0,
|
||||
tile&0xfff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(0, tile & 0xfff, color, 0);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(lastmisn_state,lastmisn)
|
||||
@ -420,9 +409,10 @@ VIDEO_START_MEMBER(lastmisn_state,shackled)
|
||||
m_game_uses_priority = 1;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
uint32_t srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
m_bg_tilemap->set_scrollx(0, (m_scroll[0] << 8) + m_scroll[1]);
|
||||
@ -437,14 +427,11 @@ uint32_t srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
|
||||
TILE_GET_INFO_MEMBER(srdarwin_state::get_fix_tile_info)
|
||||
{
|
||||
int tile = m_videoram[tile_index];
|
||||
int color = 0; /* ? */
|
||||
int color = 0; // ?
|
||||
|
||||
tileinfo.category = 0;
|
||||
|
||||
tileinfo.set(0,
|
||||
tile,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(0, tile, color, 0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(srdarwin_state::get_tile_info)
|
||||
@ -456,10 +443,7 @@ TILE_GET_INFO_MEMBER(srdarwin_state::get_tile_info)
|
||||
tile = tile & 0x3ff;
|
||||
bank = (tile / 0x100) + 2;
|
||||
|
||||
tileinfo.set(bank,
|
||||
tile,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(bank, tile, color, 0);
|
||||
tileinfo.group = color;
|
||||
}
|
||||
|
||||
@ -475,6 +459,7 @@ void srdarwin_state::video_start()
|
||||
m_bg_tilemap->set_transmask(3, 0x0000, 0xffff); // draw as foreground only
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
void gondo_state::gondo_colpri_cb(u32 &colour, u32 &pri_mask)
|
||||
@ -484,7 +469,7 @@ void gondo_state::gondo_colpri_cb(u32 &colour, u32 &pri_mask)
|
||||
pri_mask |= GFX_PMASK_2; // behind foreground, above background
|
||||
}
|
||||
|
||||
uint32_t gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1]));
|
||||
@ -497,7 +482,7 @@ uint32_t gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &b
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t lastmisn_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 ghostb_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1]));
|
||||
m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8) + m_scroll[3]));
|
||||
@ -509,19 +494,16 @@ uint32_t lastmisn_state::screen_update_garyoret(screen_device &screen, bitmap_in
|
||||
return 0;
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_fix_tile_info)
|
||||
TILE_GET_INFO_MEMBER(ghostb_state::get_gondo_fix_tile_info)
|
||||
{
|
||||
int offs = tile_index * 2;
|
||||
int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8);
|
||||
int color = (tile & 0x7000) >> 12;
|
||||
|
||||
tileinfo.set(0,
|
||||
tile&0xfff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(0, tile & 0xfff, color, 0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_tile_info)
|
||||
TILE_GET_INFO_MEMBER(ghostb_state::get_gondo_tile_info)
|
||||
{
|
||||
int offs = tile_index * 2;
|
||||
int tile = m_bg_ram[offs + 1] + (m_bg_ram[offs] << 8);
|
||||
@ -532,10 +514,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_tile_info)
|
||||
else
|
||||
tileinfo.category = 0;
|
||||
|
||||
tileinfo.set(1,
|
||||
tile&0xfff,
|
||||
color,
|
||||
0);
|
||||
tileinfo.set(1, tile & 0xfff, color, 0);
|
||||
}
|
||||
|
||||
void gondo_state::video_start()
|
||||
@ -545,18 +524,16 @@ void gondo_state::video_start()
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gondo_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
|
||||
|
||||
m_fix_tilemap->set_transparent_pen(0);
|
||||
m_bg_tilemap->set_transmask(0, 0x00ff, 0xff00); /* Bottom 8 pens */
|
||||
m_bg_tilemap->set_transmask(0, 0x00ff, 0xff00); // Bottom 8 pens
|
||||
m_game_uses_priority = 0;
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(lastmisn_state,garyoret)
|
||||
VIDEO_START_MEMBER(ghostb_state,garyoret)
|
||||
{
|
||||
allocate_buffered_spriteram16();
|
||||
m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_gondo_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
|
||||
m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_gondo_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
|
||||
|
||||
m_fix_tilemap->set_transparent_pen(0);
|
||||
m_game_uses_priority = 1;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -87,6 +87,7 @@ Stephh's notes (based on the games M68000 code and some tests) :
|
||||
#include "sound/ymopn.h"
|
||||
#include "sound/ymopl.h"
|
||||
#include "video/bufsprite.h"
|
||||
|
||||
#include "deckarn.h"
|
||||
#include "decrmc3.h"
|
||||
#include "screen.h"
|
||||
@ -96,7 +97,6 @@ Stephh's notes (based on the games M68000 code and some tests) :
|
||||
|
||||
namespace {
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Type definitions
|
||||
@ -106,8 +106,8 @@ namespace {
|
||||
class karnov_state : public driver_device
|
||||
{
|
||||
public:
|
||||
karnov_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
karnov_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_mcu(*this, "mcu"),
|
||||
@ -169,6 +169,7 @@ private:
|
||||
void karnovjbl_sound_map(address_map &map) ATTR_COLD;
|
||||
|
||||
void screen_vblank(int state);
|
||||
|
||||
// protection mcu
|
||||
void mcu_coin_irq(int state);
|
||||
void mcu_ack_w(uint16_t data);
|
||||
@ -234,28 +235,29 @@ void karnov_state::mcu_p2_w(uint8_t data)
|
||||
// ------1- secreq ack
|
||||
// -------0 cinclr
|
||||
|
||||
if (BIT(m_mcu_p2, 0) == 1 && BIT(data, 0) == 0)
|
||||
const u8 fall = ~data & m_mcu_p2;
|
||||
m_mcu_p2 = data;
|
||||
|
||||
if (BIT(fall, 0))
|
||||
m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE);
|
||||
|
||||
if (BIT(m_mcu_p2, 1) == 1 && BIT(data, 1) == 0)
|
||||
if (BIT(fall, 1))
|
||||
m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE);
|
||||
|
||||
if (BIT(m_mcu_p2, 2) == 1 && BIT(data, 2) == 0)
|
||||
if (BIT(fall, 2))
|
||||
m_maincpu->set_input_line(6, ASSERT_LINE);
|
||||
|
||||
if (BIT(m_mcu_p2, 4) == 1 && BIT(data, 4) == 0)
|
||||
if (BIT(fall, 4))
|
||||
m_mcu_p0 = m_maincpu_to_mcu >> 0;
|
||||
|
||||
if (BIT(m_mcu_p2, 5) == 1 && BIT(data, 5) == 0)
|
||||
if (BIT(fall, 5))
|
||||
m_mcu_p1 = m_maincpu_to_mcu >> 8;
|
||||
|
||||
if (BIT(m_mcu_p2, 6) == 1 && BIT(data, 6) == 0)
|
||||
if (BIT(fall, 6))
|
||||
m_mcu_to_maincpu = (m_mcu_to_maincpu & 0xff00) | (m_mcu_p0 << 0);
|
||||
|
||||
if (BIT(m_mcu_p2, 7) == 1 && BIT(data, 7) == 0)
|
||||
if (BIT(fall, 7))
|
||||
m_mcu_to_maincpu = (m_mcu_to_maincpu & 0x00ff) | (m_mcu_p1 << 8);
|
||||
|
||||
m_mcu_p2 = data;
|
||||
}
|
||||
|
||||
// i8031 for bootleg emulation
|
||||
@ -294,10 +296,13 @@ void karnov_state::mcu_data_h_w(uint8_t data)
|
||||
|
||||
void karnov_state::mcubl_p1_w(uint8_t data)
|
||||
{
|
||||
if (BIT(m_mcu_p1, 0) == 1 && BIT(data, 0) == 0)
|
||||
const u8 fall = ~data & m_mcu_p1;
|
||||
m_mcu_p1 = data;
|
||||
|
||||
if (BIT(fall, 0))
|
||||
m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE);
|
||||
|
||||
if (BIT(m_mcu_p1, 1) == 1 && BIT(data, 1) == 0)
|
||||
if (BIT(fall, 1))
|
||||
m_maincpu->set_input_line(6, ASSERT_LINE);
|
||||
|
||||
m_mcu_p1 = data;
|
||||
@ -1251,13 +1256,13 @@ ROM_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1987, karnov, 0, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 6)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnova, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 5)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnovj, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Karnov (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnovjbl, karnov, karnovjbl, karnovjbl, karnov_state, empty_init, ROT0, "bootleg (K. J. Corporation)", "Karnov (Japan, bootleg with NEC D8748HD)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, karnov_state, empty_init, ROT270, "Data East Corporation", "Wonder Planet (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnov, 0, karnov, chelnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (World)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovu, chelnov, karnov, chelnovu, karnov_state, empty_init, ROT0, "Data East USA", "Chelnov - Atomic Runner (US)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovj, chelnov, karnov, chelnovj, karnov_state, empty_init, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovjbl, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Chelnov - Atomic Runner (Japan, bootleg with I8031, set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovjbla, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Chelnov - Atomic Runner (Japan, bootleg with I8031, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnov, 0, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 6)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnova, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 5)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnovj, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Karnov (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, karnovjbl, karnov, karnovjbl, karnovjbl, karnov_state, empty_init, ROT0, "bootleg (K. J. Corporation)", "Karnov (Japan, bootleg with NEC D8748HD)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, karnov_state, empty_init, ROT270, "Data East Corporation", "Wonder Planet (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnov, 0, karnov, chelnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Atomic Runner Chelnov (World)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovu, chelnov, karnov, chelnovu, karnov_state, empty_init, ROT0, "Data East USA", "Atomic Runner Chelnov (US)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovj, chelnov, karnov, chelnovj, karnov_state, empty_init, ROT0, "Data East Corporation", "Atomic Runner Chelnov (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovjbl, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Atomic Runner Chelnov (Japan, bootleg with I8031, set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, chelnovjbla, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Atomic Runner Chelnov (Japan, bootleg with I8031, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user