This shows you the differences between two versions of the page.
— |
blog:pushbx:2022:1214_more_ldebug_work_early_december [2022-12-14 13:30:56 +0100 Dec Wed] (current) ecm created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== More lDebug work, early December ====== | ||
+ | |||
+ | |||
+ | **2022-12-11** | ||
+ | |||
+ | Some more work on lDebug happened recently. | ||
+ | |||
+ | |||
+ | ===== M command dispatching changes ===== | ||
+ | |||
+ | Another change inspired by (FreeDOS) Debug/X, the M commands were changed so as to detect the single-expression machine-type related M commands differently. This allows to use the dollar sign prefix for the first address of a memory move M command. (This prefix forces use of a segmented address with a 86 Mode segment instead of a selector in Protected Mode. It is accepted as a no-op while in Real/ | ||
+ | |||
+ | This consists of parsing an address, then branching to the machine-type M command if no length or end for the range follows. As the valid numeric values for machine-type M commands with a numeric expression all fit within 16 bits, this way of dispatching works for all valid possibilities. The machine-type M commands will then parse their parameter again, insuring not all address parameters are allowed. | ||
+ | |||
+ | The benefit is that other special address parameters, like lDebug' | ||
+ | |||
+ | |||
+ | ===== The mov with segreg and memory operands fix ===== | ||
+ | |||
+ | During debugging of the dpmimini example, lDebugX would disassemble an instruction in the 32-bit code segment as '' | ||
+ | |||
+ | A little research let us conclude that a '' | ||
+ | |||
+ | |||
+ | ===== Exception areas ===== | ||
+ | |||
+ | Something that generally is only enabled in lDebugX builds is the support for debugger exception areas, which allows to display what code caused a fault in the debugger. This was inspired by (FreeDOS) Debug/X which started displaying a linebreak before the debugger exception messages if the fault happened while accessing referenced memory in the disassembler. Exception areas are a more general implementation of the same idea. | ||
+ | |||
+ | |||
+ | ===== Evaluator work ===== | ||
+ | |||
+ | The next thing is two fixes and one extension to the expression evaluator. One fix is that the unary ''?'' | ||
+ | |||
+ | The final fix is allowing '' | ||
+ | |||
+ | |||
+ | ===== Disassembler changes ===== | ||
+ | |||
+ | The disassembler support for the 40-column friendly mode was changed to use two new DAO flags instead of two DCO6 flags. Of the two flags used formerly, one was the shared global " | ||
+ | |||
+ | The disassembler also gained several flags that enable memory access in the referenced memory display (displaying current memory contents) and for simulating repeated string compare/ | ||
+ | |||
+ | |||
+ | ===== Default lengths and D commands with lines length ===== | ||
+ | |||
+ | As another part of the HP 95LX support, the D and U commands now read their default lengths from writable debugger variables. The defaults are the same as what was hardcoded before, that being 128 bytes in DEFAULTDLEN for the D commands and 32 bytes in DEFAULTULEN for the U command. | ||
+ | |||
+ | As a part of this work, the U command also gained the variable DEFAULTULINES. If nonzero, this takes precedence as the default length and specifies how many " | ||
+ | |||
+ | Finally, the D commands were modified to also support a lines length, both explicit and through the DEFAULTDLINES variable for default length (again taking effect if nonzero). | ||
+ | |||
+ | During that modification, | ||
+ | |||
+ | Consequently it was also documented that the U command with a specified lines length doesn' | ||
+ | |||
+ | Additionally, | ||
+ | |||
+ | These limits on the lines length for the U command aren't new, despite being documented only now. They are a consequence of not actually counting lines but rather instructions (or unused prefixes). It wouldn' | ||
+ | |||
+ | All in all, the way the lines lengths work is that they specify the minimum amount of lines to use, not the maximum. This is unlikely to change at this point, though a different mode could be added as an option later. Because of the problem of not truncating multi-line instructions, | ||
+ | |||
+ | |||
+ | {{tag> | ||
+ | |||
+ | |||
+ | ~~DISCUSSION~~ | ||