76

Odp: bugi w mads

to nie blad ale jak skompilowac takie cos:

org $2000
jmp *
opt h-
org $00,*
jmp *
opt h+

aby dostac prawidlowo zbudowany plik

chodzi o to, ze naglowek powinien obejmowac takze teggo drugiego jumpa :/

dostajemy:

FF FF   00 20   02 20   4C 00 20 4C 00 00

a powinno byc:

FF FF   00 20   05 20   4C 00 20 4C 00 00

http://atari.pl/hsc/ad.php?i=1.

77

Odp: bugi w mads

Proponuję napisać prawidłowy kod źródłowy ;)

laoo/ng

78

Odp: bugi w mads

super, wlasnie to chce zrobic, mozesz mi pokazac jak napisac taki kod?

chce miec wewnatrz kodu kilka rozkazow skompilowanych tak jakby byly umieszczone w innym obszarze pamieci

http://atari.pl/hsc/ad.php?i=1.

79

Odp: bugi w mads

Ewidentnie problemy powoduje opt h-. Dlaczego on jest konieczny? org $00,* działa sam z siebie. Już takie rzeczy robiłem i nie miałem tych problemów.

laoo/ng

80

Odp: bugi w mads

"bez" wynikowy bedzie taki:

FF FF   00 20   02 20   4C 00 20   03 20   05 20   4C 00 00

nie jestem przekonany czy sie rozumiemy...

http://atari.pl/hsc/ad.php?i=1.

81

Odp: bugi w mads

A no tak. Ten przypadek to nie jest błąd, ale można chyba z czystym sumieniem stwierdzić, że niedociągnięcie madsa, bo generuje dwa bloki, które mógłby połączyć, ale nie łączy bo org jest "dziwny". Ja nawet tego nie zauważyłem, bo wynik madsa i tak wpada do mojego programu, w którym sobie go obrabiam jak chcę. Nie ma żadnych gotowców, które potrafią optymalizować takie rzeczy? xebin tego nie robi? Jak nie to napisanie tego to 15 minut roboty.

laoo/ng

82

Odp: bugi w mads

pewnie tak... ale jakby sie dalo pominac dodatkowe narzedzia...

http://atari.pl/hsc/ad.php?i=1.

83

Odp: bugi w mads

mam dziwne wrazenie... ze to kiedys dzialalo...

przypominam sobie projekt w ktorym trzeba bylo wymusic tworzenie naglowkow i problemem bylo ze mads omijal:

org *

a tu prosze... tworzy...

Tebe cos pokombinowal albo mi sie przysnilo.

http://atari.pl/hsc/ad.php?i=1.

84

Odp: bugi w mads

dobrze pamietalem :-)  wersja mads 1.9.6 potrafi:

org $2000
jmp *
org *  ----------- opusci naglowek
jmp *

ale juz nie potrafi
org $2000
jmp *
org $00,*   ----- wygeneruje
jmp *

Tebe... plizzzz

http://atari.pl/hsc/ad.php?i=1.

85

Odp: bugi w mads

w pierwszym przykładzie ORG jest ten sam co aktualny wskaźnik programu, więc ORG i nowy nagłówek jest nadmiarowy

ale drugi przykład nie rozumiem dlaczego miałby opuszczać ORG-a i nie generować nagłówka

aha, 'org adres,*', czyli kod jest generowany dla innego adresu ale pod aktualnym wskaźnikiem programu

Ostatnio edytowany przez tebe (2022-01-21 23:08:32)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

86

Odp: bugi w mads

tebe napisał/a:

aha, 'org adres,*', czyli kod jest generowany dla innego adresu ale pod aktualnym wskaźnikiem programu


bump


:)

http://atari.pl/hsc/ad.php?i=1.

87

Odp: bugi w mads

próbowałem to poprawić, jednak po poprawce główny nagłówek wskazuje błędnie koniec bloku

sugeruję użyć XASM, 'org r:adres'  to ekwiwalent dla 'org adres,*'

albo nie używać ORG-a, tylko .LOCAL wtedy MADS nie będzie generował dodatkowego bloku

 org $2000
 
 nop

.local nowy,$4000
 nop
.endl

 nop
     1                  org $2000
     2
     3 FFFF> 2000-2002> EA     nop
     4
     5 4000            .local nowy,$4000
     6 4000 EA             nop
     7                 .endl
     8
     9 2002 EA             nop

Ostatnio edytowany przez tebe (2022-01-23 01:30:32)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

88

Odp: bugi w mads

dzieki!. sztuczka z .LOCAL name,adr zalatwia sprawe :-)

http://atari.pl/hsc/ad.php?i=1.

89

Odp: bugi w mads

Potrzebuję przedefiniować sobie zmienną.

    opt o+ h- c- ?+

MEM_BASE = 0
MEM_OSLO = 1
MEM_OSHI = 2
MEM_EXT = 3

    org $2000

.local
MEM = MEM_OSLO
    .byte MEM
.endl

.local
MEM = MEM_OSHI
    .byte MEM
.endl

.local
MEM = MEM_EXT
    .byte MEM
.endl

.local
MEM = MEM_BASE
    .byte MEM
.endl

    end

Jak to zrobić bo to generuje mi błędy:

$ mads label.asx 
label.asx (13) WARNING: Infinite loop by label MEM
MEM = MEM_OSHI
label.asx (18) ERROR: Label MEM declared twice (BANK=0)
MEM = MEM_EXT
label.asx (23) ERROR: Label MEM declared twice (BANK=0)
MEM = MEM_BASE
label.asx (28) ERROR: Label MEM declared twice (BANK=0)
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

90

Odp: bugi w mads

SET
https://mads.atari8.info/pl/skladnia/#label-set-value

albo etykieta tymczasowa, czyli taka która zaczyna się znakiem '?'
https://mads.atari8.info/pl/skladnia/#tymczasowe

Ostatnio edytowany przez tebe (2022-06-03 17:53:29)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

91

Odp: bugi w mads

O to chodziło! Dzięki!

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

92

Odp: bugi w mads

Zacytuję Pirxa z AOLu:

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

Wyszło nam przy próbie rozwikłania jednego z dziwnych bugów w Scorchu (już poprawiony).

Ostatnio edytowany przez Pecus (2022-11-14 11:58:26)

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

93

Odp: bugi w mads

Jeśli podprogram nie zmienia Akumulatora, to kod będzie prawidłowy ;) Nigdy nie używałem "r+".

94

Odp: bugi w mads

Trudno mi uwierzyć, że nikt nie zetknął się poniższym problemem, ale próba asemblacji:

    opt l+

w    =   31

    org $0600
    .byte -w-1 -w -w+1
    .byte 256-w-1 256-w 256-w+1
    .by   -w-1 -w -w+1
    .by   256-w-1 256-w 256-w+1
    .byte -w-1
    .byte 256-w-1
    .by   -w-1
    .by   256-w-1
    .byte 1 2 3 4
    .by   1 2 3 4
    .en

wypluwa błędy:

$ mads test.asm 
        .byte 256-w-1 256-w 256-w+1
test.asm (7) ERROR: Undeclared label W256 (BANK=0)
test.asm (7) ERROR: Value out of range (-1031 must be between 0 and 255)
        .byte 1 2 3 4
test.asm (14) ERROR: Value out of range (1234 must be between 0 and 255)
Writing listing file...

Listing:

mads 2.1.5
     1                     opt l+
     2
     3 = 001F            w    =   31
     4
     5                     org $0600
     6 FFFF> 0600-060F> A3        .byte -w-1 -w -w+1
     7 0601 F9                .byte 256-w-1 256-w 256-w+1
     8 0602 C1 C2            .by   -w-1 -w -w+1
     9 0604 E0 E1 E2            .by   256-w-1 256-w 256-w+1
    10 0607 E0                .byte -w-1
    11 0608 E0                .byte 256-w-1
    12 0609 E0                .by   -w-1
    13 060A E0                .by   256-w-1
    14 060B D2                .byte 1 2 3 4
    15 060C 01 02 03 04            .by   1 2 3 4
    16                     .en

Jak zapisać w jednym wierszu przy użyciu dyrektywy ".byte" lub ".by" liczby ujemne i dlaczego ".byte 1 2 3 4" łączy rozdzielone cyfry w jedną liczbę?

Zawsze mam rację, tylko nikt mnie nie słucha.

95

Odp: bugi w mads

Może przecinkami?

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

96

Odp: bugi w mads

Przecinki rozwiązują problem. Sprawdziłem to zanim napisałem. W dokumentacji stoi, że można używać spacji lub przecinków. Akurat przecinków nie lubię - łatwiej w spację trafić. Zmiana dokumentacji nie jest rozwiązanie. ;-)

Zawsze mam rację, tylko nikt mnie nie słucha.

97

Odp: bugi w mads

w którym miejscu tak stoi ?

bo tylko w przypadku .BY jest taka możliwość
https://www.wudsn.com/tmp/projects/mads … ndor-ascii

w przypadku .BYTE jest
https://www.wudsn.com/tmp/projects/mads … long-dword

.BYTE jest odpowiednikiem DTA, a DTA nie ma możliwości nie używania znaku przecinka

ten sam błąd wystąpi jeśli zapiszesz
  dta 1 2 3 4 5

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

98

Odp: bugi w mads

Dzięki za wyjaśnienie. Konieczność stosowania przecinka w przypadku .BYTE, podczas gdy .BY tego nie wymaga, jest dla mnie brakiem konsekwencji, bez której da się jednak żyć. :-)

Natomiast łączenie w jedną liczbę cyfr rozdzielonych spacją uważam za błąd. Dla przykładu:

    .BYTE 1 2 3, 12 3, 1 23"

powinno generować błąd składni, a nie blok bajtów: $7B $7B $7B.

Drugą rzeczą, którą poruszyłem na początku, jest pierwsza liczba ze znakiem za dyrektywą .BY, która modyfikuje pozostałe wartości. W dokumentacji mowa jest, że poprzedzenie tej liczby znakiem dodawania powoduje zwiększenie pozostałych o wskazana wartość. Rzecz w tym, że umieszczenie minusa powoduje adekwatnie zmniejszenie. W ten sposób, aby wprowadzić liczbę ujemną jak pierwszą trzeba uciekać się do akrobacji w rodzaju "256-b". Dla lepszego zobrazowania ".by -2 1" wygeneruje jeden bajt o wartości -1 ($FF), podczas gdy: ".by 256-2 1 - dwa bajty o wartościach: -2 ($FE), 1.

Proponuję zmodyfikować Madsa tak, aby wartości po dyrektywie .BY były modyfikowane tylko wtedy, gdy przed pierwszą liczbą jest znak plusa. Znak minus powinien określać tylko i wyłącznie znak liczby. Jeżeli zaszłaby potrzeba zmniejszania wartości, można to zrealizować tak, jak robi to MAE: ".BY +-n".

Zawsze mam rację, tylko nikt mnie nie słucha.