C syntax compiler optimized for the 6502 microprocessor
Go to file
Curtis F Kaylor 0ff3924e27 Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
apple1 Removed obsolete header file apple1/oldclude/apple1.h 2018-01-28 15:02:49 -05:00
doc Renamed stdio functions to match C standard 2018-02-02 16:33:57 -05:00
include Added new function definitions to stdiox.h02 2018-02-03 12:43:05 -05:00
py65 Added Left and Right Justified Decimal to stdiox.a02 2018-02-02 18:37:19 -05:00
test Added generic C02 test programs test/* 2018-01-28 14:47:06 -05:00
vcs Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
vic20 Added VIC-20 specific C02 compile scripts vic20/c02.bat and vic20/c02.sh 2018-01-28 14:38:11 -05:00
.gitignore Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
README.md Created README.md 2018-01-28 14:06:08 -05:00
asm.c Numerous modifications 2017-06-26 20:16:23 -04:00
asm.h Save entire project before changing condition parser to use JMP 2017-04-22 14:39:52 -04:00
asm6502.c Numerous modifications 2017-06-26 20:16:23 -04:00
c02 Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
c02.bat Added DOS batch, Bash script, and Notepad++ language files 2018-01-28 13:43:17 -05:00
c02.c Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
c02.exe Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
c02.lang Added DOS batch, Bash script, and Notepad++ language files 2018-01-28 13:43:17 -05:00
c02.ppj Added Pelles C IDE project files 2018-01-28 13:32:49 -05:00
c02.ppx Added Pelles C IDE project files 2018-01-28 13:32:49 -05:00
c02.sh Added DOS batch, Bash script, and Notepad++ language files 2018-01-28 13:43:17 -05:00
c02.tag Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
c02prg Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
clean02.bat Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
clean02.sh Added cleanup scripts clean02.bat and clean02.sh 2018-01-28 14:57:18 -05:00
common.c Save entire project before changing condition parser to use JMP 2017-04-22 14:39:52 -04:00
common.h Updates to compiler header files 2018-01-28 13:38:17 -05:00
common.h.gch Cleaned up VCS files and patched C02 to use relative /include directory 2018-02-03 13:22:39 -05:00
cond.c Numerous modifications 2017-06-26 20:16:23 -04:00
cond.h Implemented do, while, and for 2017-04-30 21:17:50 -04:00
expr.c Fixed bug with constant parsing and array indexes. 2018-01-28 13:27:33 -05:00
expr.h Numerous modifications 2017-06-26 20:16:23 -04:00
files.c Save entire project before changing condition parser to use JMP 2017-04-22 14:39:52 -04:00
files.h Save entire project before changing condition parser to use JMP 2017-04-22 14:39:52 -04:00
include.c Fixed bug with constant parsing and array indexes. 2018-01-28 13:27:33 -05:00
include.h Numerous modifications 2017-06-26 20:16:23 -04:00
label.c Numerous modifications 2017-06-26 20:16:23 -04:00
label.h Numerous modifications 2017-06-26 20:16:23 -04:00
parse.c Fixed bug with constant parsing and array indexes. 2018-01-28 13:27:33 -05:00
parse.h Updates to compiler header files 2018-01-28 13:38:17 -05:00
stmnt.c Fixed bug with constant parsing and array indexes. 2018-01-28 13:27:33 -05:00
stmnt.h Numerous modifications 2017-06-26 20:16:23 -04:00
test.asm Initial commit of c02.c and test.asm 2017-03-28 00:09:18 -04:00
vars.c Fixed bug with constant parsing and array indexes. 2018-01-28 13:27:33 -05:00
vars.h Updates to compiler header files 2018-01-28 13:38:17 -05:00

README.md

C02

C02 is a simple C-syntax language designed to generate highly optimized code for the 6502 microprocessor. The C02 specification is a highly specific subset of the C standard with some modifications and extensions

Purpose

Why create a whole new language, particularly one with severe restrictions, when there are already full-featured C compilers available? It can be argued that standard C is a poor fit for processors like the 6502. The C was language designed to translate directly to machine language instructions whenever possible. This works well on 32-bit processors, but requires either a byte-code interpreter or the generation of complex code on a typical 8-bit processor. C02, on the other hand, has been designed to translate directly to 6502 machine language instructions.

The C02 language and compiler were designed with two goals in mind.

The first goal is the ability to target machines with low memory: a few kilobytes of RAM (assuming the generated object code is to be loaded into and ran from RAM), or as little as 128 bytes of RAM and 2 kilobytes of ROM (assuming the object code is to be run from a ROM or PROM).

The compiler is agnostic with regard to system calls and library functions. Calculations and comparisons are done with 8 bit precision. Intermediate results, array indexing, and function calls use the 6502 internal registers. While this results in compiled code with virtually no overhead, it severely restricts the syntax of the language.

The second goal is to port the compiler to C02 code so that it may be compiled by itself and run on any 6502 based machine with sufficient memory and appropriate peripherals. This slightly restricts the implementation of code structures.