KEK/dc11.cpp
folkert van heusden c656e3609e
DC11 framework
2024-04-29 23:51:57 +02:00

65 lines
1,006 B
C++

// (C) 2024 by Folkert van Heusden
// Released under MIT license
#include "bus.h"
#include "dc11.h"
dc11::dc11(bus *const b): b(b)
{
}
dc11::~dc11()
{
stop_flag = true;
}
void dc11::reset()
{
}
uint8_t dc11::read_byte(const uint16_t addr)
{
uint16_t v = read_word(addr & ~1);
if (addr & 1)
return v >> 8;
return v;
}
uint16_t dc11::read_word(const uint16_t addr)
{
const int reg = (addr - DC11_BASE) / 2;
uint16_t vtemp = registers[reg];
DOLOG(debug, false, "DC11: read register %06o (%d): %06o", addr, reg, vtemp);
return vtemp;
}
void dc11::write_byte(const uint16_t addr, const uint8_t v)
{
uint16_t vtemp = registers[(addr - DC11_BASE) / 2];
if (addr & 1) {
vtemp &= ~0xff00;
vtemp |= v << 8;
}
else {
vtemp &= ~0x00ff;
vtemp |= v;
}
write_word(addr, vtemp);
}
void dc11::write_word(const uint16_t addr, uint16_t v)
{
const int reg = (addr - DC11_BASE) / 2;
DOLOG(debug, false, "DC11: set register %06o (%d) to %o", addr, reg, v);
registers[reg] = v;
}