Madass


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.


v1.9.8

- naprawione działanie rozkazów 65816 PEA, PEI, PER
- dodana możliwość podania kodu dla .RELOC [.BYTE|WORD] [TYPE]

v1.9.7

- 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

v1.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 .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

© Tebe/MadTeam, hosting: www.atari8.info