atarionline.pl MADS i zagnieżdżone ICL'e - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013
     
    elo,
    żeby nie było, że tylko pluje - szacun za świetne narzędzie :) Powiem szczerze, gdyby nie MADS, prawdopodobnie zabrakło by mi zapału, żeby zacząć grzebać...

    Jeżeli z głównego pliku, którego nazwe podaje jako parametr do wywołania MADS'a, zrobie sobie ICL ze ścieżką relatywną wszystko jest oka. Ale jeżeli tenże ICL wskazany ścieżką relatywną zawiera w sobie ICL'a, także ze ścieżką relatywną, to taki zagnieżdżony ICL będzie wyszukiwany w odniesieniu do katalogu z plikiem głównym.

    Da się żeby to działało?

    Do czego mi to potrzebne? Na napewo przyzwyczajenie z gcc. Ale także w sytuacji gdzie kompiluje z użyciem .ifdef, np. na różne platformy - chciałbym mieć pliki o tych samych nazwach, ale w różnych podkatalogach - i oczywiści ICL "pierwszego stopnia" po .ifdef wskazuje plik, który wskazuje już głębiej odpowiednie pliki. Nie da rady tutaj przełącznik -i, bo jak nakarmie go wszystkimi możliwymi ścieżkami, to zainkluduje plik z katalogu, który jest bliżej początku listy -i.
    • 2: CommentAuthor0xF
    • CommentTime23 Feb 2013
     
    Budując na różne platformy karm go różnymi ścieżkami.
    • 3: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013 zmieniony
     
    edit @ 2013-02-23 17:41 - patch 000 syfi pod Windą, nie używać - zamiast niego dwa posty niżej jest 002 - robi to samo, ale działa pod lin i win.

    Komplikuje mi to Makefile'a, dwa jak mam taki projekt z wieloma małymi plikami, a całość w edytorze (IDE) z drzewkiem katalogów (tak, że mogę się szybko przełączać między plikami projektu), to dodatkowo kliknięcie w ścieżkę relatywną otworzy mi ten plik - to jest naprawde wygodne.

    Wiesz - to jest pierda - każdy lubi co innego i ma swoje ulubione środowisko. Tak już z doświadczenia wiem, że jak mam dobrze poskładane środowisko, to mogę zaoszczędzić setki minut na przełączaniu się między oknami, wpisywaniu ciągle tego samego, i zawieszce nad mega skomplikowanymi plikami wsadowymi.

    A, że jestem jednym z najstarszych wyznawców religii "Napisz se", chciałbym zaproponować patch.

    000 działa w następujący sposób: dodaje przełącznik -r do wywołania MADS'a. Ścieżka każdego ICL'a zostanie dodana do listy przełącznika -i automatycznie w czasie kompilacji.

    001: MADS nie wypluwa końca wiersza, jeśli kompilacja zakończyłą się niepowodzeniem, więc prompt wskakuje mi w środek wiersza. Jeśli użyję strzałek (historia) to robi mi się kasza w linijce - też pierda.

    mads-patched.pas to MADS 1.9.5 zapaczowany oboma paczami :)

    UWAGA!!! Średnio testowany - nie wiem jak wpływa na resztę kodu MADS'a, nie mam też Delphi, żeby sprawdzić na Winblows. Tu musi się TeBe wypowiedzieć, bo ma najlepszą wiedzę. W dopisanym kodzie zachowałem koniec wiersza z oryginalnych źródeł, czyli CR LF.

    Mój pascal mocno zardzewiały jest :/ więc jakby ktoś chciał używać to ostrożnie.
    • 4: CommentAuthormono
    • CommentTime23 Feb 2013
     
    Fajna rzecz. Jeśli znasz gcc, to pewnie przyzwyczajony jesteś do cpp. Proponuję zestawiać sekwencję cpp + mads.
    Ja używam sobie cpp do zamiany odwołań typu COMFNAM na COMTAB+33 pod SDX, bo mads niestety nie potrafi definiować lokacji (lub nowych symboli) względem symboli SDX (a niewykluczone, że ja nie umiem :]).
    • 5: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013 zmieniony
     
    @mono zawstydziłeś mnie bo mniej więcej rozumiem co napisałeś, ale nie do końca :)

    Mnie się marzy jeszcze, żeby MADS umiał include'ować pliki h - ale w taki nietypowy sposób. Tzn. każdy kto pisze/grzebie/bawi się (ja się bawię) ma jakieś już porobione pliki h, np. z adresami rejestrów sprzętowych. I fajnie, bo można by ich użyć pisząc tool pod Winde, albo w cc65, albo w... MADS. Chciałbym, żeby pliki h parsował tak: dowolną linię traktował jako komentarz i ignorował, a linie #define traktował jako definicję etykiety... pewnie se napisze :)

    PS: widzę już, że patch 000 syfi pod Windą - w załączeniu 002 - działa pod lin i win. MADS załączony w tym pośćie paczowany jest 001 i 002.
    • 6: CommentAuthormono
    • CommentTime23 Feb 2013 zmieniony
     
    No mam sobie plik sdxdef.h:
    #define COMFNAM COMTAB+33
    itd.

    W kodzie programu prog.asx mam:
    #include "sdxdef.h"

    ...
    lda COMFNAM
    ...

    Zelcenie:
    $ cpp -P -o prog.a prog.asx && mads -t -l -o:prog.com prog.a

    Wygeneruje źrodło:
    ...
    lda COMTAB+33
    ...

    i skompiluje do prog.com.

    Odnośnie przerabiania .h ze stałymi na .icl - nie wystarczyłoby coś takiego:
    $ gawk '/#define/ { print $2 "=" $3 }'

    ?

    Edit: Oczywiście apostrofy są bez backslashy (to engine forumowy przerabia).
    • 7: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013 zmieniony
     
    A no tak to kumam :) sprytne z tym preprocess'orem - nie wymyśliłbym.

    Wiesz - ja sobie dłubie takie tam, że zmieniam kolor sprajta w środku linii i to już mi sprawia wielką frajdę :)

    Z gawk'iem masz racje, ostatnio robiłem postprocesing OCR'a na regex'ach, których nie rozumiem - też się da :D

    Akurat moje nagłówki są mocno adnotowane, wyjustowane tabami. Nie chce mi się kurde tego do "equ" przerabiać...

    #define ANTIC           0xd400
    #define ANTIC_BASE      ANTIC

    // ANTIC register map

    //      Name            HEX address       HEX a DEC a   Description                             R/W     Shadow  HEX a   DEC a
    #define DMACTL          ANTIC + 0x0     //$d400 54272   Direct Memory Access Control            Write   SDMCTL  $022F   559


    Chciałbym z MADS'a zrobić serce toolchain'a i nie pieprzyć się już "na około". Z MADS jest o tyle dobrze, że raz jest fajnie (czytelnie) napisany, dwa w pascal'u - może uda mi się go nauczyć łykać czyste .h (w zakresie etykiet).

    dzięki za sposób z -P

    edit @ 2013-02-23 20:54
    Znaczy mój point jest taki: załóżmy, że napisałeś jakiś badziewny loader, który daje 62kB RAM użytkownikowi i teraz chcesz go upowszechnić. Ludzie będą pod to pisać w cc65 i w asm. I musisz utrzymywać dwie wersje nagłówków. A jakby Twój assembler umiał łykać takie .h, to po problemie - a głównie chodzi o etykiety.
    • 8: CommentAuthortebe
    • CommentTime23 Feb 2013 zmieniony
     
    Mono symbole SDX definiujesz przez SMB

    calypso2k to -R polegać ma na tym aby katalog w którym znajduje się inkludowany plik stawał się katalogiem nadrzędnym dla kolejnych operacji inkludowania ?

    tzn że masz różne katalogi z plikami które chcesz inkludować i powtarzające się nazwy plików towarzyszące tym plikom, np.

    cat0\main.asm
    cat0\duchy.asm

    cat1\prg1.asm
    cat1\duchy.asm

    cat2\prg2.asm
    cat2\duchy.asm

    i chcesz aby plik duchy.asm z każdego kolejnego katalogu był widziany gdy inkludujesz main.asm, prg1.asm, prg2.asm

    aby nie pisać ścieżek wprost, relatywnych ?
    • 9: CommentAuthormono
    • CommentTime23 Feb 2013
     
    @tebe: Ależ COMTAB jest zdefiniowany, jako symbol.
    Tylko, że COMFNAM to jest COMTAB+33 i tego już nie potrafię zapisać w MADS tak, żeby nie krzyczał.
    • 10: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013 zmieniony
     
    @tebe: nie do końca - mam nadzieje, że uda mi się to wytłumaczyć - załóżmy takie drzewko plików

    /
    |-kernel
    | L bootstrap.asm
    L-arch
    L atari
    |-include
    | L antic.asm
    |-reset.asm


    bootstrap.asm podaje jako plik do skompilowania MADS'owi.
    bootstrap.asm zawiera ICL '../arch/atari/reset.asm' - to działa
    reset.asm zawiera ICL 'include/antic.asm' - to rzuca błędem: reset.asm (8) ERROR: Cannot open or create file 'include/antic.asm' - ponieważ ścieżka 'include/antic.asm' będzie wyszukiwana relatywnie do katalogu 'kernel' czyli 'kernel/include/antic.h'.

    Jeżeli będę dorzucał ścieżki kolejnych ICL to t_pth, to po pierwszym ICL w tej tablicy mamy '../arch/atari'.
    Getfile() szuka z wykorzystaniem t_pth, więc znajdzie '../arch/atari' doda do niego 'include/antic.asm'. Testfile() potwierdzi i gra - to się dzieje w paczu :)
    • 11: CommentAuthortebe
    • CommentTime23 Feb 2013
     
    w przykładach mads-a ..\examples\sdx\td2.fas

    jest w kodzie comtab+$0f itp.

    a Twój przykład COMTAB+33 jest użyty w przykładzie
    ..\examples\sdx\trace2.fas

    wykorzystany jest "trick" z adresem definiowanym przez DTA

    PCONFNAM DTA A(COMTAB+33)
    • 12:
       
      CommentAuthorjhusak
    • CommentTime23 Feb 2013
     
    Regexy to podstawa. To jest sporo łatwiejsze niż programowanie w czymkolwiek. Prostsza teoria.
    • 13: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013
     
    regex'y proste!? :O
    Jestem w stanie zwalidować mail'a w php, c++, pascal, javascript jak się postaram to w brainfuck'u, ale nie regex'em, tak żeby założyć o przednie zemby, że jest foolproof.

    Widziałeś RFC do adresu mail? :D
    • 14: CommentAuthormono
    • CommentTime23 Feb 2013 zmieniony
     
    @tebe: Ale już czegoś takiego, jak:
    lda COMFNAM,y

    bez użycia ZPG nie zrobię w sposób, jaki proponujesz.
    Posiłkowanie się preprocessorem ma tę zaletę, że Tebe może się skoncentrować na samym assemblerze, a ja i tak mam makra, inkludy i inne cuda :)

    @calypso2k: RE r0l0. Proste i nie trzeba pisać programu. Program idealny to taki, którego rozmiar dąży do zera :P Ale ideał, jak to ideał - nieosiągalny...
    • 15: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013 zmieniony
     
    @mono nie ma jak off-top :D Wiesz, dla każdego róló to w czym siedzi :)

    aczkolwiek, jak pykasz takie z palca ->link<- - zapraszam do kraka, stawiam flaszke bez pytań, od ręki.

    edit @ 2013-02-23 22:46
    jak nie pykasz, też zapraszam na flaszke :D
    • 16: CommentAuthormono
    • CommentTime23 Feb 2013
     
    Ta. Przepraszam za offtopa.
    A z flaszką w Kraku proponuję zmierzyć się w większym gronie. Ech ostatnio sztab w Kraku był w Dniu, w Którym Spadł Samolot (tm). I znowu offtop...
    • 17: CommentAuthorcalypso2k
    • CommentTime23 Feb 2013
     
    No 65xe (vanilla) jest, SIUP jest (thx to grzeniu), flaszke sie zrobi, także jakby były chęci na sztab - zapraszam. Lokalem dysponuje niedużym, ale zawsze.
    • 18: CommentAuthormono
    • CommentTime23 Feb 2013
     
    Dzięki. Chętnie zasztabuję :) Jeszcze się zmówimy.