Shells are programs that run other programs. Usually shells are created to put programs into one place and also provide added features that the program and user can use. Shells make it very convenient for users to access all their games in one place. It is also easier to play them because instead of going to the catalog and finding asm( then running the program, they simply enter the shell and find the game. Common shells include:

1) Ion
2) Mirage OS
3) Crunchy OS
4) Doors CS

While programming your game, it is normally preferred that it be compatible with a shell. There are certain instructions you put in your code so that the shell recognizes the programs that it should show.


Ion is a very common shell. The actual program is an assembly program. Note that Ion can not run any programs other than Ion programs.

Here's a common Ion header:

#include    ""
#include    ""
#ifdef TI83P
    .org    9d93-2
    .db    $BB,$6D
    .org    9d95
    jr    nc,main
title:    .db    "Description",0
    ;code starts here

Note that this code works for compiling both 83 and 83+ series programs.

Mirage OS

Mirage OS is an flash application shell. It can only be used on 83+ series calculators, and not 83 calculators. The reason is that the 83 does not have a flash ROM in which to store the flash application. Mirage OS can run Ion programs. Note that Mirage OS can not run regular assembly programs.

Here's a common MirageOS header:

#include    ""                          ;General TI-83 Plus include file
#include    ""                ;MirageOS include file
    .org    $9d93                      ;Origin (set back two to account for AsmPrgm)
    .db    $BB,$6D                          ;Compiled AsmPrgm token
    ret                                  ;So TIOS wont run the program
    .db    1                             ;Identifier as MirageOS program
    .db    %00000000,%00000000         ;15x15 button
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    %00000000,%00000000
    .db    "Description",0                 ;Zero terminated description
                                   ;Program code starts here

    ;main code starts here

The button is the icon you see when your settings on MirageOs are set so that it shows the program picture. This button works like a sprite. See Sprites to learn more.

MirageOS links:

MirageOS homepage
MirageOS developer info (Downloadable zip file)

Crunchy OS

Crunchy OS is as the name implies: it crunches the size of the programs. It doesn't crunch the sizes by itself, but instead uses an application that compresses the file. The code for decompression is located in the actual application. Crunchy OS also has a feature where you can directly compile a program into the flash application. Crunchy OS is capable of running Ion and Mirage OS programs.

Some things to remember about Crunchy OS (taken from Crunchy OS's readme):

  • The start address is $9d93 (progstart-2). This is because of the leak-free program loader, the first two bytes at progstart are the sizebytes for the program.
  • The first line of code of the program should be executable. There are no descriptions, headers, BB,6D's, or anything like that inside the program. (you can still put equates above the code of course)
  • The program is compiled and compressed, then a header is added after the program is compressed.
  • Use asm_cru.bat to compile the program. It handles all the complex steps to compile, compress, and build the header automatically.
  • You must create a .name file, which is a separate file that contains the description of the program. Name the file "", where progname is the base filename of the file you compile, so "myprog.z80" would need "". The format for the line is just like in the code, .db "File Description",0
  • You must define the labels SAVE_START and SAVE_LENGTH to mark where the appvar data starts and stops. If you don't use saves, equate them to 0.
  • Any data that isn't part of a save block is reset on program start.
  • Do not touch cmdshadow, especially not the first 10 bytes.

Crunchy OS header:

#include "" 
#ifndef CRUNCHY\tTitle: #include ""\#endif 
  ;start of program

Please note the Crunchy OS header must look exactly like this, with the exception that "" can be changed to the name you want Crunchy OS to display.

Also note that there is no #include "". All the necessary equates are located in already.

Doors CS

A new shell developed by KermMartian of, Doors CS features many spectacular items not found in the other shells. If features a mouse and icons, so it looks more like your desktop. You can create folders, create sub-folders, etc. Doors CS also has the capabilities to run regular assembly programs, TI-Basic programs, Ion programs, and Mirage OS programs.

As an added bonus, Doors CS is integrated with it's own SDK, allowing the programmer to create better programs in less time.

Header for Doors CS:

The most complicated header of them all, here's a link to the Doors CS header page of the Doors CS SDK.

Other Doors CS links:

Doors CS homepage
SDK documentation
Discussion forum

Unless otherwise stated, the content of this page is licensed under GNU Free Documentation License.