1 unstable release
0.1.0 | Jul 25, 2023 |
---|
#185 in Emulators
65KB
2K
SLoC
Using Rust to implement a full Intel 8080 CPU emulator.
To verify if the emulator works well, run cpudiag program under path diagnosis_program/. I also modified the assembly to avoid the need of writing to ROM.
This library is intended to be reused on different platforms: macOS, iOS, Android and (if possible) Web.
The FFI design is meant to be easy to understand and use.
The most important part of this library is to give you an instance of the CPU representative, within which all the functions(CPU, RAM, IO) are provided.
If we take a look at the interfaces in emulator.h header file, we can see:
Cpu8080
opaque struct, we obtain a pointer to it on app platforms and pass it back to this lib for interpretation. e.g. seerun
methodIoCallbacks
struct, as the name implies, this is for IO interaction, e.g. we need to read from/write to peripheral devices, every time an IO request made from CPU, we need a way to get back to our devices.- Interrupt, we simulate a way to receive interrupts from the outside world, the interrupts always happen asynchronously, a mpsc channel can be used for this purpose, and CPU is the receiver, the sender should be owned by the platforms.
- Pause/resume the execution, similar to handle interrupts, a mpsc should be used, but with some extra cares:
- for receiving pause request, we check the request in a non-blocking manner (active state)
- for receiving resume request, we check the request in a blocking manner (idle state)
How to use
To use this library for app development, just build and copy the static library libemulator.a and include the emulator.h header file in your project.