KW11-L state
This commit is contained in:
parent
7077074160
commit
9a858fbe7a
5 changed files with 39 additions and 3 deletions
|
@ -33,6 +33,7 @@ add_executable(
|
|||
cpu.cpp
|
||||
dc11.cpp
|
||||
debugger.cpp
|
||||
device.cpp
|
||||
disk_backend.cpp
|
||||
disk_backend_file.cpp
|
||||
disk_backend_nbd.cpp
|
||||
|
@ -84,6 +85,7 @@ add_executable(
|
|||
cpu.cpp
|
||||
dc11.cpp
|
||||
debugger.cpp
|
||||
device.cpp
|
||||
disk_backend.cpp
|
||||
disk_backend_file.cpp
|
||||
disk_backend_nbd.cpp
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "disk_backend_esp32.h"
|
||||
#endif
|
||||
#include "disk_backend_nbd.h"
|
||||
#include "kw11-l.h"
|
||||
#include "loaders.h"
|
||||
#include "log.h"
|
||||
#include "memory.h"
|
||||
|
@ -730,6 +731,8 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
|
|||
b->getDC11()->show_state(cnsl);
|
||||
else if (parts[1] == "tm11")
|
||||
b->getTM11()->show_state(cnsl);
|
||||
else if (parts[1] == "kw11l")
|
||||
b->getKW11_L()->show_state(cnsl);
|
||||
else
|
||||
cnsl->put_string_lf(format("Device \"%s\" is not known", parts[1].c_str()));
|
||||
|
||||
|
@ -1012,7 +1015,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
|
|||
"strace x - start tracing from address - invoke without address to disable",
|
||||
"trl x - set trace run-level (0...3), empty for all",
|
||||
"regdump - dump register contents",
|
||||
"state x - dump state of a device: rl02, rk05, mmu, tm11 or dc11",
|
||||
"state x - dump state of a device: rl02, rk05, mmu, tm11, kw11l or dc11",
|
||||
"mmures x - resolve a virtual address",
|
||||
"qi - show queued interrupts",
|
||||
"setpc x - set PC to value",
|
||||
|
|
2
device.h
2
device.h
|
@ -15,7 +15,7 @@ public:
|
|||
|
||||
virtual void show_state(console *const cnsl) const = 0;
|
||||
|
||||
virtual uint8_t read_byte(const uint16_t addr) = 0;
|
||||
virtual uint8_t read_byte(const uint16_t addr);
|
||||
virtual uint16_t read_word(const uint16_t addr) = 0;
|
||||
|
||||
virtual void write_byte(const uint16_t addr, const uint8_t v) = 0;
|
||||
|
|
26
kw11-l.cpp
26
kw11-l.cpp
|
@ -42,6 +42,11 @@ kw11_l::~kw11_l()
|
|||
#endif
|
||||
}
|
||||
|
||||
void kw11_l::show_state(console *const cnsl) const
|
||||
{
|
||||
cnsl->put_string_lf(format("CSR: %06o", lf_csr));
|
||||
}
|
||||
|
||||
void kw11_l::begin(console *const cnsl)
|
||||
{
|
||||
this->cnsl = cnsl;
|
||||
|
@ -131,6 +136,27 @@ uint16_t kw11_l::read_word(const uint16_t a)
|
|||
return temp;
|
||||
}
|
||||
|
||||
void kw11_l::write_byte(const uint16_t addr, const uint8_t value)
|
||||
{
|
||||
if (addr != ADDR_LFC) {
|
||||
TRACE("KW11-L write_byte not for us (%06o to %06o)", value, addr);
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t vtemp = lf_csr;
|
||||
|
||||
if (addr & 1) {
|
||||
vtemp &= ~0xff00;
|
||||
vtemp |= value << 8;
|
||||
}
|
||||
else {
|
||||
vtemp &= ~0x00ff;
|
||||
vtemp |= value;
|
||||
}
|
||||
|
||||
write_word(addr, vtemp);
|
||||
}
|
||||
|
||||
void kw11_l::write_word(const uint16_t a, const uint16_t value)
|
||||
{
|
||||
if (a != ADDR_LFC) {
|
||||
|
|
7
kw11-l.h
7
kw11-l.h
|
@ -6,10 +6,11 @@
|
|||
|
||||
#include "bus.h"
|
||||
#include "console.h"
|
||||
#include "device.h"
|
||||
#include "gen.h"
|
||||
|
||||
|
||||
class kw11_l
|
||||
class kw11_l: public device
|
||||
{
|
||||
private:
|
||||
bus *const b { nullptr };
|
||||
|
@ -36,6 +37,8 @@ public:
|
|||
|
||||
void reset();
|
||||
|
||||
void show_state(console *const cnsl) const override;
|
||||
|
||||
#if IS_POSIX
|
||||
json_t *serialize();
|
||||
static kw11_l *deserialize(const json_t *const j, bus *const b, console *const cnsl);
|
||||
|
@ -45,5 +48,7 @@ public:
|
|||
void operator()();
|
||||
|
||||
uint16_t read_word (const uint16_t a);
|
||||
|
||||
void write_byte(const uint16_t addr, const uint8_t v);
|
||||
void write_word(const uint16_t a, const uint16_t v);
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue