{"id":15220429,"url":"https://github.com/michaelkamprath/bespokeasm","last_synced_at":"2026-02-01T01:14:14.222Z","repository":{"id":38206999,"uuid":"361119855","full_name":"michaelkamprath/bespokeasm","owner":"michaelkamprath","description":"An assembler that can be configured to work with most any instruction set and architecture.","archived":false,"fork":false,"pushed_at":"2026-01-28T02:23:25.000Z","size":29944,"stargazers_count":27,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-28T18:07:22.758Z","etag":null,"topics":["assembler","assembly","assembly-8085","assembly-language","bytecode","custom","custom-assembly","custom-assembly-language","kenbak-1","machine-code"],"latest_commit_sha":null,"homepage":"","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/michaelkamprath.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["michaelkamprath"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-04-24T09:21:15.000Z","updated_at":"2026-01-28T02:23:29.000Z","dependencies_parsed_at":"2023-01-31T19:16:12.506Z","dependency_job_id":"66c51b4e-3904-4b21-8567-064d5fea5fea","html_url":"https://github.com/michaelkamprath/bespokeasm","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/michaelkamprath/bespokeasm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelkamprath%2Fbespokeasm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelkamprath%2Fbespokeasm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelkamprath%2Fbespokeasm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelkamprath%2Fbespokeasm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelkamprath","download_url":"https://codeload.github.com/michaelkamprath/bespokeasm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelkamprath%2Fbespokeasm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28963407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T00:42:38.011Z","status":"ssl_error","status_checked_at":"2026-02-01T00:42:35.920Z","response_time":128,"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":["assembler","assembly","assembly-8085","assembly-language","bytecode","custom","custom-assembly","custom-assembly-language","kenbak-1","machine-code"],"created_at":"2024-09-28T13:09:08.040Z","updated_at":"2026-02-01T01:14:14.217Z","avatar_url":"https://github.com/michaelkamprath.png","language":"Python","funding_links":["https://github.com/sponsors/michaelkamprath"],"categories":[],"sub_categories":[],"readme":"[![Python package](https://github.com/michaelkamprath/bespokeasm/actions/workflows/python-package.yml/badge.svg?branch=main)](https://github.com/michaelkamprath/bespokeasm/actions/workflows/python-package.yml) [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)\n\n# Bespoke ASM\nThis is a customizable byte code assembler that allows for the definition of custom instruction set architecture.\n\n**NOTE - This project should be considered to be in \"beta\" status. It should be stable, but features are subject to change.**\n\n## Usage\nOnce installed, assembly code can be compiled in this manner:\n\n```sh\n bespokeasm compile -c isa-config.yaml awesome-code.asm\n```\n\nNote that supplying an instruction set configuration file is required via the `-c` option. The binary byte code image will be written to `\u003casm-file-basename\u003e.bin`, though this can be changed with the `-o` option. Add `--pretty-print` to the command to get a human readable output.\n\n### Installation Options\n\n#### Standalone binary (PyInstaller build)\n\n- Download the platform file from the GitHub Releases page (e.g., `bespokeasm-\u003cversion\u003e-linux-x86_64`, `bespokeasm-\u003cversion\u003e-macos-arm64`, `bespokeasm-\u003cversion\u003e-macos-x86_64`, or `bespokeasm-\u003cversion\u003e-windows-x86_64.exe`).\n- On Linux/macOS, ensure it’s executable: chmod +x bespokeasm.\n- Run directly from a terminal, no Python needed: ./bespokeasm -c \u003cconfig.yaml\u003e \u003csource.asm\u003e -n -p.\n- To place it on your PATH:\n  - Linux/macOS: rename or symlink to `bespokeasm` in a PATH dir (e.g., `sudo ln -sf /path/to/bespokeasm-macos-x86_64 /usr/local/bin/bespokeasm` or `mv bespokeasm-linux-x86_64 ~/bin/bespokeasm`).\n  - Windows: rename to `bespokeasm.exe` or create a shortcut in a PATH folder (e.g., `C:\\\\Users\\\\\u003cyou\u003e\\\\AppData\\\\Local\\\\Microsoft\\\\WindowsApps`) or add the download folder to PATH.\n- Upgrading: download the new platform binary, replace the target of your symlink or overwrite the file in your PATH, and re-run `chmod +x` on Linux/macOS if needed.\n\n#### pipx (isolated install using a wheel)\n- Prerequisite: Python 3.11+ with pipx installed. If needed: python3 -m pip install --user pipx then python3 -m pipx ensurepath (restart shell).\n- Download the wheel from the GitHub Releases page (e.g., `bespokeasm-\u003cversion\u003e-py3-none-any.whl`).\n- Install: pipx install ./bespokeasm-\u003cversion\u003e-py3-none-any.whl.\n- Use the CLI from anywhere: bespokeasm -c \u003cconfig.yaml\u003e \u003csource.asm\u003e -n -p.\n- To update, reinstall with the newer wheel; to remove, pipx uninstall bespokeasm.\n\n#### Install From Source\nTo install, clone this repository and install using `pip`.\n\n```sh\ngit clone git@github.com:michaelkamprath/bespokeasm.git\npip install ./bespokeasm/\n```\n\nPreferably, you use a `python` virtual environment to install BespokeASM into. For example:\n\n```sh\ngit clone git@github.com:michaelkamprath/bespokeasm.git\ncd bespokeasm\npython3 -m venv .venv/bespokeasm\nsource .venv/bespokeasm/bin/activate\npip install .\nbespokeasm --version\n```\n\nBe sure to activate the virtual environment whenever you want to use BespokeASM.\n\nFor development (building wheels/binaries), install dev tools in your venv:\n\n```sh\npip install \".[dev]\"\n```\n\n### Installing Syntax Highlighting\n#### Visual Studio Code\nBespokeASM can generate a syntax highlighting extension for [Visual Studio Code](https://code.visualstudio.com) that will properly highlight the instruction mnemonics and other aspects of the assembly language configured in the instruction set architecture configuration file. To install:\n```sh\nbespokeasm generate-extension vscode -c isa-config.yaml\n```\n\nFor [Cursor](https://cursor.com/), add the `-d ~/.cursor/` options.\n#### Sublime Text\nBespokeASM can generate a syntax highlighting extension for [Sublime Text](https://www.sublimetext.com) that will properly highlight the instruction mnemonics and other aspects of the assembly language configured in the instruction set architecture configuration file. To generate the `.sublime-package` file:\n```sh\nbespokeasm generate-extension sublime -c isa-config.yaml -d /path/to/some/directory\n```\nOnce generated, move the `.sublime-package` file to the `Installed Packages` directory of the Sublime Text application settings directory. On MacOS, this can be found at `~/Library/Application Support/Sublime Text/Installed Packages`, and on Linux this is typically found at `~/.config/sublime-text/Installed\\ Packages/`. Of course, this directory can also be used for the `-d` option in the above command.\n\n#### Vim\nBespokeASM can generate Vim syntax highlighting and filetype detection files based on your ISA configuration. To generate:\n```sh\nbespokeasm generate-extension vim -c isa-config.yaml [-d ~/.vim/]\n```\nThis creates `syntax/\u003clanguage-id\u003e.vim` and `ftdetect/\u003clanguage-id\u003e.vim` under the specified directory (default `~/.vim/`). For Neovim, you can use `~/.config/nvim/` instead.\n\nSee [documentation for more information](https://github.com/michaelkamprath/bespokeasm/wiki/Installation-and-Usage#vim) on how to configure Vim to use the generated files.\n\n# Documentation\nDocumentation is available on the [Bespoke ASM Wiki](https://github.com/michaelkamprath/bespokeasm/wiki).\n\n# Contributions\nContributions are welcome. All contributions should pass the configured linters. A `pre-commit` hook can be configured to lint all code at commit time. The configuration can be found in the `.pre-commit-config.yaml` file in this repository. To install:\n\n```sh\ncd /path/to/bespokeasm/repository\npipenv sync --dev\npre-commit install\n```\n\n# License\nBespoke ASM is released under [the GNU GPL v3 license](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelkamprath%2Fbespokeasm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelkamprath%2Fbespokeasm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelkamprath%2Fbespokeasm/lists"}