|
Aemulor 2.20 release notes
User interface changes
- Aemulor UI now masks out the events that it doesn't need
(in particular Null events which are now used and masked properly)
- Interactive help added
- Memory requirements reduced; ARM610 and SA engines, since they're
mutually exclusive, now share workspace to roughly halve the memory
requirements.
- 'Add' button and dialogue box added to the Applications window,
allowing entry of wildcarded filenames such as
*.!Schema2 so
that the list doesn't need to be altered if Schema2 is moved
to another location.
- Whether Aemulor's user interface starts automatically upon booting
is now determined by a setting in Aemulor's config window.
Compatibility improvements
- Aemulor now translates error numbers returned by the Internet module
(Socket SWIs) for compatibility with 26-bit apps that assume RO4
behaviour (
&00-&7F rather than &20E00-&20E7F).
- Aemulor now supports 26-bit environment handlers (eg. escape handler,
exit handler, error handler) and vector claimants.
- Aemulor now consults the Run$Path allowing users to manually
start 26-bit applications in their Library directory, for example,
without having to type the full pathname or change directory.
- Aemulor no longer automatically runs any utility that isn't
marked as
32OK; doing so was found to cause problems with some
32-bit software because RISC OS 5 doesn't enforce this rule and
some programmers therefore haven't updated their software.
This change effectively makes the 32OK marker useless.
- The RISC OS 5 WindowManager does not pass Tab and Shift-Tab
keypresses to an app for writable, indirected text icons that don't
have a validation string. However it does for icons with empty
validation strings. RO4 passes the keypresses to the app in
both cases, and Aemulor now hides this change allowing the tables
in Personal Accounts V4 to work properly.
- Aemulor now includes the functionality of the AppPatcher module,
allowing many pre-StrongARM applications to run with the StrongARM
engine rather than the ARM610 engine, making them much more
responsive. This includes Eureka, Squirrel, PinPoint, Chess and
probably many others so it's worth re-testing apps with the SA
engine if you currently have them set to use the ARM610 engine.
- CLI handling improved so that FS special fields are rejected,
as per the OS kernel, and corrected so that I/O redirection is
performed /before/ temporary FS selection.
- RMReInit (module reinitialising) is now supported for 26-bit
modules because some applications do this in their !Run files!
Aemulor used to report "I haven't written this yet!" even for
attempts to re-init 32-bit modules. This has been fixed too.
- ARM610 engine changed to store
PC+12 as it should; previously
it implemented the StrongARM behaviour (PC+8) because the code
dated back to days when the SA engine didn't exist.
- Now suppresses attempts to claim the processor vectors
from within 26-bit code. In theory such code should be 32-bit
safe anyway, but in practice further work will be necessary,
eg. the DrawWorks support modules attempt to claim the SWI
vector but assume that the caller is executing below 64MB.
- Squeezing and patching of 26-bit AIF images is now performed
in a service call handler allowing 26-bit code to invoke this
code by calling
XOS_ServiceCall; one application has been
seen to do this.
- Aemulor now displays errors as text if trying to startup during
the boot sequence, eg. when a time-limited demo copy has expired.
When running from PreDesk it has been found that a module returning
an error from its initialisation code - stupidly - prevents the
remaining PreDesk modules from starting up (correctly).
Bug fixes
- Applications using the SA-engine whilst 26-bit modules with service
call handlers are loaded were unstable... giving essentially random
failures because service call handlers can be invoked at any time,
and the foreground state of the emulated app wasn't being preserved.
This problem did not occur with the ARM610 engine.
- Aemulor was interfering with 32-bit GhostScript (ps2pdf) - * command
was expanding (via macros) to exceed 256 char limit in Aemulor's
handling of macros; behaviour should now be the same as RO5
OS_CLI,
with 1KB buffers
- Aemulor was interfering with 32-bit TaskUsage by introducing a space
at the start of the command tail passed to a module when entered
(via
OS_Module 2)
- Large config files (those with more than about 30 apps), caused
Aemulor to data abort when the UI started up. Resizing of app/module
window definitions incorrectly calculated the new size, thus
corrupting the emulated RMA
- Emulated apps issuing WimpTask would sometimes find the *command
corrupted/truncated, typically giving a 'file not found' error....
oweing to the *command remaining on the SVC stack but not being
used until later (
*WimpTask).
- Shutdown delay removed. Aemulor was trying to access the hard disk
after the
*Shutdown command had been processed, thus causing a 2
second delay whilst the hard disk silently spun up again!
- Aemulor was unsqueezing 32-bit modules on behalf of the OS,
but doing it incorrectly in specific cases; only known to give
a problem with a pre-release version of 32-bit PhotoDesk. Aemulor
now leaves unsqueezing 32-bit modules to RISC OS, for safety,
and has its own corrected unsqueezing code for 26-bit modules.
- Aemulor was loading the DigitalRenderer module even though it is
marked as 32-bit compatible. Caused by the module SWI chunk having
the X bit set which is very unusual but ignored by RISC OS and
now ignored by Aemulor to ensure compatibility.
- Whilst Aemulor is loaded, all applications, including 32-bit apps,
are limited to a maximum of 28MB each. Applications
requesting more than this amount could cause unpredictable failures
whilst Aemulor is running, eg. creating a 4800x2400x16m sprite in
!Paint demonstrates this problem.
Aemulor now correctly prevents apps from claiming more than
this 28MB limit, but we recommend loading Aemulor in PreDesk
because problems will still occur if there are apps with more
than 28MB already running when you start Aemulor manually.
- Apps using the SA engine & running in a TaskWindow could result
in unpredictable failures if task switching is performed on
returning from an IRQ (callback) because the state info for
the SA engine wasn't being preserved. It is now. This problem
could also cause failures in 32-bit apps running alongside the
TaskWindow.
- Emulated SWI
OS_ReadEscapeState didn't work correctly; it was
returning with V set (but R0 unchanged), potentially causing apps
with error-handling code to fail.
- Code that is definitely 26-bit (eg. applications declared to
Aemulor or not flagged as 32-bit OK can be called directly in
TaskWindows without prefixing the command with
*AemuExecute).
With earlier versions of Aemulor such code did not acquire a
post-filter which could result in failures if the task was
pre-empted.
- 26-bit SharedCLibrary can now access its Messages file
(eg. it does this when a 26-bit command line program returns
a non-zero result code).... previously this failed with
an aborted store to address
&FF0 (where CLib stores the
address of its MessageTrans file descriptor).
- Killing 26-bit modules with old-style service call handlers
(ie. no list of wanted service calls) caused spurious failures
after the module was killed if Aemulor was still running,
oweing to the dispatch chain becoming corrupted.
|