Mad-Assembler
Mad-Assembler (MADS) jest cross-assemblerem MOS 6502/MOS 65C02/WDC 65816 autorstwa Tomazs Biela (tebe).
Najnowsze wydania dla systemu Windows są dostępne na Github. Wydania dla innych platform systemów operacyjnych są publikowane cyklicznie w ramach WUDSN IDE Tools.
Historia Zmian
2.1.6 - 2.1.7
- dodana obsługa zapisu wartości w systemie czwórkowym 0q0123
 - nowy przełącznik '-xp Display warnings for unreferenced procedures'
 - Sparta DOS X: Weak Symbol, 
SMB^ - poprawione inicjalizowanie danych 
STRUCTprzezSTRING - poprawki dla 
.LOCAL +label - naprawiony błąd zapisu małych liczb 
FLOAT (.FL), issue 8 - issue #10 fixed
 - issue #18 fixed
 - dodany komunikat ostrzeżenia w przypadku przekroczenia adresu 
$FFFF'Memory range has been exceeded' - poprawione generowanie kodu dla 
LAX (Z,X) - dodane etykiety automodyfikacji dla zasięgu globalnego 
::, np. 
   .local
    lda temp:: #$00
   .endl
   lda #$aa
   sta temp
2.1.5
- poprawione działanie 
.UNDEF,.IFDEF - poprawione wykonywanie zagnieżdżonych pętli 
.REPT - dodana możliwość łączenia obszarów lokalnych, 
.LOCAL +full_path_to_local - dodanie kolorowania komunikatów konsoli
 - etykiety automodyfikacji kodu, np. 
lda label: #$40 
2.1.3
- nowa dyrektywa 
.RNDzwracająca wartość losową z zakresu0..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 
2.1.0
- dodany komunikat ostrzeżenia 'Buggy indirect jump' w przypadku użycia rozkazu 
JMP(ABS) - dodana dyrektywa 
.FILEEXISTS('filename')zwracajaca1gdy plik w podanej ścieżce istnieje,0gdy nie istnieje - rozszerzony komunikat Value out of range (VALUE must be between X and Y)
 
2.0.9
.CBM 'text'konwersja na znaki ekranowe Commodore C64- usunięty błąd kiedy procedura 
.PROCznajdująca się w bloku.LOCALnie została oznaczona jako 'do asemblacji' mimo tego że było do niej odwołanie z poziomu makra.MACROw bloku.LOCAL - usunięty błąd, etykiety tymczasowe 
?labelbyły oznaczane 'do relokacji' 
2.0.8
- krótszy kod dla 
#CYCLE - poprawki dla 
.BY.WO.HE.SB.CB.FL - dodano komunikat błędu 'Improper syntax' w przypadku użycia 
.BY.WO.HE.SB.CB.FLw bloku.STRUCT - dodane dyrektywy dla WDC 65816 
.LONGA ON|OFF.LONGI ON|OFF - poprawione działanie śledzenia rozmiaru rejestrów WDC 65816 gdy 
OPT T+ - added command line option 
-fv:valueto set the memory fill value whenOPT F+. - dodany przełącznik 
-fv:valuepozwalający ustalić wartość wypełnienia pamięci gdyOPT F+ - dodana możliwość podania argumentu jako ciągu dwóch znaków (poprzednio tylko 1 znak) np. 
lda #'AB',mwa #'XY' $80 
2.0.7
- poprawione generowanie kodu wynikowego dla nielegali 
DOPiSHA - dodane dyrektywy WDC 65816 
.A8.A16.I8.I16.AI8.IA8.AI16.IA16pozwalające ustawić rozmiar rejestrówAXY - dodane dyrektywy WDC 65816 
.ASIZE.ISIZEzwracające aktualnie ustawiony rozmiar rejestrówAXY - rozkaz 
JMPzmieniany jest naJMLWDC 65816 tylko gdy skok dotyczy innego64KBbanku niż obecny - dodany przełącznik 
-ml:value(margin-left property), który umożliwia zmianę lewego marginesu generowanego listingu w zakresie od32do128znaków 
2.0.6
- poprawione parsowanie parametrów makra zapisanych przy pomocy etykiet
 
.macro test currentRow, previousRow
    .print Tmp%%currentRowAllowed
    .print Tmp%%previousRowAllowed
.endm
- poprawione alokowanie danych 
.ARRAYgdy nie ma określonego rozmiaru, lub jest to tablica inna niż jednowymiarowa - zwiększona liczba przebiegów dla 
.PROC, w pewnych warunkach dla parametruxa .regparametr był źle interpretowany - dodana dyrektywa 
.DEFINEpozwalająca definiować jedno liniowe makra (można definiować wielokrotnie w tym samym przebiegu) 
.DEFINE macro_name expression
.DEFINE write .print %%1+%%2
write (5,12)
.DEFINE text .sb
text 'atari'
- dodana dyrektywa 
.UNDEF macro_name, usuwa definicję jedno liniowego makramacro_name 
2.0.5
- tablice 
.ARRAYw bloku.PROCsą pomijane jeśli użyto przełącznik-xExclude unreferenced procedures - użycie 
.ARRAYw bloku.STRUCTnie będzie generować już zer w pliku wynikowym - nowa dyrektywa 
.XGET, pozwalająca wczytać do bufora pamięci Mad Assembler plik i dodatkowo zmodyfikować jego bajty pod warunkiem że są różne od zera (przydatne dla VBXE) 
2.0.4
- usunięty błąd powodujący błędny zapis bloku aktualizacji dla starszego bajtu adresu w bloku 
.RELOC .DB.DWusunięte.DBYTE(MSB/LSB) odkłada słowo w odwrotnej kolejności (starszy/młodszy)- dodane dyrektywy 
.WGETWORD,.LGETLONG,.DGETDWORD - poprawione działanie makro rozkazków 
ADWiSBW, np.: 
adw (tmp),y #1 posx
adw (tmp),y ptr2 ptr4
2.0.2
- poprawione alokowanie danych dla 
.SB [+<byte>],<bytes|string|char> 
2.0.1
- poprawione alokowanie danych dla 
.ARRAYgdy typ większy od.BYTE .SIZEOFzwraca rozmiar dla wbudowanych typów.BYTE.WORD.LONG.DWORD- dodana relokowalna wersja playera MPT 
examples\players\mpt_player_reloc.asm - poprawione działanie dyrektywy 
.DSw blokach SDXblk sparta $xxxktóre nie są relokowalne 
1.9.8
- naprawione działanie rozkazów WDC 65816 
PEAPEIPER - dodana możliwość podania kodu dla 
.RELOC[.BYTE|WORD] [TYPE] 
1.9.7
- dyrektywa 
.DEFdefiniuje etykiety o zasiegu lokalnym, jeśli poprzedzić ją znakiem:to globalne - poprawki dla liczb zmiennoprzecinkowych 
.FL, poprawione kodowane zera, dokonywane zaokrąglenie do10miejsc po przecinku - dla bloków Sparta DOS X 
blk relociblk emptydodana możliwość określenia innego typu pamięci niż$00(main),$02(extended), np.: 
blk reloc $40
- poprawka umożliwiająca użycie dyrektywy 
.PRINTpoblk 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 
.ARRAYpoprzez dyrektywę.DS, np.: 
tmp .ds .array [5][12][4] .word
- dodana możliwość definiowania tablicy 
.ARRAYpoprzez pseudorozkazEQU(=), np.: 
fnt = $e000 .array [128] [8] .byte
- naprawione działanie makrorozkazu 
ADWw połączeniu z makrorozkazemSCCitp. - poprawki dla 
.REPT, m.in. komentarz wieloliniowy/* */jest teraz właściwie rozpoznawany 
1.9.6
- 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 
.DSw 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 
.LOCALotrzymują kolejne adresy, poprzednio adres ustalany był na podstawie pierwszego wystąpienia takiego bloku - dodany komunikat ostrzeżenia w przypadku stworzenia kolejnego addytywnego bloku 
.LOCALo tej samej nazwie Ambiguous label LOCAL_NAME - dodane mnemoniki 
PER(PEA rell),PEI(PEA (zp)) dla WDC 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.SIZEOFrozszerzona o obsługę danych alokowanych poprzezDTA 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,INSitp. 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 
.REPTo 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 
#WHILEbez wyrażenia, pętla trwa dopókiLABEL <> 0 
#while .word label
#end
1.9.5
- dodany pseudorozkaz 
SETpozwalający redefiniować etykietę, podobne działanie jak etykiety tymczasowe zaczynające się znakiem?, np.: 
temp set 12
     lda #temp
temp set 23
     lda #temp
- dodana możliwość wymuszenia trybu adresowania w stylu XASM 
a:iz:, np.: 
XASM        MADS
lda a:0     lda.a 0
ldx z:0     lda.z 0
- dodana możliwość określenia nowego adresu relokacji kodu w stylu XASM 
r:, np.: 
XASM        MADS
org r:$40   org $40,*
- poprawione działanie parametru 
-xExclude unreferenced procedures, zmienne.VARnie są alokowane gdy procedura jest nieużywana - rozszerzona składnia dla jednoliniowych pętli 
:rept, możliwe wykorzystanie licznika pętli jako parametru:1lub%%1, np.: 
line0
line1
line2
line3
ladr1 :4 dta l(line:1)
hadr1 :4 dta h(line:1)
ladr2 :4 dta l(line%%1)
hadr2 :4 dta h(line%%1)
- dodany komunikat ostrzeżenia w przypadku użycia nielegalnych niestabilnych rozkazów 6502, np. 
CIM - dodany komunikat ostrzeżenia w przypadku użycia nielegalnych niestabilnych rozkazów 6502, np. 
CIM - dodana nowa funkcjonalność dla pseudorozkazów 
RUNiINI, które teraz zachowują adres asemblacji, poprzednio przestawiały adres asemblacji na$2E0(RUN),$2E2(INI) - dodana obsługa etykiet anonimowych anonymous labels 
@@+[1..9](forward)@-[1..9](backward), w celu zapewnienia przejrzystości kodu ograniczone jest używania takich etykiet tylko dla skoków warunkowych oraz do 10 wystąpień w przód/tył, np.: 
@ dex   <------+---+
  bne @+ --+   |   |
  stx $80  |   |   |
@ lda #0 <-+   |   |
  bne @- ------+   |
  bne @-1  --------+
- rozszerzone działanie dyrektyw 
#IFi#WHILEo zmienne deklarowane przez.VAR, dotychczas wymagane było podanie typu zmiennej, np.: 
 .var temp .word
 #if temp>#2100       ;Now
 #end
 #if .word temp>#2100 ;Before
 #end
1.9.4
- dodana normalizacja ścieżek dla plików, tak aby działały pod Unixami, znaki 
\zamieniane są na/ - poprawione przekazywanie dyrektyw jako parametrów do procedur i makr, dyrektywy nie były rozpoznawane przy włączonym przełączniku 
-c(case sensitive) - poprawione działanie 
.USE.USING - dodana informacja w postaci ostrzeżenia WARNING o etykiecie powodującej nieskończoną ilość przebiegów asemblacji INFINITE LOOP
 - dodany zapis dwóch bajtów nagłówka 
FF FFdla pliku zawierającego blok o adresie ładowania$FFFF - komentarze po mnemonikach nie wymagających argumentu zostaną potraktowane jako błąd, wyjątkiem jest łączenie rozkazów w stylu xasm poprzez znak 
:, np.: 
 pla $00          ->  ERROR: Extra characters on line
 pha:pla $00      ->  OK
- rozszerzona składnia makr o możliwość używania parametrów w postaci nazw a nie tylko wartości numerycznych-decymalnych, np.:
 
.macro SetColor val,reg
 lda :val
 sta :reg
.endm
.macro SetColor2 (arg1, arg2)
 lda #:arg1
 sta :arg2
.endm
- naprawione definiowanie etykiet dla n/w sytuacji, pierwsza etykieta nie zostanie zignorowana
 
temp  label = 100
1.9.3
- poprawione przetwarzanie bloków 
.PROC, które w pewnych okolicznościach mogły zostać pominięte podczas asemblacji - poprawiony zapis 
BLK EMPTYdla plików SDX jeśli zastosowaliśmy deklarację takiego bloku przez.DS - poprawki dotyczące testowania końca linii
 - dodane dyrektywy 
.FILESIZE,.SIZEOFjako odpowiednik dotychczasowej dyrektywy.LEN - rozszerzona składnia dla pól struktury 
.STRUCT, np.: 
.struct name
 .byte label0
 .byte :5 label1
 label2 .byte
 label3 :2 .word
.ends
1.9.2
- możliwość określenia adresu dla 
.ZPVAR = $XX - usprawnione odwołania do etykiet wyliczeniowych 
.ENUM, np.enum_label(field0, field1) - dodana możliwość generowania bloku dla symboli zewnętrznych BLK UPDATE EXTRN dla plików DOS-a, poprzednio tylko dla plików 
.RELOC, np.: 
.extrn vbase .word
org $2000
lda #$80
sta vbase+$5d
blk update extrn
- dodany komunikat błędu Could not use NAME in this context w przypadku rozkazów odwołań do bloków 
.MACRO.ENUM.STRUCT - poprawiony błąd który uniemożliwiał użycie 
EQUw nazwie etykiety - dodana dyrektywa 
.CB +byte,....., ostatni bajt ciągu znakowego zapisywany jest w inwersie - dodana obsługa segmentów poprzez dyrektywy 
.SEGDEF.SEGMENT.ENDSEG - dodana nowa dyrektywa
#CYCLE #Ngenerująca kod 6502 o zadanej liczbie cykliN - dodana obsługa nielegalnych rozkazów 6502, przykład w pliku 
.\examples\test6502_illegal.asm - uaktualnione pliki konfiguracyjne dla Notepad++ 
..\syntax\Notepad++ - poprawiony zapis pliku 
LST - naprawiona alokacja pamięci dla zmiennych strukturalnych, rozszerzona składnia dla 
.STRUCT 
.struct LABEL
 x,y,z .word     // wiele zmiennych tego samego typu w jednej linii
 .byte a,b
.ends
.enum type
  a=1,b=2
.ende
.struct label2
  x type
  type y
.ends
1.9.0
- 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 
.LOCALtylko pierwszy adres z takich bloków jest zapisywany - poprawki dotyczące parsowania makr, poprzednio etykiety zaczynające się od 
ENDmogły zostać zinterpretowane jako pseudo rozkazEND - poprawka odczytu dla pustego pliku relokowalnego, poprzednio występował błąd Value out of range
 - poprawki dla 
.USING.USE 
1.8.8 - 1.8.9
- uaktualniony silnik duchów programowych 
..\EXAMPLES\SPRITES\CHARSo duchy 8x24 - w przypadku braku podania rozszerzenia pliku i braku istnienia takiego pliku dla 
ICL 'filename'zostanie domyślnie przyjęte rozszerzenie*.ASMICL 'filename.asm' - poprawione działanie komentarzy 
/* */w blokach.MACRO.REPT - usunięty błąd uniemożliwiający poprawną asemblację bloku 
#IF#WHILEdla 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 
1.8.6 - 1.8.7
- usprawnione rozpoznawanie komentarzy 
/* */w wyrażeniach - domyślny adres dla 
.ZPVARustawiony na$0080, poprzednio$0000 - dodana nowa dyrektywa 
.ELIFjako krótszy odpowiednik dyrektywy.ELSEIF - rozszerzone działanie dyrektywy 
.LENo możliwość podania jako parametru nazwy pliku, zwracana jest wówczas długość takiego pliku - usprawnione działanie dyrektywy 
.DEFw wyrażeniach warunku.IF.IFDEFIFNDEF 
1.8.5
- 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 
-xExclude 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.ALIGNnie spowodują alokacji zmiennych zdefiniowanych przez.VAR - alokacja zmiennych 
.VARprzed nowym blokiemORGnie nastąpi jeśli blokORGznajduje się w bloku.LOCALlub.PROC - poprawione łamanie wierszy znakiem 
\w ciągach ograniczonych nawiasami() - usunięty błąd powodujący relokowanie adresu dla wyrażenia dyrektywy 
.ERRORERT - 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 
MVAMWAitp. - 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ę 
.VARpodczas 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
.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.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.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
1.8.3 - 1.8.4
- 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 
MVPMVNPEABRAfor WDC 65816 - dodane nowe rozkazy 
BRLJSLJMLWDC 65816, jako odpowiedniki rozkazów długich skokówBRAJSRJMP - 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ę 
.DSlub 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 
.ZPVARumoż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 
.ERRORi pseudo rozkazuERT, możliwe jest umieszczenie dodatkowych informacji w wierszu podobnie jak dla.PRINT.ECHOnp.: 
  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.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] .long
  {}
}
1.8.2
- 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 
.ECHOjako odpowiednik dyrektywy .PRINT, dodatkowo informacje generowane przez.PRINT.ECHOzapisywane są teraz także w listingu*.LST - dodana nowa dyrektywa 
.ALIGNpozwalają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) 
1.8.1
- 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ówLOCAL - 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 
.VARw bloku.REPT - umożliwione zagnieżdżanie oraz wielokrotne uruchamianie (poprzez makra) pętli 
.REPT: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
1.7.9 - 1.8.0
- 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 
.DSi opcjiOPT 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 
.TESTzastąpiona została przez dyrektywę#IF, dyrektywa.ENDTprzez#END, dodatkowo możliwe jest użycie dyrektywy#ELSEnp.: 
 # if .byte i>#8 .and .byte i<#200
 # else
       #if .word j = #12
       #end
 # end
- dyrektywa generująca kod 6502 dla iteracji 
.WHILEzastąpiona została przez dyrektywę#WHILE, dyrektywa.ENDWprzez#END, np.: 
 lda 20               ->       lda 20
 # while .byte @=20   ->  wait cmp 20
 # end                ->       sne
                      ->       jmp wait
- dyrektywy 
#IF#WHILEakceptują dwa dodatkowe operatory==!= - dodana dyrektywa 
.EXITMjako odpowiednik.EXIT - dodana dyrektywa 
.FIjako odpowiednik.ENDIF - dodana dyrektywa 
.IFDEFjako krótszy odpowiednik dyrektyw.IF.DEF - dodana dyrektywa 
.IFNDEFjako 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.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@CALL_2.MAC, zmienna tymczasowa globalna?@stack_offsetmodyfikowana 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#WHILEw oparciu o kod generowany przez makro rozkazyCPBCPWCPLCPD, dyrektywy#TEST#WHILEdla wyrażeń=#0<>#0generują najkrótszy kod wynikowy - dodana optymalizacja długości generowanego kodu dla makro rozkazów 
MWAMWXMWY - dodana nowa opcja OPT R optymalizująca kod makro rozkazów 
MWAMWXMWYMVAMVXMVYze 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 
.DEFo możliwość przypisania wartości nowo deklarowanej etykiecie, np.: 
.def label = 1
- rozszerzona funkcjonalność dyrektywy 
.DEFo 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
1.7.8
- dodane dyrektywy 
.MEND.PGEND.RENDjako odpowiedniki.ENDM.ENDPG.ENDR - obecnie deklaracja makra musi kończyć się dyrektywą 
.ENDMlub.MEND(poprzednio dopuszczalne było użycie dyrektywy.END) - poprawiony sposób wykonywania makr dzięki czemu umożliwione zostało wykonanie dyrektywy 
.ENDLz poziomu wykonywanego makra - poprawione zauważone błędy dotyczące starszych bajtów relokowanego adresu oraz bloku aktualizacji symboli publicznych
 - dodana nowa dyrektywa 
.USING.USEpozwalają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 (
SNERNEitp.), 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.ORlub.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.ORlub.AND(brak możliwości zmiany piorytetu wartościowania przy pomocy nawiasów), np.: 
.while .byte k>#4 .and .byte k<#39
...
...
.endw
1.7.6 - 1.7.7
- dodany nowy przełącznik 
-B:ADDRESSumoż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.DWORDprzekazywanych do procedur.PROCtypu.VAR(poprzednio akceptowanymi typami parametrów był tylko.BYTE.WORD) - dodana nowa dyrektywa 
.FLrealizująca zapis liczb rzeczywistychREALw 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 
.BYTEw 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 
.VARw blokach.LOCALznajdują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.LOCALprzed dyrektywą.ENDL - umożliwiona została relokowalność kodu generowanego przez dyrektywy 
.WHILE.TEST - poprawione działanie testowania wartości typu 
.WORDw kodzie generowanym przez dyrektywy.WHILE.TEST - dodana nowa dyrektywa 
.ADRzwracająca adres etykiety przed zmianą adresu asemblacji - dodana nowa dyrektywa 
.LENzwracająca długość bloków zdefiniowanych przez.PROC.ARRAY - poprawione działanie operacji dzielenia, mnożenia i modulo, poprzednio błędnie był interpretowany piorytet dla tych operacji
 - 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 
.STRUCTo 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 
MWAo możliwość użycia adresowania pośredniego strony zerowej postindeksowanegoY, 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.PROCw 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 
.NOWARNwyłączająca wyświetlenie ostrzeżenia dla aktualnie asemblowanego wiersza, np.: 
.nowarn PROCNAME
- dodane nowe makro rozkazy 
PHRPLRrealizują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,SBBrealizują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
1.7.5
- dyrektywa 
.DSw blokach relokowalnych SDXRELOCi MADSRELOCdeklaruje 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.REPToraz procedura realizująca dzielenie wiersza przy pomocy znaku\ - dodane nowe pseudo rozkazy 
ADW,SBWrealizujące dodawanie i odejmowanie wartości typuWORDdla 6502, np.: 
adw hlp #40        ; hlp=hlp+40
adw hlp #20 pom    ; pom=hlp+20
- rozszerzone działanie dyrektywy 
.DEFo możliwość zdefiniowania etykiety, np.:.DEF label - zwiększona liczba przebiegów dla deklaracji etykiet przez EQU dla pewnych szczególnych przypadków
 
1.7.4
- naprawione działanie dyrektywy 
.PRINT, dotąd mogła nie wyświetlić wartości etykiet zaczynającej się na literęABCDEFGHLTV - zablokowane działanie dyrektywy 
.DSw blokach.RELOCSDX oraz naprawione jej działanie z instrukcją warunkową.IFIFT - 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, nie ma potrzeby używania dyrektywy 
.EXIT, a dyrektywa.ENDPnie powoduje już dodatkowych działań na stosie programowym - dodana nowa dyrektywa 
.SYMBOLjako odpowiednik bloku aktualizacjiBLK UPDATE NEW SYMBOL 'SYMBOL', dyrektywę.SYMBOLmożna użyć w dowolnym miejscu programu - dodane automatyczne wywoływanie bloków aktualizacji 
ADDRESSEXTERNALPUBLICSYMBOLdla.RELOCi 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?labelstraktowane są jako lokalne i tymczasowe, nazwą obszaru lokalnego jest ostatnio użyta etykieta bez znaku zapytania - dodane dyrektywy 
.LEND.PEND.AEND.WEND.TEND.SENDjako odpowiedniki dyrektyw.ENDL.ENDP.ENDWENDW.ENDT.ENDS - dodane nowe dyrektywy 
.GLOBAL.GLOBLjako odpowiednik (zamiennik) dyrektywy.PUBLIC - dodana optymalizacja skoków warunkowych 
JEQJNEJPLJMIJCCJCSJVCJVSjeśli jest taka możliwość wybierany jest skok krótki typuBEQBNEBPLBMIBCCBCSBVCBVS - dodany nowy domyślny separator znak spacji dla przekazywanych parametrów do 
.PROC.MACROdotą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.EXTRNnp. 
.EXTRN a b c d .word
.VAR i = 1  j = 2 .byte
.VAR a b c d .byte
- rozszerzona składnia dla 
.VARumożliwiająca zaincjowanie zmiennych stałą, np.: 
.var i = 10  j = 12 .byte
.var a , b = 2 .byte
- dodane nowe dyrektywy 
.WHILE.ENDWpozwalające na automatyczne wygenerowanie kodu dla pętliWHILE, np.: 
        ldx #$ff
.while .word adr < #$bc40+40*24
        stx $bc40
   adr: equ *-2
        inw adr
.endw
- dodane nowe dyrektywy 
.TEST.ENDTpozwalające na automatyczne wygenerowanie kodu dla warunku, np.: 
.test .byte (@>=#'a')
  .test .byte (@<=#'z')
  .endt
.endt
1.7.3
- dodana możliwość zmiany adresu asemblacji 
.PROClub.LOCALbez zmiany adresu ładowania - usunięto optymalizację kodu dla makro rozkazów 
MWAitp., która mogła powodować w szczególnych przypadkach zapętlenie się MADS - dodane dyrektywy 
.REG.VARpozwalające określić sposób przekazywania parametrów do procedur (.REGprzez rejestry CPU,.VARprzez zmienne) - dodana dyrektywa 
.VARpozwalają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 - jesli brak deklaracji etykiet dla stosu programowego MADS, 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 
CONSTANTw blokachPUBLIC - poprawiona relokowalnosc dla tablic 
.ARRAY, danych stworzonych przez.STRUCT, parametrów przekazywanych do procedur przez stała# 
1.7.2
- przepisana na nowo obsługa pseudo rozkazów 
REQRNERPLRMIRCCRCSRVCRVSSEQSNESPLSMISCCSCSSVCSVS - poprawione działanie dyrektywy 
.LINKdla bloków o stałych adresach - poprawione testowanie słów zarezerwowanych (można używać nazw zarezerwowanych dla WDC 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 
MWAMWXMWYMVAMVXMVYADDSUBINWDEW(do ich obsługi nie są już potrzebne makra) 
1.7.1
- dodana możliwość używania nazw mnemoników WDC 65816 w trybie pracy 6502, w trybie WDC 65816 wystąpi już błąd Reserved word
 - poprawione działanie pseudo rozkazów skoków 
SCCRNEitp. w makrach - usprawnione wykonywanie wielu makr rozdzielonych znakiem dwukropka 
: 
1.7.0
- usunięty błąd, który powodował zbyt mała liczbę przebiegów asemblacji
 - dodana obsługa pseudo rozkazów 
JEQJNEJPLJMIJCCJCSJVCJVS(makra nie są już potrzebne do ich obsługi) 
1.6.9
- rozszerzona składnia dla 
.ARRAY.PUT - dodany pseudo rozkaz 
EXTpozwalający na deklaracje etykiety external - dodane makra 
JEQJNEJPLJMIJCCJCS - dodane dyrektywy 
.PAGES.ENDPG - dodana dyrektywa 
.ENDzastepujaca inne dyrektywy.END? - przełącznik 
-Hzastąpiony został przez-HC(generuje plik nagłówkowy dla CC65) - dodany nowy przełącznik 
-HMgenerujący plik nagłówkowy dla MADS z sortowaniem na etykiety typuCONSTANTSVARIABLESPROCEDURES - dodana nowa dyrektywa 
.RELOCgenerująca kod relokowalny w formacie MADS 
1.6.8
- dodana nowa dyrektywa 
.PUToraz 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 
REQRNERPLRMIRCCRCSRVCRVSSEQSNESPLSMISCCSCSSVCSVS - dodana możliwość łączenia dowolnej liczby znanych MADS mnemoników przy pomocy znaku 
:(styl XASM), np.: 
lda:cmp:req 20
ldx:ldy:lda:iny label
1.6.6 - 1.6.7
- źródło MADS 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 
/3nie jest już potrzebny - poprawiony i rozbudowany został mechanizm przekazywania parametrów do MADS (rozdział Przełączniki 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ę 
.ENDMz pseudorozkazemIFT - poprawione działanie instrukcji warunkowych 
.ELSEIF.ELSE - poprawione testowanie poprawności instrukcji warunkowych w makrach
 - obsługa procedur 
.PROCzostał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 
.PROCz 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=valuepozwalający zdefiniować nową etykietę MADS z poziomu linii poleceń - dodany nowy przełącznik 
/xExclude 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ówAXYdokonywane przez rozkazySEP,REPWDC 65816 - nowe biblioteki w katalogu 
..\EXAMPLES\LIBRARIES - w deklaracji obszaru lokalnego 
.LOCALnie jest wymagane podanie nazwy obszaru - nowe operatory 
-=+=++--pozwalające zmniejszyć/zwiększyć wartość etykiety tymczasowej, np.: 
?label --      ->   ?label=?label-1
?lab ++        ->   ?lab=?lab+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,e)
.endp