Subversion of Expectation

Exploration of Technology and Intersections

First Look at LLVM MOS

So let’s take a first look at what it looks like to build with our toolchain. I’ll be running my toolchain through docker on MacOS. Clone or download llvm environment container project under your $HOME address, eg.

git clone https://github.com/tennesseedaved/llvm-mos-docker.git

Source the llvm_env.sh script

source llvm-mos-docker/llvm_env.sh
Starting container...
7cce6ac37368ab94e45a681f39d676a3b9432277780df72211ad849e58f65496

Now, you should be able to access llvm commands by prefixing ‘llvm_exec’

llvm_exec clang
clang: error: no input files

Example Program

We’ll be looking at an example courtesy of Memblers post on https://forums.nesdev.org/viewtopic.php?t=23823https://forums.nesdev.org/ which appears to be a modification of another example done for cc65 compiler. Let’s look at the contents

% ls example11-llvm-mos               
chars.s		ex.bat		example11.c	tileset.chr

Taking a quick look at the contents, we can assume that ex.bat is responsible for the build and check the contents to execute

% cat example11-llvm-mos/ex.bat 
call mos-nes-nrom-clang example11.c chars.s -lneslib -o example11.nes -O3 -flto
pause
example11.nes

We’ll take the call portion of the batch file and execute it within our container.

% cd example11-llvm-mos && llvm_exec mos-nes-nrom-clang example11.c chars.s -lneslib -o example11.nes -O3 -flto
% ls
chars.s			example11.c		example11.nes		tileset.chr
ex.bat			example11.mlb		example11.nes.elf

So just what do we have here.

example11.nesNintendo Image
example11.nes.elfProgram Generated ELF File
example11.mlbMesen Lua Script Bytecode for Debugging

Running the Program

Now, load of the image in your favorite emulator and give it a run!

Leave a Reply

Your email address will not be published. Required fields are marked *