{"id":23120811,"url":"https://github.com/koron-go/z80","last_synced_at":"2025-08-17T00:32:22.977Z","repository":{"id":48520243,"uuid":"231113267","full_name":"koron-go/z80","owner":"koron-go","description":"Z80 emulator written in Go","archived":false,"fork":false,"pushed_at":"2024-06-24T03:00:22.000Z","size":444,"stargazers_count":37,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T21:43:49.534Z","etag":null,"topics":["z80","z80-emulator"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/koron-go.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-31T15:52:45.000Z","updated_at":"2024-10-17T14:19:56.000Z","dependencies_parsed_at":"2024-06-19T02:56:57.025Z","dependency_job_id":null,"html_url":"https://github.com/koron-go/z80","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/koron-go/z80","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron-go%2Fz80","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron-go%2Fz80/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron-go%2Fz80/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron-go%2Fz80/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koron-go","download_url":"https://codeload.github.com/koron-go/z80/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koron-go%2Fz80/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270791255,"owners_count":24645781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["z80","z80-emulator"],"created_at":"2024-12-17T06:14:05.139Z","updated_at":"2025-08-17T00:32:22.595Z","avatar_url":"https://github.com/koron-go.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# koron-go/z80\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/koron-go/z80)](https://pkg.go.dev/github.com/koron-go/z80)\n[![Actions/Go](https://github.com/koron-go/z80/workflows/Go/badge.svg)](https://github.com/koron-go/z80/actions?query=workflow%3AGo)\n[![Go Report Card](https://goreportcard.com/badge/github.com/koron-go/z80)](https://goreportcard.com/report/github.com/koron-go/z80)\n\nZ80 emulation in Go.\n\nkoron-go/z80 is [highly compatible](#compatibility) with the actual Z80, and is extremely fast.\n\n## Getting started\n\nInstall or update:\n\n```console\n$ go get github.com/koron-go/z80@latest\n```\n\n(WRITE MINIMAL SAMPLE CODES HERE)\n\n## Compatibility\n\nZ80 instruction set exerciser (documented), passed all 67/67 (100%) tests.\n\nYou can try it with...\n```console\n$ make zexdoc\n```\n\nZ80 instruction set exerciser (all), passed all 67/67 (100%) tests.\n\nYou can try it with...\n```console\n$ make zexall\n```\n\n\u003cdetails\u003e\n\n* [x] adc16   - `\u003cadc,sbc\u003e hl,\u003cbc,de,hl,sp\u003e (38,912 cycles)`\n* [x] add16   - `add hl,\u003cbc,de,hl,sp\u003e (19,456 cycles)`\n* [x] add16x  - `add ix,\u003cbc,de,ix,sp\u003e (19,456 cycles)`\n* [x] add16y  - `add iy,\u003cbc,de,iy,sp\u003e (19,456 cycles)`\n* [x] alu8i   - `aluop a,nn (28,672 cycles)`\n* [x] alu8r   - `aluop a,\u003cb,c,d,e,h,l,(hl),a\u003e (753,664 cycles)`\n* [x] alu8rx  - `aluop a,\u003cixh,ixl,iyh,iyl\u003e (376,832 cycles)`\n* [x] alu8x   - `aluop a,(\u003cix,iy\u003e+1) (229,376 cycles)`\n* [x] bitx    - `bit n,(\u003cix,iy\u003e+1) (2048 cycles)`\n* [x] bitz80  - `bit n,\u003cb,c,d,e,h,l,(hl),a\u003e (49,152 cycles)`\n* [x] cpd1    - `cpd\u003cr\u003e (1) (6144 cycles)`\n* [x] cpi1    - `cpi\u003cr\u003e (1) (6144 cycles)`\n* [x] daaop   - `\u003cdaa,cpl,scf,ccf\u003e (65,536 cycles)`\n* [x] inca    - `\u003cinc,dec\u003e a (3072 cycles)`\n* [x] incb    - `\u003cinc,dec\u003e b (3072 cycles)`\n* [x] incbc   - `\u003cinc,dec\u003e bc (1536 cycles)`\n* [x] incc    - `\u003cinc,dec\u003e c (3072 cycles)`\n* [x] incd    - `\u003cinc,dec\u003e d (3072 cycles)`\n* [x] incde   - `\u003cinc,dec\u003e de (1536 cycles)`\n* [x] ince    - `\u003cinc,dec\u003e e (3072 cycles)`\n* [x] inch    - `\u003cinc,dec\u003e h (3072 cycles)`\n* [x] inchl   - `\u003cinc,dec\u003e hl (1536 cycles)`\n* [x] incix   - `\u003cinc,dec\u003e ix (1536 cycles)`\n* [x] inciy   - `\u003cinc,dec\u003e iy (1536 cycles)`\n* [x] incl    - `\u003cinc,dec\u003e l (3072 cycles)`\n* [x] incm    - `\u003cinc,dec\u003e (hl) (3072 cycles)`\n* [x] incsp   - `\u003cinc,dec\u003e sp (1536 cycles)`\n* [x] incx    - `\u003cinc,dec\u003e (\u003cix,iy\u003e+1) (6144 cycles)`\n* [x] incxh   - `\u003cinc,dec\u003e ixh (3072 cycles)`\n* [x] incxl   - `\u003cinc,dec\u003e ixl (3072 cycles)`\n* [x] incyh   - `\u003cinc,dec\u003e iyh (3072 cycles)`\n* [x] incyl   - `\u003cinc,dec\u003e iyl (3072 cycles)`\n* [x] ld161   - `ld \u003cbc,de\u003e,(nnnn) (32 cycles)`\n* [x] ld162   - `ld hl,(nnnn) (16 cycles)`\n* [x] ld163   - `ld sp,(nnnn) (16 cycles)`\n* [x] ld164   - `ld \u003cix,iy\u003e,(nnnn) (32 cycles)`\n* [x] ld165   - `ld (nnnn),\u003cbc,de\u003e (64 cycles)`\n* [x] ld166   - `ld (nnnn),hl (16 cycles)`\n* [x] ld167   - `ld (nnnn),sp (16 cycles)`\n* [x] ld168   - `ld (nnnn),\u003cix,iy\u003e (64 cycles)`\n* [x] ld16im  - `ld \u003cbc,de,hl,sp\u003e,nnnn (64 cycles)`\n* [x] ld16ix  - `ld \u003cix,iy\u003e,nnnn (32 cycles)`\n* [x] ld8bd   - `ld a,\u003c(bc),(de)\u003e (44 cycles)`\n* [x] ld8im   - `ld \u003cb,c,d,e,h,l,(hl),a\u003e,nn (64 cycles)`\n* [x] ld8imx  - `ld (\u003cix,iy\u003e+1),nn (32 cycles)`\n* [x] ld8ix1  - `ld \u003cb,c,d,e\u003e,(\u003cix,iy\u003e+1) (512 cycles)`\n* [x] ld8ix2  - `ld \u003ch,l\u003e,(\u003cix,iy\u003e+1) (256 cycles)`\n* [x] ld8ix3  - `ld a,(\u003cix,iy\u003e+1) (128 cycles)`\n* [x] ld8ixy  - `ld \u003cixh,ixl,iyh,iyl\u003e,nn (32 cycles)`\n* [x] ld8rr   - `ld \u003cb,c,d,e,h,l,a\u003e,\u003cb,c,d,e,h,l,a\u003e (3456 cycles)`\n* [x] ld8rrx  - `ld \u003cb,c,d,e,ixy,a\u003e,\u003cb,c,d,e,ixy,a\u003e (6912 cycles)`\n* [x] lda     - `ld a,(nnnn) / ld (nnnn),a (44 cycles)`\n* [x] ldd1    - `ldd\u003cr\u003e (1) (44 cycles)`\n* [x] ldd2    - `ldd\u003cr\u003e (2) (44 cycles)`\n* [x] ldi1    - `ldi\u003cr\u003e (1) (44 cycles)`\n* [x] ldi2    - `ldi\u003cr\u003e (2) (44 cycles)`\n* [x] negop   - `neg (16,384 cycles)`\n* [x] rldop   - `\u003crld,rrd\u003e (7168 cycles)`\n* [x] rot8080 - `\u003crlca,rrca,rla,rra\u003e (6144 cycles)`\n* [x] rotxy   - `shift/rotate (\u003cix,iy\u003e+1) (416 cycles)`\n* [x] rotz80  - `shift/rotate \u003cb,c,d,e,h,l,(hl),a\u003e (6784 cycles)`\n* [x] srz80   - `\u003cset,res\u003e n,\u003cb,c,d,e,h,l,(hl),a\u003e (7936 cycles)`\n* [x] srzx    - `\u003cset,res\u003e n,(\u003cix,iy\u003e+1) (1792 cycles)`\n* [x] st8ix1  - `ld (\u003cix,iy\u003e+1),\u003cb,c,d,e\u003e (1024 cycles)`\n* [x] st8ix2  - `ld (\u003cix,iy\u003e+1),\u003ch,l\u003e (256 cycles)`\n* [x] st8ix3  - `ld (\u003cix,iy\u003e+1),a (64 cycles)`\n* [x] stabd   - `ld (\u003cbc,de\u003e),a (96 cycles)`\n\n\u003c/details\u003e\n\n## References\n\n* [zmac - Z-80 Macro Cross Assembler](http://48k.ca/zmac.html)\n\n* [Z80 Instruction Exerciser](http://mdfs.net/Software/Z80/Exerciser/)\n\n    * [zmac port](https://github.com/obiwanjacobi/Zim80/tree/master/Source/Code/Jacobi.Zim80.IntegrationTests/CpuZ80/Zexlax)\n    * [another zmac port](https://github.com/DavidDiPaola/esp32_crimbus-lights-z80/blob/master/src/z80/roms/zexdoc.src)\n\n* [HOME OF THE Z80 CPU](http://www.z80.info/)\n\n    * [Z80 instruction set (tables)](http://clrhome.org/table/)\n\n* [WebMSX](https://webmsx.org/)\n\n    * [Z80 implementation](https://github.com/ppeccin/WebMSX/blob/master/src/main/msx/cpu/CPU.js)\n    * [Media Loading](https://github.com/ppeccin/WebMSX/blob/master/README.md#media-loading)\n\n* [fMSX](https://fms.komkon.org/fMSX/)\n\n* [Yet Another Z80 Emulator by AG](http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/)\n\n* [Visual Z80 Remix](https://floooh.github.io/visualz80remix/)\n\n### Japanese documents\n\n* [Zilog Z80 DAA実行結果](http://ver0.sakura.ne.jp/doc/daa.html)\n\n    LZ8514(SHARPのZ80互換CPU)で実際に実行して得た結果\n\n* [Z80 DAA 内部キャリーフラグは実在するのか?](https://uniabis.net/pico/msx/z80daa/)\n\n* [8ビット CPU Z80命令セット](http://www.yamamo10.jp/yamamoto/comp/Z80/instructions/index.php)\n\n* [ＭＳＸテープイメージ解説書](http://park16.wakwak.com/~msx/imagesei/tape.html)\n\n* [MSX Datapack wiki](http://ngs.no.coocan.jp/doc/wiki.cgi/datapack?page=FrontPage)\n\n* [テクハンwiki](http://ngs.no.coocan.jp/doc/wiki.cgi/TechHan)\n\n* [MSX JAPAN/ファイル形式](https://msxjpn.jimdofree.com/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%BD%A2%E5%BC%8F/)\n\n* [8ビット CPU Z80タイミング](http://www.yamamo10.jp/yamamoto/comp/Z80/Z80_Timming/index.php)\n\n* [Z80のRレジスタについて](https://electrelic.com/electrelic/node/1506)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoron-go%2Fz80","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoron-go%2Fz80","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoron-go%2Fz80/lists"}