{"id":34298437,"url":"https://github.com/skoolkid/skoolkit","last_synced_at":"2026-03-27T04:08:20.724Z","repository":{"id":7361817,"uuid":"8686958","full_name":"skoolkid/skoolkit","owner":"skoolkid","description":"A suite of tools for creating disassemblies of ZX Spectrum games.","archived":false,"fork":false,"pushed_at":"2026-03-15T20:59:20.000Z","size":15511,"stargazers_count":153,"open_issues_count":1,"forks_count":20,"subscribers_count":21,"default_branch":"master","last_synced_at":"2026-03-16T08:28:58.852Z","etag":null,"topics":["disassembler","zx-spectrum"],"latest_commit_sha":null,"homepage":"https://skoolkit.ca","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skoolkid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-03-10T15:20:12.000Z","updated_at":"2026-03-15T20:59:24.000Z","dependencies_parsed_at":"2023-11-27T22:24:29.276Z","dependency_job_id":"edd4bd34-e816-4de7-9cb7-9de97a62b257","html_url":"https://github.com/skoolkid/skoolkit","commit_stats":null,"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/skoolkid/skoolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoolkid%2Fskoolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoolkid%2Fskoolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoolkid%2Fskoolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoolkid%2Fskoolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skoolkid","download_url":"https://codeload.github.com/skoolkid/skoolkit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoolkid%2Fskoolkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31018555,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T03:51:26.850Z","status":"ssl_error","status_checked_at":"2026-03-27T03:51:09.693Z","response_time":164,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["disassembler","zx-spectrum"],"created_at":"2025-12-17T05:35:29.330Z","updated_at":"2026-03-27T04:08:20.717Z","avatar_url":"https://github.com/skoolkid.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Tests](https://github.com/skoolkid/skoolkit/actions/workflows/tests.yml/badge.svg)](https://github.com/skoolkid/skoolkit/actions/workflows/tests.yml)\n[![Coverage](https://codecov.io/github/skoolkid/skoolkit/coverage.svg?branch=master)](https://codecov.io/github/skoolkid/skoolkit?branch=master)\n\nSkoolKit\n========\n\nSkoolKit is a collection of utilities that can be used to disassemble a\n[Spectrum](https://en.wikipedia.org/wiki/ZX_Spectrum) game (or indeed any piece\nof Spectrum software written in machine code) into a format known as a *skool*\nfile. Then, from this *skool* file, you can use SkoolKit to create a browsable\ndisassembly in HTML format, or a re-assemblable disassembly in assembly\nlanguage. So the *skool* file is - from start to finish as you develop it by\norganising and annotating the code - the common 'source' for both the\nreader-friendly HTML version of the disassembly, and the developer- and\nassembler-friendly version of the disassembly.\n\nRequirements\n------------\n\nSkoolKit requires [Python](https://www.python.org) 3.10+. If you're running\nLinux or one of the BSDs, you probably already have Python installed. If you're\nrunning Windows or Mac OS X, you can get Python\n[here](https://www.python.org/downloads/).\n\nFeatures\n--------\n\nWith SkoolKit you can:\n\n* use [sna2ctl.py](https://skoolkid.github.io/skoolkit/commands.html#sna2ctl-py)\n  to generate a [control file](https://skoolkid.github.io/skoolkit/control-files.html)\n  (an attempt to identify routines and data blocks by static analysis) from a\n  snapshot (SNA, SZX or Z80) or raw memory file\n* enable [sna2ctl.py](https://skoolkid.github.io/skoolkit/commands.html#sna2ctl-py)\n  to generate a much better control file that more reliably distinguishes code\n  from data by using a code execution map produced by an emulator,\n  [rzxplay.py](https://skoolkid.github.io/skoolkit/commands.html#rzxplay-py) or\n  [trace.py](https://skoolkid.github.io/skoolkit/commands.html#trace-py)\n* use [sna2skool.py](https://skoolkid.github.io/skoolkit/commands.html#sna2skool-py)\n  along with this control file to produce a disassembly of a snapshot or raw\n  memory file\n* add annotations to this disassembly (or the control file) as you discover the\n  purpose of each routine and data block\n* use [skool2html.py](https://skoolkid.github.io/skoolkit/commands.html#skool2html-py)\n  to convert a disassembly into a bunch of HTML files (with annotations in\n  place, and the operands of CALL and JP instructions converted into\n  hyperlinks)\n* use [skool2asm.py](https://skoolkid.github.io/skoolkit/commands.html#skool2asm-py)\n  to convert a disassembly into an assembler source file (also with annotations\n  in place)\n* use [skool2ctl.py](https://skoolkid.github.io/skoolkit/commands.html#skool2ctl-py)\n  to convert a disassembly back into a control file (with annotations retained)\n* use [skool2bin.py](https://skoolkid.github.io/skoolkit/commands.html#skool2bin-py)\n  to convert a disassembly into a raw memory file\n* use [tap2sna.py](https://skoolkid.github.io/skoolkit/commands.html#tap2sna-py)\n  to convert a PZX, TAP or TZX file into a 'pristine' Z80 or SZX snapshot\n* use [snapinfo.py](https://skoolkid.github.io/skoolkit/commands.html#snapinfo-py)\n  to analyse a snapshot or raw memory file and list the BASIC program it\n  contains, show register values, produce a call graph, find tile graphic data,\n  find text, or find sequences of arbitrary byte values\n* use [trace.py](https://skoolkid.github.io/skoolkit/commands.html#trace-py)\n  to trace the execution of machine code in a snapshot or raw memory file\n* use [rzxplay.py](https://skoolkid.github.io/skoolkit/commands.html#rzxplay-py)\n  to trace the execution of machine code in an RZX file, and produce a code\n  execution map for\n  [sna2ctl.py](https://skoolkid.github.io/skoolkit/commands.html#sna2ctl-py)\n* use [tapinfo.py](https://skoolkid.github.io/skoolkit/commands.html#tapinfo-py)\n  to analyse the blocks in a PZX, TAP or TZX file, and list the BASIC program\n  it contains\n* use [rzxinfo.py](https://skoolkid.github.io/skoolkit/commands.html#rzxinfo-py)\n  to analyse the blocks in an RZX file, and extract snapshots from it\n* use [bin2tap.py](https://skoolkid.github.io/skoolkit/commands.html#bin2tap-py)\n  to convert a snapshot or raw memory file into a PZX or TAP file\n* use [bin2sna.py](https://skoolkid.github.io/skoolkit/commands.html#bin2sna-py)\n  to convert a raw memory file into a Z80 or SZX snapshot\n* use [snapmod.py](https://skoolkid.github.io/skoolkit/commands.html#snapmod-py)\n  to modify the register values or memory contents in a Z80 or SZX snapshot\n* use [sna2img.py](https://skoolkid.github.io/skoolkit/commands.html#sna2img-py)\n  to convert graphic data in a disassembly, SCR file, snapshot or raw memory\n  file into a PNG image\n\nIn an HTML disassembly produced by\n[skool2html.py](https://skoolkid.github.io/skoolkit/commands.html#skool2html-py)\nyou can also:\n\n* use the [image macros](https://skoolkid.github.io/skoolkit/skool-macros.html#image-macros)\n  to build still and animated PNG images from graphic data\n* use the [#AUDIO](https://skoolkid.github.io/skoolkit/skool-macros.html#audio)\n  macro to build WAV files for sound effects and tunes\n* use the [#R](https://skoolkid.github.io/skoolkit/skool-macros.html#r) macro\n  in annotations to create hyperlinks between routines and data blocks that\n  refer to each other\n* use [[Bug:\\*]](https://skoolkid.github.io/skoolkit/ref-files.html#box-pages),\n  [[Fact:\\*]](https://skoolkid.github.io/skoolkit/ref-files.html#box-pages) and\n  [[Poke:\\*]](https://skoolkid.github.io/skoolkit/ref-files.html#box-pages)\n  sections in a ref file to neatly render lists of bugs, trivia and POKEs on\n  separate pages\n\nSee the [user manual](https://skoolkid.github.io/skoolkit/) for more details\n(mirror [here](https://skoolkid.gitlab.io/skoolkit/)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskoolkid%2Fskoolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskoolkid%2Fskoolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskoolkid%2Fskoolkit/lists"}