mirror of
https://github.com/holub/mame
synced 2025-06-29 23:48:56 +03:00
Merge branch 'master' of https://github.com/mamedev/mame.git
This commit is contained in:
commit
b828f37eef
@ -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)
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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];
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -31142,7 +31142,7 @@ nineball
|
||||
orbitor1
|
||||
quicksil
|
||||
seawitch
|
||||
splitsec
|
||||
spltsecp
|
||||
stargzr
|
||||
viperp
|
||||
gamatron
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user