diff --git a/RP2040/bus.cpp b/RP2040/bus.cpp new file mode 120000 index 0000000..54349cd --- /dev/null +++ b/RP2040/bus.cpp @@ -0,0 +1 @@ +../bus.cpp \ No newline at end of file diff --git a/RP2040/bus.h b/RP2040/bus.h new file mode 120000 index 0000000..16d9e36 --- /dev/null +++ b/RP2040/bus.h @@ -0,0 +1 @@ +../bus.h \ No newline at end of file diff --git a/RP2040/console.cpp b/RP2040/console.cpp new file mode 120000 index 0000000..1e29138 --- /dev/null +++ b/RP2040/console.cpp @@ -0,0 +1 @@ +../console.cpp \ No newline at end of file diff --git a/RP2040/console.h b/RP2040/console.h new file mode 120000 index 0000000..e323210 --- /dev/null +++ b/RP2040/console.h @@ -0,0 +1 @@ +../console.h \ No newline at end of file diff --git a/RP2040/cpu.cpp b/RP2040/cpu.cpp new file mode 120000 index 0000000..89beeaf --- /dev/null +++ b/RP2040/cpu.cpp @@ -0,0 +1 @@ +../cpu.cpp \ No newline at end of file diff --git a/RP2040/cpu.h b/RP2040/cpu.h new file mode 120000 index 0000000..e9d4bdf --- /dev/null +++ b/RP2040/cpu.h @@ -0,0 +1 @@ +../cpu.h \ No newline at end of file diff --git a/RP2040/debugger.cpp b/RP2040/debugger.cpp new file mode 120000 index 0000000..39af298 --- /dev/null +++ b/RP2040/debugger.cpp @@ -0,0 +1 @@ +../debugger.cpp \ No newline at end of file diff --git a/RP2040/debugger.h b/RP2040/debugger.h new file mode 120000 index 0000000..90051ef --- /dev/null +++ b/RP2040/debugger.h @@ -0,0 +1 @@ +../debugger.h \ No newline at end of file diff --git a/RP2040/disk_backend.cpp b/RP2040/disk_backend.cpp new file mode 120000 index 0000000..6acc92c --- /dev/null +++ b/RP2040/disk_backend.cpp @@ -0,0 +1 @@ +../disk_backend.cpp \ No newline at end of file diff --git a/RP2040/disk_backend.h b/RP2040/disk_backend.h new file mode 120000 index 0000000..288f0e0 --- /dev/null +++ b/RP2040/disk_backend.h @@ -0,0 +1 @@ +../disk_backend.h \ No newline at end of file diff --git a/RP2040/disk_backend_file.cpp b/RP2040/disk_backend_file.cpp new file mode 120000 index 0000000..18dbf1a --- /dev/null +++ b/RP2040/disk_backend_file.cpp @@ -0,0 +1 @@ +../disk_backend_file.cpp \ No newline at end of file diff --git a/RP2040/disk_backend_file.h b/RP2040/disk_backend_file.h new file mode 120000 index 0000000..3ea9a2e --- /dev/null +++ b/RP2040/disk_backend_file.h @@ -0,0 +1 @@ +../disk_backend_file.h \ No newline at end of file diff --git a/RP2040/error.cpp b/RP2040/error.cpp new file mode 120000 index 0000000..14fd3ca --- /dev/null +++ b/RP2040/error.cpp @@ -0,0 +1 @@ +../error.cpp \ No newline at end of file diff --git a/RP2040/error.h b/RP2040/error.h new file mode 120000 index 0000000..5a002f4 --- /dev/null +++ b/RP2040/error.h @@ -0,0 +1 @@ +../error.h \ No newline at end of file diff --git a/RP2040/gen.h b/RP2040/gen.h new file mode 120000 index 0000000..bc0aea6 --- /dev/null +++ b/RP2040/gen.h @@ -0,0 +1 @@ +../gen.h \ No newline at end of file diff --git a/RP2040/kw11-l.cpp b/RP2040/kw11-l.cpp new file mode 120000 index 0000000..12a1881 --- /dev/null +++ b/RP2040/kw11-l.cpp @@ -0,0 +1 @@ +../kw11-l.cpp \ No newline at end of file diff --git a/RP2040/kw11-l.h b/RP2040/kw11-l.h new file mode 120000 index 0000000..b7e88ef --- /dev/null +++ b/RP2040/kw11-l.h @@ -0,0 +1 @@ +../kw11-l.h \ No newline at end of file diff --git a/RP2040/loaders.cpp b/RP2040/loaders.cpp new file mode 120000 index 0000000..c8fc77d --- /dev/null +++ b/RP2040/loaders.cpp @@ -0,0 +1 @@ +../loaders.cpp \ No newline at end of file diff --git a/RP2040/loaders.h b/RP2040/loaders.h new file mode 120000 index 0000000..72369d4 --- /dev/null +++ b/RP2040/loaders.h @@ -0,0 +1 @@ +../loaders.h \ No newline at end of file diff --git a/RP2040/log.cpp b/RP2040/log.cpp new file mode 120000 index 0000000..acdcf24 --- /dev/null +++ b/RP2040/log.cpp @@ -0,0 +1 @@ +../log.cpp \ No newline at end of file diff --git a/RP2040/log.h b/RP2040/log.h new file mode 120000 index 0000000..49a04dd --- /dev/null +++ b/RP2040/log.h @@ -0,0 +1 @@ +../log.h \ No newline at end of file diff --git a/RP2040/memory.cpp b/RP2040/memory.cpp new file mode 120000 index 0000000..ce3ac52 --- /dev/null +++ b/RP2040/memory.cpp @@ -0,0 +1 @@ +../memory.cpp \ No newline at end of file diff --git a/RP2040/memory.h b/RP2040/memory.h new file mode 120000 index 0000000..6bdcc98 --- /dev/null +++ b/RP2040/memory.h @@ -0,0 +1 @@ +../memory.h \ No newline at end of file diff --git a/RP2040/platformio.ini b/RP2040/platformio.ini new file mode 100644 index 0000000..e9e9e44 --- /dev/null +++ b/RP2040/platformio.ini @@ -0,0 +1,17 @@ +[platformio] +default_envs = RP2040 +src_dir = . + +[env:RP2040] +lib_ldf_mode = deep+ +src_filter = +<*> -<.git/> -<.svn/> - - - - - - +platform = raspberrypi +board = pico +framework = arduino +monitor_speed = 115200 +upload_speed = 1000000 +lib_deps = greiman/SdFat@^2.1.2 + adafruit/Adafruit NeoPixel@^1.10.4 +build_flags = -std=gnu++17 -Ofast -DRP2040=1 -ggdb3 +#-D_GLIBCXX_USE_C99 +build_unflags = -std=gnu++14 -Os diff --git a/RP2040/rk05.cpp b/RP2040/rk05.cpp new file mode 120000 index 0000000..718725a --- /dev/null +++ b/RP2040/rk05.cpp @@ -0,0 +1 @@ +../rk05.cpp \ No newline at end of file diff --git a/RP2040/rk05.h b/RP2040/rk05.h new file mode 120000 index 0000000..0692da0 --- /dev/null +++ b/RP2040/rk05.h @@ -0,0 +1 @@ +../rk05.h \ No newline at end of file diff --git a/RP2040/rl02.cpp b/RP2040/rl02.cpp new file mode 120000 index 0000000..1febf02 --- /dev/null +++ b/RP2040/rl02.cpp @@ -0,0 +1 @@ +../rl02.cpp \ No newline at end of file diff --git a/RP2040/rl02.h b/RP2040/rl02.h new file mode 120000 index 0000000..49b1e34 --- /dev/null +++ b/RP2040/rl02.h @@ -0,0 +1 @@ +../rl02.h \ No newline at end of file diff --git a/RP2040/rp2040.h b/RP2040/rp2040.h new file mode 100644 index 0000000..91ac7c0 --- /dev/null +++ b/RP2040/rp2040.h @@ -0,0 +1,11 @@ +#pragma once + +#if defined(RP2040) +#include + +#include + +#define USE_SDFAT +#define SD_FAT_TYPE 1 +#include +#endif diff --git a/RP2040/tm-11.cpp b/RP2040/tm-11.cpp new file mode 120000 index 0000000..533f071 --- /dev/null +++ b/RP2040/tm-11.cpp @@ -0,0 +1 @@ +../tm-11.cpp \ No newline at end of file diff --git a/RP2040/tm-11.h b/RP2040/tm-11.h new file mode 120000 index 0000000..dd31375 --- /dev/null +++ b/RP2040/tm-11.h @@ -0,0 +1 @@ +../tm-11.h \ No newline at end of file diff --git a/RP2040/tty.cpp b/RP2040/tty.cpp new file mode 120000 index 0000000..1acd74f --- /dev/null +++ b/RP2040/tty.cpp @@ -0,0 +1 @@ +../tty.cpp \ No newline at end of file diff --git a/RP2040/tty.h b/RP2040/tty.h new file mode 120000 index 0000000..321a9c7 --- /dev/null +++ b/RP2040/tty.h @@ -0,0 +1 @@ +../tty.h \ No newline at end of file diff --git a/RP2040/utils.cpp b/RP2040/utils.cpp new file mode 120000 index 0000000..451eef0 --- /dev/null +++ b/RP2040/utils.cpp @@ -0,0 +1 @@ +../utils.cpp \ No newline at end of file diff --git a/RP2040/utils.h b/RP2040/utils.h new file mode 120000 index 0000000..6cd5d4f --- /dev/null +++ b/RP2040/utils.h @@ -0,0 +1 @@ +../utils.h \ No newline at end of file diff --git a/debugger.cpp b/debugger.cpp index 65242ff..ceb6412 100644 --- a/debugger.cpp +++ b/debugger.cpp @@ -10,8 +10,12 @@ #include "utils.h" +#if defined(ESP32) || defined(RP2040) #if defined(ESP32) #include "esp32.h" +#else +#include "rp2040.h" +#endif void setBootLoader(bus *const b); @@ -498,9 +502,85 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto *cnsl->get_running_flag() = false; - if (!single_step) { - auto speed = c->get_mips_rel_speed(); - cnsl->debug("MIPS: %.2f, relative speed: %.2f%%, instructions executed: %lu", std::get<0>(speed), std::get<1>(speed), std::get<2>(speed)); + c->reset(); +#endif + continue; + } +#if defined(ESP32) || define(RP2040) + else if (cmd == "cfgdisk") { + configure_disk(cnsl); + + continue; + } +#endif +#if defined(ESP32) + else if (cmd == "cfgnet") { + configure_network(cnsl); + + continue; + } + else if (cmd == "startnet") { + start_network(cnsl); + + continue; + } +#endif + else if (cmd == "quit" || cmd == "q") { +#if defined(ESP32) + ESP.restart(); +#endif + break; + } + else if (cmd == "help" || cmd == "h" || cmd == "?") { + cnsl->put_string_lf("disassemble/d - show current instruction (pc=/n=)"); + cnsl->put_string_lf("go - run until trap or ^e"); +#if !defined(ESP32) && !define(RP2040) + cnsl->put_string_lf("quit/q - stop emulator"); +#endif + cnsl->put_string_lf("examine/e - show memory address ( [])"); + cnsl->put_string_lf("reset/r - reset cpu/bus/etc"); + cnsl->put_string_lf("single/s - run 1 instruction (implicit 'disassemble' command)"); + cnsl->put_string_lf("sbp/cbp/lbp - set/clear/list breakpoint(s)"); + cnsl->put_string_lf("trace/t - toggle tracing"); + cnsl->put_string_lf("strace - start tracing from address - invoke without address to disable"); + cnsl->put_string_lf("mmudump - dump MMU settings (PARs/PDRs)"); + cnsl->put_string_lf("setpc - set PC to value"); + cnsl->put_string_lf("setmem - set memory (a=) to value (v=), both in octal, one byte"); + cnsl->put_string_lf("toggle - set switch (s=, 0...15 (decimal)) of the front panel to state (t=, 0 or 1)"); +#if defined(ESP32) + cnsl->put_string_lf("cfgnet - configure network (e.g. WiFi)"); + cnsl->put_string_lf("startnet - start network"); +#endif +#if defined(ESP32) || define(RP2040) + cnsl->put_string_lf("cfgdisk - configure disk"); +#endif + + continue; + } + else { + cnsl->put_string_lf("?"); + continue; + } + + c->emulation_start(); + + *cnsl->get_running_flag() = true; + + while(*stop_event == EVENT_NONE) { + if (!single_step) + DOLOG(debug, false, "---"); + + c->step_a(); + + if (trace_start_addr != -1 && c->getPC() == trace_start_addr) + tracing = true; + + if (tracing || single_step) + disassemble(c, single_step ? cnsl : nullptr, c->getPC(), false); + + if (c->check_breakpoint() && !single_step) { + cnsl->put_string_lf("Breakpoint"); + break; } if (*stop_event == EVENT_INTERRUPT) {