Well, once again, "Larger changes on the horizon"!
The oncoming changeset will probably not be that radical like those of version 00.006.000 and 00.007.000, but nevertheless will go very deep again in the system's structure. Alongside some simplifications to "give space" for more useful features, the most important changes are to make the system more parallel, and to remove the need for excessive banking on the CPU side. A coarse outline of the plans follows below:
- - Direct access to the Video RAM will pass away, giving way to a FIFO based filler.
- - Most DMA memory transfers will pass away to keep the new different architecture simple.
- - Access to banking features from the user side will pass away, the data address space will have a fixed layout, giving access to 64KWords of memory (minus address space required for memory mapped peripherals).
- + New parallel operating component: External RAM (2 MWords) & Audio. This replaces the previous banked CPU RAM, providing a streaming interface with 4 pointers, with a capability of sub-word accessing and post-incrementing, covering the full range.
- + Operating the Mixer DMA does not block the CPU, only the External RAM.
- + The Mixer DMA might get a simple filter extension (low pass and high pass variants), however along changing the way it handles frequency, the possibility of FM may vanish.
- + Minor graphics FIFO extensions to handle double buffering automatically.
- + The CPU will get more useful NEG and NOT instructions in the place of ASL (low bit extending left shift, the would-be complementing instruction of ASR: mostly useless).
- Some changes in the input system will also creep in, most particularly simplifying the touch device handling, removing touch areas. The capability for using a button set on a multi-touch device will be provided by different interface, in a more flexible and emulator host friendly manner.
The core of the changeset is the removal of banking from the CPU's address space (at the user's point of view; the kernel, to hide itself, and to load and set up the application still would use banking, but this is not even necessarily relevant for emulation). The realization behind is that most memory accesses are streaming, so a large external RAM providing such access capability is sufficient, and a lot simpler to handle than a paging system if handling of large data is required. Alongside this change many simplifications may be performed on the system.
I am still toying with the thought of merging the graphics and the audio systems together over the external RAM (I already considered changing the audio system to operate on 32 bits data for slightly increasing the mixer's performance). This would give a simpler system on the terms of hardware and probably emulation, however it would also be slower (audio and graphics tasks would need to share, the mixer, excluding the boost possible for changing to 32 bits would have to run at half rate than now since half of the accesses are needed by the Graphics Display Generator). There are benefits as well, such as shared hardware, most particularly the RAM itself which this way may be utilized more economically.
So again I will need to rewrite the examples, and of course anyone messing with the system will need to adapt (nobody seems particularly interested, so I take it as nobody does so, and I am free to turn stuff upside down at my will).