zasm is an assembler for the Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80Z80 CPU. It can also assemble code for the extended instruction Pseudo instructions: defl, set and '=' Labels: SETset of the Command Line Options: --z180 Pseudo instructions: .z80, .z180 and .8080Z180 / Hitachi HD64180, as well as code limited to the Intel 8080 e.g. for CP/M. zasm can also assemble native 8080 assembler source. By the help of sdcc zasm can include c source files. A trimmed version of sdcc is available from the download page. zasm can create binary, Intel Hex or Motorola S19 files and various special files for Sinclair and Jupiter Ace emulators:
ZX Spectrum: .sna .Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80z80 .tap Jupiter Ace: .ace .Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80z80¹ .tap ZX80: .o / .80 .Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80z80¹ ZX81: .p / .81 / .p81 .Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80z80¹
zasm can translate the character Pseudo instructions: defl, set and '=' Labels: SETset for the target system, e.g. for the ZX80 and ZX81. The list file can include accumulated cpu cycles. Various historically used syntax variants and the syntax emitted by sdcc are supported. Multiple code and data segments can be defined, nested conditional assembly and nested Assembler directives: #local, #endlocal, .local and .endlocal Pseudo instructions: #local, #endlocal, .local and .endlocal Including C Source Files: #local, #endlocal, .local and .endlocallocal scopes are available. Last not least, zasm supports Pseudo instructions: macro, .macro, endm and .endm 8080 pseudo instructions: MACROmacros.
¹) eventually only supported by zxsp.
Compile the file "emuf_rom.asm" and store a plain list file without generated opcodes and the output file in the same folder. The source file may include other files, either binary, assembler sources or c files:
zasm emuf_rom.asm
Include generated opcodes, accumulated cpu cycles and a labels listing in the list file:
zasm -uwy emuf_rom.asm
Assemble source for the Intel 8080 assembler:
zasm --asm8080 emuf8080_rom.asm
The source file must be either 7-bit ascii or utf-8 encoded. Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifIf you still use a legacy encoding for your text files then this is OK Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifif non-ascii characters occure only in comments. You just won't be able to put non-ascii characters in strings or character literals.
Line breaks in the source file may use any well known format, but the text files generated by zasm will use newline (character 0x0A) only.
; my little EMUF
; define some Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabels:
anton Pseudo instructions: equ Types of labels: Named values Labels: EQUequ 66
berta Pseudo instructions: equ Types of labels: Named values Labels: EQUequ 88
; define code:
org 0
reset: di
jp _init
org 8
printc: jp _printc
...
; pad file to eprom size:
Pseudo instructions: defs, ds, .ds, .block, .blkb and data 8080 pseudo instructions: DSds 0x2000 - $
; my little EMUF
#target rom
; define a data segment in ram and therein some variables:
Assembler directives: #data Including C Source Files: #data#data _SYSVARS,0x4000
anton data 2
berta data 4
caesar data 1
; define a code segment for an eprom:
Assembler directives: #code Including C Source Files: #code#code _EPROM,0,0x4000
reset: di
jp _init
org 8
printc: jp _printc
...
The Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line options have changed: start zasm with no options to see a summary.
See chapter 'Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionsCommand line options' for details.
zasm 4.0 can include c source files, with the help of sdcc. A trimmed version of sdcc for OSX can be found on the zasm download page.
C source files are #included just like assembler source files. They are compiled using sdcc and the output file is #included into the total source.
After the last included files you can use '#include: #include library #include: #include library#include library' to resolve undefined Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabels from the system library or any other library directory.
See chapter 'Including C source files' for details.
zasm 4.0 can assemble native 8080 assembler source files Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifif it is invoced with Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option '--asm8080'.
See chapter '8080 Assembler' for details.
The syntax for Assembler directives: #code Including C Source Files: #code#code and Assembler directives: #data Including C Source Files: #data#data has changed. To support the c compiler an additional first argument, the segment name, is now required and multiple code and data segments are allowed. E.g.:
Assembler directives: #code Including C Source Files: #code#code _NAME, _start, _size
It is possible to switch to any defined segment at any time using Assembler directives: #code Including C Source Files: #code#code, Assembler directives: #data Including C Source Files: #data#data or .area with the name as a single argument.
Pseudo instructions 8080 Assembler: 8080 pseudo instructionsPseudo instruction 'data' is still available but must only be used after the source explicitely switched to a data segment.
For simple projects it is still possible to use the traditional style with just defining an org at the start of the source file, which was possible with recent versions of v3, but v4 no longer complains about it.
See chapter Assembler directives: #target Including C Source Files: #target#target, #code and #data for details.
Instead of using Assembler directives: #target Including C Source Files: #target#target and Assembler directives: #code Including C Source Files: #code#code, you can use org in the traditional way to Pseudo instructions: defl, set and '=' Labels: SETset the origin of your code. This is done by the first 'org' instruction in your source which must preceed any code generating instruction. (As it was also possible with recent versions of v3.)
The behavior of org inside code has changed: in v4 it does insert space up to the requested new address. For the old behavior to just Pseudo instructions: defl, set and '=' Labels: SETset a new logical code origin use the new Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instructions .phase and .dephase.
See chapter 'org' for details.
The required layout of Assembler directives: #code Including C Source Files: #code#code segments for some targets has changed and some targets are supported in v4 for the first time.
Supported targets in v4:
BIN, ROM, SNA, Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80Z80, TAP (ZX Spectrum and Jupiter Ace), O/80, P/81/P81, ACE, TZX
See chapter 'Targets' for details.
Pseudo instructions: macro, .macro, endm and .endm 8080 pseudo instructions: MACROMacros and Pseudo instructions: rept, .rept, endm and .endm 8080 pseudo instructions: REPTrept are now supported. zasm also supports 'defl' and 'Pseudo instructions: defl, set and '=' Labels: SETset' for redefinable Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabels and conditional code ranges in Pseudo instructions: macro, .macro, endm and .endm 8080 pseudo instructions: MACROmacros with 'Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifif' and 'Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifendif'. Arguments which break normal syntax rules can be passed with '<' … '>'.
See chapter 'Pseudo instructions: macro, .macro, endm and .endm 8080 pseudo instructions: MACROmacro' for details.
The list file can include accumulated cpu cycles: see Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option --cycles.
Assembler directives: #local, #endlocal, .local and .endlocal Pseudo instructions: #local, #endlocal, .local and .endlocal Including C Source Files: #local, #endlocal, .local and .endlocal#local … Assembler directives: #local, #endlocal, .local and .endlocal Pseudo instructions: #local, #endlocal, .local and .endlocal Including C Source Files: #local, #endlocal, .local and .endlocal#endlocal for nested Assembler directives: #local, #endlocal, .local and .endlocal Pseudo instructions: #local, #endlocal, .local and .endlocal Including C Source Files: #local, #endlocal, .local and .endlocallocal scopes.
#charset for automatic conversion of strings and character literals into the target's character Pseudo instructions: defl, set and '=' Labels: SETset.
Limit instructions and registers to the 8080 with Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option --8080.
Enable additional instructions of the Command Line Options: --z180 Pseudo instructions: .z80, .z180 and .8080Z180 / HD64180.
Pseudo instructions 8080 Assembler: 8080 pseudo instructionsPseudo instructions can be written in many variants for compiling old sources without modifications.
Many convenience 'compound' opcodes like "ld a,(hl++)" or "ld bc,de"
Function 'opcode(opcodename)' to get the major byte of an opcode.
Multiple opcodes per line separated with '\'.
|