New machines marked as NOT_WORKING (#7845)

* New machines marked as NOT_WORKING

----------------------------------
Tierras Salvajes (100Hz display) [Arcade Planet, Recreativas.org]

New clones marked as NOT_WORKING
--------------------------------
Marbella Vice (100Hz display) [Arcade Planet, Recreativas.org]
This commit is contained in:
ClawGrip 2021-03-09 18:15:49 +01:00 committed by GitHub
parent efe9ac40f6
commit ec241db48e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 235 additions and 171 deletions

View File

@ -4,7 +4,7 @@
American Laser Game Hardware
Amiga 500 + sony laserdisc player LDP-1450
Amiga 500 + Sony laserdisc player LDP-1450
(LDP-3300P for Zorton Brothers, LDP-1500 for Marbella Vice)
Games Supported:
@ -19,8 +19,9 @@
The Last Bounty Hunter [2 versions]
Fast Draw Showdown [2 versions]
Platoon
Marbella Vice [2 versions]
Tierras Salvajes
Zorton Brothers (Los Justicieros) [2 versions]
Marbella Vice
**************************************************************************************/
@ -90,8 +91,6 @@ private:
/*************************************
*
* Lightgun reading
@ -115,7 +114,6 @@ int alg_state::get_lightgun_pos(int player, int *x, int *y)
/*************************************
*
* Video startup
@ -124,17 +122,16 @@ int alg_state::get_lightgun_pos(int player, int *x, int *y)
VIDEO_START_MEMBER(alg_state,alg)
{
/* standard video start */
// Standard video start
VIDEO_START_CALL_MEMBER(amiga);
/* configure pen 4096 as transparent in the renderer and use it for the genlock color */
// Configure pen 4096 as transparent in the renderer and use it for the genlock color
m_palette->set_pen_color(4096, rgb_t(0,0,0,0));
set_genlock_color(4096);
}
/*************************************
*
* I/O ports
@ -143,8 +140,8 @@ VIDEO_START_MEMBER(alg_state,alg)
void alg_state::potgo_w(uint16_t data)
{
/* bit 15 controls whether pin 9 is input/output */
/* bit 14 controls the value, which selects which player's controls to read */
// bit 15 controls whether pin 9 is input/output
// bit 14 controls the value, which selects which player's controls to read
m_input_select = (data & 0x8000) ? ((data >> 14) & 1) : 0;
}
@ -153,7 +150,7 @@ CUSTOM_INPUT_MEMBER(alg_state::lightgun_pos_r)
{
int x = 0, y = 0;
/* get the position based on the input select */
// Get the position based on the input select
get_lightgun_pos(m_input_select, &x, &y);
return (y << 8) | (x >> 2);
}
@ -161,20 +158,19 @@ CUSTOM_INPUT_MEMBER(alg_state::lightgun_pos_r)
READ_LINE_MEMBER(alg_state::lightgun_trigger_r)
{
/* read the trigger control based on the input select */
// Read the trigger control based on the input select
return (m_triggers->read() >> m_input_select) & 1;
}
READ_LINE_MEMBER(alg_state::lightgun_holster_r)
{
/* read the holster control based on the input select */
// Read the holster control based on the input select
return (m_triggers->read() >> (2 + m_input_select)) & 1;
}
/*************************************
*
* Memory map
@ -205,21 +201,21 @@ void alg_state::a500_mem(address_map &map)
void alg_state::main_map_r1(address_map &map)
{
a500_mem(map);
map(0xf00000, 0xf1ffff).rom().region("game_program", 0); /* Custom ROM */
map(0xf00000, 0xf1ffff).rom().region("game_program", 0); // Custom ROM
map(0xf54000, 0xf55fff).ram().share("nvram");
}
void alg_state::main_map_r2(address_map &map)
{
a500_mem(map);
map(0xf00000, 0xf3ffff).rom().region("game_program", 0); /* Custom ROM */
map(0xf00000, 0xf3ffff).rom().region("game_program", 0); // Custom ROM
map(0xf7c000, 0xf7dfff).ram().share("nvram");
}
void alg_state::main_map_picmatic(address_map &map)
{
a500_mem(map);
map(0xf00000, 0xf1ffff).rom().region("game_program", 0); /* Custom ROM */
map(0xf00000, 0xf1ffff).rom().region("game_program", 0); // Custom ROM
map(0xf40000, 0xf41fff).ram().share("nvram");
// TODO: both games accesses 0xf20000-0xf7ffff, what for?
}
@ -233,44 +229,44 @@ void alg_state::main_map_picmatic(address_map &map)
*************************************/
static INPUT_PORTS_START( alg )
PORT_START("joy_0_dat") /* read by Amiga core */
PORT_START("joy_0_dat") // Read by Amiga core
PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(alg_state, amiga_joystick_convert<0>)
PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("joy_1_dat") /* read by Amiga core */
PORT_START("joy_1_dat") // Read by Amiga core
PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(alg_state, amiga_joystick_convert<1>)
PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("potgo") /* read by Amiga core */
PORT_START("potgo") // Read by Amiga core
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0xaaff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("HVPOS") /* read by Amiga core */
PORT_START("HVPOS") // Read by Amiga core
PORT_BIT( 0x1ffff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(alg_state, lightgun_pos_r)
PORT_START("FIRE")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("p1_joy") /* referenced by JOY0DAT */
PORT_START("p1_joy") // Referenced by JOY0DAT
PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_HIGH )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_START("p2_joy") /* referenced by JOY1DAT */
PORT_START("p2_joy") // Referenced by JOY1DAT
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("GUN1X") /* referenced by lightgun_pos_r */
PORT_START("GUN1X") // Referenced by lightgun_pos_r
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("GUN1Y") /* referenced by lightgun_pos_r */
PORT_START("GUN1Y") // Referenced by lightgun_pos_r
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(1)
INPUT_PORTS_END
@ -288,13 +284,13 @@ static INPUT_PORTS_START( alg_2p )
PORT_MODIFY("p2_joy")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(alg_state, lightgun_holster_r)
PORT_START("GUN2X") /* referenced by lightgun_pos_r */
PORT_START("GUN2X") // Referenced by lightgun_pos_r
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_START("GUN2Y") /* referenced by lightgun_pos_r */
PORT_START("GUN2Y") // Referenced by lightgun_pos_r
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_START("TRIGGERS") /* referenced by lightgun_trigger_r and lightgun_holster_r */
PORT_START("TRIGGERS") // Referenced by lightgun_trigger_r and lightgun_holster_r
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
@ -311,7 +307,7 @@ INPUT_PORTS_END
void alg_state::alg_r1(machine_config &config)
{
/* basic machine hardware */
// Basic machine hardware
M68000(config, m_maincpu, amiga_state::CLK_7M_NTSC);
m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_r1);
@ -319,7 +315,7 @@ void alg_state::alg_r1(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
// Video hardware
ntsc_video(config);
SONY_LDP1450(config, m_laserdisc, 9600);
@ -331,7 +327,7 @@ void alg_state::alg_r1(machine_config &config)
MCFG_VIDEO_START_OVERRIDE(alg_state,alg)
/* sound hardware */
// Sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@ -346,7 +342,7 @@ void alg_state::alg_r1(machine_config &config)
m_laserdisc->add_route(0, "lspeaker", 1.0);
m_laserdisc->add_route(1, "rspeaker", 1.0);
/* cia */
// cia
MOS8520(config, m_cia_0, amiga_state::CLK_E_NTSC);
m_cia_0->irq_wr_callback().set(FUNC(amiga_state::cia_0_irq));
m_cia_0->pa_rd_callback().set_ioport("FIRE");
@ -374,7 +370,7 @@ void alg_state::alg_r2(machine_config &config)
void alg_state::picmatic(machine_config &config)
{
alg_r1(config);
/* adjust for PAL specs */
// Adjust for PAL specs
m_maincpu->set_clock(amiga_state::CLK_7M_PAL);
m_maincpu->set_addrmap(AS_PROGRAM, &alg_state::main_map_picmatic);
@ -389,6 +385,100 @@ void alg_state::picmatic(machine_config &config)
/*************************************
*
* Per-game decryption
*
*************************************/
void alg_state::init_ntsc()
{
m_agnus_id = AGNUS_NTSC;
m_denise_id = DENISE;
}
void alg_state::init_pal()
{
m_agnus_id = AGNUS_PAL;
m_denise_id = DENISE;
}
void alg_state::init_palr1()
{
init_ntsc();
uint32_t length = memregion("game_program")->bytes();
uint8_t *rom = memregion("game_program")->base();
std::vector<uint8_t> original(length);
memcpy(&original[0], rom, length);
for (uint32_t srcaddr = 0; srcaddr < length; srcaddr++)
{
uint32_t dstaddr = srcaddr;
if (srcaddr & 0x2000) dstaddr ^= 0x1000;
if (srcaddr & 0x8000) dstaddr ^= 0x4000;
rom[dstaddr] = original[srcaddr];
}
}
void alg_state::init_palr3()
{
init_ntsc();
uint32_t length = memregion("game_program")->bytes();
uint8_t *rom = memregion("game_program")->base();
std::vector<uint8_t> original(length);
memcpy(&original[0], rom, length);
for (uint32_t srcaddr = 0; srcaddr < length; srcaddr++)
{
uint32_t dstaddr = srcaddr;
if (srcaddr & 0x2000) dstaddr ^= 0x1000;
rom[dstaddr] = original[srcaddr];
}
}
void alg_state::init_palr6()
{
init_ntsc();
uint32_t length = memregion("game_program")->bytes();
uint8_t *rom = memregion("game_program")->base();
std::vector<uint8_t> original(length);
memcpy(&original[0], rom, length);
for (uint32_t srcaddr = 0; srcaddr < length; srcaddr++)
{
uint32_t dstaddr = srcaddr;
if (~srcaddr & 0x2000) dstaddr ^= 0x1000;
if ( srcaddr & 0x8000) dstaddr ^= 0x4000;
dstaddr ^= 0x20000;
rom[dstaddr] = original[srcaddr];
}
}
void alg_state::init_aplatoon()
{
init_ntsc();
// NOT DONE TODO FIGURE OUT THE RIGHT ORDER!!!!
uint8_t *rom = memregion("game_program")->base();
std::unique_ptr<uint8_t[]> decrypted = std::make_unique<uint8_t[]>(0x40000);
static const int shuffle[] =
{
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
};
for (int i = 0; i < 64; i++)
memcpy(decrypted.get() + i * 0x1000, rom + shuffle[i] * 0x1000, 0x1000);
memcpy(rom, decrypted.get(), 0x40000);
logerror("decrypt done\n ");
}
/*************************************
*
* BIOS definitions
@ -409,7 +499,7 @@ void alg_state::picmatic(machine_config &config)
*
*************************************/
/* BIOS */
// BIOS
ROM_START( alg_bios )
ALG_BIOS
@ -417,8 +507,8 @@ ROM_START( alg_bios )
ROM_END
/* Rev. A board */
/* PAL R1 */
// Rev. A board
// PAL R1
ROM_START( maddoga )
ALG_BIOS
@ -431,8 +521,8 @@ ROM_START( maddoga )
ROM_END
/* PAL R3 */
ROM_START( wsjr ) /* 1.6 */
// PAL R3
ROM_START( wsjr ) // 1.6
ALG_BIOS
ROM_REGION16_BE( 0x20000, "game_program", ROMREGION_ERASEFF )
@ -443,7 +533,7 @@ ROM_START( wsjr ) /* 1.6 */
DISK_IMAGE_READONLY( "wsjr", 0, NO_DUMP )
ROM_END
ROM_START( wsjr_15 ) /* 1.5 */
ROM_START( wsjr_15 ) // 1.5
ALG_BIOS
ROM_REGION16_BE( 0x20000, "game_program", ROMREGION_ERASEFF )
@ -455,7 +545,7 @@ ROM_START( wsjr_15 ) /* 1.5 */
ROM_END
//REV.B
// REV.B
ROM_START( maddog )
ALG_BIOS
@ -691,33 +781,34 @@ ROM_START( aplatoon )
DISK_IMAGE_READONLY( "platoon", 0, NO_DUMP )
ROM_END
// zortonbr v1.01
// ROM board labeled "PICMATIC LM6 04-01-92"
// Uses Sony LaserMax LDP-3300P, a separate video encoder PCB with a Motorola MC1378B and a standard A500+ PCB.
// ROM contains text: "Marbella Vice CopyRight 1994 Picmatic S.A. Program chief Brian Meitiner" (but it's Zorton Brothers)
// References to linked libraries: Audio Master IV, AMAS II Version 1.1
// Has a blacklist for high scores:
// "FUCK SHIT CUNT PRICK PENUS BALLS PUTA JODER POLLA PUTO MAMON PICHA COJON TETA TETAS TITS CHULO CULO PENE PIJO LEFA LISTO"
ROM_START( zortonbr )
ALG_BIOS
ROM_REGION16_BE( 0x40000, "game_program", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "zort_1-01_23-3-94_odd.u2", 0x000001, 0x10000, CRC(21e63949) SHA1(0a62ad108f8cfa00dc8f03dea2ff6f1b277e8d5d) )
ROM_LOAD16_BYTE( "zort_1-01_23-3-94_even.u3", 0x000000, 0x10000, CRC(6a051c6a) SHA1(f8daafab068fef57e47287bd72be860b84e2e75c) )
ROM_REGION( 0x00800, "unused_nvram", ROMREGION_ERASEFF ) //NVRAM, unused
ROM_LOAD( "zort_mk48z02b.u13", 0x0000, 0x0800, CRC(45b064a9) SHA1(f446be2b0e3929e182b9f97989c30b3ee308c103) )
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "zortonbr", 0, NO_DUMP )
ROM_END
ROM_START( zortonbr_100 )
ALG_BIOS
ROM_REGION16_BE( 0x40000, "game_program", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "zb_u2.bin", 0x000001, 0x10000, CRC(938b25cb) SHA1(d0114bbc588dcfce6a469013d0e35afb93e38af5) )
ROM_LOAD16_BYTE( "zb_u3.bin", 0x000000, 0x10000, CRC(f59cfc4a) SHA1(9fadf7f1e23d6b4e828bf2b3de919d087c690a3f) )
ROM_LOAD16_BYTE( "zb_u2.bin", 0x00001, 0x10000, CRC(938b25cb) SHA1(d0114bbc588dcfce6a469013d0e35afb93e38af5) )
ROM_LOAD16_BYTE( "zb_u3.bin", 0x00000, 0x10000, CRC(f59cfc4a) SHA1(9fadf7f1e23d6b4e828bf2b3de919d087c690a3f) )
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "zortonbr", 0, NO_DUMP )
ROM_END
/* zortonbr v1.01
ROM board labeled "PICMATIC LM6 04-01-92"
Uses Sony LaserMax LDP-3300P, a separate video encoder PCB with a Motorola MC1378B and a standard A500+ PCB.
ROM contains text: "Marbella Vice CopyRight 1994 Picmatic S.A. Program chief Brian Meitiner" (but it's Zorton Brothers)
References to linked libraries: Audio Master IV, AMAS II Version 1.1
Has a blacklist for high scores:
"FUCK SHIT CUNT PRICK PENUS BALLS PUTA JODER POLLA PUTO MAMON PICHA COJON TETA TETAS TITS CHULO CULO PENE PIJO LEFA LISTO" */
ROM_START( zortonbr )
ALG_BIOS
ROM_REGION16_BE( 0x40000, "game_program", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "zort_1-01_23-3-94_odd.u2", 0x00001, 0x10000, CRC(21e63949) SHA1(0a62ad108f8cfa00dc8f03dea2ff6f1b277e8d5d) )
ROM_LOAD16_BYTE( "zort_1-01_23-3-94_even.u3", 0x00000, 0x10000, CRC(6a051c6a) SHA1(f8daafab068fef57e47287bd72be860b84e2e75c) )
ROM_REGION( 0x00800, "unused_nvram", ROMREGION_ERASEFF ) // NVRAM, unused
ROM_LOAD( "zort_mk48z02b.u13", 0x0000, 0x0800, CRC(45b064a9) SHA1(f446be2b0e3929e182b9f97989c30b3ee308c103) )
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "zortonbr", 0, NO_DUMP )
@ -728,165 +819,136 @@ ROM_START( marvice )
ALG_BIOS
ROM_REGION16_BE( 0x40000, "game_program", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "mspsl 200 odd 30394.u2", 0x000000, 0x10000, CRC(01c9a503) SHA1(f61ec2cd241b2bf8a982e81e5a18178601f0a0a0) )
ROM_LOAD16_BYTE( "mspsl 200 even 30394.u3", 0x000001, 0x10000, CRC(78eb6fd6) SHA1(e404818095f03b6e0746620f5ce48c3f7149b8a0) )
ROM_LOAD16_BYTE( "mspsl 200 odd 30394.u2", 0x00000, 0x10000, CRC(01c9a503) SHA1(f61ec2cd241b2bf8a982e81e5a18178601f0a0a0) )
ROM_LOAD16_BYTE( "mspsl 200 even 30394.u3", 0x00001, 0x10000, CRC(78eb6fd6) SHA1(e404818095f03b6e0746620f5ce48c3f7149b8a0) )
ROM_REGION( 0x800, "unk", ROMREGION_ERASEFF ) // nvram contents, should be x4 in size
ROM_REGION( 0x800, "unk", ROMREGION_ERASEFF ) // NVRAM contents, should be x4 in size
ROM_LOAD( "mk48z02b-20.u13", 0x0000, 0x0800, BAD_DUMP CRC(e6079615) SHA1(f528b2a600ab047ad7f87f4dbae65a7e4cd10f8c) )
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "marvice", 0, NO_DUMP )
ROM_END
ROM_START( marvice100hz )
ALG_BIOS
ROM_REGION16_BE( 0x40000, "game_program", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "marbella_vice_100hz_odd.bin", 0x00001, 0x10000, CRC(2c9ebccb) SHA1(4e8dcb8526a8debb70f3f56713903ba8bfbb3ed5) )
ROM_LOAD16_BYTE( "marbella_vice_100hz_even.bin", 0x00000, 0x10000, CRC(d2b5e5ca) SHA1(de76503961076acad405db9e83bd5334b02bf908) )
/*************************************
*
* Per-game decryption
*
*************************************/
ROM_REGION( 0x800, "unk", ROMREGION_ERASEFF )
ROM_LOAD( "mk48z02b-20.bin", 0x0000, 0x0800, BAD_DUMP CRC(e6079615) SHA1(f528b2a600ab047ad7f87f4dbae65a7e4cd10f8c) ) // From 'marvice'
void alg_state::init_ntsc()
{
m_agnus_id = AGNUS_NTSC;
m_denise_id = DENISE;
}
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "marvice", 0, NO_DUMP )
ROM_END
void alg_state::init_pal()
{
m_agnus_id = AGNUS_PAL;
m_denise_id = DENISE;
}
/* Tierras Salvajes 100Hz
PCB silkscreened PICMATIC S.A. 27-11-1992
______________________________________________
| ________ ···· |
|___ |_______| __________ __________ |
|| | ___________ F16L8-25CN |74HC574E| |
|| | |74HC540P_| |
|| | __________ __________ __________ |
|| | |__8xDIPS_| |74HC574E_| |74HC574E_| |
|| | _____________ |
|| | |MK48Z02B-20 | __________ __________ |
|| | |____________| |74HC4040N| |74HC4040N| |
|| | _____________ __________ __________ |
|| | | U7 EMPTY | F16L8-25CN U14 EMPTY| |
|| | |____________| __________ __________ |
|| | _____________ F16L8-25CN GAL16V8-20 |
|| | | EPROM ODD | __________ ________ |
|| | |____________| |74HC574E| Xtal 28.37516 MHz
|| | _____________ |
|| | | U6 EMPTY | __________ __________ |
|| | |____________| |74HC541N| |74HC132B1| |
|| | _____________ |
|| | | EPROM EVEN | _________ _________ |
||_| |____________| | | | | |
|_____________________| |____| |_|
|_______| |_______|
*/
ROM_START( tierras100hz )
ALG_BIOS
void alg_state::init_palr1()
{
init_ntsc();
ROM_REGION16_BE( 0x40000, "game_program", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "spilz0d4-odd-27-9-95-salvajes-displays-27c512.u4", 0x00001, 0x10000, CRC(d46dd5e0) SHA1(7d808c6ed88bf9a98cdb468ce71c0952b0b5d7b2) )
ROM_LOAD16_BYTE( "spilz0d4-even-27-9-95-salvajes-displays-27c512.u5", 0x00000, 0x10000, CRC(730e4696) SHA1(4db0cc7d160de5e70f1d1842fa94adb8ee7f954f) )
uint32_t length = memregion("game_program")->bytes();
uint8_t *rom = memregion("game_program")->base();
std::vector<uint8_t> original(length);
ROM_REGION( 0x00800, "unused_nvram", ROMREGION_ERASEFF ) // NVRAM, unused
ROM_LOAD( "mk48z02b-20.u8", 0x0000, 0x0800, CRC(18eb5a50) SHA1(9b626978350cda546aa4b890c68ddb28058adf75) )
memcpy(&original[0], rom, length);
for (uint32_t srcaddr = 0; srcaddr < length; srcaddr++)
{
uint32_t dstaddr = srcaddr;
if (srcaddr & 0x2000) dstaddr ^= 0x1000;
if (srcaddr & 0x8000) dstaddr ^= 0x4000;
rom[dstaddr] = original[srcaddr];
}
}
ROM_REGION( 0x800, "plds", ROMREGION_ERASEFF )
ROM_LOAD( "gal16v8.u19", 0x000, 0x117, CRC(f2864878) SHA1(f8f8e7604ece9c6437bc381170d891237fde1372) )
ROM_LOAD( "f16l8-25cn.1", 0x200, 0x117, NO_DUMP )
ROM_LOAD( "f16l8-25cn.2", 0x400, 0x117, NO_DUMP )
ROM_LOAD( "f16l8-25cn.3", 0x600, 0x117, NO_DUMP )
void alg_state::init_palr3()
{
init_ntsc();
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "tierras_salvajes_1995_spanish_english", 0, NO_DUMP )
ROM_END
uint32_t length = memregion("game_program")->bytes();
uint8_t *rom = memregion("game_program")->base();
std::vector<uint8_t> original(length);
memcpy(&original[0], rom, length);
for (uint32_t srcaddr = 0; srcaddr < length; srcaddr++)
{
uint32_t dstaddr = srcaddr;
if (srcaddr & 0x2000) dstaddr ^= 0x1000;
rom[dstaddr] = original[srcaddr];
}
}
void alg_state::init_palr6()
{
init_ntsc();
uint32_t length = memregion("game_program")->bytes();
uint8_t *rom = memregion("game_program")->base();
std::vector<uint8_t> original(length);
memcpy(&original[0], rom, length);
for (uint32_t srcaddr = 0; srcaddr < length; srcaddr++)
{
uint32_t dstaddr = srcaddr;
if (~srcaddr & 0x2000) dstaddr ^= 0x1000;
if ( srcaddr & 0x8000) dstaddr ^= 0x4000;
dstaddr ^= 0x20000;
rom[dstaddr] = original[srcaddr];
}
}
void alg_state::init_aplatoon()
{
init_ntsc();
/* NOT DONE TODO FIGURE OUT THE RIGHT ORDER!!!! */
uint8_t *rom = memregion("game_program")->base();
std::unique_ptr<uint8_t[]> decrypted = std::make_unique<uint8_t[]>(0x40000);
static const int shuffle[] =
{
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
};
for (int i = 0; i < 64; i++)
memcpy(decrypted.get() + i * 0x1000, rom + shuffle[i] * 0x1000, 0x1000);
memcpy(rom, decrypted.get(), 0x40000);
logerror("decrypt done\n ");
}
} // Anonymous namespace
/*************************************
*
* Game drivers
*
*************************************/
/* BIOS */
// BIOS
GAME( 199?, alg_bios, 0, alg_r1, alg, alg_state, init_ntsc, ROT0, "American Laser Games", "American Laser Games BIOS", MACHINE_IS_BIOS_ROOT )
/* Rev. A board */
/* PAL R1 */
// Rev. A board
// PAL R1
GAME( 1990, maddoga, maddog, alg_r1, alg, alg_state, init_palr1, ROT0, "American Laser Games", "Mad Dog McCree v1C board rev.A", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* PAL R3 */
// PAL R3
GAME( 1991, wsjr, alg_bios, alg_r1, alg, alg_state, init_palr3, ROT0, "American Laser Games", "Who Shot Johnny Rock? v1.6", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1991, wsjr_15, wsjr, alg_r1, alg, alg_state, init_palr3, ROT0, "American Laser Games", "Who Shot Johnny Rock? v1.5", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* Rev. B board */
/* PAL R6 */
// Rev. B board
// PAL R6
GAME( 1990, maddog, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Mad Dog McCree v2.03 board rev.B", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1990, maddog_202, maddog, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Mad Dog McCree v2.02 board rev.B", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* works ok but uses right player (2) controls only for trigger and holster */
// Works OK but uses right player (2) controls only for trigger and holster
GAME( 1992, maddog2, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Mad Dog II: The Lost Gold v2.04", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, maddog2_202, maddog2, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Mad Dog II: The Lost Gold v2.02", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, maddog2_110, maddog2, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Mad Dog II: The Lost Gold v1.10", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, maddog2_100, maddog2, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Mad Dog II: The Lost Gold v1.00", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* works ok but uses right player (2) controls only for trigger and holster */
// Works ok but uses right player (2) controls only for trigger and holster
GAME( 1992, spacepir, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Space Pirates v2.2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, spacepir_14, spacepir, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Space Pirates v1.4", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, gallgall, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Gallagher's Gallery v2.2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, gallgall_21, gallgall, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Gallagher's Gallery v2.1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* all good, but no holster */
// All good, but no holster
GAME( 1993, crimepat, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.51", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimepat_14, crimepat, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.4", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimepat_12, crimepat, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimepat_10, crimepat, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimepat_14, crimepat, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.4", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimepat_12, crimepat, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimepat_10, crimepat, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol v1.0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimep2, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol 2: Drug Wars v1.3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1993, crimep2_11, crimep2, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "Crime Patrol 2: Drug Wars v1.1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, lastbh, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "The Last Bounty Hunter v1.01", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, lastbh_006, lastbh, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "The Last Bounty Hunter v0.06", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, fastdraw, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT90, "American Laser Games", "Fast Draw Showdown v1.31", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, fastdraw_130, fastdraw, alg_r2, alg_2p, alg_state, init_palr6, ROT90, "American Laser Games", "Fast Draw Showdown v1.30", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* works ok but uses right player (2) controls only for trigger and holster */
GAME( 1994, lastbh, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "The Last Bounty Hunter v1.01", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, lastbh_006, lastbh, alg_r2, alg_2p, alg_state, init_palr6, ROT0, "American Laser Games", "The Last Bounty Hunter v0.06", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, fastdraw, alg_bios, alg_r2, alg_2p, alg_state, init_palr6, ROT90, "American Laser Games", "Fast Draw Showdown v1.31", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, fastdraw_130, fastdraw, alg_r2, alg_2p, alg_state, init_palr6, ROT90, "American Laser Games", "Fast Draw Showdown v1.30", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// Works OK but uses right player (2) controls only for trigger and holster
/* NOVA games on ALG hardware with own address scramble */
// NOVA games on ALG hardware with own address scramble
GAME( 199?, aplatoon, alg_bios, alg_r2, alg, alg_state, init_aplatoon, ROT0, "Nova?", "Platoon V.3.1 US", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
/* Web Picmatic games PAL tv standard, own rom board */
GAME( 1994, zortonbr, alg_bios, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Zorton Brothers v1.01 (Los Justicieros)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// Web Picmatic games PAL TV standard or 100Hz, own ROM board
GAME( 1993, zortonbr_100, zortonbr, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Zorton Brothers v1.00 (Los Justicieros)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, marvice, alg_bios, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Marbella Vice", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, zortonbr, alg_bios, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Zorton Brothers v1.01 (Los Justicieros)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, marvice, alg_bios, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Marbella Vice", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, marvice100hz, alg_bios, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Marbella Vice (100Hz display)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, tierras100hz, alg_bios, picmatic, alg, alg_state, init_pal, ROT0, "Web Picmatic", "Tierras Salvajes (100Hz display)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )

View File

@ -1094,9 +1094,11 @@ maddog2_100 // (c) 1992
maddog2_110 // (c) 1992
maddog2_202 // (c) 1992
maddoga // (c) 1990
marvice // (c) 1994
marvice // (c) 1994 Web Picmatic
marvice100hz // (c) 1994 Web Picmatic
spacepir // (c) 1992
spacepir_14 // (c) 1992
tierras100hz // (c) 1995 Web Picmatic
wsjr // (c) 1991
wsjr_15 // (c) 1991
zortonbr // (c) 1994 Web Picmatic