atarionline.pl Rzeczy które chciałbyś w MADSie ale boisz się poprosić :) - 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.  
    After upgrading to the latest MADS yesterday to investigate the RELOC changes I still don't understand, I discovered the new build will no longer compile the SIDE3 loader. I get a 'Label name required' error here, which is a specious error since the code is OK and has compiled will all prior versions of MADS. Fortunately I kept the prior MADS executable, renamed 'MADS_OLD.EXE'. ;)
    • 2: CommentAuthortebe
    • CommentTime24 Feb 2022
     
    '@' as label? be more creativity

    char '@' is anonymous labels, used for branch

    ->link<-
    • 3:
       
      CommentAuthorpirx
    • CommentTime24 Feb 2022 zmieniony
     
    oh boy, this code looks like C++ or some other high level shite a bit :))))
    • 4: CommentAuthormono
    • CommentTime25 Feb 2022
     
    Mads is for people who are too lazy to learn assembler :P
    • 5:
       
      CommentAuthorsun
    • CommentTime25 Feb 2022
     
    @mono: you can also write programs in notepad right away in hex ;)
    +1000 to exp ;)
    • 6:
       
      CommentAuthorshanti77
    • CommentTime25 Feb 2022
     
    @sun

    MADS
    mva:rpl	(src),y	dest,y-


    Assembler
    loop
    lda (src),y
    sta dest,y
    dey
    bpl loop
  2.  
    '@' as label? be more creativity

    char '@' is anonymous labels, used for branch


    What's wrong with '@'? Sometimes no label is needed at all, but since dta requires it, it's convenient to use '@' since I may not reference the label anyway. I have other things to do than be 'creative' with a label I won't even reference. :)

    Question is: why did this behaviour suddenly change? Am I expected to go back and change a decade's worth of source code? I have been using MADS for rather a long time, don't forget.

    Regarding the prior 'RELOC' question, as well: the terse explanations of new features are completely puzzling to me, so currently there's little reason to update the compiler anyway.
  3.  
    oh boy, this code looks like C ++ or some other high level shite a bit :))))


    STRUCTs are actually surprisingly useful even as an aid to readability, especially if you have a huge array of data which would otherwise resemble an enormous table of meaningless labels and numbers. More importantly, they're also an aid to maintainability... until they break.

    I tried - in the older MADS build - to simply remove the '@' labels entirely, since there are already PROC identifiers right in front of the DTA statements anyway. Interestingly, this works sometimes and other times results in an error:
    • 9:
       
      CommentAuthorsun
    • CommentTime25 Feb 2022
     
    @shanti77: ależ ja się wychowałem na QA więc jakby rozumiem o co biega :)
  4.  
    A jest może w MADS taki feature, że mogę "oznaczyć" jakąś pamięć jako data i żeby jej naruszenie powodowało błąd kompilacji?

    Np. oznaczam $3000-$3fff jako dane i zaczynam pisać kod od $2000. Piszę piszę i nagle mój kod "wchodzi" w $3001 i dostaję error.
    • 11:
       
      CommentAuthorjhusak
    • CommentTime26 Feb 2022 zmieniony
     
    Spróbuj
    .if *>=$3000
    .error „złe”
    .endif
    org $3000
    … dane


    Piszę z pamięci, ale jakoś tak.
    • 12: CommentAuthorilmenit
    • CommentTime26 Feb 2022
     
    @mgr_inz_rafal - najwygodniej wykorzystac segmenty:
    ->link<-
    definiujesz ich rozmiar i adres i MADS pilnuje tego, aby dane czy kod nie przekraczały zdefiniowanych zakresów. Bardzo wygodne.
  5.  
    O to to!
    Dzięki Panowie ;)

    Sporo krwi mi napsuło takie niespodziewane nadpisanie czegoś w pamięci.
    • 14:
       
      CommentAuthorjhusak
    • CommentTime27 Feb 2022
     
    Zwłaszcza, że mads prowokuje do używania .rept a wówczas dane puchną, oj puchną :)
    • 15:
       
      CommentAuthorjhusak
    • CommentTime21 Sep 2022
     
    Ponieważ ostatnio między innymi rozwijam kod movplay, przydała by mi się taka instrukcja, co liczy cykle w jakiś sposób - ręczne tego robienie jest dość żmudne.

    A ponieważ jeszcze będę tego potrzebował - to piszę :)

    KK w swoim k65 zrobił coś na kształt okienka czasowego, które deklaruje, a k65 wrzuca tam kod.

    Problem z semantyką i ze skokami, można obliczać wszystkie kombinacje i liczyć najdłuższą sekwencję i wywalać warning lub błąd, jeśli takie coś się napotka.
    • 16: CommentAuthortebe
    • CommentTime21 Sep 2022
     
    podaj przykład z k65 takiej instrukcji, nie spotkałem się z czymś takim
    • 17:
       
      CommentAuthorCOR/ira4
    • CommentTime21 Sep 2022
     
    brakuje zakładki z wersją programowania wizualnego/obiektowego, bym nie musiał tyle siedzieć, ułatwiłoby mi to w znaczący sposób prace(coś tam koduje sobie ). ;) ;) ;)
    • 18: CommentAuthortebe
    • CommentTime21 Sep 2022
     
    do liczenia cykli używam osobnego narzędzia, które jest niekompletne, bo nie zawiera wszystkich instrukcji 6502, dla mnie jak na razie starczało

    jako parametr podaje się plik XEX, bez bloków INI, tylko blok RUN, symulacja startuje od adresu RUN, kończy się po napotkaniu rozkazu BRK
    • 19:
       
      CommentAuthorjhusak
    • CommentTime21 Sep 2022 zmieniony
     
    Zostałem poprawiony, że rzeczywiście nie ma czegoś takiego. Jednakże kiedyś rozmawiałem z KK i on się chwalił, że ma takie coś w K65 - używa tego aby wpleść się z obliczeniami w obraz generowany na A2600. Może źle zrozumiałem, ale idea była tego typu.

    Dzięki za ten profiler, wrzuć go na gh, to Ci ludzie może pomogą z tymi rozkazami :)
    • 20:
       
      CommentAuthorpirx
    • CommentTime14 Nov 2022 zmieniony
     
    ciekawy problemik z opcją OPT r+

    kod:
    mva #4 ResultY
    @
    mwa #lineClear LineAddress4x4
    jsr _sep_opty
    dec di
    bne @-


    to zostaje skompilowane do

    lda #4
    sta resulty
    @
    sta LineAddress4x4
    ...


    co by prawie działało, gdyby nie to, że pętla skacze do `sta`.
    Chyba optymalizacja nie powinna działać na skraju etykiet...
    • 21: CommentAuthorilmenit
    • CommentTime14 Nov 2022
     
    Odnośnie liczenia cykli i profilowania kodu, @jhusak zerknij na profiler w Altirra. Może on będzie OK? Ja używałem przy pisaniu Adam Is Me do wybierania funkcji do optymalizacji i potem testowania, czy optymalizacje przynoszą efekt.
    • 22:
       
      CommentAuthorjhusak
    • CommentTime15 Nov 2022 zmieniony
     
    Jeszcze czego mi często brakuje, to składni takiej, aby instrukcje scc, sne etc skipowały więcej niż jedną (pseudo)instrukcję

    Nie działa to z makrami, ani z .local, ani w jednej linijce, np.
    lda 20
    sne
    .macro tmp
    nop
    nop
    .endm
    tmp
    rts

    sne opuści tylko pierwszy nop, co skrupulatnie wynotuje:
    test.asm (1) WARNING: Skipping only the first instruction

    Po prostu przydałyby się bloki kodu typu {}
    lda 20
    sne
    {
    inc 30
    dec 32
    }

    A może jest coś takiego, tylko nie umiem szukać?
    Wiem, że są małpki, ale one wprowadzają więcej zamieszania i generują dużo błędów, w efekcie jednak stosuję jakieś tam labelki nazwane.

    Jest też składnia #if, ale ona jest przegadana i nie można napisać:
    #if C=0
    carry is cleared
    #end

    Można użyć tylko akumulatora
    #if .byte @
    #end
    albo
    #if .byte @=#1
    #end
    • 23:
       
      CommentAuthorjhusak
    • CommentTime16 Nov 2022
     
    To chyba błąd:

    opt h-
    org $2000
    rts
    .align $10
    rts

    generuje pliczek złożony z 2xRTS

    opt h-
    org $2000
    rts
    .align $10,$ff
    rts

    generuje poprawnie - rts, potem 15 bajtów ff, a potem rts.

    Piszę chyba, bo nie wiem, jak dokładnie działa opcja h- - czy ona usuwa headery i już, czy jakoś inaczej.

    Zauważyłem, że opcja .align xxxx,$ff jest załączana z automatu, jeśli mamy opt f+
    Czy to dlatego, żeby uniknąć takich dziur?
    • 24: CommentAuthormono
    • CommentTime16 Nov 2022
     
    Nikt madsa nie przewidział do pisania kodu dla kartridży :D
    • 25:
       
      CommentAuthorjhusak
    • CommentTime17 Nov 2022 zmieniony
     
    Opcja f+ jest dla kartridży. Tylko nie wiem, czy f+ znaczy .align f+ czyli efami, czy po prostu fill gaps.
    • 26: CommentAuthormono
    • CommentTime17 Nov 2022 zmieniony
     
    Do kartridży masz teoretycznie opt f oraz b i konstrukcje .align i bankowanie rmb oraz nmb. Jeszcze chyba było .pages. Okiełznanie tego wymaga jednak sztuczek, bo nie działa to intuicyjnie i jest jak piszesz. Co ja się nakombinowałem, żeby banki były wypełniane poprawnie, bo f+ nie robi co trzeba.
    opt o+ h- ?+ c- f+ b-

    ; bank 0

    opt f-
    org $8000
    opt f+
    rmb

    nop ;treść banku

    if * > $C000
    .error *
    .elseif * < $C000
    org $BFFF
    .byte $FF
    .endif

    ; bank 1

    opt f-
    org $8000
    opt f+
    nmb

    nop ;treść banku

    if * > $C000
    .error *
    .elseif * < $C000
    org $BFFF
    .byte $FF
    .endif

    i tak w koło Macieju. Zrezygnowałem w końcu z użycia .alignów i innych cudownych konstrukcji na rzecz tego ifa.
    Oczywiście wolałbym żeby kod wyglądał tak:
    opt o+ h- ?+ c- f+ b-

    .align $4000

    rmb
    org $8000

    nop

    nmb
    org $8000

    nop

    end

    ale jak się nie da, to trudno.
    A potem jeszcze pewnie będziesz chciał się dowiedzieć jaki jest nr banku dla konkretnej etykiety (=etykieta)...
    Albo używać etykiety z któregoś banku w innym banku (:etykieta)...
    Nieeee, od takich rzeczy niech Cię ręka boska broni.

    A jak zrobić kod przepisywany z jednego miejsca w drugie tak, żeby to działało bezproblemowo, to do dzisiaj nie wiem.
    A gdybyś tak chciał dopasować kod nie do początku strony, ale do końca... Zapomnij. A splatanie dwóch procedur?

    Za dużo bym chciał :)

    Nie zmienia to faktu, że mads jest najbardziej zaawansowanym crossassemblerem jaki znam. I jedynym który generuje kod dla SDX.
    • 27:
       
      CommentAuthorjhusak
    • CommentTime15 Jan 2023 zmieniony
     
    Wow, dopiero teraz przeczytałem. To rzeczywiście mina.

    @tebe, czy jest możliwość przekazania stringu do źródła madsa? Chodzi o np. nazwę pliku, żeby nie modyfikować źródeł dla różnych plików.

    ---edit---

    Ogarnąłem w ten sposób, że dodałem plik z makrami przy pomocy opcji:
    -m:file.mac

    Przy okazji usunąłem błąd, który zjadał pierwszą literę nazwy pliku z makrami i zakomitowałem w repozytorium.
    • 28: CommentAuthortebe
    • CommentTime3 May 2023 zmieniony
     
    dobrze by było gdyby umieszczać takie uwagi w ISSUES

    ->link<-

    ostatnio zauważyłem wpis Draco na temat JSL i jego opinie że go ignoruję, chciałem wrócić do tego ale już nie pamiętam gdzie to widziałem

    trudno mi jest te wszystkie wątki pamiętać, nie jestem w stanie "od strzała" usiąść i coś poprawić, więc polecam ISSUES, tam też można z dopiskiem FEATURE umieszczać sugestie nowych dodatków

    wracając do .ALIGN i wypełnień "dziur"

    - .ALIGN $40

    spowoduje utworzenie nowego bloku (ORG)

    - .ALIGN $40, $aa

    nie spowoduje utworzenia nowego bloku (ORG) tylko wypełni wartością $AA przestrzeń aż do nowego adresu ustanowionego przez .ALIGN $40

    - jako przełącznik -fv:value (mads.exe filename.asm -fv:$aa)

    przełącznik -FV:value dotyczy opcji 'OPT F+'

    -fv:dec
    -fv:$hex

    domyślnie wartością wypełniania jest $FF

    p.s.
    dobrymi przykładami generowania cartów są przykłady dla Atari7800

    ->link<-

    assemblacja 'mads.exe filename.asm -fv:0'
    • 29: CommentAuthorilmenit
    • CommentTime4 May 2023 zmieniony
     
    z ciekawości, czemu domyślnie wartością wypełniania jest $FF a nie $00?

    Pytanie odnośnie banków w MADS. Jaki jest Wasz preferowany sposób pracy z kodami, aby w prosty sposób generować zarówno XEXa dla pamięci rozszerzonej jak i obraz dla Carta, z tych samych kodów źródłowych? Na razie (dopóki pamięć się nie skończy) w bankach chcę mieć tylko dane, bez kodu.
    Aktualnie używam segmentów, projekt mam rozbity na kilkadziesiąt małych plików kodu i danych i mam plik linkujący (include) to wszystko do kilku segmentów (strona zerowa, pamięć pod bankiem, pamięć banku, pamięć nad bankiem przed OS, pamięć pod ROM).
    • 30:
       
      CommentAuthorjhusak
    • CommentTime4 May 2023
     

    ilmenit:

    czemu domyślnie wartością wypełniania jest $FF a nie $00?

    Zapewne to, że ta opcja jest dla kartridży, a kartridże to rom, a rom to ff domyślnie. Szybciej się programuje pamięci.
    • 31: CommentAuthorilmenit
    • CommentTime4 May 2023
     
    Dzięki, nie wiedziałem, że ROM ma domyślnie $FF.
    • 32: CommentAuthormono
    • CommentTime4 May 2023
     
    EPROM kasują się (ultrafioletem) do $FF i Flash (elektrycznie) chyba też, ale EEPROM wydaje mi się, że kasują się (tez elektrycznie) na $00.
    • 33:
       
      CommentAuthorjhusak
    • CommentTime4 May 2023 zmieniony
     
    Tak czy inaczej wewnętrznie się kasują na ff. A jeśli mają 00, to znaczy, że mają logikę xor (stosowane bywa w pamięciach flash tyku karta, pendrive, etc)

    Kasowanie elektrycznie czy ultrafioletem to jeden czort. Flash ma zapis wierszami, a eeprom po jednym bajcie. We flashach często występuje tzw. protokół zapisu bajtu (czy też komenda zapisu bajtu), aby działały jako prom, a nie modyfikowały się w wyniku błędu w kodzie. W eeprom nie wiem, wiem, że miałem eeprom typu "ram" - zapisałeś bajt i był. Tyle, że trwało to rzędu milisekundy na bajt. Piszę z pamięci, mogę się mylić z tymi milisekundami, ale cały eprom 8kB można było zapisać w kilka sekund.

    Tak, jak się kupuje promki, one mają same ff-y. Dopiero zera się zapisuje programatorem przy pomocy określonych sekwencji napięć na nóżkach sterujących.
    • 34: CommentAuthormarok
    • CommentTime6 May 2023
     
    Wpakowuję się w temat z donosem na pewien szczególik (można to nazwać "od biedy" prośbą o nowy ficzer - choć niekoniecznie w tym rzecz).

    Nie ma w zasadzie problemu, ale chciałbym zwrócić uwagę na pewną specyfikę.

    Deklaruję bardzo długi obszar var na stronie zerowej, dlatego robię to poprzez deklarację kolejnych zmiennych w nowych fizycznie liniach za pomocą użycia znaku "\".

    Gdybym jednak chciał dodatkowo zachować sobie w komentarzach w deklaracji te zmienne, które nie są mi na tą chwilę potrzebne, to raczej mogą pojawić się z tym mniej oczekiwane trudności.

    W moim odczuciu pierwsza forma też mogłaby (czy powinna?) działać, ale nie działa. Druga forma działa - dlatego nie ma żadnego problemu (może tylko warto sobie tą drobną zależność odnotować).

    .zpvar \

    @DCP    \
    /*;@DCPA \*/
    @DEC \

    (spacja między "\" a "*/" nie pomoże)

    @DCP    \
    /*;@DCPA \
    */
    @DEC \
    • 35:
       
      CommentAuthorCOR/ira4
    • CommentTime7 May 2023
     
    funkcje automatycznego pisania gier, taki "Thermomix "growy, wrzucamy grafiki, animacje, muzyczki, dokładnie opisujemy co gdzie i jak, opisujemy zasady gry, do tego mamy wpływ na różne szczegóły,
    a kod pisze się sam :D.
    • 36:
       
      CommentAuthorpirx
    • CommentTime24 May 2023
     
    chyba nie ma w madsie opcji ustawienia ostatniego znaku napisu w inwersie.

    a może dałoby się skrobnąć jakieś makro, coś w rodzaju

    .macro dtinv text
    dta d text[:-1]
    dta d text[-1]*
    .endm

    (oczywiście to taki pseudokod, ale może coś takiego dałoby się magią Madsa uzyskać?)
    • 37: CommentAuthormono
    • CommentTime24 May 2023
     
    .cb 'coś'
    • 38:
       
      CommentAuthorPecus
    • CommentTime24 May 2023 zmieniony
     
    Mnie trochę ten dualizm pewnych dyrektyw/rozkazów madsa wkurza :)

    dla "dta" nie ma takiej możliwości a dla .by jest opcja .cb ale nie działa dla INERNALi :) (edytowałem post po tym co pirx napisał)

    Chciałbym móc napisać kod korzystając z jednej z tych konwencji, a nie nagle zorientować się, ze muszę użyć na chwilę drugiej. Źródła byłyby bardziej czytelne.
    • 39:
       
      CommentAuthorpirx
    • CommentTime24 May 2023
     
    nie ma co narzekać, dobrze, że jest. i pewnie da się screencodes wstawić w odp. cudzysłowach
    • 40:
       
      CommentAuthorpirx
    • CommentTime25 May 2023
     
    No niestety to działa wyłącznie dla kodów ATASCII, nie działa dla INTERNAL :(
    No to może jakiś patencior z makro?
    • 41:
       
      CommentAuthorPecus
    • CommentTime25 May 2023 zmieniony
     
    A może jednak wolelibyśmy rozszerzenie dta o np. ^ na końcu (działający tak jak * ale robiacy invers tylko ostatniego znaku bez paczenia czy to ATASCII czy INTERNAL czy cokolwiek innego).

    Niech po prostu ustawia 7my bit w ostatnim bajcie dowolnego ciągu na końcu którego dodamy ten znacznik. Czyli jak * :)

    Please!
    • 42:
       
      CommentAuthorpirx
    • CommentTime25 May 2023 zmieniony
     
    a postawię tyketa, bo tak, to by się bardzo brzydało
    ->link<-
    • 43:
       
      CommentAuthorPecus
    • CommentTime3 Jun 2023
     
    tebe .... no zobacz jak musi wyglądać kod:
    ->link<-

    (np. od linii 482 :)

    że nie wspomnę o:
    ->link<-

    Weź, proszę, i dodaj to: ->link<-

    Bardzo prosimy :)
    • 44: CommentAuthortebe
    • CommentTime3 Jun 2023 zmieniony
     
    dodane ->link<-

    dta 'text'^
    dta "text"^
    • 45:
       
      CommentAuthorpirx
    • CommentTime3 Jun 2023
     
    mniut :)
    • 46:
       
      CommentAuthorPecus
    • CommentTime3 Jun 2023
     
    Dziękujemy!! w imię czytelności kodu źródłowego :)
    • 47: CommentAuthormono
    • CommentTime3 Jun 2023
     
    Ładnie działa, ale:

    1. Czemu właściwie w .cb nie można używać kodów internal z cudzysłowami?
    2. Pięknie działa *^, ale już ^* nie działa.
    • 48:
       
      CommentAuthorPecus
    • CommentTime3 Jun 2023
     
    1. nie wiem - nawet nie sprawdzałem, chciałem trzymać się jednego sposobu zapisu deklaracji danych. Zapis w postaci dta x.... wydał mi się klarowniejszy niż .BY czy .CB (choć wychowałem się na MAC65 :) ). Akurat te fragmenty kiedyś przetłumaczył ma MADSa pirx i mi się to teraz bardziej podoba :)
    Z resztą różnicowanie typu danej przy pomocy zmiany ' na " ... oj ... mało czytelne jak dla mnie :)

    2. Dajesz!
    • 49: CommentAuthormono
    • CommentTime3 Jun 2023
     
    Proszę bardzo :)
    Mój wkład w rozwój madsa polega na zgłaszaniu problemów i propozycjach zmian i usprawnień. Implementację zostawiam lepszym od siebie :)
    • 50:
       
      CommentAuthorpirx
    • CommentTime3 Jun 2023
     
    btw z ta zmiana kod daje sie czytac :) jest dobrze a bedzie jeszcze dobrzej jak opt r+ da sie poprawic...