Разобрался. EVO-DOS v0.3 почему-то командой LIST не показывает строку автозапуска.
Вид для печати
Shadow Maker, там еще недоработки есть - теже вложенные ИФы
Там вообще беда, если какой-то из необходимых параметров отсутствует - например PHASE сделал, а он ждет еще и UNPHASE, при этом в свежей версии он крашится почему-то...
В TASM'е чтобы создать таблицу в коде с кратного 256 адреса писалось вот так:
В SJASME'е придумал только так:Цитата:
FONTAD EQU $&#FF00+256
DEFS FONTAD-$
Ещё например в ALASM'е было удобное обращение к старшей ячейке адреса у метки:Цитата:
FONTAD EQU (($/256)+1)*256
ORG FONTAD
Цитата:
LD H,'METKA
где H=#C0
ORG #C000
METKA DEFS #10
Есть какие-нибудь удобные способы в SJASM?
ALIGN например.
Нужна помощь зала !
можно ли внутри макро сформировать метку ?
такое не работает
говоритКод:macro AAAAA _label_
_label_ EQU $+1
ld hl,0
ld a,h
or l
call nz,xxxx
endm
AAAAA zz00
AAAAA zz01
error: Unrecognized instruction: zz00 EQU $+1
и еще вопрос
в m80 в свое время можно было сгенеирить имя метки из параметра макроса и строки
можно ли тут такое ?
что то типа (в деталях может и ошибаюсь но типа того)
Код:macro AAAAA _suffix_
LABEL&_suffix_:
ld hl,0
ld a,h
or l
call nz,xxxx
endm
AAAAA zz00
AAAAA zz01
---------- Post added at 20:09 ---------- Previous post was at 19:40 ----------
вроде выкрутился, но как-то странно :(
т.е. _label_ (то куда подставится имя) должна быть в начале строкиКод:macro AAAAA _label_
; ld hl,0
db 21h
_label_:
dw 0
ld a,h
or l
call nz,xxxx
endm
AAAAA zz00
AAAAA zz01
правда по LST понять что произошло совсем невозможно
в нем даже упоминания про определение новой метки нет.
вопрос а КАК ПРАВИЛЬНО
Keeper, это но то случаем что реализовано в Alasm?
нужно бывает иногдаЦитата:
macro macross
label:0
endm
macross l1
дает
Labеll1
macross l2
дает
Labell2
особенно видно в движке wolf48
Keeper, в доке к Аласм?
это новые фичи
Keeper, а он такого и не умеет
он много чего не умеет, но я например так и не понял почему
LABEL\0 не разворачивается в LABELхх
это идеологически вполне допустимо
---------- Post added at 15:55 ---------- Previous post was at 15:54 ----------
jerri, http://zx.pk.ru/showthread.php?t=17907 я уже поднимал тему
посмотри что понимает аласм и кстати по глюкам sjasm тоже есть :)
Keeper, не знаю :)
допиливание обычно имеет побочным эффектом забаговывание
esl, это детский лепет
вот это пример :)
sjasm скукоживается сразуКод:;RAY 1,1,H,L,D,E,y,x
MACRO RAY
mainplus=\0 ;основное направление положительно
secplus=\1 ;побочное направление положительно
;\2=основное направление для hl
;\3=побочное направление для hl
;\4=основное направление для de
;\5=побочное направление для de
;\6=основное направление
;\7=побочное направление
;LD DE,(cur\7\6)
cur\0\1\7\6=$+1
LD DE,0
LD A,E ;основное направление
;IFN mainplus ;основное направление положительно
; CPL ;1-основное направление
; LD E,A
;ENDIF
LD LX,A ;IX=dist*cos
MULPOS
IFN secplus ;побочное направление положительно
ADD A,D ;побочное направление
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
INC \5 ;e/d
LD A,(DE)
RLA
JC raysec\0\1\7\6
INC \3 ;l/h
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ELSE
LD L,A
LD A,D ;побочное направление
SUB L
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
LD A,(DE)
RLA
JC raysec\0\1\7\6
DEC \3,\5 ;l/h,e/d
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ENDIF
raynsec\0\1\7\6
INC HX
IFN mainplus ;основное направление положительно
INC \2 ;h/l
ENDIF
LD A,(HL)
RLA
JP C,rayhlq ;b=texx
IFN mainplus ;основное направление положительно
INC \4 ;d/e
ELSE
DEC \2,\4 ;h/l,d/e
ENDIF
LD A,B
IFN secplus ;побочное направление положительно
ADD A,C
ELSE
SUB C
ENDIF
LD B,A
JNC raynsec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \5 ;e/d
ENDIF
LD A,(DE)
RLA
JC raysec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \3 ;l/h
ELSE ;побочное направление отрицательно
DEC \3,\5 ;l/h,e/d
ENDIF
JP raynsec\0\1\7\6
raysec\0\1\7\6
EXD
LD A,B
IFN secplus ;побочное направление положительно
SUB C
DIVPOS
ELSE
ADD A,C
DIVNEG
ENDIF
IFN mainplus ;основное направление положительно
CPL
LD B,A ;b=texx
ELSE
LD B,A ;b=texx
CPL
ENDIF
JP raydeq
ENDM
от такого я тоже скукоживаюсь... :)))
esl, ну следуя логике
я должен получив строчку
"ray\0\1\7\6_YX=$+1"
сначала заменить все \х на данные макроса
и только потом парсить уже готовый набор данных
а не так как сделано сейчас
---------- Post added at 20:33 ---------- Previous post was at 20:32 ----------
esl, ну ты рар не смотрел
вот там реально чорная магия
---------- Post added at 20:35 ---------- Previous post was at 20:33 ----------
Keeper, а что за асм использует савелий?
esl, я тут наброски делал на PB и не увидел особых проблем с макросами :(
Кошмарный пример, зачем я его на ночь глядел...
Неужели после сборки всех вариантов в один параметризированный макрос объём кода сократился и стал понятнее?
И кстати вот всплывает велосипедистость sjasm+, где в одну кучу кода навалены разные тулзы. А макры... ну m4 и прочие никто не отменял.
NovaStorm, если ты про методы товарища Алоне то это к нему обратись:)
но прелесть Аласма в том что он это понимает и интерпретирует нормально
Я пожалуй не буду психикой рисковать, стараясь в этом разобраться, мне пока для кодогенерации и lua со встроенными макрами хватает, на сях генерить пробовал, но это уж слишком специфично, если уж совсем прижмёт, может m4 и буду осваивать.
Keeper, а можно пример текста для этого монстра?
красиво конечно но больно много писать обвязки
кстате сразу из доки ;)
Код:concat macro part1,part2
call part1_part2
endm
The call
concat module,function
will therefore result in
call module_function
esl, так то да
если бы не надо было писать килобайты обвязки
Keeper, об этом
у него куча батников в каждой директории лежитКод:copy /B /Y page0\services.rom+page1\dos6_12e_patch.rom+page2\*.rom+page3\*.rom zxevo_pen.rom
copy /B /Y page3\*.rom+page1\dos6_12e_patch.rom+page2\*.rom+page0\services.rom zxevo_atm.rom
..\tools\addcrc\addcrc zxevo_pen.rom
ren crc.bin crc_pen.bin
..\tools\addcrc\addcrc zxevo_atm.rom
ren crc.bin crc_atm.bin
..\tools\sjasmplus\sjasmplus --sym=sym.log --lst=dump.log -isrc build_update.a80
..\tools\addcrc\addcrc header.rom
copy /B /Y header.rom+crc.bin+zxevo_pen.rom+zxevo_atm.rom zxevo_rom.upd
del crc_pen.bin
del crc_atm.bin
del crc.bin
del header.rom
del zxevo_pen.rom
del zxevo_atm.rom
которые все это компилят и линкуют
и я примерно так же делаю.
Keeper, у меня сейчас акелпад с прикрученым SJASM по f5 компилит и запускает снап мне хватает
Keeper, демки хорошо :) но мне ближе и интереснее игры а там немного другая специфика ну и собрать порезать на банки снап тоже не сильно сложно ;)
порезать, потом запаковать, потом монолоадер приклеить... а демки на этапе разработки тоже как снапы смотрятся. хошь не хошь, а в итоге нагородишь автосборщик все равно.
Ну батники необязательны для автосборщика. Есть же shellexec
вопрос назрел по SjAsm
есть snap128
как заставить sjasm создать снап с включенной страницой 7?
Цитата:
info/SNA
Версия для 128K
Файл имеет размер 131103 или 147487 байт. Содержимое текущего выбранного банка ОЗУ сохраняется в любом случае, даже если это банк 2 или 5 - в этом случае соответствующий банк хранится в файле дважды. Банки в конце файла сохраняются в порядке возрастания номеров, но только если они не сохранены в первой части файла. Например, если в первой части файла сохранены банки 5, 2 и 4 - в конце файла должны быть сохранены банки 0, 1, 3, 6 и 7; если в первой части сохранены банки 5, 2 и 5 - в конце файла должны находится банки 0, 1, 3, 4, 6 и 7.
Смещение Размер Назначение
0 27 Соответствует версии для 48K
27 16384 Содержимое 5 банка ОЗУ
16411 16384 Содержимое 2 банка ОЗУ
32795 16384 Содержимое текущего банка ОЗУ, отображаемого в адресах 49152..65535
49179 2 Регистровая пара PC
49181 1 Состояние порта #7FFD
49182 1 Выбор ПЗУ TR-DOS (0 - неактивно, 1 - активно)
49183 16384*n Оставшиеся банки ОЗУ в порядке возрастания номеров
Не могу понять, компилит
---------- Capture Output ----------
> "D:\Ìèøà\ZX\sjasm\sjasmplu s-win32-1.07-rc7\sjasmplus.exe" logo1.txt
SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 112 lines, work time: 0.000 seconds
> Terminated with exit code 0.
в конце программы строка
savesna "logo1.sna",main
много раз выгружал snap, сейчас не хочет :(
было у кого такое?
---------- Post added at 18:07 ---------- Previous post was at 17:53 ----------
вот такой код:
dup 7 ld (hl),a: inc h edup: ld (hl),a
был заменен на:
dup 7: ld (hl),a: inc h: edup: ld (hl),a
и все выгрузилось
Двоеточие имеют смысл? ошибок же не было?
Да блин пол часа искал ошибку. Мне-то хочется чтоб текст был покороче (когда в одну строку всё пишешь, то что и перцу ясно), да и ещё к emuzwin'у привык там пробел а не двоеточие
А так нареканий нет, но я ещё со страницами памяти не работал
Есть код
вообщем 16 раз это повторяетсяКод:pop hl
ld hl,(16384)
pop hl
ld hl,(16386)
pop hl
ld hl,(16388)
pop hl
ld hl,(16390)
Можно ли в Sjasm'е написать как-то короче?
что-то подобное:
Код:dup 16
pop hl
ld hl,(16384+n*2)
edup
Ну можно как-то так...
lua allpass
for addr=0x4000,0x4000+2*15,2 do
_pl(" pop hl")
_pl(" ld hl,("..addr..")")
end
endlua