JonAbbott wrote: ↑Sat Jun 30, 2018 1:16 am
The big issue I'm trying to resolve at the moment is with BASIC when it's running under the Wimp. For example, SYS "xx" TO xyz is triggering all sorts of odd issues from variable corruption to locks, remove the TO and there's no issues. All Wimp Info menus that are handled in BASIC also lock the machine, which may be a related issue.
I've tracked this issue down to the OS not preserving page permissions when memory is mapped out/in. The knock on effect is self-modifying code becomes out of sync with the JIT cache. BASIC uses a self-modifying routine for SYS, hence the issues when SYS are handled after Wimp_Poll is called.
JonAbbott wrote: ↑Sat Jun 30, 2018 1:16 am
Black Angel does not work from HD, but I've been unable to determine why. My guess is the JIT cache is getting out of sync with main memory.
This is being caused by a combination of Environment handler issues and the Wimp_Poll issue.
It's very likely we'll need to wait for modifications to the OS before some Wimp apps work correctly. I can modify BASIC so it works, by rewriting it's SYS handler to perform a OS_SynchroniseCodeAreas on the SWI instruction, but any game that uses self-modifying code is going to fail, if page access permissions aren't preserved across Wimp_Poll.
The next issue to investigate is why K.V., Manchester United / Europe and Quark all crash when switching to custom screen modes. I suspect it may also need to wait for OS modifications to resolve, as GraphicsV doesn't currently know how many video buffers to allocate.
I spotted another issue with the use of IOC timers, which can be seen in Rotor. I've reverted part of the change made to get Labrynth working to resolve.
I'm hoping to have a new build up soon, once I've resolved the SYS issue in BASIC.