This shows you the differences between two versions of the page.
— |
blog:pushbx:2023:0201_pofo_rendeb_script [2023-02-01 17:17:47 +0100 Feb Wed] (current) ecm created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Pofo, rendeb script ====== | ||
+ | |||
+ | **2023-01-29** | ||
+ | |||
+ | This week little progress happened with any of the debuggers. | ||
+ | |||
+ | ===== Running lDebug on the Atari Portfolio ===== | ||
+ | |||
+ | rr recently set up file transfers between a " | ||
+ | |||
+ | The debugger didn't fit in the default lCDebug build, uncompressed. I prepared a CDebug file with many of the build options disabled, such as the bootable mode, device driver mode, and the extended help. Some specific commands like DM, DI, X, RN, and D strings were also disabled. | ||
+ | |||
+ | Eventually I managed to create a CDebug build that requires less than 100 kB during installation, | ||
+ | |||
+ | This build successfully runs on the Pofo. | ||
+ | |||
+ | |||
+ | ===== Running lClock ===== | ||
+ | |||
+ | lClock initially crashed the Pofo, even with its ''/ | ||
+ | |||
+ | I had extended lDebug a while ago to check for valid interrupts 2Dh and 2Fh before calling any of the services on these interrupts. But for the TSRs I have still been assuming MS-DOS v3 compatibility. | ||
+ | |||
+ | Rather than changing the TSRs, I created a small program (inst2d2f) to check for invalid vectors (segment all zeroes or offset all ones) and install a very small resident block (a single paragraph, in fact) which contains a single '' | ||
+ | |||
+ | Next problem was with the PSP relocation. Evidently, DIP-DOS stores the parent process or Parent Return Address at another spot than I expect for MS-DOS v2 and up compatibles. Trying to install the current lClock build resulted in a truncated message and then a return to the DOS prompt. (Quite likely this also permanently ate up memory used by the relocated process that never ran.) | ||
+ | |||
+ | Creating a build with the '' | ||
+ | |||
+ | I advised rr to install lClock as '' | ||
+ | |||
+ | < | ||
+ | a | ||
+ | mov ah, 00 ; multiplex number returned by installer | ||
+ | mov al, 21 | ||
+ | int 2D | ||
+ | nop | ||
+ | . | ||
+ | r | ||
+ | t | ||
+ | t | ||
+ | t | ||
+ | dw dx:bx l 4</ | ||
+ | |||
+ | This should show the default two words of the lClock write pointer, reading the values 00A0h, B800h (or segmented far pointer B800h: | ||
+ | |||
+ | By changing this pointer in the resident lClock and then running '' | ||
+ | |||
+ | The adjustments possibly needed for the Pofo, as well as for the HP 95LX, are twofold: The text video buffer segment may be B000h instead of B800h. And the end of the first 80-column row may not be within the visible part of the virtual screen, requiring to scroll to see the clock display. | ||
+ | |||
+ | We did not yet manage to solve what segment and what offset is needed to successfully see the lClock display on the Pofo. However, rr reported that both segments appear to show the text mode video buffer contents. It is unclear if this means that writing to either would have the same effects. | ||
+ | |||
+ | |||
+ | ===== Einsicht: No progress ===== | ||
+ | |||
+ | I have been considering how to update Einsicht' | ||
+ | |||
+ | |||
+ | ===== Running lClock on the HP 95LX ===== | ||
+ | |||
+ | **2023-01-30** | ||
+ | |||
+ | The HP 95LX with its MS-DOS version 3.20 does not pose the interrupt vector or PSP relocation problems of the Pofo. However, its text video buffer is only accessible at segment B000h, not at lClock' | ||
+ | |||
+ | So this is how to make it work: | ||
+ | |||
+ | < | ||
+ | lcdebugu /d- / | ||
+ | a | ||
+ | mov ah, 00 ; installed multiplex number | ||
+ | mov al, 21 | ||
+ | int 2D | ||
+ | nop | ||
+ | . | ||
+ | r | ||
+ | t | ||
+ | t | ||
+ | t | ||
+ | dw dx:bx l 4 ; insure control data is correct (00A0, B800) | ||
+ | d B000:0 l 8 lines ; check text screen buffer | ||
+ | r word [dx:bx + 2] | ||
+ | B000 | ||
+ | r word [dx:bx] | ||
+ | #40*2 + #80*2*9 | ||
+ | q | ||
+ | lclock /o / | ||
+ | |||
+ | Now the clock is visible in the top right corner of the screen. (However, when the visible screen is moved up it will be apparent that the clock leaves traces in the rows above the 10th virtual row.) Uninstall lClock again using '' | ||
+ | |||
+ | |||
+ | ===== Renaming across directories ===== | ||
+ | |||
+ | I created a little script file which uses the debugger to issue a rename system call to the kernel, called '' | ||
+ | |||
+ | < | ||
+ | |||
+ | Note that it requires double-backslashes to pass along a single backslash to the DOS service, because the command line parsing of the debugger uses backslashes to escape other codepoints (like it does to pass along the double quote marks to the E commands). | ||
+ | |||
+ | **2023-02-01** | ||
+ | |||
+ | Also note that it is expected that the filenames passed to the batch script do not contain blanks, double quote marks, or semicolons (though they could be escaped to make that work). The length limit of 100h (256) bytes should suffice for any practical use. The scriptlet passed to the debugger writes the filenames to memory with a NUL terminator each, sets up the registers for the rename DOS service, and traces past the interrupt 21h call. Finally it depicts the current flags and value of '' | ||
+ | |||
+ | Unlike the DOS shell' | ||
+ | |||
+ | {{tag> | ||
+ | |||
+ | |||
+ | ~~DISCUSSION~~ | ||