The XPL0 Programming Language

XPL0 is a small, fast, block-structured programming language with the look of Pascal and much of the low-level freedom of C. It was created in 1976 for the 6502 and has since been ported to many different computers.

XPL0 is still useful for learning, experimenting, writing games and graphics, and understanding how programs and compilers work. The language, compilers, examples, and source code on this site are free.


Choose a Version

MS-DOS

The classic 16- and 32-bit PC versions of XPL0, along with material for some older computers. The DOS versions can also be run on modern systems with DOSBox.

Raspberry Pi

XPL0 for the Raspberry Pi, with the compiler, runtime support, examples, graphics, and other Raspberry Pi material.

Windows

The current native-compiled 64-bit version of XPL0 for Windows 7 through Windows 11, with Windows graphics, sound, and example programs.

Each version has its own page with downloads, documentation, examples, and information specific to that system.


News

PolyToy

PolyToy

Explore polynomial curves interactively with PolyToy, a simple demo program that runs on Windows, Raspberry Pi, and MS-DOS.

It plots equations up to the fifth degree. Change the coefficients, watch the graph move, and see the roots where the curve crosses the X axis. Sometimes seeing the equation is better than solving it.

Download POLYTOY.ZIP (56k, 01-Jul-2026).



About XPL0

XPL0 stands for eXperimental Programming Language level Zero. The name is kept for historical reasons; the language has been in practical use for decades. It is based on PL/0, Niklaus Wirth's example compiler in his book Algorithms + Data Structures = Programs.

XPL0 was originally created in 1976 by Peter J. R. Boyle, who designed it to run on a 6502 microprocessor as an alternative to BASIC. The story surrounding its early history is here.

Over the years XPL0 has been used for operating systems, commercial PC programs, embedded firmware, games, graphics, utilities, and many other projects. Versions have run on processors including the 6502, 8080, 6800, PDP-10, IBM-360, 65802, 680x0, PIC, Ubicom, and the 80x86 family.

XPL0 is deliberately smaller than mainstream languages, but it is not crippled. It is block structured and supports recursion, integer and double-precision floating point arithmetic, pointers, complex data structures, unlimited-dimensional arrays, separately compiled modules, conditional compilation, inline assembly code, graphics, transcendental routines, generalized device I/O, and up to seven levels of procedure and function nesting.

A Small XPL0 Program

Here is a complete program that displays animated ripples.

Moving ripples example
 int X, Y, Z;
 [SetVid($111);             \set 640x480x16 graphics giving 65536 colors
 repeat  for Y:= 0 to 479 do
             for X:= 0 to 639 do
                 Point(X, Y, (X*X + Y*Y + Z)>>5);
         Z:= Z - 127;       \gently move ripples
 until KeyHit;
 ]

More examples of simple XPL0 programs are here.


More About XPL0

If you're familiar with C, Pascal, or FreeBASIC, this comparison chart may help show how XPL0 relates to those languages.

Hugi Magazine has a couple of articles showing how to make demoscene programs with XPL0.

A fully Windows-compatible distribution of XPL0 called EXPL is available at fountainware.com/EXPL.

XPL0 is provided under the terms of the Free Software Foundation's General Public License, Version 2. All downloads from this site include source code and are completely free.


This site is maintained by Loren Blaney. If you have any feedback, programs you'd like to see, or especially bug reports, he'd be glad to hear from you. loren (dot) blaney (at) gmail (dot) com.

Last update: 19-Aug-2026