Build tools, tiny C library, etc. for gcc-6502 port.
Install the cc65 compiler suite
Most Linux distributions have a prepackaged cc65, but often it is outdated. Should you run into issues, build the latest version from https://github.com/cc65/cc65.git
Install the prerequisites for building GCC
For Debian-based distros:
# apt-get build-dep gcc-4.8
For RedHat-based distros:
# yum install -y gcc gcc-c++ mpfr-devel gmp-devel libmpc-devel flex
Install Boost development libraries
For semi65x (the included simulator), you also need Boost development libraries:
For Debian-based distros:
# apt-get install libboost-dev libboost-regex-dev
For RedHat-based distros:
# yum install -y boost boost-devel
Install DejaGNU (optional)
For running the GCC regression tests you will need to have DejaGNU installed:
For Debian-based distros:
# apt-get install dejagnu
For RedHat-based distros:
# yum install -y dejagnu
This is a work-in-progress compiler, and many bugs remain. You can build code for semi65x (the included simulator), and limited support also exists for Acorn BBC Model B or Master computers (you may see some references to the C64, but that's not properly implemented yet). Adding support for other systems shouldn't be too hard - contact me if you'd like to try that!
Check out this repository recursively:
$ git clone --recursive https://github.com/itszor/gcc-6502-bits.git
Now build by running the build.sh script, e.g. as:
$ ./build.sh 2>&1 | tee build.log
The default location for cc65 binaries is in /usr (so ca65, ld65 and so on are present in /usr/bin/ca65, etc). If installed in another location, set the CC65_PATH variable to the path where the binaries exist. For example:
$ CC65_PATH=/usr/local/cc65/bin build.sh ...
After a while, you should have a 6502 cross-compiler in a directory named 'prefix'.
Set your PATH to include prefix/bin:
$ export PATH=`pwd`/prefix/bin:$PATH
Now use the compiler like any other cross-compiler:
$ 6502-gcc helloworld.c -O2 -o helloworld
If you build the enclosed simulator (needs Boost, cd semi65x && make) you can run the generated code:
$ semi65x/semi65x -l 0x200 ./helloworld
Hello world
$
To compile for other supported systems, e.g. the BBC Master computer, you can use a command like:
# 6502-gcc -mmach=bbcmaster -mcpu=65C02 -O2 hello.c -o hello
By default, the compiler will use a software stack that starts at a suitable location for use in MODE 7 (i.e. 0x7BFF downwards). To use another screen mode or stack address, set the stack top at link time like this:
# 6502-gcc -mmach=bbcmaster -mcpu=65C02 -O2 hello.c -Wl,-D,__STACKTOP__=0x2fff -o hello
The program start address will be set to 0xe00 for the Master, or 0x1900 for the Model B. You can probably use other load addresses if you supply your own linker script.
To obtain a memory map of the final executable from the linker, use a command such as:
# 6502-gcc [...] -Wl,-m,hello.map
The semi65x simulator can read this map file in order to display symbolic addresses in trace output, which might be helpful for debugging.
If you built semi65x, you can run GCC regression tests using:
$ ./check.sh
Results will appear in a directory like testresults-date-sequence. Results so far (2014-04-16) should look something like:
=== gcc Summary ===
# of expected passes 62283
# of unexpected failures 4165
# of unexpected successes 1
# of expected failures 104
# of unresolved testcases 2543
# of unsupported tests 2340