Your comment got downvoted but I think there's deep truth in it. I've been decompiling GBA games from my childhood and it's remarkable how engineless they seem to be.
Its not a computer, its a small device. You dont have many unknown peripheral you dont have other programs. The memory and peripherals are there, just use them. Heap is complicated ? Preallocate everything. A peripheral is not used ? Just leave it there. Security ? Of what ? Thats the appeal of those devices.
> It is a Gameboy Advance from a parallel universe where RISC-V existed in 2001. A love letter to the handheld consoles from my childhood, and a 3AM drunk text to the technology that powered them.
He works at Raspberry Pi, and designed the Hazard3 RISC-V core that is at the heart of the RP2350--although he did Hazard3 in his spare time. It's actually a fork of the "Hazard5" core that he designed for the RISCBoy.
I'm surprised to see that it's OK that he has opensource AHB/APB stuff in it--I'd avoided learning them too much about them assuming that they were ARM proprietary.
Is the greatest challenge in adopting this new hardware architecture the technology itself, or the lack of an existing developer ecosystem and software toolchains?
The GBA was designed around having no cache. With a few exceptions (such as Internal RAM, Video RAM, IO registers, BIOS, OAM, Palettes), everything goes out to an external bus. Going out to an external bus with no cache will basically slow you down to 80s computer speeds. Fetching instructions from the cartridge ends up being around twice as fast as a GBC.
The way around that is using a cache, and sequentially fetching multiple words. Sequential fetches can be made faster, increasing throughput, and that can hide the latency if enough instructions/data gets cached.
I wonder how this system is designed, is it going to the memory bus for all fetches, or does it use a cache?
The author of this is one of the greatest minds of our time. While doing this is cool, he also designed the Hazard3 core in the RP2350 as well as the QSPI unit in it -- the only memory-mapped QSPI unit I've encountered so far that I've not been able to crash or hang.
32 comments
[ 2.5 ms ] story [ 44.7 ms ] threadMore practical would be to port https://github.com/gbdk-2020/gbdk-2020 so that https://github.com/chrismaltby/gb-studio could support it.
> It is a Gameboy Advance from a parallel universe where RISC-V existed in 2001. A love letter to the handheld consoles from my childhood, and a 3AM drunk text to the technology that powered them.
https://github.com/Wren6991/PicoDVI
Lack of software tools can be overcome. But lack of eg. a game library is a bigger problem. Unless it's really easy to port titles somehow.
The way around that is using a cache, and sequentially fetching multiple words. Sequential fetches can be made faster, increasing throughput, and that can hide the latency if enough instructions/data gets cached.
I wonder how this system is designed, is it going to the memory bus for all fetches, or does it use a cache?