Epple-II/src/memoryrow.h

50 lines
1.3 KiB
C++

#ifndef MEMORYROW_H
#define MEMORYROW_H
#include "memorychip.h"
#include <map>
#include <vector>
#include <array>
#include <cstdint>
class MemoryRow {
private:
/* C, D, E */
const char label;
bool power = false;
/* 8 sockets for memory chips (empty socket represented by MemoryChipEmptySocket) */
std::array<MemoryChip*,8> chips;
/* bit mask of empty chip sockets */
std::uint8_t missing_bits = 0xFFu;
/*
* Instead of storing each bit in a MemoryChip (too slow), we store the data here as bytes,
* representing one bit for each chip.
*/
std::vector<std::uint8_t> values_stored;
std::uint16_t calculate_size() const;
public:
MemoryRow(const char label);
virtual ~MemoryRow();
void insert_chip(MemoryChip *chip, const std::uint_fast8_t socket);
void remove_chip(const std::uint_fast8_t socket);
void powerOff();
void powerOn();
/* 4K or 16K, size of each chip (or minimum in corner case of mixed sizes) */
std::uint16_t size() const;
std::uint8_t read(const std::uint16_t address, const std::uint8_t data) const;
void write(const std::uint16_t address, const std::uint8_t data);
std::string chip_id(std::uint_fast8_t socket) const;
};
#endif // MEMORYROW_H