Multi-Platform Language for Calcs (MLC)

This article is under construction and needs to be completed. You can help by expanding it.



Multi-Platform Language for Calculators


Cross-calculator programming language designed to replace TI-Basic and Casio Basic on all major TI and Casio calculators as the primary language for on-calc programming.


Epic Programming Studios


Release Date


TI-83+, TI-86, Casio


Multi-Platform Language for Calcs (MLC) was a cross-calculator programming language that was developed by the Epic Programming Studios (EPS) group. It was designed to replace TI-Basic and Casio Basic as the language of choice for on-calc programming. It had several advantages over the built-in languages including speed, portability, functionality, and size. Simply put, it allowed you to make assembly-quality games without all of the assembly.

(Taken from MLC homepage)

The Multi-Platform Language for Calcs

So, your a programmer, maybe you are just starting and are peaty good at BASIC, or maybe your a pretty good ASM or C programmer that wants to be able to program on your calc? Are you bored as heck in math class and itching for cool games to play?

MLC is for you

MLC is the first and only programming language built to be a calculator gaming language, not only that, but it is on-calc programmable, using the native BASIC editor already on your calc! Here's a point-by-point list of what MLC is and what it can do:

  • MLC is FAST, very fast; There is no comparison to BASIC in terms of speed, it is only surpassed by C/ASM.
  • MLC is powerful: its built as a gaming language, not as a pitiful excuse for a language like BASIC… its still interpreted, but we've gone to great lengths to make sure that it is as fast as possible. MLC features grayscale, sprites, strings, bitmaps, scrolling, etc… everything you could ever want to make a game.
  • MLC is portable: this means two things really, the first is that it is on-calc programmable, something that was a major goal of MLC. Second, it means that MLC can be used on many different types of Calculators (Casio, Ti, and HP), a feature never before seen in Calc development. A Ti programmer can make a game in MLC that will run on a Casio, and vice versa… This single fact makes MLC have the largest number of possible developers in the history of Calc programming, nothing else even comes close.
  • MLC is independent: MLC is a user product, its not developed by Casio, Ti, Hp, or any other company, EPS consists of some of the best programmers in the Casio and Ti community (and hopefully HP soon ;) ), and the independent programmers that are working with us have impressed us with their skills and ideas.
  • MLC is made by the people that use it, almost all of our team not only develops MLC, they also use it to make games, even the most experienced programmer cant be at a computer 24/7, but a calc will fit in your pocket. :)

MLC is a product of EPIC PROGRAMMING STUDIOS, a group of programmers dedicated to excellence and professionalism.

EPS Reserves all rights to MLC and all of its other products, if you would like to work with us or have ideas to contribute visit our forums.
Written permission is required to change any of our products in any way (a post on our forum constitutes "Written Permission")

Product Screenshot

(Screenshot of Product)

Significance of Product

  • Why product was important to TI community
  • Any controversy or interesting circumstances surrounding product
  • Awards won, fond memories that people have


(Taken from MLS Readme)

Multi-Platform Language for Calculators

1. Introduction

The Multi-Platform Language for Calcs, or MLC
is a project of Epic Programming Studios. Our
goal was to create a Language to replace BASIC
on all major CASIO and TI calculators as the
primary language for on-calc game programming.

MLC is not yet a finished product (see version
history) but it already surpasses the abilities
of BASIC to create games of quality speed and

MLC supports 4 levels of color which can be
used with any of the graphical commands, as
well as inversion. Also, MLC is double buffered
and the screen is updated only when the #DRAW
command is used, something important that is
missing from BASIC.

2. Technical Details

MLC uses a 96x64 area for its display, this
is done so that MLC will display properly on
all calcs we plan to make it for, the colors
are also limited to: White, Light-Gray, Dark-Gray,
and Black (represented by the numbers 0-3, with 4
as Invert). The run speed on some calcs has also
been artificially dropped to match the lowest speed
we've done this to make sure all games run equally
well on all calcs.

(NOTE: MLC now allows the calcs with larger screens
to use their full screen size, however, it is
considered bad coding practice to use this area
for anything required to play a game, it should
be used for things like game names, score display,

The keyboard layout and keycodes have also been
altered to suit our needs. to find the keycode
use 10*row+column, but note that some keys are not
in the correct place. use the PC emulator to
determine the correct placement. Also, some keys
have been removed and you will not be able to use
them, these keys will be used to control the MLC

3. Operators

PREFIXES: these are placed before their data type
or a command.

# - MLC command
% - Integer Variable
. - Number
$ - String Variable (not supported yet)
@ - Array Variable
[ - Bitmap
^ - Sprite

LOGICAL SYMBOLS: These are used in IF statements,
to determine a condition.

= - Equals
! - Unequal To
< - Less Than
> - Greater Than
& - Implication

MATH OPERATIONS: These are used to perform basic
math operations on data, they can

be used inside of commands or on
separate lines. (order of operations
is from left to right)

+ - Addition
- - Subtraction
* - Multiplication
/ - Division
| - Modulus

4. Commands

Here is a list of all currently supported commands:
(some commands may be marked as being supported by only some models,
these will become available on other models ASAP)


#CLRS - Clears the screen
#TEXT - Displays text
#LINE - Draws a line
#PIXL - Draws a pixel
#PIXT - Stores in the color at (x,y)
#DRAW - Updates screen
#SHFT - Used for scrolling, specifies looping state (-1 = Loop, 1-3 standard colors)
#STOP - abbr. for Store Picture (saves all color layers)
#RCLP - abbr. for Recall Picture, shows the last pict saved with #STOP
#RECT - Draws a rectangle in either a filled un unfilled state (.5 for no fill)
#DBMP - Displays a bitmap a (x,y)
#DISP - Displays a sprite at its stored position


#GKEY - Stores 1 to if key is pressed and 0 if it isn't
#WKEY - Waits for a key (which is store to var)
#PAUS - Waits for Enter/EXE key


#FNCT - Function declaration
#FRUN - Calls a function
#FEND - Returns from a function
#FGOB - Returns to beginning of current


#IIFF … - If condition is true next line is executed
otherwise it's skipped (now you can use & to add conditions)

#DATA - Begins the data section, which contains all compile time instructions, bitmaps, etc.
#DEND - Marks the end of the data section
#BITM - defines a bitmap of size 8 (8x8) or 16 (16x16), the following 3 lines are the bitmap's data


#SPRT - (ti86 only) Creates a sprite and assigns a bitmap to it
#CLSN - (ti86 only) Detects if two sprites are touching (compares masks)
#ARRY - Defines an array of elements (currently, ints only)
#RNDM - Creates a random number from to and stores to
#HALT - Stops execution
#WAIT - Stops program for a while


#WRTE - writes contents of var to current program's data file at specified position
#READ [file position] [varname] - reads the data at specified position in the file, and stores it in var

6. Graphics in MLC

In MLC there are vast differences from any version of BASIC currently
on any calculator I'm aware of, here's a brief synopsis of MLC graphics
for the recently converted.

MLC uses a 4 color display, consisting of WHITE, LIGHT-GRAY, DARK-GRAY,
and BLACK. All graphical commands in MLC can use these colors to produce
much more complex graphics than BASIC. The typical standard in MLC is that
0=WHITE, 1=LIGHT-GRAY, 2=DARK-GRAY, 3=BLACK, and 4=INVERT. Some MLC commands
might stray from this slightly, but not by much (and it will be noted in the


There may be some confusion between Bitmaps and Sprites and MLC. what's
different about them? We'll, first off a Sprite uses a bitmap as its visual
representation, but it has additional features that make it useful for other
things than just displaying a picture:


Sprites in MLC currently have 3 "properties":

X - Contains the X position of the sprite
Y - Contains the Y position of the sprite
BMP - Contains the name of the sprite's bitmap

You can access a Sprite's properties like this: (Sprite name is "SHIP")


So a sprite actually consists of 2 integers and a bitmap.

Sprites also have access to a few additional functions:

#CLSN - if the visible parts of two sprites are touching it returns .1 (this
would be a huge pain to do by hand ;> )
#DISP - this is better than DBMP because you don't have to specify the (x,y)
coordinates .


Bitmaps are just that, they are made solely for the purpose of displaying, a
picture, handy, but not as effective as sprites for moving characters in a
game, plus you'll need to keep track of their position yourself.

7. Credits

4nic8 (gro.clacoisac|8cin4#gro.clacoisac|8cin4)
[MLC interpreters for AFX/Graph100 and TI 89/titanium/92/+/voyage 200,
PC emulator and AFX on-calc Sprites Editor]

Burntfuse (ude.dmu.ibmu|yenarts#ude.dmu.ibmu|yenarts )
[MLC Ti86 Interpreter, Games, Ideas]

Madskillz (ten.retrahc|allapusjt#ten.retrahc|allapusjt / moc.liamtoh|8815edudedurc#moc.liamtoh|8815edudedurc)
[MLC Ti-83+ Interpreter]

The Unknown One (moc.liamtoh|6791_eno_nwonknu#moc.liamtoh|6791_eno_nwonknu)
[Ti-83 Intemperate, Testing, Web Development]

CrimsonCasio (moc.egrofhtrae|oisacnosmirc#moc.egrofhtrae|oisacnosmirc)
[PC Sprite Maker, Documentation, MLC progs, Ideas, Support, Web Design]

Dysfunction (moc.oohay|61gythgim#moc.oohay|61gythgim)
[Ideas, Support]

[Lead Tester, Games, Ideas]

7. Current Versions


- Casio Algebra FX:
MLCafx 1.0 beta 1 (first release)

- TI 86:
MLC86 first release version

- PC:
MLCpc v. 0.97


- Casio Algebra FX:
on-calc Sprites Editor 0.6 (beta 2)

- PC:
Sprites Maker 1.0

Development History

  • A chronological overview of the product's development


Related Products

  • List of related products