{"id":15654774,"url":"https://github.com/ibara/a80","last_synced_at":"2025-08-30T05:10:24.317Z","repository":{"id":80378080,"uuid":"355387672","full_name":"ibara/a80","owner":"ibara","description":"Intel 8080/Zilog Z80 assembler written in D.","archived":false,"fork":false,"pushed_at":"2021-10-17T22:01:42.000Z","size":83,"stargazers_count":30,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-01T11:14:11.735Z","etag":null,"topics":["8080","assembler","assembly","coding","cpm","d","dlang","i80","i8080","intel","programming","retro","retrocomputing","z80","zilog"],"latest_commit_sha":null,"homepage":"https://briancallahan.net/blog/20210408.html","language":"D","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ibara.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":"2021-04-07T02:24:16.000Z","updated_at":"2025-03-15T17:17:28.000Z","dependencies_parsed_at":"2023-06-06T16:00:30.368Z","dependency_job_id":null,"html_url":"https://github.com/ibara/a80","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/ibara/a80","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibara%2Fa80","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibara%2Fa80/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibara%2Fa80/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibara%2Fa80/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ibara","download_url":"https://codeload.github.com/ibara/a80/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibara%2Fa80/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272805572,"owners_count":24995916,"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-30T02:00:09.474Z","response_time":77,"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":["8080","assembler","assembly","coding","cpm","d","dlang","i80","i8080","intel","programming","retro","retrocomputing","z80","zilog"],"created_at":"2024-10-03T12:54:06.071Z","updated_at":"2025-08-30T05:10:24.297Z","avatar_url":"https://github.com/ibara.png","language":"D","readme":"a80\n===\n`a80` is an assembler written in [D](https://dlang.org/) for the\nIntel 8080 (and, by extension, the Zilog Z80) CPU.\n\n`a80` is developed on [OpenBSD](https://www.openbsd.org/) but\nshould work on any system that D targets.\n\n`a80` is not an exact clone of any pre-existing CP/M assember, nor\ndoes it want to be. The differences will be explained in this\ndocument.\n\n`a80` also is quite conscious about its design practice and\nimplementation. It is written to be the subject of a series of\n[blog posts](https://briancallahan.net/blog/20210408.html) in\nwhich we attempt to demystify the building of programming tools,\nand as such very intentionally does not use some very obvious data\nstructures. And it may make some seemingly peculiar design choices.\nMy goal is to have written a real assembler for a real CPU that you\ncan still purchase today (in the form of the Z80) that true\nbeginners can come to understand.\n\nAfter the blog series, if we want to turn this into a clone of an\nexisting CP/M assembler, I'm all for it.\n\nBug reports are welcome at any time.\n\nUsage\n-----\n```\na80 file.asm\n```\nThe output will be `file.com`.\n\nSyntax\n------\nA line of assembly takes the following form:\n```\n[label:] [op [arg1[, arg2]]] [; comment]\n```\nExample assembly programs can be found in `hello.asm`, `fib.asm`,\nand `mul.asm`.\n\n`a80` only understands Intel 8080 opcodes.\n\nThe CP/M `EQU` directive is supported however you cannot use other\nlabels as a value nor can you use expressions.\n\nAll **op** and **arg** must be lowercase, though labels may include\ncapital letters.\n\nNumbers\n-------\nNumbers may be in decimal or hex.\n\nHex numbers must end with an `h`. If a hex number begins with\n`a-f`, it must be prefixed with `0`. This is not too dissimilar\ncompared to other CP/M assemblers.\n\nStrings\n-------\nThe `DB` pseudo-op is available. Strings can be written within\nsingle quotes. The multi-comma syntax is not available.\n\nExpression parser\n-----------------\nThere is none. That is to keep things simple.\n\nThe `equ` pseudo-op does allow for `$` and very simple `$+number`\nexpressions only. No spaces in expressions. Valid expression\noperands are `+`, `-`, `*`, `/`, and `%`.\n\nLicense\n-------\nISC license. See `LICENSE` for more information.\n","funding_links":[],"categories":["D"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibara%2Fa80","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibara%2Fa80","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibara%2Fa80/lists"}