Próbowałem użyć struktur w madsie. Pierwszy problem na jaki się natknąłem, a jaki chciałbym zgłosić, to niedostateczna diagnostyka błędów. Użyłem wewnątrz zamiast deklaracji .byte deklaracji .by, bo myślałem że są zamienne tak jak poza strukturą i mads nawet się nie zająknął, a zignorował pole z .by.
Drugi problem, że jeżeli nie poda się nazwy pola, to takie pole zostanie zignorowane. Również bez błędu ani ostrzeżenia. Niby problem z czapy, ale nie do końca, bo akurat definiowałem sobie strukturę odzwierciedlającą istniejącą strukturę, tylko kilku pól nie używałem, więc nie nadałem im nazwy. I po dość długim debugowaniu odkryłem, że offsety mi się poprzesuwały, bo mads ignorował pola bez nazwy.
Przykładowy kod obrazujący problemy:
org $2000
.struct IgnoredKeyword
dontWork .by ;ignored keyword here
works .byte ;as a result this have index 0
.ends
lda #IgnoredKeyword.works
;ldy #IgnoredKeyword.dontWork ;test.asm (9) ERROR: Value out of range
.struct MissingLabel
.byte ;no label here
label .byte ;as a result this have index 0
.ends
lda #MissingLabel.label
Produkuje taki listing:
mads 2.0.7
Source: test.asm
1 org $2000
2
3 .struct IgnoredKeyword
4 dontWork .by ;ignored keyword here
5 = 0000 works .byte ;as a result this have index 0
6 .ends
7
8 FFFF> 2000-2003> A9 00 lda #IgnoredKeyword.works
9 ;ldy #IgnoredKeyword.dontWork ;test.asm (9) ERROR: Value out of range
10
11 .struct MissingLabel
.byte ;no label here
13 = 0000 label .byte ;as a result this have index 0
14 .ends
15
16 2002 A9 00 lda #MissingLabel.label