From b7b5a197eb94b39a5eb994442279ec71fb1cc9dd Mon Sep 17 00:00:00 2001 From: "matthias@arch" Date: Wed, 17 Jan 2024 15:10:59 +0100 Subject: [PATCH] refactor --- Makefile | 41 +++- build/eeprom.d | 3 + build/eeprom.o | Bin 0 -> 169472 bytes build/main.d | 3 + build/main.o | Bin 0 -> 37272 bytes build/util.d | 2 + build/util.o | Bin 0 -> 1440 bytes eeprom-sim | Bin 0 -> 170640 bytes eeprom.cpp | 120 ----------- main.cpp | 253 ----------------------- src/.clangd | 4 + 6502_opcodes.hpp => src/6502_opcodes.hpp | 0 src/eeprom.cpp | 86 ++++++++ src/eeprom.hpp | 31 +++ src/main.cpp | 136 ++++++++++++ src/util.cpp | 13 ++ src/util.hpp | 69 +++++++ util.hpp | 6 - 18 files changed, 379 insertions(+), 388 deletions(-) create mode 100644 build/eeprom.d create mode 100644 build/eeprom.o create mode 100644 build/main.d create mode 100644 build/main.o create mode 100644 build/util.d create mode 100644 build/util.o create mode 100755 eeprom-sim delete mode 100644 eeprom.cpp delete mode 100644 main.cpp create mode 100644 src/.clangd rename 6502_opcodes.hpp => src/6502_opcodes.hpp (100%) create mode 100644 src/eeprom.cpp create mode 100644 src/eeprom.hpp create mode 100644 src/main.cpp create mode 100644 src/util.cpp create mode 100644 src/util.hpp delete mode 100644 util.hpp diff --git a/Makefile b/Makefile index 2f3bdc1..7cd0f7b 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,38 @@ -CFLAGS = -std=c++20 -O2 -LFLAGS = -lbcm2835 +CXX = g++ +CXXFLAGS = -std=c++20 -O3 -MMD -MP -Wall -Wpedantic +LDFLAGS = -lbcm2835 +IFLAGS = -Iargparse/include -TOOLS = eeprom_sim #test/test_out test/test_in test/test_edge +SRCDIR = src +BUILD_DIR = build -default: $(TOOLS) +EXEC = eeprom-sim -.PHONY = test clean -test: test.cpp +SRC = $(wildcard $(SRCDIR)/*.cpp) $(wildcard $(SRCDIR)/*/*.cpp) +# OBJECTS = $(SRC:%.cpp=$(OBJECT_DIR)/%.o) +OBJECTS = $(patsubst $(SRCDIR)/%,$(BUILD_DIR)/%,$(patsubst %.cpp,%.o,$(SRC))) +DEPENDS = ${OBJECTS:.o=.d} -%: %.cpp - g++ $< -o $@ $(CFLAGS) $(LFLAGS) +CXXFLAGS += $(IFLAGS) + +.PHONY = default clean +default: $(EXEC) +print: + @echo $(SRC) + @echo $(OBJECTS) + + +-include $(DEPENDS) + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +$(EXEC): $(OBJECTS) + $(CXX) $(OBJECTS) -o $@ $(CXXFLAGS) $(LDFLAGS) + +$(BUILD_DIR)/%.o: $(SRCDIR)/%.cpp | $(BUILD_DIR) + $(CXX) -c $(CXXFLAGS) $(LDFLAGS) $< -o $@ clean: - rm $(TOOLS) + -rm -r $(BUILD_DIR) + -rm $(EXEC) diff --git a/build/eeprom.d b/build/eeprom.d new file mode 100644 index 0000000..4c6b03f --- /dev/null +++ b/build/eeprom.d @@ -0,0 +1,3 @@ +build/eeprom.o: src/eeprom.cpp src/eeprom.hpp src/util.hpp +src/eeprom.hpp: +src/util.hpp: diff --git a/build/eeprom.o b/build/eeprom.o new file mode 100644 index 0000000000000000000000000000000000000000..8b99f107b326798fe2252ac12cf0a1a521e0ccdc GIT binary patch literal 169472 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 Bks<&9 literal 0 HcmV?d00001 diff --git a/eeprom-sim b/eeprom-sim new file mode 100755 index 0000000000000000000000000000000000000000..6424086fa37d84969889455ef950758fe2c9dd36 GIT binary patch literal 170640 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 jG?pEw_IUP4KlS6FV9b{{${r8%_}~3T^KSF;H8Q literal 0 HcmV?d00001 diff --git a/eeprom.cpp b/eeprom.cpp deleted file mode 100644 index 7eb3810..0000000 --- a/eeprom.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include -#include - -#include "util.hpp" - -/* ADDRESS SETUP TIME - * depends on clock frequency, see datasheet. max 150@2MHz - * address is set after setup time (tADS) and is being hold for address hold time (tAH) - * - * - */ -constexpr uint64_t addressSetupTimeUS = 1; // 300e-9 s - -class EEPROM { - EEPROM(const IOPins& ioPins, const AddressPins& addressPins, const Pin& pinCEb, const Pin& pinWEb, const Pin& pinOEb) { - - } -} - -void initPins() { - // set to input and pullup - auto setPinsInput = [](const T& t) { - for (auto it = t.begin(); it != t.end(); it++) { - bcm2835_gpio_fsel(*it, BCM2835_GPIO_FSEL_INPT); - /* bcm2835_gpio_set_pud(*it, BCM2835_GPIO_PUD_UP); */ - bcm2835_gpio_set_pud(*it, BCM2835_GPIO_PUD_OFF); - } - }; - setPinsInput(addressPins); - setPinsInput(dataPins); - setPinsInput(controlPins); -} - - -void setIODirection(uint8_t direction) { - for (int i = 0; i < dataPins.size(); i++) { - bcm2835_gpio_fsel(dataPins.at(i), direction); - } -} - - -bool isChipEnabled() { - return !bcm2835_gpio_lev(CEb); -} - -inline bool isRead() { - return bcm2835_gpio_lev(RWb); -} - - -uint16_t readAddress() { - uint16_t address = 0; - for (int i = 0; i < addressPins.size(); i++) { - address |= (bcm2835_gpio_lev(addressPins.at(i)) << i); - } - return address; -} - -uint8_t readData() { - uint8_t address = 0; - for (int i = 0; i < dataPins.size(); i++) { - address |= (bcm2835_gpio_lev(dataPins.at(i)) << i); - } - return address; -} - -inline void waitForFallingEdge(uint8_t pin) { - while (bcm2835_gpio_lev(pin) == LOW); - while (bcm2835_gpio_lev(pin) == HIGH); -} -inline void waitForRisingEdge(uint8_t pin) { - while (bcm2835_gpio_lev(pin) == HIGH); - while (bcm2835_gpio_lev(pin) == LOW); -} -inline void waitForEdge(uint8_t pin) { - if (bcm2835_gpio_lev(pin) == HIGH) { - while (bcm2835_gpio_lev(pin) == HIGH); - return; - } - else { - while (bcm2835_gpio_lev(pin) == LOW); - return; - } -} - -/** - * @brief Simulate an AT28C256 EEPROM - * @details - * While the CEb is low, constantly read the address and put the corresponding data on the bus. - * While CEb is high, set data pins to input. - */ -void simulateEEPROM(std::stop_token token, std::array data) { - initPins(); - printf("Begin EEPROM simulation\n"); - - uint16_t lastAddress = 0; - bool outputActive = false; - - while (!token.stop_requested()) { - uint16_t currentAddress = readAddress(); - bool chipEnabled = isChipEnabled(); - if (chipEnabled && (!outputActive || (currentAddress != lastAddress))) { - setIODirection(BCM2835_GPIO_FSEL_OUTP); - outputActive = true; - - uint32_t valueMask = byteToMask(data.at(currentAddress), dataPins); - bcm2835_gpio_write_mask(valueMask, ioMask); - /* std::cout << ">-" << gz::toBinString(currentAddress) << "[" << gz::toHexString(currentAddress) << "]-" << gz::toBinString(data.at(currentAddress)) << "[" << gz::toHexString(static_cast(data.at(currentAddress)), 2) << "]"; */ - /* std::cout << std::endl; */ - } - - if (!chipEnabled && outputActive) { - setIODirection(BCM2835_GPIO_FSEL_INPT); - outputActive = false; - } - - lastAddress = currentAddress; - } - printf("End EEPROM simulation\n"); -} diff --git a/main.cpp b/main.cpp deleted file mode 100644 index fedff4f..0000000 --- a/main.cpp +++ /dev/null @@ -1,253 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "6502_opcodes.hpp" - -/* ADDRESS SETUP TIME - * depends on clock frequency, see datasheet. max 150@2MHz - * address is set after setup time (tADS) and is being hold for address hold time (tAH) - * - * - */ -constexpr uint64_t addressSetupTimeUS = 1; // 300e-9 s - -constexpr std::array addressPins { - 27, 22, 10, 9, 11, 5, 6, 13, // A0-A7 - 4, 2, 15, 3, // A8-A11 - 18, 17, 23 // A12-A14 -}; - -constexpr std::array dataPins { 24, 25, 8, 7, 12, 16, 20, 21 }; -constexpr uint8_t RWb = 19; // Read/Write -constexpr uint8_t CEb = 14; // Chip Enable -constexpr uint8_t PHI2 = 26; // clock -constexpr std::array controlPins { CEb, RWb, PHI2 }; - -template -constexpr uint32_t getMask(const std::array& pins) { - uint32_t mask = 0; - for (int i = 0; i < pins.size(); i++) { - /* const uint8_t bit = pins.at(i) - 1; */ - mask |= (1 << pins.at(i)); - } - return mask; -} -constexpr uint32_t ioMask = getMask(dataPins); -constexpr uint32_t addressMask = getMask(addressPins); - -struct CurrentState { - uint16_t addressBus = 0; - uint8_t dataBus = 0; - bool RWb = true; - std::string toString() const { - std::string s; - if (RWb) { s = "R-"; } - else { s = "W-"; } - s += gz::toBinString(addressBus) + "[" + gz::toHexString(addressBus, 4) + "]-" - + gz::toBinString(dataBus) + "[" + gz::toHexString(static_cast(dataBus), 2) + "]"; - return s; - } -}; - -uint32_t byteToMask(char byte, const std::array& pins) { - uint32_t mask = 0; - for (int i = 0; i < 8; i++) { - if ((1 << i) & byte) { // if ith bit is set, set bit of corresponding pin - mask |= (1 << pins.at(i)); - } - } - return mask; -} - -void initPins() { - // set to input and pullup - auto setPinsInput = [](const T& t) { - for (auto it = t.begin(); it != t.end(); it++) { - bcm2835_gpio_fsel(*it, BCM2835_GPIO_FSEL_INPT); - /* bcm2835_gpio_set_pud(*it, BCM2835_GPIO_PUD_UP); */ - bcm2835_gpio_set_pud(*it, BCM2835_GPIO_PUD_OFF); - } - }; - setPinsInput(addressPins); - setPinsInput(dataPins); - setPinsInput(controlPins); -} - - -void setIODirection(uint8_t direction) { - for (int i = 0; i < dataPins.size(); i++) { - bcm2835_gpio_fsel(dataPins.at(i), direction); - } -} - - -bool isChipEnabled() { - return !bcm2835_gpio_lev(CEb); -} - -inline bool isRead() { - return bcm2835_gpio_lev(RWb); -} - - -uint16_t readAddress() { - uint16_t address = 0; - for (int i = 0; i < addressPins.size(); i++) { - address |= (bcm2835_gpio_lev(addressPins.at(i)) << i); - } - return address; -} - -uint8_t readData() { - uint8_t address = 0; - for (int i = 0; i < dataPins.size(); i++) { - address |= (bcm2835_gpio_lev(dataPins.at(i)) << i); - } - return address; -} - -constexpr std::array asciiChars { - "␀", "␁", "␂", "␃", "␄", "␅", "␆", "␇", "␈", "␉", "␊", "␋", "␌", "␍", "␎", "␏", "␐", "␑", "␒", "␓", "␔", "␕", "␖", "␗", "␘", "␙", "␚", "␛", "␜", "␝", "␞", "␟", "␠", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\"", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "␡" -}; -inline void printData(const char& data) { - std::cout << '\'' << data << asciiChars.at(data) << "' "<< opCodes.at(data).getName(); -} - -inline void waitForFallingEdge(uint8_t pin) { - while (bcm2835_gpio_lev(pin) == LOW); - while (bcm2835_gpio_lev(pin) == HIGH); -} -inline void waitForRisingEdge(uint8_t pin) { - while (bcm2835_gpio_lev(pin) == HIGH); - while (bcm2835_gpio_lev(pin) == LOW); -} -inline void waitForEdge(uint8_t pin) { - if (bcm2835_gpio_lev(pin) == HIGH) { - while (bcm2835_gpio_lev(pin) == HIGH); - return; - } - else { - while (bcm2835_gpio_lev(pin) == LOW); - return; - } -} - -/** - * @brief Simulate an AT28C256 EEPROM - * @details - * While the CEb is low, constantly read the address and put the corresponding data on the bus. - * While CEb is high, set data pins to input. - */ -void simulateEEPROM(std::stop_token token, std::array data) { - initPins(); - printf("Begin EEPROM simulation\n"); - - uint16_t lastAddress = 0; - bool outputActive = false; - - while (!token.stop_requested()) { - uint16_t currentAddress = readAddress(); - bool chipEnabled = isChipEnabled(); - if (chipEnabled && (!outputActive || (currentAddress != lastAddress))) { - setIODirection(BCM2835_GPIO_FSEL_OUTP); - outputActive = true; - - uint32_t valueMask = byteToMask(data.at(currentAddress), dataPins); - bcm2835_gpio_write_mask(valueMask, ioMask); - /* std::cout << ">-" << gz::toBinString(currentAddress) << "[" << gz::toHexString(currentAddress) << "]-" << gz::toBinString(data.at(currentAddress)) << "[" << gz::toHexString(static_cast(data.at(currentAddress)), 2) << "]"; */ - /* std::cout << std::endl; */ - } - - if (!chipEnabled && outputActive) { - setIODirection(BCM2835_GPIO_FSEL_INPT); - outputActive = false; - } - - lastAddress = currentAddress; - } - printf("End EEPROM simulation\n"); -} - - -void printBusWithClock(std::stop_token token, uint8_t clockPin, const std::atomic& currentState) { - printf("Begin bus printing\n"); - auto state = currentState.load(); - while (!token.stop_requested()) { - waitForRisingEdge(clockPin); - uint8_t chipEnabled = !bcm2835_gpio_lev(CEb); - uint8_t clock = bcm2835_gpio_lev(PHI2); - state.RWb = isRead(); - state.addressBus = readAddress(); - state.addressBus |= (chipEnabled << 15); - state.dataBus = readData(); - if (clock == 0) { std::cout << "L-"; } - else { std::cout << "H-"; } - std::cout << state.toString(); - if (chipEnabled) { - std::cout << " " << opCodes.at(state.dataBus).getName(); - } - std::cout << std::endl; - } - printf("End bus printing\n"); -} - - -void readFile(const char* filepath, std::array& bytes) { - std::ifstream file(filepath, std::ios_base::binary | std::ios_base::ate); - if (!file.is_open()) { - throw std::runtime_error("Error: Could not open file"); - } - auto size = file.tellg(); - if (size > UINT16_MAX) { - throw std::runtime_error("File is larger than UINT16_MAX"); - } - file.seekg (0, std::ios::beg); - file.read(bytes.data(), size); - file.close(); -} - -void signalHandler(int signal) { - setIODirection(BCM2835_GPIO_FSEL_INPT); - bcm2835_close(); - printf("Caught signal %d, exiting.\n", signal); - exit(0); -} - -int main(int argc, const char** argv) { - if (bcm2835_init() != 1) { - printf("Error: Could not initalise gpio libraray\n"); - return 1; - } - - if (argc != 2) { - printf("Error: Expected exactly one argument (filename), got %d\n", argc); - return 1; - } - - /* std::cout << "IOMask=" << gz::toBinString(ioMask) << ", AddressMask=" << gz::toBinString(addressMask) << std::endl; */ - - std::array bytes{}; - readFile(argv[1], bytes); - - std::cout << "Reset Vector " << gz::toBinString(bytes.at(0x7ffc)) << " - " << gz::toBinString(0x77fd) << std::endl; - - std::jthread eepromT(simulateEEPROM, bytes); - std::atomic cs; - std::jthread clockT(printBusWithClock, PHI2, std::ref(cs)); - /* auto handler = std::bind(signalHandler, std::placeholders::_1, std::move(eepromT)); */ - signal(SIGINT, signalHandler); - - while(true) { - std::this_thread::sleep_for(std::chrono::seconds(1)); - } -} - diff --git a/src/.clangd b/src/.clangd new file mode 100644 index 0000000..107ad82 --- /dev/null +++ b/src/.clangd @@ -0,0 +1,4 @@ +CompileFlags: # Tweak the parse settings + Add: [-std=c++20, -Wall, -Wextra, -Wpedantic, -Iargparse/include] +# https://clangd.llvm.org/config + diff --git a/6502_opcodes.hpp b/src/6502_opcodes.hpp similarity index 100% rename from 6502_opcodes.hpp rename to src/6502_opcodes.hpp diff --git a/src/eeprom.cpp b/src/eeprom.cpp new file mode 100644 index 0000000..16fe748 --- /dev/null +++ b/src/eeprom.cpp @@ -0,0 +1,86 @@ +#include +#include +#include + +#include "eeprom.hpp" +#include "util.hpp" + +/* ADDRESS SETUP TIME + * depends on clock frequency, see datasheet. max 150@2MHz + * address is set after setup time (tADS) and is being hold for address hold time (tAH) + * + * + */ +constexpr uint64_t addressSetupTimeUS = 1; // 300e-9 s + + +EEPROM::EEPROM(const IOPins& ioPins, const AddressPins& addressPins, const Pin& pinCEb, const Pin& pinWEb, const Pin& pinOEb) + : ioPins(ioPins), ioMask(getMask(ioPins)), addressPins(addressPins), pinCEb(pinCEb), pinWEb(pinWEb), pinOEb(pinOEb) { + // set to input and pullup + auto setPinsInput = [](const T& t) { + for (auto it = t.begin(); it != t.end(); it++) { + bcm2835_gpio_fsel(*it, BCM2835_GPIO_FSEL_INPT); + /* bcm2835_gpio_set_pud(*it, BCM2835_GPIO_PUD_UP); */ + bcm2835_gpio_set_pud(*it, BCM2835_GPIO_PUD_OFF); + } + }; + setPinsInput(this->addressPins); + setPinsInput(this->ioPins); + setPinsInput(std::array{this->pinCEb, this->pinWEb, this->pinOEb}); +} +EEPROM::~EEPROM() { + setIODirection(INPUT); +} + + +void EEPROM::setIODirection(uint8_t direction) { + if (IODirection == direction) { return; } + for (size_t i = 0; i < ioPins.size(); i++) { + bcm2835_gpio_fsel(ioPins.at(i), direction); + } +} + + +void EEPROM::simulate(std::stop_token token) { + std::println("Begin EEPROM simulation"); + + using State = uint8_t; + auto getState = [this](){ + State state = 0; + state |= !readPin(pinCEb) << 1; + state |= !readPin(pinWEb) << 2; + state |= !readPin(pinOEb) << 3; + return state; + }; + auto isChipEnabled = [](State state) { return (state & (1 << 1)) != 0; }; + auto isWriteEnabled = [](State state) { return (state & (1 << 2)) != 0; }; + auto isOutputEnabled = [](State state) { return (state & (1 << 3)) != 0; }; + + Address lastAddress = 0; + State lastState = 0xff; + + while (!token.stop_requested()) { + uint8_t state = getState(); + if (isChipEnabled(state)) { + Address address = readAddress(); + if (isOutputEnabled(state) && (address != lastAddress || !isOutputEnabled(lastState))) { + setIODirection(OUTPUT); + uint8_t data = rom.at(address); + uint32_t valueMask = byteToMask(data, ioPins); + bcm2835_gpio_write_mask(valueMask, ioMask); + std::println("[0x{:4x} 0b{:16b}] -> {{0x{:2x} 0b{:8b}}}", address, address, data, data); + } + else if (isWriteEnabled(state) && (address != lastAddress || !isWriteEnabled(lastState))) { + setIODirection(INPUT); + uint8_t data = readData(); + rom.at(address) = data; + std::println("[0x{:4x} 0b{:16b}] <- {{0x{:2x} 0b{:8b}}}", address, address, data, data); + } + lastAddress = address; + } + if (!isChipEnabled(state) && !(isOutputEnabled(state) || isWriteEnabled(state))) { + setIODirection(INPUT); + } + } + std::println("End EEPROM simulation"); +} diff --git a/src/eeprom.hpp b/src/eeprom.hpp new file mode 100644 index 0000000..a0d65d7 --- /dev/null +++ b/src/eeprom.hpp @@ -0,0 +1,31 @@ +#pragma once +#include +#include + +#include "util.hpp" + +class EEPROM { + public: + EEPROM(const IOPins& ioPins, const AddressPins& addressPins, const Pin& pinCEb, const Pin& pinWEb, const Pin& pinOEb); + inline void setRom(const std::array& v) { rom = v; } + inline void setRom(std::array&& v) { rom = std::move(v); } + inline const std::array& getRom() const { return rom; } + void simulate(std::stop_token token); + ~EEPROM(); + private: + std::array rom; + + const IOPins& ioPins; + const uint32_t ioMask; + const AddressPins& addressPins; + const Pin& pinCEb; + const Pin& pinWEb; + const Pin& pinOEb; + + void simulateThread(std::stop_token token); + void setIODirection(uint8_t direction); + uint8_t IODirection = INPUT; + inline Address readAddress() { return readPins
(this->addressPins); }; + inline uint8_t readData() { return readPins(this->ioPins); }; +}; + diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..f0c7538 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,136 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.hpp" +#include "6502_opcodes.hpp" + +/* ADDRESS SETUP TIME + * depends on clock frequency, see datasheet. max 150@2MHz + * address is set after setup time (tADS) and is being hold for address hold time (tAH) + * + * + */ +constexpr uint64_t addressSetupTimeUS = 1; // 300e-9 s + +constexpr std::array addressPins { + 27, 22, 10, 9, 11, 5, 6, 13, // A0-A7 + 4, 2, 15, 3, // A8-A11 + 18, 17, 23 // A12-A14 +}; + +constexpr std::array dataPins { 24, 25, 8, 7, 12, 16, 20, 21 }; +constexpr uint8_t RWb = 19; // Read/Write +constexpr uint8_t CEb = 14; // Chip Enable +constexpr uint8_t PHI2 = 26; // clock +constexpr std::array controlPins { CEb, RWb, PHI2 }; + +constexpr uint32_t ioMask = getMask(dataPins); +constexpr uint32_t addressMask = getMask(addressPins); + +std::atomic_bool stop = false; + +/* struct CurrentState { */ +/* uint16_t addressBus = 0; */ +/* uint8_t dataBus = 0; */ +/* bool RWb = true; */ +/* std::string toString() const { */ +/* std::string s; */ +/* if (RWb) { s = "R-"; } */ +/* else { s = "W-"; } */ +/* /1* s += gz::toBinString(addressBus) + "[" + gz::toHexString(addressBus, 4) + "]-" *1/ */ +/* /1* + gz::toBinString(dataBus) + "[" + gz::toHexString(static_cast(dataBus), 2) + "]"; *1/ */ +/* return s; */ +/* } */ +/* }; */ + + +constexpr std::array asciiChars { + "␀", "␁", "␂", "␃", "␄", "␅", "␆", "␇", "␈", "␉", "␊", "␋", "␌", "␍", "␎", "␏", "␐", "␑", "␒", "␓", "␔", "␕", "␖", "␗", "␘", "␙", "␚", "␛", "␜", "␝", "␞", "␟", "␠", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\"", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "␡" +}; +inline void printData(const char& data) { + std::cout << '\'' << data << asciiChars.at(data) << "' "<< opCodes.at(data).getName(); +} + + + +/* void printBusWithClock(std::stop_token token, uint8_t clockPin, const std::atomic& currentState) { */ +/* printf("Begin bus printing\n"); */ +/* auto state = currentState.load(); */ +/* while (!token.stop_requested()) { */ +/* waitForRisingEdge(clockPin); */ +/* uint8_t chipEnabled = !bcm2835_gpio_lev(CEb); */ +/* uint8_t clock = bcm2835_gpio_lev(PHI2); */ +/* state.RWb = isRead(); */ +/* state.addressBus = readAddress(); */ +/* state.addressBus |= (chipEnabled << 15); */ +/* state.dataBus = readData(); */ +/* if (clock == 0) { std::cout << "L-"; } */ +/* else { std::cout << "H-"; } */ +/* std::cout << state.toString(); */ +/* if (chipEnabled) { */ +/* std::cout << " " << opCodes.at(state.dataBus).getName(); */ +/* } */ +/* std::cout << std::endl; */ +/* } */ +/* printf("End bus printing\n"); */ +/* } */ + + +void readFile(const char* filepath, std::array& bytes) { + std::ifstream file(filepath, std::ios_base::binary | std::ios_base::ate); + if (!file.is_open()) { + throw std::runtime_error("Error: Could not open file"); + } + auto size = file.tellg(); + if (size > UINT16_MAX) { + throw std::runtime_error("File is larger than UINT16_MAX"); + } + file.seekg (0, std::ios::beg); + file.read(bytes.data(), size); + file.close(); +} + +void signalHandler(int signal) { + stop = true; +} + +int main(int argc, const char** argv) { + if (bcm2835_init() != 1) { + printf("Error: Could not initalise gpio libraray\n"); + return 1; + } + + if (argc != 2) { + printf("Error: Expected exactly one argument (filename), got %d\n", argc); + return 1; + } + + /* std::cout << "IOMask=" << gz::toBinString(ioMask) << ", AddressMask=" << gz::toBinString(addressMask) << std::endl; */ + + std::array bytes{}; + readFile(argv[1], bytes); + + /* std::cout << "Reset Vector " << gz::toBinString(bytes.at(0x7ffc)) << " - " << gz::toBinString(0x77fd) << std::endl; */ + + /* std::jthread eepromT(simulateEEPROM, bytes); */ + /* std::atomic cs; */ + /* std::jthread clockT(printBusWithClock, PHI2, std::ref(cs)); */ + /* auto handler = std::bind(signalHandler, std::placeholders::_1, std::move(eepromT)); */ + + std::signal(SIGINT, signalHandler); + + while (!stop) { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + bcm2835_close(); + /* printf("Caught signal %d, exiting.\n", signal); */ + exit(0); +} diff --git a/src/util.cpp b/src/util.cpp new file mode 100644 index 0000000..dfe95ae --- /dev/null +++ b/src/util.cpp @@ -0,0 +1,13 @@ +#include "util.hpp" +#include + +uint32_t byteToMask(char byte, const std::array& pins) { + uint32_t mask = 0; + for (int i = 0; i < 8; i++) { + if ((1 << i) & byte) { // if ith bit is set, set bit of corresponding pin + mask |= (1 << pins.at(i)); + } + } + return mask; +} + diff --git a/src/util.hpp b/src/util.hpp new file mode 100644 index 0000000..e4768d6 --- /dev/null +++ b/src/util.hpp @@ -0,0 +1,69 @@ +#pragma once + +#include +#include +#include +#include +#include + +const size_t AddressSize = 15; +using Pin = uint8_t; +using IOPins = std::array; +using AddressPins = std::array; + +using Address = uint16_t; + +// TODO: remove when c++23 is used +namespace std { + template + inline void println(const std::format_string fmt, Args&&... args) { + std::cout << std::vformat(fmt.get(), std::make_format_args(args...)) << std::endl; + } +} + +inline void waitForFallingEdge(uint8_t pin) { + while (bcm2835_gpio_lev(pin) == LOW); + while (bcm2835_gpio_lev(pin) == HIGH); +} +inline void waitForRisingEdge(uint8_t pin) { + while (bcm2835_gpio_lev(pin) == HIGH); + while (bcm2835_gpio_lev(pin) == LOW); +} +inline void waitForEdge(uint8_t pin) { + if (bcm2835_gpio_lev(pin) == HIGH) { + while (bcm2835_gpio_lev(pin) == HIGH); + return; + } + else { + while (bcm2835_gpio_lev(pin) == LOW); + return; + } +} + +uint32_t byteToMask(char byte, const std::array& dataPins); + +template +constexpr uint32_t getMask(const std::array& pins) { + uint32_t mask = 0; + for (size_t i = 0; i < pins.size(); i++) { + /* const uint8_t bit = pins.at(i) - 1; */ + mask |= (1 << pins.at(i)); + } + return mask; +} + +inline uint8_t readPin(Pin pin) { + return bcm2835_gpio_lev(pin); +} +template +T readPins(const std::array& pins) { + static_assert(sizeof(T) * 8 >= N); + T t = 0; + for (size_t i = 0; i < pins.size(); i++) { + t |= (bcm2835_gpio_lev(pins.at(i)) << i); + } + return t; +} + +const uint8_t OUTPUT = BCM2835_GPIO_FSEL_OUTP; +const uint8_t INPUT = BCM2835_GPIO_FSEL_INPT; diff --git a/util.hpp b/util.hpp deleted file mode 100644 index 7882943..0000000 --- a/util.hpp +++ /dev/null @@ -1,6 +0,0 @@ -#include -#include - -using Pin = uint8_t; -using IOPins = std::array; -using AddressPins = std::array;