WLA DX - Yet Another WLA GB-Z80/Z80/Z80N/eZ80/6502/65C02/65CE02/65816/68000/6800/6801/
6809/8008/8080/HUC6280/SH-2/SPC-700/SuperFX/Cx4 Multi Platform Cross Macro Assembler
Package
Included in this release are executables for 68000, 68020 and 68040, compiled
using SAS/C v6.58. The full sources are also inside the archive.
For the latest sources: https://github.com/vhelin/wla-dx
CHANGELOG:
Assemblers:
v10.7 (28-Jun-2026) [ALL] Prefixed by a hashtag didn't propagate through nested
.MACRO calls.
[ALL] Listfile creation for library files should now work.
[ALL] If an object file contained only .SECTIONs in ROM
bank X then ROM bank X's allocation info wasn't printed with
-v switch.
[ALL] .FOPEN uses now directories given with -I flag.
[ALL] BANKS for .SECTION can now be a string definition.
[ALL] Quoted string arguments can be used in .MACROs to replace
e.g., registers on lines with instructions.
[ALL] A label outside .SECTIONs or inside FORCE or OVERWRITE
.SECTION given to a .MACRO can now be used in calculations as
long it has been defined earlier lexically.
[ALL] Added parameterless versions of bankbyte(), base(), slot()
and bank(). bankbyte(label) and bank(label) can be used in .IFs.
[ALL] Added built-in functions is(), get(), org(), orga(),
substring(), definedfunction(), definedmacro(), blank(), match(),
xmatch(), tcount(), left(), mid() and right().
[ALL] Added .DELMACRO and .DELFUNCTION for deleting macros and
functions.
[ALL] Added LATESTDIR and RELATIVEDIR to .INCLUDE and .INCBIN.
[ALL] Jump in .ENDR added offset of 1 for line numbers in errors.
[ALL] Added START and STEP to .REPEAT/.REPT.
[ALL] Added DEFAULTSECTIONSLOT and DEFAULTRAMSECTIONSLOT to
.MEMORYMAP.
[ALL] .FAIL can process multiple strings.
[ALL] When using -h operand hints like .b for labels work now.
[ALL] .STRINGMAPTABLE uses now directories specified with -I.
[ALL] .BASE can once again given inside a .SECTION. NOTE: The
old .BASE before the .SECTION is returned after .ENDS.
[ALL] Implemented missing base(label).
[ALL] Fixed an issue with -h flag and defines in some
instructions being interpreted early as labels.
[ALL] Fix to .MACRO parsing when using ARGS.
[ALL] When an error occurs we print the whole call stack instead
of just the file name and line number where it happened.
[ALL] 16-bit PC references were not enabled for all supported
CPUs (like 6809) in listfiles.
[ALL] Added new operand hint '.#b' - 8-bit zero page; It's the
same as .b, but it also takes the lowest 8 bits of the operand.
[ALL] .STRUCT member names b, w, d and l are now forbidden as
when referencing them the assembler would confuse the
references with size hints.
[ALL] A function can also be now defined using .DEFINE.
[ALL] .ASSERT can now be postponed to link time.
[ALL] WLA assembles now "WLAJ" library files and "WLAm"
object files.
[eZ8] Added support for Zilog eZ80 CPU (with .ADL directive).
[Cx4] Added support for Cx4 (Capcom Custom Chip 4) CPU/DSP.
[SH2] Added support for Hitachi SH-2 CPU.
[SH2] Added initial Sega 32X memory maps and include files.
[6**] .b and .w now override .8bit and .16bit.
[658] Fixed BRL and PER to work properly.
[658] Added a warning when .ACCU or .INDEX directives override
a width that was set by rep/sep instructions (use -v to see
these).
[68k] Added alias SP for register a7.
[68k] BCLR, BSET and BTST used wrong range [1, 8] / [1, 32] for
bits, fixed to [0, 7] / [0, 31].
[68k] Removed automatic MOVE to MOVEQ, ADD to ADDQ and SUB to
SUBQ optimizations as correctness is more important.
[68k] Added missing instructions: BCHG.B, BCHG.L, BCLR.B,
BCLR.L, BSET.B, BSET.L, BTST.B, BTST.L, CHK.W, NBCD.B, TAS.B.
[68k] Added .NGHEADER, .ENDNG, .NGSOFTDIP, .ENDNGSOFTDIP,
.NGVECTORS and .ENDNGVECTORS for Neogeo development (and
examples/neogeo and include/neogeo).
[68k] Added Sega Mega Drive/Genesis and Sega CD support:
.MDVECTORS, .MCDHEADER, .MCDSPHEADER, memory maps and
include files.
[650] Fixed STX and STY parsing.
[650] Added .INESHEADER and .ENDINES.
[65C] Added .LYNXHEADER and .ENDLYNX.
[689] Added space-after-the-instruction versions of instructions
with zero offset indexing, e.g., "LDA ,X" (old: "LDA,X").
[68x] Instructions that take 8-bit immediate values can now take
anything that fits into eight bits.
[808] Added "MOV M,M", an alias for "HLT".
[800] Fixed "LMI"'s opcode to $3E (was $2E).
[800] Added "LAA", an alias for "NOP".
[800] Added "MOV" versions of the move instructions.
Linker:
v5.22 (28-Jun-2026) When calculating _sizeof_* for labels we now take unused
output bytes into account.
Appended .RAMSECTIONs were still affecting the original
RAM bank in -v listing.
Use -sE to write EQU symbol file (e.g., for openMSX).
Fixed the calculation of Sega Mega Drive ROM checksum.
Added -C which doesn't generate errors for duplicate
labels or definitions, but only when their values
are the same.
Fixed a possible buffer overflow read when generating
listfiles.
Global references from an isolated .INCLUDE should
now work.
Added support for Commodore 64 cartridge types (via
-64): NORMAL4K, NORMAL8K, NORMAL16K, ULTIMAX4K,
ULTIMAX8K, ULTIMAX16K, OCEAN, MAGICDESK, EASYFLASH,
SIMONSBASIC, EPYXFASTLOAD, C64GS, COMAL80, GMOD2,
RGCD and GMOD3.
Added -E for writing debug exports (VICE, RGBDS, MESEN,
EMULICIOUS, CSPECT, NOCASH, MAME and JSON).
.ASSERT can now be postponed to link time.
Added -sM for writing MAME compatible flat symbol file.
Added -O (BIN, SMD, MD) Mega Drive output ROM file
format.
Added support for Hitachi SH-2.
Added -g for writing list files where the object
files are.
|