subsino_m.cpp: Rename to subsino_crypt.cpp and don't hardcode region

This commit is contained in:
AJR 2023-05-21 06:05:33 -04:00
parent f2ab413a7a
commit 287f7db325
4 changed files with 28 additions and 46 deletions

View File

@ -223,7 +223,7 @@ To Do:
***************************************************************************/
#include "emu.h"
#include "subsino_m.h"
#include "subsino_crypt.h"
#include "cpu/z180/hd647180x.h"
#include "machine/i8255.h"
@ -3901,7 +3901,8 @@ ROM_END
void subsino_state::init_victor5()
{
subsino_decrypt(machine(), victor5_bitswaps, victor5_xors, 0xc000);
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, victor5_bitswaps, victor5_xors, 0xc000);
m_flash_packet = 0;
m_flash_packet_start = 0;
@ -3914,12 +3915,14 @@ void subsino_state::init_victor5()
void subsino_state::init_victor21()
{
subsino_decrypt(machine(), victor21_bitswaps, victor21_xors, 0xc000);
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, victor21_bitswaps, victor21_xors, 0xc000);
}
void subsino_state::init_crsbingo()
{
subsino_decrypt(machine(), crsbingo_bitswaps, crsbingo_xors, 0xc000);
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, crsbingo_bitswaps, crsbingo_xors, 0xc000);
m_flash_packet = 0;
m_flash_packet_start = 0;
@ -3932,12 +3935,14 @@ void subsino_state::init_crsbingo()
void subsino_state::init_sharkpy()
{
subsino_decrypt(machine(), sharkpy_bitswaps, sharkpy_xors, 0xa000);
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, sharkpy_bitswaps, sharkpy_xors, 0xa000);
}
void subsino_state::init_sharkpye()
{
subsino_decrypt(machine(), victor5_bitswaps, victor5_xors, 0xa000);
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, victor5_bitswaps, victor5_xors, 0xa000);
}
void subsino_state::init_smoto20()
@ -3955,8 +3960,7 @@ void subsino_state::init_smoto13()
void subsino_state::init_tisub()
{
uint8_t *rom = memregion( "maincpu" )->base();
init_victor5();
subsino_decrypt(rom, victor5_bitswaps, victor5_xors, 0xc000);
/* this trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region... */
rom[0x64c8] = 0x00;
@ -3970,8 +3974,7 @@ void subsino_state::init_tisub()
void subsino_state::init_tisuba()
{
uint8_t *rom = memregion( "maincpu" )->base();
init_victor5();
subsino_decrypt(rom, victor5_bitswaps, victor5_xors, 0xc000);
/* this trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region... */
rom[0x6491] = 0x00;
@ -3984,9 +3987,8 @@ void subsino_state::init_tisuba()
void subsino_state::init_tisubb()
{
subsino_decrypt(machine(), tisubb_bitswaps, tisubb_xors, 0xc000);
uint8_t *rom = memregion( "maincpu" )->base();
subsino_decrypt(rom, tisubb_bitswaps, tisubb_xors, 0xc000);
/* this trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region... */
rom[0x60da] = 0x00;

View File

@ -55,8 +55,8 @@ by the otherwise seemingly unnecessary internal ROMs.
************************************************************************************************************/
#include "emu.h"
#include "subsino_crypt.h"
#include "subsino_io.h"
#include "subsino_m.h"
#include "cpu/h8/h83048.h"
#include "cpu/i86/i186.h"
@ -3583,7 +3583,7 @@ ROM_END
void subsino2_state::init_mtrain()
{
subsino_decrypt(machine(), crsbingo_bitswaps, crsbingo_xors, 0x8000);
subsino_decrypt(memregion("maincpu")->base(), crsbingo_bitswaps, crsbingo_xors, 0x8000);
}
@ -3618,7 +3618,7 @@ ROM_END
void subsino2_state::init_tbonusal()
{
subsino_decrypt(machine(), sharkpy_bitswaps, sharkpy_xors, 0x8000);
subsino_decrypt(memregion("maincpu")->base(), sharkpy_bitswaps, sharkpy_xors, 0x8000);
}
/***************************************************************************
@ -3919,7 +3919,7 @@ ROM_END
void subsino2_state::init_wtrnymph()
{
subsino_decrypt(machine(), victor5_bitswaps, victor5_xors, 0x8000);
subsino_decrypt(memregion("maincpu")->base(), victor5_bitswaps, victor5_xors, 0x8000);
}
GAME( 1996, mtrain, 0, mtrain, mtrain, subsino2_state, init_mtrain, ROT0, "Subsino", "Magic Train (Ver. 1.31)", 0 )

View File

@ -81,34 +81,14 @@ void victor21_bitswaps(uint8_t *decrypt, int i)
// Decrypt:
[[maybe_unused]] static void dump_decrypted(running_machine& machine, uint8_t* decrypt)
void subsino_decrypt(uint8_t *region, void (*bitswaps)(uint8_t *decrypt, int i), const uint8_t *xors, int size)
{
auto filename = "dat_" + std::string(machine.system().name);
auto fp = fopen(filename.c_str(), "w+b");
if (fp)
{
fwrite(decrypt, 0x10000, 1, fp);
fclose(fp);
}
}
std::unique_ptr<uint8_t[]> decrypt = std::make_unique<uint8_t[]>(size);
void subsino_decrypt(running_machine& machine, void (*bitswaps)(uint8_t *decrypt, int i), const uint8_t *xors, int size)
{
std::unique_ptr<uint8_t[]> decrypt = std::make_unique<uint8_t[]>(0x10000);
uint8_t *const region = machine.root_device().memregion("maincpu")->base();
for (int i = 0; i < 0x10000; i++)
for (int i = 0; i < size; i++)
{
if (i < size)
{
decrypt[i] = region[i] ^ xors[i & 7];
bitswaps(decrypt.get(), i);
}
else
{
decrypt[i] = region[i];
}
decrypt[i] = region[i] ^ xors[i & 7];
bitswaps(decrypt.get(), i);
}
// dump_decrypted(machine, decrypt);
memcpy(region, decrypt.get(), 0x10000);
memcpy(region, decrypt.get(), size);
}

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, David Haywood, Angelo Salese, Roberto Fresca
#ifndef MAME_SUBSINO_SUBSINO_M_H
#define MAME_SUBSINO_SUBSINO_M_H
#ifndef MAME_SUBSINO_SUBSINO_CRYPT_H
#define MAME_SUBSINO_SUBSINO_CRYPT_H
#pragma once
@ -18,6 +18,6 @@ void tisubb_bitswaps (uint8_t *decrypt, int i);
void victor5_bitswaps (uint8_t *decrypt, int i);
void victor21_bitswaps(uint8_t *decrypt, int i);
void subsino_decrypt(running_machine& machine, void (*bitswaps)(uint8_t *decrypt, int i), const uint8_t *xors, int size);
void subsino_decrypt(uint8_t *region, void (*bitswaps)(uint8_t *decrypt, int i), const uint8_t *xors, int size);
#endif // MAME_SUBSINO_SUBSINO_M_H
#endif // MAME_SUBSINO_SUBSINO_CRYPT_H