Skip to content

Commit

Permalink
Work on Cartridge extended RAM initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
dirkwhoffmann committed Sep 2, 2024
1 parent 568ab2b commit bebc8f5
Show file tree
Hide file tree
Showing 11 changed files with 28 additions and 11 deletions.
10 changes: 6 additions & 4 deletions Emulator/Media/Cartridges/Cartridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ Cartridge::setRamCapacity(isize size)

externalRam = new u8[size];
ramCapacity = (u64)size;
memset(externalRam, 0xFF, size);
eraseRAM();
}
}

Expand All @@ -401,9 +401,11 @@ Cartridge::pokeRAM(u32 addr, u8 value)
void
Cartridge::eraseRAM(u8 value)
{
assert(externalRam != nullptr);
memset(externalRam, value, ramCapacity);
writes += ramCapacity;
if (externalRam) {

memset(externalRam, value, ramCapacity);
writes += ramCapacity;
}
}

void
Expand Down
10 changes: 9 additions & 1 deletion Emulator/Media/Cartridges/Cartridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -368,10 +368,18 @@ class Cartridge : public SubComponent, public Inspectable<CartridgeInfo> {
*/
void setRamCapacity(isize size);

/* Initializes the external RAM with the startup value. This function is
* called during a reset if the cartridge does not back up memory with a
* battery.
*/
virtual void eraseRAM() { eraseRAM(0xFF); }

// Erases the external RAM with a specific startup value
void eraseRAM(u8 value);

// Reads or write RAM cells
u8 peekRAM(u32 addr) const;
void pokeRAM(u32 addr, u8 value);
void eraseRAM(u8 value);


//
Expand Down
4 changes: 2 additions & 2 deletions Emulator/Media/Cartridges/CartridgeBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ namespace vc64 {
void
Cartridge::operator << (SerResetter &worker)
{
// Reset external RAM
if (externalRam && !getCartridgeTraits().battery) memset(externalRam, 0xFF, ramCapacity);
// Reset external RAM if no battery is present
if (!getCartridgeTraits().battery) eraseRAM();

// Reset all chip packets
for (isize i = 0; i < numPackets; i++) *packet[i] << worker;
Expand Down
2 changes: 1 addition & 1 deletion Emulator/Media/Cartridges/CustomCartridges/EasyFlash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ EasyFlash::resetCartConfig()
void
EasyFlash::_didReset(bool hard)
{
eraseRAM(0);
// eraseRAM(0);

// Make sure peekRomL() and peekRomH() conver the whole range
mappedBytesL = 0x2000;
Expand Down
2 changes: 2 additions & 0 deletions Emulator/Media/Cartridges/CustomCartridges/EasyFlash.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ class EasyFlash final : public Cartridge {
void pokeIO2(u16 addr, u8 value) override;
void pokeBankReg(u8 value);
void pokeModeReg(u8 value);

void eraseRAM() override { Cartridge::eraseRAM(0x00); }
};

}
2 changes: 1 addition & 1 deletion Emulator/Media/Cartridges/CustomCartridges/Isepic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Isepic::_dump(Category category, std::ostream& os) const
void
Isepic::_didReset(bool hard)
{
eraseRAM(0);
// eraseRAM(0);
page = 0;
}

Expand Down
1 change: 1 addition & 0 deletions Emulator/Media/Cartridges/CustomCartridges/Isepic.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class Isepic final : public Cartridge {
void poke(u16 addr, u8 value) override;
void pokeIO1(u16 addr, u8 value) override;
void pokeIO2(u16 addr, u8 value) override;
void eraseRAM() override { Cartridge::eraseRAM(0x00); }


//
Expand Down
2 changes: 1 addition & 1 deletion Emulator/Media/Cartridges/CustomCartridges/Kcs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace vc64 {
void
KcsPower::_didReset(bool hard)
{
eraseRAM(0xFF);
// eraseRAM(0xFF);
}

u8
Expand Down
2 changes: 1 addition & 1 deletion Emulator/Media/Cartridges/CustomCartridges/PageFox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace vc64 {
void
PageFox::_didReset(bool hard)
{
eraseRAM(0);
// eraseRAM(0);
}

void
Expand Down
1 change: 1 addition & 0 deletions Emulator/Media/Cartridges/CustomCartridges/PageFox.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ class PageFox final : public Cartridge {
u8 peekIO1(u16 addr) override;
u8 spypeekIO1(u16 addr) const override;
void pokeIO1(u16 addr, u8 value) override;
void eraseRAM() override { Cartridge::eraseRAM(0x00); }
void updatePeekPokeLookupTables() override;

private:
Expand Down
3 changes: 3 additions & 0 deletions Emulator/Media/Cartridges/CustomCartridges/Reu.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,9 @@ class Reu final : public Cartridge {
u8 spypeekIO2(u16 addr) const override;
void pokeIO2(u16 addr, u8 value) override;
void poke(u16 addr, u8 value) override;
void eraseRAM() override {
Cartridge::eraseRAM(0x00);
}

private:

Expand Down

0 comments on commit bebc8f5

Please sign in to comment.