2022-09-18
This post is the first work I have created using the Memo application on the first HP 95LX that I recently acquired.
I did use Memo previously to create a few script files, mainly to start and configure lDebug.
I received this device 8 days ago (as of this writing), on 2022-09-10 Saturday. Last Friday, 2022-09-16, I picked up the serial connection cable that I ordered from the US. This has allowed me to exchange files between the 95LX and my desktop computer running Linux.
The macros for dual code segment support contain two different macros for differently handling inter-segment calls.
The lDebug debugger is a demanding application. It's driven NASM bug reports for a while now. There are 63 tickets filed by me in the NASM bugzilla, most of which cropped up during lDebug development. As described in 2022 July, the debugger's footprint has grown beyond 64 KiB segment limits twice now.
As mentioned in the prior blog post
lDebug very much has a "go everywhere, do everything" theme.
Today we're caught up with FreeDOS Debug again for the most part.
(Still missing is the patch to use the test_high_limit function where appropriate.
It is nontrivial to decide which spots should use that function
instead of test_d_b_bit, which was renamed from testattrhigh.)
The "go everywhere, do everything" theme of lDebug has gained a new feature: Conditionally Debuggable builds allow to switch between the non-debuggable mode (handlers are hooked when the debugger starts up and unhooked only when it terminates), and the debuggable mode.
In the debuggable mode, the prior debugger's handlers
are preserved in most of the debuggable application.
Only when calling the run function,
the debuggable debugger sets up its own handlers.
That means a great majority of the debuggable's code
can be debugged using another instance of lDebug.
Traditionally, FreeDOS Debug would require a lower-level debugger like one built into a virtual machine to be debugged. In recent years build options were added to never hook interrupts 1 (trace interrupt) and 3 (breakpoint interrupt), allowing to debug most parts. However, these options imply that you cannot actually run a debuggee and have it return control to the instance that is to be debugged.