WLA DX - Yet Another GB-Z80/Z80/6502/65C02/6510/65816/6800/68001/6809/
8008/HUC6280/SPC-700 Multi Platform Cross Assembler Package
Included in this release are executables for 68000 and 68020, compiled
using SAS/C v6.58. The full sources are also inside the archive.
For the latest sources: https://github.com/vhelin/wla-dx
v9.9 (15-Aug-2019) [ALL] Added unions: .UNION (and .NEXTU and .ENDU).
[ALL] Added a new syntax to .DSTRUCT (old works, too).
[ALL] Changed the way ".ENUM xyz DESC" works.
[ALL] .ROW and .DATA should now work better with 16-bit
and 24-bit values.
[ALL] Defines with negative values are now parsed better.
[ALL] .BLOCK (and .ENDB) prints the block size once again.
[ALL] Added support for C++ style comments (//).
[ALL] WLA assembles now "WLA4" library files and "WLAV"
[ALL] References to a pending computation from inside a
define from inside a pending computation should work now.
[ALL] WLA can now be given string definitions from the
 Added support for MC6800.
 Added support for MC6801.
 Added support for MC6809.
 Added support for I8008.
 24-bit addresses of RAMSECTION labels should work
now when using .LOROM / .HIROM. / .EXHIROM.
[GB ] Fixed Pocket Camera cartridge type, added support
for 64Mbit ROM and 512kbit RAM types.
v9.8 (21-Jun-2019) [ALL] Deprecated and removed section's size giving inside
section's name string.
[ALL] Getting bank number with :CADDR works again.
[ALL] WLA assembles now "WLA3" library files and "WLAU"
[ALL] .REPEATs, .DBs, .DWs, .DLs and macro calls don't
mess up listfiles any more.
[ALL] Added support for prioritizing sections when
placing them to the output ROM/PRG.
[ALL] The _sizeof_[label]s for labels that are followed by
a dotted .DSB etc. are now calculated correctly.
[ALL] The maximum allowed number of digits for floats is
now 24 instead of the old 8.
[ALL] _sizeof_[label]s are now calculated correctly
for .STRUCTs in .RAMSECTIONs.
[ALL] WLA's -x flag now creates SECTIONSTART_[section name]
and SECTIONEND_[section name] labels for each section.
[ALL] The assembler and the linker now display examples
about how to run them when run with incorrect parameters.
[ALL] .RAMSECTIONs can now be used inside libraries
but BANK and SLOT must be defined for the RAMSECTIONs
under [ramsections] in WLALINK's linkfile.
[ALL] WLA (WLALINK did this already) assumes that there
are 256 RAM banks for each SLOT. The number of ROM
banks doesn't affect the number of RAM banks any more.
[ALL] Added APPENDTO to .RAMSECTIONs.
[ALL] Added .TABLE, .ROW and .DATA - an alternative
to .DB, .DW and .DL.
[ALL] When allocating a new unknown reference, we'll set
its base to 0 instead of not initializing base at all.
[ALL] When inserting padding to a section (for example
for an unsolved 8-bit reference) we now set the padding
to be $CD instead of letting it be uninitialized.
[ALL] References from bank header sections are now found
when we discard unreferenced sections.
[ALL] Fix buffer overflow for xXX strings.
[ALL] Fixed a possible crash bug when printing opcodes
in DEBUG executable.
[ALL] Allow .BACKGROUND file to be smaller than the
[ALL] Fixed a couple possible buffer overflows.
[ALL] Fixed CRC calculating on some 64-bit platforms.
[ALL] Macros rounded all floating point arguments to
integers - not any more.
[ALL] Added support for "string".length.
[ALL] The documentation is now ReadTheDocs.org compatible.
[ALL] Running the assembler/linker without arguments shows
now also the version's date.
[ALL] Added -A to WLALINK - Add address-to-line mapping
data to WLA symbol file.
[ALL] WLA and WLALINK give now more information about the
cause when a memory overwrite/overflow occurs.
[ALL] Added .ADDR (alias of .DW).
[ALL] Updated the dotted to-be-skipped directives list
in .ENUM and .RAMSECTION to contain missing items.
[ALL] .DEFINE now supports keyword EXPORT (auto export).
[ALL] Added .PRINT - a combination and more usable version
of .PRINTT and .PRINTV.
[ALL] .PRINTV's HEX/DEC are optional. Default is DEC.
[ALL] Added .ENUMID - creates definitions with an auto-
incrementing value. Can autoexport as well.
[GB ] Added support for .VERSION (Mask ROM version number).
[GB ] Fixed the handling of RAMSIZE inside of .GBHEADER.
[GB ] New licensee code is set to $0000 if old licensee
code is used.
[GB ] Added VERSION ($014C) to .GBHEADER.
[GB ] Added the following mnemonic aliases:
- LDH A,(C) --> LD A,($FF00+C)
- LDH (C),A --> LD ($FF00+C),A
 Added .DSL.
 Added .FARADDR (alias of .DL).
 Added support for DL/LONG/DSL to .STRUCT and
 Added support for .EXHIROM.
 MVN and MVP had source and destination in wrong
order in the output binary.
[SPC] Fixed a typo, RET1 is now RETI.
[SPC] Fixed a typo, "AND1 mem.bit, C" ($CA) is now
"MOV1 mem.bit, C"
[SPC] Fixed AND1, EOR1, MOV1, NOT1 and OR1 (used to take
two 8-bit arguments, now 13-bit address and 3-bit value.
[SPC] Fixed many 8-bit PC relative label references to be
[Z80] Added shadow register aliases of opcodes that use
registers A, F, BC, DE and HL. For example, "AND A'"
assembles to the same (0xA7) as "AND A". The aliases
are meant for programmers who want to explicitly show
when they are using the shadow registers.
v9.7 (17-Apr-2018) [ALL] We now use CMake instead of plain Makefiles.
[ALL] Added INSTANCEOF support to .STRUCT.
[ALL] Removed DEBUG opcode from GB-Z80.
[ALL] WLALINK now reserves the bytes the checksummer uses
if WLA is used to calculate a checksum.
[ALL] Added ALIGN to .RAMSECTIONs.
[ALL] .RANSECTIONs now use the BANK when placing sections.
[ALL] .BLOCK needs to be now terminated with .ENDB.
[ALL] Fixed some typos in error messages.
[ALL] Added a directory called "bug_exhibition" for
[ALL] When parsing "1.w" the parser now associates the
".w" part with the "1" part.
[ALL] Recursive macro calls with recursive argument
references should work now.
[ALL] .ASC can now map also byte data.
[ALL] Rewrote the macro argument expander.
[ALL] Fixed .INCDIR/.INCBIN cache bug.
[ALL] Added support for -I [include directory].
[ALL] Added ASCII commands to strings.
[ALL] Renamed .SECTION IDENTIFIER to NAMESPACE.
[ALL] Added support for local labels with prefix.
[ALL] "historical" contains now old. depcerated files.
[ALL] Updated WLA/WLALINK argument parser.
[ALL] Sphnix is now used to generate the documents.
[ALL] Various bug, crash and error message fixes.
[ALL] Labels can now be 255 characters long instead of 63.
[ALL] Various fixes to negative range for 8-bit two's
[ALL] Power operator supports fractional values.
[ALL] Expressions are allowed to be outside 16bit range.
[ALL] Added support for _sizeof_[label] automatic
definitions to WLALINK, these measure the distance
between two consecutive labels in bytes.
[ALL] Unreferenced section discarding now handles also
[ALL] It's possible to append to a section using APPENDTO.
[ALL] .IFDEFs can be used in .ENUMs and .RAMSECTIONs.
[ALL] .BASE is now universal, not just 65816 specific.
[ALL] Speeded up label handling in WLALINK.
[Z80] Added .SMSHEADER.
[Z80] Added support for "SUB IXH" and "SUB IXL", and
kept the old aliases "SUB A, IXH" and "SUB A, IXL".
[Z80] Fixed .SDSCTAG parsing.
 Added support for .DL.
[GB ] Added support for .COUNTRYCODE.
[GB ] Added support for .GBHEADER.
[GB ] NO$GMB symbol files are now BGB (emulator)
[GB ] Added support for .NINTENDOLOGO.
[GB ] Added DESTINATIONCODE as an alias for
[GB ] Added support for .ROMGBCONLY.
v9.6 (27-Jan-2015) [ALL] Fixed usage info (was missing -i).
[ALL] Moved the project to GitHub:
[ALL] Renamed local variables in a lot of functions to
make the code easier to understand.
[ALL] Moved LDFLAGS to end of GCC invocation to fix builds.
[ALL] Changed "-pedantic" to "-pedantic-errors -Wextras"
in WLA's and WLALINK's makefiles.
[ALL] Add ability to compile using Microsoft CL, LINK,
and NMAKE / Added makefile generator m4 scripts.
[ALL] Fixed .ROMBANKMAP and .BANKS allocation to prevent
heap corruption when .BANKS allocated exceeds .BANKSTOTAL
[ALL] Added support for more than 255 sections per file.
[ALL] WLA assembles now "WLAW" library files and "WLAL"
[ALL] Added optional running index definition to
.REPEAT / .REPT.
[ALL] The calculation parser in WLA DX is now smarter -
it knows more places when to stop parsing.
[ALL] Feeding address labels via named ARGS to a .MACRO
failed before, because they were interpreted as
strings, not address labels.
[ALL] Changed all references to bash to sh in scripts.
[ALL] Added support for SEMISUBFREE sections.
[Z80] .SDSCTAG & .SMSTAG & .COMPUTESMSCHECKSUM now work
with 8KB & 16KB ROMs.
[Z80] .SDSCTAG's minor version number is now parsed