Skip to content

koron-go/z80

Repository files navigation

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

References

Japanese documents