Investigations
- 2067BC's codelet count slowly increases (may be fixed improvement 1)
- Battle Chess is reencoding ~40k instructions/sec under RO5 (may be fixed by improvement 1 and/or 2 or SWI flag preservation)
- Fish! is reencoding ~40k instructions/sec when playing the title music (may be fixed by improvement 1) (resolved, bug in JIT reporting, they're LDR's that haven't been checked for page zero reads and are skipped)
- Fish! is touching ~40k instructions/sec when in game due to an SWI instruction being self-modified (resolved, by improvement 2)
- Figure out why you sometimes get "Broken Directory" when mounting floppies (possibly resolved, haven't seen the problem for quite some time)
- Track sounds in Conqueror don't play in Demo mode on the Pi, until a few demo cycles have passed (resolved, caused by a change in RISCOS post 2.0 to the way the sound is initialised)
- Conqueror has stopped working outside of the JIT (reporting a disc error at 10000 on RO3) (resolved, a bug in DiscOp)
- Reuse existing codelets if one already exists for the instruction. Codelets will need to contain the original instruction and a use counter which triggers codelet recyling once it hits zero (coded)
- Don't erase self-modified instructions if the same instruction is written back (coded for STR)
- Move SharedCLibrary codelet to a static codelet that's created as the JIT starts, one per VMM for both APCS_A and APCS_R
- Recode i_SWI_Vector_Claim / hv_OS_Claim / hv_OS_AddCallBack / hv_Release to use a static table of entry points, one per VMM, instead of codelets (coded)
- Correct screen aspect ratio in modes that have double height pixels (eg 0, 4, 8, 12, 14, 15) (coded)
- Reduce the size of the codelet area once improvement 1 is in place
- A few Phase 1 JIT instructions left to code
- Outstanding SWI's and C functions from Phase 3
- WIMP support
- Maintain a list of task ID's that we're Hypervising (partially coded in that all the checks are in place, the check function currently only handled one task ID though)
- Modify GOARM3JIT to support multiple Hypervised tasks
- Alternative Sample rate conversion method, using a sinc function
- Remove dependence on !SparkFS by implementing a ZIPFS module for ZLib
- hv_ADFFS_BASICCall needs modifying to only take over if a task we're Hypervising is active
- Add SharedCLibrary_LibInitAPCS_A support for Magnetic Scrolls titles (see here)
- Get CTRL-SHIFT-F12 working on the Pi
- Clean the VMM when the JIT shuts down
- SWI flag preservation on 3rd party/user Modules
- IOC Timer emulation (coded)
- Mid-frame palette changes (need Lemmings or Fire & Ice working for this) (coded)
- Check and enable the following when a floppy is mounted
- Protect CMOS (coded)
- Protect Modules (coded)
- Check and set ForceVSync when a floppy is booted (coded, done when booted)
- Do the following when a booted game exits (need to check this doesn't affect WIMP games)
- Disable memory remapping (coded, done when the desktop changes MODE)
- Reset ForceVSync (coded, done when floppy is ejected)
- Force legacy Abort mode on the Pi (coded)
- Hardware scrolling needs checking on IOMD and the Pi (done)
- Remove Sound_Configure codelet and merge into Channel Handler (done)
- Add Scheduler to Channel Handler (done)
- OS_AddCallBack and OS_CallAfter need to remove themselves from the managed entry list once they've been triggered (coded - they remain and are reused if the SWI is reissued with the same Entry / R12 values)
- Add SWI flag preservation (see here) (coded)
- Pause the blitter when the Desktop is active and re-map video memory when a task we're Hypervising is task switched back into memory (coded)
- All SWI's need modifying so they only take over if a task we're Hypervising is active (coded)
- DA2 frame blit code needs modifying to support HDSR at 2 pixel intervals (coded, 8bit okay, 4bit may be an issue - see Caverns)
- 26bit Module support (Coded)
- Fix the following MODE's (coded)
- 2 - 320x256x4 instead of 160x256x4
4 - 640x256x1 instead of 320x256x1
5 - 320x256x2 instead of 160x256x2
10 - 320x256x8 instead of 160x256x8
11 - 640x480x2 instead of 640x250x2
14 - 640x480x4 instead of 640x250x4
16 - 640x480x4 instead of 1056x256x4
17 - 640x480x4 instead of 1056x250x4
18 - 640x480x1 instead of 640x512x1
19 - 640x480x2 instead of 640x512x2
20 - 640x480x4 instead of 640x512x4
21 - 640x480x8 instead of 640x512x8
22 - 640x480x4 instead of 768×288x4
23 - 640x480x1 instead of 1152×896x1
24 - 640x480x8 instead of 1056x256x8
33 - 640x480x1 instead of 768×288x1
34 - 640x480x2 instead of 768×288x2
35 - 640x480x4 instead of 768×288x4
36 - 640x480x8 instead of 768×288x8
- 2 - 320x256x4 instead of 160x256x4