{"id":16984189,"url":"https://github.com/floooh/yakc","last_synced_at":"2025-06-13T04:37:15.804Z","repository":{"id":142550178,"uuid":"44621053","full_name":"floooh/yakc","owner":"floooh","description":"Yet another KC emulator","archived":false,"fork":false,"pushed_at":"2019-01-21T18:38:09.000Z","size":36488,"stargazers_count":109,"open_issues_count":4,"forks_count":9,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-02T05:46:18.261Z","etag":null,"topics":["emulator","fips","imgui","oryol"],"latest_commit_sha":null,"homepage":null,"language":"Assembly","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/floooh.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":"2015-10-20T16:54:16.000Z","updated_at":"2025-02-04T17:39:56.000Z","dependencies_parsed_at":"2023-07-19T12:31:13.888Z","dependency_job_id":null,"html_url":"https://github.com/floooh/yakc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/floooh/yakc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floooh%2Fyakc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floooh%2Fyakc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floooh%2Fyakc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floooh%2Fyakc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/floooh","download_url":"https://codeload.github.com/floooh/yakc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/floooh%2Fyakc/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259582671,"owners_count":22880063,"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","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":["emulator","fips","imgui","oryol"],"created_at":"2024-10-14T02:30:26.315Z","updated_at":"2025-06-13T04:37:15.786Z","avatar_url":"https://github.com/floooh.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YAKC (Yet Another KC Emulator)\n\nNOTE: this project is abandoned. This is the followup project: https://floooh.github.io/tiny8bit/\n\n[![Build Status](https://travis-ci.org/floooh/yakc.svg)](https://travis-ci.org/floooh/yakc)\n\nDespite the name this is a multi-system emulator for 8-bit home computers.\n\nIt started as a KC85 emulator because this was the system I spent most of\nmy youth on: https://en.wikipedia.org/wiki/KC_85\n\n## Live Demo\n\nhttp://floooh.github.io/virtualkc/\n\nThis is a WebAssembly version. If this doesn't work, switch to the\nasm.js version through the top-left hamburger icon.\n\n## How to Build:\n\n```bash\n\u003e python --version\nPython 2.7.10\n\u003e cmake --version\ncmake version 3.3.2\n\u003e git clone https://github.com/floooh/yakc\n\u003e cd yakc\n\u003e ./fips build\n\u003e ./fips run yakcapp\n```\n\nIn debug mode, the emulator tries to load additional ROMs and games\nfrom a local HTTP server at port 8000. Just do this:\n\n```bash\n\u003e cd yakc/files\n\u003e python -m SimpleHTTPServer\n...\n```\n\nAnd run the emulator from another terminal window. When building in\nrelease mode, the emulator will load the data directly from the\nwebpage at http://floooh.github.io/virtualkc/\n\n# Overview\n\nYAKC currently emulates the following 8-bit systems:\n\n- KC85/2, KC85/3, KC85/4, KC Compact (VEB Mikroelektronik Muehlhausen)\n- Z9001 (aka KC85/1) and KC87 (Robotron Dresden)\n- Z1013 (Robotron Riesa)\n- Sinclair ZX Spectrum 48k and 128k\n- Amstrad CPC464 and CPC6128\n- Acorn Atom\n\nSource code of the system emulators is here: https://github.com/floooh/yakc/tree/master/src/yakc/systems\n\nThe system emulators are built on top of dependency-free,\nheader-only chip emulators written in C (https://github.com/floooh/chips).\n\nRendering and input is done through Oryol: https://github.com/floooh/oryol\n\nAudio is done through SoLoud: https://github.com/jarikomppa/soloud\n\nThe extensive debugging UI is implemented with Dear Imgui: https://github.com/ocornut/imgui\n\nKudos to MAME for providing a reference when there was insufficient \ndocumentation available for emulated chips and computer systems: https://github.com/mamedev/mame\n\nThe following platforms are fully supported:\n\n- asm.js / wasm\n- OSX\n- Windows\n- Linux\n\nThe emulator should also build and run on Android, iOS and Raspberry Pi but\nthis is less tested and there will be input- or performance-problems on those\nplatforms.\n\n# Implementation Details\n\nA few implementation details are worth mentioning:\n\n- on M6502 machines (currently only the Acorn Atom), the system\nis ticked per clock cycle and fully implements the M6502 memory\naccess quirks (each cycle is a memory access, including 'junk accesses')\n- on Z80 machines, the system is ticked with machine-cycle granularity\n(typical 3..5 clock cycles, or more if wait states are injected)\n- all known undocumented Z80 behaviour is implemented, the M6502 implements\nthe 'stable' undocumented instructions, but not most of the 'unstable'\ninstructions\n- communication between chips happens (mostly) with pin bit masks instead of\nspecialized callbacks, this means the system emulation source code mimics how\nthe different chips are connected on the motherboard instead of relying on\n'high level recipes' which describe the functions of specific I/O addresses\n\n# Emulated System Details\n\nAll the East German computer models had 'unlicensed' Z80-chip-family clones\ncalled U880 (Z80 CPU), U855 (Z80 PIO) and U857 (Z80 CTC). The East German\nclones had some hardware bugfixes compared to the original Z80 and thus some\nundocumented instructions behaved slightly different. YAKC emulates the\noriginal Z80, not the 'fixed' U880 clones (doesn't make a difference with all\nsoftware I tested).\n\n## KC85/2, KC85/3 and KC85/4\n\nThese were East German home computers with fairly impressive hardware- and\nsoftware-capabilities, at least given the 'real-world-socialist' economic\nrestrictions of 80's Eastern Germany. Unlike many other Eastern computers,\nthe KC85 line wasn't a direct clone of Western machines, but implemented some\nunique ideas both in hardware and software. In terms of hardware\ncapabilities, the ZX Spectrum was the closest Western system, the KC85 had a\nslower CPU, but higher-resolution graphics.\n\n- manufactured by VEB Mikroelektronikkombinat Muehlhausen from 1985 (KC85/2)\nto 1989 (KC85/4)\n- Z80 CPU @ 1.75 MHz, Z80 PIO and Z80 CTC\n- 320x256 display resolution with 16 foreground and 8 background colors\n- 8x4 pixels or 8x1 pixels color attribute resolution (same idea as the\nZX Spectrum but with smaller color attribute blocks)\n- 16 KByte (KC85/2 and /3) to ~128 KB RAM (KC85/4)\n- 8 KByte to 20 KByte ROM (operating system and BASIC)\n- no hardware sprites, programmable video signal generator or \ndedicated sound chip\n\nA few KC85 games:\n\nDigger:\n![Digger](misc/digger.png)\n\nA Pengo 'clone':\n![Pengo Intro Screen](misc/pengo_menu.png)\n\nCave:\n![Cave](misc/cave.png)\n\nHouse:\n![House Ingame](misc/house_ingame.png)\n\nJungle:\n![Jungle](misc/kc85_jungle.png)\n\nKC85/3 start screen with operating system HC-CAOS 3.1:\n\n![KC85/3](misc/kc85_3.png)\n\n## Z9001 and KC87\n\nThis was another of the 'big three' East German 8-bit computer models,\nbuilt by Robotron Dresden. The Z9001 was later renamed to KC85/1 even\nthough it had no similarities with the KC85/2-based computers from\nMuehlhausen. The KC87 is identical to the Z9001 apart from a builtin\nBASIC. A color graphics module was optional (YAKC implements monochrome\ngraphics for the Z9001 and color graphics for the KC87).\n\n- manufactured by Robotron Dresden from 1984 (Z9001) and 1987 (KC87)\n- Z80 CPU @ 2.5 MHz, 2(!) Z80 PIOs and a Z80 CTC\n- 16 KByte RAM\n- 4 KByte ROM, and additionally a 10 KByte ROM BASIC in the KC87\n- 40x24 or 40x20 black-and-white or 8-color character graphics\n\nKC87 running BASIC:\n\n![KC87](misc/kc87.png)\n\n## Z1013\n\nThe Z1013 is the last and most simple of the East German computers \nemulated by YAKC. It was mostly a hobbyist computer sold as kit, \nand the only computer in Eastern Germany that was sold directly\nto citizens.\n\n- manufactured by Robotron Riesa from 1985\n- Z80 CPU @ 2.0 MHz, Z80 PIO\n- 16..64 KByte RAM\n- 2 KByte ROM\n- 32x32 monochrome character graphics\n\nA Z1013 running a clone of the ZX81 game Mazogs:\n\n![Z1013 Mazogs](misc/z1013_mazogs.png)\n\n## ZX Spectrum 48k and 128k\n\nThe ZX Spectrum was a British machine which was also\npopular as self-built hobbyist machine or official clone in\nthe Eastern hemisphere because of its simple hardware architecture.\n\n- manufactured by Sinclair from 1982\n- 3.5 MHz Z80 CPU, custom 'ULA' chip, AY-3-8912 sound chip in the 128k\n- 256x192 @ 15 colors in 8x8 color attribute blocks\n\nYAKC currently doesn't emulate the 'contended memory' performance\npenalty when accessing video memory.\n\nThe iconic 128k start screen:\n\n![ZX Spectrum 128k](misc/zx128k.png)\n\nThe 48k version of Bomb Jack:\n\n![ZX 48k Bomb Jack](misc/zx48k_bombjack.png)\n\nExolon on the 48k:\n\n![ZX 48k Exolon](misc/zx48k_exolon.png)\n\nThe start screen of Arkanoid RoD on the 128k:\n\n![ZX 128k Arkanoid](misc/zx128k_arkanoid.png)\n\n## Amstrad CPC 464, 6128 and KC Compact\n\nThe Amstrad CPC had a very interesting architecture which is\nsurprisingly tricky to emulate. Even though the video system\nlacked hardware sprites, it made up for it by making clever use\nof the fairly programmable MC6845 video signal generator chip,\nwhich allow some graphics effects otherwise only known from the\nmuch more powerful Amiga.\n\nThe KC Compact is an outlier, it was an East German CPC clone\nproduced from 1989, and cancelled soon after the Wall came down.\nThe KC Compact emulated the custom Amstrad gate array chip with\nstandard TTL logic, YAKC is cheating here a bit and treats all\nCPC models the same (the only difference of the KC Compact is\na slightly different color palette, and different ROMs).\n\n- manufactured by Amstrad, Schneider, MEK Muehlhausen and others from 1984\n- 4 MHz Z80 CPU (real world perf more like 3.3 Mhz because of wait state injection)\n- 64 or 128 KByte RAM\n- 32 KByte ROM\n- i8255 Programmable Peripheral Interface chip\n- MC6845 CRT Controller chip\n- AY-3-8912 Programmable Sound Generator chip\n- Amstrad 40007/40010 custom gate array chip\n- 27 hardware colors (32 with some redundant colors)\n- 160x200 @ 16 colors, 320x200 @ 4 colors or 640x200 @ 2 colors display modes\n\nThe Amstrad 6128 start screen:\n\n![CPC6128](misc/cpc6128.png)\n\nThe DTC demo by Arkos and Overlanders:\n\n![CPC DTC](misc/cpc_dtc.png)\n\nThe CPC version of Bomb Jack:\n\n![CPC Bomb Jack](misc/cpc_bombjack.png)\n\nArkanoid on the CPC:\n\n![CPC Arkanoid](misc/cpc_arkanoid.png)\n\nCybernoid:\n\n![CPC Cybernoid](misc/cpc_cybernoid.png)\n\n## Acorn Atom\n\nThe Atom is one of the early Acorn 8-bit computers with a very simple but\nclever architecture (especially for its early release date). Apart from the \nNetherlands it wasn't very popular in continental Europe. Currently this is\nthe only system in YAKC with a MOS 6502 CPU.\n\n- manufactured by Acorn from 1980\n- 1 MHz MOS Technology 6502 CPU\n- up to 40 KByte RAM\n- up to 16 KByte ROM\n- MC6847 Video Display Generator chip\n- i8255 Programmable Peripheral Interface chip\n- optional 6522 Versatile Interface Adapter chip\n- mixed text/semigraphics 32x16 display mode\n- various graphics display modes from 64x64 @ 4 colors up to 256x192 @ 2 colors\n\nAcorn Atom mixed text/semigraphics mode:\n\n![Atom](misc/atom_textmode.png)\n\nThe game 'Atomic Chucky Egg':\n\n![Atomic Chucky Egg](misc/atom_atomicegg.png)\n\n# The Debugger UI\n\nYAKC has an extensive debugging UI implemented with Dear Imgui:\n\n![YAKC Debugger UI](misc/debugger_ui.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloooh%2Fyakc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffloooh%2Fyakc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffloooh%2Fyakc/lists"}