More OSes, fewer bugs !
FIX : CPU : LDSTUB and SWAP instructions (!)
FIX : TS : ESP : Support mismatching SCSI command length
FIX : TS : ESP : Better multiple disks handling
FIX : TS : SCC : RR15 access. Interrupts.
FIX : TS : TIMER : System timer disabling.
FIX : DEBUG software : Data breakpoint issues
ENH : TS : LANCE : support split buffers for emission.
ENH : TS : SCSI : Stubs for unhandled commands.
ENH : TS : TCX : Hardware acceleration : Blitter, Filler, Stippler
ENH : TS : TCX : CG3 emulation mode
ENH : TS : OpenBIOS : Faster boot (rather less slow).
ADD : Cross-clock PLOMB bridge.
This is mainly a bugfix release, with a few enhancements to support more OSes.
Because R5 is not finished yet.
SWAP and LDSTUB
LDSTUB and SWAP bugs were quite severe. The LDSTUB instruction was plain broken.
SWAP and LDSTUB also had issues with the MMU.
These instructions do coupled LOAD then STORE data accesses : They should trigger a MMU fault if a read-only memory area is accessed (Solaris dares to do that often).
Before the fix, the MMU would signal the fault on the second access, the STORE cycle, but as the IU only checks the first access of multicycle instructions (SWAP, LDD, STD…), the fault was ignored.
Both the LOAD and STORE parts of SWAP and LDSTUB must be cancelled to let the instruction be restartable after a trap. The fix is therefore not allowing handling faults on the second access, but instead telling the MCU “ok, here is a load for the cache and memory, but it should be considered as a store by the MMU”
The other fixes are related to the slightly different ways OSes use the peripherals.
The worst is certainly the serial/keyboard/mouse controller : Each OS has a different way of checking received characters and acknowledging interrupts.
TCX acceleration was not planned, it was necessary for NextSTEP which is not compatible with CG3 (TCX and CG3 are the names of video boards).
Luckily, it is not very complex, this blitter can only copy up to 32 pixels. Main difficulty is dealing with misaligned accesses : I wrote the code, but I’m not sure I really understand how it works.
TCX is not complete yet : No hardware cursor and no 24bits colours.
CG3 was added for SunOS, before realizing that SunOS 4.1.4 is also compatible with TCX, so this is not very
While debugging, I grew tired of waiting for OpenBIOS boot. OpenBIOS is now a bit faster by activating the cache,
using an optimised memcopy, multisector reads.
With these fixes and enhancements, we can now run SunOS (4.1.4), Solaris (7 & 8) and NextSTEP (3.3) in addition to the already supported Linux, NetBSD and OpenBSD.
There are still issues, certainly related to cache management, so sometimes different configurations are needed to run the OSes, and some features, particularly the network, don’t work yet with all OSes.