// (C) 2018 by Folkert van Heusden // Released under Apache License v2.0 #include #include #include "rx02.h" #include "gen.h" #include "memory.h" #include "utils.h" rx02::rx02(const std::string & file, memory *const m) : m(m) { offset = 0; memset(registers, 0x00, sizeof registers); fh = fopen(file.c_str(), "rb"); } rx02::~rx02() { fclose(fh); } uint8_t rx02::readByte(const uint16_t addr) { uint16_t v = readWord(addr & ~1); if (addr & 1) return v >> 8; return v; } uint16_t rx02::readWord(const uint16_t addr) { const int reg = (addr - RX02_BASE) / 2; uint16_t vtemp = registers[reg]; D(printf("RX02 read addr %o: ", addr);) // FIXME D(printf("%o\n", vtemp);) return vtemp; } void rx02::writeByte(const uint16_t addr, const uint8_t v) { uint16_t vtemp = registers[(addr - RX02_BASE) / 2]; if (addr & 1) { vtemp &= ~0xff00; vtemp |= v << 8; } else { vtemp &= ~0x00ff; vtemp |= v; } writeWord(addr, vtemp); } void rx02::writeWord(const uint16_t addr, uint16_t v) { D(printf("RX02 write %o: %o\n", addr, v);) // FIXME D(printf("set register %o to %o\n", addr, v);) registers[(addr - RX02_BASE) / 2] = v; }