high level programming language and compiler targeting 6502 machines such as the C-64 and CommanderX16
Go to file
2018-01-27 01:07:00 +01:00
il65 improved const var evaluation, more tests, added const_num_val() on certain nodes 2018-01-27 01:07:00 +01:00
tests improved const var evaluation, more tests, added const_num_val() on certain nodes 2018-01-27 01:07:00 +01:00
testsource more semantic checks and codegen 2018-01-23 22:47:35 +01:00
.gitignore var inits 2018-01-13 16:02:41 +01:00
LICENSE Initial commit 2017-12-21 14:42:50 +01:00
mypy.ini attr 2018-01-07 14:38:52 +01:00
README.md expression 2018-01-10 23:45:10 +01:00
reference.md fixed a bunch of issues 2018-01-15 00:46:27 +01:00
requirements.txt optimize, tests, refactor 2018-01-09 00:05:55 +01:00
setup.cfg print parse tree 2018-01-05 02:41:38 +01:00
todo2.ill improved const var evaluation, more tests, added const_num_val() on certain nodes 2018-01-27 01:07:00 +01:00
todo.ill improved const var evaluation, more tests, added const_num_val() on certain nodes 2018-01-27 01:07:00 +01:00

IL65 / 'Sick' - Experimental Programming Language for 8-bit 6502/6510 microprocessors

Written by Irmen de Jong (irmen@razorvine.net)

Software license: GNU GPL 3.0, see file LICENSE

This is an experimental programming language for the 8-bit 6502/6510 microprocessor from the late 1970's and 1980's as used in many home computers from that era. IL65 is a medium to low level programming language, which aims to provide many conveniences over raw assembly code (even when using a macro assembler):

  • reduction of source code length
  • easier program understanding (because it's higher level, and more terse)
  • option to automatically run the compiled program in the Vice emulator
  • modularity, symbol scoping, subroutines
  • subroutines have enforced input- and output parameter definitions
  • various data types other than just bytes (16-bit words, floats, strings, 16-bit register pairs)
  • automatic variable allocations, automatic string variables and string sharing
  • constant folding in expressions (compile-time evaluation)
  • automatic type conversions
  • floating point operations
  • optional automatic preserving and restoring CPU registers state, when calling routines that otherwise would clobber these
  • abstracting away low level aspects such as zero page handling, program startup, explicit memory addresses
  • breakpoints, that let the Vice emulator drop into the monitor if execution hits them
  • source code labels automatically loaded in Vice emulator so it can show them in disassembly
  • conditional gotos
  • some code optimizations (such as not repeatedly loading the same value in a register)
  • @todo: loops
  • @todo: memory block operations

It still allows for low level programming however and inline assembly blocks to write performance critical pieces of code, but otherwise compiles fairly straightforwardly into 6502 assembly code. This resulting code is assembled into a binary program by using an external macro assembler, 64tass. It can be compiled pretty easily for various platforms (Linux, Mac OS, Windows) or just ask me to provide a small precompiled executable if you need that. You need Python 3.5 or newer to run IL65 itself.

IL65 is mainly targeted at the Commodore-64 machine, but should be mostly system independent.

See the reference document for detailed information.