1 Ostatnio edytowany przez tebe (2011-01-25 11:46:36)

wątek dotyczący mads-a, jeśli macie jakieś problemy to piszcie


zacznę od nowego komunikatu "Could not use NAME in this context", który może pojawić się gdy zaczniemy odwoływać się do bloków .MACRO, .STRUCT, .ENUM, został on wprowadzony aby zapobiegać próbom operacji na blokach obecnych tylko w pamięci assemblera

w związku z tym komunikatem zaszła dodatkowa zmiana, aby odczytać długość bloku .ENUM, .STRUCT (długość bloku .MACRO to zawsze 0) trzeba posłużyć się dyrektywą .LEN

.struct test
a,b,c,d .byte
.ends

 lda #test       ; Could not use TEST in this context

 lda #.len test ; 4 !!! OK !!!

dla .ENUM dyrektywa .LEN zwróci wartość 1..4 (1-BYTE, 2-WORD, 3-LONG, 4-DWORD)
dla .STRUCT dyrektywa .LEN zwróci długość w bajtach, czyli ile bajtów zajmą wszystkie zadeklarowane pola w strukturze

.LEN działa dla nazw bloków, nie dla np. kolejnych pól struktury, ofsety do pól struktury sprawdzamy bez .LEN

.struct test
a,b,c,d .word
.ends

 lda #test.a
 ldx #test.b
 ldy #test.c
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

czemu len a nie sizeof?

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

3

bo len zawiera mniej literek niz sizeof, co nie znaczy że nie można wprowadzić i sizeof

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

4

Moje jedyne pytanie dotyczy .ds - czy jego działanie zostanie poprawione zgodnie z tym, co pisałem ostatnio mailem. Przeszkadza mi to, bo zamiast ".ds rozmiar" muszę używać ".byte" co niepotrzebnie zwiększa rozmiary binarki.

KMK
? HEX$(6670358)

5

mozna prosic o poprawna kompilacje takich konstrukcji:

<code>
   bne $FE
</code>

przy samomodyfikujacym sie kodzie czasem przydatne.

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

6

Jeśli chodzi ci o zamianę tego na $D0 $FE to masz kłopot, bo jak to odróżnisz od skoku pod $FE?

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

7

to wynika z trybu adresowania. po np. bne znajduje sie wzgledna wartosc.
podajac:

org $0
bezwzgledny bne bezwzgledny

wartosc bezwzgledny assembler przetlumaczy na wartosc wzgledna.

po takich rozkazach jak bne itp nie moga znajdowac sie wartosci bezwzgledne, po jmp owszem.

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

8

bne *+5
bne *-5

albo wylicz z użyciem etykiet

bne start-end etc.

nigdy nie miałem problemu z dodawaniem i odejmowaniem XXL :)

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

9

co nie zmienia faktu ze we wszystkich trybach adresowania oprocz wzglednego mozna podac operand jawnie...

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

10

podajesz adres i zadziała, np.

 org $2000
 bne $2005
 bne $1ffe

 org $80
 bne 12
 bne $fe

zawsze tak było od czasu QA

co Ty za dziwoląga chcesz stworzyć XXL

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

11

dzieki, no tak, makroasembler :-) poradzilem sobie:

.macro  xbne
      .if :1 < $80
        bne *+2+:1
      .else
        bne *-$fe+:1
      .endif 
.endm


                xbne $ff

wygeneruje $d0,$FF

                xbne $00

wygeneruje $d0,$00

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

12 Ostatnio edytowany przez tebe (2011-08-15 08:28:21)

parę uwag które ostatnio zgłaszali użytkownicy:

- kod relokowalny dla SDX albo mads-a .RELOC wymaga deklaracji stałych przed blokiem relokowalnym, deklaracja stałej w bloku relokowalnym będzie skutkować próbą jej relokowania

- przełącznik OPT ?+ wyłącza bloki lokalne .LOCAL mads-a, etykiety lokalne są dostępne wówczas tak jak w assemblerze MAE

- dyrektywy generujące dane zaczerpnięte z MAE .CB, .BY, . WO, .HE, .SB nie są relokowalne, kod relokowalny generuje na 100% pseudo rozkaz DTA, potem .BYTE, .WORD itd.

- dyrektywa .DS generuje automatycznie blok pusty SDX (BLK EMPTY) jednak nie można jej łączyć z BLK EMPTY, albo dyrektywy .DS albo nasz BLK EMPTY

- w bloku .SEGMENT można aktualnie użyć bloku .LOCAL, .PROC ze zmienionym adresem asemblacji, nie wystąpi komunikat błędu jak w poprzednich wersjach mads-a

- pseudo rozkaz RND generujący losowe wartości korzysta z RANDOMIZE, więc za każdym razem będzie generował inne wartości

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

13

Can you explain subtle amendments to .STRUCT in latest version? (i.e. "var :3 .byte", etc). In addition, I'm interested in using the MADS native relocatable format for the GUI, but I'm having difficulty understanding the Google-translated documentation.

14

w nowej wersji została rozszerzona składnia dla .STRUCT, poprzednio dyrektywa oznaczająca typ danych (.BYTE, .WORD etc.) musiała wystąpić na początku wiersza, aktualnie nie musi (rozszerzenie postulował Konop jako bardziej naturalne w zapisie)

poprzednio tylko w ten sposób

 .byte label0
 .byte :5 label1

aktualnie także w ten sposób

 label2 .byte
 label3 :2 .word

sam blok .STRUCT nie podlega relokacji bo jest tworem wirtualnym, może zostać upubliczniony przez .PUBLIC i w ten sposób przekazany dalej

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

15

Thanks! :) But what is the significance of :5 and :2? They look like macro parameters.

The ability to indent STRUCT elements is most welcome.

16

as far as i can decipher this it means repeat value

so

label2 :5 .word 

will reserve space for 5 words

przechodze na tumiwisizm

17

OK - I'll assume that until told otherwise. ;)

Thanks! Now to decypher MADS relocatable file format, for which I need to write a loader for the GUI...

18

:repeat

:20 dta $40

20 x $40

:20 dta #

0,1,2,3, ... 19

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

19

tebe napisał/a:

- dyrektywy generujące dane zaczerpnięte z MAE .CB, .BY, . WO, .HE, .SB nie są relokowalne, kod relokowalny generuje na 100% pseudo rozkaz DTA, potem .BYTE, .WORD itd.

A właściwie dlaczego? Przecież .BY i .WO to to samo co .BYTE i .WORD, .HE to w zasadzie uproszczone .BYTE, z kolei .SB (= .SBYTE) i .CB (= .CBYTE) służą tylko do generowania tekstów, co więc przeszkadza ich użyciu w blokach reloc?

KMK
? HEX$(6670358)

20

Tebe sie nie odzywa, nie pisze, maili nie czyta... to moze foruma


mads kompiluje cos takiego:

pha $00
pla $00

php i plp pewnie tez

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

21

nie można tego traktować jako błąd, jeśli zostanie to zablokowane przestanie działać kod typu

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

22

> ldx:dex $00

iżisz maria a co to jest?

;-)

ok. ale naszukalem sie w zrodlowce buga, zamiast dobrze wysmazonego

lda $xx

napisalem

pla $xx

i dostalem pieczen rzymska (klopsa).

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

23

Otóż to. I dlatego uważam, że te wszystkie sklejki to chory pomysł. Tak jakby nie dało się napisać normalnie jedno pod drugim. Gdyby przynajmniej to było zarezerwowane dla instrukcji mających ten sam argument, ale widzę, że można sklejać co popadnie.

TeBe: Nie dałoby się dodać przełącznika wyłączającego te xasmowe sklejko-rozszerzenia, dla kogoś, kto z nich nie korzysta i nie chce napotykać na takie problemy?

24

xxl napisał/a:

mads kompiluje cos takiego:

pha $00
pla $00

Quick Assembler też.

https://www.youtube.com/watch?v=jofNR_WkoCE

25

nie. do bledow nie nalezy sie przyzwyczajac. co z tego ze ciagna sie od dawna. poprawiac a nie traktowac jak "wyjatek".

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