RP07 support
This commit is contained in:
parent
b4a4606200
commit
38bff121c2
4 changed files with 22 additions and 18 deletions
|
@ -978,7 +978,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
|
|||
b->getTM11()->show_state(cnsl);
|
||||
else if (parts[1] == "kw11l")
|
||||
b->getKW11_L()->show_state(cnsl);
|
||||
else if (parts[1] == "rp06")
|
||||
else if (parts[1] == "rp06" || parts[1] == "rp07")
|
||||
b->getRP06()->show_state(cnsl);
|
||||
else
|
||||
cnsl->put_string_lf(format("Device \"%s\" is not known", parts[1].c_str()));
|
||||
|
@ -1116,7 +1116,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
|
|||
set_boot_loader(b, BL_RK05);
|
||||
else if (parts.at(1) == "rl02")
|
||||
set_boot_loader(b, BL_RL02);
|
||||
else if (parts.at(1) == "rp06")
|
||||
else if (parts.at(1) == "rp06" || parts[1] == "rp07")
|
||||
set_boot_loader(b, BL_RP06);
|
||||
else
|
||||
cnsl->put_string_lf("???");
|
||||
|
@ -1313,7 +1313,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, rp06, mmu, tm11, kw11l or dc11",
|
||||
"state x - dump state of a device: rl02, rk05, rp06, rp07, mmu, tm11, kw11l or dc11",
|
||||
"mmures x - resolve a virtual address",
|
||||
"qi - show queued interrupts",
|
||||
"setpc x - set PC to value (octal)",
|
||||
|
@ -1335,7 +1335,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
|
|||
"ult - unload tape",
|
||||
"stats - show run statistics",
|
||||
"ramsize x - set ram size (page (8 kB) count, decimal)",
|
||||
"bl - set bootloader (rl02, rk05 or rp06)",
|
||||
"bl - set bootloader (rl02, rk05, rp06 or rp07)",
|
||||
"cdc11 - configure DC11 device",
|
||||
"serdc11 - store DC11 device settings",
|
||||
"dserdc11 - load DC11 device settings",
|
||||
|
|
8
main.cpp
8
main.cpp
|
@ -253,7 +253,7 @@ void help()
|
|||
printf("-B run tape file as a unit test (for .BIC files)\n");
|
||||
printf("-r d.img load file as a disk device\n");
|
||||
printf("-N host:port use NBD-server as disk device (like -r)\n");
|
||||
printf("-R x select disk type (rk05, rl02 or rp06)\n");
|
||||
printf("-R x select disk type (rk05, rl02, rp06 or rp07)\n");
|
||||
printf("-p 123 set CPU start pointer to decimal(!) value\n");
|
||||
printf("-b enable bootloader (builtin)\n");
|
||||
printf("-n ncurses UI\n");
|
||||
|
@ -385,7 +385,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
case 'R':
|
||||
disk_type = optarg;
|
||||
if (disk_type != "rk05" && disk_type != "rl02" && disk_type != "rp06")
|
||||
if (disk_type != "rk05" && disk_type != "rl02" && disk_type != "rp06" && disk_type != "rp07")
|
||||
error_exit(false, "Disk type not known");
|
||||
break;
|
||||
|
||||
|
@ -489,7 +489,7 @@ int main(int argc, char *argv[])
|
|||
rl02_dev->begin();
|
||||
b->add_rl02(rl02_dev);
|
||||
|
||||
auto rp06_dev = new rp06(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag());
|
||||
auto rp06_dev = new rp06(b, cnsl->get_disk_read_activity_flag(), cnsl->get_disk_write_activity_flag(), disk_type == "rp07");
|
||||
rp06_dev->begin();
|
||||
b->add_RP06(rp06_dev);
|
||||
|
||||
|
@ -505,7 +505,7 @@ int main(int argc, char *argv[])
|
|||
for(auto & file: disk_files)
|
||||
rl02_dev->access_disk_backends()->push_back(file);
|
||||
}
|
||||
else if (disk_type == "rp06") {
|
||||
else if (disk_type == "rp06" || disk_type == "rp07") {
|
||||
bootloader = BL_RP06;
|
||||
|
||||
for(auto & file: disk_files)
|
||||
|
|
16
rp06.cpp
16
rp06.cpp
|
@ -14,18 +14,22 @@
|
|||
#include "utils.h"
|
||||
|
||||
|
||||
constexpr const unsigned NSECT = 22; // sectors per track
|
||||
constexpr const unsigned NTRAC = 19; // tracks per cylinder
|
||||
constexpr const unsigned SECTOR_SIZE = 512;
|
||||
unsigned NSECT = 22; // sectors per track
|
||||
unsigned NTRAC = 19; // tracks per cylinder
|
||||
unsigned SECTOR_SIZE = 512;
|
||||
constexpr const uint16_t default_DS = uint16_t(rp06::ds_bits::DPR) /* drive present */ | uint16_t(rp06::ds_bits::MOL) /* medium on-line */ | uint16_t(rp06::ds_bits::VV) /* volume valid */ | uint16_t(rp06::ds_bits::DRY) /* drive ready */;
|
||||
|
||||
constexpr const char *regnames[] { "Control", "Status", "Error register 1", "Maintenance", "Attention summary", "Desired sector/track address", "Error register 1", "Look ahead", "Drive type", "Serial no", "Offset", "Desired cylinder address", "Current cylinder address", "Error register 2", "Error register 3", "ECC position", "ECC pattern" };
|
||||
|
||||
rp06::rp06(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity) :
|
||||
rp06::rp06(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity, const bool is_rp07) :
|
||||
b(b),
|
||||
disk_read_activity (disk_read_activity ),
|
||||
disk_write_activity(disk_write_activity)
|
||||
{
|
||||
if (is_rp07) {
|
||||
NSECT = 50;
|
||||
NTRAC = 32;
|
||||
}
|
||||
}
|
||||
|
||||
rp06::~rp06()
|
||||
|
@ -51,13 +55,13 @@ void rp06::show_state(console *const cnsl) const
|
|||
JsonDocument rp06::serialize() const
|
||||
{
|
||||
JsonDocument j;
|
||||
|
||||
j["is-rp07"] = is_rp07;
|
||||
return j;
|
||||
}
|
||||
|
||||
rp06 *rp06::deserialize(const JsonVariantConst j, bus *const b)
|
||||
{
|
||||
rp06 *r = new rp06(b, nullptr, nullptr);
|
||||
rp06 *r = new rp06(b, nullptr, nullptr, j["is-rp07"].as<bool>());
|
||||
r->begin();
|
||||
|
||||
return r;
|
||||
|
|
8
rp06.h
8
rp06.h
|
@ -38,9 +38,9 @@ class bus;
|
|||
class rp06: public disk_device
|
||||
{
|
||||
private:
|
||||
bus *const b;
|
||||
|
||||
uint16_t registers[32] { };
|
||||
bus *const b { nullptr };
|
||||
bool is_rp07 { false };
|
||||
uint16_t registers[32] { };
|
||||
|
||||
std::atomic_bool *const disk_read_activity { nullptr };
|
||||
std::atomic_bool *const disk_write_activity { nullptr };
|
||||
|
@ -50,7 +50,7 @@ private:
|
|||
uint32_t compute_offset() const;
|
||||
|
||||
public:
|
||||
rp06(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity);
|
||||
rp06(bus *const b, std::atomic_bool *const disk_read_activity, std::atomic_bool *const disk_write_activity, const bool is_rp07);
|
||||
virtual ~rp06();
|
||||
|
||||
void begin() override;
|
||||
|
|
Loading…
Add table
Reference in a new issue