Przełączniki assemblera

Syntax: mads source [switches]

-b:address      Generate binary file at specific address
-c              Label case sensitivity
-d:label=value  Define a label
-f              CPU command at first column
-fv:value       Set raw binary fill byte to [value]
-hc[:filename]  Header file for CC65
-hm[:filename]  Header file for MADS
-i:path         Additional include directories
-l[:filename]   Generate listing
-m:filename     File with macro definition
-ml:value       margin-left property
-o:filename     Set object file name
-p              Print fully qualified file names in listing and error messages
-s              Silent mode
-t[:filename]   List label table
-u              Warn of unused labels
-vu             Verify code inside unreferenced procedures
-x              Exclude unreferenced procedures

Domyślne nazwy plików to:

  • source.lst
  • source.obx
  • source.lab
  • source.h
  • source.hea
  • source.mac

Jeśli nie podamy rozszerzenia dla pliku source, wówczas MADS domyślnie przyjmie rozszerzenie .ASM.

Parametry możemy podawać w dowolnej kolejności uprzednio poprzedzając je znakiem / lub -, wielkość liter nie ma znaczenia. Parametry możemy łączyć ze sobą, np.:

mads -lptd:label=value -d:label2=value source.asm
mads -l  -p  -t  source
mads source.asm  -lpt
mads.exe "%1" -ltpi:"d:\!atari\macro\"
mads -i:"c:\atari\macros\" -c source.asm  -lpt

Domyślnie MADS po asemblacji zapisze plik z rozszerzeniem .OBX, możemy to zmienić z poziomu BAT:

mads "%1" -o:%~n1.xex

Więcej na temat operatorów możemy dowiedzieć się wykonując CALL /? z poziomu Microsoft DOS.

b:address

Użycie przełącznika -b pozwala nadać nowy adres asemblacji dla pliku w którym nie określono adresu asemblacji (adres asemblacji określamy przy pomocy pseudo rozkazu ORG).

c

Użycie przełącznika -c spowoduje rozróżnianie wielkości liter w nazwach etykiet, zmiennych, stałych. Dyrektywy assemblera i rozkazy CPU 6502, 65816 są zawsze rozpoznawane bez względu na wielkość liter.

d:label=value

Użycie przełącznika -d pozwala na wprowadzenie nowej etykiety do pamięci MADS z poziomu linii poleceń. Przełącznika można użyć wielokrotnie podczas jednego wywołania MADS, może być przydatny gdy asemblujemy z użyciem plików wsadowych BAT.

f

Użycie przełącznika -f umożliwia umieszczanie rozkazów CPU od pierwszej kolumny wiersza i ich poprawne rozpoznawanie przez asembler jako rozkazy a nie tylko jako etykiety.

fv:value

Użycie przełącznika -fv:value pozwala ustalić wartość wypełnienia pamięci gdy użyjemy OPT F+

hc[:filename]

Przełącznik -hc włącza zapis pliku z nagłówkami dla kompilatora CC65. Pozwala także określić nową nazwę dla takiego pliku. Domyślna nazwa pliku nagłówkowego dla CC65 to *.H

hm[:filename]

Przełącznik -hm włącza zapis pliku z nagłówkami dla MADS. Pozwala także określić nową nazwę dla takiego pliku. Domyślna nazwa pliku nagłówkowego dla MADS to *.HEA. Plik taki zawiera informacje o bankach przypisanych etykietom i ich wartości. Dodatkowo etykiety posortowane zostają wg typu CONSTANS VARIABLES PROCEDURES.

i:path

Przełącznik -i służy do określenia ścieżek poszukiwań dla operacji ICL oraz INS. Przełącznika można użyć wielokrotnie podczas jednego wywołania MADS-a, np.:

-i:"c:\program files" -i:c:\temp -i:"d:\atari project"

l:filename

Przełącznik -l włącza zapis pliku z listingiem. Pozwala także określić nową nazwę dla takiego pliku.

m:filename

Przełącznik -m służy do określenia pliku z deklaracjami makr. W przypadku jego użycia MADS asembluje taki plik przed głównym plikiem .ASM

o:filename

Przełącznik -o pozwala określić nową nazwę pliku wykonywalnego Atari DOS lub Atari Sparta DOS X, który powstanie po procesie asemblacji.

p

Przełącznik -p pomocny jest w połączeniu z Code Genie. Gdy wystąpi błąd podczas asemblacji, w oknie Output Bar edytora Code Genie pojawi się stosowny komunikat wygenerowany przez MADS, np.:

D:\!Delphi\Masm\test.asm (29) ERROR: Missing .PROC

Teraz wystarczy kliknąć dwukrotnie linię z tym komunikatem, a kursor edytora ustawi się w linii z błędem.

s

Użycie przełącznika -s spowoduje uaktywnienie tzw. trybu pracy Silent mode, czyli żadne komunikaty nie zostaną wyświetlone, co najwyżej komunikaty błędów ERROR i ostrzeżenia WARNING.

t[:filename]

Przełącznik -t włącza zapis pliku z użytymi definicjami etykiet. Pozwala także określić nową nazwę dla takiego pliku.

x

Przełącznik -x pozwala na pominięcie w procesie asemblacji procedur zadeklarowanych dyrektywą .PROC, do których nie nastąpiło odwołanie w programie.

vu

Przełącznik -vu wymusza dodatkowy test kodu w blokach .PROC mimo tego że taki blok .PROC nie zostanie zapisany do pliku wynikowego, najczęściej przydaje się gdy używamy przełącznika -x

u

Przełącznik -u wyświetli etykiety które nie zostały użyte w programie.

Kody wyjścia

3 = bad parameters, assembling not started
2 = error occured
0 = no errors

Komunikaty ostrzeżenia nie powodują zmiany wartości kodu wyjścia.

Struktura pliku LST

Format listingu nie odbiega od tego znanego z XASM, jedyną zmianą jest dodanie przed adresem, numeru wirtualnego banku pamięci (pod warunkiem że numer banku <> 0).

3
4 = 01,9033    obraz equ $9033
5 = 01,00A0    scr1 equ $a0
6
7
8 01,2000 EA   main nop

Struktura pliku LAB

Podobnie jak w przypadku XASM, w pliku *.LAB przechowywane są informacje na temat etykiet które wystąpiły w programie.

W sumie są to trzy kolumny:

  • Pierwsza kolumna to numer wirtualnego banku przypisany do etykiety (jeśli bank <> 0)
  • Druga kolumna to wartość etykiety.
  • Trzecia kolumna to nazwa etykiety.

Numery wirtualnych banków przypisane do etykiety o wartościach >= $FFF9 mają specjalne znaczenie:

$FFF9   etykieta parametru procedury zdefiniowanej przez dyrektywę .PROC
$FFFA   etykieta tablicy zdefiniowanej przez dyrektywę .ARRAY
$FFFB   etykieta danych strukturalnych zdefiniowanej przez pseudo rozkaz DTA STRUCT_LABEL
$FFFC   etykieta symbolu Sparta DOS X - SMB
$FFFD   etykieta makra zdefiniowanego przez dyrektywę .MACRO
$FFFE   etykieta struktury zdefiniowanej przez dyrektywę .STRUCT
$FFFF   etykieta procedury zdefiniowanej przez dyrektywę .PROC

Specjalne znaczenie w nazwach etykiet mają znaki:

  • etykieta zdefiniowana w makrze (dwa dwukropki) ::
  • znak kropki . rozdziela nazwę struktury .MACRO .PROC .LOCAL .STRUCT od nazwy pola w strukturze

Wartość liczbowa, która występuje po :: oznacza numer wywołania makra.

Mad-Assembler v1.4.2beta by TeBe/Madteam
Label table:
00  0400    @STACK_ADDRESS
00  00FF    @STACK_POINTER
00  2000    MAIN
00  2019    LOOP
00  201C    LOOP::1
00  201C    LHEX
00  0080    LHEX.HLP
00  204C    LHEX.THEX
00  205C    HEX
00  205C    HEX.@GETPAR0.LOOP
00  2079    HEX.@GETPAR1.LOOP

Struktura pliku H

Nie jestem pewien czy wszystko z tym plikiem jest OK, ale Eru chciał żeby coś takiego było więc jest :) Ma on być pomocny przy łączeniu ASM z CC65, czyli portem C dla małego Atari. Jego zawartość może wyglądać tak, przykładowy plik TEST.ASM:

#ifndef _TEST_ASM_H_
#define _TEST_ASM_H_

#define TEST_CPU65816 0x200F
#define TEST_CPU6502 0x2017
#define TEST_TEXT6502 0x201F
#define TEST_TEXT65816 0x2024

#endif