{"id":16692520,"url":"https://github.com/ckormanyos/ti84-ref_app","last_synced_at":"2025-07-09T01:04:56.294Z","repository":{"id":215656520,"uuid":"739494348","full_name":"ckormanyos/ti84-ref_app","owner":"ckormanyos","description":"TI-84 Plus reference application","archived":false,"fork":false,"pushed_at":"2024-08-04T05:26:28.000Z","size":3686,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-09T01:04:08.017Z","etag":null,"topics":["sdcc-compiler","ti-84-plus","z80","z80-asm"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ckormanyos.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":"2024-01-05T17:45:24.000Z","updated_at":"2025-02-15T02:04:33.000Z","dependencies_parsed_at":"2024-01-05T18:33:01.075Z","dependency_job_id":"c47f6724-7edc-4e56-92ad-385587d221ff","html_url":"https://github.com/ckormanyos/ti84-ref_app","commit_stats":null,"previous_names":["ckormanyos/ti84-ref_app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ckormanyos/ti84-ref_app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckormanyos%2Fti84-ref_app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckormanyos%2Fti84-ref_app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckormanyos%2Fti84-ref_app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckormanyos%2Fti84-ref_app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ckormanyos","download_url":"https://codeload.github.com/ckormanyos/ti84-ref_app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckormanyos%2Fti84-ref_app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264373755,"owners_count":23598078,"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":["sdcc-compiler","ti-84-plus","z80","z80-asm"],"created_at":"2024-10-12T16:27:24.711Z","updated_at":"2025-07-09T01:04:56.274Z","avatar_url":"https://github.com/ckormanyos.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"ti84-ref_app\n==================\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/ckormanyos/ti84-ref_app/actions\"\u003e\n        \u003cimg src=\"https://github.com/ckormanyos/ti84-ref_app/actions/workflows/ti84-ref_app.yml/badge.svg\" alt=\"build\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ckormanyos/ti84-ref_app/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc\"\u003e\n        \u003cimg src=\"https://custom-icon-badges.herokuapp.com/github/issues-raw/ckormanyos/ti84-ref_app?logo=github\" alt=\"Issues\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ckormanyos/ti84-ref_app/blob/main/UNLICENSE\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/license-Unlicense-blue.svg\" alt=\"Unlicense\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n`ckormanyos/ti84-ref_app` creates a fully functioning reference application\nfor the TI-84 Plus monochrome graphics calculator. It runs in the\nopen `Asm(prgm)` interface provided in the calculator's `CATALOG` menu.\nIt uses the TI-84's on-board [Z80 processor](https://en.wikipedia.org/wiki/Zilog_Z80).\n\nThe reference application implements parallel _blinky_ and _hello_-_world_ text sequences.\nIt boots through a small startup code and subsequently\ninitializes a skinny microcontroller abstraction layer (MCAL).\nControl is then passed to a minimalistic cooperative multitasking scheduler.\nThe application task (managed by the scheduler) directs the presentations\nof its associated ASCII-text messages.\n\nThe text sequences _ON_/_OFF_ and _hello_/_world_ are presented in\ncyclic, alternating fashion(s) on the calculator screen.\nText is used since there is no actual LED present on the calculator-target system.\nThis is intended to simulate an LED-blinky by _toggling_ between _ON_ and _OFF_.\nTo make the program a little more interesting, an independent _hello_-_world_-task\nis supported as well. The _ON_/_OFF_ messages are printed every $1s$\nand the _hello_/_world_ messages every $3s$.\n\n## Implementation details\n\nThe cooperative multitasking timebase is derived from a $1s$ tick.\nThe underlying $32$-bit timer resides on ports `0x45`-`0x48`,\nwhere the lower byte at port `0x45` is used.\nThis timer is only available on the TI-84, not the TI-83.\n\nThe blinky _ON_/_OFF_ and _hello_/_world_ text messages are printed\nat rows $2$ and $3$, respectively, and both at column $6$.\n\nA skinny `main()` subroutine in the soruce file\n[`app_main.c`](./src/app/app_main.c) controls the program flow.\nAfter starting the multitasking scheduler with\n[`os_schedule()`](https://github.com/ckormanyos/ti84-ref_app/blob/8291393f971d234c3493e18589b60421d22f61cc/src/app/app_main.c#L27),\nit services the two alternating tasks\n[`app_led_task()`](https://github.com/ckormanyos/ti84-ref_app/blob/8291393f971d234c3493e18589b60421d22f61cc/src/app/app_led.c#L10)\nand\n[`app_hello_task()`](https://github.com/ckormanyos/ti84-ref_app/blob/8291393f971d234c3493e18589b60421d22f61cc/src/app/app_hello.c#L10)\nbased on their cycle times.\n\nThe application is written in the C language using the C23 standard.\nThere is minimal use of assembly for startup and to interface with\n[TI-83 Plus System Routines](https://education.ti.com/html/eguides/discontinued/computer-software/EN/SDK-TI-83-System-Routines_EN.pdf).\n\n## Running on the Calculator\n\nProgramming the calculator:\n  - After build, locate `bin/refapp.8xp`.\n  - Drag `refapp.8xp` onto the calculator using the standard method with [TI Connect version 4](https://education.ti.com/en/software/details/en/B59F6C83468C4574ABFEE93D2BC3F807/swticonnectsoftware). Important: Use version 4 for the TI-84 Plus.\n  - The on-calculator name of the program is `REFAPP`.\n\nTo start the program, use the usual `Asm(prgm)` option found in the `CATALOG`\nmenu and select the `REFAPP` program. The explicit keystrokes are listed below.\n\nLet's execute the program on the calculator using keystrokes:\n  - Hit $2^{nd}$-`CATALOG`.\n  - Use the arrows to navigate down to the `Asm(` entry.\n  - Hit the `ENTER`-key.\n  - Then hit the `PRGM`-key.\n  - Select `REFAPP` and hit the `ENTER`-key.\n  - The calculator screen should now show `Asm(prgmREFAPP`.\n  - Hit the `ENTER`-key and the program should start to run.\n  - To exit the blinky _ON_/_OFF_ and hello/world show, press the `ENTER`-key.\n  - Clear the screen (if desired) with the `CLEAR`-key.\n\nThe running programm in the display-state _ON_/_hello_ is shown in the image below.\n\n![](./images/ti84-ref_app.jpg)\n\n## Pre-built Program\n\nA fully-built `ref_app` can be found in the [`bin`](./bin) directory.\nThis pre-built program can be used to trouble-shoot the environment.\n\n## Tools and Build\n\nThis application uses the free\n[`sdcc`](https://sdcc.sourceforge.net) toolchain.\nC-runtime initialization (i.e., static initialization prior to the call of `main()`)\nis supported with the file [crt0.s](./src/startup/crt0.s) in the `startup` directory.\n\nThe build system:\n  - The build system uses GNUmake with a straighforward [`Makefile`](./build/Makefile).\n  - The build system is supported on both `Win*` and `*nix`.\n  - The `Win*`-build requires a small selection of ported `*nix` tools. These are included in the [`wbin`](./build/tools/UnxUtils/usr/local/wbin) directory.\n  - The on-calculator image is packed by [BinPac8x v1.2](https://www.cemetech.net/news/2010/6/389/_/binpac8x-v12).\n  - Build results including HEX-File and the on-calculator image `refapp.8xp` are placed in the `bin`-directory.\n\n### Build on `Win*`\n\nPrerequisites:\n  - Install [`sdcc`](https://sdcc.sourceforge.net) version 4.4 or higher.\n  - Install python.\n\nThen build in the command shell with:\n\n```cmd\ncd ti84-ref_app\\build\nmake all\n```\n\n### Build on `*nix`\n\nPrerequisites:\n  - Install [`sdcc`](https://sdcc.sourceforge.net) version 4.4 or higher.\n\nThen build in the bash shell with:\n\n```sh\ncd ti84-ref_app/build\nmake all\n```\n\n## Testing and Continuous Integration\n\nTesting has been performed on the target system, which is a fully-functioning\nTI-84 Plus calculator purchased years ago from a commercial retailer.\n\nContinuous integration is performed on GHA using a ubuntu-latest\nand macos-latest runners.\nThe [workflow run](./.github/workflows/ti84-ref_app.yml)\nbuilds the application and verifies the presence of `bin/refapp.8xp`.\n\n## Aditional Details\n\n### Origins (and Reservations)\n\n  - This project has been inspired by and influenced by numerous previous works, including (but not limited to) the [azertyfun/LibTI](https://github.com/azertyfun/LibTI) project.\n  - The aforementioned [project](https://github.com/azertyfun/LibTI) was ground-breaking and excellent.\n\nPlease do, however, use this project at your own discretion and observe\nalso the [license](./LICENSE) details. This project is not in any way\naffiliated with Texas Instruments Inc, or any of its subsidiaries,\nincluding the educational products division.\n\nSome of this software has been reverse engineered\nfrom other projects or terse technical notes.\nIn addition, the software actively writes to calculator\n_ports_, such as port `0x40` and port `0x41`.\nPersonally, I do not consider this to be a $100\\\\%$ sound basis\nfor project reliability and/or stability.\n\nEmpirical evidence does, nonetheless, show a working,\nand fully/properly initialized C-language, non-trivial application.\nIt provides a basis that seems to adhere to the established,\ncommon rules of modern C. Larger projects could potentially\nbe built upon or modelled from this one.\n\n### References\n\n  - _TI_-_83_ _Plus_ _System_ _Routines_, Third Release (Jan. 25, 2002), located [here](https://education.ti.com/html/eguides/discontinued/computer-software/EN/SDK-TI-83-System-Routines_EN.pdf)\n  - _SDCC_ _Compiler_ _User_ _Guide_, SDCC 4.4.1, Revision 14549 (at the time of writing this doc, Jan. 29, 2024), located [here](https://sdcc.sourceforge.net/doc/sdccman.pdf)\n\n### Licensing\n\n  - The source code written for this repo (in the [`src`](./src)) directory is licensed under [_The_ _Unlicense_](./LICENSE).\n  - `Win*`-ported `*nix` tools in [`wbin`](./build/tools/UnxUtils/usr/local/wbin) originate from [UnxTools](https://sourceforge.net/projects/unxutils) and include their own [distribution statements](./build/tools/UnxUtils).\n  - The `Win*`-ported GNUmake is taken from [`ckormanyos/make-4.2.1-msvc-build`](https://github.com/ckormanyos/make-4.2.1-msvc-build).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fckormanyos%2Fti84-ref_app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fckormanyos%2Fti84-ref_app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fckormanyos%2Fti84-ref_app/lists"}