mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
subsino_m.cpp: Rename to subsino_crypt.cpp and don't hardcode region
This commit is contained in:
parent
f2ab413a7a
commit
287f7db325
@ -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;
|
||||
|
@ -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 )
|
||||
|
@ -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);
|
||||
}
|
@ -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
|
Loading…
Reference in New Issue
Block a user