{"id":21717575,"url":"https://github.com/sandsmark/8bit-programmer","last_synced_at":"2026-04-20T03:02:36.018Z","repository":{"id":66624945,"uuid":"351217978","full_name":"sandsmark/8bit-programmer","owner":"sandsmark","description":"extremely simple assembler","archived":false,"fork":false,"pushed_at":"2021-10-17T13:15:56.000Z","size":869,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T20:43:36.170Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sandsmark.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-03-24T20:43:39.000Z","updated_at":"2021-10-17T13:42:29.000Z","dependencies_parsed_at":"2023-02-22T16:15:49.395Z","dependency_job_id":null,"html_url":"https://github.com/sandsmark/8bit-programmer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/sandsmark/8bit-programmer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandsmark%2F8bit-programmer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandsmark%2F8bit-programmer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandsmark%2F8bit-programmer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandsmark%2F8bit-programmer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sandsmark","download_url":"https://codeload.github.com/sandsmark/8bit-programmer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandsmark%2F8bit-programmer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32031070,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"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":[],"created_at":"2024-11-26T01:18:24.604Z","updated_at":"2026-04-20T03:02:36.011Z","avatar_url":"https://github.com/sandsmark.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Very simple assembler for a [SAP-1](https://www.amazon.com/Digital-Computer-Electronics-Albert-Malvino/dp/0028005945) CPU, both 4 bit and 8 bit memory address width.\n\nAlso includes very rudimentary modem support, to upload via a soundcard instead\nof cheating by relying on an e. g. an Arduino that is a gazillion times as\npowerful as our own system. So far only parts of the mo part has been\nimplemented.\n\n![screenshot](/screenshot-2021-04-25.png)\n\nI've never written an assembler and this is a quick 30 minutes hack, so YMMV.\n\nIt should in theory also be able to work with an Arduino or similar connected\nto the serial port to automatically write stuff to memory. The \"protocol\" is\nnewline separated pairs of hex-encoded bytes separated by spaces defining\naddress and value. E. g. `\\n0x00 0xFF\\n` should write 255 to address 0.\n\nThe idea is to eventually replace the serial port stuff with sound, and have a\nquasi-modem (i. e. a bell 103 modem without the mo part) so I can program\nwithout cheating. USB is too complex to implement on a breadboard, and the only\nother output I have on my laptop is the headphone jack.\n\n\nDownloads\n---------\n\nWindows builds can be found here, just download the zip file with the highest number:\n\nhttps://github.com/sandsmark/8bit-programmer/releases/tag/102\n\nOpcodes\n-------\n\nBasically just these:\nhttps://github.com/beneater/eeprom-programmer/blob/master/microcode-eeprom-with-flags/microcode-eeprom-with-flags.ino#L39-L54\n\nIn addition there's `.db address value [label]`. `[label]` is an optional name\nfor referring to the address of the value, so you don't need to manually update\nadresses as you move things around. So `.db 0x3 0xaa foo` will program in the\nvalue `0xaa` at memory adress `0x3`, and then you can write e. g. `lda foo`\nelsewhere in the code.\n\nModem\n-----\n\nLoosely based on [Bell 103](https://en.wikipedia.org/wiki/Bell_103_modem). As\nin for now just encoding in the right frequencies at the right baud rate, but\nthe correct encoding is not implemented yet. And not tested yet, I'm still\nworking on the hardware side now that I have the software to test it with.\n\nSome random references (that I haven't read, as I am very lazy, but the\nsummaries seem relevant):\n - https://vigrey.com/blog/emulating-bell-103-modem\n - http://www.whence.com/minimodem/\n - https://freecircuitdiagram.com/1013-fsk-demodulator/\n - https://www.futurlec.com/Motorola/MC145443P.shtml\n\n\nRandom stuff I use or have used (because bookmarks are overrated):\n - https://archive.org/details/byte-magazine-1980-08/page/n23/mode/2up\n - http://www.vk2zay.net/calculators/lm567.php\n - https://electronics.stackexchange.com/questions/441501/fsk-generation-with-timer-555\n\n*Heads up: if you use an LM567 chip, remember that the max switching speed is center frequency/20, so adjust your baud to approx. lowest frequency to use / 16. If you use the Bell 103 standard that means max 110 baud.*\n\n\nDependencies\n------------\n\n - Qt: GUI framework\n - Miniaudio: Single-header C++ library for audio output and input.\n\n\nTODO\n----\n\n- Demodulator part of the modem\n- Generate audio output up front, not on the fly. miniaudio can't keep up with our baud rate.\n- Configurable baud etc?\n- Better error checking (tracking where overlaps come from, missing initialization, uninitialized memory usage etc.)\n- User defined operators, including names, arguments, opcodes\n- Actually add buttons for saving and loading, instead of just automatic.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandsmark%2F8bit-programmer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandsmark%2F8bit-programmer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandsmark%2F8bit-programmer/lists"}