ASMotor General Information

Table of Contents


The ASMotor package (xAsm, xLink, RGBFix, examples and documentation) is freeware and distributed as is. The author retains his copyright and right to modify the specifications and operation of the software without notice.

In other words this means I encourage you to...

This also means you can't...

I am happy to say that xAsm and xLink use PMODE/W as DOS-extender for the MS-DOS port! This means fast assembling of your sourcecodes. A lot faster. PMODE/W is a drop-in replacement for the bulky DOS4GW. If you are a programmer you should check out
"PMODE/W is Copyright (c) 1994-1997, Charles Scheffold and Thomas Pytel. All rights reserved."

The Author

Any questions? Write me!

Carsten Sorensen
1 Spring Court
Surrey GU2 6QW
United Kingdom

e-mail: (private) (work)

Get the latest version from my web page at


ASMotor is a package currently consisting of three programs (xAsm, xLink and RGBFix) originally designed for development on the Gameboy hand-held video-game console by Nintendo but recently it has moved towards being a target independent shell for making development of new assemblers for different processors easier.
xAsm is a decently fast assembler (up to 800000 lines/minute (hrm well actually that's for 16384 lines of NOP's ;) on a P-120). It converts an assembler source into the RGB object-fileformat.
xLink is used to link multiple (one or more) object files together into one target file eg. a Gameboy ROM or Psion2 relocatable module.
RGBFix is used to apply some final cosmetic details to a Gameboy ROM-image.

This document does not try to teach you how to program in assembler, how to program a specifix processor or the Gameboy. It does just briefly explain the features of xAsm and xLink. Sometimes I will assume that you have actually worked with assemblers before and that you are familiar with the target processor.

Why another assembler? There seems to be millions out there! This project started out as a Gameboy assembler because none of the available assemblers had the features I wanted. Now the reason is I want to make the most powerful assembler. Ever ;) And I want to be able to re-use it easily whenever I encounter a new system with another processor. Don't like it? Something you'd like to see added? Mail me and I'll see what I can do.

The assembler and linker are written entirely in ANSI C using Bison for the parser. I try to maintain two pre-compiled ports of ASMotor, one for the MS-DOS environment and one for Linux. Bison is a GNU tool (compiler-compiler) tailored to aid in the development of compilers which you will need if you want to compile it afresh.


Anywhere on your HD will do. For maximum enjoyment I recommend adding the directory to your path. Alternatively you can run it from a floppy.

The Documentation

The documentation only comes in one flavour. HTML. This has several advantages for me


The history of ASMotor
Version Dated Release notes
1.0 03 July 1997 First release
1.01 20 July 1997 RGBDS fixes:
RGBFix can now also truncate the ROM-images to a valid size.
RGBAsm supports the LDD and LDI syntax plus [HLD] and [HLI]. LDH is synonymous with LDIO.
Example filenames have been changed to adhere to Jeff Frohweins proposed standard.
General fixes:
RGBLink knows about big and little endian. Plus it can do range checking on intermediate results in an expression. This is necessary to support different types of CPUs.
RGBLink DIDN'T know about the special PC symbol "@" so if you used it more than once per sourcefile in an expression the linker had to resolve, things would go horribly wrong.
There was a bug in the macro parameter passing. Any whitespace after the last parameter would be appended to the last parameter. Reported by Jeff Frohwein.
A section stack has been implemented. Look up POPS and PUSHS in the manual. Jeff Frohweins doing again.
OPT command added for defining and changing some options while assembling.
You can now define which characters are used for the Gameboy graphics integer (`) using the commandline or the new OPT command. Cool idea by (surprise surprise) Jeff Frohwein.
Also, an option stack has been added. Look up POPO and PUSHO in the manual.
Fixed yet another line number bug reported by Jeff Frohwein (when will this guy leave me alone? ;)
1.02 22 July 1997 General fixes:
The lamest typo bug of all time has been fixed. RGBAsm would output a word defined with DW as 4 bytes instead of 2. Jeff Frohwein reported this.
The first line of an included file didn't assemble correctly.
-b option added for setting the characters used for binary constants.
1.10 21 Sep 1997 General fixes:
The assembler would crash if you tried to use a macro symbol in an expression. (Jeff Frohwein)
You couldn't use STRCMP, STRLEN and STRIN in relocatable expressions. (Harry P. Mulder)
Relocatable symbols are no longer allowed as arguments to the DEF function.
Finally! A librarian and smart linking has been added.
Bug fixed in the assembler where it would sometimes write out too many bytes for HRAM section definitions.
-z options (set fill value used for uninitialised data) added to the assembler and linker.
The assembler will now read in any type of ASCII file on any type of OS.

Last updated 08 October 1997 by Carsten Sorensen