trunk/src/mame/drivers/ddenlovr.c
| r243094 | r243095 | |
| 110 | 110 | #include "cpu/m68000/m68000.h" |
| 111 | 111 | #include "cpu/z80/z80.h" |
| 112 | 112 | #include "sound/ay8910.h" |
| 113 | | #include "sound/okim6295.h" |
| 114 | | #include "sound/2413intf.h" |
| 115 | 113 | #include "machine/msm6242.h" |
| 116 | 114 | #include "machine/nvram.h" |
| 117 | 115 | #include "includes/dynax.h" |
| r243094 | r243095 | |
| 153 | 151 | { |
| 154 | 152 | public: |
| 155 | 153 | ddenlovr_state(const machine_config &mconfig, device_type type, const char *tag) |
| 156 | | : dynax_state(mconfig, type, tag) |
| 157 | | { } |
| 154 | : dynax_state(mconfig, type, tag), |
| 155 | m_dsw_sel16(*this, "dsw_sel16"), |
| 156 | m_protection1(*this, "protection1"), |
| 157 | m_protection2(*this, "protection2") { } |
| 158 | |
| 158 | 159 | |
| 160 | optional_shared_ptr<UINT16> m_dsw_sel16; |
| 161 | optional_shared_ptr<UINT16> m_protection1; |
| 162 | optional_shared_ptr<UINT16> m_protection2; |
| 163 | |
| 164 | |
| 165 | UINT8 * m_ddenlovr_pixmap[8]; |
| 166 | |
| 167 | /* blitter (TODO: merge with the dynax.h, where possible) */ |
| 168 | int m_extra_layers; |
| 169 | int m_ddenlovr_dest_layer; |
| 170 | int m_ddenlovr_blit_flip; |
| 171 | int m_ddenlovr_blit_x; |
| 172 | int m_ddenlovr_blit_y; |
| 173 | int m_ddenlovr_blit_address; |
| 174 | int m_ddenlovr_blit_pen; |
| 175 | int m_ddenlovr_blit_pen_mode; |
| 176 | int m_ddenlovr_blitter_irq_flag; |
| 177 | int m_ddenlovr_blitter_irq_enable; |
| 178 | int m_ddenlovr_rect_width; |
| 179 | int m_ddenlovr_rect_height; |
| 180 | int m_ddenlovr_clip_width; |
| 181 | int m_ddenlovr_clip_height; |
| 182 | int m_ddenlovr_line_length; |
| 183 | int m_ddenlovr_clip_ctrl; |
| 184 | int m_ddenlovr_clip_x; |
| 185 | int m_ddenlovr_clip_y; |
| 186 | int m_ddenlovr_scroll[8*2]; |
| 187 | int m_ddenlovr_priority; |
| 188 | int m_ddenlovr_priority2; |
| 189 | int m_ddenlovr_bgcolor; |
| 190 | int m_ddenlovr_bgcolor2; |
| 191 | int m_ddenlovr_layer_enable; |
| 192 | int m_ddenlovr_layer_enable2; |
| 193 | int m_ddenlovr_palette_base[8]; |
| 194 | int m_ddenlovr_palette_mask[8]; |
| 195 | int m_ddenlovr_transparency_pen[8]; |
| 196 | int m_ddenlovr_transparency_mask[8]; |
| 197 | int m_ddenlovr_blit_latch; |
| 198 | int m_ddenlovr_blit_pen_mask; // not implemented |
| 199 | int m_ddenlovr_blit_rom_bits; // usually 8, 16 in hanakanz |
| 200 | const int *m_ddenlovr_blit_commands; |
| 201 | int m_ddenlovr_blit_regs[2]; |
| 202 | |
| 203 | /* ddenlovr misc (TODO: merge with dynax.h, where possible) */ |
| 204 | UINT8 m_palram[0x200]; |
| 205 | int m_okibank; |
| 206 | UINT8 m_rongrong_blitter_busy_select; |
| 207 | UINT8 m_prot_val; |
| 208 | UINT16 m_prot_16; |
| 209 | UINT16 m_quiz365_protection[2]; |
| 210 | |
| 211 | UINT16 m_mmpanic_leds; /* A led for each of the 9 buttons */ |
| 212 | UINT8 m_funkyfig_lockout; |
| 213 | UINT8 m_romdata[2]; |
| 214 | int m_palette_index; |
| 215 | UINT8 m_hginga_rombank; |
| 216 | UINT8 m_mjflove_irq_cause; |
| 217 | UINT8 m_daimyojn_palette_sel; |
| 218 | |
| 159 | 219 | DECLARE_MACHINE_START(ddenlovr); |
| 160 | 220 | DECLARE_MACHINE_RESET(ddenlovr); |
| 161 | 221 | DECLARE_VIDEO_START(ddenlovr); |
| r243094 | r243095 | |
| 350 | 410 | DECLARE_VIDEO_START(htengoku); |
| 351 | 411 | DECLARE_WRITE8_MEMBER(htengoku_dsw_w); |
| 352 | 412 | DECLARE_READ8_MEMBER(htengoku_dsw_r); |
| 413 | DECLARE_WRITE8_MEMBER( quizchq_oki_bank_w ); |
| 414 | DECLARE_WRITE16_MEMBER( ddenlovr_oki_bank_w ); |
| 415 | DECLARE_WRITE16_MEMBER( quiz365_oki_bank1_w ); |
| 416 | DECLARE_WRITE16_MEMBER( quiz365_oki_bank2_w ); |
| 417 | DECLARE_WRITE8_MEMBER( ddenlovr_select_w ); |
| 418 | DECLARE_READ8_MEMBER( quiz365_input_r ); |
| 419 | DECLARE_WRITE16_MEMBER( nettoqc_oki_bank_w ); |
| 420 | DECLARE_WRITE8_MEMBER( hanakanz_oki_bank_w ); |
| 421 | DECLARE_WRITE8_MEMBER( mjchuuka_oki_bank_w ); |
| 422 | DECLARE_READ8_MEMBER( hginga_dsw_r ); |
| 423 | DECLARE_WRITE8_MEMBER( mjflove_okibank_w ); |
| 424 | DECLARE_WRITE8_MEMBER( jongtei_okibank_w ); |
| 425 | DECLARE_READ8_MEMBER( seljan2_dsw_r ); |
| 426 | DECLARE_WRITE8_MEMBER( daimyojn_okibank_w ); |
| 353 | 427 | |
| 354 | 428 | void ddenlovr_flipscreen_w( UINT8 data ); |
| 355 | 429 | void ddenlovr_blit_flip_w( UINT8 data ); |
| r243094 | r243095 | |
| 368 | 442 | void mmpanic_update_leds(); |
| 369 | 443 | void mjchuuka_get_romdata(); |
| 370 | 444 | UINT8 hgokou_player_r( int player ); |
| 371 | | DECLARE_WRITE8_MEMBER( quizchq_oki_bank_w ); |
| 372 | | DECLARE_WRITE16_MEMBER( ddenlovr_oki_bank_w ); |
| 373 | | DECLARE_WRITE16_MEMBER( quiz365_oki_bank1_w ); |
| 374 | | DECLARE_WRITE16_MEMBER( quiz365_oki_bank2_w ); |
| 375 | | DECLARE_WRITE8_MEMBER( ddenlovr_select_w ); |
| 376 | | DECLARE_READ8_MEMBER( quiz365_input_r ); |
| 377 | | DECLARE_WRITE16_MEMBER( nettoqc_oki_bank_w ); |
| 378 | | DECLARE_WRITE8_MEMBER( hanakanz_oki_bank_w ); |
| 379 | | DECLARE_WRITE8_MEMBER( mjchuuka_oki_bank_w ); |
| 380 | | DECLARE_READ8_MEMBER( hginga_dsw_r ); |
| 381 | | DECLARE_WRITE8_MEMBER( mjflove_okibank_w ); |
| 382 | | DECLARE_WRITE8_MEMBER( jongtei_okibank_w ); |
| 383 | | DECLARE_READ8_MEMBER( seljan2_dsw_r ); |
| 384 | | DECLARE_WRITE8_MEMBER( daimyojn_okibank_w ); |
| 385 | 445 | }; |
| 386 | 446 | |
| 387 | 447 | VIDEO_START_MEMBER(ddenlovr_state,ddenlovr) |
| r243094 | r243095 | |
| 1916 | 1976 | AM_RANGE(0x300286, 0x300287) AM_READ(ddenlovr_gfxrom_r) // Video Chip |
| 1917 | 1977 | |
| 1918 | 1978 | AM_RANGE(0x3002c0, 0x3002c1) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)// Sound |
| 1919 | | AM_RANGE(0x300300, 0x300303) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 1979 | AM_RANGE(0x300300, 0x300303) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 1920 | 1980 | AM_RANGE(0x300340, 0x30035f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff) |
| 1921 | 1981 | AM_RANGE(0x300380, 0x300383) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 1922 | 1982 | AM_RANGE(0x300384, 0x300385) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff) |
| r243094 | r243095 | |
| 1968 | 2028 | AM_RANGE(0x300070, 0x300071) AM_READ(unk16_r) // ? must be 78 on startup (not necessary in ddlover) |
| 1969 | 2029 | AM_RANGE(0x300080, 0x300083) AM_WRITE(ddenlovr_blitter_w) |
| 1970 | 2030 | AM_RANGE(0x300086, 0x300087) AM_READ(ddenlovr_gfxrom_r) // Video Chip |
| 1971 | | AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 2031 | AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 1972 | 2032 | AM_RANGE(0x300100, 0x30011f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff) |
| 1973 | 2033 | AM_RANGE(0x300140, 0x300143) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 1974 | 2034 | AM_RANGE(0x300180, 0x300181) AM_READ_PORT("P1") |
| r243094 | r243095 | |
| 2035 | 2095 | AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters |
| 2036 | 2096 | AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) // |
| 2037 | 2097 | |
| 2038 | | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 2098 | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 2039 | 2099 | AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff) |
| 2040 | 2100 | AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 2041 | 2101 | AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff) |
| r243094 | r243095 | |
| 2073 | 2133 | AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters |
| 2074 | 2134 | AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) // |
| 2075 | 2135 | |
| 2076 | | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 2136 | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 2077 | 2137 | AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff) |
| 2078 | 2138 | AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 2079 | 2139 | AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff) |
| r243094 | r243095 | |
| 2147 | 2207 | AM_RANGE(0x300070, 0x300071) AM_READ(unk16_r) // ? must be 78 on startup (not necessary in ddlover) |
| 2148 | 2208 | AM_RANGE(0x300080, 0x300083) AM_WRITE(ddenlovr_blitter_w) |
| 2149 | 2209 | AM_RANGE(0x300086, 0x300087) AM_READ(ddenlovr_gfxrom_r) // Video Chip |
| 2150 | | AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 2210 | AM_RANGE(0x3000c0, 0x3000c3) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 2151 | 2211 | AM_RANGE(0x300100, 0x30011f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff) |
| 2152 | 2212 | AM_RANGE(0x300140, 0x300143) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 2153 | 2213 | AM_RANGE(0x300180, 0x300181) AM_READ_PORT("P1") |
| r243094 | r243095 | |
| 2210 | 2270 | AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters |
| 2211 | 2271 | AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) // |
| 2212 | 2272 | |
| 2213 | | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 2273 | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 2214 | 2274 | AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write,0x00ff) |
| 2215 | 2275 | AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 2216 | 2276 | AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff) |
| r243094 | r243095 | |
| 2266 | 2326 | AM_RANGE(0x22, 0x23) AM_READ(rongrong_input2_r) |
| 2267 | 2327 | |
| 2268 | 2328 | AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 2269 | | AM_RANGE(0x60, 0x61) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2329 | AM_RANGE(0x60, 0x61) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2270 | 2330 | |
| 2271 | 2331 | AM_RANGE(0x80, 0x83) AM_WRITE(ddenlovr_palette_base_w) |
| 2272 | 2332 | AM_RANGE(0x84, 0x87) AM_WRITE(ddenlovr_palette_mask_w) |
| r243094 | r243095 | |
| 2303 | 2363 | |
| 2304 | 2364 | AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 2305 | 2365 | AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 2306 | | AM_RANGE(0x60, 0x61) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2366 | AM_RANGE(0x60, 0x61) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2307 | 2367 | |
| 2308 | 2368 | AM_RANGE(0x80, 0x83) AM_WRITE(ddenlovr_palette_base_w) |
| 2309 | 2369 | AM_RANGE(0x84, 0x87) AM_WRITE(ddenlovr_palette_mask_w) |
| r243094 | r243095 | |
| 2457 | 2517 | AM_RANGE(0x02, 0x02) AM_READNOP // read just before port 00 |
| 2458 | 2518 | AM_RANGE(0x04, 0x04) AM_NOP // read only once at the start |
| 2459 | 2519 | AM_RANGE(0x06, 0x06) AM_WRITENOP // almost always 1, sometimes 0 |
| 2460 | | AM_RANGE(0x08, 0x09) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2520 | AM_RANGE(0x08, 0x09) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2461 | 2521 | AM_RANGE(0x0c, 0x0c) AM_DEVWRITE("aysnd", ay8910_device, data_w) |
| 2462 | 2522 | AM_RANGE(0x0e, 0x0e) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| 2463 | 2523 | ADDRESS_MAP_END |
| r243094 | r243095 | |
| 2740 | 2800 | AM_RANGE(0x93, 0x93) AM_WRITE(hanakanz_coincounter_w) |
| 2741 | 2801 | AM_RANGE(0x94, 0x94) AM_WRITE(hanakanz_keyb_w) |
| 2742 | 2802 | AM_RANGE(0x96, 0x96) AM_READ(hanakanz_rand_r) |
| 2743 | | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2803 | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2744 | 2804 | AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 2745 | 2805 | AM_RANGE(0xe0, 0xef) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 2746 | 2806 | ADDRESS_MAP_END |
| r243094 | r243095 | |
| 2756 | 2816 | AM_RANGE(0x80, 0x80) AM_WRITE(hanakanz_blitter_data_w) |
| 2757 | 2817 | AM_RANGE(0x81, 0x81) AM_WRITE(hanakanz_palette_w) |
| 2758 | 2818 | AM_RANGE(0x83, 0x84) AM_READ(hanakanz_gfxrom_r) |
| 2759 | | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2819 | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2760 | 2820 | AM_RANGE(0xb0, 0xb0) AM_READ_PORT("SYSTEM") |
| 2761 | 2821 | AM_RANGE(0xb1, 0xb2) AM_READ(hanakanz_keyb_r) |
| 2762 | 2822 | AM_RANGE(0xb3, 0xb3) AM_WRITE(hanakanz_coincounter_w) |
| r243094 | r243095 | |
| 2778 | 2838 | AM_RANGE(0x80, 0x80) AM_WRITE(hanakanz_blitter_data_w) |
| 2779 | 2839 | AM_RANGE(0x81, 0x81) AM_WRITE(hanakanz_palette_w) |
| 2780 | 2840 | AM_RANGE(0x83, 0x84) AM_READ(hanakanz_gfxrom_r) |
| 2781 | | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2841 | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2782 | 2842 | AM_RANGE(0xb0, 0xb0) AM_READ_PORT("SYSTEM") |
| 2783 | 2843 | // AM_RANGE(0xb1, 0xb2) AM_READ(hanakanz_keyb_r) |
| 2784 | 2844 | AM_RANGE(0xb1, 0xb1) AM_READ_PORT("KEYB0") |
| r243094 | r243095 | |
| 2802 | 2862 | AM_RANGE(0x80, 0x80) AM_WRITE(hanakanz_blitter_data_w) |
| 2803 | 2863 | AM_RANGE(0x81, 0x81) AM_WRITE(hanakanz_palette_w) |
| 2804 | 2864 | AM_RANGE(0x83, 0x84) AM_READ(hanakanz_gfxrom_r) |
| 2805 | | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2865 | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2806 | 2866 | AM_RANGE(0x90, 0x90) AM_READ_PORT("SYSTEM") |
| 2807 | 2867 | // AM_RANGE(0x91, 0x91) AM_READ(hanakanz_keyb_r) |
| 2808 | 2868 | AM_RANGE(0x91, 0x91) AM_READ_PORT("KEYB0") |
| r243094 | r243095 | |
| 2841 | 2901 | AM_RANGE(0x94, 0x94) AM_READ_PORT("SYSTEM") |
| 2842 | 2902 | AM_RANGE(0x95, 0x96) AM_READ(hanakanz_keyb_r) |
| 2843 | 2903 | AM_RANGE(0x97, 0x97) AM_WRITE(hanakanz_coincounter_w) |
| 2844 | | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 2904 | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2845 | 2905 | AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 2846 | 2906 | AM_RANGE(0xe0, 0xef) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 2847 | 2907 | ADDRESS_MAP_END |
| r243094 | r243095 | |
| 2969 | 3029 | AM_RANGE(0x63, 0x63) AM_MIRROR(0xff00) AM_READ_PORT("DSW4") |
| 2970 | 3030 | AM_RANGE(0x64, 0x64) AM_MIRROR(0xff00) AM_READ_PORT("DSW5") // DSW 1-4 high bits |
| 2971 | 3031 | AM_RANGE(0x80, 0x80) AM_MIRROR(0xff00) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 2972 | | AM_RANGE(0xa0, 0xa1) AM_MIRROR(0xff00) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3032 | AM_RANGE(0xa0, 0xa1) AM_MIRROR(0xff00) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 2973 | 3033 | AM_RANGE(0xc0, 0xcf) AM_MIRROR(0xff00) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 2974 | 3034 | AM_RANGE(0xe0, 0xe1) AM_MIRROR(0xff00) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) |
| 2975 | 3035 | ADDRESS_MAP_END |
| r243094 | r243095 | |
| 3078 | 3138 | AM_RANGE(0x22, 0x22) AM_READ(mjmyster_coins_r) |
| 3079 | 3139 | AM_RANGE(0x23, 0x23) AM_READ(mjmyster_keyb_r) |
| 3080 | 3140 | AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3081 | | AM_RANGE(0x42, 0x43) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3141 | AM_RANGE(0x42, 0x43) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3082 | 3142 | AM_RANGE(0x44, 0x44) AM_DEVREAD("aysnd", ay8910_device, data_r) |
| 3083 | 3143 | AM_RANGE(0x46, 0x46) AM_DEVWRITE("aysnd", ay8910_device, data_w) |
| 3084 | 3144 | AM_RANGE(0x48, 0x48) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| r243094 | r243095 | |
| 3243 | 3303 | AM_RANGE(0x03, 0x03) AM_READ(rongrong_gfxrom_r) |
| 3244 | 3304 | AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(mjmyster_rambank_w) |
| 3245 | 3305 | AM_RANGE(0x1e, 0x1e) AM_WRITE(hginga_rombank_w) |
| 3246 | | AM_RANGE(0x22, 0x23) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3306 | AM_RANGE(0x22, 0x23) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3247 | 3307 | AM_RANGE(0x24, 0x24) AM_DEVREAD("aysnd", ay8910_device, data_r) |
| 3248 | 3308 | AM_RANGE(0x26, 0x26) AM_DEVWRITE("aysnd", ay8910_device, data_w) |
| 3249 | 3309 | AM_RANGE(0x28, 0x28) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| r243094 | r243095 | |
| 3366 | 3426 | AM_RANGE(0x61, 0x61) AM_WRITE(hgokou_input_w) |
| 3367 | 3427 | AM_RANGE(0x62, 0x62) AM_READ(hgokou_input_r) |
| 3368 | 3428 | AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3369 | | AM_RANGE(0x82, 0x83) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3429 | AM_RANGE(0x82, 0x83) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3370 | 3430 | AM_RANGE(0x84, 0x84) AM_DEVREAD("aysnd", ay8910_device, data_r) |
| 3371 | 3431 | AM_RANGE(0x86, 0x86) AM_DEVWRITE("aysnd", ay8910_device, data_w) |
| 3372 | 3432 | AM_RANGE(0x88, 0x88) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| r243094 | r243095 | |
| 3409 | 3469 | AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(mjmyster_rambank_w) // ? ack on RTC int |
| 3410 | 3470 | AM_RANGE(0x1e, 0x1e) AM_WRITE(hginga_rombank_w) |
| 3411 | 3471 | AM_RANGE(0x20, 0x20) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3412 | | AM_RANGE(0x22, 0x23) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3472 | AM_RANGE(0x22, 0x23) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3413 | 3473 | AM_RANGE(0x24, 0x24) AM_DEVREAD("aysnd", ay8910_device, data_r) |
| 3414 | 3474 | AM_RANGE(0x26, 0x26) AM_DEVWRITE("aysnd", ay8910_device, data_w) |
| 3415 | 3475 | AM_RANGE(0x28, 0x28) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| r243094 | r243095 | |
| 3500 | 3560 | AM_RANGE(0x1c, 0x1c) AM_READ(hparadis_dsw_r) |
| 3501 | 3561 | AM_RANGE(0x1e, 0x1e) AM_WRITE(hparadis_select_w) |
| 3502 | 3562 | AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3503 | | AM_RANGE(0x60, 0x61) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3563 | AM_RANGE(0x60, 0x61) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3504 | 3564 | AM_RANGE(0x80, 0x83) AM_WRITE(ddenlovr_palette_base_w) |
| 3505 | 3565 | AM_RANGE(0x84, 0x87) AM_WRITE(ddenlovr_palette_mask_w) |
| 3506 | 3566 | AM_RANGE(0x88, 0x8b) AM_WRITE(ddenlovr_transparency_pen_w) |
| r243094 | r243095 | |
| 3546 | 3606 | AM_RANGE(0x22, 0x22) AM_READ(mjmywrld_coins_r) |
| 3547 | 3607 | AM_RANGE(0x23, 0x23) AM_READ(mjmyster_keyb_r) |
| 3548 | 3608 | AM_RANGE(0x40, 0x40) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3549 | | AM_RANGE(0x42, 0x43) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3609 | AM_RANGE(0x42, 0x43) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3550 | 3610 | AM_RANGE(0x44, 0x44) AM_DEVREAD("aysnd", ay8910_device, data_r) |
| 3551 | 3611 | AM_RANGE(0x46, 0x46) AM_DEVWRITE("aysnd", ay8910_device, data_w) |
| 3552 | 3612 | AM_RANGE(0x48, 0x48) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| r243094 | r243095 | |
| 3646 | 3706 | AM_RANGE(0xe00308, 0xe00309) AM_WRITE(ddenlovr_coincounter_0_w) // Coin Counters |
| 3647 | 3707 | AM_RANGE(0xe0030c, 0xe0030d) AM_WRITE(ddenlovr_coincounter_1_w) // |
| 3648 | 3708 | |
| 3649 | | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) |
| 3709 | AM_RANGE(0xe00400, 0xe00403) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff) |
| 3650 | 3710 | AM_RANGE(0xe00500, 0xe0051f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write, 0x00ff) |
| 3651 | 3711 | AM_RANGE(0xe00600, 0xe00603) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff) |
| 3652 | 3712 | AM_RANGE(0xe00604, 0xe00605) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff) |
| r243094 | r243095 | |
| 3737 | 3797 | AM_RANGE(0x0100, 0x0100) AM_READ_PORT("DSW1") |
| 3738 | 3798 | AM_RANGE(0x0181, 0x0181) AM_WRITENOP // ? int. enable |
| 3739 | 3799 | AM_RANGE(0x0184, 0x0184) AM_WRITE(mjflove_coincounter_w) |
| 3740 | | AM_RANGE(0x0200, 0x0201) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3800 | AM_RANGE(0x0200, 0x0201) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3741 | 3801 | AM_RANGE(0x0280, 0x028f) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 3742 | 3802 | AM_RANGE(0x0300, 0x0301) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) |
| 3743 | 3803 | AM_RANGE(0x0380, 0x0380) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| r243094 | r243095 | |
| 3778 | 3838 | AM_RANGE(0x60, 0x60) AM_WRITE(hanakanz_blitter_data_w) |
| 3779 | 3839 | AM_RANGE(0x61, 0x61) AM_WRITE(hanakanz_palette_w) |
| 3780 | 3840 | AM_RANGE(0x63, 0x64) AM_READ(hanakanz_gfxrom_r) |
| 3781 | | AM_RANGE(0x80, 0x81) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3841 | AM_RANGE(0x80, 0x81) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3782 | 3842 | AM_RANGE(0xa0, 0xa0) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3783 | 3843 | AM_RANGE(0xc0, 0xcf) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 3784 | 3844 | ADDRESS_MAP_END |
| r243094 | r243095 | |
| 3841 | 3901 | static ADDRESS_MAP_START( sryudens_portmap, AS_IO, 8, ddenlovr_state ) |
| 3842 | 3902 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 3843 | 3903 | AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3844 | | AM_RANGE(0x02, 0x03) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3904 | AM_RANGE(0x02, 0x03) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3845 | 3905 | AM_RANGE(0x04, 0x05) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) |
| 3846 | 3906 | AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(sryudens_rambank_w) // ? ack on RTC int |
| 3847 | 3907 | AM_RANGE(0x1e, 0x1e) AM_WRITE(mjflove_rombank_w) |
| r243094 | r243095 | |
| 3928 | 3988 | AM_RANGE(0x70, 0x70) AM_WRITE(quizchq_oki_bank_w) |
| 3929 | 3989 | AM_RANGE(0x80, 0x80) AM_RAM |
| 3930 | 3990 | AM_RANGE(0x90, 0x90) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 3931 | | AM_RANGE(0x92, 0x93) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 3991 | AM_RANGE(0x92, 0x93) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 3932 | 3992 | AM_RANGE(0x94, 0x95) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) |
| 3933 | 3993 | ADDRESS_MAP_END |
| 3934 | 3994 | |
| r243094 | r243095 | |
| 4000 | 4060 | AM_RANGE(0x38, 0x38) AM_READNOP // ? ack or watchdog |
| 4001 | 4061 | AM_RANGE(0x40, 0x41) AM_WRITE(mjflove_blitter_w) |
| 4002 | 4062 | AM_RANGE(0x43, 0x43) AM_READ(rongrong_gfxrom_r) |
| 4003 | | AM_RANGE(0x50, 0x51) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 4063 | AM_RANGE(0x50, 0x51) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 4004 | 4064 | AM_RANGE(0x54, 0x54) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 4005 | 4065 | AM_RANGE(0x58, 0x58) AM_DEVWRITE("aysnd", ay8910_device, address_w) |
| 4006 | 4066 | AM_RANGE(0x5c, 0x5c) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w) // dsw |
| r243094 | r243095 | |
| 4154 | 4214 | AM_RANGE( 0x40, 0x40 ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // AY8910 |
| 4155 | 4215 | AM_RANGE( 0x42, 0x42 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // |
| 4156 | 4216 | AM_RANGE( 0x44, 0x44 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // |
| 4157 | | AM_RANGE( 0x46, 0x47 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 4217 | AM_RANGE( 0x46, 0x47 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 4158 | 4218 | AM_RANGE( 0x80, 0x8f ) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 4159 | 4219 | AM_RANGE( 0xa0, 0xa3 ) AM_WRITE(ddenlovr_palette_base_w) // ddenlovr mixer chip |
| 4160 | 4220 | AM_RANGE( 0xa4, 0xa7 ) AM_WRITE(ddenlovr_palette_mask_w) |
| r243094 | r243095 | |
| 4226 | 4286 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(ddenlovr_state, htengoku_dsw_w)) |
| 4227 | 4287 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4228 | 4288 | |
| 4229 | | MCFG_SOUND_ADD("ymsnd", YM2413, 3579545) |
| 4289 | MCFG_SOUND_ADD("ym2413", YM2413, 3579545) |
| 4230 | 4290 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 4231 | 4291 | |
| 4232 | 4292 | /* devices */ |
| r243094 | r243095 | |
| 4341 | 4401 | AM_RANGE(0x42, 0x44) AM_READ(hanakanz_gfxrom_r) |
| 4342 | 4402 | AM_RANGE(0x8a, 0x8b) AM_READ(daimyojn_year_hack_r) // ? |
| 4343 | 4403 | AM_RANGE(0x80, 0x8f) AM_DEVREADWRITE("rtc", msm6242_device, read, write) |
| 4344 | | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ymsnd", ym2413_device, write) |
| 4404 | AM_RANGE(0xa0, 0xa1) AM_DEVWRITE("ym2413", ym2413_device, write) |
| 4345 | 4405 | AM_RANGE(0xa2, 0xa2) AM_DEVREADWRITE("oki", okim6295_device, read, write) |
| 4346 | 4406 | AM_RANGE(0xa8, 0xa8) AM_READ_PORT("SYSTEM") |
| 4347 | 4407 | AM_RANGE(0xaa, 0xaa) AM_READ(daimyojn_keyb1_r) |
| r243094 | r243095 | |
| 9301 | 9361 | save_item(NAME(m_mjflove_irq_cause)); |
| 9302 | 9362 | save_item(NAME(m_daimyojn_palette_sel)); |
| 9303 | 9363 | save_item(NAME(m_palram)); |
| 9304 | | |
| 9305 | | save_item(NAME(m_irq_count)); |
| 9306 | 9364 | } |
| 9307 | 9365 | |
| 9308 | 9366 | MACHINE_RESET_MEMBER(ddenlovr_state,ddenlovr) |
| r243094 | r243095 | |
| 9323 | 9381 | m_hginga_rombank = 0; |
| 9324 | 9382 | m_mjflove_irq_cause = 0; |
| 9325 | 9383 | m_daimyojn_palette_sel = 0; |
| 9326 | | m_irq_count = 0; |
| 9327 | 9384 | |
| 9328 | 9385 | m_quiz365_protection[0] = 0; |
| 9329 | 9386 | m_quiz365_protection[1] = 0; |
| r243094 | r243095 | |
| 9435 | 9492 | /* sound hardware */ |
| 9436 | 9493 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 9437 | 9494 | |
| 9438 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8) |
| 9495 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) |
| 9439 | 9496 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 9440 | 9497 | |
| 9441 | 9498 | MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 16) // or /8 ? |
| r243094 | r243095 | |
| 9553 | 9610 | /* sound hardware */ |
| 9554 | 9611 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 9555 | 9612 | |
| 9556 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz/8) // 3.579545Mhz, verified |
| 9613 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz/8) // 3.579545Mhz, verified |
| 9557 | 9614 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.50) |
| 9558 | 9615 | |
| 9559 | 9616 | MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz/28, OKIM6295_PIN7_HIGH) // clock frequency verified 1.022MHz, pin 7 verified high |
| r243094 | r243095 | |
| 9637 | 9694 | /* sound hardware */ |
| 9638 | 9695 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 9639 | 9696 | |
| 9640 | | MCFG_SOUND_ADD("ymsnd", YM2413, 3579545) |
| 9697 | MCFG_SOUND_ADD("ym2413", YM2413, 3579545) |
| 9641 | 9698 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 9642 | 9699 | |
| 9643 | 9700 | MCFG_SOUND_ADD("aysnd", AY8910, 3579545) |
| r243094 | r243095 | |
| 9714 | 9771 | /* sound hardware */ |
| 9715 | 9772 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 9716 | 9773 | |
| 9717 | | MCFG_SOUND_ADD("ymsnd", YM2413, 3579545) |
| 9774 | MCFG_SOUND_ADD("ym2413", YM2413, 3579545) |
| 9718 | 9775 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 9719 | 9776 | |
| 9720 | 9777 | MCFG_OKIM6295_ADD("oki", 1022720, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified |
| r243094 | r243095 | |
| 9760 | 9817 | /* sound hardware */ |
| 9761 | 9818 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 9762 | 9819 | |
| 9763 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_37516MHz / 8) |
| 9820 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_37516MHz / 8) |
| 9764 | 9821 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 9765 | 9822 | |
| 9766 | 9823 | MCFG_OKIM6295_ADD("oki", XTAL_28_37516MHz / 28, OKIM6295_PIN7_HIGH) |
| r243094 | r243095 | |
| 10129 | 10186 | /* sound hardware */ |
| 10130 | 10187 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 10131 | 10188 | |
| 10132 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8) |
| 10189 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) |
| 10133 | 10190 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 10134 | 10191 | |
| 10135 | 10192 | MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz / 28, OKIM6295_PIN7_HIGH) |
| r243094 | r243095 | |
| 10172 | 10229 | /* sound hardware */ |
| 10173 | 10230 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 10174 | 10231 | |
| 10175 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8) |
| 10232 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) |
| 10176 | 10233 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 10177 | 10234 | |
| 10178 | 10235 | MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8) |
| r243094 | r243095 | |
| 10219 | 10276 | /* sound hardware */ |
| 10220 | 10277 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 10221 | 10278 | |
| 10222 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8) |
| 10279 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) |
| 10223 | 10280 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 10224 | 10281 | |
| 10225 | 10282 | MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8) |
| r243094 | r243095 | |
| 10286 | 10343 | /* sound hardware */ |
| 10287 | 10344 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 10288 | 10345 | |
| 10289 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8) |
| 10346 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) |
| 10290 | 10347 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 10291 | 10348 | |
| 10292 | 10349 | MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8) |
| r243094 | r243095 | |
| 10336 | 10393 | /* sound hardware */ |
| 10337 | 10394 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 10338 | 10395 | |
| 10339 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_28_63636MHz / 8) |
| 10396 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) |
| 10340 | 10397 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 10341 | 10398 | |
| 10342 | 10399 | MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz / 28, OKIM6295_PIN7_HIGH) |
trunk/src/mame/drivers/dynax.c
| r243094 | r243095 | |
| 79 | 79 | #include "sound/ay8910.h" |
| 80 | 80 | #include "sound/2203intf.h" |
| 81 | 81 | #include "sound/3812intf.h" |
| 82 | | #include "sound/msm5205.h" |
| 83 | | #include "sound/2413intf.h" |
| 84 | 82 | #include "machine/nvram.h" |
| 85 | 83 | #include "rendlay.h" |
| 86 | 84 | |
| r243094 | r243095 | |
| 534 | 532 | AM_RANGE( 0x74, 0x74 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack |
| 535 | 533 | AM_RANGE( 0x76, 0x76 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit) |
| 536 | 534 | AM_RANGE( 0x77, 0x77 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to |
| 537 | | AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) // 2 x DSW |
| 535 | AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW |
| 538 | 536 | AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) // AY8910 |
| 539 | 537 | // AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP // CRT Controller |
| 540 | 538 | // AM_RANGE( 0x7d, 0x7d ) AM_WRITENOP // |
| r243094 | r243095 | |
| 556 | 554 | AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW2") // DSW3 |
| 557 | 555 | AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 558 | 556 | AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 559 | | AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 557 | AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 560 | 558 | AM_RANGE( 0x36, 0x36 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910, DSW1 |
| 561 | 559 | AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910 |
| 562 | 560 | AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // |
| r243094 | r243095 | |
| 640 | 638 | |
| 641 | 639 | AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 642 | 640 | AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 643 | | AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 641 | AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 644 | 642 | |
| 645 | 643 | AM_RANGE( 0x36, 0x36 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910, DSW1 |
| 646 | 644 | AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910 |
| r243094 | r243095 | |
| 780 | 778 | AM_RANGE( 0x11, 0x17 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter |
| 781 | 779 | AM_RANGE( 0x20, 0x20 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 782 | 780 | AM_RANGE( 0x22, 0x22 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 783 | | AM_RANGE( 0x24, 0x25 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 781 | AM_RANGE( 0x24, 0x25 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 784 | 782 | AM_RANGE( 0x28, 0x28 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910 |
| 785 | 783 | AM_RANGE( 0x2a, 0x2a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // |
| 786 | 784 | AM_RANGE( 0x48, 0x48 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X |
| r243094 | r243095 | |
| 819 | 817 | AM_RANGE( 0x26, 0x26 ) AM_READ_PORT("DSW1") // DSW3 |
| 820 | 818 | AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 821 | 819 | AM_RANGE( 0x32, 0x32 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 822 | | AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 820 | AM_RANGE( 0x34, 0x35 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 823 | 821 | AM_RANGE( 0x38, 0x38 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910 |
| 824 | 822 | AM_RANGE( 0x3a, 0x3a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // |
| 825 | 823 | AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen |
| r243094 | r243095 | |
| 847 | 845 | static ADDRESS_MAP_START( sprtmtch_io_map, AS_IO, 8, dynax_state ) |
| 848 | 846 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 849 | 847 | AM_RANGE( 0x01, 0x07 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter |
| 850 | | AM_RANGE( 0x10, 0x11 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) // 2 x DSW |
| 848 | AM_RANGE( 0x10, 0x11 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW |
| 851 | 849 | // AM_RANGE( 0x12, 0x12 ) AM_WRITENOP // CRT Controller |
| 852 | 850 | // AM_RANGE( 0x13, 0x13 ) AM_WRITENOP // CRT Controller |
| 853 | 851 | AM_RANGE( 0x20, 0x20 ) AM_READ_PORT("P1") // P1 |
| r243094 | r243095 | |
| 893 | 891 | AM_RANGE( 0x63, 0x63 ) AM_READ(hanamai_keyboard_0_r) // P1 |
| 894 | 892 | AM_RANGE( 0x64, 0x64 ) AM_READ_PORT("DSW0") // DSW |
| 895 | 893 | AM_RANGE( 0x67, 0x67 ) AM_READ_PORT("DSW1") // DSW |
| 896 | | AM_RANGE( 0x70, 0x71 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 894 | AM_RANGE( 0x70, 0x71 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 897 | 895 | // AM_RANGE( 0x80, 0x80 ) AM_WRITENOP // IRQ ack? |
| 898 | 896 | ADDRESS_MAP_END |
| 899 | 897 | |
| r243094 | r243095 | |
| 902 | 900 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 903 | 901 | AM_RANGE( 0x00, 0x00 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 904 | 902 | AM_RANGE( 0x02, 0x02 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 905 | | AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 903 | AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 906 | 904 | AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910 |
| 907 | 905 | AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // |
| 908 | 906 | AM_RANGE( 0x10, 0x10 ) AM_WRITE(hanamai_keyboard_w) // keyboard row select |
| r243094 | r243095 | |
| 1024 | 1022 | AM_RANGE( 0x10, 0x10 ) AM_WRITE(jantouki_sound_vblank_ack_w) // VBlank IRQ Ack |
| 1025 | 1023 | AM_RANGE( 0x21, 0x21 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910 |
| 1026 | 1024 | AM_RANGE( 0x22, 0x23 ) AM_DEVWRITE("aysnd", ay8910_device, data_address_w) // |
| 1027 | | AM_RANGE( 0x28, 0x29 ) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write) // |
| 1025 | AM_RANGE( 0x28, 0x29 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // |
| 1028 | 1026 | AM_RANGE( 0x30, 0x30 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 1029 | 1027 | AM_RANGE( 0x40, 0x40 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 1030 | 1028 | AM_RANGE( 0x50, 0x50 ) AM_READ(jantouki_soundlatch_status_r) // Soundlatch status |
| r243094 | r243095 | |
| 1060 | 1058 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 1061 | 1059 | AM_RANGE( 0x00, 0x00 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset |
| 1062 | 1060 | AM_RANGE( 0x02, 0x02 ) AM_WRITE(adpcm_data_w) // MSM5205 data |
| 1063 | | AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 1061 | AM_RANGE( 0x04, 0x05 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 1064 | 1062 | AM_RANGE( 0x08, 0x08 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // AY8910 |
| 1065 | 1063 | AM_RANGE( 0x0a, 0x0a ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // |
| 1066 | 1064 | AM_RANGE( 0x11, 0x12 ) AM_WRITE(mjelctrn_blitter_ack_w) //? |
| r243094 | r243095 | |
| 1339 | 1337 | AM_RANGE( 0x10000, 0x10000 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910 |
| 1340 | 1338 | AM_RANGE( 0x10008, 0x10008 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) // |
| 1341 | 1339 | AM_RANGE( 0x10010, 0x10010 ) AM_DEVWRITE("aysnd", ay8910_device, address_w) // |
| 1342 | | AM_RANGE( 0x10020, 0x10021 ) AM_DEVWRITE("ymsnd", ym2413_device, write) // |
| 1340 | AM_RANGE( 0x10020, 0x10021 ) AM_DEVWRITE("ym2413", ym2413_device, write) // |
| 1343 | 1341 | AM_RANGE( 0x10040, 0x10040 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen |
| 1344 | 1342 | AM_RANGE( 0x10044, 0x10044 ) AM_WRITE(tenkai_blit_dest_w) // Destination Layer |
| 1345 | 1343 | AM_RANGE( 0x10048, 0x10048 ) AM_WRITE(tenkai_blit_palette23_w) // Layers Palettes |
| r243094 | r243095 | |
| 1481 | 1479 | case 0x8050: // CRT controller |
| 1482 | 1480 | case 0x8051: return; |
| 1483 | 1481 | |
| 1484 | | case 0x8070: downcast<ym2413_device *>(m_ymsnd)->register_port_w(space, 0, data); return; |
| 1485 | | case 0x8071: downcast<ym2413_device *>(m_ymsnd)->data_port_w(space, 0, data); return; |
| 1482 | case 0x8070: m_ym2413->register_port_w(space, 0, data); return; |
| 1483 | case 0x8071: m_ym2413->data_port_w(space, 0, data); return; |
| 1486 | 1484 | |
| 1487 | 1485 | case 0x8060: m_keyb = data; return; |
| 1488 | 1486 | |
| r243094 | r243095 | |
| 3967 | 3965 | |
| 3968 | 3966 | MACHINE_START_MEMBER(dynax_state,dynax) |
| 3969 | 3967 | { |
| 3970 | | m_ymsnd = machine().device("ymsnd"); |
| 3971 | | |
| 3972 | 3968 | save_item(NAME(m_sound_irq)); |
| 3973 | 3969 | save_item(NAME(m_vblank_irq)); |
| 3974 | 3970 | save_item(NAME(m_blitter_irq)); |
| r243094 | r243095 | |
| 4093 | 4089 | MCFG_SOUND_ADD("aysnd", AY8910, 22000000 / 8) |
| 4094 | 4090 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4095 | 4091 | |
| 4096 | | MCFG_SOUND_ADD("ymsnd", YM2203, 22000000 / 8) |
| 4092 | MCFG_SOUND_ADD("ym2203", YM2203, 22000000 / 8) |
| 4097 | 4093 | MCFG_YM2203_IRQ_HANDLER(WRITELINE(dynax_state, sprtmtch_sound_callback)) |
| 4098 | 4094 | MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW1")) |
| 4099 | 4095 | MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW0")) |
| r243094 | r243095 | |
| 4147 | 4143 | MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0")) |
| 4148 | 4144 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4149 | 4145 | |
| 4150 | | MCFG_SOUND_ADD("ymsnd", YM2413, 3579545) |
| 4146 | MCFG_SOUND_ADD("ym2413", YM2413, 3579545) |
| 4151 | 4147 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 4152 | 4148 | |
| 4153 | 4149 | MCFG_SOUND_ADD("msm", MSM5205, 384000) |
| r243094 | r243095 | |
| 4194 | 4190 | MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0")) |
| 4195 | 4191 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4196 | 4192 | |
| 4197 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz ) |
| 4193 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_3_579545MHz ) |
| 4198 | 4194 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 4199 | 4195 | |
| 4200 | 4196 | MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz ) |
| r243094 | r243095 | |
| 4238 | 4234 | /* sound hardware */ |
| 4239 | 4235 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 4240 | 4236 | |
| 4241 | | MCFG_SOUND_ADD("ymsnd", YM2203, 22000000 / 8) |
| 4237 | MCFG_SOUND_ADD("ym2203", YM2203, 22000000 / 8) |
| 4242 | 4238 | MCFG_YM2203_IRQ_HANDLER(WRITELINE(dynax_state, sprtmtch_sound_callback)) |
| 4243 | 4239 | MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0")) |
| 4244 | 4240 | MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1")) |
| r243094 | r243095 | |
| 4283 | 4279 | /* sound hardware */ |
| 4284 | 4280 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 4285 | 4281 | |
| 4286 | | MCFG_SOUND_ADD("ymsnd", YM2413, 24000000/6) |
| 4282 | MCFG_SOUND_ADD("ym2413", YM2413, 24000000/6) |
| 4287 | 4283 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 4288 | 4284 | MACHINE_CONFIG_END |
| 4289 | 4285 | |
| r243094 | r243095 | |
| 4382 | 4378 | |
| 4383 | 4379 | membank("bank1")->configure_entries(0, 0x10, &MAIN[0x8000], 0x8000); |
| 4384 | 4380 | membank("bank2")->configure_entries(0, 12, &SOUND[0x8000], 0x8000); |
| 4385 | | |
| 4386 | | m_top_scr = machine().device("top"); |
| 4387 | | m_bot_scr = machine().device("bottom"); |
| 4388 | | |
| 4381 | |
| 4389 | 4382 | MACHINE_START_CALL_MEMBER(dynax); |
| 4390 | 4383 | } |
| 4391 | 4384 | |
| r243094 | r243095 | |
| 4437 | 4430 | MCFG_SOUND_ADD("aysnd", AY8910, 22000000 / 8) |
| 4438 | 4431 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4439 | 4432 | |
| 4440 | | MCFG_SOUND_ADD("ymsnd", YM2203, 22000000 / 8) |
| 4433 | MCFG_SOUND_ADD("ym2203", YM2203, 22000000 / 8) |
| 4441 | 4434 | MCFG_YM2203_IRQ_HANDLER(WRITELINE(dynax_state, jantouki_sound_callback)) |
| 4442 | 4435 | MCFG_SOUND_ROUTE(0, "mono", 0.20) |
| 4443 | 4436 | MCFG_SOUND_ROUTE(1, "mono", 0.20) |
| r243094 | r243095 | |
| 4616 | 4609 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(dynax_state, tenkai_dswsel_w)) |
| 4617 | 4610 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4618 | 4611 | |
| 4619 | | MCFG_SOUND_ADD("ymsnd", YM2413, 3579545) |
| 4612 | MCFG_SOUND_ADD("ym2413", YM2413, 3579545) |
| 4620 | 4613 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 4621 | 4614 | |
| 4622 | 4615 | /* devices */ |
| r243094 | r243095 | |
| 4687 | 4680 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(dynax_state, tenkai_dswsel_w)) |
| 4688 | 4681 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) |
| 4689 | 4682 | |
| 4690 | | MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_24MHz / 8) // ? |
| 4683 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_24MHz / 8) // ? |
| 4691 | 4684 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 4692 | 4685 | MACHINE_CONFIG_END |
| 4693 | 4686 | |
trunk/src/mame/drivers/model3.c
| r243094 | r243095 | |
| 664 | 664 | #include "machine/nvram.h" |
| 665 | 665 | #include "includes/model3.h" |
| 666 | 666 | |
| 667 | //#define DECRYPT_ANALYSIS_HACKS |
| 667 | 668 | |
| 669 | #ifdef DECRYPT_ANALYSIS_HACKS |
| 670 | int readcount = 0; |
| 671 | int segcount = 0; |
| 672 | #endif |
| 673 | |
| 668 | 674 | void model3_state::update_irq_state() |
| 669 | 675 | { |
| 670 | 676 | if ((m_irq_enable & m_irq_state) || m_scsi_irq_state) |
| r243094 | r243095 | |
| 1673 | 1679 | } |
| 1674 | 1680 | |
| 1675 | 1681 | |
| 1676 | | static const UINT16 vs299_prot_data[] = |
| 1677 | | { |
| 1678 | | 0xc800, 0x4a20, 0x5041, 0x4e41, 0x4920, 0x4154, 0x594c, 0x4220, |
| 1679 | | 0x4152, 0x4953, 0x204c, 0x5241, 0x4547, 0x544e, 0x4e49, 0x2041, |
| 1680 | | 0x4547, 0x4d52, 0x4e41, 0x2059, 0x4e45, 0x4c47, 0x4e41, 0x2044, |
| 1681 | | 0x454e, 0x4854, 0x5245, 0x414c, 0x444e, 0x2053, 0x5246, 0x4e41, |
| 1682 | | 0x4543, 0x4320, 0x4c4f, 0x4d4f, 0x4942, 0x2041, 0x4150, 0x4152, |
| 1683 | | 0x5547, 0x5941, 0x4220, 0x4c55, 0x4147, 0x4952, 0x2041, 0x5053, |
| 1684 | | 0x4941, 0x204e, 0x5243, 0x414f, 0x4954, 0x2041, 0x4542, 0x474c, |
| 1685 | | 0x5549, 0x204d, 0x494e, 0x4547, 0x4952, 0x2041, 0x4153, 0x4455, |
| 1686 | | 0x2049, 0x4f4b, 0x4552, 0x2041, 0x4544, 0x4d4e, 0x5241, 0x204b, |
| 1687 | | 0x4f52, 0x414d, 0x494e, 0x2041, 0x4353, 0x544f, 0x414c, 0x444e, |
| 1688 | | 0x5520, 0x4153, 0x5320, 0x554f, 0x4854, 0x4641, 0x4952, 0x4143, |
| 1689 | | 0x4d20, 0x5845, 0x4349, 0x204f, 0x5559, 0x4f47, 0x4c53, 0x5641, |
| 1690 | | 0x4149, 0x4620, 0x5f43, 0x4553, 0x4147 |
| 1691 | | }; |
| 1692 | 1682 | |
| 1693 | | static const UINT16 swt_prot_data[] = |
| 1694 | | { |
| 1695 | | 0xffff, |
| 1696 | | 0x3d3d, 0x3d3d, 0x203d, 0x5453, 0x5241, 0x5720, 0x5241, 0x2053, |
| 1697 | | 0x3d3d, 0x3d3d, 0x0a3d, 0x6f43, 0x7970, 0x6952, 0x6867, 0x2074, |
| 1698 | | 0x4553, 0x4147, 0x4520, 0x746e, 0x7265, 0x7270, 0x7369, 0x7365, |
| 1699 | | 0x202c, 0x744c, 0x2e64, 0x410a, 0x756d, 0x6573, 0x656d, 0x746e, |
| 1700 | | 0x5220, 0x4426, 0x4420, 0x7065, 0x2e74, 0x2320, 0x3231, 0x4b0a, |
| 1701 | | 0x7461, 0x7573, 0x6179, 0x7573, 0x4120, 0x646e, 0x206f, 0x2026, |
| 1702 | | 0x614b, 0x6f79, 0x6f6b, 0x5920, 0x6d61, 0x6d61, 0x746f, 0x0a6f, |
| 1703 | | }; |
| 1704 | 1683 | |
| 1705 | 1684 | static const UINT16 fvipers2_prot_data[] = |
| 1706 | 1685 | { |
| r243094 | r243095 | |
| 1737 | 1716 | 0x7470, 0x202e, 0x3123, 0x660a, 0x726f, 0x7420, 0x7365, 0x0a74, |
| 1738 | 1717 | }; |
| 1739 | 1718 | |
| 1740 | | static const UINT16 oceanhun_prot_data[] = |
| 1741 | | { |
| 1742 | | 0x0000, // dummy read |
| 1743 | | 0x3d3d, 0x203d, 0x434f, 0x4145, 0x204e, 0x5548, 0x544e, 0x5245, |
| 1744 | | 0x3d20, 0x3d3d, 0x430a, 0x706f, 0x5279, 0x6769, 0x7468, 0x5320, |
| 1745 | | 0x4745, 0x2041, 0x6e45, 0x6574, 0x7072, 0x6972, 0x6573, 0x2c73, |
| 1746 | | 0x4c20, 0x6474, 0x0a2e, 0x6d41, 0x7375, 0x6d65, 0x6e65, 0x2074, |
| 1747 | | 0x2652, 0x2044, 0x6544, 0x7470, 0x202e, 0x3123, 0x4b0a, 0x7a61, |
| 1748 | | 0x6e75, 0x7261, 0x2069, 0x7354, 0x6b75, 0x6d61, 0x746f, 0x206f, |
| 1749 | | 0x6553, 0x7463, 0x6f69, 0x206e, 0x614d, 0x616e, 0x6567, 0x0a72 |
| 1750 | | }; |
| 1751 | | /* |
| 1752 | | dirtdvls: first 2 words read are discarded, then every other word |
| 1753 | | is written to char RAM starting at f1013400 (in between words are |
| 1754 | | discarded). |
| 1755 | | */ |
| 1756 | 1719 | |
| 1720 | |
| 1721 | |
| 1757 | 1722 | READ64_MEMBER(model3_state::model3_security_r) |
| 1758 | 1723 | { |
| 1759 | 1724 | UINT64 retvalue = U64(0xffffffffffffffff); |
| r243094 | r243095 | |
| 1763 | 1728 | case 0x00 / 8: retvalue = 0; break; /* status */ |
| 1764 | 1729 | case 0x1c/8: /* security board data read */ |
| 1765 | 1730 | { |
| 1766 | | if (core_stricmp(machine().system().name, "vs299") == 0 || |
| 1767 | | core_stricmp(machine().system().name, "vs2v991") == 0) |
| 1731 | #ifdef DECRYPT_ANALYSIS_HACKS |
| 1732 | readcount += 2; |
| 1733 | 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); |
| 1734 | #endif |
| 1735 | |
| 1736 | if (core_stricmp(machine().system().name, "fvipers2") == 0) |
| 1768 | 1737 | { |
| 1769 | | retvalue = (UINT64)vs299_prot_data[m_prot_data_ptr++] << 48; |
| 1770 | | } |
| 1771 | | else if (core_stricmp(machine().system().name, "swtrilgy") == 0 || |
| 1772 | | core_stricmp(machine().system().name, "swtrilgya") == 0) |
| 1773 | | { |
| 1774 | | UINT64 data = (UINT64)swt_prot_data[m_prot_data_ptr++] << 16; |
| 1775 | | if (m_prot_data_ptr > 0x38) |
| 1776 | | { |
| 1777 | | m_prot_data_ptr = 0; |
| 1778 | | } |
| 1779 | | retvalue = data; |
| 1780 | | } |
| 1781 | | else if (core_stricmp(machine().system().name, "fvipers2") == 0) |
| 1782 | | { |
| 1783 | 1738 | UINT64 data = (UINT64)fvipers2_prot_data[m_prot_data_ptr++] << 16; |
| 1784 | 1739 | if (m_prot_data_ptr >= 0x41) |
| 1785 | 1740 | { |
| r243094 | r243095 | |
| 1807 | 1762 | } |
| 1808 | 1763 | retvalue = data; |
| 1809 | 1764 | } |
| 1810 | | else if (core_stricmp(machine().system().name, "oceanhun") == 0) |
| 1811 | | { |
| 1812 | | UINT64 data = (UINT64)oceanhun_prot_data[m_prot_data_ptr++] << 16; |
| 1813 | | if (m_prot_data_ptr >= 58) |
| 1814 | | { |
| 1815 | | m_prot_data_ptr = 0; |
| 1816 | | } |
| 1817 | | retvalue = data; |
| 1818 | | } |
| 1819 | 1765 | else |
| 1820 | 1766 | { |
| 1821 | 1767 | retvalue = 0; |
| r243094 | r243095 | |
| 1823 | 1769 | break; |
| 1824 | 1770 | } |
| 1825 | 1771 | } |
| 1826 | | 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)); |
| 1827 | 1772 | |
| 1828 | 1773 | return retvalue; |
| 1829 | 1774 | } |
| 1830 | 1775 | |
| 1776 | |
| 1777 | |
| 1778 | WRITE64_MEMBER(model3_state::model3_security_w) |
| 1779 | { |
| 1780 | if (offset == 0x10 / 8) |
| 1781 | { |
| 1782 | if (data != 0) |
| 1783 | printf("model3_security_w address isn't 0?\n"); |
| 1784 | |
| 1785 | first_read = 1; |
| 1786 | |
| 1787 | printf("setting base %08x%08x\n", (UINT32)(data >> 32), (UINT32)(data & 0xffffffff)); |
| 1788 | } |
| 1789 | else if (offset == 0x18 / 8) |
| 1790 | { |
| 1791 | UINT16 subkey = data >> (32 + 16); |
| 1792 | subkey = ((subkey & 0xff00) >> 8) | ((subkey & 0x00ff) << 8); // endian swap the sub-key for this hardware |
| 1793 | printf("model3_5881prot_w setting subkey %04x\n", subkey); |
| 1794 | |
| 1795 | #ifdef DECRYPT_ANALYSIS_HACKS // dump out a copy of protection RAM |
| 1796 | FILE* fp2; |
| 1797 | char filename[256]; |
| 1798 | sprintf(filename,"xxxencrypted_%s_part%d", machine().system().name, segcount); |
| 1799 | segcount++; |
| 1800 | readcount = 0; |
| 1801 | fp2 = fopen(filename, "w+b"); |
| 1802 | |
| 1803 | { |
| 1804 | for (int i = 0; i < 0x8000; i++) |
| 1805 | { |
| 1806 | UINT16 dat = m_maincpu->space().read_word((0xf0180000 + 4 * i)); |
| 1807 | UINT8* dst2 = (UINT8*)&dat; |
| 1808 | fwrite(&dst2[1], 1, 1, fp2); |
| 1809 | fwrite(&dst2[0], 1, 1, fp2); |
| 1810 | } |
| 1811 | |
| 1812 | } |
| 1813 | fclose(fp2); |
| 1814 | #endif |
| 1815 | |
| 1816 | } |
| 1817 | else |
| 1818 | { |
| 1819 | 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)); |
| 1820 | } |
| 1821 | } |
| 1822 | |
| 1831 | 1823 | READ64_MEMBER(model3_state::model3_5881prot_r) |
| 1832 | 1824 | { |
| 1833 | 1825 | UINT64 retvalue = U64(0xffffffffffffffff); |
| r243094 | r243095 | |
| 1889 | 1881 | { |
| 1890 | 1882 | 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)); |
| 1891 | 1883 | } |
| 1892 | | |
| 1893 | | |
| 1894 | | |
| 1895 | 1884 | } |
| 1896 | 1885 | |
| 1897 | 1886 | WRITE64_MEMBER(model3_state::daytona2_rombank_w) |
| r243094 | r243095 | |
| 5586 | 5575 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 5587 | 5576 | MACHINE_CONFIG_END |
| 5588 | 5577 | |
| 5589 | | static MACHINE_CONFIG_START( model3_20, model3_state ) |
| 5578 | static MACHINE_CONFIG_START(model3_20, model3_state) |
| 5590 | 5579 | MCFG_CPU_ADD("maincpu", PPC603R, 166000000) |
| 5591 | 5580 | MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */ |
| 5592 | 5581 | MCFG_CPU_PROGRAM_MAP(model3_mem) |
| r243094 | r243095 | |
| 5595 | 5584 | MCFG_CPU_ADD("audiocpu", M68000, 12000000) |
| 5596 | 5585 | MCFG_CPU_PROGRAM_MAP(model3_snd) |
| 5597 | 5586 | |
| 5598 | | MCFG_MACHINE_START_OVERRIDE(model3_state,model3_20) |
| 5599 | | MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_20) |
| 5587 | MCFG_MACHINE_START_OVERRIDE(model3_state, model3_20) |
| 5588 | MCFG_MACHINE_RESET_OVERRIDE(model3_state, model3_20) |
| 5600 | 5589 | |
| 5601 | 5590 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") |
| 5602 | 5591 | MCFG_NVRAM_ADD_1FILL("backup") |
| r243094 | r243095 | |
| 5623 | 5612 | MCFG_SOUND_ROUTE(0, "rspeaker", 2.0) |
| 5624 | 5613 | MACHINE_CONFIG_END |
| 5625 | 5614 | |
| 5626 | | static MACHINE_CONFIG_START( model3_21, model3_state ) |
| 5615 | static MACHINE_CONFIG_DERIVED(model3_20_5881, model3_20) |
| 5616 | MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0) |
| 5617 | MCFG_SET_READ_CALLBACK(model3_state, crypt_read_callback) |
| 5618 | MACHINE_CONFIG_END |
| 5619 | |
| 5620 | static MACHINE_CONFIG_START(model3_21, model3_state) |
| 5627 | 5621 | MCFG_CPU_ADD("maincpu", PPC603R, 166000000) |
| 5628 | 5622 | MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */ |
| 5629 | 5623 | MCFG_CPU_PROGRAM_MAP(model3_mem) |
| r243094 | r243095 | |
| 5632 | 5626 | MCFG_CPU_ADD("audiocpu", M68000, 12000000) |
| 5633 | 5627 | MCFG_CPU_PROGRAM_MAP(model3_snd) |
| 5634 | 5628 | |
| 5635 | | MCFG_MACHINE_START_OVERRIDE(model3_state,model3_21) |
| 5636 | | MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_21) |
| 5629 | MCFG_MACHINE_START_OVERRIDE(model3_state, model3_21) |
| 5630 | MCFG_MACHINE_RESET_OVERRIDE(model3_state, model3_21) |
| 5637 | 5631 | |
| 5638 | 5632 | MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") |
| 5639 | 5633 | MCFG_NVRAM_ADD_1FILL("backup") |
| r243094 | r243095 | |
| 5660 | 5654 | MCFG_SOUND_ROUTE(0, "rspeaker", 2.0) |
| 5661 | 5655 | MACHINE_CONFIG_END |
| 5662 | 5656 | |
| 5657 | |
| 5663 | 5658 | UINT16 model3_state::crypt_read_callback(UINT32 addr) |
| 5664 | 5659 | { |
| 5665 | 5660 | UINT16 dat = 0; |
| r243094 | r243095 | |
| 5670 | 5665 | |
| 5671 | 5666 | // dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8); |
| 5672 | 5667 | // printf("reading %04x\n", dat); |
| 5668 | |
| 5673 | 5669 | return dat; |
| 5674 | 5670 | } |
| 5675 | 5671 | |
| r243094 | r243095 | |
| 5724 | 5720 | } |
| 5725 | 5721 | else |
| 5726 | 5722 | { |
| 5727 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, read64_delegate(FUNC(model3_state::model3_security_r), this) ); |
| 5723 | 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) ); |
| 5728 | 5724 | } |
| 5729 | 5725 | } |
| 5730 | 5726 | |
| r243094 | r243095 | |
| 5891 | 5887 | DRIVER_INIT_MEMBER(model3_state,vs298) |
| 5892 | 5888 | { |
| 5893 | 5889 | DRIVER_INIT_CALL(model3_20); |
| 5890 | DRIVER_INIT_CALL(genprot); |
| 5894 | 5891 | } |
| 5895 | 5892 | |
| 5896 | 5893 | |
| 5897 | | DRIVER_INIT_MEMBER(model3_state,vs2v991) |
| 5898 | | { |
| 5899 | | DRIVER_INIT_CALL(model3_20); |
| 5900 | | } |
| 5901 | 5894 | |
| 5902 | | DRIVER_INIT_MEMBER(model3_state,vs299b) |
| 5903 | | { |
| 5904 | | DRIVER_INIT_CALL(model3_20); |
| 5905 | | } |
| 5906 | 5895 | |
| 5907 | | DRIVER_INIT_MEMBER(model3_state,vs299a) |
| 5908 | | { |
| 5909 | | DRIVER_INIT_CALL(model3_20); |
| 5910 | | } |
| 5911 | | |
| 5912 | 5896 | DRIVER_INIT_MEMBER(model3_state,vs299) |
| 5913 | 5897 | { |
| 5914 | 5898 | DRIVER_INIT_CALL(model3_20); |
| 5899 | DRIVER_INIT_CALL(genprot); |
| 5915 | 5900 | } |
| 5916 | 5901 | |
| 5917 | 5902 | DRIVER_INIT_MEMBER(model3_state,harley) |
| r243094 | r243095 | |
| 5969 | 5954 | { |
| 5970 | 5955 | //UINT32 *rom = (UINT32*)memregion("user1")->base(); |
| 5971 | 5956 | DRIVER_INIT_CALL(model3_20); |
| 5957 | DRIVER_INIT_CALL(genprot); |
| 5972 | 5958 | |
| 5973 | 5959 | //rom[(0xf6dd0^4)/4] = 0x60000000; |
| 5974 | 5960 | } |
| r243094 | r243095 | |
| 5978 | 5964 | m_step20_with_old_real3d = true; |
| 5979 | 5965 | |
| 5980 | 5966 | DRIVER_INIT_CALL(model3_20); |
| 5967 | DRIVER_INIT_CALL(genprot); |
| 5981 | 5968 | } |
| 5982 | 5969 | |
| 5983 | 5970 | DRIVER_INIT_MEMBER(model3_state,dirtdvls) |
| r243094 | r243095 | |
| 5985 | 5972 | m_step20_with_old_real3d = true; |
| 5986 | 5973 | |
| 5987 | 5974 | DRIVER_INIT_CALL(model3_20); |
| 5975 | DRIVER_INIT_CALL(genprot); |
| 5988 | 5976 | } |
| 5989 | 5977 | |
| 5990 | 5978 | DRIVER_INIT_MEMBER(model3_state,daytona2) |
| r243094 | r243095 | |
| 5999 | 5987 | rom[(0x6063c4^4)/4] = 0x60000000; |
| 6000 | 5988 | rom[(0x616434^4)/4] = 0x60000000; |
| 6001 | 5989 | rom[(0x69f4e4^4)/4] = 0x60000000; |
| 5990 | |
| 5991 | DRIVER_INIT_CALL(genprot); |
| 6002 | 5992 | } |
| 6003 | 5993 | |
| 6004 | 5994 | DRIVER_INIT_MEMBER(model3_state,dayto2pe) |
| r243094 | r243095 | |
| 6014 | 6004 | rom[(0x618b28^4)/4] = 0x60000000; // jump to encrypted code |
| 6015 | 6005 | |
| 6016 | 6006 | rom[(0x64ca34^4)/4] = 0x60000000; // dec |
| 6007 | |
| 6008 | DRIVER_INIT_CALL(genprot); |
| 6017 | 6009 | } |
| 6018 | 6010 | |
| 6019 | 6011 | DRIVER_INIT_MEMBER(model3_state,spikeout) |
| r243094 | r243095 | |
| 6023 | 6015 | |
| 6024 | 6016 | rom[(0x6059cc^4)/4] = 0x60000000; |
| 6025 | 6017 | rom[(0x6059ec^4)/4] = 0x60000000; |
| 6018 | DRIVER_INIT_CALL(genprot); |
| 6026 | 6019 | } |
| 6027 | 6020 | |
| 6028 | 6021 | DRIVER_INIT_MEMBER(model3_state,spikeofe) |
| r243094 | r243095 | |
| 6032 | 6025 | |
| 6033 | 6026 | rom[(0x6059cc^4)/4] = 0x60000000; |
| 6034 | 6027 | rom[(0x6059ec^4)/4] = 0x60000000; |
| 6028 | DRIVER_INIT_CALL(genprot); |
| 6035 | 6029 | } |
| 6036 | 6030 | |
| 6037 | 6031 | DRIVER_INIT_MEMBER(model3_state,eca) |
| 6038 | 6032 | { |
| 6039 | 6033 | DRIVER_INIT_CALL(model3_20); |
| 6034 | DRIVER_INIT_CALL(genprot); |
| 6040 | 6035 | } |
| 6041 | 6036 | |
| 6042 | 6037 | DRIVER_INIT_MEMBER(model3_state,skichamp) |
| r243094 | r243095 | |
| 6058 | 6053 | DRIVER_INIT_CALL(model3_20); |
| 6059 | 6054 | |
| 6060 | 6055 | rom[(0x57995c^4)/4] = 0x60000000; // decrementer |
| 6056 | |
| 6057 | DRIVER_INIT_CALL(genprot); |
| 6061 | 6058 | } |
| 6062 | 6059 | |
| 6063 | 6060 | DRIVER_INIT_MEMBER(model3_state,magtruck) |
| r243094 | r243095 | |
| 6065 | 6062 | m_step20_with_old_real3d = true; |
| 6066 | 6063 | |
| 6067 | 6064 | DRIVER_INIT_CALL(model3_20); |
| 6065 | DRIVER_INIT_CALL(genprot); |
| 6068 | 6066 | } |
| 6069 | 6067 | |
| 6070 | 6068 | DRIVER_INIT_MEMBER(model3_state,lamachin) |
| r243094 | r243095 | |
| 6072 | 6070 | m_step20_with_old_real3d = true; |
| 6073 | 6071 | |
| 6074 | 6072 | DRIVER_INIT_CALL(model3_20); |
| 6073 | DRIVER_INIT_CALL(genprot); |
| 6075 | 6074 | } |
| 6076 | 6075 | |
| 6077 | 6076 | |
| r243094 | r243095 | |
| 6096 | 6095 | 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 ) |
| 6097 | 6096 | |
| 6098 | 6097 | /* Model 3 Step 2.0 */ |
| 6099 | | 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 ) |
| 6100 | | 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 ) |
| 6101 | | 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 ) |
| 6102 | | GAME( 1998, lamachin, 0, model3_20, model3, model3_state, lamachin, ROT0, "Sega", "L.A. Machineguns", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6103 | | GAME( 1998, oceanhun, 0, model3_20, model3, model3_state, oceanhun, ROT0, "Sega", "The Ocean Hunter", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6104 | | GAME( 1998, skichamp, 0, model3_20, skichamp, model3_state, skichamp, ROT0, "Sega", "Ski Champ", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6105 | | GAME( 1998, srally2, 0, model3_20, scud, model3_state, srally2, ROT0, "Sega", "Sega Rally 2", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6106 | | 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 ) |
| 6107 | | 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 ) |
| 6108 | | 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 ) |
| 6109 | | 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 ) |
| 6110 | | 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 ) |
| 6111 | | 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 ) |
| 6112 | | 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 ) |
| 6113 | | 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 ) |
| 6114 | | 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 ) |
| 6098 | 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 ) |
| 6099 | 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 ) |
| 6100 | 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 ) |
| 6101 | 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 ) |
| 6102 | 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 ) |
| 6103 | GAME( 1998, skichamp, 0, model3_20, skichamp, model3_state, skichamp, ROT0, "Sega", "Ski Champ", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6104 | GAME( 1998, srally2, 0, model3_20, scud, model3_state, srally2, ROT0, "Sega", "Sega Rally 2", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6105 | 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 ) |
| 6106 | 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 ) |
| 6107 | 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 ) |
| 6108 | 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 ) |
| 6109 | 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 ) |
| 6110 | 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 ) |
| 6111 | 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 ) |
| 6112 | 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 ) |
| 6113 | 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 ) |
| 6115 | 6114 | |
| 6116 | 6115 | /* Model 3 Step 2.1 */ |
| 6117 | | 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 ) |
| 6118 | | 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 ) |
| 6119 | | 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 ) |
| 6120 | | 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 ) |
| 6116 | 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 ) |
| 6117 | 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 ) |
| 6118 | 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 ) |
| 6119 | 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 ) |
| 6121 | 6120 | 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 ) |
| 6122 | 6121 | 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 ) |
| 6123 | | GAME( 1998, spikeout, 0, model3_21, model3, model3_state, spikeout, ROT0, "Sega", "Spikeout (Revision C)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6124 | | GAME( 1998, spikeofe, 0, model3_21, model3, model3_state, spikeofe, ROT0, "Sega", "Spikeout Final Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6125 | | GAME( 1998, magtruck, 0, model3_21, eca, model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6126 | | GAME( 1999, eca, 0, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6127 | | 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 ) |
| 6128 | | 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 ) |
| 6122 | 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 ) |
| 6123 | 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 ) |
| 6124 | 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 ) |
| 6125 | 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 ) |
| 6126 | 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 ) |
| 6127 | 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 ) |
trunk/src/mame/machine/315-5881_crypt.c
| r243094 | r243095 | |
| 234 | 234 | |
| 235 | 235 | { |
| 236 | 236 | { |
| 237 | | 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, |
| 238 | | 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, |
| 237 | 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, |
| 238 | 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, |
| 239 | 239 | }, |
| 240 | | {1,2,5,6,7,-1}, |
| 240 | {1,2,5,6,7,6}, |
| 241 | 241 | {2,7} |
| 242 | 242 | }, |
| 243 | 243 | |
| r243094 | r243095 | |
| 341 | 341 | |
| 342 | 342 | { |
| 343 | 343 | { |
| 344 | | 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, |
| 345 | | 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, |
| 344 | 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, |
| 345 | 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, |
| 346 | 346 | }, |
| 347 | | {0,3,5,6,-1,-1}, |
| 347 | {0,3,5,6,5,0}, |
| 348 | 348 | {1,2} |
| 349 | 349 | }, |
| 350 | 350 | |
| r243094 | r243095 | |
| 387 | 387 | |
| 388 | 388 | { |
| 389 | 389 | { |
| 390 | | 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, |
| 391 | | 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, |
| 390 | 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, |
| 391 | 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, |
| 392 | 392 | }, |
| 393 | | {2,3,4,6,7,-1}, |
| 393 | {2,3,4,6,7,2}, |
| 394 | 394 | {2,3} |
| 395 | 395 | }, |
| 396 | 396 | |
| r243094 | r243095 | |
| 406 | 406 | { // 3rd round |
| 407 | 407 | { |
| 408 | 408 | { |
| 409 | | 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, |
| 410 | | 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, |
| 409 | 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, |
| 410 | 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, |
| 411 | 411 | }, |
| 412 | | {1,4,5,6,7,-1}, |
| 412 | {1,4,5,6,7,5}, |
| 413 | 413 | {0,5} |
| 414 | 414 | }, |
| 415 | 415 | |
| r243094 | r243095 | |
| 424 | 424 | |
| 425 | 425 | { |
| 426 | 426 | { |
| 427 | | 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, |
| 427 | 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, |
| 428 | 428 | // unused? |
| 429 | 429 | 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, |
| 430 | 430 | }, |
| 431 | | {1,2,4,7,-1,-1}, |
| 431 | {1,2,4,7,2,-1}, |
| 432 | 432 | {2,4} |
| 433 | 433 | }, |
| 434 | 434 | |
| r243094 | r243095 | |
| 481 | 481 | }; |
| 482 | 482 | |
| 483 | 483 | const int sega_315_5881_crypt_device::fn1_game_key_scheduling[FN1GK][2] = { |
| 484 | | {1,29}, {1,71}, {2,4}, {2,54}, {3,8}, {4,56}, {4,73}, {5,11}, |
| 485 | | {6,51}, {7,92}, {8,89}, {9,9}, {9,39}, {9,41}, {9,58}, {9,86}, |
| 486 | | {10,90}, {11,6}, {12,64}, {13,49}, {14,44}, {15,40}, {16,69}, {17,15}, |
| 487 | | {18,23}, {18,43}, {19,82}, {20,81}, {21,32}, {22,5}, {23,66}, {24,13}, |
| 488 | | {24,45}, {25,12}, {25,35}, {26,61}, {27,10}, {27,59}, {28,25} |
| 484 | {1,29}, {1,71}, {2,4}, {2,54}, {3,8}, {4,56}, {4,73}, {5,11}, |
| 485 | {6,51}, {7,92}, {8,89}, {9,9}, {9,39}, {9,58}, {9,86}, {10,90}, |
| 486 | {11,6}, {12,64}, {13,49}, {14,44}, {15,40}, {16,69}, {17,15}, {18,23}, |
| 487 | {18,43}, {19,82}, {20,81}, {21,32}, {22,5}, {23,66}, {24,13}, {24,45}, |
| 488 | {25,12}, {25,35}, {26,61}, {27,10}, {27,59}, {28,25} |
| 489 | 489 | }; |
| 490 | 490 | |
| 491 | 491 | const int sega_315_5881_crypt_device::fn2_game_key_scheduling[FN2GK][2] = { |
| 492 | | {0,0}, {1,3}, {2,11}, {3,20}, {4,22}, {5,23}, {6,29}, {7,38}, |
| 493 | | {8,39}, {9,55}, {9,86}, {9,87}, {9,90}, {10,50}, {10,53}, {11,57}, |
| 494 | | {12,59}, {13,61}, {13,64}, {14,63}, {15,67}, {16,72}, {17,83}, {18,88}, |
| 495 | | {19,94}, {20,35}, {21,17}, {22,6}, {22,11}, {23,85}, {24,16}, {25,25}, |
| 496 | | {26,92}, {27,47}, {28,28} |
| 492 | {0,0}, {1,3}, {2,11}, {3,20}, {4,22}, {5,23}, {6,29}, {7,38}, |
| 493 | {8,39}, {9,55}, {9,86}, {9,87}, {9,90}, {10,50}, {11,57}, {12,59}, |
| 494 | {13,61}, {14,63}, {15,67}, {16,72}, {17,83}, {18,88}, {19,94}, {20,35}, |
| 495 | {21,17}, {22,6}, {23,85}, {24,16}, {25,25}, {26,92}, {27,47}, {28,28} |
| 497 | 496 | }; |
| 498 | 497 | |
| 499 | 498 | const int sega_315_5881_crypt_device::fn1_sequence_key_scheduling[20][2] = { |
| r243094 | r243095 | |
| 583 | 582 | } |
| 584 | 583 | } |
| 585 | 584 | |
| 586 | | // subkeys bits 10 & 41 |
| 587 | | fn2_subkeys[0] ^= (BIT(sequence_key, 2) << 10); |
| 588 | | fn2_subkeys[1] ^= (BIT(sequence_key, 4) << 17); |
| 589 | 585 | /**************************************************************/ |
| 590 | 586 | |
| 591 | 587 | // First Feistel Network |
trunk/src/mame/machine/stvprot.c
| r243094 | r243095 | |
| 1 | | /* ST-V protection stuff */ |
| 1 | /* ST-V hookup for 315-5881 encryption/compression chip */ |
| 2 | 2 | |
| 3 | 3 | /* |
| 4 | 4 | |
| r243094 | r243095 | |
| 11 | 11 | Steep Slope Sliders (gfx transfer of character portraits) |
| 12 | 12 | Tecmo World Cup '98 (tecmo logo, player movement) |
| 13 | 13 | |
| 14 | | I think this is an encryption device. Decathlete is also protected, but uses a different device |
| 15 | | see machine/decathlt.c for details of that one, unlike this that appears to perform decompression |
| 16 | | operations. |
| 17 | | |
| 18 | | |
| 19 | | Astra Superstars data were extracted from Saturn version of the game. It is not known if |
| 20 | | protection device has data stored inside, or they are read from roms (using decryption/decompression) |
| 21 | | |
| 22 | 14 | */ |
| 23 | 15 | |
| 24 | | /**************************************************************************************** |
| 25 | | |
| 26 | | Protection & cartridge handling |
| 27 | | |
| 28 | | ***************************************************************************************** |
| 29 | | |
| 30 | | These are the known ST-V games that uses this area as a valid protection,I have written |
| 31 | | the data used by the games in the various circumstances for reference: |
| 32 | | -Astra Super Stars [astrass] |
| 33 | | [0] [1] [2] [3] |
| 34 | | 0x000y0000 0x00000000 0x06130027 0x01230000 test mode,char transfer (3) |
| 35 | | 0x???????? 0x???????? 0x???????? 0x???????? attract mode |
| 36 | | 0x000y0000 0x00000000 0x06130027 0x01230000 gameplay,char transfer (3) |
| 37 | | |
| 38 | | -Elan Doree : Legend of Dragon [elandore] |
| 39 | | [0] [1] [2] [3] |
| 40 | | No protection test mode |
| 41 | | No protection attract mode |
| 42 | | 0x000y0000 0x00000000 0x****00** 0xff7f0000 gameplay,VDP-1 write (textures on humans) |
| 43 | | 0x000y0000 0x00000000 0x****00** 0xffbf0000 gameplay,VDP-1 write (textures on humans) |
| 44 | | |
| 45 | | 0x000y0000 0x00000000 0x****00** 0xf9ff0000 gameplay,VDP-1 write (textures on dragons) |
| 46 | | 0x000y0000 0x00000000 0x****00** 0xfbff0000 gameplay,VDP-1 write (textures on dragons) |
| 47 | | 0x000y0000 0x00000000 0x****00** 0xfe7f0000 gameplay,VDP-1 write (textures on dragons) |
| 48 | | 0x000y0000 0x00000000 0x****00** 0xfd7f0000 gameplay,VDP-1 write (textures on dragons) |
| 49 | | 0x000y0000 0x00000000 0x****00** 0xfeff0000 gameplay,VDP-1 write (textures on dragons) |
| 50 | | 0x000y0000 0x00000000 0x****00** 0xf9bf0000 gameplay,VDP-1 write (textures on dragons) |
| 51 | | |
| 52 | | -Final Fight Revenge [ffreveng] |
| 53 | | [0] [1] [2] [3] |
| 54 | | 0x000y0000 0x00000000 0x4bcc0013 0x10da0000 test mode,boot vectors at $06080000 |
| 55 | | 0x000y0000 0x00000000 0x0b780013 0x10d70000 attract mode,boot vectors at $06080000 |
| 56 | | 0x???????? 0x???????? 0x???????? 0x???????? gameplay |
| 57 | | |
| 58 | | -Radiant Silvergun [rsgun] |
| 59 | | [0] [1] [2] [3] |
| 60 | | No protection test mode |
| 61 | | 0x000y0000 0x00000000 0x08000010 0x77770000 attract mode,work ram-h $60ff1ec and so on (1) |
| 62 | | 0x???????? 0x???????? 0x???????? 0x???????? gameplay |
| 63 | | |
| 64 | | -Steep Slope Sliders [sss] |
| 65 | | [0] [1] [2] [3] |
| 66 | | No protection test mode |
| 67 | | *0x000y0000 0x00000000 0x000000a6 0x2c5b0000 attract mode,VDP-1 write |
| 68 | | *0x000y0000 0x00000000 0x000000a6 0x2c5b0000 gameplay,VDP-1 write character 1 (2) |
| 69 | | *0x000y0000 0x00000000 0x0f9800a6 0x47f10000 gameplay,VDP-1 write character 2 |
| 70 | | *0x000y0000 0x00000000 0x1d4800a6 0xfcda0000 gameplay,VDP-1 write character 3 |
| 71 | | *0x000y0000 0x00000000 0x29e300a6 0xb5e60000 gameplay,VDP-1 write character 4 |
| 72 | | *0x000y0000 0x00000000 0x38e900a6 0x392c0000 gameplay,VDP-1 write character 5 |
| 73 | | *0x000y0000 0x00000000 0x462500a6 0x77c30000 gameplay,VDP-1 write character 6 |
| 74 | | *0x000y0000 0x00000000 0x555c00a6 0x8a620000 gameplay,VDP-1 write character 7 |
| 75 | | |
| 76 | | ========================================================================================= |
| 77 | | y = setted as a 0,then after the ctrl data is moved is toggled to 1 then again toggled |
| 78 | | to 0 after the reading,this bit is likely to be a "calculate protection values" |
| 79 | | if 1,use normal ram if 0. |
| 80 | | * = working checks |
| 81 | | [3,low word]AFAIK this is the cartridge area and it's read-only. |
| 82 | | (1)That area is usually (but not always) used as system registers. |
| 83 | | (2)Same as P.O.S.T. check,it was really simple to look-up because of that. |
| 84 | | (3)Wrong offset,or it requires something else like a bitswap? |
| 85 | | ========================================================================================= |
| 86 | | Protection works as a sort of data transfer,it could also be that it uses |
| 87 | | encryption on the data used... |
| 88 | | |
| 89 | | For now I'm writing this function with a command basis so I can work better with it. |
| 90 | | ****************************************************************************************/ |
| 91 | | |
| 92 | 16 | #include "emu.h" |
| 93 | 17 | #include "includes/stv.h" |
| 94 | 18 | |
| 95 | | //FILE *fp; |
| 96 | | //FILE *fp2; |
| 97 | 19 | |
| 98 | 20 | |
| 99 | | /************************ |
| 100 | | * |
| 101 | | * Tecmo World Cup '98 |
| 102 | | * |
| 103 | | ************************/ |
| 104 | 21 | |
| 105 | | /* |
| 106 | | 0x200214 |
| 107 | | 0x20de94 |
| 108 | | wpset 0x200214,0x20de94-0x200214,r |
| 109 | | dump twcup98.dmp,0x200214,0x20de94-0x200214,4,0,0 |
| 110 | | protection tests the data 0x201220 at |
| 111 | | bp 0x6009a9e |
| 112 | | with 0x60651f8 |
| 113 | | */ |
| 114 | 22 | |
| 115 | | |
| 116 | | //MAIN : 12120000 DATA : 0ad20069 Tecmo logo |
| 117 | | //MAIN : 12120000 DATA : e332006b title screen |
| 118 | | // TODO: encrypted / compressed data. |
| 119 | | // Both points to a section that has a string ("TECMO" / "TITLE") |
| 120 | | |
| 121 | | |
| 122 | | /************************* |
| 123 | | * |
| 124 | | * Final Fight Revenge |
| 125 | | * |
| 126 | | *************************/ |
| 127 | | |
| 128 | | /* |
| 129 | | ffreveng protection notes |
| 130 | | Global: |
| 131 | | R2 is the vector read (where to jump to) |
| 132 | | R3 is the vector pointer |
| 133 | | |
| 134 | | Directory listing for Final Fight Revenge (Saturn Version): |
| 135 | | |
| 136 | | In the ST-V version, most of these file names could be found at relative address 0x346a0 (0x22346a0) |
| 137 | | Also, there's a table at 0x260000 (0x2260000), this points to offsets to the ROM (and are sent to the protection device), |
| 138 | | and the size of it |
| 139 | | |
| 140 | | fad size file name date |
| 141 | | 000000aa 00003000 2000/2/8 |
| 142 | | 000000aa 00003000 ? 2000/2/8 |
| 143 | | 000000b0 00076080 0;1 2000/2/8 |
| 144 | | 0001799e 014b2000 ALY.RED;1 1999/11/9 |
| 145 | | 00002350 00001900 ALYHRAM.BIN;1 2000/2/8 |
| 146 | | 0000040e 00005204 ANDEND.BIN;1 1999/11/9 |
| 147 | | 000001a0 0000c700 ANDORE.BIN;1 2000/2/8 |
| 148 | | 000003c8 00016938 ANDORE.CRT;1 1999/11/9 |
| 149 | | 000001b9 000f3528 ANDOREM.BIN;1 2000/2/8 |
| 150 | | 00003525 012db000 ATN.RED;1 1999/11/9 |
| 151 | | 000024e6 00001900 ATNHRAM.BIN;1 2000/2/8 |
| 152 | | 00013291 0120d000 ATO.RED;1 1999/11/9 |
| 153 | | 000024a0 00001100 ATOHRAM.BIN;1 2000/2/8 |
| 154 | | 00000419 0000f000 BELGER.BIN;1 2000/2/8 |
| 155 | | 000005f0 00013bdc BELGER.CRT;1 1999/11/9 |
| 156 | | 00000437 000ce990 BELGERM.BIN;1 2000/2/8 |
| 157 | | 00002611 00000894 BURGR.BIN;1 2000/2/8 |
| 158 | | 00002605 00000638 CAFFE.BIN;1 2000/2/8 |
| 159 | | 0000273b 000022e0 CAPCOM.BIN;1 1999/11/9 |
| 160 | | 00001d9a 00012100 CAPHRAM.BIN;1 2000/2/8 |
| 161 | | 00000834 00004cec CDYEND.BIN;1 1999/11/9 |
| 162 | | 0000218a 00005900 CHSHRAM.BIN;1 2000/2/8 |
| 163 | | 0000061a 0000b900 CODY.BIN;1 2000/2/8 |
| 164 | | 00000809 00014e00 CODY.CRT;1 1999/11/9 |
| 165 | | 00002857 000ff412 CODYANIM.BIN;1 1999/11/9 |
| 166 | | 00002a56 00011dbc CODYAPAL.BIN;1 1999/11/9 |
| 167 | | 00000632 000d31cc CODYM.BIN;1 2000/2/8 |
| 168 | | 00002619 0000046c CURRY.BIN;1 2000/2/8 |
| 169 | | 00000b36 00005110 DAMEND.BIN;1 1999/11/9 |
| 170 | | 0000083e 0000b300 DAMND.BIN;1 2000/2/8 |
| 171 | | 00000aa6 000181ae DAMND.CRT;1 1999/11/9 |
| 172 | | 00000855 0010c674 DAMNDM.BIN;1 2000/2/8 |
| 173 | | 00000ad9 000063c0 DDAD.BIN;1 1999/11/9 |
| 174 | | 00000b2c 00004a30 DDBL.BIN;1 1999/11/9 |
| 175 | | 00000b25 000034b4 DDCD.BIN;1 1999/11/9 |
| 176 | | 00000ae6 00004c6c DDDM.BIN;1 1999/11/9 |
| 177 | | 00000b1c 00004660 DDED.BIN;1 1999/11/9 |
| 178 | | 00000b15 00003770 DDEL.BIN;1 1999/11/9 |
| 179 | | 00000b0e 00003268 DDGY.BIN;1 1999/11/9 |
| 180 | | 00000b06 00003c74 DDHG.BIN;1 1999/11/9 |
| 181 | | 00000b00 000029a8 DDPS.BIN;1 1999/11/9 |
| 182 | | 00000af9 000035e4 DDRL.BIN;1 1999/11/9 |
| 183 | | 00000af0 000044a8 DDSD.BIN;1 1999/11/9 |
| 184 | | 0000217a 00007d00 DEMHRAM.BIN;1 2000/2/8 |
| 185 | | 0000278e 00064396 DLOOP.CRT;1 1999/11/9 |
| 186 | | 00000b41 0000e200 EDDIE.BIN;1 2000/2/8 |
| 187 | | 00000d25 00019a44 EDDIE.CRT;1 1999/11/9 |
| 188 | | 00000b5e 000c7758 EDDIEM.BIN;1 2000/2/8 |
| 189 | | 00000d5a 00005204 EDIEND.BIN;1 1999/11/9 |
| 190 | | 00000d65 0000d700 ELGADO.BIN;1 2000/2/8 |
| 191 | | 00001010 00018b2e ELGADO.CRT;1 1999/11/9 |
| 192 | | 00000d80 0012ec64 ELGADOM.BIN;1 2000/2/8 |
| 193 | | 00001043 00005204 ELGEND.BIN;1 1999/11/9 |
| 194 | | 00001d79 0000e5ec ENDING.BIN;1 1999/11/9 |
| 195 | | 00002bc3 0002e8f4 ENDING.CRT;1 1999/11/9 |
| 196 | | 0000019e 0000005d FFEXABS.TXT;1 1999/11/9 |
| 197 | | 0000019f 00000060 FFEXBIB.TXT;1 1999/11/9 |
| 198 | | 0000019d 00000032 FFEXCPY.TXT;1 1999/11/9 |
| 199 | | 00002615 0000062c FRIES.BIN;1 2000/2/8 |
| 200 | | 00001ce1 0004b8b4 GAMEL.BIN;1 1999/11/9 |
| 201 | | 000003f6 000011fc GANDRE.BIN;1 1999/11/9 |
| 202 | | 0000040b 00001246 GBEL.BIN;1 1999/11/9 |
| 203 | | 000003f9 00000af3 GCODY.BIN;1 1999/11/9 |
| 204 | | 000003fb 00000cc4 GDAM.BIN;1 1999/11/9 |
| 205 | | 000003fd 00000f6a GEDDIE.BIN;1 1999/11/9 |
| 206 | | 000003ff 00000c85 GGADO.BIN;1 1999/11/9 |
| 207 | | 00000401 00000d4c GGUY.BIN;1 1999/11/9 |
| 208 | | 00000403 00000f16 GHAG.BIN;1 1999/11/9 |
| 209 | | 00000405 00000a63 GPOISON.BIN;1 1999/11/9 |
| 210 | | 00000407 00000a85 GROL.BIN;1 1999/11/9 |
| 211 | | 00005b71 01156000 GRV.RED;1 1999/11/9 |
| 212 | | 0000243b 00001600 GRVHRAM.BIN;1 2000/2/8 |
| 213 | | 00000409 00000dad GSODOM.BIN;1 1999/11/9 |
| 214 | | 0000104e 0000c300 GUY.BIN;1 2000/2/8 |
| 215 | | 0000123a 00014844 GUY.CRT;1 1999/11/9 |
| 216 | | 00001266 00005204 GUYEND.BIN;1 1999/11/9 |
| 217 | | 00001067 000d14aa GUYM.BIN;1 2000/2/8 |
| 218 | | 00001271 0000c600 HAGGAR.BIN;1 2000/2/8 |
| 219 | | 00001489 00017ad8 HAGGAR.CRT;1 1999/11/9 |
| 220 | | 0000128a 000e46fc HAGGARM.BIN;1 2000/2/8 |
| 221 | | 000014bb 00005204 HGREND.BIN;1 1999/11/9 |
| 222 | | 00002740 0001b468 HISCORE.BIN;1 1999/11/9 |
| 223 | | 00002777 00000a00 HISCP.BIN;1 1999/11/9 |
| 224 | | 00002779 000086c0 HISCTEX.BIN;1 1999/11/9 |
| 225 | | 0000278b 00001680 HSFACE_T.BIN;1 1999/11/9 |
| 226 | | 00002607 00000618 HTDOG.BIN;1 2000/2/8 |
| 227 | | 00015741 010e3800 JNK.RED;1 1999/11/9 |
| 228 | | 000023cd 00001900 JNKHRAM.BIN;1 2000/2/8 |
| 229 | | 00002d0b 0003dfc0 KANJI.FON;1 1999/11/9 |
| 230 | | 00001d98 00000d44 LOAD.BIN;1 1999/11/9 |
| 231 | | 00001dbf 001dd5a8 LOGO.CPK;1 1999/11/9 |
| 232 | | 00002d0a 00000400 LVLHRAM.BIN;1 2000/2/8 |
| 233 | | 0000260a 000005e8 MEAT.BIN;1 2000/2/8 |
| 234 | | 00007eb3 01253800 MLK.RED;1 1999/11/9 |
| 235 | | 00002196 00000d00 MLKHRAM.BIN;1 2000/2/8 |
| 236 | | 0000278a 00000400 NAMEP.BIN;1 1999/11/9 |
| 237 | | 0000a3f0 011b8000 NPK.RED;1 1999/11/9 |
| 238 | | 000022d0 00002700 NPKHRAM.BIN;1 2000/2/8 |
| 239 | | 00010dc0 0121d800 NUK.RED;1 1999/11/9 |
| 240 | | 00002555 00001100 NUKHRAM.BIN;1 2000/2/8 |
| 241 | | 00002c21 00036f94 OVER.CRT;1 1999/11/9 |
| 242 | | 000014c6 0000ab00 POISON.BIN;1 2000/2/8 |
| 243 | | 000017f1 00018880 POISON.CRT;1 1999/11/9 |
| 244 | | 000014dc 0017617c POISONM.BIN;1 2000/2/8 |
| 245 | | 0000c7f6 01166000 PRK.RED;1 1999/11/9 |
| 246 | | 00002268 00001100 PRKHRAM.BIN;1 2000/2/8 |
| 247 | | 00002a82 00003940 PSCBCHR.BIN;1 1999/11/9 |
| 248 | | 00002a8a 00002000 PSCBMAP.BIN;1 1999/11/9 |
| 249 | | 00002a92 00000ac0 PSCRTEX.BIN;1 1999/11/9 |
| 250 | | 00002a7b 000033c0 PSFCCHR.BIN;1 1999/11/9 |
| 251 | | 00001824 000049d4 PSNEND.BIN;1 1999/11/9 |
| 252 | | 00002a8e 00001e54 PSNMCHR.BIN;1 1999/11/9 |
| 253 | | 00002a94 000037c0 PSSBCHR.BIN;1 1999/11/9 |
| 254 | | 00002a9b 00002000 PSSBMAP.BIN;1 1999/11/9 |
| 255 | | 00002a9f 00000200 PSSBPAL.BIN;1 1999/11/9 |
| 256 | | 00002a7a 00000600 PS_PAL.BIN;1 1999/11/9 |
| 257 | | 00002c8f 0003d4c0 RESIDENT.CRT;1 1999/11/9 |
| 258 | | 00001c68 0003ae40 RESTEXT.BIN;1 1999/11/9 |
| 259 | | 00001cde 00001220 RESTEXTB.BIN;1 1999/11/9 |
| 260 | | 00001d97 00000200 RETIMEPA.BIN;1 1999/11/9 |
| 261 | | 0000261b 000004e8 REVNG.BIN;1 1999/11/9 |
| 262 | | 00001a5b 00005204 ROLEND.BIN;1 1999/11/9 |
| 263 | | 0000182e 0000e700 ROLENTO.BIN;1 2000/2/8 |
| 264 | | 00001a2d 00016bfc ROLENTO.CRT;1 1999/11/9 |
| 265 | | 0000184b 000d6bf0 ROLENTOM.BIN;1 2000/2/8 |
| 266 | | 000025c5 000062e4 SDDRVS.TSK;1 1999/11/9 |
| 267 | | 00002eb3 002ee000 SEGA_WRN.DA;1 1998/4/30 |
| 268 | | 00002b82 00020492 SELECT.CRT;1 1999/11/9 |
| 269 | | 00002aa0 00070e04 SODBTEX.BIN;1 1999/11/9 |
| 270 | | 00001c5d 00005154 SODEND.BIN;1 1999/11/9 |
| 271 | | 00001a66 0000b100 SODOM.BIN;1 2000/2/8 |
| 272 | | 00001c29 0001943a SODOM.CRT;1 1999/11/9 |
| 273 | | 00001a7d 000b9e2f SODOMM.BIN;1 2000/2/8 |
| 274 | | 0000260d 000004cc SUSHI.BIN;1 2000/2/8 |
| 275 | | 0000261c 0008f204 TITLE.BIN;1 1999/11/9 |
| 276 | | 0000eb58 010e9000 WHS.RED;1 1999/11/9 |
| 277 | | 000021ff 00001100 WHSHRAM.BIN;1 2000/2/8 |
| 278 | | 000003a0 00009b90 _ADCL00.BIN;1 1999/11/9 |
| 279 | | 000003b4 00009b90 _ADCL01.BIN;1 1999/11/9 |
| 280 | | 000023cb 00000c54 _ALYBMAP.BIN;1 1999/11/9 |
| 281 | | 0000239b 00017ec0 _ALYFCHR.BIN;1 1999/11/9 |
| 282 | | 00002399 00000c1a _ALYFMAP.BIN;1 1999/11/9 |
| 283 | | 00002354 00000600 _ALYPAL.BIN;1 1999/11/9 |
| 284 | | 0000235a 0001f400 _ALYRCHR.BIN;1 1999/11/9 |
| 285 | | 00002355 0000205c _ALYRMAP.BIN;1 1999/11/9 |
| 286 | | 0000252a 00015800 _ATNBCHR.BIN;1 1999/11/9 |
| 287 | | 00002526 00001882 _ATNBMAP.BIN;1 1999/11/9 |
| 288 | | 00002525 00000416 _ATNFMAP.BIN;1 1999/11/9 |
| 289 | | 000024ea 00000600 _ATNPAL.BIN;1 1999/11/9 |
| 290 | | 000024ef 0001af00 _ATNRCHR.BIN;1 1999/11/9 |
| 291 | | 000024eb 00001d10 _ATNRMAP.BIN;1 1999/11/9 |
| 292 | | 000024e3 000017fa _ATOBMAP.BIN;1 1999/11/9 |
| 293 | | 000024e2 00000040 _ATOFCHR.BIN;1 1999/11/9 |
| 294 | | 000024e1 00000006 _ATOFMAP.BIN;1 1999/11/9 |
| 295 | | 000024a3 00000600 _ATOPAL.BIN;1 1999/11/9 |
| 296 | | 000024a9 0001bbc0 _ATORCHR.BIN;1 1999/11/9 |
| 297 | | 000024a4 00002004 _ATORMAP.BIN;1 1999/11/9 |
| 298 | | 00000618 00000a20 _BGUNTX.BIN;1 1999/11/9 |
| 299 | | 000005d5 0000d688 _BLTXURE.BIN;1 1999/11/9 |
| 300 | | 00002613 00000a80 _BURGRTX.BIN;1 1999/11/9 |
| 301 | | 00002606 000006c0 _CAFFETX.BIN;1 1999/11/9 |
| 302 | | 000007d9 0000bdb0 _CDCL00.BIN;1 1999/11/9 |
| 303 | | 000007f1 0000bdb0 _CDCL01.BIN;1 1999/11/9 |
| 304 | | 00000ad7 000008a0 _CHSAWTX.BIN;1 1999/11/9 |
| 305 | | 000025e3 00003500 _CRAT2TX.BIN;1 1999/11/9 |
| 306 | | 000025ea 00002200 _CRAT3TX.BIN;1 1999/11/9 |
| 307 | | 000025d5 00003300 _CRATDTX.BIN;1 1999/11/9 |
| 308 | | 000025dc 00003300 _CRATNTX.BIN;1 1999/11/9 |
| 309 | | 0000261a 00000500 _CURRYTX.BIN;1 1999/11/9 |
| 310 | | 00000a6e 0000d918 _DMCL00.BIN;1 1999/11/9 |
| 311 | | 00000a8a 0000d918 _DMCL01.BIN;1 1999/11/9 |
| 312 | | 000025ef 00001b60 _DRUMTX.BIN;1 1999/11/9 |
| 313 | | 00000ced 0000da3c _EDCL00.BIN;1 1999/11/9 |
| 314 | | 00000d09 0000da3c _EDCL01.BIN;1 1999/11/9 |
| 315 | | 00000fde 0000c404 _ELCL00.BIN;1 1999/11/9 |
| 316 | | 00000ff7 0000c404 _ELCL01.BIN;1 1999/11/9 |
| 317 | | 00002616 000011a0 _FRIESTX.BIN;1 1999/11/9 |
| 318 | | 00001d96 00000660 _GFNTCHR.BIN;1 1999/11/9 |
| 319 | | 00001264 00000880 _GKATATX.BIN;1 1999/11/9 |
| 320 | | 00002488 0000bcc0 _GRVBCHR.BIN;1 1999/11/9 |
| 321 | | 00002486 00000d76 _GRVBMAP.BIN;1 1999/11/9 |
| 322 | | 00002483 000010fc _GRVFMAP.BIN;1 1999/11/9 |
| 323 | | 0000243e 00000600 _GRVPAL.BIN;1 1999/11/9 |
| 324 | | 00002444 0001f4c0 _GRVRCHR.BIN;1 1999/11/9 |
| 325 | | 0000243f 00002004 _GRVRMAP.BIN;1 1999/11/9 |
| 326 | | 0000120a 0000bf44 _GYCL00.BIN;1 1999/11/9 |
| 327 | | 00001222 0000bf44 _GYCL01.BIN;1 1999/11/9 |
| 328 | | 00001453 0000d614 _HGCL00.BIN;1 1999/11/9 |
| 329 | | 0000146e 0000d614 _HGCL01.BIN;1 1999/11/9 |
| 330 | | 00002608 00000880 _HTDOGTX.BIN;1 1999/11/9 |
| 331 | | 000025f3 00002b60 _ICEBTX.BIN;1 1999/11/9 |
| 332 | | 00001042 00000560 _JKNFTX.BIN;1 1999/11/9 |
| 333 | | 00002419 00010940 _JNKBCHR.BIN;1 1999/11/9 |
| 334 | | 00002417 00000982 _JNKBMAP.BIN;1 1999/11/9 |
| 335 | | 00002414 0000113a _JNKFMAP.BIN;1 1999/11/9 |
| 336 | | 000023d1 00000600 _JNKPAL.BIN;1 1999/11/9 |
| 337 | | 000023d6 0001ee80 _JNKRCHR.BIN;1 1999/11/9 |
| 338 | | 000023d2 00001bde _JNKRMAP.BIN;1 1999/11/9 |
| 339 | | 000025d4 000006c0 _KATA2TX.BIN;1 1999/11/9 |
| 340 | | 00001c5c 00000780 _KATANTX.BIN;1 1999/11/9 |
| 341 | | 0000260b 00000cc0 _MEATTX.BIN;1 1999/11/9 |
| 342 | | 000021dd 00010e80 _MLKBCHR.BIN;1 1999/11/9 |
| 343 | | 000021db 00000be6 _MLKBMAP.BIN;1 1999/11/9 |
| 344 | | 000021d9 00000f70 _MLKFMAP.BIN;1 1999/11/9 |
| 345 | | 00002198 00000600 _MLKPAL.BIN;1 1999/11/9 |
| 346 | | 0000219c 0001e440 _MLKRCHR.BIN;1 1999/11/9 |
| 347 | | 00002199 000013de _MLKRMAP.BIN;1 1999/11/9 |
| 348 | | 0000234d 00001416 _NPKBMAP.BIN;1 1999/11/9 |
| 349 | | 0000231d 00017dc0 _NPKFCHR.BIN;1 1999/11/9 |
| 350 | | 0000231a 00001406 _NPKFMAP.BIN;1 1999/11/9 |
| 351 | | 000022d5 00000600 _NPKPAL.BIN;1 1999/11/9 |
| 352 | | 000022db 0001f640 _NPKRCHR.BIN;1 1999/11/9 |
| 353 | | 000022d6 00002202 _NPKRMAP.BIN;1 1999/11/9 |
| 354 | | 0000259a 000153c0 _NUKBCHR.BIN;1 1999/11/9 |
| 355 | | 00002596 00001924 _NUKBMAP.BIN;1 1999/11/9 |
| 356 | | 00002594 00000f6e _NUKFMAP.BIN;1 1999/11/9 |
| 357 | | 00002558 00000600 _NUKPAL.BIN;1 1999/11/9 |
| 358 | | 0000255e 0001adc0 _NUKRCHR.BIN;1 1999/11/9 |
| 359 | | 00002559 00002004 _NUKRMAP.BIN;1 1999/11/9 |
| 360 | | 000025d3 000005a0 _NYOIBTX.BIN;1 1999/11/9 |
| 361 | | 000025f9 000039e0 _OILCTX.BIN;1 1999/11/9 |
| 362 | | 000014b9 00000b40 _PIPETX.BIN;1 1999/11/9 |
| 363 | | 00001823 00000600 _POISNTX.BIN;1 1999/11/9 |
| 364 | | 000022cc 000018fc _PRKBMAP.BIN;1 1999/11/9 |
| 365 | | 000022ac 0000fd00 _PRKFCHR.BIN;1 1999/11/9 |
| 366 | | 000022a8 00001d4a _PRKFMAP.BIN;1 1999/11/9 |
| 367 | | 0000226b 00000600 _PRKPAL.BIN;1 1999/11/9 |
| 368 | | 00002271 0001b0c0 _PRKRCHR.BIN;1 1999/11/9 |
| 369 | | 0000226c 00002202 _PRKRMAP.BIN;1 1999/11/9 |
| 370 | | 000017c9 00009874 _PSCL00.BIN;1 1999/11/9 |
| 371 | | 000017dd 00009874 _PSCL01.BIN;1 1999/11/9 |
| 372 | | 00000d59 00000180 _PSTKTX.BIN;1 1999/11/9 |
| 373 | | 000019f9 0000cb2c _RLCL00.BIN;1 1999/11/9 |
| 374 | | 00001a13 0000cb2c _RLCL01.BIN;1 1999/11/9 |
| 375 | | 00001bf1 0000dd0c _SDCL00.BIN;1 1999/11/9 |
| 376 | | 00001c0d 0000dd0c _SDCL01.BIN;1 1999/11/9 |
| 377 | | 00000833 00000660 _SKNFTX.BIN;1 1999/11/9 |
| 378 | | 000025d2 00000240 _SPIKETX.BIN;1 1999/11/9 |
| 379 | | 0000260e 000011e0 _SUSHITX.BIN;1 1999/11/9 |
| 380 | | 00002601 00001ba0 _TOMBTX.BIN;1 1999/11/9 |
| 381 | | 0000224b 0000e2c0 _WHSBCHR.BIN;1 1999/11/9 |
| 382 | | 00002249 00000a36 _WHSBMAP.BIN;1 1999/11/9 |
| 383 | | 00002245 00001bb8 _WHSFMAP.BIN;1 1999/11/9 |
| 384 | | 00002202 00000600 _WHSPAL.BIN;1 1999/11/9 |
| 385 | | 00002207 0001efc0 _WHSRCHR.BIN;1 1999/11/9 |
| 386 | | 00002203 00001cf4 _WHSRMAP.BIN;1 1999/11/9 |
| 387 | | */ |
| 388 | | |
| 389 | | |
| 390 | | |
| 391 | | |
| 392 | | |
| 393 | | |
| 394 | | |
| 395 | | UINT32 rsgun_prot_read_callback( address_space &space, int protaddr, UINT32 key ) |
| 396 | | { |
| 397 | | int tempctrl = protaddr - 0x0201000; // technically it doesn't seem to care, but... |
| 398 | | |
| 399 | | switch(key) |
| 400 | | { |
| 401 | | case 0x77770000: |
| 402 | | { |
| 403 | | UINT32 val = |
| 404 | | ((tempctrl & 0xff)<<24) | |
| 405 | | (((tempctrl+1) & 0xff)<<16) | |
| 406 | | (((tempctrl+2) & 0xff)<<8) | |
| 407 | | ((tempctrl+3) & 0xff); |
| 408 | | if(tempctrl & 0x100) |
| 409 | | val &= 0x0f0f0f0f; |
| 410 | | else |
| 411 | | val &= 0xf0f0f0f0; |
| 412 | | |
| 413 | | return val; |
| 414 | | } |
| 415 | | } |
| 416 | | |
| 417 | | return 0; |
| 418 | | } |
| 419 | | |
| 420 | | UINT32 twcup98_prot_read_callback( address_space &space, int protaddr, UINT32 key ) |
| 421 | | { |
| 422 | | UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base(); |
| 423 | | UINT32 res = 0; |
| 424 | | |
| 425 | | UINT32 twcup_prot_data[8] = |
| 426 | | { |
| 427 | | 0x23232323, 0x23232323, 0x4c4c4c4c, 0x4c156301 |
| 428 | | }; |
| 429 | | |
| 430 | | switch(key >> 16) |
| 431 | | { |
| 432 | | case 0x1212: |
| 433 | | if(protaddr & 2) |
| 434 | | { |
| 435 | | res = (ROM[protaddr / 4] & 0xffff) << 16; |
| 436 | | res |= (ROM[(protaddr+4) / 4] & 0xffff0000) >> 16; |
| 437 | | } |
| 438 | | else |
| 439 | | { |
| 440 | | res = ROM[protaddr / 4] & 0xffff0000; |
| 441 | | res |= ROM[protaddr / 4] & 0xffff; |
| 442 | | } |
| 443 | | |
| 444 | | if(protaddr >= 0xD215A4+0x100c && protaddr < 0xD215A4+0x100c+8*4) |
| 445 | | res = twcup_prot_data[(protaddr-(0xD215A4+0x100c))/4]; |
| 446 | | |
| 447 | | return res; |
| 448 | | } |
| 449 | | |
| 450 | | return 0; |
| 451 | | } |
| 452 | | |
| 453 | | UINT32 sss_prot_read_callback( address_space &space, int protaddr, UINT32 key ) |
| 454 | | { |
| 455 | | UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base(); |
| 456 | | int read_offset_hack = 0; |
| 457 | | UINT32 res; |
| 458 | | |
| 459 | | /* |
| 460 | | MAIN : 2c5b0000 DATA : 000000a6 014c0000 |
| 461 | | MAIN : 47f10000 DATA : 0f9800a6 014c1f30 |
| 462 | | MAIN : fcda0000 DATA : 1d4800a6 014c3a90 |
| 463 | | MAIN : b5e60000 DATA : 29e300a6 014c53c6 |
| 464 | | MAIN : 392c0000 DATA : 38e900a6 014c71d2 |
| 465 | | MAIN : 77c30000 DATA : 462500a6 014c8c4a |
| 466 | | MAIN : 8a620000 DATA : 555c00a6 014caab8 |
| 467 | | */ |
| 468 | | |
| 469 | | // I have a feeling rather than the offsets being scrambled they were lazy |
| 470 | | // and left unencrypted copies in the ROM... but this still needs verification |
| 471 | | switch(key>>16) |
| 472 | | { |
| 473 | | case 0x2c5b: read_offset_hack = 0x60054; break; |
| 474 | | case 0x47f1: read_offset_hack = 0x56498; break; |
| 475 | | case 0xfcda: read_offset_hack = 0x50b0c; break; |
| 476 | | case 0xb5e6: read_offset_hack = 0x4af56; break; |
| 477 | | case 0x392c: read_offset_hack = 0x45876; break; |
| 478 | | case 0x77c3: read_offset_hack = 0x3fe02; break; |
| 479 | | case 0x8a62: read_offset_hack = 0x3a784; break; |
| 480 | | } |
| 481 | | |
| 482 | | switch(key>>16) |
| 483 | | { |
| 484 | | default: |
| 485 | | if(protaddr & 2) |
| 486 | | { |
| 487 | | res = (ROM[(protaddr-read_offset_hack) / 4] & 0xffff) << 16; |
| 488 | | res |= (ROM[((protaddr-read_offset_hack)+4) / 4] & 0xffff0000) >> 16; |
| 489 | | } |
| 490 | | else |
| 491 | | { |
| 492 | | res = ROM[(protaddr-read_offset_hack) / 4] & 0xffff0000; |
| 493 | | res |= ROM[(protaddr-read_offset_hack) / 4] & 0xffff; |
| 494 | | } |
| 495 | | return res; |
| 496 | | } |
| 497 | | } |
| 498 | | |
| 499 | | |
| 500 | | |
| 501 | | UINT32 elandore_prot_read_callback( address_space &space, int protaddr, UINT32 key ) |
| 502 | | { |
| 503 | | UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base(); |
| 504 | | UINT32 res = 0; |
| 505 | | |
| 506 | | switch(key >> 16) |
| 507 | | { |
| 508 | | default: |
| 509 | | if(protaddr & 2) |
| 510 | | { |
| 511 | | res = (ROM[protaddr / 4] & 0xffff) << 16; |
| 512 | | res |= (ROM[(protaddr+4) / 4] & 0xffff0000) >> 16; |
| 513 | | } |
| 514 | | else |
| 515 | | { |
| 516 | | res = ROM[protaddr / 4] & 0xffff0000; |
| 517 | | res |= ROM[protaddr / 4] & 0xffff; |
| 518 | | } |
| 519 | | return res; |
| 520 | | } |
| 521 | | |
| 522 | | // never executed |
| 523 | | //return 0; |
| 524 | | } |
| 525 | | |
| 526 | | UINT32 ffreveng_prot_read_callback( address_space &space, int protaddr, UINT32 key ) |
| 527 | | { |
| 528 | | //UINT32 res = 0; |
| 529 | | |
| 530 | | switch(key >> 16) |
| 531 | | { |
| 532 | | case 0x10da://ffreveng, boot vectors at $6080000,test mode |
| 533 | | case 0x10d7://ffreveng, boot vectors at $6080000,attract mode |
| 534 | | #if 0 |
| 535 | | if(protaddr & 2) |
| 536 | | { |
| 537 | | res = (ROM[protaddr / 4] & 0xffff) << 16; |
| 538 | | res |= (ROM[(protaddr+4) / 4] & 0xffff0000) >> 16; |
| 539 | | } |
| 540 | | else |
| 541 | | { |
| 542 | | res = ROM[protaddr / 4] & 0xffff0000; |
| 543 | | res |= ROM[protaddr / 4] & 0xffff; |
| 544 | | } |
| 545 | | #endif |
| 546 | | return 0; |
| 547 | | } |
| 548 | | |
| 549 | | return 0; |
| 550 | | } |
| 551 | | |
| 552 | | |
| 553 | 23 | /************************************* |
| 554 | 24 | * |
| 555 | 25 | * Common Handlers |
| 556 | 26 | * |
| 557 | 27 | *************************************/ |
| 558 | 28 | |
| 559 | | // the naomi hookup of 315-5881 reads 16-bits at a time, here we seem to read 32? |
| 560 | | |
| 561 | 29 | READ32_MEMBER( stv_state::common_prot_r ) |
| 562 | 30 | { |
| 563 | 31 | UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base(); |
| r243094 | r243095 | |
| 566 | 34 | { |
| 567 | 35 | if(offset == 3) |
| 568 | 36 | { |
| 569 | | #ifdef MAME_DEBUG |
| 570 | | popmessage("Prot read at %06x with data = %08x",space.device().safe_pc(),m_abus_protkey); |
| 571 | | #endif |
| 572 | | if (!m_using_crypt_device) // decrypt using hacks |
| 573 | | { |
| 574 | | UINT32 realret = space.read_dword(0x2000000 + m_ctrl_index); |
| 575 | | UINT32 retdata = m_prot_readback(space, m_ctrl_index, m_abus_protkey); |
| 576 | | //fwrite(&realret, 1, 4, fp); |
| 577 | | //fwrite(&retdata, 1, 4, fp2); |
| 578 | | |
| 579 | | 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); |
| 580 | | m_ctrl_index += 4; |
| 581 | | return retdata; |
| 582 | | } |
| 583 | | else // decrypt using real decryption device |
| 584 | | { |
| 585 | | UINT8* base; |
| 586 | | UINT16 res = m_cryptdevice->do_decrypt(base); |
| 587 | | UINT16 res2 = m_cryptdevice->do_decrypt(base); |
| 588 | | res = ((res & 0xff00) >> 8) | ((res & 0x00ff) << 8); |
| 589 | | res2 = ((res2 & 0xff00) >> 8) | ((res2 & 0x00ff) << 8); |
| 37 | UINT8* base; |
| 38 | UINT16 res = m_cryptdevice->do_decrypt(base); |
| 39 | UINT16 res2 = m_cryptdevice->do_decrypt(base); |
| 40 | res = ((res & 0xff00) >> 8) | ((res & 0x00ff) << 8); |
| 41 | res2 = ((res2 & 0xff00) >> 8) | ((res2 & 0x00ff) << 8); |
| 590 | 42 | |
| 591 | | return res2 | (res << 16); |
| 592 | | } |
| 593 | | |
| 43 | return res2 | (res << 16); |
| 594 | 44 | } |
| 595 | 45 | return m_a_bus[offset]; |
| 596 | 46 | } |
| r243094 | r243095 | |
| 611 | 61 | WRITE32_MEMBER ( stv_state::common_prot_w ) |
| 612 | 62 | { |
| 613 | 63 | COMBINE_DATA(&m_a_bus[offset]); |
| 614 | | //printf("A-Bus control protection write at %06x: [%02x] <- %08x\n",space.device().safe_pc(),offset,data); |
| 615 | 64 | |
| 616 | 65 | if (offset == 0) |
| 617 | 66 | { |
| r243094 | r243095 | |
| 619 | 68 | } |
| 620 | 69 | else if(offset == 2) |
| 621 | 70 | { |
| 622 | | COMBINE_DATA(&m_abus_prot_addr); |
| 71 | if (mem_mask&0xffff0000) m_cryptdevice->set_addr_low(data >> 16); |
| 72 | if (mem_mask&0x0000ffff) m_cryptdevice->set_addr_high(data&0xffff); |
| 623 | 73 | |
| 624 | | m_cryptdevice->set_addr_low(m_abus_prot_addr >> 16); |
| 625 | | m_cryptdevice->set_addr_high(m_abus_prot_addr&0xffff); |
| 626 | | |
| 627 | 74 | } |
| 628 | 75 | else if(offset == 3) |
| 629 | 76 | { |
| 630 | 77 | COMBINE_DATA(&m_abus_protkey); |
| 631 | 78 | |
| 632 | 79 | m_cryptdevice->set_subkey(m_abus_protkey>>16); |
| 633 | | |
| 634 | | |
| 635 | | int a_bus_vector; |
| 636 | | a_bus_vector = m_abus_prot_addr >> 16; |
| 637 | | a_bus_vector|= (m_abus_prot_addr & 0xffff) << 16; |
| 638 | | a_bus_vector<<= 1; |
| 639 | | /* |
| 640 | | if (fp) |
| 641 | | { |
| 642 | | fclose(fp); |
| 643 | | fp = 0; |
| 644 | | } |
| 645 | | if (fp2) |
| 646 | | { |
| 647 | | fclose(fp2); |
| 648 | | fp2 = 0; |
| 649 | | } |
| 650 | | char filename[256]; |
| 651 | | sprintf(filename,"encrypted_%s_key_%04x_address_%08x", machine().system().name, m_abus_protkey>>16, a_bus_vector); |
| 652 | | fp=fopen(filename, "w+b"); |
| 653 | | sprintf(filename,"not-encrypted_%s_key_%04x_address_%08x", machine().system().name, m_abus_protkey>>16, a_bus_vector); |
| 654 | | fp2=fopen(filename, "w+b"); |
| 655 | | */ |
| 656 | | |
| 657 | | //printf("MAIN : %08x DATA : %08x %08x\n",m_abus_protkey,m_abus_prot_addr,a_bus_vector); |
| 658 | | |
| 659 | | // if you look at the first transfer in ffreveng this is clearly a ROM address from a table | MAIN : 10d70000 DATA : 0b780013 002616f0 |
| 660 | | // (opr21872.7, offset 0x616f0, which happens to be 0x2616f0 in the ROM region "game0") |
| 661 | | // the values sent by the CPU are plucked from a table above where the data is, located at 0x60000 |
| 662 | | // Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F |
| 663 | | // 00060000 00 00 16 F0 00 00 2F A0 00 00 46 90 00 00 4D 04 |
| 664 | | // this is the first entry in the table, 0x16f0 is the address, 0x2fa0 is the length. |
| 665 | | // the next entry is address 0x4690, length 0x4d04. 0x16f0 + 0x2fa0 == 0x4690 so that entry is located straight after the first one |
| 666 | | // the game reads the number of bytes specified in the length via the protection device, writing them to RAM. This suggests there |
| 667 | | // is no compression going on, only some form of encryption. |
| 668 | | |
| 669 | | m_ctrl_index = a_bus_vector; |
| 670 | 80 | } |
| 671 | 81 | } |
| 672 | 82 | |
| r243094 | r243095 | |
| 675 | 85 | 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)); |
| 676 | 86 | |
| 677 | 87 | INT64 key = get_315_5881_key(machine()); |
| 678 | | |
| 679 | | if (key != -1) |
| 680 | | { |
| 681 | | m_cryptdevice->set_key(key); // use real decryption |
| 682 | | m_using_crypt_device = 1; |
| 683 | | } |
| 684 | | else |
| 685 | | m_using_crypt_device = 0; // use protection sim |
| 88 | m_cryptdevice->set_key(key); |
| 686 | 89 | } |
| 687 | 90 | |
| 688 | | void stv_state::install_sss_protection() |
| 689 | | { |
| 690 | | install_common_protection(); |
| 691 | | m_prot_readback = sss_prot_read_callback; |
| 692 | | } |
| 693 | | |
| 694 | | void stv_state::install_astrass_protection() |
| 695 | | { |
| 696 | | install_common_protection(); |
| 697 | | } |
| 698 | | |
| 699 | | void stv_state::install_ffreveng_protection() |
| 700 | | { |
| 701 | | install_common_protection(); |
| 702 | | m_prot_readback = ffreveng_prot_read_callback; |
| 703 | | } |
| 704 | | |
| 705 | | void stv_state::install_elandore_protection() |
| 706 | | { |
| 707 | | install_common_protection(); |
| 708 | | m_prot_readback = elandore_prot_read_callback; |
| 709 | | } |
| 710 | | |
| 711 | | void stv_state::install_rsgun_protection() |
| 712 | | { |
| 713 | | install_common_protection(); |
| 714 | | m_prot_readback = rsgun_prot_read_callback; |
| 715 | | } |
| 716 | | |
| 717 | | void stv_state::install_twcup98_protection() |
| 718 | | { |
| 719 | | install_common_protection(); |
| 720 | | m_prot_readback = twcup98_prot_read_callback; |
| 721 | | } |
| 722 | | |
| 723 | | |
| 724 | 91 | void stv_state::stv_register_protection_savestates() |
| 725 | 92 | { |
| 726 | 93 | save_item(NAME(m_a_bus)); |
| 727 | | save_item(NAME(m_ctrl_index)); |
| 728 | | save_item(NAME(m_internal_counter)); |
| 729 | | save_item(NAME(m_char_offset)); |
| 730 | 94 | } |