{"id":44330161,"url":"https://github.com/zkry/asm-blox","last_synced_at":"2026-02-11T09:10:09.563Z","repository":{"id":43715448,"uuid":"444981672","full_name":"zkry/asm-blox","owner":"zkry","description":"Programming game in Emacs involving blocks of WAT.","archived":false,"fork":false,"pushed_at":"2024-01-06T19:30:20.000Z","size":3091,"stargazers_count":60,"open_issues_count":4,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-30T19:49:43.233Z","etag":null,"topics":["emacs","programming-game"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","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/zkry.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}},"created_at":"2022-01-05T23:39:42.000Z","updated_at":"2025-12-19T00:39:05.000Z","dependencies_parsed_at":"2023-01-30T01:31:12.846Z","dependency_job_id":null,"html_url":"https://github.com/zkry/asm-blox","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/zkry/asm-blox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkry%2Fasm-blox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkry%2Fasm-blox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkry%2Fasm-blox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkry%2Fasm-blox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zkry","download_url":"https://codeload.github.com/zkry/asm-blox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkry%2Fasm-blox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29330858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"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":["emacs","programming-game"],"created_at":"2026-02-11T09:10:06.692Z","updated_at":"2026-02-11T09:10:09.558Z","avatar_url":"https://github.com/zkry.png","language":"Emacs Lisp","readme":"  ![logo](./doc/asm-blox-logo.png)\n\n# asm-blox: a programming game inspired by WAT\n\n  Solve a variety of puzzles involving moving data using WAT.  The\n  game is played on a 3x4 grid where each grid can hold 11 lines of\n  text.  Nodes can send to adjacent notes number values.  You can\n  define extra components such as stacks and heaps to help you solve\n  your puzzles.\n\n  ![screenshot](./doc/example-1.gif)\n\n  \u003cimg src=\"./doc/example-2.gif\" height=\"310px\" /\u003e\n\n# Installation\n\n## MELPA\n\n  This package is on MELPA and can be found under the name `asm-blox`.\n  Thus, the simplest way to install the package would be\n  \u003ckbd\u003eM-x\u003c/kbd\u003e `package-install` \u003ckbd\u003eRET\u003c/kbd\u003e `asm-blox`\n  \u003ckbd\u003eRET\u003c/kbd\u003e.\n\n## via use-package\n\n  ```emacs-lisp\n  (use-package asm-blox)\n  ```\n\n# Configuration\n\n  asm-blox pluzzles' save data is stored as text files in the\n  directory specified by the `asm-blox-save-directory-name`.  When\n  running the `asm-blox` command, all the files from this directory\n  will be read and displayed under the corresponding puzzle.\n\n# Selecting a Puzzle\n\n  You can initialize a game with the command \u003ckbd\u003eM-x asm-blox\u003c/kbd\u003e.\n  This will open up a menu with a list of puzzles to choose from.  By\n  pressing \u003ckbd\u003eRET\u003c/kbd\u003e a new solution to that puzzle will be\n  created.  Back on the puzzle selection screen, you can view and open\n  up saved files by pressing \u003ckbd\u003eRET\u003c/kbd\u003e on the `[1]`-like text.\n\n# Getting Started\n\n  asm-blox is based loosely on the text version of web-assembly.  The\n  syntax is low-level assembly instructions written as s-expression.\n  Each instruction manipulates a tiny stack related to the current\n  cell.  For example the command `(const 10)` will push the number 10\n  onto the stack.  To run your program, press \u003ckbd\u003eC-c C-c\u003c/kbd\u003e.\n\n  Reading the prompt, your goal is to send particular values to the\n  output port (arrow going out of the game grid), most of the time\n  reading and manipulating data from the input port(s).\n\n  You can send messages across the various cells via the `send` and\n  `get` commands.  The available places you can send and receive\n  messages to are the ports `up`, `down`, `left`, and `right`.  For\n  example, to send the value 10 down, you can write:\n\n  ```\n  (const 10)\n  (send down)\n  ```\n\n  Expressions can be nested (see documentation) which will run the\n  nested statements first, then the parent expression.  So the above\n  statement could be written as:\n\n  ```\n  (send down\n    (const 10))\n  ```\n\n  We can nest expressions arbitrarily.  For example, to send `up` the sum\n  of the values on the `left` and `right` port you could write:\n\n  ```\n  (send up\n    (add (get left)\n         (get right)))\n  ```\n\n  Conditions and loops are done WASM style, no labels and jumps to be\n  seen. The block commands are:\n\n  - `block` : when `br`'ed to, go to the blocks end\n  - `loop` : when `br`'ed to, go the the blocks beginning\n\n  and the 'br' commands are:\n\n  - `br` : unconditionally jump\n  - `br_if` : if the top item on the stack is not zero jump\n\n  Using these constructs, arbitrarily complex control flow can be\n  formed.  Remember that if you can't fit all the logic you want into\n  one cell, try splitting it into multiple cells.\n\n  For more information please refer to [the manual](./doc/asm-blox.pdf).\n\n## Module Blocks\n\n  Aside from ASM you can define a cell to be a stack or heap.  You can\n  use as many stacks or heaps as you want in order to solve your\n  problem, beware though that you only have a total of 12 cells to\n  solve the puzzle.  The three top-level objects to define are\n  `apiVersion`, `kind`, and `spec`.  `apiVersion` should always be\n  \"v1\", `kind` can be either `Stack`, `Heap`, or `Controller`\n  (controller is used for special types of puzzles).  The `spec` field\n  varies by the kind.  For example, the following is a definition of a stack:\n\n  ```lisp\n(module stack\n :size 10\n :input-ports (left)\n :output-port right)\n  ```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkry%2Fasm-blox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzkry%2Fasm-blox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkry%2Fasm-blox/lists"}