mnurzia / rv

32-bit RISC-V CPU in ~800 lines of C89
MIT License
607 stars 27 forks source link

host endianness independence #3

Open alexriegler12 opened 9 months ago

alexriegler12 commented 9 months ago

it seems that this emulator is only suitable for little endian systems. Can you make the emulator endian-independent?

mnurzia commented 9 months ago

Implemented it this morning. Going to get a qemu big endian machine spun up soon in order to fully test this, but everything seems to work so far -- give it a try?

alexriegler12 commented 8 months ago

Please only use the endian conversion if it is compiled for a big endian machine (for speed). Maybe add a preprocessor define to activate or deactivate the endian conversion

mnurzia commented 8 months ago

I don't know of any portable way to detect endianness at compile time-- I will consider using the nonstandard __BYTE_ORDER__ macro for this but will probably keep the existing code as a fallback. My first priority is correctness and my second is speed.

alexriegler12 commented 6 months ago

I have looked into the source code of another cpu emulator library (Musashi m68000). They leave it to the user to implement endian swapping in the callbacks. Maybe the endcvt function is not needed.

alexriegler12 commented 6 months ago

The callbacks of "Musashi" don't use a pointer to a 4 byte array, but a 32 bit unsigned integer for every type of bus access.