Most of the codebase implements Encodable/Decodable now, with the
exception of the BIOS, CD image and gamepads. The BIOS checksum is
stored however, in order for the frontend to know which file to load.
Previously for Byte and HalfWord store we would only pass around a u8
and a u16 respectively. This is not accurate when accessing certain
device registers since some devices ignore the requested access width
and may use more than the expected number of bytes from the source
register.
Now we always pass the entire register value in a u32 instead, it's up
to the device implementation to select what it needs to use depending
on the Addressable width.
The timings are tweaked because it seems our emulator is too fast at
this point: the BIOS attempts to start a new request while the
previous one is still in progress. This will have to be fixed later as
we become more accurate.
Only the original digital controller is supported for now.
The frontend supports keyboard and controllers through SDL2 for input.