А xsl'ки нету?
Вид для печати
А xsl'ки нету?
Переписываю сейчас кусочек кода с ZEUS на SjASMPlus, не могу разобраться в синтаксисе.
Как оформить в SjASM зевсовскую конструкцию: CP "A!W или DB "A!W, A!X
???
То есть нутром понимаю что там логический OR но на SjASM переложить не могу.
А что это хоть делает-то. Логический OR на sjasm - ||
Вероятно че-то типа "A"||"W", если я правильно понимаю (потому что хз что это такое - байты или что).
Но в DB ты так не воткнешь, надо че-то типа EQU.
Да простое сравнение из разряда
В ZEUS сравнение с "А" пишется как "А, без второй кавычки.Код:LD A,(HL)
CP "A!W
JR Z,DUMMYLABEL
Спасибо, я невнимательный читатель манов )Цитата:
Логический OR на sjasm - ||
EQU там не сгодится, так как табличка данных описывается.Цитата:
Но в DB ты так не воткнешь, надо че-то типа EQU.
Думаю надо ассемлировать в ZEUS эти строки и посмотреть что он там в действительности делает ))) Подозрение, что что то сам додумывает для удобства.
УФФ ) разобрался )
дело было так:
просто плохо и не внимательно прочитал чужой кодКод:W EQU %1000 0000
X EQU %1010 0000
; поэтому конструкция
CP "A!W
;работает ))
Есть вопрос, как удобней всего оформлять список объектов, когда затем в разных местах программы используются порядковые номера этих объектов (т.е. индексы)?
Т.е. имеем что-то вроде:
Сами объекты:
Табличка индексов:Код:objects:
DB 'aaaa'
DB 'b'
DB 'aasdasd
DB 'ad'
objects_end:
...
И потом использование:Код:object_1 EQU 1
object_2 EQU 2
object_3 EQU 3
object_4 EQU 4
Код:...
ld a, obect_2
...
cp object_4
...
Можно ли как-то обойтись без таблицы, т.е. что-то типа:
Может быть, sjasm умеет автоматически индекс строки давать?Код:objects:
object_1:
DB 'aaaa'
object_2:
DB 'b'
object_3:
DB 'aasdasd
object_4:
DB 'ad'
objects_end:
Для объектов одинакового размера использую
(objects_end - objects) / object_len + 1
асм видит эту конструкцию какКод:objects:
DB 'aaaa'
DB 'b'
DB 'aasdasd
DB 'ad'
objects_end:
Код:objects:
DB 'aaaabaasdasdad'
objects_end:
Во, кстати. Насчёт индексов/ID. Мне лично иногда не хватало аналога enum, хотя бы только для чисел. Типа вот:чтобы получить id1=1, id2=2, id3=3, id4=7, id5=8, id6=9...Код:ENUM id1=0,id2,id3,id4=7,id5,id6
Код:struct object
f0 byte "a"
byte "a"
byte "a"
byte "a"
f1 byte "b"
f2 byte "a"
byte "a"
byte "s"
byte "d"
byte "a"
byte "s"
byte "d"
f3 byte "a"
byte "d"
ends
objects ds object*10 ; место для 10 объектов
ld hl,objects+5*object+object.f2 ;адрес поля f2 5-го (начиная с 0) объекта
---------- Post added at 18:10 ---------- Previous post was at 18:08 ----------
будет аналогичноКод:struct Types
id0 byte
id1 byte
id2 byte
id3 byte
...
ends
Код:Types.id0=0
Types.id1=1
Types.id2=2
Types.id3=3
...
Я фигово объяснил. Попробую на другом примере.
Пускай, есть блок данных со спрайтами.
Спрайт содержит два байта - ширину и высоту, и некоторое количество данных самой картинки. Что-то такое:
спрайт1
1, 1, .... тут 8 байт графики
спрайт2
2, 3, .... тут 48 байт графики
спрайт3
5, 2, ... тут 80 байт графики
и есть блок, описывающий комнату, где используются координаты на экране, и номер (!) спрайта
3,5,1 - в координаты 3,5 поместить спрайт номер 1 (именно индекс, а не адрес!)
10,20,1 - ... 10, 20, номер 1
15,2,3 - ... 15, 2, номер 3
25,10,2 - ... 25, 10, номер 2
естественно, описывать комнату цифрами не по-человечески, хочется давать нормальные названия индексам, которые и будут использоваться
3,5,собака
10,20,собака
15,2,книга
25,10,звезда
короче, что-то похожее на упомянутые enum-ы