MADS is a multi-pass crossassembler designed for 6502 and 65816 processors. Binaries are generated mainly for Atari 8-bit systems (supported are AtariDosII and SpartaDOS X formats).
MADS allows using macros and procedures (ability to use program stack), division of the memory between many virtual-banks, multi-dimensional names of labels (similar to C++ and Delphi languages), local-global-temporary labels.
Max. amount of labels and macros is limited to PC's memory size. Single listing's line can be 65536 bytes long and any label can be such long as well.
- naprawiony zapis linii z komentarzem /* */ do pliku listingu *.LST, poprzednio takie linie nie były zapisywane
- poprawka dla etykiet deklarowanych z linii komend -d:label, poprzednio takie etykiety widziane były tylko w pierwszym przebiegu
- w przypadku addytywności bloków .LOCAL tylko pierwszy adres z takich bloków jest zapisywany
- poprawki dotyczące parsowania makr, poprzednio etykiety zaczynające się od END mogły zostać zinterpretowane jako pseudo rozkaz END
- poprawka odczytu dla pustego pliku relokowalnego, poprzednio występował błąd 'Value out of range'
- poprawki dla .USING (.USE)
- uaktualniony silnik duchów programowych ..\EXAMPLES\SPRITES\CHARS o duchy 8x24
- w przypadku braku podania rozszerzenia pliku i braku istnienia takiego pliku dla ICL 'filename' zostanie domyślnie przyjęte rozszerzenie *.ASM ICL 'filename.asm'
- poprawione działanie komentarzy /* */ w blokach .MACRO i .REPT
- usunięty błąd uniemożliwiający poprawną asemblację bloku #IF, #WHILE dla wyrażeń łączonych przez .OR, .AND
- przełączniki w linii komend mogą być poprzedzone tylko znakiem '-', poprzednio także '/' jednak były problemy z działaniem tego znaku na MacOSX
- poprawiony zakres działania dyrektywy .USING, dla aktualnej przestrzeni nazw i kolejnych zawierających się w tej przestrzeni nazw
- usprawnione rozpoznawanie komentarzy /* */ w wyrażeniach
- domyślny adres dla .ZPVAR ustawiony na $0080, poprzednio $0000
- dodana nowa dyrektywa .ELIF jako krótszy odpowiednik dyrektywy .ELSEIF
- rozszerzone działanie dyrektywy .LEN o możliwość podania jako parametru nazwy pliku, zwracana jest wówczas długość takiego pliku
- usprawnione działanie dyrektywy .DEF w wyrażeniach warunku .IF (.IFDEF, .IFNDEF)
- dodane makro relokujące moduły RMT ...\EXAMPLES\MSX\RMT_PLAYER_RELOCATOR\
- dodany test składni dla nie asemblowanych procedur .PROC gdy aktywny jest przełącznik -x "Exclude unreferenced procedures"
- poprawione działanie przełącznika "-d:label[=value]", podanie wartości dla etykiety jest teraz opcjonalne, domyślnie Mads przypisze wartość 1
- dyrektywy .DS i .ALIGN nie spowodują alokacji zmiennych zdefiniowanych przez .VAR
- alokacja zmiennych .VAR przed nowym blokiem ORG nie nastąpi jeśli blok ORG znajduje się w bloku .LOCAL lub .PROC
- poprawione łamanie wierszy znakiem '\' w ciągach ograniczonych nawiasami ()
- usunięty błąd powodujący relokowanie adresu dla wyrażenia dyrektywy .ERROR (ERT)
- usunięte zauważone błędy przy parsowaniu parametrów linii komend
- usunięte zauważone błędy dotyczące optymalizacji długości kodu makro rozkazów MVA, MWA itp.
- poprawiony kod realizujący zagnieżdżanie bloków .PROC
- poprawiony kod realizujący działanie pseudo rozkazów warunku IFT ELI ELS EIF
- dodany komunikat "'#' is allowed only in repeated lines" dla przypadków użycia licznika pętli # (.R) poza pętlą
- usunięty błąd powodujący błędne alokowanie zmiennych zadeklarowanych przez dyrektywę .VAR podczas wykonywania makra
- w celu ujednolicenia składni odwołania do etykiet typów wyliczeniowych możliwe są tylko poprzez znak kropki '.', poprzednio także przez '::'
- możliwe krótsze odwołania do typów wyliczeniowych enum_label(fields), np. :
.enum typ val0 = 1 val1 = 5 val2 = 9 .ende lda #typ(val0|val2) ; == "lda #typ.val0|typ.val2"
- rozszerzona składnia dyrektywy .SAV, np.:
.sav 'filename',offset,length .sav 'filenema',length .sav [offset] 'filename',offset2,length ; offset = offset+offset2 .sav length .sav offset,length
- rozszerzona składnia dyrektywy .ARRAY, w przypadku braku podania maksymalnego indeksu tablicy zostanie on obliczony na podstawie ilości wprowadzonych elementów, elementy można wprowadzać bez konieczności poprzedzenia ich indeksem [expression], np.:
.array temp .byte 1,4,6 ; [0..2] = 1,4,6 [12] = 9,3 ; [12..13] = 9,3 [5]:[8] = 10,16 ; [5..6] = 10,16 ; [8..9] = 10,16 0,0,\ ; [14..17] = 0,0,1,1 1,1 .enda ; 18 elementów, TEMP [0..17]
- dodana możliwość alokacji zmiennej typu strukturalnego przy pomocy dyrektyw .VAR i .ZPVAR, np.:
.struct Point x .byte y .byte .ends .var a,b,c Point .zpvar Point f,g,i
- dodana możliwość alokacji zmiennej typu wyliczeniowego przy pomocy dyrektyw .VAR i .ZPVAR, np.:
.enum Boolean false = 0 true = 1 .ende .var test Boolean .zpvar Boolean test
- dodana możliwość deklaracji pól struktury przy pomocy typów wyliczeniowych, np.:
.enum EState
DONE, DIRECTORY_SEARCH, INIT_LOADING, LOADING
.ende
.struct SLoader
m_file_start .word
m_file_length .word
m_state EState
.ends
- nowy silnik duchów programowych z minimalnymi wymaganiami pamięci, bez dodatkowych buforów pamięci obrazu ...EXAMPLES\SPRITES\CHARS_NG
- nowa wersja pakera Huffmana (kompatybilna z Free Pascal Compiler-em, "fpc -MDelphi sqz15.pas") i dekompresora Huffmana SQZ15 ...EXAMPLES\COMPRESSION\SQUASH
- poprawiony kod generowany dla rozkazów MVP, MVN, PEA, BRA (CPU 65816)
- dodane nowe rozkazy BRL, JSL, JML (CPU 65816), jako odpowiedniki rozkazów długich skoków BRA, JSR, JMP
- blok aktualizacji etykiet zewnętrznych (external) został rozszerzony o zapis młodszego i starszego bajtu adresu takiej etykiety
- poprawione działanie dyrektywy .USE (.USING), działa niezależnie od przestrzeni nazw w której zostanie użyta
- usunięty błąd, który powodował w pewnych sytuacjach pomijanie asemblacji bloku #IF, #WHILE
- dodana możliwość definiowania zmiennych poprzez dyrektywę .DS lub pseudo rozkaz ORG przed blokiem .RELOC
- dodana dodatkowa forma składni dla dyrektywy .VAR, z tym że dla takiego przypadku nie ma możliwości określenia adresu umiejscowienia zmiennych w pamięci
.VAR .TYPE lab1 lab2 lab3 .TYPE lab4 .TYPE lab5 lab6 ... .var .byte a,b,c .dword i j
- dodana możliwość definicji pojedyńczych zmiennych typu strukturalnego w krótszy sposób aniżeli dotąd przez DTA
.struct @point x .byte y .byte .ends pointA @point ; pointA dta @point [0] <=> pointA dta @point pointB @point ; pointB dta @point [0] <=> pointB dta @point points dta @point [100]
- dodana nowa dyrektywa .ZPVAR umożliwiająca automatyczne przydzielenie miejsca zmiennym na stronie zerowej
.ZPVAR TYPE label1, label2 label3 = $80 ; LABEL1=$80, LABEL2=LABEL1+TYPE, LABEL3=LABEL2+TYPE .ZPVAR label4, label5 TYPE ; LABEL4=LABEL3+TYPE, LABEL5=LABEL4+TYPE .print .zpvar
- poprawione działanie dyrektywy .ERROR i pseudo rozkazu ERT, możliwe jest umieszczenie dodatkowych informacji w wierszu podobnie jak dla .PRINT (.ECHO) np.:
ERT *>$6000 , 'BUUU przekroczyliśmy zakres pamięci o ' , *-$6000 , ' bajtów'
- dodana możliwość zagnieżdżania bloków procedur .PROC, ten sam kod może być wywoływany z różnymi parametrami np.:
.proc copySrc (.word src+1) .var .proc ToDst (.word src+1, dst+1) .var .endp ldy #0 src lda $ffff,y dst sta $ffff,y iny bne src rts .endp copySrc.ToDst #$a080 #$b000 copySrc #$a360
- dodane nowe dyrektywy .ENUM i .ENDE (.EEND)
.enum dni_tygodnia poniedzialek = 1 wtorek, sroda = 5, czwartek = 7 piatek sobota niedziela .ende ift dzien==dni_tygodnia.wtorek .print 'wtorek' eif
- rozszerzona funkcjonalność komentarzy wieloliniowych /* */ o możliwość umieszczania ich gdziekolwiek
lda #12+ /* komentarz */ 23
- umożliwiona relokacja adresów definiowanych dyrektywą .DEF
.reloc .def label lda label
- dodana możliwość użycia znaków { } do oznaczenia bloku (z wyjątkiem bloków .MACRO), znak '{','}' zostaje rozpoznany na początku nowego wiersza, np.:
#while .word ad+1<=#$bc40+39
{
ad sta $bc40
inw ad+1
}
.proc lab
{
.local temp2
{
}
.array tab [255] .byte
{}
}
- zniesione ograniczenie długości pliku dla pseudo rozkazu INS (poprzednio długość wczytywanego pliku ograniczona była do 65536 bajtów)
- dodany komunikat błędu 'The referenced label ... has not previously been defined properly' w przypadku etykiet, które nie zostały zdefiniowane do końca, np. tylko w pierwszym przebiegu wartością nieokreśloną
- dodana nowa dyrektywa .ECHO jako odpowiednik dyrektywy .PRINT, dodatkowo informacje generowane przez .PRINT (.ECHO) zapisywane są teraz także w listingu *.LST
- dodana nowa dyrektywa .ALIGN pozwalająca na wyrównanie do zadanego zakresu pamięci, dodatkowo można określić wartość jaką wypełnić pamięć
[label] .ALIGN N[,fill]
- dodany nowy przełącznik -U (Warn of unused labels)
- rozszerzone działanie znaku backslash '\', umieszczenie go na końcu wiersza oznacza kontynuację aktualnego wiersza od nowego wiersza, np.:
macro_temp \ _____________________________________parametr1_________________________________________________\ _____________________________________parametr2_________________________________________________\ _____________________________________parametr3_________________________________________________ lda\ #____________________________________label________________________________________\ +__________________________________expression___________________________________
- zmienione testowanie niekończącego wywoływania się makr po którym wystąpi błąd 'Infinite loop'
- naprawiony zapis etykiet do pliku *.LAB, błąd powstał po dodaniu addytywności obszarów LOCAL
- poprawione działanie pseudo rozkazu SIN (kod zapożyczony z XASM)
- poprawione rozpoznawanie dyrektyw przy włączonym przełączniku -C (Case sensitive)
- usprawniony odczyt bloków .REPT (wskazanie prawidłowej linii z błędem) i .MACRO
- zablokowane użycie .VAR w bloku .REPT
- umożliwione zagnieżdżanie oraz wielokrotne uruchamianie (poprzez makra) pętli .REPT i :repeat (poprzednio występował komunikat 'Use .REPT directive')
- umożliwione przekazywanie parametrów do bloku .REPT, np.
.REPT 10, # label:1 ; LABEL0, LABEL1, LABEL2 ... LABEL9 .ENDR .REPT 5, $12,$33,$44,$55,$66 dta :1,:2,:3,:4,:5 ; $12,$33,$44,$55,$66 dta :5,:4,:3,:2,:1 ; $66,$55,$44,$33,$12 .ENDR
- poprawiony błąd w opisie przełącznika -F, poprzednio 'Label at first column', prawidłowy opis to 'CPU command at first column'
- przepisana od nowa obsługa dyrektywy .DS i opcji OPT F+ (dodana możliwość użycia bloków RUN i INI)
- przepisana od nowa obsługa opcji OPT ?+ (etykiety lokalne w standardzie MAE)
- dodana możliwość upublicznienia w blokach PUBLIC tablic zadeklarowanych przez .ARRAY oraz deklaracji struktur .STRUCT
- dyrektywa generująca kod 6502 dla decyzji .TEST zastąpiona została przez dyrektywę #IF, dyrektywa .ENDT przez #END, dodatkowo możliwe jest użycie dyrektywy #ELSE np.:
# if .byte i>#8 .and .byte i<#200
# else
#if .word j = #12
#end
# end
- dyrektywa generująca kod 6502 dla iteracji .WHILE zastąpiona została przez dyrektywę #WHILE, dyrektywa .ENDW przez #END, np.:
lda 20 -> lda 20
# while .byte @=20 -> wait cmp 20
# end -> sne
-> jmp wait
- dyrektywy #IF i #WHILE akceptują dwa dodatkowe operatory '==' i '!='
- dodana dyrektywa .EXITM jako odpowiednik .EXIT
- dodana dyrektywa .FI jako odpowiednik .ENDIF
- dodana dyrektywa .IFDEF jako krótszy odpowiednik dyrektyw .IF .DEF
- dodana dyrektywa .IFNDEF jako krótszy odpowiednik dyrektyw .IF .NOT .DEF
- umożliwione zostało definiowanie makr w obszarze procedury .PROC, podsumowując aktualnie dopuszczalne jest zdefiniowanie makra w obszarze .LOCAL i .PROC
- wystąpienie jakiegokolwiek ostrzeżenia podczas asemblacji nie zmieni kodu wyjścia (exit_code=0), zmiana podyktowana potrzebą kompatybilności z linuxowym makefile
- ujednolicony sposób deklaracji etykiet lokalnych i globalnych, "białe znaki" przed nazwą etykiety nie wymuszą zdefiniowania takiej etykiety jako globalnej, umożliwi to tylko dyrektywa .DEF :LABEL
- poprawione makra @CALL.MAC i @CALL_2.MAC, zmienna tymczasowa globalna ?@stack_offset modyfikowana jest teraz przez dyrektywę .DEF
- rezygnacja z opcji -E (Eat White spaces), aktualnie jest ta opcja zawsze włączona
- poprawione wyświetlanie numeru linii z błędem w aktualnie wykonywanym makrze
- skrócone nazwy etykiet tworzonych podczas wykonywania makr (łatwiejsza ich identyfikacja w pliku *.LAB)
- poprawione działanie opcji OPT H-
- dodane nowe makro rozkazy INL (increse LONG), IND (increse DWORD), DEL (decrese LONG), DED (decrese DWORD)
- dodane nowe makro rozkazy CPB (compare BYTE), CPW (compare WORD), CPL (compare LONG), CPD (compare DWORD)
- usprawnione i rozszerzone działanie dyrektyw #TEST i #WHILE w oparciu o kod generowany przez makro rozkazy CPB, CPW, CPL, CPD, dyrektywy #TEST i #WHILE dla wyrażeń '=#0' i '<>#0' generują najkrótszy kod wynikowy
- dodana optymalizacja długości generowanego kodu dla makro rozkazów MWA, MWX, MWY
- dodana nowa opcja OPT R optymalizująca kod makro rozkazów MWA, MWX, MWY, MVA, MVX, MVY ze względu na zawartość rejestrów, np.:
opt r- opt r+
mva #0 $80 -> lda #$00 -> lda #0
mva #0 $81 -> sta $80 -> sta $80
lda #$00 -> sta $81
sta $81 ->
- rozszerzona funkcjonalność dyrektywy .DEF o możliwość przypisania wartości nowo deklarowanej etykiecie, np.:
.def label = 1
- rozszerzona funkcjonalność dyrektywy .DEF o możliwość zdefiniowania etykiety globalnej niezależnie od aktulnego obszaru lokalnego, np.:
.def :label
- umożliwiona została addytywność obszarów .LOCAL, tzn. może istnieć wiele obszarów lokalnych o tej samej nazwie, symbole zawarte w takich obszarach należeć będą do wspólnej przestrzeni nazw, np.:
.local namespace .proc proc1 .endp .endl .local namespace .proc proc2 .endp .endl
- dodane dyrektywy .MEND, .PGEND, .REND jako odpowiedniki .ENDM, .ENDPG, .ENDR
- obecnie deklaracja makra musi kończyć się dyrektywą .ENDM lub .MEND (poprzednio dopuszczalne było użycie dyrektywy .END)
- poprawiony sposób wykonywania makr dzięki czemu umożliwione zostało wykonanie dyrektywy .ENDL z poziomu wykonywanego makra
- poprawione zauważone błędy dotyczące starszych bajtów relokowanego adresu oraz bloku aktualizacji symboli publicznych
- dodana nowa dyrektywa .USING (.USE) pozwalająca określić ścieżkę poszukiwań dla nazw etykiet
- poprawione działanie dyrektyw .LOCAL, .DEF, których błędne działanie objawiało się w szczególnych przypadkach
- poprawione działanie makro rozkazów skoków (SNE, RNE itp.), których błędne działanie objawiało się w szczególnych przypadkach
- rozszerzona składnia dyrektywy .TEST (kod 6502 dla warunku) o dowolną ilość wyrażeń połączonych przez .OR lub .AND (brak możliwości zmiany piorytetu wartościowania przy pomocy nawiasów), np.:
.test .byte k>#10+1 .or .word j>#100 .and .word j<#105 .or .byte k<=#5 ... ... .endt
- rozszerzona składnia dyrektywy .WHILE (kod 6502 dla pętli) o dowolną ilość wyrażeń połączonych przez .OR lub .AND (brak możliwości zmiany piorytetu wartościowania przy pomocy nawiasów), np.:
.while .byte k>#4 .and .byte k<#39 ... ... .endw
- dodany nowy przełącznik -B:ADDRESS umożliwiający asemblacje od zadanego adresu
- dodany nowa opcja OPT F+- pozwalająca tworzyć bloki ciągłej pamięci (przydatne dla cartów)
- dodana obsługa parametrów typu .LONG i .DWORD przekazywanych do procedur .PROC typu .VAR (poprzednio akceptowanymi typami parametrów był tylko .BYTE i .WORD)
- dodana nowa dyrektywa .FL realizująca zapis liczb rzeczywistych REAL w formacie FP Atari, np.:
pi .fl 3.1415926535897932384626433832795 ; 40 03 14 15 92 65 tb .fl 0.5 12.34 -2.30 0.00002 tb .fl 0.5, 12.34, -2.30, 0.00002
- umożliwiony został zapis wartości innych typów niż tylko .BYTE w bloku .ARRAY
- dodana obsługa typów wielokrotnych dla .STRUCT, poprzednio takie typy były akceptowane jednak pamięć nie była właściwie dla nich rezerwowana, np.:
.struct test x :200 .byte y :999 .long .ends buf dta test [0]
- poprawione błędy dotyczące generowania kodu relokowalnego zauważone przez Laoo, np.:
.reloc lda temp temp .long $aabbcc
- błąd 'Addres relocation overload' wystąpi teraz tylko gdy wyrażenie będzie dotyczyć więcej niż jednej etykiety relokowalnej, poprzednio każde wyrażenie z udziałem etykiety relokowalnej powodowało wyświetlenie tego komunikatu błędu
- blok aktualizacji symboli plublicznych rozszerzony został o możliwość przekazywania stałych różnych typów B-YTE, W-ORD, L-ONG, D-WORD, poprzednio przekazywanym typem był tylko W-ORD
- zmienione działanie dyrektywy .VAR w blokach .LOCAL znajdujących się w bloku .PROC, zmienne takie zawsze odkładane są na końcu bloku przed dyrektywą .ENDP, w pozostałych przypadkach na końcu bloku .LOCAL przed dyrektywą .ENDL
- umożliwiona została relokowalność kodu generowanego przez dyrektywy .WHILE i .TEST
- poprawione działanie testowania wartości typu .WORD w kodzie generowanym przez dyrektywy .WHILE i .TEST
- dodana nowa dyrektywa .ADR zwracająca adres etykiety przed zmianą adresu asemblacji
- dodana nowa dyrektywa .LEN zwracająca długość bloków zdefiniowanych przez .PROC i .ARRAY
- poprawiony piorytet dla operacji dzielenia i mnożenia, obecnie dzielenie ma wyższy piorytet od mnożenia
- komentarze z końca linii nie poprzedzone znakiem komentarza będą powodować wystąpienie błędu 'Unexpected end of line'
- dodana możliwość przypisania zmiennej pól zdefiniowanych przez strukture, np.:
@point .struct
x .byte
y .byte
.ends
a @point
b @point
c @point
- rozszerzona składnia .STRUCT o możliwość dodania nowych pól bez definiowania nazwy pola, np.:
.struct @id id .word .ends .struct @mem @id adr .word .ends
- rozszerzona składnia makro rozkazu MWA o możliwość użycia adresowania pośredniego strony zerowej postindeksowanego Y, np.:
mwa ($80),y $a000,x mwa $bc40,y ($f0),y mwa ($80),y ($82),y
- rozszerzona składnia dyrektywy .EXTRN, obecnie możliwe jest zapowiedzenie większej ilości etykiet różnych typów w jednym wierszu, zapowiedzenie procedury .PROC w takim wierszu musi znajdować się na jego końcu, np.:
.extrn a,b,c,d .byte x y z .word line .proc(.byte x,y) .reg
- rozszerzona składnia dyrektywy .VAR, obecnie możliwe jest zadeklarowanie większej ilości etykiet różnych typów w jednym wierszu oraz przypisanie im adresu od którego zostaną odłożone w pamięci, np.:
.var x y z .byte bit :2 .dword = $80
- rozszerzona składnia dla parametrów procedur przekazywanych przez zmienne .VAR, możliwe jest podanie przesunięcia np.:
move .proc (.word src+1,dst+1) .var
src lda $ffff
dst sta $ffff
.endp
- dodana nowa dyrektywa .NOWARN wyłączająca wyświetlenie ostrzeżenia dla aktualnie asemblowanego wiersza, np.:
.nowarn PROCNAME
- dodane nowe makro rozkazy PHR, PLR, realizujące odkładanie i zdejmowanie wartości rejestrów z udziałem stosu sprzętowego, np.:
PHR -> PHA PLR -> PLA
TXA TAY
PHA PLA
TYA TAX
PHA PLA
- dodane nowe makro rozkazy ADB, SBB realizujące dodawanie i odejmowanie wartości typu .BYTE, np.:
ADB $80 #12 $b000 -> lda $80
clc
adc #12
sta $b000
SBB #200 $a000 -> lda #200
sec
sbc $a000
sta $a000
- dodana możliwość użycia składni C dla liczb szestnastkowych, np.:
lda 0x2000 ldx #0x12 temp = 0x8000
- dyrektywa .DS w blokach relokowalnych SDX RELOC i MADS RELOC deklaruje od teraz pusty blok
- dodany nowy przełącznik -F, który umożliwia umieszczanie rozkazów CPU i pseudo rozkazów od pierwszej kolumny w wierszu
- przepisane od nowa procedury odczytu bloków .MACRO, .REPT oraz nowa procedura realizująca dzielenie wiersza przy pomocy znaku '\'
- dodane nowe pseudo rozkazy ADW, SBW realizujące dodawanie i odejmowanie wartości typu WORD dla CPU6502, np.:
adw hlp #40 ; hlp=hlp+40 adw hlp #20 pom ; pom=hlp+20
- rozszerzone działanie dyrektywy .DEF o możliwość zdefiniowania etykiety, np.: .DEF label
- zwiększona liczba przebiegów dla deklaracji etykiet przez EQU dla pewnych szczególnych przypadków
- naprawione działanie dyrektywy .PRINT, dotąd mogła nie wyświetlić wartości etykiet zaczynającej się na literę 'A','B','C','D','E','F','G','H','L','T','V'
- zablokowane działanie dyrektywy .DS w blokach .RELOC i SDX oraz naprawione jej działanie z instrukcją warunkową .IF (IFT)
- usprawnione przeszukiwanie ścieżek dostępu -i:path (można odwoływać się do podkatalogów tam zawartych)
- w przypadku wystąpienia błędów podczas asemblacji wyświetlane są one wszystkie a nie tylko pierwszy z błędów
- poprawione zauważone błędy, m.in. użycie makra w pliku .RELOC mogło spowodować w pewnych sytuacjach zapis błędnej informacji o relokownych adresach
- uproszczony został sposób kończenia procedur wykorzystujących stos programowy MADS-a, nie ma potrzeby używania dyrektywy .EXIT, a dyrektywa .ENDP nie powoduje już dodatkowych działań na stosie programowym
- dodana nowa dyrektywa .SYMBOL jako odpowiednik bloku aktualizacji BLK UPDATE NEW SYMBOL 'SYMBOL', dyrektywę .SYMBOL można użyć w dowolnym miejscu programu
- dodane automatyczne wywoływanie bloków aktualizacji (ADDRESS, EXTERNAL, PUBLIC, SYMBOL) dla .RELOC i SDX
- dodane nowe dyrektywy .BY, .WO, .HE, .EN, .SB (zapożyczone z MAE)
- dodany nowy przełącznik OPT ?- (domyślnie) etykiety ze znakiem zapytania (?labels) traktowane są jako etykiety tymczasowe, OPT ?+ etykiety ze znakiem zapytania (?labels) traktowane są jako lokalne i tymczasowe, nazwą obszaru lokalnego jest ostatnio użyta etykieta bez znaku zapytania
- dodane dyrektywy .LEND, .PEND, .AEND, .WEND, .TEND, .SEND jako odpowiedniki dyrektyw .ENDL, .ENDP, .ENDW, ENDW, .ENDT, .ENDS
- dodane nowe dyrektywy .GLOBAL i .GLOBL jako odpowiednik (zamiennik) dyrektywy .PUBLIC
- dodana optymalizacja skoków warunkowych JEQ, JNE, JPL, JMI, JCC, JCS, JVC, JVS, jeśli jest taka możliwość wybierany jest skok krótki typu BEQ, BNE, BPL, BMI, BCC, BCS, BVC, BVS
- dodany nowy domyślny separator znak spacji dla przekazywanych parametrów do .PROC, .MACRO, dotąd był to tylko znak przecinka
- usprawnienia dotyczące przekazywania parametrów do makr i procedur, np. paramatrem makra może być dyrektywa zwracająca wartość wyrażenia lub symbol licznika pętli '#'
:12 makro #
- dodana możliwość użycia znaku spacji jako separatora dla .VAR, .EXTRN, np.
.EXTRN a b c d .word .VAR i = 1 j = 2 .byte .VAR a b c d .byte
- rozszerzona składnia dla .VAR umożliwiająca zaincjowanie zmiennych stałą, np.:
.var i = 10 j = 12 .byte .var a , b = 2 .byte
- dodane nowe dyrektywy .WHILE, .ENDW pozwalające na automatyczne wygenerowanie kodu dla pętli WHILE, np.:
ldx #$ff
.while .word adr < #$bc40+40*24
stx $bc40
adr: equ *-2
inw adr
.endw
- dodane nowe dyrektywy .TEST, .ENDT pozwalające na automatyczne wygenerowanie kodu dla warunku, np.:
.test .byte (@>=#'a')
.test .byte (@<=#'z')
.endt
.endt
- dodana możliwość zmiany adresu asemblacji .PROC lub .LOCAL bez zmiany adresu ładowania
- usunięto optymalizację kodu dla makro rozkazów MWA itp., która mogła powodować w szczególnych przypadkach zapętlenie się MADS'a
- dodane dyrektywy .REG, .VAR pozwalające określić sposób przekazywania parametrów do procedur (.REG przez rejestry CPU, .VAR przez zmienne)
- dodana dyrektywa .VAR pozwalająca na deklarację zmiennych w blokach .PROC, .LOCAL, zadeklarowane zmiennne są fizycznie odkładane na końcu takiego bloku
- rozszerzona składnia dla dyrektywy .EXTRN, np. EXTRN label1,label2,label3... TYPE
- jśsli brak deklaracji etykiet dla stosu programowego MADS'a, przyjmowane są domyślne wartości @PROC_VARS_ADR=$0500, @STACK_ADDRESS=$0600, @STACK_POINTER=$FE
- dodany repeat_counter #, który można używać zamiennie z dyrektywą .R
- wystapi błąd '^ not relocatable' przy próbie relokacji rozkazu 'lda ^label'
- dodana obsługa symboli publicznych dla stałych (C-ONSTANT) w blokach PUBLIC
- poprawiona relokowalność dla tablic .ARRAY, danych stworzonych przez .STRUCT, parametrów przekazywanych do procedur przez stałe #
- przepisana na nowo obsługa pseudo rozkazów REQ, RNE, RPL, RMI, RCC, RCS, RVC, RVS, SEQ, SNE, SPL, SMI, SCC, SCS, SVC, SVS
- poprawione działanie dyrektywy .LINK dla bloków o stałych adresach
- poprawione testowanie słów zarezerwowanych (można używać nazw zarezerwowanych dla 65816 gdy używamy tylko 6502)
- zmiany w listingu, wyświetla informacje o numerze banku tylko gdy bank > 0
- dodana obsługa makro rozkazów MWA, MWX, MWY, MVA, MVX, MVY, ADD, SUB, INW, DEW (do ich obsługi nie są już potrzebne makra)
- dodana możliwość używania nazw mnemoników 65816 w trybie pracy 6502 (w trybie 65816 wystąpi już błąd RESERVED WORD)
- poprawione działanie pseudo rozkazów skoków SCC, RNE itp. w makrach
- usprawnione wykonywanie wielu makr rozdzielonych znakiem dwukropka ':'
- usunięty błąd, który powodował zbyt mała liczbę przebiegów asemblacji
- dodana obsługa pseudo rozkazów JEQ, JNE, JPL, JMI, JCC, JCS, JVC, JVS (makra nie są już potrzebne do ich obsługi)
- rozszerzona składnia dla .ARRAY, .PUT
- dodane makra JEQ, JNE, JPL, JMI, JCC, JCS w pliku XASM.MAC (..\EXAMPLES\MACROS\)
- dodane dyrektywy .PAGES i .ENDPG
- dodana dyrektywa .END zastepujaca inne dyrektywy .END?
- przełącznik -H zastąpiony został przez -HC (generuje plik nagłówkowy dla CC65)
- dodany nowy przełącznik -HM generujący plik nagłówkowy dla MADS'a z sortowaniem na etykiety typu CONSTANTS, VARIABLES, PROCEDURES
- dodana dyrektywa .RELOC generująca kod relokowalny w formacie MADS'a
- dodany pseudo rozkaz EXT i dyrektywa .EXTRN pozwalające na deklarację symboli zewnętrznych
- dodana dyrektywa .PUBLIC pozwalająca upublicznić zmienne i procedury z bloku .RELOC (symbole publiczne)
- dodana dyrektywa .LINK pozwalająca na linkowanie kodu relokowalnego MADS'a
- przykłady wykorzystania kodu relokowalnego ..\EXAMPLES\TETRIS_RELOC.ASM i ..\EXAMPLES\LIBRARIES\
- poprawiony sposób przekazywania parametrów do procedur MADS'a (przez apostrof " ")
- naprawiony błąd, który umożliwiał zastąpienie adresu procedury przez adres danych zdefiniowanych przez strukture
- rozszerzona składnia dla .STRUCT, nazwy pól można poprzedzać białymi spacjami podczas ich deklaracji
- znaki oznaczające komentarz wieloliniowy /* */ można obecnie umieszczać w listingu bez ograniczeń
- dodana nowa dyrektywa .PUT oraz rozszerzona składnia dla dyrektywy .GET (../EXAMPLES/MSX/MPT_PLAYER/MPT_RELOCATOR.MAC , ../EXAMPLES/MSX/TMC_PLAYER/TMC_RELOCATOR.MAC)
- dodana obsługa pseudo rozkazów XASM'a REQ, RNE, RPL, RMI, RCC, RCS, RVC, RVS, SEQ, SNE, SPL, SMI, SCC, SCS, SVC, SVS
- dodana możliwość łączenia dowolnej liczby znanych MADS'owi mnemoników przy pomocy znaku ':' (styl XASM'a), np.:
lda:cmp:req 20 ldx:ldy:lda:iny label
- źródło MADS'a kompatybilne z Free Pascal Compiler, po kompilacji możliwe jest jego używanie na innych
platformach systemowych, jak np. Linux, Mac OS, OS/2 itp.
- od teraz MADS sam dobiera odpowiednią liczbę przebiegów asemblacji, przełącznik '/3' nie jest już potrzebny
- poprawiony i rozbudowany został mechanizm przekazywania parametrów do MADS'a (rozdział 'Opcje assemblera')
- poprawione zostało wywołanie makra w linii rozdzielanej znakiem '\' oraz usprawnione rozpoznawanie i wykonywanie linii rozdzielanych znakami '\'
- poprawiony błąd, w którym MADS mylił dyrektywę .ENDM z pseudorozkazem IFT
- poprawione działanie instrukcji warunkowych .ELSEIF , .ELSE
- poprawione testowanie poprawności instrukcji warunkowych w makrach
- obsługa procedur .PROC została rozbudowana o nowe makra i mechanizmy, dzięki którym podobna jest w działaniu jak i łatwości użycia do procedur z języków wyższego poziomu
- dla procedur .PROC z zadeklarowanymi parametrami potrzebna jest teraz dodatkowa deklaracja @PROC_VARS_ADR
- brak ograniczeń w liczbie parametrów przekazywanych do procedur, jedynym ograniczeniem jest dostępna pamięć
- dodany nowy przełącznik /d:label=value pozwalający zdefiniować nową etykietę MADS'a z poziomu linii poleceń
- dodany nowy przełącznik /x "Exclude unreferenced procedures" pozwalający pominąć podczas asemblacji nie używane w programie procedury zadeklarowane dyrektywą .PROC
- nowa opcja OPT T+ (track sep, rep) śledząca zmiany rozmiaru rejestrów A,X,Y dokonywane przez rozkazy SEP, REP (CPU 65816)
- nowe biblioteki w katalogu ..\EXAMPLES\LIBRARIES
- w deklaracji obszaru lokalnego .LOCAL nie jest wymagane podanie nazwy obszaru
- nowe operatory '-=', '+=', '++', '--' pozwalające zmniejszyć/zwiększyć wartość etykiety tymczasowej, np.:
?label -- -> ?label=?label-1 ?temp += 3 -> ?temp=?temp+3 ?ofset -= 5 -> ?ofset=?ofset-5
- rozszerzona o znak przecinka składnia deklaracji parametrów procedur, np.:
.proc nazwa (.byte a,b,c .word d) .endp
- dodany nowy przełącznik '-3' włączający 3 przebiegi zamiast 4-ech dla szybszej asemblacji
- poprawione przetwarzanie zadeklarowanych struktur w pamięci MADS'a, kolejność wystąpienia w listingu nie ma już znaczenia
- dodana możliwość połączenia dowolnej ilości linii listingu w jeden wiersz za pomocą znaku '\'
- dodana dyrektywa .R, zwracająca wartość licznika pętli .REPT <0..maks>
- dodana możliwość stosowania spacji w deklaracji typu danych np. dta a (...
- usunięty zauważone błędy
- usprawnione rozpoznawanie adresowania z użyciem struktur danych
- dodane makro 'INIT_NMI.MAC' i poprawki pozwalające na działanie tego makra
- dodane makro '65816.MAC'
- naprawione błędne adresowanie rozkazów 65816, z użyciem rejestru Y (dziwne że nikt tego nie zauważył, czyżby nie były to popularne rozkazy):
ldy Q,y -> ldy Q,x ldy Z,y -> ldy Z,x
- dodana możliwość zadeklarowania w strukturze pola o większym rozmiarze niż DWORD (4 bajty), np.:
.struct tmp field :40 .byte .ends
- dodana nowa dyrektywa .GET, pozwalająca na wczytanie pliku do pamięci MADS'a i odwołania do niego, np.:
.get 'plik.mic',5,3 dta a( .get[5] * 2 ) dta a( .get[6] * 2 ) dta a( .get[7] * 2 )
- dodana możliwość użycia przełącznika ze znakiem '-' (poprzednio tylko '/')
podczas przekazywania parametrów do MADS'a
- dodany nowy przełącznik M dla pseudo rozkazu OPT M- M+ (nie/pokazuj przetwarzane makra)
- dodana możliwość stosowania "białych spacji" dla pseudo rozkazu OPT, np.:
OPT h - o + s + c-
- dodana możliwość stosowania etykiet bez poprzedzających spacji, ale zakończonych znakiem dwukropka ':', np.:
tmp: clc
lda tmp
- nowe dyrektywy .DB (define byte), .DW (define word), np.:
tmp .DB 12 val .DW 1200 value: .DB 255
- dodana możliwość stosowania nawiasów okrągłych w deklaracji parametrów procedury, poprzednio tylko nawiasy klamrowe, np.:
.PROC name (.byte par1 .word .par2)
name .PROC {.byte par}
- dodana możliwość stosowania nawiasów okrągłych w wyrażeniach arytmetycznych,
poprzednio tylko nawiasy kwadratowe
- dodane nowe dyrektywy .ARRAY i .ENDA, pozwalające zdefiniować tablice
jednowymiarowe, np.:
.ARRAY tab 255 .byte = $12 [12,30,44,66] = "A" .ENDA
- dodane nowe dyrektywy .LO(expression) i .HI(expression) obliczające odpowiednio
młodszy i starszy bajt wyrażenia
- dodane nowe dyrektywy .STRUCT i .ENDS, pozwalające zdefiniować strukturę danych
- naprawione rozpoznawanie znaku '=' realizującego odczyt numeru banku przypisanego do etykiety
('\examples\macro.asm')
- dodana możliwość niestosowania argumentu dla rozkazów CPU, np.:
asl -> asl @
lda -> lda *
lda # -> lda #0
lda #{ lda } -> lda #$ad
lda #{ lda # } -> lda #$a9
bcc -> bcc *
- nowa dyrektywa logiczna .NOT równoważna symbolowi '!'
- nowa dyrektywa .DEF (.DEF label), pozwalająca na stwierdzenie czy podana etykieta została już
zadeklarowana, np.:
.if .not .def label_name
.error 'LABEL_NAME undeclared'
.endif
- nowe makra w katalogu ..\examples\macros\
- dodany nowy przełącznik /e (Eat white spaces), który umożliwia stosowanie "białych spacji"
podczas adresowania
- dodany pseudo rozkaz RND(MIN,MAX,LENGTH) generujący LENGTH liczb losowych
z przedziału MIN..MAX (przykład zastosowania SHELL_SORT.ASM)
- naprawiony błąd dla 'org [header],addres'
- możliwe jest użycie "białych spacji" dla danych DTA, pseudo rozkazów,
argumentu rokazów CPU, np.:
.byte 1 , 3, 4 ; komentarz dta a(12 ) , 111 , 9 // komentarz dta b( sin( 32 , 19 , 128 , 0 , 31 ) ) ; komentarz dta a( [ 12 + 3] , 11 ) ; komentarz org [ 1 , 2 ] , $2000 + 1 // komentarz lda ( 203 ) , y ; komentarz lda # 1 + $200 + 5 ; komentarz
- możliwy jest brak spacji rozdzielających mnemonik i argument, np.:
lda#12 lda($80),y ldx'a'
- dodana nowa dyrektywa .DS (zapożyczona z MAC'65) służąca do rezerwacji pamięci bez jej inicjalizacji, np.:
tmp .ds 256 = tmp org *+256
- zmiana sposobu asemblacji makr, bez udziału plików zewnętrznych
- dokładniejsze wskazanie numeru linii w której wystąpił błąd podczas
przetwarzania makra lub dyrektywy .REPT
- rozszerzenie działania dyrektywy .PRINT, np.:
.print 'end: ',* .print $10,',',$20,',',$10203040
- możliwość zwiększania wartości bajtów w dołączanym pliku lub ciągu znakowym, np.:
ins 'plik'+12,6,100 ins 'plik'+128 dta 'text'-32
- w deklaracji etykiet można używać znaku '=' bez poprzedzających spacji, np.:
DOSINI=$0C IN=$CC
- poprawiony błąd związany z zagnieżdżonymi makrami i dyrektywami warunkowymi .IF, np.:
test 1 ; w poprzednich wersjach MADS'a to makro nic nie
; wygeneruje, w wersji 1.5.8 dziala poprawnie
.macro test
.if :1=0
mwx tmp tmpZ
.else
mwx tmpZ tmp
.endif
.endm
- usunięty błąd który powodował zapętlenie się MADS'a gdy w przetwarzanym ciągu wystąpił znak '/'
- nowe typy danych E(24bit), F(32bit), G(32bit wspak)
- dodatkowa składnia dla obsługi plików SPARTA DOS X (zgodna z FastAssembler MMMG)
- poprawione zauważone błędy
- dodana możliwość inwersu zawartości pliku dla pseudo rozkazu INS, np.:
ins 'plik.dat'* ins 'plik.dat'*,256,512
- możliwość deklaracji danych za pomocą dyrektyw .BYTE, .WORD, .LONG, .DWORD np.:
.word $1000,b(4,5),258 .byte 6,12,a(3),44
- poprawione rozpoznawanie inwersu znaku w adresowaniu, np.:
lda "A"*8 ; kod INTERNAL znaku A pomnożony przez 8 lda "A"**2 ; inwers znaku A w kodzie INTERNAL pomnożony przez 2
- możliwość umieszczania pseudo rozkazów w makrach, np.:
.macro load_level ?licz = 0 .rept 160 ins :1,?licz,3 ?licz = ?licz + 32 .endr .endm load_level 'level_00-09.mic' load_level 'level_10-19.mic'
- dodany pseudo rozkaz SIN(centre,amp,size[,first,last]), zgodny z XASM
- dodana informacja o miejscu wystąpienia błędu podczas wykonywania makra
(pierwsza linia informuje na czym zatrzymało się przetwarzania makra,
dwie ostatnie linie komunikatu informują o miejscu wywołania makra), np.:
mv? #3 $D01D a 8 mva #3 $d01d PMCTL - show sprites and missiles D:\!Atari\Getris\h_logo.asm (17) ERROR: Unexpected eol
- dodane wyświetlanie ostrzeżenia 'No ORG specified' w przypadku deklaracji zmiennej bez poprzedzającego pseudo rozkazu ORG
- dwie nowe dyrektywy-operatory logiczne .AND i .OR
- możliwość stosowania tzw. "białych spacji" dla wyrażeń logicznych,
deklaracji stałych, zmiennych, np.:
label equ 1 << 5 ; komentarz label equ [MaxX-MinX] & $FFFF // komentarz .if :0<>'a' .and :0<>'A' ; komentarz ert * >= $a000 ; komentarz
- nowy przełącznik /s (Silent mode)
- wyeliminowany problem z asemblacją makr bez poprzedzającego pseudo rozkazu ORG, poprzednio występował błąd 'No ORG specified'
- możliwość przekazania do struktur .MACRO i .PROC parametrów typu string (ciąg znaków ograniczony podwójnym apostrofem "string")
- dodana możliwość użycia znaków '%%' do określenia numeru parametru makra, poprzednio służył temu tylko znak dwukropka ':'
- możliwość używania tzw. "białych spacji" podczas przekazywania parametrów do struktur .MACRO i .PROC, np.:
test 10 , 200 .macro test lda :1 sta :2 .endm
- usunięty błąd, który powodował "zwis" MADS'a gdy wystąpiła dyrektywa .ENDL bez
poprzedzającej dyrektywy .LOCAL
- poprawione drobniejsze błędy
- usprawnione poszukiwanie wartości etykiety w strukturze .LOCAL
- naprawiony błąd, który uniemożliwiał przekazanie parametru do makra z rozkazem
w trybie indeksowym, jak w n/w przykładzie:
.macro test
lda $2000,:1
.endm
.macro test2
lda (:1),:2
.endm
- naprawiony błąd, który uniemożliwiał określenie wartości etykiety lokalnej zaczynającej się znakiem zapytania '?' zadeklarowanej w strukturze lokalnej .LOCAL, .PROC, jak w n/w przykładzie:
?test = 1
.local tmp
?test = 2 ?test = 4
.endl
- naprawiony błąd, który uniemożliwiał określenie wartości etykiety lokalnej, do której odwoływało sie makro, wywołane z poziomu innego makra, jak w n/w przykładzie:
icl 'xasm_macro.asm'
x .LOCAL
mwa #x2 x3 x2
lda #0
rts
x3 dta 0,0
.ENDL
- pseudo rozkaz LMB wymaga określenia trybu adresowania, konkretnie
'#'
- poprawione działanie rozkazu BRA dla długich skoków (65816)
- nazwy struktur dla .MACRO, .PROC, .LOCAL nie muszą już koniecznie
występować przed dyrektywą, mogą występować też po dyrektywie,
np.:
test .macro
.endm .macro test2
.endm .proc test3
.endp .local jump
.endl
- nowe dyrektywy .REPT, .ENDR umożliwiające powtórzenie bloku programu
- zmiany w zarządzaniu makrami, inny sposób reprezentacji
zadeklarowanych etykiet w makrze i w pliku *.LAB, poprzednio
wywołanie dwóch makr z tymi
samymi etykietami kończyło się błędem 'Label declared twice',
teraz jestOK
- poprawione zarządzanie struktura .MACRO, .PROC zdefiniowaną
w obszarze .LOCAL
- zablokowanie wykonywania się dyrektyw .EXIT, .PRINT, .ERROR
w deklaracji makra, wykonywane są teraz tylko gdy makro zostanie
wywołane
- mała poprawka dotycząca komunikatów sygnalizujących brak
wystąpienia .ENDP, .ENDL, .ENDM w przypadku gdy były dołączane
pliki przez ICL
- poprawka zapobiegająca kasowaniu pliku *.LAB, w przypadku
gdy nie był generowany listing *.LST
- jesli .PROC nie ma zadeklarowanych parametrów, MADS nie
podejmie próby ich pobrania
- dla tak błędnie zapisanego rozkazu 'lda (),y' poprzednia
wersja assemblera "wykładała" się
- dla rozkazu określającego liczbę powtórzeń linii (:N), można
podać wartość 0, przedtem tylko >0
- poprawione testowanie wyrażen warunkowych, w szczegolności
gdy .ELSE wystąpiło po .ELSEIF
- dodany zapis etykiet procedur .PROC do plików *.LST, *.H
- naprawione działanie dyrektywy .ERROR
- poprawione wywoływanie makr z poziomu makra, w poprzedniej
wersji były problemy gdy po wywołaniu makra występowała etykieta,
wówczas MADS nie potrafił odnaleźć wartości takiej etykiety
- dodane pokazywanie wartości zdefiniowanej etykiety w pliku
*.LST
- rozszerzone działanie pseudo-rozkazu INS, np.: INS 'filename',-N
spowoduje odczyt N ostatnich bajtów z pliku
- rozszerzone działanie (możliwość zdefiniowania własnego
nagłówka bloku w pliku) pseudo-rozkazu ORG [[expression]]adres[,adres2]
- dyrektywa .ENDP nie wygeneruje już rozkazu RTS dla procedury,
która nie miała zadeklarowanych parametrów i nie wystąpiła
w jej ciele dyrektywa .EXIT
- w przypadku braku zadeklarowanych parametrów dla .PROC nie
są wywoływane makra @CALL, @ExitProc tylko asemblowane odpowiednie
rozkazy JSR, RTS
- poprawiony n/w błąd
;TEST1.A65
;
opt h- ;first part OBJ file contains headers already.
ins "part1.obj"
opt h+
;
;next parts follows here
;
org $5000
lda #$12
lop jmp lop
;... >mads.exe test1.a65 /o:test1.obx
Mad-Assembler v1.3.7beta by TeBe/Madteam
ins "part1.obj"
test1.a65 (8) ERROR: No ORG specified
- możliwość użycia komentarza jednoliniowego oznaczonego znakami
//
- nowy przełącznik /i:path (Additional include directories)
- poprawne wyszczególnianie niezadeklarowanej etykiety przy
błędzie 'Undeclared label'
- wyszczególnianie niezadeklarowanego makra przy błędzie 'Undeclared
macro'
- jeśli .PROC nie ma parametrów, nie jest już sprawdzana obecność
deklaracji dla @STACK_ADDRESS
- usprawnione poszukiwanie etykiet w obrębie .LOCAL
- dla definicji można używać już rozkazu 'EQU' (poprzednio
tylko ' = ')
- w strukturze .PROC nie jest już wymagane użycie dyrektywy
.EXIT, w przypadku jej braku zastępuje ją dyrektywa .ENDP
- możliwość użycia komentarza wieloliniowego ograniczonego
znakami /* */
- usunięty błąd polegający na nieprawidłowej modyfikacji adresów
struktury .PROC (gdy .PROC występowało w strukturze .LOCAL)
- dodana możliwość używania dyrektyw od pierwszego znaku wiersza
- możliwość umieszczania struktur .PROC oraz .MACRO w .LOCAL
i ich wywoływanie
- umożliwione odczytywanie plików z ustawionym atrybutem 'Read
only' oraz 'Hidden' (FileMode=0)
- dodana możliwość zagnieżdżania struktur .LOCAL
- dodana obsługa pseudo rozkazów .LOCAL i .ENDL
- dodana obsługa przełącznika /p znanego z XASM
- usunięty błąd z repetycją linii, błąd występował gdy linia
w której jest repetycja była ostatnią linią przetwarzanego
pliku
- poprawione błędy zauwazone przez Rastera (przyklad ..\RMT_PLAYER\MUSIC.A65
asembluje teraz poprawnie)
- obsługa składni XASM'a typu 'lda:sta' za pomoca makr (przykłady
w XASM_MACRO.ASM)
- dodana obsługa pseudo rozkazu .ELSEIF oraz jego odpowiednika
ELI
- dodana obsługa pseudo rozkazu ERT (ERT expression)
- dodany przełącznik '/m:filename' który pozwoli wczytać plik
z definicjami makr
- w wersji 1.2.7beta byla blednie asemblowana linia w stylu
dta b(value1),b(value2),...
- naprawione problemy z dzialaniem przelacznikow /l: /o: /t:
- dodany przelacznik /h ktory tworzy plik *.h dla cc65 (wersja
testowa)
- rozbudowana deklaracja makr o separator i tryb dzialania
(przyklad XASM_MACRO.ASM)
- zmiana w deklaracji parametrow procedury, zamiast znakow
'( )' sa teraz '{ }'
- dodane kody wyjscia, takie same jak w XASM
- pseudo rozkaz .IF ma teraz odpowiednik w pseudo rozkazie
IFT
- pseudo rozkaz .ELSE ma teraz odpowiednik w pseudo rozkazie
ELS
- pseudo rozkaz .ENDIF ma teraz odpowiednik w pseudo rozkazie
EIF
- dodana obsluga skladni w stylu LDA ADRES,Y[+-] (LDA (BYTE),Y[+-])
oraz LDA ADRES,Y[+-]expression
- dodane przyklady w wersji dla MADS ProTracker'a i Inertii