Ancient | All the Same | ATOFont | Drawings | Flash | Lecherous Gnomes | Me | Nintendo DS | PPM | PSP | Rumor Engine | S3TC-BOXEN | Tests | Tile Driller | VSOFont | WLA DX | Wzonka-Lad

WLA DX - Yet Another GB-Z80/Z80/6502/65C02/6510/65816/HUC6280/SPC-700 Multi Platform Cross Assembler Package
Written by Ville Helin in 1998-2008


Sexy Mofo!


Features:
  • Fast
  • SNES support
  • SMS/GG support
  • Gameboy support
  • PC-Engine support
  • NO$GMB symbol file writing
  • Support for object and library files
  • You can patch ROM images with code
  • WLA GB-Z80 disassembler included
  • Numerous ways to comment code away
  • ROM image and program file compiling
  • Multilevel macros (actually, functions)

  • Compiles code for the following CPU's:
  • 6502 (NES, etc.)
  • 65C02 (VIC-20, etc.)
  • 6510 (C64, etc.)
  • 65816 (SNES, etc.)
  • GB-Z80 (Game Boy)
  • HuC6280 (PC-Engine)
  • SPC-700 (SNES sound chip)
  • Z80 (GG, SMS, MSX, Spectrum, Ti86, etc.)

  • ... on the following platforms:
  • AmigaOS 1-3 (680x0)
  • AmigaOS 4 (PPC)
  • Linux
  • MSDOS
  • Un*x
  • Win32

  • Sources (it's best to grab the latest):

    GitHub repository! The development continues there...

    WLA DX 9.5a (.tar.gz) 14-Aug-2008
    WLA DX 9.4 (.tar.gz)
    WLA DX 7.8 (.tar.gz) Unsupported 7.x -tree


    Binaries (UNSUPPORTED):

    Win32 (link)


    Documentation:

    README
    CHANGELOG
    WLA File Formats


    Mnemonic lists:

    6502 (alphabetical, opcode)
    65C02 (alphabetical, opcode)
    6510 (alphabetical, opcode)
    65816 (alphabetical, opcode)
    GB-Z80 (alphabetical, opcode)
    HuC6280 (alphabetical, opcode)
    SPC-700 (alphabetical, opcode)
    Z80 (alphabetical, opcode)


    Example sourcefiles (GB-Z80):

    A simple scroller (.tar.gz)
    A simple parallax scroller (.tar.gz)


    Useful sourcefiles (GB-Z80):

    GBComp (.zip) by Sam Nova
    PacBoy (.tar.gz) by Aleksi Eeben
    PacGirl (.tar.gz) by Aleksi Eeben
    Many useful GBC routines (.tar.gz) by Ville Helin
    M4x4 (C2P/GBC) (.tar.gz) by Ville Helin
    SM4x4 (Static C2P/GBC) (.tar.gz) by Ville Helin
    C4x4 (288 Color C2P/GBC) (.tar.gz) by Ville Helin


    Related links:

    NesDev @ Parodius
    SMS Power S8-Dev
    Jeff Frohwein's Gameboy Dev'rs
    Martin Konrad's GGT, the coolest thing ever written using WLA DX!


    WLA history:

    v9.4 (02-Mar-2008)
  • [ALL] Enhanced the documentation.
  • [ALL] .DEFINE without a definition value, and a .DEFINE that would have an address label as the definition value would make WLA count the linenumbers afterwards wrong.
  • [ALL] Issuing a loose .ENDM will give an error.
  • [ALL] All macros must have at least a name.
  • [ALL] Added .DBM (define bytes through a filter macro) and .DWM (define words through a filter macro).
  • [ALL] Added FILTER to .INCBIN (circulate all the data through a filter macro).
  • [ALL] Fixed overflow checks in .INCBIN's SKIP and READ.
  • [ALL] Integrated Mersenne Twister by Takuji Nishimura and Makoto Matsumoto (.SEED, .DBRND and .DWRND use that now instead of the stdlib's srand() and rand()).
  • [ALL] It's possible to use '\!' to get the name of the currently parsed source file (works like '\@').
  • [Z80] If a pending computation follows "JR" or "DJNZ", all the label references inside are relative.
  • [GB ] If a pending computation follows "JR", all the label references inside are relative.
  • [65?] If a pending computation follows "BCC", "BCS", "BEQ", "BMI", "BNE", "BPL", "BVC", "BVS", all the label references inside are relative.
  • [65C] If a pending computation follows "BCC", "BCS", "BEQ", "BMI", "BNE", "BPL", "BVC", "BVS", "BRA", "BBR*", "BBS*", all the label references inside are relative.
  • [658] If a pending computation follows "BCC", "BCS", "BEQ", "BMI", "BNE", "BPL", "BVC", "BVS", "BRA", "BRL", "PER", all the label references inside are relative.
  • [HuC] If a pending computation follows "BCC", "BCS", "BEQ", "BMI", "BNE", "BPL", "BVC", "BVS", "BSR", "BBR*", "BBS*", "BRA", all the label references inside are relative.
  • [SPC] If a pending computation follows "BCC", "BCS", "BEQ", "BMI", "BNE", "BPL", "BVC", "BVS", "BRA", "BBS", "BBC", "CBNE *", "DBNZ *", all the label references inside are relative.
  • v9.3 (09-Sep-2006)
  • [ALL] Updated makefiles (by Tobias Pflug).
  • [ALL] Added 'memorymaps'-directory, where you can find default .MEMORYMAPs for various machines.
  • [ALL] Enhanced .MEMORYMAP defining.
  • [ALL] Added .ASCIITABLE (.ASCTABLE) and .ASC.
  • [ALL] .DEFINE works also without a definition value (defaults to 0).
  • [ALL] Added .BLOCK and .ENDB.
  • [ALL] Added .SYM (and alias .SYMBOL).
  • [ALL] Added .BR (and alias .BREAKPOINT).
  • [ALL] Added .SHIFT.
  • [ALL] Relaxed the MACRO argument counting. Any MACRO can now be called with varying number of arguments.
  • [ALL] .DEFINE can now handle definitions where lone address labels appear (e.g., only "MAIN+0" used to work).
  • [ALL] Added AmigaOS4 makefiles (by Ventzislav Tzvetkov).
  • [ALL] Some code cleanups.
  • [ALL] Fixed the WIN32 makefiles (by Daniel Horchner).
  • [650] Fixed class 4 opcodes to work again.
  • v9.2 (22-Aug-2004)
  • [ALL] WLA can generate makefile rules (flag 'M') describing the dependencies of the main source file.
  • [ALL] Added flag 'q' to suppress .PRINT* -directives.
  • [ALL] Hexadecimal values can now be given using the suffix 'h' (e.g., 10h and 0abh).
  • [ALL] Fixed the preprocessor to handle cases like "-: jr -".
  • [ALL] Sections did affect the .ORG outside of them, in some special cases.
  • [ALL] Added "RETURNORG" to .SECTION to (hopefully) fix this thing once and for all.
  • v9.1 (26-Jun-2004)
  • [ALL] Sections do not affect the .ORG outside of them.
  • [ALL] Code cleanups.
  • [ALL] .IFs can compare string definitions.
  • [ALL] WLA compiles now "WLAV" library files and "WLAK" object files.
  • [ALL] Added preliminary support for list files.
  • [ALL] Added aliases .DEF (.DEFINE), .REDEF (.REDEFINE), .UNDEF (.UNDEFINE), .WORD (.DW), .BYT (.DB), .BYTE (.DB), .ASC (.DB), .EQU (.DEFINE) and .REPEAT (.REPT).
  • [ALL] Added .FOPEN, .FCLOSE, .FREAD and .FSIZE.
  • [ALL] Increased the case insensitivity in many directives.
  • [ALL] It's possible to use "=" in .DEFINE and .REDEFINE.
  • [ALL] The initial size of a section can now be given with the keyword "SIZE" (take a look at the README).
  • [ALL] .FAIL exits nicer.
  • [ALL] .ENUM can do descending enumeration.
  • [ALL] Added operators '>' (get the high byte) and '<' (get the low byte).
  • [ALL] FREE, SEMIFREE and SUPERFREE sections can be aligned.
  • [ALL] Added "FSIZE" to .INCBIN.
  • [ALL] .STRUCT creates more definitions.
  • [ALL] Structure members can now be used in computations.
  • [ALL] Relaxed the handling of '.' in stack calculator. Now for example "AND1 C,1+2+3.3-2-1" works (SPC-700).
  • [Z80] Fixed opcodes in group 7 to work again. A new feature in 9.0 broke these.
  • [658] .SNESHEADER, .SNESNATIVEVECTOR and .SNESEMUVECTOR don't work with libraries any more.
  • [658] .SNESNATIVEVECTOR and .SNESEMUVECTOR don't change .ORG anymore.
  • [658] All the vectors of .SNESNATIVEVECTOR and .SNESEMUVECTOR are optional and default to $0000.
  • [658] Added .SMC, .INDEX and .ACCU.
  • [658] Operand hinting overrides SEP/REP/.INDEX/.ACCU when dealing with immediate value opcodes (now when did this break?), and .8BIT/.16BIT/.24BIT affect only the rest of the opcodes. WARNING! Check your code as this fix may break it.
  • [658] "LDY.W #?" works now.
  • [658] Added 24bit operand hint .l.
  • [65x] Added more operand size checks to opcode parsers.