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 11:02
       
      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 13:02
       
      Budując na różne platformy karm go różnymi ścieżkami.
      • 3: CommentAuthorcalypso2k
      • CommentTime23 Feb 2013 15:02 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 16:02
       
      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 17:02 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 19:02 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 20:02 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 20:02 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 21:02
       
      @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 21:02 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 21:02
       
      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 21:02
       
      Regexy to podstawa. To jest sporo łatwiejsze niż programowanie w czymkolwiek. Prostsza teoria.
      • 13: CommentAuthorcalypso2k
      • CommentTime23 Feb 2013 22:02
       
      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 22:02 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 22:02 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 22:02
       
      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 23:02
       
      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 23:02
       
      Dzięki. Chętnie zasztabuję :) Jeszcze się zmówimy.