Crate rz80 [] [src]

rz80 is a Z80 chip family emulation library written in Rust which can be used as basis for writing a full Z80-based computer emulator.

Overview

The rz80 library provides chip emulators for the Z80 CPU, PIO (parallel in/out), CTC (counter/timer channels) and a Bus trait which defines how the chips are wired together in a specific emulated system.

Writing a home computer emulator usually involves the following steps

  • import the required chips
  • import ROM dumps using the include_bytes! macro
  • define a State struct which holds emulator state required in addition to the chip state
  • define a System struct which embeds all chips and the State struct wrapped in RefCells
  • write a System::poweron() function which initializes the embedded chips and state objects, initializes the memory map and sets the CPU PC register to the ROM dump start address
  • write a video-decoder function which generates a linear RGBA8 framebuffer each frame
  • implement the Bus trait on the System struct, this usually involves:
    • the keyboard emulation
    • memory bank switching
    • forward interrupt requests between the various hardware components
    • sound generation
  • implement the main loop which creates a window, forwards keyboard input, and steps the chips emulators forward

Very simple 8-bit home computer systems (similar to the ZX81) don't require any additional code, more complex home computers will require additional custom chips emulations that are not part of the rz80 library.

Check out the two included example emulators:

> cargo run --release --example z1013
> cargo run --release --example kc87

Structs

CPU

Z80 CPU emulation

CTC

Z80 CTC emulation

Daisychain

interrupt controller daisychain

Memory

memory access

PIO

Z80 PIO emulation

Registers

CPU register access

Constants

CF

CPU carry flag

CTC_0

CTC channel 0

CTC_1

CTC channel 1

CTC_2

CTC channel 2

CTC_3

CTC channel 3

HF

CPU half carry flag

NF

CPU add/subtract flag

PF

CPU parity flag (same as overflow)

PIO_A

PIO channel A

PIO_B

PIO channel B

SF

CPU sign flag

VF

CPU overflow flag (same as parity)

XF

CPU undocumented 'X' flag

YF

CPU undocumented 'Y' flag

ZF

CPU zero flag

Traits

Bus

system bus trait

Type Definitions

RegT

generic integer type for 8- and 16-bit values