z80
z80 copied to clipboard
Z80 emulator written in Go
koron-go/z80
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
-
LZ8514(SHARPのZ80互換CPU)で実際に実行して得た結果