As it happens, while I was working on an assembly project, I ran into some shortcomings that I tried to fix in this new release.
There was no way to just allocate bytes in memory, without actually writing data into the virtual memory. This normally isn't a problem in Commodore 64 projects, but in Gameboy projects the code is in ROM and the RAM is separated from it. Even though the ROM builder would ignore those bytes, words and arrays that you'd put between $c000-$dfff, it's not too elegant to write the code that way. Now it's possible to just allocate bytes these ways:
- The directives .align and .storage now only allocate bytes in memory, if the Filler byte parameter is not set.
- The directives .byte, .word and .dword can allocate bytes in memory, when the value is set to ?
//Example RAM .org $c000 ButtonState .byte ? Buffer .storage $20
Other changes, some were made in version 2.2.1
- New directive .end added. It terminates the source code loading at that line, the rest of the lines are ignored.
- Boolean values true and false now work everywhere where you expect them to work, such as in directives like .equ, .var, .if, .while, and also in .macro arguments and their default values.
- Using of single character Labels is allowed (used to be forbidden), as long as it's not a match to a Register name in the selected CPU type. For example you can't use a / x / y as label names in 6502 code, but b / c / d are allowed.
- Functions made by the .function directive no longer require brackets for the function definition, but they are still needed for the function call. It's just for alternative formatting.
See the documentation for details.
Download the latest version from the Retro Assembler page!