1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 08:49:37 +00:00

Ensures randomised memory contents at startup.

This commit is contained in:
Thomas Harte 2019-06-13 13:35:16 -04:00
parent 535747e3f2
commit 5630141ad7
5 changed files with 21 additions and 2 deletions

View File

@ -33,6 +33,7 @@
#include "../../../Analyser/Static/Macintosh/Target.hpp"
#include "../../Utility/MemoryPacker.hpp"
#include "../../Utility/MemoryFuzzer.hpp"
namespace {
@ -100,6 +101,9 @@ template <Analyser::Static::Macintosh::Target::Model model> class ConcreteMachin
roms[0]->resize(rom_size);
Memory::PackBigEndian16(*roms[0], rom_);
// Randomise memory contents.
Memory::Fuzz(ram_, sizeof(ram_));
// Attach the drives to the IWM.
iwm_.iwm.set_drive(0, &drives_[0]);
iwm_.iwm.set_drive(1, &drives_[1]);

View File

@ -9,6 +9,8 @@
#ifndef RealTimeClock_hpp
#define RealTimeClock_hpp
#include "../../Utility/MemoryFuzzer.hpp"
namespace Apple {
namespace Macintosh {
@ -21,6 +23,12 @@ namespace Macintosh {
*/
class RealTimeClock {
public:
RealTimeClock() {
// TODO: this should persist, if possible, rather than
// being randomly initialised.
Memory::Fuzz(data_, sizeof(data_));
}
/*!
Advances the clock by 1 second.

View File

@ -23,6 +23,10 @@ void Memory::Fuzz(uint8_t *buffer, std::size_t size) {
}
}
void Memory::Fuzz(uint16_t *buffer, std::size_t size) {
Fuzz(reinterpret_cast<uint8_t *>(buffer), size * sizeof(uint16_t));
}
void Memory::Fuzz(std::vector<uint8_t> &buffer) {
Fuzz(buffer.data(), buffer.size());
}

View File

@ -18,6 +18,9 @@ namespace Memory {
/// Stores @c size random bytes from @c buffer onwards.
void Fuzz(uint8_t *buffer, std::size_t size);
/// Stores @c size random 16-bit words from @c buffer onwards.
void Fuzz(uint16_t *buffer, std::size_t size);
/// Replaces all existing vector contents with random bytes.
void Fuzz(std::vector<uint8_t> &buffer);

View File

@ -3132,6 +3132,7 @@
4B9378E222A199C600973513 /* Audio.cpp */,
4BB4BFAC22A33DE50069048D /* DriveSpeedAccumulator.cpp */,
4BCE0058227CFFCA000CA200 /* Macintosh.cpp */,
4B0C956F22A74E880015A8F6 /* SonyDrive.cpp */,
4BCE005E227D39AB000CA200 /* Video.cpp */,
4B9378E322A199C600973513 /* Audio.hpp */,
4BB4BFAA22A300710069048D /* DeferredAudio.hpp */,
@ -3139,9 +3140,8 @@
4BDB3D8522833321002D3CEE /* Keyboard.hpp */,
4BCE0059227CFFCA000CA200 /* Macintosh.hpp */,
4BD0692B22828A2D00D2A54F /* RealTimeClock.hpp */,
4BCE005F227D39AB000CA200 /* Video.hpp */,
4B0C956F22A74E880015A8F6 /* SonyDrive.cpp */,
4B0C957022A74E880015A8F6 /* SonyDrive.hpp */,
4BCE005F227D39AB000CA200 /* Video.hpp */,
);
path = Macintosh;
sourceTree = "<group>";