огромное спасибо!
с одной стороны круто иметь встроенный язык
с другой - выглядит со стороны это как ... что-то пришитое сбоку :(
Вид для печати
огромное спасибо!
с одной стороны круто иметь встроенный язык
с другой - выглядит со стороны это как ... что-то пришитое сбоку :(
И снова я с тупыми вопросами. Попытался вникнуть в структуры:На выхлопе получаюКод:DEVICE ZXSPECTRUM128
STRUCT SCOLOR
RED BYTE 0
GREEN WORD 0
BLUE WORD 0
ENDS
org 0x6000
Loop jr Loop
Table SCOLOR 1,2,3
SCOLOR 4,5,6
SAVESNA "test.sna",0x6000
Т.е выделение памяти под структуру с меткой проходит, а без метки - ошибка. Хотя в мануале Example 6.4. описывает таблицу структур:Код:main.asm(14): error: Unrecognized instruction: SCOLOR 4,5,6
WTF?Код:Or without label:
COLORTABLE
SCOLOR 0,0,0
SCOLOR 1,2,3
SCOLOR ,2
; etc.
Нормальные вопросы.
Для начала пример рабочей структуры:
Этим мы создали ТИП ДАННЫХ "структура BMHD".Код:STRUCT BMHD,0
_W WORD 0
_H WORD 0
_X WORD 0
_Y WORD 0
nPlanes BYTE 0
masking BYTE 0
compress BYTE 0
pad BYTE 0
transparency WORD 0
xAspectRatio BYTE 0
yAspectRatio BYTE 0
PageWidth WORD 0
PageHeight WORD 0
ENDS
А это объявление конкретной переменной этого типа:
В данном случае она пустая, потому что данные в неё будут считаны из файла.Код:@MyBMHD: DS BMHD,0
Если тебе надо её проинициализировать "статично", то вместо ds надо использовать соответствено DB и DW и т.п.
Например:
Теперь для обращения к элементам структуры можно пользоваться их именами.Код:@MyBMHD: DW 1,2,3,4
DB 5,6,7,8
DW 9
DB 10,11
DW 12,13
Например:
Если что не понятно, спрашивай.Код:LD IX,MyBMHD
LD A,(IX+BMHD.nPlanes)
...
LD L,(IX+BMHD._W+1)
LD H,(IX+BMHD._W)
Нет, как оно работает, я вкурил. Вопрос в том, почему нельзя сделать таблицу структур, не присобачивая к каждой метку (пусть и временную).
В документации расписано, что конструкция <ИМЯ_СТРУКТУРЫ> [значения полей,...] должно выделять в памяти область под структуру и заполнять её значениями, то есть можно указать так:и всё должно быть хорошо, пропущенные поля инициализируются значениями по умолчанию.Код:BMHD 5,6,7,8
Но, оказывается, разместить такую конструкцию без метки в начале строки нельзя:Имеющуюся у меня документацию прилагаю. См. Chapter 6. Structures, особенно Example 6.4. - реальное поведение сджасма не совпадает с документированным.Код:Label BMHD 5,6,7,8 ; это скомпилируется, выделит память, заполнит её и даже потом можно обращаться к элементам через Label._W, Label._H итд
BHMD 5,6,7,8 ; а это - не скомпилируется
А-аааааааа! Всё ПРАПАЛО! ПОДСТАВА! ИЗМЕНА! НАС ПРЕДАЛИ!!!
Опция "--raw=<filename>" не работает! Я так понял, она должна "насильно" сохранять результат компиляций в бинарник с заданным именем, - ничего подобного - файл получается пустой, длина = 0.
Кто может пофиксить? А то эта бага мне автоматизацию ломает :(