Previous 199869 Revisions Next

r34561 Friday 23rd January, 2015 at 14:08:15 UTC by David Haywood
add the 5881 to a few things in model3.c so that we're ready for keys when they're figured out (nw)
[src/mame/drivers]model3.c
[src/mame/includes]model3.h
[src/mame/machine]315-5881_helper.c

trunk/src/mame/drivers/model3.c
r243072r243073
664664#include "machine/nvram.h"
665665#include "includes/model3.h"
666666
667//#define DECRYPT_ANALYSIS_HACKS
667668
669#ifdef DECRYPT_ANALYSIS_HACKS
670int readcount = 0;
671int segcount = 0;
672#endif
673
668674void model3_state::update_irq_state()
669675{
670676   if ((m_irq_enable & m_irq_state) || m_scsi_irq_state)
r243072r243073
17101716   0x7470, 0x202e, 0x3123, 0x660a, 0x726f, 0x7420, 0x7365, 0x0a74,
17111717};
17121718
1713static const UINT16 oceanhun_prot_data[] =
1714{
1715   0x0000,    // dummy read
1716   0x3d3d, 0x203d, 0x434f, 0x4145, 0x204e, 0x5548, 0x544e, 0x5245,
1717   0x3d20, 0x3d3d, 0x430a, 0x706f, 0x5279, 0x6769, 0x7468, 0x5320,
1718   0x4745, 0x2041, 0x6e45, 0x6574, 0x7072, 0x6972, 0x6573, 0x2c73,
1719   0x4c20, 0x6474, 0x0a2e, 0x6d41, 0x7375, 0x6d65, 0x6e65, 0x2074,
1720   0x2652, 0x2044, 0x6544, 0x7470, 0x202e, 0x3123, 0x4b0a, 0x7a61,
1721   0x6e75, 0x7261, 0x2069, 0x7354, 0x6b75, 0x6d61, 0x746f, 0x206f,
1722   0x6553, 0x7463, 0x6f69, 0x206e, 0x614d, 0x616e, 0x6567, 0x0a72
1723};
1724/*
1725   dirtdvls: first 2 words read are discarded, then every other word
1726   is written to char RAM starting at f1013400 (in between words are
1727   discarded).
1728*/
17291719
1720
1721
17301722READ64_MEMBER(model3_state::model3_security_r)
17311723{
17321724   UINT64 retvalue = U64(0xffffffffffffffff);
r243072r243073
17361728      case 0x00 / 8:    retvalue = 0; break;       /* status */
17371729      case 0x1c/8:                    /* security board data read */
17381730      {
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         
17391736         if (core_stricmp(machine().system().name, "fvipers2") == 0)
17401737         {
17411738            UINT64 data = (UINT64)fvipers2_prot_data[m_prot_data_ptr++] << 16;
r243072r243073
17651762            }
17661763            retvalue = data;
17671764         }
1768         else if (core_stricmp(machine().system().name, "oceanhun") == 0)
1769         {
1770            UINT64 data = (UINT64)oceanhun_prot_data[m_prot_data_ptr++] << 16;
1771            if (m_prot_data_ptr >= 58)
1772            {
1773               m_prot_data_ptr = 0;
1774            }
1775            retvalue = data;
1776         }
1777         else if (core_stricmp(machine().system().name, "dirtdvls") == 0)
1778         {
1779            retvalue = U64(0xffffffffffffffff);
1780         }
17811765         else
17821766         {
17831767            retvalue = 0;
r243072r243073
17851769         break;
17861770      }
17871771   }
1788   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));
17891772
17901773   return retvalue;
17911774}
17921775
1776
1777
1778WRITE64_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
17931823READ64_MEMBER(model3_state::model3_5881prot_r)
17941824{
17951825   UINT64 retvalue = U64(0xffffffffffffffff);
r243072r243073
18511881   {
18521882      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));
18531883   }
1854
1855
1856
18571884}
18581885
18591886WRITE64_MEMBER(model3_state::daytona2_rombank_w)
r243072r243073
55485575   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
55495576MACHINE_CONFIG_END
55505577
5551static MACHINE_CONFIG_START( model3_20, model3_state )
5578static MACHINE_CONFIG_START(model3_20, model3_state)
55525579   MCFG_CPU_ADD("maincpu", PPC603R, 166000000)
55535580   MCFG_PPC_BUS_FREQUENCY(66000000)    /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
55545581   MCFG_CPU_PROGRAM_MAP(model3_mem)
r243072r243073
55575584   MCFG_CPU_ADD("audiocpu", M68000, 12000000)
55585585   MCFG_CPU_PROGRAM_MAP(model3_snd)
55595586
5560   MCFG_MACHINE_START_OVERRIDE(model3_state,model3_20)
5561   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)
55625589
55635590   MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
55645591   MCFG_NVRAM_ADD_1FILL("backup")
r243072r243073
55855612   MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
55865613MACHINE_CONFIG_END
55875614
5588static MACHINE_CONFIG_DERIVED( model3_20_5881, model3_20 )
5615static MACHINE_CONFIG_DERIVED(model3_20_5881, model3_20)
55895616   MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0)
55905617   MCFG_SET_READ_CALLBACK(model3_state, crypt_read_callback)
55915618MACHINE_CONFIG_END
55925619
5593static MACHINE_CONFIG_START( model3_21, model3_state )
5620static MACHINE_CONFIG_START(model3_21, model3_state)
55945621   MCFG_CPU_ADD("maincpu", PPC603R, 166000000)
55955622   MCFG_PPC_BUS_FREQUENCY(66000000)    /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
55965623   MCFG_CPU_PROGRAM_MAP(model3_mem)
r243072r243073
55995626   MCFG_CPU_ADD("audiocpu", M68000, 12000000)
56005627   MCFG_CPU_PROGRAM_MAP(model3_snd)
56015628
5602   MCFG_MACHINE_START_OVERRIDE(model3_state,model3_21)
5603   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)
56045631
56055632   MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
56065633   MCFG_NVRAM_ADD_1FILL("backup")
r243072r243073
56275654   MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
56285655MACHINE_CONFIG_END
56295656
5657
56305658UINT16 model3_state::crypt_read_callback(UINT32 addr)
56315659{
56325660   UINT16 dat = 0;
r243072r243073
56375665
56385666//   dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8);
56395667//   printf("reading %04x\n", dat);
5668
56405669   return dat;
56415670}
56425671
r243072r243073
56915720   }
56925721   else
56935722   {
5694      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) );                   
56955724   }
56965725}
56975726
r243072r243073
59255954{
59265955   //UINT32 *rom = (UINT32*)memregion("user1")->base();
59275956   DRIVER_INIT_CALL(model3_20);
5957   DRIVER_INIT_CALL(genprot);
59285958
59295959   //rom[(0xf6dd0^4)/4] = 0x60000000;
59305960}
r243072r243073
59345964   m_step20_with_old_real3d = true;
59355965
59365966   DRIVER_INIT_CALL(model3_20);
5967   DRIVER_INIT_CALL(genprot);
59375968}
59385969
59395970DRIVER_INIT_MEMBER(model3_state,dirtdvls)
r243072r243073
59565987   rom[(0x6063c4^4)/4] = 0x60000000;
59575988   rom[(0x616434^4)/4] = 0x60000000;
59585989   rom[(0x69f4e4^4)/4] = 0x60000000;
5990
5991   DRIVER_INIT_CALL(genprot);
59595992}
59605993
59615994DRIVER_INIT_MEMBER(model3_state,dayto2pe)
r243072r243073
59716004   rom[(0x618b28^4)/4] = 0x60000000;       // jump to encrypted code
59726005
59736006   rom[(0x64ca34^4)/4] = 0x60000000;       // dec
6007
6008   DRIVER_INIT_CALL(genprot);
59746009}
59756010
59766011DRIVER_INIT_MEMBER(model3_state,spikeout)
r243072r243073
60276062   m_step20_with_old_real3d = true;
60286063
60296064   DRIVER_INIT_CALL(model3_20);
6065   DRIVER_INIT_CALL(genprot);
60306066}
60316067
60326068DRIVER_INIT_MEMBER(model3_state,lamachin)
r243072r243073
60346070   m_step20_with_old_real3d = true;
60356071
60366072   DRIVER_INIT_CALL(model3_20);
6073   DRIVER_INIT_CALL(genprot);
60376074}
60386075
60396076
r243072r243073
60616098GAME( 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 )
60626099GAME( 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 )
60636100GAME( 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 )
6064GAME( 1998, lamachin,       0, model3_20,      model3, model3_state,   lamachin, ROT0, "Sega", "L.A. Machineguns", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
6101GAME( 1998, lamachin,       0, model3_20_5881, model3, model3_state,   lamachin, ROT0, "Sega", "L.A. Machineguns", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60656102GAME( 1998, oceanhun,       0, model3_20_5881, model3, model3_state,   oceanhun, ROT0, "Sega", "The Ocean Hunter", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60666103GAME( 1998, skichamp,       0, model3_20,      skichamp, model3_state, skichamp, ROT0, "Sega", "Ski Champ", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60676104GAME( 1998, srally2,        0, model3_20,      scud, model3_state,      srally2, ROT0, "Sega", "Sega Rally 2", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60686105GAME( 1998, srally2x,       0, model3_20,      scud, model3_state,      srally2, ROT0, "Sega", "Sega Rally 2 DX", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
6069GAME( 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 )
6070GAME( 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 )
6106GAME( 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 )
6107GAME( 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 )
60716108GAME( 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 )
60726109GAME( 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 )
60736110GAME( 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 )
r243072r243073
60766113GAME( 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 )
60776114
60786115/* Model 3 Step 2.1 */
6079GAME( 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 )
6080GAME( 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 )
6116GAME( 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 )
6117GAME( 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 )
60816118GAME( 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 )
60826119GAME( 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 )
60836120GAME( 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 )
60846121GAME( 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 )
60856122GAME( 1998, spikeout,         0, model3_21_5881, model3,   model3_state, spikeout, ROT0, "Sega", "Spikeout (Revision C)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60866123GAME( 1998, spikeofe,         0, model3_21_5881, model3,   model3_state, spikeofe, ROT0, "Sega", "Spikeout Final Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
6087GAME( 1998, magtruck,         0, model3_21,      eca,      model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
6124GAME( 1998, magtruck,         0, model3_21_5881, eca,      model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60886125GAME( 1999, eca,              0, model3_21_5881, eca,      model3_state, eca,      ROT0, "Sega", "Emergency Call Ambulance", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
60896126GAME( 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 )
60906127GAME( 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/includes/model3.h
r243072r243073
231231   DECLARE_READ64_MEMBER(network_r);
232232   DECLARE_WRITE64_MEMBER(network_w);
233233   DECLARE_READ64_MEMBER(model3_security_r);
234   DECLARE_WRITE64_MEMBER(model3_security_w);
235
236
234237   DECLARE_WRITE64_MEMBER(daytona2_rombank_w);
235238   DECLARE_WRITE16_MEMBER(model3snd_ctrl);
236239   UINT32 pci_device_get_reg();
trunk/src/mame/machine/315-5881_helper.c
r243072r243073
150150   { "eca",             -1         }, //             ????     317-0265-COM   Model 3
151151   { "ecax",            -1         }, //             ????     317-0265-COM   Model 3
152152   { "ecap",            -1         }, //             ????     317-0265-COM   Model 3
153   { "spikeout",        -1         }, //             ????     ?              Model 3
154   { "spikeofe",        -1         }, //             ????     ?              Model 3
153   { "spikeout",        -1         }, //             ????     317-0247-COM   Model 3
154   { "spikeofe",        -1         }, //             ????     317-0247-COM   Model 3
155   { "lamachin",        -1         }, //             ????     317-0244-COM   Model 3
156   { "magtruck",        -1         }, //             ????     ?              Model 3
157   { "von2",            -1         }, //             ????     ?              Model 3
158   { "von254g",         -1         }, //             ????     ?              Model 3
159   { "daytona2",        -1         }, //             ????     ?              Model 3
160   { "dayto2pe",        -1         }, //             ????     ?              Model 3
155161
156162   
157163   { NULL, 0 }    // end of table


Previous 199869 Revisions Next


© 1997-2024 The MAME Team