z80 icon indicating copy to clipboard operation
z80 copied to clipboard

Z80 emulator written in Go

koron-go/z80

PkgGoDev Actions/Go Go Report Card

Z80 emulation in Go.

koron-go/z80 is highly compatible with the actual Z80, and is extremely fast.

Getting started

Install or update:

$ go get github.com/koron-go/z80@latest

(WRITE MINIMAL SAMPLE CODES HERE)

Compatibility

Z80 instruction set exerciser (documented), passed all 67/67 (100%) tests.

You can try it with...

$ make zexdoc

Z80 instruction set exerciser (all), passed all 67/67 (100%) tests.

You can try it with...

$ make zexall
  • [x] adc16 - <adc,sbc> hl,<bc,de,hl,sp> (38,912 cycles)
  • [x] add16 - add hl,<bc,de,hl,sp> (19,456 cycles)
  • [x] add16x - add ix,<bc,de,ix,sp> (19,456 cycles)
  • [x] add16y - add iy,<bc,de,iy,sp> (19,456 cycles)
  • [x] alu8i - aluop a,nn (28,672 cycles)
  • [x] alu8r - aluop a,<b,c,d,e,h,l,(hl),a> (753,664 cycles)
  • [x] alu8rx - aluop a,<ixh,ixl,iyh,iyl> (376,832 cycles)
  • [x] alu8x - aluop a,(<ix,iy>+1) (229,376 cycles)
  • [x] bitx - bit n,(<ix,iy>+1) (2048 cycles)
  • [x] bitz80 - bit n,<b,c,d,e,h,l,(hl),a> (49,152 cycles)
  • [x] cpd1 - cpd<r> (1) (6144 cycles)
  • [x] cpi1 - cpi<r> (1) (6144 cycles)
  • [x] daaop - <daa,cpl,scf,ccf> (65,536 cycles)
  • [x] inca - <inc,dec> a (3072 cycles)
  • [x] incb - <inc,dec> b (3072 cycles)
  • [x] incbc - <inc,dec> bc (1536 cycles)
  • [x] incc - <inc,dec> c (3072 cycles)
  • [x] incd - <inc,dec> d (3072 cycles)
  • [x] incde - <inc,dec> de (1536 cycles)
  • [x] ince - <inc,dec> e (3072 cycles)
  • [x] inch - <inc,dec> h (3072 cycles)
  • [x] inchl - <inc,dec> hl (1536 cycles)
  • [x] incix - <inc,dec> ix (1536 cycles)
  • [x] inciy - <inc,dec> iy (1536 cycles)
  • [x] incl - <inc,dec> l (3072 cycles)
  • [x] incm - <inc,dec> (hl) (3072 cycles)
  • [x] incsp - <inc,dec> sp (1536 cycles)
  • [x] incx - <inc,dec> (<ix,iy>+1) (6144 cycles)
  • [x] incxh - <inc,dec> ixh (3072 cycles)
  • [x] incxl - <inc,dec> ixl (3072 cycles)
  • [x] incyh - <inc,dec> iyh (3072 cycles)
  • [x] incyl - <inc,dec> iyl (3072 cycles)
  • [x] ld161 - ld <bc,de>,(nnnn) (32 cycles)
  • [x] ld162 - ld hl,(nnnn) (16 cycles)
  • [x] ld163 - ld sp,(nnnn) (16 cycles)
  • [x] ld164 - ld <ix,iy>,(nnnn) (32 cycles)
  • [x] ld165 - ld (nnnn),<bc,de> (64 cycles)
  • [x] ld166 - ld (nnnn),hl (16 cycles)
  • [x] ld167 - ld (nnnn),sp (16 cycles)
  • [x] ld168 - ld (nnnn),<ix,iy> (64 cycles)
  • [x] ld16im - ld <bc,de,hl,sp>,nnnn (64 cycles)
  • [x] ld16ix - ld <ix,iy>,nnnn (32 cycles)
  • [x] ld8bd - ld a,<(bc),(de)> (44 cycles)
  • [x] ld8im - ld <b,c,d,e,h,l,(hl),a>,nn (64 cycles)
  • [x] ld8imx - ld (<ix,iy>+1),nn (32 cycles)
  • [x] ld8ix1 - ld <b,c,d,e>,(<ix,iy>+1) (512 cycles)
  • [x] ld8ix2 - ld <h,l>,(<ix,iy>+1) (256 cycles)
  • [x] ld8ix3 - ld a,(<ix,iy>+1) (128 cycles)
  • [x] ld8ixy - ld <ixh,ixl,iyh,iyl>,nn (32 cycles)
  • [x] ld8rr - ld <b,c,d,e,h,l,a>,<b,c,d,e,h,l,a> (3456 cycles)
  • [x] ld8rrx - ld <b,c,d,e,ixy,a>,<b,c,d,e,ixy,a> (6912 cycles)
  • [x] lda - ld a,(nnnn) / ld (nnnn),a (44 cycles)
  • [x] ldd1 - ldd<r> (1) (44 cycles)
  • [x] ldd2 - ldd<r> (2) (44 cycles)
  • [x] ldi1 - ldi<r> (1) (44 cycles)
  • [x] ldi2 - ldi<r> (2) (44 cycles)
  • [x] negop - neg (16,384 cycles)
  • [x] rldop - <rld,rrd> (7168 cycles)
  • [x] rot8080 - <rlca,rrca,rla,rra> (6144 cycles)
  • [x] rotxy - shift/rotate (<ix,iy>+1) (416 cycles)
  • [x] rotz80 - shift/rotate <b,c,d,e,h,l,(hl),a> (6784 cycles)
  • [x] srz80 - <set,res> n,<b,c,d,e,h,l,(hl),a> (7936 cycles)
  • [x] srzx - <set,res> n,(<ix,iy>+1) (1792 cycles)
  • [x] st8ix1 - ld (<ix,iy>+1),<b,c,d,e> (1024 cycles)
  • [x] st8ix2 - ld (<ix,iy>+1),<h,l> (256 cycles)
  • [x] st8ix3 - ld (<ix,iy>+1),a (64 cycles)
  • [x] stabd - ld (<bc,de>),a (96 cycles)

References

Japanese documents