Msg: 5983 *Conference*

08-22-95 18:50:17

From: RON WIESEN

To : COMET _

Subj: REPLY TO MSG #5977 (UNDELETE -- COLD START RECOVERY)

The "save area" I mentioned in prior messages is used by the OS to build
line_strings where the operator, in TEXT, uses the SHIFT+PRINT key press.  The
OS prompts for WIDTH and, based on it, constructs a line_string terminated by
CR/LF for each line sent to the LPT port.  Maximum WIDTH is 132 and this can
encroach into the "save area" as far as address F919 but leaves the 6-byte area
from F91A to F91F unchanged.  Perhaps these 6 bytes relate to some other
function such as a file name without a name extension?
 
Note that WIDTH has a RAM hook.  I don't know if the hook is pre-prompt or
post-prompt but it should not matter.  With some restriction of WIDTH, choice B
of my prior messages is viable.  For example, in the prior message for choice B
a maximum WIDTH of up to 66 characters is accomodated.  I think this is too
restrictive yet I think few operators really need a WIDTH of 132 characters, so
a comprimise can be considered.  Given printer realities, a restriction to a
maximum WIDTH of 80 characters allows choice B to be viable with less area for 
"recovery/save" code.
 
Considering recent messages regarding recovery code that is resident in an
Option ROM, then at the most only two blocks of code are needed: "save" code
for file directory info and for critical RAM address pointers and "WIDTH
override" code for guarenteed restiction of WIDTH via its hook.  Of course you
can use the "code enveloped within a hidden and lowest locale BASIC file"
arrangement for all the code, but I think any "WIDTH override" code should stay
in the "save area" locale to keep it immune to all operator actions.  At the
least without any file directory info saved at all, the "save area" must
contain critical RAM address pointers and "WIDTH override" code.  In such a
case the recovery code must be smart to work without benefit of any saved 
directory info but a 32-Kbyte ROM has room for lots of "smarts" keyed to
critical RAM address pointers.
 
Assuming restriction to a maximum of 80-character WIDTH, a 58-byte cell is
available.  Consider the ammended "choice B" as shown below.  File_Address (2nd
and 3rd bytes) is saved followed by a copy of 3 critical RAM address pointers
(low/high byte pairs) from the OS, plus a 16-byte block of "WIDTH
override/save" code.  Beware that 16 bytes is pretty tight for both WIDTH
override and directory info save logic.
 
18-byte cell (18 by 1)  FA8E file type, RAM file slot #1 
..
.. FA9F file type, RAM file slot #18. 
 
 
58-byte cell (18 by 2, 3 by 2, plus 16)  F8E6/F8E7 File_Address, RAM file slot
#1 
..
.. F908/F909 File_Address, RAM file slot #18. 
 
F90A/F90B address to first BASIC file  F90C/F90D address to first ASCII file  
F90E/F90F address to first M/L file 
 
F910 to F91F WIDTH override/save code.