User interface changes & additions
- Added a TaskWindow option to the icon bar menu which opens a
26-bit TaskWindow for running command-line utilities etc under
Aemulor.
- Applications window now accepts normal directories, so that - for
example - you can add the directory in which you keep all 26-bit
applications, rather than adding each application individually.
- Module window now provides help info on 26-bit modules.
Also available via the *Help command.
- Added sprites to the Applications window, making it easier to
locate applications. Double-clicking Select on an application
opens the options window for editing, double-clicking Adjust runs
the application.
- Improved handling of application and module panes over mode changes
and esp. low-resolution modes. Now uses the nested WindowManager.
- Keyboard control of Applications window. By entering the first
few characters of an application's name (eg. Eure for ...!Eureka)
you can select that application.
- Select-clicking on Aemulor's iconbar icon with shift held down opens
the Task display. Shift-adjust-clicking opens the Config window.
Compatibility improvements
- Provides the Bfont alphabet and the Master and Compact countries
which have been removed from the RISC OS 5 International module.
- SharedCLibrary updated to version 5.46
- Aemulor's unsqueezing code modified to also cope with older squeezed
executables allowing more applications to benefit from the
StrongARM engine.
- Use of OS_InstallKeyHandler supported
- Interception of OS_SynchroniseCodeAreas SWI for 26-bit apps,
giving better compatibility when using 32-bit modules that
modify/generate code.
- Added support for user-drawn objects (26-bit routines can be
passed to Wimp_DragBox and DragAnObject_Start).
- Emulated RMA & System Heap now fully support resizing
(often performed by old games and demos to release memory)
and may be resized manually using the TaskManager.
- ARM3 engine added to improve compatibility with self-modifying code.
Uses the same basic emulation as the ARM610 engine but with code
buffering optimisations disabled because they can break some self-modifying
code. Use this engine only as a last resort because it's
much slower.
- Patched BASIC to remove support for 'sp' register in assembler code
because this breaks programs which use register names starting with
'sp', eg. 'speed'.
- Implemented *RMFaster command for use by older programs.
- Added support for dynamic areas with 26-bit handler code.
- Included emulation of ARMvID register (CP15 C0)
- Support for tokenised help/syntax text in 26-bit modules.
- OS_ReadSysInfo returns correct hardware features for the emulated
machine for those games which check VIDC20 availability, for example.
- Improved emulation of hardware and implemented IOC/IOMD timers 0 and 1.
- StrongARM engine now always stores PC+8 in STR/STM instructions rather
than PC+12 as per earlier processors (the assumption that no code
would be written to work exclusively on the SA proved false with the
arrival of SA-specific patches for old games)
- OS_Byte 129 now returns C flag though this behaviour isn't documented
in the PRMs.
- Included emulation of CP15 register C2 reads (ARM3 cache state)
- Implemented the *GO command which is used by quite a few older games.
- Detection (and hiding) of negative validation string pointers which
were previously treated the same as -1 (now only -1 is accepted by
the RO5 Wimp).
- SharedCLibrary 5.47 introduced to resolve PipeDream hanging fault
(and possibly other C apps too).
- Improved Aemulor's shutdown code to better handle processor vectors
being claimed by other modules such as SpecialFX. Claimants must
still be shutdown in reverse order though.
- Emulation of OS_Memory 9 for reading VIDC/VIDC20 controller presence
and base address.
- Provision of memory from &1F02000 to &1FFFFFF which is directly
accessed by some old Archimedes games, including USR-writable
memory from &1FEC000 upwards.
Bug fixes
- Data abort logging reports correct address of failure (instead of &12345678!)
and can handle multiple aborts in quick succession,
as can occur if an application tries to recover itself but incurs
a further abort. Undefined instructions errors reported by the
ARM3/610 engine now contain the address.
- Emulated DAs were sometimes mistakenly allocated below 64MB,
possibly conflicting with the emulated ROM image at &3800000.
Also corrected fault in error recovery code when resizing.
- Applications trying to use wimpslots >= 56MB would cause the
machine to lock up if Aemulor had been run (and quit) beforehand,
oweing to Aemulor restoring the memory map incorrectly after
unmapping the ROM image at &03800000. DeskEdit would also abort
loading some files because only the first 1MB of the ROM was
being mapped.
- Use of Choices$Path and Choices$Write corrected
- OS_SWINumberToString was omitting the X prefix on
error-returning OS SWIs
- Taskswitching between 26-bit and 32-bit apps could cause
occasional freezes/instability with Browse running.
- Aemulor now requires the 'messages filename' field of 32-bit modules
to be word-aligned if used, as per the RISC OS kernel.
- Applications written in BASIC were using the 'Other applications'
config settings instead of their own.
- Auto-run checks now only performed on executable files. In earlier
double-clicking (=> running) a file inside a 26-bit application would
cause the editing application to be emulated even if it's 32-bit OK.
- Errors returned by 26-bit utilities were being ignored.
- Corrected read operations on emulated system heap.
- Applications no longer loaded at their load address to check for
32-bit compatibility because this can overwrite environment handlers
and data that will be needed before the new application starts
(especially BASIC's UpCall handler). This was the cause of the
conflict with Font Directory Pro.
- Matching of pathnames against the applications list was using
the canonical form but without Run$Path so some programs invoked
at the command line could be ignored by Aemulor and run natively
instead.
- 'Add application' applied its settings to the most recently edited
application instead of the newly-added one.
- Corrected reporting of 'invalid number of parameters' errors for
*commands provided by 26-bit modules.
- Applications started via the 'Run' button in the Apps window were
used the 'Other applications' settings for loading their modules
and, in the case of games started with *GO, for running the application
code too.
- Aemulor Screen base address was being written to address 0 upon
entry to an emulated screen mode.
- Corrected support for 26-bit sound schedulers
Aemulor Pro specific features
- Added Tasks window that shows the applications that Aemulor is
running and any dynamic areas that are being emulated at low
addresses for those apps. It also shows the emulation mode for
each task, and the amount of memory being used by the emulation.
- Includes support for 26-bit sound
(8-bit voice generators and 16-bit linear handlers,
channel handlers and schedulers)
- Supports 26-bit filing systems.
- Support for low-bpp screen modes (2,4 and 16 colours) and
provides screen resolutions that are unavailable natively to
allow older games to work.
- Emulation of IOMD/VIDC20 and IOC/VIDC for those programs,
especially games and demoes, that directly access hardware.
- Includes support for IRQ/device handlers (OS_ClaimDeviceVector)