Intel 8080 emu
--------
[![Crates.io](https://img.shields.io/crates/v/intel-8080-emu.svg?style=flat-square)](https://crates.io/crates/intel-8080-emu)
An intel 8080 emulator library (another one). Initially implemeted to build a space invaders
emulator (another another one).
This library provides provides utilities to parse 8080 binary and simulate an
[8080 microprocessor](https://en.wikipedia.org/wiki/Intel_8080). All op codes are implemented and
there is no external dependencies.
Quickstart
----------
The main struct is `intel_8080_emu::proc_state::Proc8080`. It needs basically two things to work :
- The memory, a simple `Box<[u8]>` containing the rom and the ram.
- A structure implementing `intel_8080_emu::proc_state::DataBus` which handles the `IN` and `OUT`
calls.
```rust
use intel_8080_emu::proc_state::Proc8080;
use foo::bar::MyCustomDataBus;
use std;
// load your rom as an array
let rom: [u8] = load_rom();
// copy the rom into the 8008 memory
let mut memory = Box::new([0x00; 0xffff]);
memory[0..rom.len()].copy_from_slice(&rom);
let i8080 = Proc8080::new(memory, data_bus);
// we're ready !
// Here is naive way to slow down the simulation so that it matches the original speed of the 8080
let mut states = i8080.states();
loop {
// emulates runs one "step" of the simulation by running the next opcode, mutating the
// processor state accordingly and increasing the states count
i8080.emulate();
// you can manage time with Proc8080:states()
// A cycle for the 8080 took approximately 500 nanoseconds
std::thread::sleep(std::time::Duration::from_nanos(500) * (i8080.states() - states)
}
```
Possible improvements
----
- Maybe better memory handling. It is currently a simple `Box<[u8]>` and does not distinguish
between ROM and RAM.