This commit is contained in:
couriersud 2015-01-23 19:54:59 +01:00
commit b828f37eef
15 changed files with 428 additions and 1008 deletions

View File

@ -110,8 +110,6 @@ Notes:
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
#include "sound/okim6295.h"
#include "sound/2413intf.h"
#include "machine/msm6242.h"
#include "machine/nvram.h"
#include "includes/dynax.h"
@ -153,8 +151,70 @@ class ddenlovr_state : public dynax_state
{
public:
ddenlovr_state(const machine_config &mconfig, device_type type, const char *tag)
: dynax_state(mconfig, type, tag)
{ }
: dynax_state(mconfig, type, tag),
m_dsw_sel16(*this, "dsw_sel16"),
m_protection1(*this, "protection1"),
m_protection2(*this, "protection2") { }
optional_shared_ptr<UINT16> m_dsw_sel16;
optional_shared_ptr<UINT16> m_protection1;
optional_shared_ptr<UINT16> m_protection2;
UINT8 * m_ddenlovr_pixmap[8];
/* blitter (TODO: merge with the dynax.h, where possible) */
int m_extra_layers;
int m_ddenlovr_dest_layer;
int m_ddenlovr_blit_flip;
int m_ddenlovr_blit_x;
int m_ddenlovr_blit_y;
int m_ddenlovr_blit_address;
int m_ddenlovr_blit_pen;
int m_ddenlovr_blit_pen_mode;
int m_ddenlovr_blitter_irq_flag;
int m_ddenlovr_blitter_irq_enable;
int m_ddenlovr_rect_width;
int m_ddenlovr_rect_height;
int m_ddenlovr_clip_width;
int m_ddenlovr_clip_height;
int m_ddenlovr_line_length;
int m_ddenlovr_clip_ctrl;
int m_ddenlovr_clip_x;
int m_ddenlovr_clip_y;
int m_ddenlovr_scroll[8*2];
int m_ddenlovr_priority;
int m_ddenlovr_priority2;
int m_ddenlovr_bgcolor;
int m_ddenlovr_bgcolor2;
int m_ddenlovr_layer_enable;
int m_ddenlovr_layer_enable2;
int m_ddenlovr_palette_base[8];
int m_ddenlovr_palette_mask[8];
int m_ddenlovr_transparency_pen[8];
int m_ddenlovr_transparency_mask[8];
int m_ddenlovr_blit_latch;
int m_ddenlovr_blit_pen_mask; // not implemented
int m_ddenlovr_blit_rom_bits; // usually 8, 16 in hanakanz
const int *m_ddenlovr_blit_commands;
int m_ddenlovr_blit_regs[2];
/* ddenlovr misc (TODO: merge with dynax.h, where possible) */
UINT8 m_palram[0x200];
int m_okibank;
UINT8 m_rongrong_blitter_busy_select;
UINT8 m_prot_val;
UINT16 m_prot_16;
UINT16 m_quiz365_protection[2];
UINT16 m_mmpanic_leds; /* A led for each of the 9 buttons */
UINT8 m_funkyfig_lockout;
UINT8 m_romdata[2];
int m_palette_index;
UINT8 m_hginga_rombank;
UINT8 m_mjflove_irq_cause;
UINT8 m_daimyojn_palette_sel;
DECLARE_MACHINE_START(ddenlovr);
DECLARE_MACHINE_RESET(ddenlovr);
@ -350,6 +410,20 @@ public:
DECLARE_VIDEO_START(htengoku);
DECLARE_WRITE8_MEMBER(htengoku_dsw_w);
DECLARE_READ8_MEMBER(htengoku_dsw_r);
DECLARE_WRITE8_MEMBER( quizchq_oki_bank_w );
DECLARE_WRITE16_MEMBER( ddenlovr_oki_bank_w );
DECLARE_WRITE16_MEMBER( quiz365_oki_bank1_w );
DECLARE_WRITE16_MEMBER( quiz365_oki_bank2_w );
DECLARE_WRITE8_MEMBER( ddenlovr_select_w );
DECLARE_READ8_MEMBER( quiz365_input_r );
DECLARE_WRITE16_MEMBER( nettoqc_oki_bank_w );
DECLARE_WRITE8_MEMBER( hanakanz_oki_bank_w );
DECLARE_WRITE8_MEMBER( mjchuuka_oki_bank_w );
DECLARE_READ8_MEMBER( hginga_dsw_r );
DECLARE_WRITE8_MEMBER( mjflove_okibank_w );
DECLARE_WRITE8_MEMBER( jongtei_okibank_w );
DECLARE_READ8_MEMBER( seljan2_dsw_r );
DECLARE_WRITE8_MEMBER( daimyojn_okibank_w );
void ddenlovr_flipscreen_w( UINT8 data );
void ddenlovr_blit_flip_w( UINT8 data );
@ -368,20 +442,6 @@ public:
void mmpanic_update_leds();
void mjchuuka_get_romdata();
UINT8 hgokou_player_r( int player );
DECLARE_WRITE8_MEMBER( quizchq_oki_bank_w );
DECLARE_WRITE16_MEMBER( ddenlovr_oki_bank_w );
DECLARE_WRITE16_MEMBER( quiz365_oki_bank1_w );
DECLARE_WRITE16_MEMBER( quiz365_oki_bank2_w );
DECLARE_WRITE8_MEMBER( ddenlovr_select_w );
DECLARE_READ8_MEMBER( quiz365_input_r );
DECLARE_WRITE16_MEMBER( nettoqc_oki_bank_w );
DECLARE_WRITE8_MEMBER( hanakanz_oki_bank_w );
DECLARE_WRITE8_MEMBER( mjchuuka_oki_bank_w );
DECLARE_READ8_MEMBER( hginga_dsw_r );
DECLARE_WRITE8_MEMBER( mjflove_okibank_w );
DECLARE_WRITE8_MEMBER( jongtei_okibank_w );
DECLARE_READ8_MEMBER( seljan2_dsw_r );
DECLARE_WRITE8_MEMBER( daimyojn_okibank_w );
};
VIDEO_START_MEMBER(ddenlovr_state,ddenlovr)
@ -1916,7 +1976,7 @@ static ADDRESS_MAP_START( quiz365_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0x300286, 0x300287) AM_READ(ddenlovr_gfxrom_r) // Video Chip
AM_RANGE(0x3002c0, 0x3002c1) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)// Sound
AM_RANGE(0x300300, 0x300303) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0x300300, 0x300303) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0x300340, 0x30035f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff)
AM_RANGE(0x300380, 0x300383) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0x300384, 0x300385) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff)
@ -1968,7 +2028,7 @@ static ADDRESS_MAP_START( ddenlovj_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0x300070, 0x300071) AM_READ(unk16_r) // ? must be 78 on startup (not necessary in ddlover)
AM_RANGE(0x300080, 0x300083) AM_WRITE(ddenlovr_blitter_w)
AM_RANGE(0x300086, 0x300087) AM_READ(ddenlovr_gfxrom_r) // Video Chip
AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0x300100, 0x30011f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff)
AM_RANGE(0x300140, 0x300143) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0x300180, 0x300181) AM_READ_PORT("P1")
@ -2035,7 +2095,7 @@ static ADDRESS_MAP_START( ddenlovrk_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters
AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) //
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff)
AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff)
@ -2073,7 +2133,7 @@ static ADDRESS_MAP_START( ddenlovr_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters
AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) //
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff)
AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff)
@ -2147,7 +2207,7 @@ static ADDRESS_MAP_START( nettoqc_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0x300070, 0x300071) AM_READ(unk16_r) // ? must be 78 on startup (not necessary in ddlover)
AM_RANGE(0x300080, 0x300083) AM_WRITE(ddenlovr_blitter_w)
AM_RANGE(0x300086, 0x300087) AM_READ(ddenlovr_gfxrom_r) // Video Chip
AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0x300100, 0x30011f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff)
AM_RANGE(0x300140, 0x300143) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0x300180, 0x300181) AM_READ_PORT("P1")
@ -2210,7 +2270,7 @@ static ADDRESS_MAP_START( ultrchmp_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters
AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) //
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff)
AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff)
@ -2266,7 +2326,7 @@ static ADDRESS_MAP_START( quizchq_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x22, 0x23) AM_READ(rongrong_input2_r)
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x60, 0x61) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x60, 0x61) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x80, 0x83) AM_WRITE(ddenlovr_palette_base_w)
AM_RANGE(0x84, 0x87) AM_WRITE(ddenlovr_palette_mask_w)
@ -2303,7 +2363,7 @@ static ADDRESS_MAP_START( rongrong_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x60, 0x61) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x60, 0x61) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x80, 0x83) AM_WRITE(ddenlovr_palette_base_w)
AM_RANGE(0x84, 0x87) AM_WRITE(ddenlovr_palette_mask_w)
@ -2457,7 +2517,7 @@ static ADDRESS_MAP_START( mmpanic_sound_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x02, 0x02) AM_READNOP // read just before port 00
AM_RANGE(0x04, 0x04) AM_NOP // read only once at the start
AM_RANGE(0x06, 0x06) AM_WRITENOP // almost always 1, sometimes 0
AM_RANGE(0x08, 0x09) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x08, 0x09) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x0c, 0x0c) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x0e, 0x0e) AM_DEVWRITE("aysnd", ay8910_device, address_w)
ADDRESS_MAP_END
@ -2740,7 +2800,7 @@ static ADDRESS_MAP_START( hanakanz_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x93, 0x93) AM_WRITE(hanakanz_coincounter_w)
AM_RANGE(0x94, 0x94) AM_WRITE(hanakanz_keyb_w)
AM_RANGE(0x96, 0x96) AM_READ(hanakanz_rand_r)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xe0, 0xef) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
ADDRESS_MAP_END
@ -2756,7 +2816,7 @@ static ADDRESS_MAP_START( hkagerou_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x80, 0x80) AM_WRITE(hanakanz_blitter_data_w)
AM_RANGE(0x81, 0x81) AM_WRITE(hanakanz_palette_w)
AM_RANGE(0x83, 0x84) AM_READ(hanakanz_gfxrom_r)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xb0, 0xb0) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb1, 0xb2) AM_READ(hanakanz_keyb_r)
AM_RANGE(0xb3, 0xb3) AM_WRITE(hanakanz_coincounter_w)
@ -2778,7 +2838,7 @@ static ADDRESS_MAP_START( kotbinyo_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x80, 0x80) AM_WRITE(hanakanz_blitter_data_w)
AM_RANGE(0x81, 0x81) AM_WRITE(hanakanz_palette_w)
AM_RANGE(0x83, 0x84) AM_READ(hanakanz_gfxrom_r)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xb0, 0xb0) AM_READ_PORT("SYSTEM")
// AM_RANGE(0xb1, 0xb2) AM_READ(hanakanz_keyb_r)
AM_RANGE(0xb1, 0xb1) AM_READ_PORT("KEYB0")
@ -2802,7 +2862,7 @@ static ADDRESS_MAP_START( kotbinsp_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x80, 0x80) AM_WRITE(hanakanz_blitter_data_w)
AM_RANGE(0x81, 0x81) AM_WRITE(hanakanz_palette_w)
AM_RANGE(0x83, 0x84) AM_READ(hanakanz_gfxrom_r)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x90, 0x90) AM_READ_PORT("SYSTEM")
// AM_RANGE(0x91, 0x91) AM_READ(hanakanz_keyb_r)
AM_RANGE(0x91, 0x91) AM_READ_PORT("KEYB0")
@ -2841,7 +2901,7 @@ static ADDRESS_MAP_START( mjreach1_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x94, 0x94) AM_READ_PORT("SYSTEM")
AM_RANGE(0x95, 0x96) AM_READ(hanakanz_keyb_r)
AM_RANGE(0x97, 0x97) AM_WRITE(hanakanz_coincounter_w)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xe0, 0xef) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
ADDRESS_MAP_END
@ -2969,7 +3029,7 @@ static ADDRESS_MAP_START( mjchuuka_portmap, AS_IO, 8, ddenlovr_state ) // 16
AM_RANGE(0x63, 0x63) AM_MIRROR(0xff00) AM_READ_PORT("DSW4")
AM_RANGE(0x64, 0x64) AM_MIRROR(0xff00) AM_READ_PORT("DSW5") // DSW 1-4 high bits
AM_RANGE(0x80, 0x80) AM_MIRROR(0xff00) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xa0, 0xa1) AM_MIRROR(0xff00) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_MIRROR(0xff00) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xc0, 0xcf) AM_MIRROR(0xff00) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
AM_RANGE(0xe0, 0xe1) AM_MIRROR(0xff00) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
ADDRESS_MAP_END
@ -3078,7 +3138,7 @@ static ADDRESS_MAP_START( mjmyster_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x22, 0x22) AM_READ(mjmyster_coins_r)
AM_RANGE(0x23, 0x23) AM_READ(mjmyster_keyb_r)
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x42, 0x43) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x42, 0x43) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x44, 0x44) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x46, 0x46) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x48, 0x48) AM_DEVWRITE("aysnd", ay8910_device, address_w)
@ -3243,7 +3303,7 @@ static ADDRESS_MAP_START( hginga_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r)
AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(mjmyster_rambank_w)
AM_RANGE(0x1e, 0x1e) AM_WRITE(hginga_rombank_w)
AM_RANGE(0x22, 0x23) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x22, 0x23) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x24, 0x24) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x26, 0x26) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x28, 0x28) AM_DEVWRITE("aysnd", ay8910_device, address_w)
@ -3366,7 +3426,7 @@ static ADDRESS_MAP_START( hgokou_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x61, 0x61) AM_WRITE(hgokou_input_w)
AM_RANGE(0x62, 0x62) AM_READ(hgokou_input_r)
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x82, 0x83) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x82, 0x83) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x84, 0x84) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x86, 0x86) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x88, 0x88) AM_DEVWRITE("aysnd", ay8910_device, address_w)
@ -3409,7 +3469,7 @@ static ADDRESS_MAP_START( hgokbang_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(mjmyster_rambank_w) // ? ack on RTC int
AM_RANGE(0x1e, 0x1e) AM_WRITE(hginga_rombank_w)
AM_RANGE(0x20, 0x20) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x22, 0x23) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x22, 0x23) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x24, 0x24) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x26, 0x26) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x28, 0x28) AM_DEVWRITE("aysnd", ay8910_device, address_w)
@ -3500,7 +3560,7 @@ static ADDRESS_MAP_START( hparadis_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x1c, 0x1c) AM_READ(hparadis_dsw_r)
AM_RANGE(0x1e, 0x1e) AM_WRITE(hparadis_select_w)
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x60, 0x61) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x60, 0x61) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x80, 0x83) AM_WRITE(ddenlovr_palette_base_w)
AM_RANGE(0x84, 0x87) AM_WRITE(ddenlovr_palette_mask_w)
AM_RANGE(0x88, 0x8b) AM_WRITE(ddenlovr_transparency_pen_w)
@ -3546,7 +3606,7 @@ static ADDRESS_MAP_START( mjmywrld_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x22, 0x22) AM_READ(mjmywrld_coins_r)
AM_RANGE(0x23, 0x23) AM_READ(mjmyster_keyb_r)
AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x42, 0x43) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x42, 0x43) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x44, 0x44) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x46, 0x46) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x48, 0x48) AM_DEVWRITE("aysnd", ay8910_device, address_w)
@ -3646,7 +3706,7 @@ static ADDRESS_MAP_START( akamaru_map, AS_PROGRAM, 16, ddenlovr_state )
AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters
AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) //
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write, 0x00ff)
AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff)
@ -3737,7 +3797,7 @@ static ADDRESS_MAP_START( mjflove_portmap, AS_IO, 8, ddenlovr_state ) // 16 bit
AM_RANGE(0x0100, 0x0100) AM_READ_PORT("DSW1")
AM_RANGE(0x0181, 0x0181) AM_WRITENOP // ? int. enable
AM_RANGE(0x0184, 0x0184) AM_WRITE(mjflove_coincounter_w)
AM_RANGE(0x0200, 0x0201) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x0200, 0x0201) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x0280, 0x028f) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
AM_RANGE(0x0300, 0x0301) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
AM_RANGE(0x0380, 0x0380) AM_DEVREADWRITE("oki", okim6295_device, read, write)
@ -3778,7 +3838,7 @@ static ADDRESS_MAP_START( jongtei_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x60, 0x60) AM_WRITE(hanakanz_blitter_data_w)
AM_RANGE(0x61, 0x61) AM_WRITE(hanakanz_palette_w)
AM_RANGE(0x63, 0x64) AM_READ(hanakanz_gfxrom_r)
AM_RANGE(0x80, 0x81) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x80, 0x81) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xa0, 0xa0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xc0, 0xcf) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
ADDRESS_MAP_END
@ -3841,7 +3901,7 @@ WRITE8_MEMBER(ddenlovr_state::sryudens_rambank_w)
static ADDRESS_MAP_START( sryudens_portmap, AS_IO, 8, ddenlovr_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x02, 0x03) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x02, 0x03) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x04, 0x05) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(sryudens_rambank_w) // ? ack on RTC int
AM_RANGE(0x1e, 0x1e) AM_WRITE(mjflove_rombank_w)
@ -3928,7 +3988,7 @@ static ADDRESS_MAP_START( janshinp_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x70, 0x70) AM_WRITE(quizchq_oki_bank_w)
AM_RANGE(0x80, 0x80) AM_RAM
AM_RANGE(0x90, 0x90) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x92, 0x93) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x92, 0x93) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x94, 0x95) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
ADDRESS_MAP_END
@ -4000,7 +4060,7 @@ static ADDRESS_MAP_START( seljan2_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x38, 0x38) AM_READNOP // ? ack or watchdog
AM_RANGE(0x40, 0x41) AM_WRITE(mjflove_blitter_w)
AM_RANGE(0x43, 0x43) AM_READ(rongrong_gfxrom_r)
AM_RANGE(0x50, 0x51) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0x50, 0x51) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0x54, 0x54) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0x58, 0x58) AM_DEVWRITE("aysnd", ay8910_device, address_w)
AM_RANGE(0x5c, 0x5c) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w) // dsw
@ -4154,7 +4214,7 @@ static ADDRESS_MAP_START( htengoku_io_map, AS_IO, 8, ddenlovr_state )
AM_RANGE( 0x40, 0x40 ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // AY8910
AM_RANGE( 0x42, 0x42 ) AM_DEVREAD("aysnd", ay8910_device, data_r) //
AM_RANGE( 0x44, 0x44 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) //
AM_RANGE( 0x46, 0x47 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x46, 0x47 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x80, 0x8f ) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
AM_RANGE( 0xa0, 0xa3 ) AM_WRITE(ddenlovr_palette_base_w) // ddenlovr mixer chip
AM_RANGE( 0xa4, 0xa7 ) AM_WRITE(ddenlovr_palette_mask_w)
@ -4226,7 +4286,7 @@ static MACHINE_CONFIG_START( htengoku, ddenlovr_state )
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ddenlovr_state, htengoku_dsw_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2413, 3579545)
MCFG_SOUND_ADD("ym2413", YM2413, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* devices */
@ -4341,7 +4401,7 @@ static ADDRESS_MAP_START( daimyojn_portmap, AS_IO, 8, ddenlovr_state )
AM_RANGE(0x42, 0x44) AM_READ(hanakanz_gfxrom_r)
AM_RANGE(0x8a, 0x8b) AM_READ(daimyojn_year_hack_r) // ?
AM_RANGE(0x80, 0x8f) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write)
AM_RANGE(0xa2, 0xa2) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xa8, 0xa8) AM_READ_PORT("SYSTEM")
AM_RANGE(0xaa, 0xaa) AM_READ(daimyojn_keyb1_r)
@ -9301,8 +9361,6 @@ MACHINE_START_MEMBER(ddenlovr_state,ddenlovr)
save_item(NAME(m_mjflove_irq_cause));
save_item(NAME(m_daimyojn_palette_sel));
save_item(NAME(m_palram));
save_item(NAME(m_irq_count));
}
MACHINE_RESET_MEMBER(ddenlovr_state,ddenlovr)
@ -9323,7 +9381,6 @@ MACHINE_RESET_MEMBER(ddenlovr_state,ddenlovr)
m_hginga_rombank = 0;
m_mjflove_irq_cause = 0;
m_daimyojn_palette_sel = 0;
m_irq_count = 0;
m_quiz365_protection[0] = 0;
m_quiz365_protection[1] = 0;
@ -9435,7 +9492,7 @@ static MACHINE_CONFIG_START( ddenlovr, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 16) // or /8 ?
@ -9553,7 +9610,7 @@ static MACHINE_CONFIG_START( quizchq, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz/8) // 3.579545Mhz, verified
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz/8) // 3.579545Mhz, verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.50)
MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz/28, OKIM6295_PIN7_HIGH) // clock frequency verified 1.022MHz, pin 7 verified high
@ -9637,7 +9694,7 @@ static MACHINE_CONFIG_START( mmpanic, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, 3579545)
MCFG_SOUND_ADD("ym2413", YM2413, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ADD("aysnd", AY8910, 3579545)
@ -9714,7 +9771,7 @@ static MACHINE_CONFIG_START( hanakanz, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, 3579545)
MCFG_SOUND_ADD("ym2413", YM2413, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_OKIM6295_ADD("oki", 1022720, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
@ -9760,7 +9817,7 @@ static MACHINE_CONFIG_START( kotbinyo, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_37516MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_37516MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_OKIM6295_ADD("oki", XTAL_28_37516MHz / 28, OKIM6295_PIN7_HIGH)
@ -10129,7 +10186,7 @@ static MACHINE_CONFIG_START( jongtei, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz / 28, OKIM6295_PIN7_HIGH)
@ -10172,7 +10229,7 @@ static MACHINE_CONFIG_START( sryudens, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8)
@ -10219,7 +10276,7 @@ static MACHINE_CONFIG_START( janshinp, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8)
@ -10286,7 +10343,7 @@ static MACHINE_CONFIG_START( seljan2, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8)
@ -10336,7 +10393,7 @@ static MACHINE_CONFIG_START( daimyojn, ddenlovr_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz / 28, OKIM6295_PIN7_HIGH)

View File

@ -302,6 +302,59 @@ Donkey Kong Junior Notes
------------------------------------------------
Donkey Kong Notes
=================
Nintendo Service Department Bulletin # TKG-02 12-11-81
GAME: Donkey Kong
SUBJECT: Speed-up Kit #1
TO prevent extremely long play times, we are making available
a speed-up kit. This kit prevents players from waiting on top
of ladders, on screen #1, while the barrels roll across
instead of coming donw on top of him. Whit this kit, barrels
will roll on top of the player on a ladder 70 to 80 percent of
the time.
Machines above serial #30,000 will have this kit installed at
the factory, and all TKG4 board sets will come with this kit.
To install this kit in a four-board set, follow these
instructions:
1) Remove P.C. Boards from game, leaving them
attached to P.C. Board bracket.
2) Using a pair of needle-nose pliers, separate the
sound P.C. Board fromt he CPU P.C. Board, exposing
the entire surface of the CPU Board.
3) Remove the EPROMS's at location 5F, 5A, 5H and 5K
from the CPU Board. (Note 5A should read 5G - MSH)
4) Install the speed-up kit EPROM's in the corres-
ponding locations.
5) Reconnect the sound P.C. Board to the CPU P.C.
Board and mount the P.C. Boards in the game.
--------------------------------------------------------------
That kit included the following 4 EPROM's
USA (c) 1981 Nintendo of America set
------------------------------------
Filename Label Type Loc/PCB *Label *Loc/PCB CSum
--------- ---------- ------ ------- ---------- -------- ----
2532.5K TKG4-C-5At 2532 5A(CPU) TKG3-C-5K 5K(CPU) A0F0
2532.5H TKG4-C-5Bt 2532 5B(CPU) TKG3-C-5H 5H(CPU) B2BC
2532.5G TKG4-C-5Ct 2532 5C(CPU) TKG3-C-5G 5G(CPU) 73BA
2532.5F TKG4-C-5Et 2532 5E(CPU) TKG3-C-5F 5F(CPU) AA97
Not only did the eprom fix the ladder bug, but it also changed
the copyright screen to read "(C)1981 Nintendo of America".
D2K Jumpman returns Notes
=========================
@ -313,16 +366,16 @@ Donkey Kong Junior Notes
6800 and E800.
Donkey Kong "Hard" Kit
======================
Donkey Kong "Hard" Kit
======================
A yet "unconfirmed original" rom replacement kit which is a replacement for
TKG-03 and -04 boards and greatly increases the speed and amount of fireballs
showing on all levels. Such behavior can be seen easily on the Rivet Board,
where most of the fireballs have appeared even before removing the first rivet.
A yet "unconfirmed original" rom replacement kit which is a replacement for
TKG-03 and -04 boards and greatly increases the speed and amount of fireballs
showing on all levels. Such behavior can be seen easily on the Rivet Board,
where most of the fireballs have appeared even before removing the first rivet.
Hopefully confirmation and information will come along later which confirms
this is a legitimate Nintendo Kit.
Hopefully confirmation and information will come along later which confirms
this is a legitimate Nintendo Kit.
***************************************************************************/
@ -1894,7 +1947,7 @@ ROM_START( radarscp1 )
ROM_LOAD( "trs01v1d.bin", 0x0300, 0x0100, BAD_DUMP CRC(1b828315) SHA1(00c9f8c5ae86b68d38c66f9071b5f1ef421c1005) ) /* character color codes on a per-column basis */
ROM_END
ROM_START( dkong )
ROM_START( dkong ) /* Confirmed TKG-04 Upgrade as mentioned in Nintendo Service Department Bulletin # TKG-02 12-11-81 */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "c_5et_g.bin", 0x0000, 0x1000, CRC(ba70b88b) SHA1(d76ebecfea1af098d843ee7e578e480cd658ac1a) )
ROM_LOAD( "c_5ct_g.bin", 0x1000, 0x1000, CRC(5ec461ec) SHA1(acb11a8fbdbb3ab46068385fe465f681e3c824bd) )
@ -2254,7 +2307,7 @@ ROM_START( dkongjnrj )
ROM_LOAD( "v-2n.bpr", 0x0200, 0x0100, CRC(dbf185bf) SHA1(2697a991a4afdf079dd0b7e732f71c7618f43b70) ) /* character color codes on a per-column basis */
ROM_END
ROM_START( dkongjre )
ROM_START( dkongjre ) /* Confirmed E-Kit set mentioned in Nintendo Service Department Bulletin # DJR-03 (02-23-83) */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "djr1-c.5b", 0x0000, 0x1000, CRC(ffe9e1a5) SHA1(715dc79d85169b4c1faf43458592e69b434afefd) )
ROM_CONTINUE( 0x3000, 0x1000 )
@ -2291,7 +2344,7 @@ ROM_START( dkongjrpb )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "dkjr1-c.5b-p", 0x0000, 0x1000, CRC(8d99b3e0) SHA1(311a9f353e62d9d07c678e45baa2efec575a8f3b) ) // does not match SUM16 of bulletin (see notes), definitely not from Nintendo
ROM_CONTINUE( 0x3000, 0x1000 )
ROM_LOAD( "dkjr1-c.5c-p", 0x2000, 0x0800, CRC(b92d258c) SHA1(793483e249d08cbbbefe06d3ddc4c2eda5428ee8) ) // "
ROM_LOAD( "dkjr1-c.5c-p", 0x2000, 0x0800, CRC(b92d258c) SHA1(793483e249d08cbbbefe06d3ddc4c2eda5428ee8) )
ROM_CONTINUE( 0x4800, 0x0800 )
ROM_CONTINUE( 0x1000, 0x0800 )
ROM_CONTINUE( 0x5800, 0x0800 )

View File

@ -79,8 +79,6 @@ TODO:
#include "sound/ay8910.h"
#include "sound/2203intf.h"
#include "sound/3812intf.h"
#include "sound/msm5205.h"
#include "sound/2413intf.h"
#include "machine/nvram.h"
#include "rendlay.h"
@ -534,7 +532,7 @@ static ADDRESS_MAP_START( hanamai_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x74, 0x74 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
AM_RANGE( 0x76, 0x76 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
AM_RANGE( 0x77, 0x77 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) // 2 x DSW
AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW
AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) // AY8910
// AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP // CRT Controller
// AM_RANGE( 0x7d, 0x7d ) AM_WRITENOP //
@ -556,7 +554,7 @@ static ADDRESS_MAP_START( hnoridur_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW2") // DSW3
AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x36, 0x36 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910, DSW1
AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910
AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
@ -640,7 +638,7 @@ static ADDRESS_MAP_START( hjingi_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x36, 0x36 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910, DSW1
AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910
@ -780,7 +778,7 @@ static ADDRESS_MAP_START( yarunara_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x11, 0x17 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
AM_RANGE( 0x20, 0x20 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x22, 0x22 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x24, 0x25 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x24, 0x25 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x28, 0x28 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910
AM_RANGE( 0x2a, 0x2a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
AM_RANGE( 0x48, 0x48 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
@ -819,7 +817,7 @@ static ADDRESS_MAP_START( mcnpshnt_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW1") // DSW3
AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910
AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
@ -847,7 +845,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sprtmtch_io_map, AS_IO, 8, dynax_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
AM_RANGE( 0x10, 0x11 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) // 2 x DSW
AM_RANGE( 0x10, 0x11 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW
// AM_RANGE( 0x12, 0x12 ) AM_WRITENOP // CRT Controller
// AM_RANGE( 0x13, 0x13 ) AM_WRITENOP // CRT Controller
AM_RANGE( 0x20, 0x20 ) AM_READ_PORT("P1") // P1
@ -893,7 +891,7 @@ static ADDRESS_MAP_START( mjfriday_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x63, 0x63 ) AM_READ(hanamai_keyboard_0_r) // P1
AM_RANGE( 0x64, 0x64 ) AM_READ_PORT("DSW0") // DSW
AM_RANGE( 0x67, 0x67 ) AM_READ_PORT("DSW1") // DSW
AM_RANGE( 0x70, 0x71 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x70, 0x71 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
// AM_RANGE( 0x80, 0x80 ) AM_WRITENOP // IRQ ack?
ADDRESS_MAP_END
@ -902,7 +900,7 @@ static ADDRESS_MAP_START( nanajign_io_map, AS_IO, 8, dynax_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE( 0x00, 0x00 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x02, 0x02 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910
AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
AM_RANGE( 0x10, 0x10 ) AM_WRITE(hanamai_keyboard_w) // keyboard row select
@ -1024,7 +1022,7 @@ static ADDRESS_MAP_START( jantouki_sound_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x10, 0x10 ) AM_WRITE(jantouki_sound_vblank_ack_w) // VBlank IRQ Ack
AM_RANGE( 0x21, 0x21 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910
AM_RANGE( 0x22, 0x23 ) AM_DEVWRITE("aysnd", ay8910_device, data_address_w) //
AM_RANGE( 0x28, 0x29 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) //
AM_RANGE( 0x28, 0x29 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) //
AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x40, 0x40 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x50, 0x50 ) AM_READ(jantouki_soundlatch_status_r) // Soundlatch status
@ -1060,7 +1058,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE( 0x00, 0x00 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
AM_RANGE( 0x02, 0x02 ) AM_WRITE(adpcm_data_w) // MSM5205 data
AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910
AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
AM_RANGE( 0x11, 0x12 ) AM_WRITE(mjelctrn_blitter_ack_w) //?
@ -1339,7 +1337,7 @@ static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
AM_RANGE( 0x10000, 0x10000 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910
AM_RANGE( 0x10008, 0x10008 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) //
AM_RANGE( 0x10010, 0x10010 ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
AM_RANGE( 0x10020, 0x10021 ) AM_DEVWRITE("ymsnd", ym2413_device, write) //
AM_RANGE( 0x10020, 0x10021 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
AM_RANGE( 0x10040, 0x10040 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
AM_RANGE( 0x10044, 0x10044 ) AM_WRITE(tenkai_blit_dest_w) // Destination Layer
AM_RANGE( 0x10048, 0x10048 ) AM_WRITE(tenkai_blit_palette23_w) // Layers Palettes
@ -1481,8 +1479,8 @@ WRITE8_MEMBER(dynax_state::gekisha_8000_w)
case 0x8050: // CRT controller
case 0x8051: return;
case 0x8070: downcast<ym2413_device *>(m_ymsnd)->register_port_w(space, 0, data); return;
case 0x8071: downcast<ym2413_device *>(m_ymsnd)->data_port_w(space, 0, data); return;
case 0x8070: m_ym2413->register_port_w(space, 0, data); return;
case 0x8071: m_ym2413->data_port_w(space, 0, data); return;
case 0x8060: m_keyb = data; return;
@ -3967,8 +3965,6 @@ INPUT_PORTS_END
MACHINE_START_MEMBER(dynax_state,dynax)
{
m_ymsnd = machine().device("ymsnd");
save_item(NAME(m_sound_irq));
save_item(NAME(m_vblank_irq));
save_item(NAME(m_blitter_irq));
@ -4093,7 +4089,7 @@ static MACHINE_CONFIG_START( hanamai, dynax_state )
MCFG_SOUND_ADD("aysnd", AY8910, 22000000 / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2203, 22000000 / 8)
MCFG_SOUND_ADD("ym2203", YM2203, 22000000 / 8)
MCFG_YM2203_IRQ_HANDLER(WRITELINE(dynax_state, sprtmtch_sound_callback))
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW1"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW0"))
@ -4147,7 +4143,7 @@ static MACHINE_CONFIG_START( hnoridur, dynax_state )
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2413, 3579545)
MCFG_SOUND_ADD("ym2413", YM2413, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ADD("msm", MSM5205, 384000)
@ -4194,7 +4190,7 @@ static MACHINE_CONFIG_START( hjingi, dynax_state )
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz )
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_3_579545MHz )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz )
@ -4238,7 +4234,7 @@ static MACHINE_CONFIG_START( sprtmtch, dynax_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2203, 22000000 / 8)
MCFG_SOUND_ADD("ym2203", YM2203, 22000000 / 8)
MCFG_YM2203_IRQ_HANDLER(WRITELINE(dynax_state, sprtmtch_sound_callback))
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1"))
@ -4283,7 +4279,7 @@ static MACHINE_CONFIG_START( mjfriday, dynax_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, 24000000/6)
MCFG_SOUND_ADD("ym2413", YM2413, 24000000/6)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@ -4382,10 +4378,7 @@ MACHINE_START_MEMBER(dynax_state,jantouki)
membank("bank1")->configure_entries(0, 0x10, &MAIN[0x8000], 0x8000);
membank("bank2")->configure_entries(0, 12, &SOUND[0x8000], 0x8000);
m_top_scr = machine().device("top");
m_bot_scr = machine().device("bottom");
MACHINE_START_CALL_MEMBER(dynax);
}
@ -4437,7 +4430,7 @@ static MACHINE_CONFIG_START( jantouki, dynax_state )
MCFG_SOUND_ADD("aysnd", AY8910, 22000000 / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2203, 22000000 / 8)
MCFG_SOUND_ADD("ym2203", YM2203, 22000000 / 8)
MCFG_YM2203_IRQ_HANDLER(WRITELINE(dynax_state, jantouki_sound_callback))
MCFG_SOUND_ROUTE(0, "mono", 0.20)
MCFG_SOUND_ROUTE(1, "mono", 0.20)
@ -4616,7 +4609,7 @@ static MACHINE_CONFIG_START( tenkai, dynax_state )
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(dynax_state, tenkai_dswsel_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2413, 3579545)
MCFG_SOUND_ADD("ym2413", YM2413, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* devices */
@ -4687,7 +4680,7 @@ static MACHINE_CONFIG_START( gekisha, dynax_state )
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(dynax_state, tenkai_dswsel_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_24MHz / 8) // ?
MCFG_SOUND_ADD("ym2413", YM2413, XTAL_24MHz / 8) // ?
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END

View File

@ -664,6 +664,12 @@ ALL VROM ROMs are 16M MASK
#include "machine/nvram.h"
#include "includes/model3.h"
//#define DECRYPT_ANALYSIS_HACKS
#ifdef DECRYPT_ANALYSIS_HACKS
int readcount = 0;
int segcount = 0;
#endif
void model3_state::update_irq_state()
{
@ -1673,34 +1679,7 @@ WRITE64_MEMBER(model3_state::network_w)
}
static const UINT16 vs299_prot_data[] =
{
0xc800, 0x4a20, 0x5041, 0x4e41, 0x4920, 0x4154, 0x594c, 0x4220,
0x4152, 0x4953, 0x204c, 0x5241, 0x4547, 0x544e, 0x4e49, 0x2041,
0x4547, 0x4d52, 0x4e41, 0x2059, 0x4e45, 0x4c47, 0x4e41, 0x2044,
0x454e, 0x4854, 0x5245, 0x414c, 0x444e, 0x2053, 0x5246, 0x4e41,
0x4543, 0x4320, 0x4c4f, 0x4d4f, 0x4942, 0x2041, 0x4150, 0x4152,
0x5547, 0x5941, 0x4220, 0x4c55, 0x4147, 0x4952, 0x2041, 0x5053,
0x4941, 0x204e, 0x5243, 0x414f, 0x4954, 0x2041, 0x4542, 0x474c,
0x5549, 0x204d, 0x494e, 0x4547, 0x4952, 0x2041, 0x4153, 0x4455,
0x2049, 0x4f4b, 0x4552, 0x2041, 0x4544, 0x4d4e, 0x5241, 0x204b,
0x4f52, 0x414d, 0x494e, 0x2041, 0x4353, 0x544f, 0x414c, 0x444e,
0x5520, 0x4153, 0x5320, 0x554f, 0x4854, 0x4641, 0x4952, 0x4143,
0x4d20, 0x5845, 0x4349, 0x204f, 0x5559, 0x4f47, 0x4c53, 0x5641,
0x4149, 0x4620, 0x5f43, 0x4553, 0x4147
};
static const UINT16 swt_prot_data[] =
{
0xffff,
0x3d3d, 0x3d3d, 0x203d, 0x5453, 0x5241, 0x5720, 0x5241, 0x2053,
0x3d3d, 0x3d3d, 0x0a3d, 0x6f43, 0x7970, 0x6952, 0x6867, 0x2074,
0x4553, 0x4147, 0x4520, 0x746e, 0x7265, 0x7270, 0x7369, 0x7365,
0x202c, 0x744c, 0x2e64, 0x410a, 0x756d, 0x6573, 0x656d, 0x746e,
0x5220, 0x4426, 0x4420, 0x7065, 0x2e74, 0x2320, 0x3231, 0x4b0a,
0x7461, 0x7573, 0x6179, 0x7573, 0x4120, 0x646e, 0x206f, 0x2026,
0x614b, 0x6f79, 0x6f6b, 0x5920, 0x6d61, 0x6d61, 0x746f, 0x0a6f,
};
static const UINT16 fvipers2_prot_data[] =
{
@ -1737,22 +1716,8 @@ static const UINT16 eca_prot_data[] =
0x7470, 0x202e, 0x3123, 0x660a, 0x726f, 0x7420, 0x7365, 0x0a74,
};
static const UINT16 oceanhun_prot_data[] =
{
0x0000, // dummy read
0x3d3d, 0x203d, 0x434f, 0x4145, 0x204e, 0x5548, 0x544e, 0x5245,
0x3d20, 0x3d3d, 0x430a, 0x706f, 0x5279, 0x6769, 0x7468, 0x5320,
0x4745, 0x2041, 0x6e45, 0x6574, 0x7072, 0x6972, 0x6573, 0x2c73,
0x4c20, 0x6474, 0x0a2e, 0x6d41, 0x7375, 0x6d65, 0x6e65, 0x2074,
0x2652, 0x2044, 0x6544, 0x7470, 0x202e, 0x3123, 0x4b0a, 0x7a61,
0x6e75, 0x7261, 0x2069, 0x7354, 0x6b75, 0x6d61, 0x746f, 0x206f,
0x6553, 0x7463, 0x6f69, 0x206e, 0x614d, 0x616e, 0x6567, 0x0a72
};
/*
dirtdvls: first 2 words read are discarded, then every other word
is written to char RAM starting at f1013400 (in between words are
discarded).
*/
READ64_MEMBER(model3_state::model3_security_r)
{
@ -1763,22 +1728,12 @@ READ64_MEMBER(model3_state::model3_security_r)
case 0x00 / 8: retvalue = 0; break; /* status */
case 0x1c/8: /* security board data read */
{
if (core_stricmp(machine().system().name, "vs299") == 0 ||
core_stricmp(machine().system().name, "vs2v991") == 0)
{
retvalue = (UINT64)vs299_prot_data[m_prot_data_ptr++] << 48;
}
else if (core_stricmp(machine().system().name, "swtrilgy") == 0 ||
core_stricmp(machine().system().name, "swtrilgya") == 0)
{
UINT64 data = (UINT64)swt_prot_data[m_prot_data_ptr++] << 16;
if (m_prot_data_ptr > 0x38)
{
m_prot_data_ptr = 0;
}
retvalue = data;
}
else if (core_stricmp(machine().system().name, "fvipers2") == 0)
#ifdef DECRYPT_ANALYSIS_HACKS
readcount += 2;
printf("model3_security_r offset %08x : %08x%08x (%08x%08x) count %08x\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff), readcount);
#endif
if (core_stricmp(machine().system().name, "fvipers2") == 0)
{
UINT64 data = (UINT64)fvipers2_prot_data[m_prot_data_ptr++] << 16;
if (m_prot_data_ptr >= 0x41)
@ -1807,15 +1762,6 @@ READ64_MEMBER(model3_state::model3_security_r)
}
retvalue = data;
}
else if (core_stricmp(machine().system().name, "oceanhun") == 0)
{
UINT64 data = (UINT64)oceanhun_prot_data[m_prot_data_ptr++] << 16;
if (m_prot_data_ptr >= 58)
{
m_prot_data_ptr = 0;
}
retvalue = data;
}
else
{
retvalue = 0;
@ -1823,11 +1769,57 @@ READ64_MEMBER(model3_state::model3_security_r)
break;
}
}
printf("model3_security_r offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff));
return retvalue;
}
WRITE64_MEMBER(model3_state::model3_security_w)
{
if (offset == 0x10 / 8)
{
if (data != 0)
printf("model3_security_w address isn't 0?\n");
first_read = 1;
printf("setting base %08x%08x\n", (UINT32)(data >> 32), (UINT32)(data & 0xffffffff));
}
else if (offset == 0x18 / 8)
{
UINT16 subkey = data >> (32 + 16);
subkey = ((subkey & 0xff00) >> 8) | ((subkey & 0x00ff) << 8); // endian swap the sub-key for this hardware
printf("model3_5881prot_w setting subkey %04x\n", subkey);
#ifdef DECRYPT_ANALYSIS_HACKS // dump out a copy of protection RAM
FILE* fp2;
char filename[256];
sprintf(filename,"xxxencrypted_%s_part%d", machine().system().name, segcount);
segcount++;
readcount = 0;
fp2 = fopen(filename, "w+b");
{
for (int i = 0; i < 0x8000; i++)
{
UINT16 dat = m_maincpu->space().read_word((0xf0180000 + 4 * i));
UINT8* dst2 = (UINT8*)&dat;
fwrite(&dst2[1], 1, 1, fp2);
fwrite(&dst2[0], 1, 1, fp2);
}
}
fclose(fp2);
#endif
}
else
{
printf("model3_5881prot_w offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(data >> 32), (UINT32)(data & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff));
}
}
READ64_MEMBER(model3_state::model3_5881prot_r)
{
UINT64 retvalue = U64(0xffffffffffffffff);
@ -1889,9 +1881,6 @@ WRITE64_MEMBER(model3_state::model3_5881prot_w)
{
printf("model3_5881prot_w offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(data >> 32), (UINT32)(data & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff));
}
}
WRITE64_MEMBER(model3_state::daytona2_rombank_w)
@ -5586,7 +5575,7 @@ static MACHINE_CONFIG_DERIVED(scud, model3_15)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( model3_20, model3_state )
static MACHINE_CONFIG_START(model3_20, model3_state)
MCFG_CPU_ADD("maincpu", PPC603R, 166000000)
MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
MCFG_CPU_PROGRAM_MAP(model3_mem)
@ -5595,8 +5584,8 @@ static MACHINE_CONFIG_START( model3_20, model3_state )
MCFG_CPU_ADD("audiocpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(model3_snd)
MCFG_MACHINE_START_OVERRIDE(model3_state,model3_20)
MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_20)
MCFG_MACHINE_START_OVERRIDE(model3_state, model3_20)
MCFG_MACHINE_RESET_OVERRIDE(model3_state, model3_20)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_NVRAM_ADD_1FILL("backup")
@ -5623,7 +5612,12 @@ static MACHINE_CONFIG_START( model3_20, model3_state )
MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( model3_21, model3_state )
static MACHINE_CONFIG_DERIVED(model3_20_5881, model3_20)
MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0)
MCFG_SET_READ_CALLBACK(model3_state, crypt_read_callback)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START(model3_21, model3_state)
MCFG_CPU_ADD("maincpu", PPC603R, 166000000)
MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
MCFG_CPU_PROGRAM_MAP(model3_mem)
@ -5632,8 +5626,8 @@ static MACHINE_CONFIG_START( model3_21, model3_state )
MCFG_CPU_ADD("audiocpu", M68000, 12000000)
MCFG_CPU_PROGRAM_MAP(model3_snd)
MCFG_MACHINE_START_OVERRIDE(model3_state,model3_21)
MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_21)
MCFG_MACHINE_START_OVERRIDE(model3_state, model3_21)
MCFG_MACHINE_RESET_OVERRIDE(model3_state, model3_21)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_NVRAM_ADD_1FILL("backup")
@ -5660,6 +5654,7 @@ static MACHINE_CONFIG_START( model3_21, model3_state )
MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
MACHINE_CONFIG_END
UINT16 model3_state::crypt_read_callback(UINT32 addr)
{
UINT16 dat = 0;
@ -5670,6 +5665,7 @@ UINT16 model3_state::crypt_read_callback(UINT32 addr)
// dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8);
// printf("reading %04x\n", dat);
return dat;
}
@ -5724,7 +5720,7 @@ DRIVER_INIT_MEMBER(model3_state, genprot)
}
else
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, read64_delegate(FUNC(model3_state::model3_security_r), this) );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, read64_delegate(FUNC(model3_state::model3_security_r), this), write64_delegate(FUNC(model3_state::model3_security_w), this) );
}
}
@ -5891,27 +5887,16 @@ DRIVER_INIT_MEMBER(model3_state,vs2)
DRIVER_INIT_MEMBER(model3_state,vs298)
{
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,vs2v991)
{
DRIVER_INIT_CALL(model3_20);
}
DRIVER_INIT_MEMBER(model3_state,vs299b)
{
DRIVER_INIT_CALL(model3_20);
}
DRIVER_INIT_MEMBER(model3_state,vs299a)
{
DRIVER_INIT_CALL(model3_20);
}
DRIVER_INIT_MEMBER(model3_state,vs299)
{
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,harley)
@ -5969,6 +5954,7 @@ DRIVER_INIT_MEMBER(model3_state,swtrilga)
{
//UINT32 *rom = (UINT32*)memregion("user1")->base();
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
//rom[(0xf6dd0^4)/4] = 0x60000000;
}
@ -5978,6 +5964,7 @@ DRIVER_INIT_MEMBER(model3_state,von2)
m_step20_with_old_real3d = true;
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,dirtdvls)
@ -5985,6 +5972,7 @@ DRIVER_INIT_MEMBER(model3_state,dirtdvls)
m_step20_with_old_real3d = true;
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,daytona2)
@ -5999,6 +5987,8 @@ DRIVER_INIT_MEMBER(model3_state,daytona2)
rom[(0x6063c4^4)/4] = 0x60000000;
rom[(0x616434^4)/4] = 0x60000000;
rom[(0x69f4e4^4)/4] = 0x60000000;
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,dayto2pe)
@ -6014,6 +6004,8 @@ DRIVER_INIT_MEMBER(model3_state,dayto2pe)
rom[(0x618b28^4)/4] = 0x60000000; // jump to encrypted code
rom[(0x64ca34^4)/4] = 0x60000000; // dec
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,spikeout)
@ -6023,6 +6015,7 @@ DRIVER_INIT_MEMBER(model3_state,spikeout)
rom[(0x6059cc^4)/4] = 0x60000000;
rom[(0x6059ec^4)/4] = 0x60000000;
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,spikeofe)
@ -6032,11 +6025,13 @@ DRIVER_INIT_MEMBER(model3_state,spikeofe)
rom[(0x6059cc^4)/4] = 0x60000000;
rom[(0x6059ec^4)/4] = 0x60000000;
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,eca)
{
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,skichamp)
@ -6058,6 +6053,8 @@ DRIVER_INIT_MEMBER(model3_state,oceanhun)
DRIVER_INIT_CALL(model3_20);
rom[(0x57995c^4)/4] = 0x60000000; // decrementer
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,magtruck)
@ -6065,6 +6062,7 @@ DRIVER_INIT_MEMBER(model3_state,magtruck)
m_step20_with_old_real3d = true;
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
DRIVER_INIT_MEMBER(model3_state,lamachin)
@ -6072,6 +6070,7 @@ DRIVER_INIT_MEMBER(model3_state,lamachin)
m_step20_with_old_real3d = true;
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
}
@ -6096,33 +6095,33 @@ GAME( 1997, lemans24, 0, model3_15, scud, model3_state, lemans24, ROT0
GAME( 1998, vs29815, vs298, model3_15, model3, model3_state, vs29815, ROT0, "Sega", "Virtua Striker 2 '98 (Step 1.5)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
/* Model 3 Step 2.0 */
GAME( 1997, vs2, 0, model3_20, model3, model3_state, vs2, ROT0, "Sega", "Virtua Striker 2 (Step 2.0)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harley, 0, model3_20, harley, model3_state, harley, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harleya, harley, model3_20, harley, model3_state, harleya, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, lamachin, 0, model3_20, model3, model3_state, lamachin, ROT0, "Sega", "L.A. Machineguns", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, oceanhun, 0, model3_20, model3, model3_state, oceanhun, ROT0, "Sega", "The Ocean Hunter", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, skichamp, 0, model3_20, skichamp, model3_state, skichamp, ROT0, "Sega", "Ski Champ", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, srally2, 0, model3_20, scud, model3_state, srally2, ROT0, "Sega", "Sega Rally 2", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, srally2x, 0, model3_20, scud, model3_state, srally2, ROT0, "Sega", "Sega Rally 2 DX", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, von2, 0, model3_20, model3, model3_state, von2, ROT0, "Sega", "Virtual On 2: Oratorio Tangram (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, von254g, von2, model3_20, model3, model3_state, von2, ROT0, "Sega", "Virtual On 2: Oratorio Tangram (ver 5.4g)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, fvipers2, 0, model3_20, model3, model3_state, model3_20, ROT0, "Sega", "Fighting Vipers 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, vs298, 0, model3_20, model3, model3_state, vs298, ROT0, "Sega", "Virtua Striker 2 '98 (Step 2.0)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs2v991, 0, model3_20, model3, model3_state, vs2v991, ROT0, "Sega", "Virtua Striker 2 '99.1 (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs299b, vs2v991, model3_20, model3, model3_state, vs299b, ROT0, "Sega", "Virtua Striker 2 '99 (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs299a, vs2v991, model3_20, model3, model3_state, vs299a, ROT0, "Sega", "Virtua Striker 2 '99 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs299, vs2v991, model3_20, model3, model3_state, vs299, ROT0, "Sega", "Virtua Striker 2 '99", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, vs2, 0, model3_20, model3, model3_state, vs2, ROT0, "Sega", "Virtua Striker 2 (Step 2.0)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harley, 0, model3_20, harley, model3_state, harley, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harleya, harley, model3_20, harley, model3_state, harleya, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, lamachin, 0, model3_20_5881, model3, model3_state, lamachin, ROT0, "Sega", "L.A. Machineguns", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, oceanhun, 0, model3_20_5881, model3, model3_state, oceanhun, ROT0, "Sega", "The Ocean Hunter", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, skichamp, 0, model3_20, skichamp, model3_state, skichamp, ROT0, "Sega", "Ski Champ", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, srally2, 0, model3_20, scud, model3_state, srally2, ROT0, "Sega", "Sega Rally 2", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, srally2x, 0, model3_20, scud, model3_state, srally2, ROT0, "Sega", "Sega Rally 2 DX", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, von2, 0, model3_20_5881, model3, model3_state, von2, ROT0, "Sega", "Virtual On 2: Oratorio Tangram (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, von254g, von2, model3_20_5881, model3, model3_state, von2, ROT0, "Sega", "Virtual On 2: Oratorio Tangram (ver 5.4g)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, fvipers2, 0, model3_20_5881, model3, model3_state, vs299, ROT0, "Sega", "Fighting Vipers 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, vs298, 0, model3_20_5881, model3, model3_state, vs298, ROT0, "Sega", "Virtua Striker 2 '98 (Step 2.0)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs2v991, 0, model3_20_5881, model3, model3_state, vs299, ROT0, "Sega", "Virtua Striker 2 '99.1 (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs299b, vs2v991, model3_20_5881, model3, model3_state, vs299, ROT0, "Sega", "Virtua Striker 2 '99 (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs299a, vs2v991, model3_20_5881, model3, model3_state, vs299, ROT0, "Sega", "Virtua Striker 2 '99 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, vs299, vs2v991, model3_20_5881, model3, model3_state, vs299, ROT0, "Sega", "Virtua Striker 2 '99", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
/* Model 3 Step 2.1 */
GAME( 1998, daytona2, 0, model3_21, daytona2, model3_state, daytona2, ROT0, "Sega", "Daytona USA 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, dayto2pe, 0, model3_21, daytona2, model3_state, dayto2pe, ROT0, "Sega", "Daytona USA 2 Power Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, dirtdvls, 0, model3_21, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 1) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, dirtdvlsa, dirtdvls, model3_21, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 2) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, daytona2, 0, model3_21_5881, daytona2, model3_state, daytona2, ROT0, "Sega", "Daytona USA 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, dayto2pe, 0, model3_21_5881, daytona2, model3_state, dayto2pe, ROT0, "Sega", "Daytona USA 2 Power Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, dirtdvls, 0, model3_21_5881, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 1) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, dirtdvlsa, dirtdvls, model3_21_5881, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 2) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, swtrilgy, 0, model3_21_5881, swtrilgy, model3_state, swtrilgy, ROT0, "Sega / LucasArts", "Star Wars Trilogy (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, swtrilgya, swtrilgy, model3_21_5881, swtrilgy, model3_state, swtrilga, ROT0, "Sega / LucasArts", "Star Wars Trilogy", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, spikeout, 0, model3_21, model3, model3_state, spikeout, ROT0, "Sega", "Spikeout (Revision C)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, spikeofe, 0, model3_21, model3, model3_state, spikeofe, ROT0, "Sega", "Spikeout Final Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, magtruck, 0, model3_21, eca, model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, eca, 0, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, ecax, eca, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (Export)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, ecap, eca, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (US location test?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, spikeout, 0, model3_21_5881, model3, model3_state, spikeout, ROT0, "Sega", "Spikeout (Revision C)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, spikeofe, 0, model3_21_5881, model3, model3_state, spikeofe, ROT0, "Sega", "Spikeout Final Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, magtruck, 0, model3_21_5881, eca, model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, eca, 0, model3_21_5881, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, ecax, eca, model3_21_5881, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (Export)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1999, ecap, eca, model3_21_5881, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (US location test?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )

View File

@ -769,7 +769,7 @@ ROM_END
/*--------------------------------
/ Split Second #144
/-------------------------------*/
ROM_START(splitsec)
ROM_START(spltsecp)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "cpu_u1.716", 0x1000, 0x0800, CRC(c6ff9aa9) SHA1(39f80faca16c869ac14df7c5fc3dfa80b47dad95))
ROM_LOAD( "cpu_u5.716", 0x1800, 0x0800, CRC(fda74efc) SHA1(31becc243ada23e2f4d17927985772c9fcf8a3c3))
@ -929,7 +929,7 @@ GAME(1980, seawitch, 0, st_mp200, mp200, st_mp200_state, st_mp20
GAME(1980, nineball, 0, st_mp200, mp200, st_mp200_state, st_mp200, ROT0, "Stern", "Nine Ball", GAME_IS_SKELETON_MECHANICAL)
GAME(1981, lightnin, 0, st_mp201, mp200, st_mp200_state, st_mp201, ROT0, "Stern", "Lightning", GAME_IS_SKELETON_MECHANICAL)
GAME(1980, stargzr, 0, st_mp200, mp200, st_mp200_state, st_mp200, ROT0, "Stern", "Stargazer", GAME_IS_SKELETON_MECHANICAL)
GAME(1981, splitsec, 0, st_mp201, mp200, st_mp200_state, st_mp201, ROT0, "Stern", "Split Second", GAME_IS_SKELETON_MECHANICAL)
GAME(1981, spltsecp, 0, st_mp201, mp200, st_mp200_state, st_mp201, ROT0, "Stern", "Split Second (Pinball)", GAME_IS_SKELETON_MECHANICAL)
GAME(1981, catacomp, 0, st_mp201, mp200, st_mp200_state, st_mp201, ROT0, "Stern", "Catacomb (Pinball)", GAME_IS_SKELETON_MECHANICAL)
GAME(1982, dragfist, 0, st_mp200, mp200, st_mp200_state, st_mp200, ROT0, "Stern", "Dragonfist", GAME_IS_SKELETON_MECHANICAL)
GAME(1984, lazrlord, 0, st_mp200, mp200, st_mp200_state, st_mp200, ROT0, "Stern", "Lazer Lord", GAME_IS_SKELETON_MECHANICAL)

View File

@ -672,7 +672,7 @@ DRIVER_INIT_MEMBER(stv_state,astrass)
m_maincpu->sh2drc_add_pcflush(0x60011ba);
m_maincpu->sh2drc_add_pcflush(0x605b9da);
install_astrass_protection();
install_common_protection();
DRIVER_INIT_CALL(stv);
}
@ -766,7 +766,7 @@ DRIVER_INIT_MEMBER(stv_state,sss)
m_maincpu->sh2drc_add_pcflush(0x6026398);
m_slave->sh2drc_add_pcflush(0x6028cd6);
install_sss_protection();
install_common_protection();
DRIVER_INIT_CALL(stv);
@ -829,7 +829,7 @@ DRIVER_INIT_MEMBER(stv_state,twcup98)
m_slave->sh2drc_add_pcflush(0x6062bca);
DRIVER_INIT_CALL(stv);
install_twcup98_protection();
install_common_protection();
m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5);
}
@ -886,7 +886,7 @@ DRIVER_INIT_MEMBER(stv_state,elandore)
m_maincpu->sh2drc_add_pcflush(0x604eac0);
m_slave->sh2drc_add_pcflush(0x605340a);
install_elandore_protection();
install_common_protection();
DRIVER_INIT_CALL(stv);
m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(0);
@ -897,7 +897,7 @@ DRIVER_INIT_MEMBER(stv_state,rsgun)
m_maincpu->sh2drc_add_pcflush(0x6034d04);
m_slave->sh2drc_add_pcflush(0x6036152);
install_rsgun_protection();
install_common_protection();
DRIVER_INIT_CALL(stv);
@ -906,7 +906,7 @@ DRIVER_INIT_MEMBER(stv_state,rsgun)
DRIVER_INIT_MEMBER(stv_state,ffreveng)
{
install_ffreveng_protection();
install_common_protection();
DRIVER_INIT_CALL(stv);
}

View File

@ -4,6 +4,7 @@
***************************************************************************/
#include "machine/msm6242.h"
#include "sound/2413intf.h"
#include "sound/msm5205.h"
#include "sound/okim6295.h"
@ -12,11 +13,9 @@ class dynax_state : public driver_device
public:
dynax_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_dsw_sel16(*this, "dsw_sel16"),
m_protection1(*this, "protection1"),
m_protection2(*this, "protection2"),
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
m_ym2413(*this, "ym2413"),
m_oki(*this, "oki"),
m_msm(*this, "msm"),
m_screen(*this, "screen"),
@ -24,9 +23,18 @@ public:
m_rtc(*this, "rtc")
{ }
/* devices */
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_soundcpu;
optional_device<ym2413_device> m_ym2413;
optional_device<okim6295_device> m_oki;
optional_device<msm5205_device> m_msm;
optional_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<msm6242_device> m_rtc;
// up to 8 layers, 2 images per layer (interleaved on screen)
UINT8 * m_pixmap[8][2];
UINT8 * m_ddenlovr_pixmap[8];
/* irq */
typedef void (dynax_state::*irq_func)(); // some games trigger IRQ at blitter end, some don't
@ -76,42 +84,6 @@ public:
const int *m_priority_table;
int m_hanamai_priority;
/* ddenlovr blitter (TODO: merge with the above, where possible) */
int m_extra_layers;
int m_ddenlovr_dest_layer;
int m_ddenlovr_blit_flip;
int m_ddenlovr_blit_x;
int m_ddenlovr_blit_y;
int m_ddenlovr_blit_address;
int m_ddenlovr_blit_pen;
int m_ddenlovr_blit_pen_mode;
int m_ddenlovr_blitter_irq_flag;
int m_ddenlovr_blitter_irq_enable;
int m_ddenlovr_rect_width;
int m_ddenlovr_rect_height;
int m_ddenlovr_clip_width;
int m_ddenlovr_clip_height;
int m_ddenlovr_line_length;
int m_ddenlovr_clip_ctrl;
int m_ddenlovr_clip_x;
int m_ddenlovr_clip_y;
int m_ddenlovr_scroll[8*2];
int m_ddenlovr_priority;
int m_ddenlovr_priority2;
int m_ddenlovr_bgcolor;
int m_ddenlovr_bgcolor2;
int m_ddenlovr_layer_enable;
int m_ddenlovr_layer_enable2;
int m_ddenlovr_palette_base[8];
int m_ddenlovr_palette_mask[8];
int m_ddenlovr_transparency_pen[8];
int m_ddenlovr_transparency_mask[8];
int m_ddenlovr_blit_latch;
int m_ddenlovr_blit_pen_mask; // not implemented
int m_ddenlovr_blit_rom_bits; // usually 8, 16 in hanakanz
const int *m_ddenlovr_blit_commands;
int m_ddenlovr_blit_regs[2];
/* input */
UINT8 m_input_sel;
UINT8 m_dsw_sel;
@ -139,40 +111,6 @@ public:
UINT8 m_gekisha_rom_enable;
UINT8 *m_romptr;
/* ddenlovr misc (TODO: merge with the above, where possible) */
UINT8 m_palram[0x200];
int m_okibank;
UINT8 m_rongrong_blitter_busy_select;
optional_shared_ptr<UINT16> m_dsw_sel16;
optional_shared_ptr<UINT16> m_protection1;
optional_shared_ptr<UINT16> m_protection2;
UINT8 m_prot_val;
UINT16 m_prot_16;
UINT16 m_quiz365_protection[2];
UINT16 m_mmpanic_leds; /* A led for each of the 9 buttons */
UINT8 m_funkyfig_lockout;
UINT8 m_romdata[2];
int m_palette_index;
UINT8 m_hginga_rombank;
UINT8 m_mjflove_irq_cause;
UINT8 m_daimyojn_palette_sel;
int m_irq_count;
/* devices */
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_soundcpu;
device_t *m_ymsnd;
optional_device<okim6295_device> m_oki;
optional_device<msm5205_device> m_msm;
optional_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<msm6242_device> m_rtc;
device_t *m_top_scr;
device_t *m_bot_scr;
DECLARE_WRITE8_MEMBER(dynax_vblank_ack_w);
DECLARE_WRITE8_MEMBER(dynax_blitter_ack_w);
DECLARE_WRITE8_MEMBER(jantouki_vblank_ack_w);
@ -275,27 +213,33 @@ public:
DECLARE_WRITE8_MEMBER(jantouki_blitter2_rev2_w);
DECLARE_WRITE8_MEMBER(hanamai_priority_w);
DECLARE_WRITE8_MEMBER(tenkai_priority_w);
DECLARE_DRIVER_INIT(mjelct3);
DECLARE_DRIVER_INIT(blktouch);
DECLARE_DRIVER_INIT(mjelct3a);
DECLARE_DRIVER_INIT(mjreach);
DECLARE_DRIVER_INIT(maya);
UINT32 screen_update_hanamai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_hnoridur(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_sprtmtch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_mjdialq2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_jantouki_top(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_jantouki_bottom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(sprtmtch_vblank_interrupt);
INTERRUPT_GEN_MEMBER(jantouki_vblank_interrupt);
INTERRUPT_GEN_MEMBER(jantouki_sound_vblank_interrupt);
INTERRUPT_GEN_MEMBER(yarunara_clock_interrupt);
INTERRUPT_GEN_MEMBER(mjelctrn_vblank_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(neruton_irq_scanline);
TIMER_DEVICE_CALLBACK_MEMBER(majxtal7_vblank_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(tenkai_interrupt);
void tenkai_update_rombank();
void gekisha_bank_postload();
DECLARE_WRITE_LINE_MEMBER(sprtmtch_sound_callback);
DECLARE_WRITE_LINE_MEMBER(jantouki_sound_callback);
DECLARE_WRITE_LINE_MEMBER(adpcm_int);
@ -324,6 +268,7 @@ public:
DECLARE_VIDEO_START(mcnpshnt);
DECLARE_PALETTE_INIT(janyuki);
DECLARE_VIDEO_START(neruton);
inline void blitter_plot_pixel( int layer, int mask, int x, int y, int pen, int wrap, int flags );
int blitter_drawgfx( int layer, int mask, const char *gfx, int src, int pen, int x, int y, int wrap, int flags );
void dynax_blitter_start( int flags );

View File

@ -231,6 +231,9 @@ public:
DECLARE_READ64_MEMBER(network_r);
DECLARE_WRITE64_MEMBER(network_w);
DECLARE_READ64_MEMBER(model3_security_r);
DECLARE_WRITE64_MEMBER(model3_security_w);
DECLARE_WRITE64_MEMBER(daytona2_rombank_w);
DECLARE_WRITE16_MEMBER(model3snd_ctrl);
UINT32 pci_device_get_reg();
@ -243,7 +246,6 @@ public:
DECLARE_DRIVER_INIT(scudplus);
DECLARE_DRIVER_INIT(model3_20);
DECLARE_DRIVER_INIT(bass);
DECLARE_DRIVER_INIT(vs2v991);
DECLARE_DRIVER_INIT(vs2);
DECLARE_DRIVER_INIT(daytona2);
DECLARE_DRIVER_INIT(eca);
@ -260,10 +262,8 @@ public:
DECLARE_DRIVER_INIT(getbass);
DECLARE_DRIVER_INIT(scudplusa);
DECLARE_DRIVER_INIT(dirtdvls);
DECLARE_DRIVER_INIT(vs299b);
DECLARE_DRIVER_INIT(vf3);
DECLARE_DRIVER_INIT(von2);
DECLARE_DRIVER_INIT(vs299a);
DECLARE_DRIVER_INIT(lostwsga);
DECLARE_DRIVER_INIT(oceanhun);
DECLARE_DRIVER_INIT(dayto2pe);

View File

@ -701,8 +701,7 @@ public:
: saturn_state(mconfig, type, tag),
m_adsp(*this, "adsp"),
m_adsp_pram(*this, "adsp_pram"),
m_cryptdevice(*this, "315_5881"),
m_using_crypt_device(0)
m_cryptdevice(*this, "315_5881")
{
}
@ -799,28 +798,14 @@ public:
// protection specific variables and functions (see machine/stvprot.c)
UINT32 m_abus_protenable;
UINT32 m_abus_prot_addr;
UINT32 m_abus_protkey;
UINT32 m_a_bus[4];
UINT32 m_ctrl_index;
UINT32 m_internal_counter;
UINT8 m_char_offset; //helper to jump the decoding of the NULL chars.
UINT32 (*m_prot_readback)(address_space&,int,UINT32);
DECLARE_READ32_MEMBER( common_prot_r );
DECLARE_WRITE32_MEMBER( common_prot_w );
void install_common_protection();
void install_twcup98_protection();
void install_sss_protection();
void install_astrass_protection();
void install_rsgun_protection();
void install_elandore_protection();
void install_ffreveng_protection();
void stv_register_protection_savestates();
// Decathlete specific variables and functions (see machine/decathlt.c)
@ -840,7 +825,6 @@ public:
optional_device<sega_315_5881_crypt_device> m_cryptdevice;
UINT16 crypt_read_callback(UINT32 addr);
int m_using_crypt_device;
};

View File

@ -234,10 +234,10 @@ const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn1_sboxes[4]
{
{
2,2,2,3,1,1,0,1,0,1,2,2,3,3,0,2,0,3,2,3,3,0,2,1,0,3,1,0,0,2,3,2,
3,2,0,3,2,0,1,0,3,3,1,1,2,2,2,0,2,1,3,1,1,1,1,2,2,2,3,0,1,3,0,0,
2,2,2,3,1,1,0,1,3,3,1,1,2,2,2,0,0,3,2,3,3,0,2,1,2,2,3,0,1,3,0,0,
3,2,0,3,2,0,1,0,0,1,2,2,3,3,0,2,2,1,3,1,1,1,1,2,0,3,1,0,0,2,3,2,
},
{1,2,5,6,7,-1},
{1,2,5,6,7,6},
{2,7}
},
@ -341,10 +341,10 @@ const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn2_sboxes[4]
{
{
0,2,3,2,1,1,0,0,2,1,0,3,3,0,0,0,3,2,0,2,1,1,2,1,0,0,3,1,2,2,3,1,
3,1,3,0,0,0,1,3,1,0,0,3,2,2,3,1,1,3,0,0,2,1,3,3,1,3,1,2,3,1,2,1,
0,1,3,0,1,1,2,3,2,0,0,3,2,1,3,1,3,3,0,0,1,0,0,3,0,3,3,2,3,2,0,1,
3,2,3,2,2,1,3,1,1,1,0,3,3,2,2,1,1,2,0,2,0,1,1,0,1,0,1,1,2,0,3,0,
},
{0,3,5,6,-1,-1},
{0,3,5,6,5,0},
{1,2}
},
@ -387,10 +387,10 @@ const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn2_sboxes[4]
{
{
1,2,3,2,0,3,2,3,0,1,1,0,0,2,2,3,2,0,0,3,0,2,3,3,2,2,1,0,2,1,0,3,
1,0,2,0,1,1,0,1,0,0,1,0,3,0,3,3,2,2,0,2,1,1,1,0,3,0,1,3,2,3,2,1,
1,0,3,0,0,1,2,1,0,0,1,0,0,0,2,3,2,2,0,2,0,1,3,0,2,0,1,3,2,3,0,1,
1,2,2,2,1,3,0,3,0,1,1,0,3,2,3,3,2,0,0,3,1,2,1,3,3,2,1,0,2,1,2,3,
},
{2,3,4,6,7,-1},
{2,3,4,6,7,2},
{2,3}
},
@ -406,10 +406,10 @@ const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn2_sboxes[4]
{ // 3rd round
{
{
0,3,0,1,0,2,3,3,1,0,1,3,2,2,1,1,3,3,3,0,2,0,2,0,0,0,2,3,1,1,0,0,
3,3,0,3,3,0,0,2,1,1,1,0,2,2,2,0,3,0,3,1,2,2,0,3,0,0,3,2,0,3,2,1,
0,3,0,1,3,0,0,2,1,0,1,3,2,2,2,0,3,3,3,0,2,2,0,3,0,0,2,3,0,3,2,1,
3,3,0,3,0,2,3,3,1,1,1,0,2,2,1,1,3,0,3,1,2,0,2,0,0,0,3,2,1,1,0,0,
},
{1,4,5,6,7,-1},
{1,4,5,6,7,5},
{0,5}
},
@ -424,11 +424,11 @@ const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn2_sboxes[4]
{
{
2,2,3,2,0,3,2,3,1,1,2,0,2,3,1,3,0,0,0,3,2,0,1,0,1,3,2,3,3,3,1,0,
2,2,0,3,0,3,1,0,1,1,2,3,2,3,1,0,0,0,3,2,2,0,2,3,1,3,2,0,3,3,1,3,
// unused?
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
},
{1,2,4,7,-1,-1},
{1,2,4,7,2,-1},
{2,4}
},
@ -481,19 +481,18 @@ const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn2_sboxes[4]
};
const int sega_315_5881_crypt_device::fn1_game_key_scheduling[FN1GK][2] = {
{1,29}, {1,71}, {2,4}, {2,54}, {3,8}, {4,56}, {4,73}, {5,11},
{6,51}, {7,92}, {8,89}, {9,9}, {9,39}, {9,41}, {9,58}, {9,86},
{10,90}, {11,6}, {12,64}, {13,49}, {14,44}, {15,40}, {16,69}, {17,15},
{18,23}, {18,43}, {19,82}, {20,81}, {21,32}, {22,5}, {23,66}, {24,13},
{24,45}, {25,12}, {25,35}, {26,61}, {27,10}, {27,59}, {28,25}
{1,29}, {1,71}, {2,4}, {2,54}, {3,8}, {4,56}, {4,73}, {5,11},
{6,51}, {7,92}, {8,89}, {9,9}, {9,39}, {9,58}, {9,86}, {10,90},
{11,6}, {12,64}, {13,49}, {14,44}, {15,40}, {16,69}, {17,15}, {18,23},
{18,43}, {19,82}, {20,81}, {21,32}, {22,5}, {23,66}, {24,13}, {24,45},
{25,12}, {25,35}, {26,61}, {27,10}, {27,59}, {28,25}
};
const int sega_315_5881_crypt_device::fn2_game_key_scheduling[FN2GK][2] = {
{0,0}, {1,3}, {2,11}, {3,20}, {4,22}, {5,23}, {6,29}, {7,38},
{8,39}, {9,55}, {9,86}, {9,87}, {9,90}, {10,50}, {10,53}, {11,57},
{12,59}, {13,61}, {13,64}, {14,63}, {15,67}, {16,72}, {17,83}, {18,88},
{19,94}, {20,35}, {21,17}, {22,6}, {22,11}, {23,85}, {24,16}, {25,25},
{26,92}, {27,47}, {28,28}
{0,0}, {1,3}, {2,11}, {3,20}, {4,22}, {5,23}, {6,29}, {7,38},
{8,39}, {9,55}, {9,86}, {9,87}, {9,90}, {10,50}, {11,57}, {12,59},
{13,61}, {14,63}, {15,67}, {16,72}, {17,83}, {18,88}, {19,94}, {20,35},
{21,17}, {22,6}, {23,85}, {24,16}, {25,25}, {26,92}, {27,47}, {28,28}
};
const int sega_315_5881_crypt_device::fn1_sequence_key_scheduling[20][2] = {
@ -583,9 +582,6 @@ UINT16 sega_315_5881_crypt_device::block_decrypt(UINT32 game_key, UINT16 sequenc
}
}
// subkeys bits 10 & 41
fn2_subkeys[0] ^= (BIT(sequence_key, 2) << 10);
fn2_subkeys[1] ^= (BIT(sequence_key, 4) << 17);
/**************************************************************/
// First Feistel Network

View File

@ -74,8 +74,8 @@ private:
static const sbox fn1_sboxes[4][4];
static const sbox fn2_sboxes[4][4];
static const int FN1GK = 39;
static const int FN2GK = 35;
static const int FN1GK = 38;
static const int FN2GK = 32;
static const int fn1_game_key_scheduling[FN1GK][2];
static const int fn2_game_key_scheduling[FN2GK][2];
static const int fn1_sequence_key_scheduling[20][2];

View File

@ -128,20 +128,36 @@ static const struct game_keys keys_table[] =
{ "dynamcopb", 0x0c2a4a93 }, // 1998 317-0236-COM Model 2
{ "dyndeka2b", 0x0c2a4a93 }, // 1998 317-0236-COM Model 2
{ "dynamcopc", 0x0c2a4a93 }, // 1998 317-0236-COM Model 2
{ "pltkids", -1 }, // 1998 317-5044-COM Model 2
{ "pltkidsa", -1 }, // 1998 317-5044-COM Model 2
{ "zerogun", -1 }, // 1997 317-5038-COM Model 2 // lowest numbered chip?
{ "zerogunj", -1 }, // 1997 317-5038-COM Model 2
{ "zeroguna", -1 }, // 1997 317-5038-COM Model 2
{ "zerogunaj", -1 }, // 1997 317-5038-COM Model 2
{ "pltkids", -1 }, // 1998 317-5044-COM Model 2
{ "pltkidsa", -1 }, // 1998 317-5044-COM Model 2
{ "magtruck", 0x09266e45 }, // ???? ? Model 3
{ "von2", 0x092a0e97 }, // ???? 317-0234-COM Model 3
{ "von254g", 0x092a0e97 }, // ???? 317-0234-COM Model 3
{ "fvipers2", -1 }, // ???? 317-0235-COM Model 3
{ "vs298", 0x09234e96 }, // ???? 317-0237-COM Model 3
{ "dirtdvls", 0x09290f17 }, // ???? 317-0238-COM Model 3
{ "dirtdvlsa", 0x09290f17 }, // ???? 317-0238-COM Model 3
{ "daytona2", 0x09250e16 }, // ???? 317-0239-COM Model 3
{ "spikeout", -1 }, // ???? 317-0240-COM Model 3
{ "spikeofe", -1 }, // ???? ?317-0240-COM? Model 3
{ "swtrilgy", 0x11272a01 }, // ???? 317-0241-COM Model 3
{ "swtrilgya", 0x11272a01 }, // ???? 317-0241-COM Model 3
{ "oceanhun", 0x092b6a01 }, // ???? 317-0242-COM Model 3
{ "lamachin", 0x092a2bc5 }, // ???? 317-0244-COM Model 3
{ "vs299", 0x09222ac8 }, // ???? 317-0245-COM Model 3
{ "vs2v991", 0x09222ac8 }, // ???? 317-0245-COM Model 3
{ "vs299b", 0x09222ac8 }, // ???? 317-0245-COM Model 3
{ "vs299a", 0x09222ac8 }, // ???? 317-0245-COM Model 3
{ "eca", 0x0923aa91 }, // ???? 317-0265-COM Model 3
{ "ecax", 0x0923aa91 }, // ???? 317-0265-COM Model 3
{ "ecap", 0x0923aa91 }, // ???? 317-0265-COM Model 3
{ "dayto2pe", -1 }, // ???? 317-5045-COM Model 3
{ NULL, 0 } // end of table
};

View File

@ -1,4 +1,4 @@
/* ST-V protection stuff */
/* ST-V hookup for 315-5881 encryption/compression chip */
/*
@ -11,543 +11,13 @@
Steep Slope Sliders (gfx transfer of character portraits)
Tecmo World Cup '98 (tecmo logo, player movement)
I think this is an encryption device. Decathlete is also protected, but uses a different device
see machine/decathlt.c for details of that one, unlike this that appears to perform decompression
operations.
Astra Superstars data were extracted from Saturn version of the game. It is not known if
protection device has data stored inside, or they are read from roms (using decryption/decompression)
*/
/****************************************************************************************
Protection & cartridge handling
*****************************************************************************************
These are the known ST-V games that uses this area as a valid protection,I have written
the data used by the games in the various circumstances for reference:
-Astra Super Stars [astrass]
[0] [1] [2] [3]
0x000y0000 0x00000000 0x06130027 0x01230000 test mode,char transfer (3)
0x???????? 0x???????? 0x???????? 0x???????? attract mode
0x000y0000 0x00000000 0x06130027 0x01230000 gameplay,char transfer (3)
-Elan Doree : Legend of Dragon [elandore]
[0] [1] [2] [3]
No protection test mode
No protection attract mode
0x000y0000 0x00000000 0x****00** 0xff7f0000 gameplay,VDP-1 write (textures on humans)
0x000y0000 0x00000000 0x****00** 0xffbf0000 gameplay,VDP-1 write (textures on humans)
0x000y0000 0x00000000 0x****00** 0xf9ff0000 gameplay,VDP-1 write (textures on dragons)
0x000y0000 0x00000000 0x****00** 0xfbff0000 gameplay,VDP-1 write (textures on dragons)
0x000y0000 0x00000000 0x****00** 0xfe7f0000 gameplay,VDP-1 write (textures on dragons)
0x000y0000 0x00000000 0x****00** 0xfd7f0000 gameplay,VDP-1 write (textures on dragons)
0x000y0000 0x00000000 0x****00** 0xfeff0000 gameplay,VDP-1 write (textures on dragons)
0x000y0000 0x00000000 0x****00** 0xf9bf0000 gameplay,VDP-1 write (textures on dragons)
-Final Fight Revenge [ffreveng]
[0] [1] [2] [3]
0x000y0000 0x00000000 0x4bcc0013 0x10da0000 test mode,boot vectors at $06080000
0x000y0000 0x00000000 0x0b780013 0x10d70000 attract mode,boot vectors at $06080000
0x???????? 0x???????? 0x???????? 0x???????? gameplay
-Radiant Silvergun [rsgun]
[0] [1] [2] [3]
No protection test mode
0x000y0000 0x00000000 0x08000010 0x77770000 attract mode,work ram-h $60ff1ec and so on (1)
0x???????? 0x???????? 0x???????? 0x???????? gameplay
-Steep Slope Sliders [sss]
[0] [1] [2] [3]
No protection test mode
*0x000y0000 0x00000000 0x000000a6 0x2c5b0000 attract mode,VDP-1 write
*0x000y0000 0x00000000 0x000000a6 0x2c5b0000 gameplay,VDP-1 write character 1 (2)
*0x000y0000 0x00000000 0x0f9800a6 0x47f10000 gameplay,VDP-1 write character 2
*0x000y0000 0x00000000 0x1d4800a6 0xfcda0000 gameplay,VDP-1 write character 3
*0x000y0000 0x00000000 0x29e300a6 0xb5e60000 gameplay,VDP-1 write character 4
*0x000y0000 0x00000000 0x38e900a6 0x392c0000 gameplay,VDP-1 write character 5
*0x000y0000 0x00000000 0x462500a6 0x77c30000 gameplay,VDP-1 write character 6
*0x000y0000 0x00000000 0x555c00a6 0x8a620000 gameplay,VDP-1 write character 7
=========================================================================================
y = setted as a 0,then after the ctrl data is moved is toggled to 1 then again toggled
to 0 after the reading,this bit is likely to be a "calculate protection values"
if 1,use normal ram if 0.
* = working checks
[3,low word]AFAIK this is the cartridge area and it's read-only.
(1)That area is usually (but not always) used as system registers.
(2)Same as P.O.S.T. check,it was really simple to look-up because of that.
(3)Wrong offset,or it requires something else like a bitswap?
=========================================================================================
Protection works as a sort of data transfer,it could also be that it uses
encryption on the data used...
For now I'm writing this function with a command basis so I can work better with it.
****************************************************************************************/
#include "emu.h"
#include "includes/stv.h"
//FILE *fp;
//FILE *fp2;
/************************
*
* Tecmo World Cup '98
*
************************/
/*
0x200214
0x20de94
wpset 0x200214,0x20de94-0x200214,r
dump twcup98.dmp,0x200214,0x20de94-0x200214,4,0,0
protection tests the data 0x201220 at
bp 0x6009a9e
with 0x60651f8
*/
//MAIN : 12120000 DATA : 0ad20069 Tecmo logo
//MAIN : 12120000 DATA : e332006b title screen
// TODO: encrypted / compressed data.
// Both points to a section that has a string ("TECMO" / "TITLE")
/*************************
*
* Final Fight Revenge
*
*************************/
/*
ffreveng protection notes
Global:
R2 is the vector read (where to jump to)
R3 is the vector pointer
Directory listing for Final Fight Revenge (Saturn Version):
In the ST-V version, most of these file names could be found at relative address 0x346a0 (0x22346a0)
Also, there's a table at 0x260000 (0x2260000), this points to offsets to the ROM (and are sent to the protection device),
and the size of it
fad size file name date
000000aa 00003000 2000/2/8
000000aa 00003000 ? 2000/2/8
000000b0 00076080 0;1 2000/2/8
0001799e 014b2000 ALY.RED;1 1999/11/9
00002350 00001900 ALYHRAM.BIN;1 2000/2/8
0000040e 00005204 ANDEND.BIN;1 1999/11/9
000001a0 0000c700 ANDORE.BIN;1 2000/2/8
000003c8 00016938 ANDORE.CRT;1 1999/11/9
000001b9 000f3528 ANDOREM.BIN;1 2000/2/8
00003525 012db000 ATN.RED;1 1999/11/9
000024e6 00001900 ATNHRAM.BIN;1 2000/2/8
00013291 0120d000 ATO.RED;1 1999/11/9
000024a0 00001100 ATOHRAM.BIN;1 2000/2/8
00000419 0000f000 BELGER.BIN;1 2000/2/8
000005f0 00013bdc BELGER.CRT;1 1999/11/9
00000437 000ce990 BELGERM.BIN;1 2000/2/8
00002611 00000894 BURGR.BIN;1 2000/2/8
00002605 00000638 CAFFE.BIN;1 2000/2/8
0000273b 000022e0 CAPCOM.BIN;1 1999/11/9
00001d9a 00012100 CAPHRAM.BIN;1 2000/2/8
00000834 00004cec CDYEND.BIN;1 1999/11/9
0000218a 00005900 CHSHRAM.BIN;1 2000/2/8
0000061a 0000b900 CODY.BIN;1 2000/2/8
00000809 00014e00 CODY.CRT;1 1999/11/9
00002857 000ff412 CODYANIM.BIN;1 1999/11/9
00002a56 00011dbc CODYAPAL.BIN;1 1999/11/9
00000632 000d31cc CODYM.BIN;1 2000/2/8
00002619 0000046c CURRY.BIN;1 2000/2/8
00000b36 00005110 DAMEND.BIN;1 1999/11/9
0000083e 0000b300 DAMND.BIN;1 2000/2/8
00000aa6 000181ae DAMND.CRT;1 1999/11/9
00000855 0010c674 DAMNDM.BIN;1 2000/2/8
00000ad9 000063c0 DDAD.BIN;1 1999/11/9
00000b2c 00004a30 DDBL.BIN;1 1999/11/9
00000b25 000034b4 DDCD.BIN;1 1999/11/9
00000ae6 00004c6c DDDM.BIN;1 1999/11/9
00000b1c 00004660 DDED.BIN;1 1999/11/9
00000b15 00003770 DDEL.BIN;1 1999/11/9
00000b0e 00003268 DDGY.BIN;1 1999/11/9
00000b06 00003c74 DDHG.BIN;1 1999/11/9
00000b00 000029a8 DDPS.BIN;1 1999/11/9
00000af9 000035e4 DDRL.BIN;1 1999/11/9
00000af0 000044a8 DDSD.BIN;1 1999/11/9
0000217a 00007d00 DEMHRAM.BIN;1 2000/2/8
0000278e 00064396 DLOOP.CRT;1 1999/11/9
00000b41 0000e200 EDDIE.BIN;1 2000/2/8
00000d25 00019a44 EDDIE.CRT;1 1999/11/9
00000b5e 000c7758 EDDIEM.BIN;1 2000/2/8
00000d5a 00005204 EDIEND.BIN;1 1999/11/9
00000d65 0000d700 ELGADO.BIN;1 2000/2/8
00001010 00018b2e ELGADO.CRT;1 1999/11/9
00000d80 0012ec64 ELGADOM.BIN;1 2000/2/8
00001043 00005204 ELGEND.BIN;1 1999/11/9
00001d79 0000e5ec ENDING.BIN;1 1999/11/9
00002bc3 0002e8f4 ENDING.CRT;1 1999/11/9
0000019e 0000005d FFEXABS.TXT;1 1999/11/9
0000019f 00000060 FFEXBIB.TXT;1 1999/11/9
0000019d 00000032 FFEXCPY.TXT;1 1999/11/9
00002615 0000062c FRIES.BIN;1 2000/2/8
00001ce1 0004b8b4 GAMEL.BIN;1 1999/11/9
000003f6 000011fc GANDRE.BIN;1 1999/11/9
0000040b 00001246 GBEL.BIN;1 1999/11/9
000003f9 00000af3 GCODY.BIN;1 1999/11/9
000003fb 00000cc4 GDAM.BIN;1 1999/11/9
000003fd 00000f6a GEDDIE.BIN;1 1999/11/9
000003ff 00000c85 GGADO.BIN;1 1999/11/9
00000401 00000d4c GGUY.BIN;1 1999/11/9
00000403 00000f16 GHAG.BIN;1 1999/11/9
00000405 00000a63 GPOISON.BIN;1 1999/11/9
00000407 00000a85 GROL.BIN;1 1999/11/9
00005b71 01156000 GRV.RED;1 1999/11/9
0000243b 00001600 GRVHRAM.BIN;1 2000/2/8
00000409 00000dad GSODOM.BIN;1 1999/11/9
0000104e 0000c300 GUY.BIN;1 2000/2/8
0000123a 00014844 GUY.CRT;1 1999/11/9
00001266 00005204 GUYEND.BIN;1 1999/11/9
00001067 000d14aa GUYM.BIN;1 2000/2/8
00001271 0000c600 HAGGAR.BIN;1 2000/2/8
00001489 00017ad8 HAGGAR.CRT;1 1999/11/9
0000128a 000e46fc HAGGARM.BIN;1 2000/2/8
000014bb 00005204 HGREND.BIN;1 1999/11/9
00002740 0001b468 HISCORE.BIN;1 1999/11/9
00002777 00000a00 HISCP.BIN;1 1999/11/9
00002779 000086c0 HISCTEX.BIN;1 1999/11/9
0000278b 00001680 HSFACE_T.BIN;1 1999/11/9
00002607 00000618 HTDOG.BIN;1 2000/2/8
00015741 010e3800 JNK.RED;1 1999/11/9
000023cd 00001900 JNKHRAM.BIN;1 2000/2/8
00002d0b 0003dfc0 KANJI.FON;1 1999/11/9
00001d98 00000d44 LOAD.BIN;1 1999/11/9
00001dbf 001dd5a8 LOGO.CPK;1 1999/11/9
00002d0a 00000400 LVLHRAM.BIN;1 2000/2/8
0000260a 000005e8 MEAT.BIN;1 2000/2/8
00007eb3 01253800 MLK.RED;1 1999/11/9
00002196 00000d00 MLKHRAM.BIN;1 2000/2/8
0000278a 00000400 NAMEP.BIN;1 1999/11/9
0000a3f0 011b8000 NPK.RED;1 1999/11/9
000022d0 00002700 NPKHRAM.BIN;1 2000/2/8
00010dc0 0121d800 NUK.RED;1 1999/11/9
00002555 00001100 NUKHRAM.BIN;1 2000/2/8
00002c21 00036f94 OVER.CRT;1 1999/11/9
000014c6 0000ab00 POISON.BIN;1 2000/2/8
000017f1 00018880 POISON.CRT;1 1999/11/9
000014dc 0017617c POISONM.BIN;1 2000/2/8
0000c7f6 01166000 PRK.RED;1 1999/11/9
00002268 00001100 PRKHRAM.BIN;1 2000/2/8
00002a82 00003940 PSCBCHR.BIN;1 1999/11/9
00002a8a 00002000 PSCBMAP.BIN;1 1999/11/9
00002a92 00000ac0 PSCRTEX.BIN;1 1999/11/9
00002a7b 000033c0 PSFCCHR.BIN;1 1999/11/9
00001824 000049d4 PSNEND.BIN;1 1999/11/9
00002a8e 00001e54 PSNMCHR.BIN;1 1999/11/9
00002a94 000037c0 PSSBCHR.BIN;1 1999/11/9
00002a9b 00002000 PSSBMAP.BIN;1 1999/11/9
00002a9f 00000200 PSSBPAL.BIN;1 1999/11/9
00002a7a 00000600 PS_PAL.BIN;1 1999/11/9
00002c8f 0003d4c0 RESIDENT.CRT;1 1999/11/9
00001c68 0003ae40 RESTEXT.BIN;1 1999/11/9
00001cde 00001220 RESTEXTB.BIN;1 1999/11/9
00001d97 00000200 RETIMEPA.BIN;1 1999/11/9
0000261b 000004e8 REVNG.BIN;1 1999/11/9
00001a5b 00005204 ROLEND.BIN;1 1999/11/9
0000182e 0000e700 ROLENTO.BIN;1 2000/2/8
00001a2d 00016bfc ROLENTO.CRT;1 1999/11/9
0000184b 000d6bf0 ROLENTOM.BIN;1 2000/2/8
000025c5 000062e4 SDDRVS.TSK;1 1999/11/9
00002eb3 002ee000 SEGA_WRN.DA;1 1998/4/30
00002b82 00020492 SELECT.CRT;1 1999/11/9
00002aa0 00070e04 SODBTEX.BIN;1 1999/11/9
00001c5d 00005154 SODEND.BIN;1 1999/11/9
00001a66 0000b100 SODOM.BIN;1 2000/2/8
00001c29 0001943a SODOM.CRT;1 1999/11/9
00001a7d 000b9e2f SODOMM.BIN;1 2000/2/8
0000260d 000004cc SUSHI.BIN;1 2000/2/8
0000261c 0008f204 TITLE.BIN;1 1999/11/9
0000eb58 010e9000 WHS.RED;1 1999/11/9
000021ff 00001100 WHSHRAM.BIN;1 2000/2/8
000003a0 00009b90 _ADCL00.BIN;1 1999/11/9
000003b4 00009b90 _ADCL01.BIN;1 1999/11/9
000023cb 00000c54 _ALYBMAP.BIN;1 1999/11/9
0000239b 00017ec0 _ALYFCHR.BIN;1 1999/11/9
00002399 00000c1a _ALYFMAP.BIN;1 1999/11/9
00002354 00000600 _ALYPAL.BIN;1 1999/11/9
0000235a 0001f400 _ALYRCHR.BIN;1 1999/11/9
00002355 0000205c _ALYRMAP.BIN;1 1999/11/9
0000252a 00015800 _ATNBCHR.BIN;1 1999/11/9
00002526 00001882 _ATNBMAP.BIN;1 1999/11/9
00002525 00000416 _ATNFMAP.BIN;1 1999/11/9
000024ea 00000600 _ATNPAL.BIN;1 1999/11/9
000024ef 0001af00 _ATNRCHR.BIN;1 1999/11/9
000024eb 00001d10 _ATNRMAP.BIN;1 1999/11/9
000024e3 000017fa _ATOBMAP.BIN;1 1999/11/9
000024e2 00000040 _ATOFCHR.BIN;1 1999/11/9
000024e1 00000006 _ATOFMAP.BIN;1 1999/11/9
000024a3 00000600 _ATOPAL.BIN;1 1999/11/9
000024a9 0001bbc0 _ATORCHR.BIN;1 1999/11/9
000024a4 00002004 _ATORMAP.BIN;1 1999/11/9
00000618 00000a20 _BGUNTX.BIN;1 1999/11/9
000005d5 0000d688 _BLTXURE.BIN;1 1999/11/9
00002613 00000a80 _BURGRTX.BIN;1 1999/11/9
00002606 000006c0 _CAFFETX.BIN;1 1999/11/9
000007d9 0000bdb0 _CDCL00.BIN;1 1999/11/9
000007f1 0000bdb0 _CDCL01.BIN;1 1999/11/9
00000ad7 000008a0 _CHSAWTX.BIN;1 1999/11/9
000025e3 00003500 _CRAT2TX.BIN;1 1999/11/9
000025ea 00002200 _CRAT3TX.BIN;1 1999/11/9
000025d5 00003300 _CRATDTX.BIN;1 1999/11/9
000025dc 00003300 _CRATNTX.BIN;1 1999/11/9
0000261a 00000500 _CURRYTX.BIN;1 1999/11/9
00000a6e 0000d918 _DMCL00.BIN;1 1999/11/9
00000a8a 0000d918 _DMCL01.BIN;1 1999/11/9
000025ef 00001b60 _DRUMTX.BIN;1 1999/11/9
00000ced 0000da3c _EDCL00.BIN;1 1999/11/9
00000d09 0000da3c _EDCL01.BIN;1 1999/11/9
00000fde 0000c404 _ELCL00.BIN;1 1999/11/9
00000ff7 0000c404 _ELCL01.BIN;1 1999/11/9
00002616 000011a0 _FRIESTX.BIN;1 1999/11/9
00001d96 00000660 _GFNTCHR.BIN;1 1999/11/9
00001264 00000880 _GKATATX.BIN;1 1999/11/9
00002488 0000bcc0 _GRVBCHR.BIN;1 1999/11/9
00002486 00000d76 _GRVBMAP.BIN;1 1999/11/9
00002483 000010fc _GRVFMAP.BIN;1 1999/11/9
0000243e 00000600 _GRVPAL.BIN;1 1999/11/9
00002444 0001f4c0 _GRVRCHR.BIN;1 1999/11/9
0000243f 00002004 _GRVRMAP.BIN;1 1999/11/9
0000120a 0000bf44 _GYCL00.BIN;1 1999/11/9
00001222 0000bf44 _GYCL01.BIN;1 1999/11/9
00001453 0000d614 _HGCL00.BIN;1 1999/11/9
0000146e 0000d614 _HGCL01.BIN;1 1999/11/9
00002608 00000880 _HTDOGTX.BIN;1 1999/11/9
000025f3 00002b60 _ICEBTX.BIN;1 1999/11/9
00001042 00000560 _JKNFTX.BIN;1 1999/11/9
00002419 00010940 _JNKBCHR.BIN;1 1999/11/9
00002417 00000982 _JNKBMAP.BIN;1 1999/11/9
00002414 0000113a _JNKFMAP.BIN;1 1999/11/9
000023d1 00000600 _JNKPAL.BIN;1 1999/11/9
000023d6 0001ee80 _JNKRCHR.BIN;1 1999/11/9
000023d2 00001bde _JNKRMAP.BIN;1 1999/11/9
000025d4 000006c0 _KATA2TX.BIN;1 1999/11/9
00001c5c 00000780 _KATANTX.BIN;1 1999/11/9
0000260b 00000cc0 _MEATTX.BIN;1 1999/11/9
000021dd 00010e80 _MLKBCHR.BIN;1 1999/11/9
000021db 00000be6 _MLKBMAP.BIN;1 1999/11/9
000021d9 00000f70 _MLKFMAP.BIN;1 1999/11/9
00002198 00000600 _MLKPAL.BIN;1 1999/11/9
0000219c 0001e440 _MLKRCHR.BIN;1 1999/11/9
00002199 000013de _MLKRMAP.BIN;1 1999/11/9
0000234d 00001416 _NPKBMAP.BIN;1 1999/11/9
0000231d 00017dc0 _NPKFCHR.BIN;1 1999/11/9
0000231a 00001406 _NPKFMAP.BIN;1 1999/11/9
000022d5 00000600 _NPKPAL.BIN;1 1999/11/9
000022db 0001f640 _NPKRCHR.BIN;1 1999/11/9
000022d6 00002202 _NPKRMAP.BIN;1 1999/11/9
0000259a 000153c0 _NUKBCHR.BIN;1 1999/11/9
00002596 00001924 _NUKBMAP.BIN;1 1999/11/9
00002594 00000f6e _NUKFMAP.BIN;1 1999/11/9
00002558 00000600 _NUKPAL.BIN;1 1999/11/9
0000255e 0001adc0 _NUKRCHR.BIN;1 1999/11/9
00002559 00002004 _NUKRMAP.BIN;1 1999/11/9
000025d3 000005a0 _NYOIBTX.BIN;1 1999/11/9
000025f9 000039e0 _OILCTX.BIN;1 1999/11/9
000014b9 00000b40 _PIPETX.BIN;1 1999/11/9
00001823 00000600 _POISNTX.BIN;1 1999/11/9
000022cc 000018fc _PRKBMAP.BIN;1 1999/11/9
000022ac 0000fd00 _PRKFCHR.BIN;1 1999/11/9
000022a8 00001d4a _PRKFMAP.BIN;1 1999/11/9
0000226b 00000600 _PRKPAL.BIN;1 1999/11/9
00002271 0001b0c0 _PRKRCHR.BIN;1 1999/11/9
0000226c 00002202 _PRKRMAP.BIN;1 1999/11/9
000017c9 00009874 _PSCL00.BIN;1 1999/11/9
000017dd 00009874 _PSCL01.BIN;1 1999/11/9
00000d59 00000180 _PSTKTX.BIN;1 1999/11/9
000019f9 0000cb2c _RLCL00.BIN;1 1999/11/9
00001a13 0000cb2c _RLCL01.BIN;1 1999/11/9
00001bf1 0000dd0c _SDCL00.BIN;1 1999/11/9
00001c0d 0000dd0c _SDCL01.BIN;1 1999/11/9
00000833 00000660 _SKNFTX.BIN;1 1999/11/9
000025d2 00000240 _SPIKETX.BIN;1 1999/11/9
0000260e 000011e0 _SUSHITX.BIN;1 1999/11/9
00002601 00001ba0 _TOMBTX.BIN;1 1999/11/9
0000224b 0000e2c0 _WHSBCHR.BIN;1 1999/11/9
00002249 00000a36 _WHSBMAP.BIN;1 1999/11/9
00002245 00001bb8 _WHSFMAP.BIN;1 1999/11/9
00002202 00000600 _WHSPAL.BIN;1 1999/11/9
00002207 0001efc0 _WHSRCHR.BIN;1 1999/11/9
00002203 00001cf4 _WHSRMAP.BIN;1 1999/11/9
*/
UINT32 rsgun_prot_read_callback( address_space &space, int protaddr, UINT32 key )
{
int tempctrl = protaddr - 0x0201000; // technically it doesn't seem to care, but...
switch(key)
{
case 0x77770000:
{
UINT32 val =
((tempctrl & 0xff)<<24) |
(((tempctrl+1) & 0xff)<<16) |
(((tempctrl+2) & 0xff)<<8) |
((tempctrl+3) & 0xff);
if(tempctrl & 0x100)
val &= 0x0f0f0f0f;
else
val &= 0xf0f0f0f0;
return val;
}
}
return 0;
}
UINT32 twcup98_prot_read_callback( address_space &space, int protaddr, UINT32 key )
{
UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base();
UINT32 res = 0;
UINT32 twcup_prot_data[8] =
{
0x23232323, 0x23232323, 0x4c4c4c4c, 0x4c156301
};
switch(key >> 16)
{
case 0x1212:
if(protaddr & 2)
{
res = (ROM[protaddr / 4] & 0xffff) << 16;
res |= (ROM[(protaddr+4) / 4] & 0xffff0000) >> 16;
}
else
{
res = ROM[protaddr / 4] & 0xffff0000;
res |= ROM[protaddr / 4] & 0xffff;
}
if(protaddr >= 0xD215A4+0x100c && protaddr < 0xD215A4+0x100c+8*4)
res = twcup_prot_data[(protaddr-(0xD215A4+0x100c))/4];
return res;
}
return 0;
}
UINT32 sss_prot_read_callback( address_space &space, int protaddr, UINT32 key )
{
UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base();
int read_offset_hack = 0;
UINT32 res;
/*
MAIN : 2c5b0000 DATA : 000000a6 014c0000
MAIN : 47f10000 DATA : 0f9800a6 014c1f30
MAIN : fcda0000 DATA : 1d4800a6 014c3a90
MAIN : b5e60000 DATA : 29e300a6 014c53c6
MAIN : 392c0000 DATA : 38e900a6 014c71d2
MAIN : 77c30000 DATA : 462500a6 014c8c4a
MAIN : 8a620000 DATA : 555c00a6 014caab8
*/
// I have a feeling rather than the offsets being scrambled they were lazy
// and left unencrypted copies in the ROM... but this still needs verification
switch(key>>16)
{
case 0x2c5b: read_offset_hack = 0x60054; break;
case 0x47f1: read_offset_hack = 0x56498; break;
case 0xfcda: read_offset_hack = 0x50b0c; break;
case 0xb5e6: read_offset_hack = 0x4af56; break;
case 0x392c: read_offset_hack = 0x45876; break;
case 0x77c3: read_offset_hack = 0x3fe02; break;
case 0x8a62: read_offset_hack = 0x3a784; break;
}
switch(key>>16)
{
default:
if(protaddr & 2)
{
res = (ROM[(protaddr-read_offset_hack) / 4] & 0xffff) << 16;
res |= (ROM[((protaddr-read_offset_hack)+4) / 4] & 0xffff0000) >> 16;
}
else
{
res = ROM[(protaddr-read_offset_hack) / 4] & 0xffff0000;
res |= ROM[(protaddr-read_offset_hack) / 4] & 0xffff;
}
return res;
}
}
UINT32 elandore_prot_read_callback( address_space &space, int protaddr, UINT32 key )
{
UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base();
UINT32 res = 0;
switch(key >> 16)
{
default:
if(protaddr & 2)
{
res = (ROM[protaddr / 4] & 0xffff) << 16;
res |= (ROM[(protaddr+4) / 4] & 0xffff0000) >> 16;
}
else
{
res = ROM[protaddr / 4] & 0xffff0000;
res |= ROM[protaddr / 4] & 0xffff;
}
return res;
}
// never executed
//return 0;
}
UINT32 ffreveng_prot_read_callback( address_space &space, int protaddr, UINT32 key )
{
//UINT32 res = 0;
switch(key >> 16)
{
case 0x10da://ffreveng, boot vectors at $6080000,test mode
case 0x10d7://ffreveng, boot vectors at $6080000,attract mode
#if 0
if(protaddr & 2)
{
res = (ROM[protaddr / 4] & 0xffff) << 16;
res |= (ROM[(protaddr+4) / 4] & 0xffff0000) >> 16;
}
else
{
res = ROM[protaddr / 4] & 0xffff0000;
res |= ROM[protaddr / 4] & 0xffff;
}
#endif
return 0;
}
return 0;
}
/*************************************
@ -556,8 +26,6 @@ UINT32 ffreveng_prot_read_callback( address_space &space, int protaddr, UINT32 k
*
*************************************/
// the naomi hookup of 315-5881 reads 16-bits at a time, here we seem to read 32?
READ32_MEMBER( stv_state::common_prot_r )
{
UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base();
@ -566,31 +34,13 @@ READ32_MEMBER( stv_state::common_prot_r )
{
if(offset == 3)
{
#ifdef MAME_DEBUG
popmessage("Prot read at %06x with data = %08x",space.device().safe_pc(),m_abus_protkey);
#endif
if (!m_using_crypt_device) // decrypt using hacks
{
UINT32 realret = space.read_dword(0x2000000 + m_ctrl_index);
UINT32 retdata = m_prot_readback(space, m_ctrl_index, m_abus_protkey);
//fwrite(&realret, 1, 4, fp);
//fwrite(&retdata, 1, 4, fp2);
logerror("A-Bus control protection read at %06x with data = %08x Returning = %08x Would otherwise return = %08x\n", space.device().safe_pc(), m_abus_protkey, retdata, realret);
m_ctrl_index += 4;
return retdata;
}
else // decrypt using real decryption device
{
UINT8* base;
UINT16 res = m_cryptdevice->do_decrypt(base);
UINT16 res2 = m_cryptdevice->do_decrypt(base);
res = ((res & 0xff00) >> 8) | ((res & 0x00ff) << 8);
res2 = ((res2 & 0xff00) >> 8) | ((res2 & 0x00ff) << 8);
UINT8* base;
UINT16 res = m_cryptdevice->do_decrypt(base);
UINT16 res2 = m_cryptdevice->do_decrypt(base);
res = ((res & 0xff00) >> 8) | ((res & 0x00ff) << 8);
res2 = ((res2 & 0xff00) >> 8) | ((res2 & 0x00ff) << 8);
return res2 | (res << 16);
}
return res2 | (res << 16);
}
return m_a_bus[offset];
}
@ -611,7 +61,6 @@ UINT16 stv_state::crypt_read_callback(UINT32 addr)
WRITE32_MEMBER ( stv_state::common_prot_w )
{
COMBINE_DATA(&m_a_bus[offset]);
//printf("A-Bus control protection write at %06x: [%02x] <- %08x\n",space.device().safe_pc(),offset,data);
if (offset == 0)
{
@ -619,10 +68,8 @@ WRITE32_MEMBER ( stv_state::common_prot_w )
}
else if(offset == 2)
{
COMBINE_DATA(&m_abus_prot_addr);
m_cryptdevice->set_addr_low(m_abus_prot_addr >> 16);
m_cryptdevice->set_addr_high(m_abus_prot_addr&0xffff);
if (mem_mask&0xffff0000) m_cryptdevice->set_addr_low(data >> 16);
if (mem_mask&0x0000ffff) m_cryptdevice->set_addr_high(data&0xffff);
}
else if(offset == 3)
@ -630,43 +77,6 @@ WRITE32_MEMBER ( stv_state::common_prot_w )
COMBINE_DATA(&m_abus_protkey);
m_cryptdevice->set_subkey(m_abus_protkey>>16);
int a_bus_vector;
a_bus_vector = m_abus_prot_addr >> 16;
a_bus_vector|= (m_abus_prot_addr & 0xffff) << 16;
a_bus_vector<<= 1;
/*
if (fp)
{
fclose(fp);
fp = 0;
}
if (fp2)
{
fclose(fp2);
fp2 = 0;
}
char filename[256];
sprintf(filename,"encrypted_%s_key_%04x_address_%08x", machine().system().name, m_abus_protkey>>16, a_bus_vector);
fp=fopen(filename, "w+b");
sprintf(filename,"not-encrypted_%s_key_%04x_address_%08x", machine().system().name, m_abus_protkey>>16, a_bus_vector);
fp2=fopen(filename, "w+b");
*/
//printf("MAIN : %08x DATA : %08x %08x\n",m_abus_protkey,m_abus_prot_addr,a_bus_vector);
// if you look at the first transfer in ffreveng this is clearly a ROM address from a table | MAIN : 10d70000 DATA : 0b780013 002616f0
// (opr21872.7, offset 0x616f0, which happens to be 0x2616f0 in the ROM region "game0")
// the values sent by the CPU are plucked from a table above where the data is, located at 0x60000
// Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
// 00060000 00 00 16 F0 00 00 2F A0 00 00 46 90 00 00 4D 04
// this is the first entry in the table, 0x16f0 is the address, 0x2fa0 is the length.
// the next entry is address 0x4690, length 0x4d04. 0x16f0 + 0x2fa0 == 0x4690 so that entry is located straight after the first one
// the game reads the number of bytes specified in the length via the protection device, writing them to RAM. This suggests there
// is no compression going on, only some form of encryption.
m_ctrl_index = a_bus_vector;
}
}
@ -675,56 +85,10 @@ void stv_state::install_common_protection()
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x4fffff0, 0x4ffffff, read32_delegate(FUNC(stv_state::common_prot_r), this), write32_delegate(FUNC(stv_state::common_prot_w), this));
INT64 key = get_315_5881_key(machine());
if (key != -1)
{
m_cryptdevice->set_key(key); // use real decryption
m_using_crypt_device = 1;
}
else
m_using_crypt_device = 0; // use protection sim
m_cryptdevice->set_key(key);
}
void stv_state::install_sss_protection()
{
install_common_protection();
m_prot_readback = sss_prot_read_callback;
}
void stv_state::install_astrass_protection()
{
install_common_protection();
}
void stv_state::install_ffreveng_protection()
{
install_common_protection();
m_prot_readback = ffreveng_prot_read_callback;
}
void stv_state::install_elandore_protection()
{
install_common_protection();
m_prot_readback = elandore_prot_read_callback;
}
void stv_state::install_rsgun_protection()
{
install_common_protection();
m_prot_readback = rsgun_prot_read_callback;
}
void stv_state::install_twcup98_protection()
{
install_common_protection();
m_prot_readback = twcup98_prot_read_callback;
}
void stv_state::stv_register_protection_savestates()
{
save_item(NAME(m_a_bus));
save_item(NAME(m_ctrl_index));
save_item(NAME(m_internal_counter));
save_item(NAME(m_char_offset));
}

View File

@ -31142,7 +31142,7 @@ nineball
orbitor1
quicksil
seawitch
splitsec
spltsecp
stargzr
viperp
gamatron

View File

@ -229,20 +229,32 @@ void taitoair_state::fill_slope( bitmap_ind16 &bitmap, const rectangle &cliprect
int xx1 = x1 >> TAITOAIR_FRAC_SHIFT;
int xx2 = x2 >> TAITOAIR_FRAC_SHIFT;
int grad_col;
int base_color;
if (xx1 <= cliprect.max_x || xx2 >= cliprect.min_x)
{
if (xx1 < cliprect.min_x)
xx1 = cliprect.min_x;
if (xx2 > cliprect.max_x)
xx2 = cliprect.max_x;
/* TODO: it's unknown if gradient color applies by global screen Y coordinate or there's a calculation to somewhere ... */
grad_col = (y1 >> 3) & 0x3f;
if(color & 0x40)
{
/* Non-terrain elements are colored with this. */
base_color = (color & 0x3f) + 0x340;
grad_col = 0;
}
else
{
/* Terrain elements, with a gradient applied. */
/* TODO: it's unknown if gradient color applies by global screen Y coordinate or there's a calculation to somewhere ... */
base_color = ((color & 0x3f) * 0x80) + 0x2040;
grad_col = (y1 >> 3) & 0x3f;
}
while (xx1 <= xx2)
{
bitmap.pix16(y1, xx1) = color + grad_col;
bitmap.pix16(y1, xx1) = base_color + grad_col;
xx1++;
}
}
@ -393,7 +405,8 @@ WRITE16_MEMBER(taitoair_state::dsp_flags_w)
logerror("quad: unknown value %04x at %04x\n", m_line_ram[adr], adr);
break;
}
m_q.col = ((m_line_ram[adr] & 0x007f) * 0x80) + 0x2040;
m_q.col = m_line_ram[adr] & 0x7f;//((m_line_ram[adr] & 0x007f) * 0x80) + 0x2040;
adr--;
pcount = 0;
while (pcount < TAITOAIR_POLY_MAX_PT && adr >= 1 && !(m_line_ram[adr] & 0xc000))