MADS 2.0.4 MAD PASCAL COMPILER 1.4.0

Madass

  • Download package, source
  • Instrukcja
  • Instruction
  • Download package, source
  • Instrukcja

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


    v2.0.4

    - 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
    

    v2.0.2

    - poprawione alokowanie danych dla .SB [+<byte>],<bytes|string|char>

    v2.0.1

    - 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

    v2.0.0

    - 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)'

    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