{"id":17272578,"url":"https://github.com/rubyist/tisemu","last_synced_at":"2025-07-30T10:31:15.962Z","repository":{"id":66257275,"uuid":"39319017","full_name":"rubyist/tisemu","owner":"rubyist","description":"TIS-100 emulator using Go","archived":false,"fork":false,"pushed_at":"2015-07-19T18:44:27.000Z","size":160,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-16T08:48:58.548Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rubyist.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":"2015-07-19T01:59:43.000Z","updated_at":"2023-12-14T10:58:58.000Z","dependencies_parsed_at":"2023-02-20T02:45:41.580Z","dependency_job_id":null,"html_url":"https://github.com/rubyist/tisemu","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyist%2Ftisemu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyist%2Ftisemu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyist%2Ftisemu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubyist%2Ftisemu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubyist","download_url":"https://codeload.github.com/rubyist/tisemu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228121068,"owners_count":17872712,"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","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-10-15T08:48:58.245Z","updated_at":"2024-12-04T13:41:16.651Z","avatar_url":"https://github.com/rubyist.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tisemu \n\n`tisemu` is a [TIS-100](http://www.zachtronics.com/tis-100/) emulator. TIS-100\nis a rad open-ended programming game where you solve puzzles by programming a\nmulti-node machine in a kind of assembly language. You should probably go play\nthe game instead of messing around here.\n\n`tisemu` supports the `T21` execution node, the `T30` stack memory node, and a\nterminal based visualization mode (using termbox). I think there are plans to\nadd more node types to the game. When that happens I'll probably add them here.\n\n## Machine Maps\n\nIn the game, each puzzle can have a different array of nodes and node types.\nWhen using `tisemu`, the machine can be describe in a simple map file. The map\nfile format is as follows:\n\n```\n\u003cCOLS\u003e\n\u003cROWS\u003e\n\u003cDISPLAY\u003e\n\u003cNODETYPE\u003e\n...\n```\n\n`COLS` is the number of columns in the node array. `ROWS` is the number of rows\nin the node array. `DISPLAY` describes the display capabilities. This value can\neither be `F` for no display, or `T \u003cCOLS\u003e \u003cROWS\u003e` for a display with a\nprovided gemetry. `NODETYPE` describes a type for each node in the array,\nstarting from the top left proceeding to the bottom right. There should be\n`COLS * ROWS` lines. The supported values are currently `T21` and `T30`. If no\nmap file is provided, a default map of 4x3 (12 total) T21 nodes with no display\nwill be used. See the examples directory for some example map files. \n\n## Code Files\n\nCode for all nodes in a machine lives in one file. It's best to play the game\nand understand the code first. `tisemu` tries to keep the same format as the\ngame's save files, but differs slightly in node numbering. The game does not\nappear to maintain numbering for \"bugged\" nodes and `T30` nodes, but `tisemu`\ndoes. If you want to plug in save files from the game you might need to\nrenumber the nodes. I might fix this in the future.\n\n## Running Code\n\nInput and output to the machine is given on the command line in the format\n`-in=\u003cnode\u003e,\u003cfile\u003e` or `-out=\u003cnode\u003e,\u003cfile\u003e`. For example, `-in=1,in.a` will\nopen file `in.a` and write its lines as input to node `1`.\n\n### Examples\n\n```\n./tisemu signal-divider.tis -map=standard.map -in=1,in.a -in=2,in.b -out=9,out.q -out=10,out.r\n```\n\n```\n./tisemu sequence-indexer.tis -map=memory.map -in=0,in.v -in=2,in.x -out=10,/dev/stdout\n```\n\n```\n./tisemu display.tis -map=display.map\n```\n\nHere's an example of the visualization mode solving part of the exposure mask\nviewer puzzle from the game. I've slowed down the system clock so the drawing\noperations are displayed.\n\n![tisemu](https://cloud.githubusercontent.com/assets/143/8767250/63e59a56-2e24-11e5-9372-4b2801801f21.gif)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubyist%2Ftisemu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frubyist%2Ftisemu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubyist%2Ftisemu/lists"}