Two9a posted this

Some vaguely substantial additions to the DSemu-ng codebase have occurred since I last posted. Firstly, I've hacked some semblance of more complete DMA support into the GBA's memory management: video-triggered DMA events and channel 0 are both now supported. Of course, the presence of these is entirely untested, so I've no idea if they work, but the code is there at least; if it's not working correctly, that's a much better thing than the functionality being totally missing.

Things have also moved forward on the DS front. I've got a very rough model for simultaneous execution of the two CPUs now: Run two ARM9 instructions, then run one ARM7 instruction. It's grossly incorrect at the fine-grain level of clock cycles, but the big issues of synchronisation should be able to cope with it. What this means is that you can now watch the two CPUs executing from their respective debuggers, which is indeed a very good thing.

On the subject of synchronisation, the two DS MMUs have been hacked up to support portions of the new memory map, and to share regions of memory between each other. Furthermore, I've added the ability to parse an NDS file's header, and load the main- and sub-specifi binaries into their respective spaces. Of course, the issue of priority when a location is simultaneously accessed by both CPUs is as yet unsolved, as the memory control registers are fully missing. Also, the NDS header parsing means the emulator will only ever accept .nds files; .ds.gba and such things will be impossible to load.

As a footnote, I've finally added a README to the source distribution, so you can see what you're getting. I believe it's already partly out of date, but I'll try to keep it updated when I can. You can take a look at the latest source, including that README, at the link below.