- poprawione działanie .UNDEF, .IFDEF
- poprawione wykonywanie zagnieżdżonych pętli .REPT
- dodana możliwość łączenia obszarów lokalnych, .LOCAL +label_name
- dodanie kolorowania komunikatow konsoli
- etykiety automodyfikacji kodu, np.:
lda label: #$40
- nowa dyrektywa .RND zwracająca wartość losową z zakresu 0..255
- dodany komunikat ostrzeżenia 'Register A is changed' dla pseudo rozkazów DEW, DEL, DED
- nowy przełącznik -bc 'Branch condition test', powoduje wygenerowanie komunikatów ostrzeżenia w przypadku kiedy skok jest poza zakres lub przekracza stronę pamięci
- dodany komunikat ostrzeżenia 'Buggy indirect jump' w przypadku użycia rozkazu JMP(ABS)
- dodana dyrektywa .FILEEXISTS('filename') zwracająca 1 gdy plik w podanej ścieżce istnieje, 0 gdy nie istnieje
- rozszerzony komunikat 'Value out of range (VALUE must be between X and Y)'
- .cbm 'text' konwersja na znaki ekranowe Commodore C64
- usunięty błąd kiedy procedura .PROC znajdująca się w bloku .LOCAL nie została oznaczona jako "do asemblacji" mimo tego że było do niej odwołanie z poziomu makra .MACRO w bloku .LOCAL
- usunięty błąd, etykiety tymczasowe ?label były oznaczane "do relokacji"
- krótszy kod dla #CYCLE
- poprawki dla .BY, .WO, .HE, .SB, .CB, .FL
- komunikat błędu 'Improper syntax' w przypadku użycia .BY, .WO, .HE, .SB, .CB, .FL w bloku .STRUCT
- dodane nowe dyrektywy dla 65816 .LONGA ON|OFF, .LONGI ON|OFF
- poprawione działanie śledzenia rozmiaru rejestrów 65816 gdy 'OPT T+'
- dodany przełącznik -FV:VALUE pozwalający ustalić wartość wypełnienia pamięci gdy 'OPT F+'
- dodana możliwość podania argumentu jako ciągu dwóch znaków (poprzednio tylko 1 znak) np. lda #'AB' , mwa #'XY' $80
- poprawione generowanie kodu wynikowego dla nielegali DOP, SHA
- dodane nowe dyrektywy (65816) .A8, .A16, .I8, .I16, .AI8, .IA8, .AI16, .IA16 pozwalające ustawić rozmiar rejestrów AXY
- dodane nowe dyrektywy (65816) .ASIZE, .ISIZE zwracające aktualnie ustawiony rozmiar rejestrów AXY
- rozkaz JMP zmieniany jest na JML (65816) tylko gdy skok dotyczy innego 64KB banku niż obecny
- dodany nowy przełącznik '-ml:value' (margin-left property), który umożliwia zmianę lewego marginesu generowanego listingu w zakresie od 32 do 128 znaków
- poprawione parsowanie parametrów makra zapisanych przy pomocy etykiet
.macro test currentRow, previousRow .print Tmp%%currentRowAllowed .print Tmp%%previousRowAllowed .endm
- poprawione alokowanie danych .ARRAY gdy nie ma określonego rozmiaru, lub jest to tablica inna niż jednowymiarowa
- zwiększona liczba przebiegów dla .PROC, w pewnych warunkach dla parametru "xa .reg" parametr był źle interpretowany
- nowa dyrektywa .DEFINE pozwalająca definiować jedno liniowe makra (można definiować wielokrotnie w tym samym przebiegu)
.DEFINE MACRO_NAME expression .DEFINE pisz .print %%1+%%2 pisz (5,12) .define text .sb text 'atari'
- nowa dyrektywa .UNDEF MACRO_NAME, usuwa definicję jedno liniowego makra MACRO_NAME
- tablice .ARRAY w bloku .PROC są pomijane jeśli użyto przełącznik -X (exclude unreferenced procedure)
- użycie .ARRAY w bloku .STRUCT nie będzie generować już zer w pliku wynikowym
- nowa dyrektywa .XGET, pozwalająca wczytać do bufora pamięci MADS-a plik i dodatkowo zmodyfikować jego bajty pod warunkiem że są różne od zera (przydatne dla VBXE)
- usunięty błąd powodujący błędny zapis bloku aktualizacji dla starszego bajtu adresu w bloku .RELOC
- .DB i .DW usunięte
- .DBYTE (MSB/LSB) odkłada słowo w odwrotnej kolejności (starszy/młodszy)
- dodane dyrektywy .WGET (WORD), .LGET (LONG), .DGET (DWORD)
- poprawione działanie makro rozkazków ADW, SBW, np.:
adw (tmp),y #1 posx adw (tmp),y ptr2 ptr4
- poprawione alokowanie danych dla .SB [+<byte>],<bytes|string|char>
- poprawione alokowanie danych dla .ARRAY gdy typ większy od .BYTE
- .SIZEOF zwraca rozmiar dla wbudowanych typów .BYTE, .WORD, .LONG, .DWORD
- dodana relokowalna wersja playera MPT examples\players\mpt_player_reloc.asm
- poprawione działanie dyrektywy .DS w blokach SDX (blk sparta $xxx) które nie są relokowalne
- podniesiona maksymalna liczba przebiegow do 20 (pass_max)
- poprawki dotyczące .FL (float)
- nielegalny rozkaz NPO został rozdzielony na 3 rozkazy NPO (jedno bajtowy), DOP (dwu bajtowy), TOP (trzy bajtowy)
- dla bloków SDX BLK EMPTY możliwość podania typu pamięci dla długości bloku =0, pomocne przy deklarowaniu bloku empty przez .DS np.:
blk empty 0 main .ds $200
- naprawiony zapis danych strukturalnych (dta struct_label) w blokach .RELOC
- dla bloków SDX dodana możliwość zwrócenia numeru bloku przypisanego konkretnej etykiecie poprzez operator '=', np. 'lda #=label'
- komunikat błędu 'Extra characters on line' dla pseudo rozkazów skoku w przód/tył, np. 'seq label'
- komunikat błędu 'Extra characters on line' dla typu wyliczeniowego, np. 'enum_label(1)'
- naprawione działanie rozkazów 65816 PEA, PEI, PER
- dodana możliwość podania kodu dla .RELOC [.BYTE|WORD] [TYPE]
- dyrektywa .DEF definiuje etykiety o zasiegu lokalnym, jeśli poprzedzić ją znakiem ':' to globalne
- poprawki dla liczb zmiennoprzecinkowych .FL, poprawione kodowane zera, dokonywane zaokrąglenie do 10 miejsc po przecinku
- dla bloków Sparta DOS X 'blk reloc' i 'blk empty' dodana możliwość określenia innego typu pamięci niż $00 (main), $02 (extended), np.:
blk reloc $40
- poprawka umożliwiająca użycie dyrektywy .PRINT po 'blk empty'
- dodana możliwość definiowania wielowymiarowych tablic .ARRAY, np.:
.array scr [24][40] [11][16] = "atari" .enda mva #"!" scr[11][22]
- dodana możliwość definiowania tablicy .ARRAY poprzez dyrektywę .DS, np.:
tmp .ds .array [5][12][4] .word
- dodana możliwość definiowania tablicy .ARRAY poprzez pseudorozkaz EQU (=), np.:
fnt = $e000 .array [128] [8] .byte
- naprawione działanie makrorozkazu ADW w połączeniu z makrorozkazem SCC itp.
- poprawki dla .REPT, m.in. komentarz wieloliniowy /* */ jest teraz właściwie rozpoznawany
- poprawione działanie etykiet anonimowych dla mnemoników łączonych znakiem ':', np.:
ldx #8 @ lda:cmp:req 20 dex bne @-
- dodany pseudo rozkaz COS(centre,amp,size[,first,last]) generujący wartości dla funkcji cosinus
- dodany komunikat błędu 'Improper syntax' w przypadku użycia dyrektywy .DS w bloku .STRUCT
- naprawione działanie pseudo rozkazu ORG, np.:
opt h- ORG [a($ffff),d'atari',c'ble',20,30,40],$8000,$a000
- addytywne bloki .LOCAL otrzymują kolejne adresy, poprzednio adres ustalany był na podstawie pierwszego wystąpienia takiego bloku
- dodany komunikat ostrzeżenia w przypadku stworzenia kolejnego addytywnego bloku .LOCAL o tej samej nazwie "Ambiguous label LOCAL_NAME"
- dodane mnemoniki PER (PEA rell), PEI (PEA (zp)) dla 65816
- dodane nowy typ danych M (najstarszy bajt LONG) i G (najstarszy bajt DWORD) dla pseudorozkazu DTA, np.:
dta m($44556677) ; -> $55 dta g($44556677) ; -> $44
- dyrektywa .LEN (.SIZEOF) rozszerzona o obsługę danych alokowanych poprzez DTA STRUCT_NAME, np.:
.STRUCT free_ptr_struct prev .WORD next .word .ENDS free_ptr_t dta free_ptr_struct [3] .print .sizeof(free_ptr_t) ; free_ptr_struct [0..3] = 16 bytes
- zmiany dla operacji odczytu plików poprzez ICL, INS itp. plik do odczytu/zapisu będzie poszukiwany najpierw w ścieżce, która prowadzi do obecnie otwartego pliku, następnie ze ścieżki z której został uruchomiony główny asemblowany plik i na końcu ze ścieżek podanych parametrem -i (additional include directories)
- poprawione rozpoznawanie wielkości znaków gdy aktywowany jest przełącznik -c (char sensitive) dla struktur, np.:
.struct fcb sEcbuf .byte .ends data dta fcb [1] (0) lda data[0].sEcbuf
- rozszerzone działanie dyrektywy .REPT o możliwość jej zagnieżdżania np.:
.rept 2,#*2 ; 1 - $0000 ; 2 - $0000 .print '1 - ',# ; 1 - $0001 ; 2 - $0000 .rept :1 ; 2 - $0001 .print '2 - ',.r ; 2 - $0002 .endr ; ; .endr ;
- krótsza wersja pętli #WHILE bez wyrażenia, pętla trwa dopóki LABEL <> 0
#while .word label #end