summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2025-10-31 08:06:19 +1100
committer Vas Crabb <vas@vastheman.com>2025-10-31 08:06:19 +1100
commit89e84109261f19731e15b6ba3e6d77a499dec54d (patch)
tree8e7349089857614ff429dc6f0dd0c6fde814fdf1
parenteefb402fbc4b5458c36768323cfef2f0e9dfc5b6 (diff)
igs/pgm3.cpp: Fixed endianness bug - you can't just access a 32-bit ROM region as bytes.
-rw-r--r--src/mame/igs/pgm3.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/mame/igs/pgm3.cpp b/src/mame/igs/pgm3.cpp
index f35727daf3a..d258698b4fe 100644
--- a/src/mame/igs/pgm3.cpp
+++ b/src/mame/igs/pgm3.cpp
@@ -45,32 +45,36 @@
#include "screen.h"
#include "util/aes256cbc.h"
+#include "util/endianness.h"
+
namespace {
class pgm3_state : public driver_device
{
public:
- pgm3_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ pgm3_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mainram(*this, "mainram")
{ }
- void pgm3(machine_config &config);
+ void pgm3(machine_config &config) ATTR_COLD;
- void init_kov3hd();
+ void init_kov3hd() ATTR_COLD;
private:
virtual void machine_start() override ATTR_COLD;
virtual void machine_reset() override ATTR_COLD;
virtual void video_start() override ATTR_COLD;
+
uint32_t screen_update_pgm3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_vblank_pgm3(int state);
- required_device<cpu_device> m_maincpu;
- void pgm3_map(address_map &map) ATTR_COLD;
void decryptaes(const uint8_t *key, const uint8_t *iv, int source, int dest, int length);
+ void pgm3_map(address_map &map) ATTR_COLD;
+
+ required_device<cpu_device> m_maincpu;
required_shared_ptr<u32> m_mainram;
};
@@ -78,7 +82,7 @@ void pgm3_state::decryptaes(const uint8_t *key, const uint8_t *iv, int source, i
{
using namespace aes256cbc;
- address_space& mem = m_maincpu->space(AS_PROGRAM);
+ address_space &mem = m_maincpu->space(AS_PROGRAM);
AES_CTX ctx;
uint8_t inbuffer[16];
uint8_t outbufer[16];
@@ -135,7 +139,7 @@ void pgm3_state::machine_start()
void pgm3_state::machine_reset()
{
// perform a bootstrap to bypass the level 0 internal_mask as it might not be properly dumped
- uint8_t* bootrom = memregion("internal_mask")->base();
+ auto bootrom = util::little_endian_cast<uint8_t>(&memregion("internal_mask")->as_u32());
uint8_t rom_aes_key[32];
uint8_t rom_aes_iv[16];