
reAssembler
reAssembler je původní
makroassembler pro procesor Z80 s podporou maker, definic,
lokálních návěstí a include souborů.
» syntaxe a formát zápisu
» podporované direktivy a pseudoinstrukce
» podmíněný překlad
» definice maker
» vlastní direktivy
Syntaxe a formát zápisu
Syntaxe zápisu návěstí
;labels syntax example
;prefix . define local label
main_code: ld b,10 ;global label "main_code"
.loop: call sub_code ;local "loop"
djnz
loop ;goto local "loop"
ret
sub_code:
ld a,10
;global label "sub_code" invalidates prev "loop"
.loop:
dec a
;local "loop"
jr
nz,loop ;goto local "loop"
ret
Syntaxe zápisu výrazu a hodnot
;number systems
ld a,128
;decimal
ld
a,$80 ;hexadecimal
ld
a,'A' ;ASCII char
ld a,%10000000 ;binary
Aritmetické operace
Ve výrazu lze užít následující operátory:
+ - * /
ld hl,32*128+4 ;hl = $1004
Logické operace
| OR
& AND
^ XOR
~ NEG
< menší než*
> větší než*
== rovno*
!= není rovno*
*výsledkem operace je 0 nebo 1
ld a, 'A' |
$80 ;char A or 128
Znak $ pro aktualní hodnotu PC
ld hl,
$+3 ;hl = address of next instr (PC+3)
Užití závorek
Pokud chcete ve výrazu užít závorky, je nutno před výraz vložit operátor =
ld hl, ($4000 + 4) ; compiled as LD HL,($4004)
ld hl, =($4000 + 4) ; compiles as LD HL,$4004
Podporované direktivy a pseudoinstrukce
ORG, EQU, END
org
$8000 ;start addres*
FIRST_RAM equ $4000 ;define FIRST_RAM as 16384
xor a
ld (FIRST_RAM),a
ret
end
*direktiva ORG vytvoří nový blok v závislosti na případných direktivách %SPLIT_BLOCKS nebo %MERGE_BLOCKS
DEFB, DB; DEFW, DW; DEFS, DS; DEFM, DM
;define bytes
defb 10
defb $80,'A'
;define words
defw 32768
defw 10000,'AB'
;define memory space
defs 100 ;create 100 bytes
space
defs 64,32 ;create 64 bytes space filled by
byte 32
;define ASCII string
defm "Hello"
defm "Hello"," world"
INCDIR, INCLUDE, INCBIN
incdir "F:\SOURCES\" ;add the directory to the directory search list
incdir "F:\DATA\" ;add the directory to the directory search list
include "TEST.ASM" ;including source file f:\sources\test.asm (or f:\data\test.asm )
;if this file
is not in the same directory
incbin "DATA.BIN" ;include binary data from file f:\data\data.bin
Podmíněný překlad
#DEFINE, #IFDEF, #IFNDEF, #ELSE, #UNDEF
#define mov ld
;define MOV as LD
mov
hl,16384 ;compile as LD HL, 16384
#define _DEBUG
;set DEBUG mode
...
#ifdef _DEBUG
;source code for debug mode
#else
;source code for release
#endif
#undef mov ;undefine MOV
Definice maker
#MACRO, #ENDM
;example of a macro definition (max. 8 parameters can be used)
#macro total (width, height) ;begin macro definition (with ())
ld a,@width
;@ character specifies parameter
ld b,@height
add a,b
#endm
;end of macro definition
...
;some code...
total 10,12
;use macro (without ())
Vlastní direktivy reAssembleru
Následující direktivy lze použít pouze při kompilaci v reAssembleru
V případě, že bude zdrojový text kompilován jiným kompilátorem,
povolte Kompatibilní mód assemleru a direktivu umístěte za dvojici znaků ;
např. [ ;;%entry ]kdy ostatní kompilátory ji budou ignorovat.
%SYS_VARS [enable/disable]
Umožní používat
přímo názvy sytémových proměnných
bez nutnosti žádných include souborů
%sys_vars enable
ld a,(KSTATE) ;read sys var $5C00
%ROM_CALLS [enable/disable]
Umožní volat rutiny 48K ROM přímo bez nutnosti žádných include souborů
%rom_calls enable
call LD_BYTES ;call $0556
%ROM_WRITE [enable/disable]
Povolí/zakáže zápis kompilátoru do ROM [0000 - 3FFF]
%SINGLE_BLOCK fill_byte
Vygenerovaný soubor bude sloučen do jediného bloku, nedefinované bajty budou nastavany na hodnotu fill_byte
org 32768 ;1st block
ld a,100
ret
org 33000 ;2nd block
xor a
ret
Result: 2 bloky o velikosti 5 bytes (3+2)
%single_block $ff
org 32768 ;1st block
ld a,100
ret
org 33000 ;2nd block
xor a
ret
Result: 1 blok o velikosti 234 bytes ($8003 - $80e7 nastaveny na $FF)
%SPLIT_BLOCKS
Direktiva ORG vytvoří nový blok
%MERGE_BLOCKS
Direktiva ORG nevytvoří nový blok, kód bude
navazovat na předchozí, bude však adresován dle
hodnoty ORG
%PREPROC, %POSTPROC
Direktivy pro kompilaci TRAP RAM
%EXPORT
Exportuje návěstí do debuggeru
%ENTRY, %PAGE, %BREAK
Tyto direktivy mají efekt pouze při kompilaci do paměti debuggeru
%ENTRY
Definuje vstupní bod pro spuštění funkcí Sestavit a spustit
%BREAK
Vloží Breakpoint
%PAGE n
Nastavení paměťové stránky n (0-7) pro 128K
reSpectrum
©2019-2023 Milan "mYdloch"
Kremel respectrum@email.cz, aktualizace 18.12.2023