#emulator #intel-8080

bin+lib intel-8080-emu

A small library to emulate an intel 8080

1 unstable release

0.1.0 Sep 8, 2018

#68 in Emulators

Download history 8/week @ 2018-09-08 7/week @ 2018-09-15 1/week @ 2018-09-22 3/week @ 2018-09-29 1/week @ 2018-10-13 5/week @ 2018-10-20 9/week @ 2018-10-27

1 downloads per month

MPL-2.0 license

89KB
2.5K SLoC

Intel 8080 emu

Crates.io

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. 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.
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.

No runtime deps