]> code.bitgloo.com Git - clyne/sforth.git/commitdiff
mediocre debugger
authorClyne Sullivan <clyne@bitgloo.com>
Sat, 4 Jan 2025 11:21:34 +0000 (06:21 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Sat, 4 Jan 2025 11:21:34 +0000 (06:21 -0500)
main.cpp

index 697f2d2a6422fc4250ab15bc797334bf08af4ed9..5921497d26d99e327e6ca03c3ffa5ef3d4825e75 100644 (file)
--- a/main.cpp
+++ b/main.cpp
 
 constinit static sforth::forth<8192> forth {sforth::initialize<&forth>()};
 
+bool sforth_debug_hook()
+{
+    char c;
+
+    std::cout << "DS: ";
+    for (auto it = forth.sp; it != forth.dstack.end(); it++) {
+        std::cout << *it << ' ';
+    }
+    std::cout << std::endl;
+    std::cout << "RS: ";
+    for (auto it = forth.rp; it != forth.rstack.end(); it++) {
+        if (auto w = forth.lookup(*it); w)
+            std::cout << (*w)->name() << '+' << ((sforth::addr)*it - std::bit_cast<sforth::addr>((*w)->body())) << ' ';
+        else
+            std::cout << *it << ' ';
+    }
+    std::cout << std::endl;
+    std::cout << "HERE: " << (sforth::addr)forth.here << std::endl;
+    std::cout << "IP: ";
+    if (auto w = forth.lookup(forth.ip); w)
+        std::cout << (*w)->name() << '+' << ((sforth::addr)forth.ip - std::bit_cast<sforth::addr>((*w)->body())) << ' ';
+    else
+        std::cout << forth.ip << ' ';
+
+    std::cout << std::endl << "> ";
+    std::cin >> c;
+    return true;
+}
+
 static bool parse_stream(auto&, std::istream&, bool say_okay = false);
 
 constinit static sforth::native_word<".", [](auto) {