Alex,
>
> Nice work getting these really useful utilities out there Hugh!
>
Thanks, but I'm just the delivery boy. Mark did the real work.
>
> But wait, there's more! :-) Ask Mark about QuickView SHR and
> LZ4CompressorX! Let's get them added to your site as well.
>
I've contacted Mark and we'll see what he says. He did mention to me
that his QuickViewSHR and GraphicConverterIIGS might be acceptable. I've
asked him for his builds.
>
>> Also, your AppleWorks Pre-Launcher - Stops crashes from GS/OS Finder –
>> what is this actually doing to ensure AppleWorks launches properly?
>
That is actually a precursor to, and superseded by my FinderLaunch Init
from my existing AppleWorksInitPack that I released back in 2017 and is
also currently available for download from the same site.
Basically it prevents a crash to the Monitor when AppleWorks is
re-launched from the GS/OS Finder after previously launching and
quitting in a single session.
While not all IIGS users suffer a crash upon re-launch from the Finder,
those who have multiple ongoing interrupt processes (e.g. Twilight II,
AppleTalk, UltraMacros) often do. This Init incorporates into AppleWorks
the same technique used by the late Glen Bredon in his PS.16.TO.8 from
ProSEL 16 when launching ProDOS 8 programs from GS/OS.
Since folks here (myself included) want the 'why' and well as the
'what', the problem stems from UltraMacros (built into AppleWorks 5.1)
running in the AuxMem language card and using the AuxMem stack.
Apple expects programs such as this to store the main memory stack
pointer at location $01/0100 whenever they switch to running a program
in AuxMem and using the AuxMem stack. Apple wants this so that IIGS
accessories that use interrupts (and run in main mem), when interrupting
UltraMacros, will first read the mainmem stack pointer at $01/0100
*before* and then use *it* before during their interrupt task.
UltraMacros, though, uses a location in main memory ($00/B4FC, IIRC)
instead of $01/0100 to store the main memory stack pointer.
When AppleWorks is quit the first time it is run, GS/OS places the
current value of the main mem stack pointer at location $01/0100. This
location is generally very 'high' in the stack (e.g. $00/01B4).
If you then re-start AppleWorks and UltraMacros begins, a IIGS interrupt
will see this 'too high' value for the main mem stack pointer and use it
to to perform it's task, even though it is not the correct main mem
stack pointer for the currently-running AppleWorks program.
When control is returned to AppleWorks, the stack pointer is in the
wrong place and a crash to the monitor occurs.
The late Glen Bredon actually figured out a workaround and prior to
running any ProDOS 8 program from GS/OS, he would place the value of $7F
at $01/0100 for the main mem stack pointer (halfway down the page) so
that IIGS interrupts would not interfere with the main mem stack
currently in use by AppleWorks.
TLDR - a better explanation is in the source code to the FinderLaunch
Init on the site.
Maybe you're sorry you asked. ;-)
BTW, a while back you asked about the status of the update to the
AppleWorksInitPack which adds four new inits. All the inits are done,
and I still have the docs to finish for the last of the four, and the
website html code to construct.
It seems I'm sidetracked by doing some support files for Kent's KEGS and
trying to tweak some high-speed serial drivers, as well as do real work
during office hours. Time to focus, no doubt.
Hugh Hood