KEK/rx02.cpp
folkert van heusden a1073b2f83 tty console
2022-03-13 11:09:45 +01:00

72 lines
1.2 KiB
C++

// (C) 2018 by Folkert van Heusden
// Released under Apache License v2.0
#include <errno.h>
#include <string.h>
#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;
}