Я его сам себе под линукс собрал из этого - https://github.com/mkoloberdin/sjasmplus
Он выводит SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008).
Вид для печати
Я его сам себе под линукс собрал из этого - https://github.com/mkoloberdin/sjasmplus
Он выводит SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008).
Как перегнать файл tasma (вложен) в asm (для cjASM+)
С помощью Far Manager + theX (http://thex.untergrund.net/) открыть, и сохранить как текстовый файл.
Код:COLOR EQU 12
KOR_Y EQU 10
KOR_X EQU 15
ORG #8000
LD HL,KOR_Y*256+KOR_X
LD A,H
AND 7
RRCA
RRCA
RRCA
ADD A,L
LD L,A
LD A,H
RRA
RRA
RRA
AND 3
OR #58
LD H,A
LD (HL),COLOR
RET
Запускаешь http://logtech.ru/far.zip и жмешь ентер на нужном файле, потом F5 оттуда или выделяешь и вставляешь куда надо текст...
Ну надо было или хобету, или TRD или SCL открывать с этим файлом. Far-то откуда знает, что это у тебя тасм. Возьми тот образ, откуда ты его выковырял, внутрь зайди и нажми ентер на этом файле.
он у тебя внутрь TRD заходит?
ты точно заюзал версию FAR на которую ссылку тебе ShadowMaker дал?
Разобрался. Всем Большое спасибо.
Снова я со своими извращениями. Можно ли в sjasm+ получить длину определенного файла? Суть такова: у меня есть куча файлов, которые в программе должны подгружаться в память, и надо составить таблицу длин (в секторах) этих файлов. Пока сообразил только такую конструкцию:А хотелось бы как-то проще.Код:org 0xc000
incbin "overlay00.bin"
align 256
ovr00Size equ high $ - 0xc0
Ну я тоже примерно так же считаю
Код:sp_in INCBIN "_packed/sp_intr.bin"
sp_in_
ld a,high (sp_in_-sp_in+255)
эмммм... а тебе зачем?
странные макросы - одна из причин почему я соскочил с sjasm+ на zmac
(может я не умею его готовить?)
на нем это на раз
я так понимаю это будет работать и в m80
Код:x macro name,lenlabel
local .a
.a equ $
incbin name
lenlabel equ $-.a
endm
x "test.asm",len1
x "dd/test.cas",len2
x "dd/test.cim",len3
dw len1
dw len2
dw len3
end
LST - во что скомпилилось
с "разворотом" макросов
Код:1:
2: x macro name,lenlabel
3: local .a
4: .a equ $
5: incbin name
6: lenlabel equ $-.a
7: endm
8:
9: - 0000 x "test.asm",len1
9: - 0000 ?c0000 equ $
9: - 0000 .. 00DB incbin "test.asm"
9: - 00DC len1 equ $-?c0000
9: - 00DC endm
10: - 00DC x "dd/test.cas",len2
10: - 00DC ?c0001 equ $
10: - 00DC .. 02ED incbin "dd/test.cas"
10: - 0212 len2 equ $-?c0001
10: - 02EE endm
11: - 02EE x "dd/test.cim",len3
11: - 02EE ?c0002 equ $
11: - 02EE .. 03CF incbin "dd/test.cim"
11: - 00E2 len3 equ $-?c0002
11: - 03D0 endm
12:
13: - 03D0 DC00 dw len1
14: - 03D2 1202 dw len2
15: - 03D4 E200 dw len3
16:
17: - 03D6 end
Statistics:
4 passes
0 jr promotions
6 symbols
982 bytes
3 macro calls
54 macro bytes
12 invented symbols
Symbol Table:
?c0000 = 0
?c0001 = dc
?c0002 = 2ee
len1 = dc
len2 = 212
len3 = e2
[свернуть]
Автосборку большого проекта делаю. Хочется автоматизации, чтобы не править руками в нескольких местах, если один из файлов станет длинее/короче.
Одно отличие - мне не надо держать файлы в памяти, мне надо просто таблицу их длин, причем не в байтах, а в секторах. Сами файлы будут запиханы в trd-образ.Цитата:
Сообщение от esl
Намонстрячил уже на баше генерилку нужной таблицы...
В порядке бреда
Код:# build script & gfx overlays & generate overlays size table
echo "; Nocturne overlays size table\n" > ovrtable.asm
for NUM in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36; do
if [ -d ovl/ovl${NUM} ]; then
make -C ovl/ovl${NUM}
fi
if [ -e ovl/bin/ovl${NUM}c.hr1 ]; then
SIZE=`stat -c %s ovl/bin/ovl${NUM}c.hr1`
if [ $((${SIZE} & 255)) -gt 0 ]; then
CSZ=$((${SIZE}/256 + 1))
else
CSZ=$((${SIZE}/256))
fi
else
CSZ=0
fi
if [ -e ovl/bin/ovl${NUM}g.bin ]; then
SIZE=`stat -c %s ovl/bin/ovl${NUM}g.bin`
if [ $((${SIZE} & 255)) -gt 0 ]; then
GSZ=$((${SIZE}/256 + 1))
else
GSZ=$((${SIZE}/256))
fi
else
GSZ=0
fi
echo "\tdb ${CSZ}, ${GSZ}, 0, 0\t\t;${NUM}" >> ovrtable.asm
done
[свернуть]
так а чем вариант шадомахера не подошёл? через в ДБ-табличку я думаю там тоже всё нормально запилится...
Ну используй луа-скрипт тогда для генерации. Левые какие-то генерилки на баше - не кошерно.
Хотя по-моему у тебя для вызова все равно надо передавать имя файла, разницы тогда? Один раз себе текст накопипастил типа как я до этого написал и забыл, не? Ты ж не в каждом проекте это будешь делать. У меня например есть php-скрипт, который генерит мне фигню типа:
которую я потом инклюжу (или не инклюжу, если там никакие файлы не меняются).Код:page 0
org #4000
dehrust
INCBIN "dehrust.bin"
dehrust_
SAVETRD "bloodwych.trd","dehrust.C",dehrust,dehrust_-dehrust
dehrust_len equ dehrust_-dehrust
page 0
org #4000
mode48
INCBIN "Files/mode48.bin"
mode48_
SAVETRD "bloodwych.trd","mode48.C",mode48,mode48_-mode48
mode48_len equ mode48_-mode48
page 0
org #4000
loadscr
INCBIN "Files/loadscr.bin"
loadscr_
SAVETRD "bloodwych.trd","loadscr.C",loadscr,loadscr_-loadscr
loadscr_len equ loadscr_-loadscr
Ну тем более, чего больно заморачиваться, один раз накопипастил вон фигней и всё. И что-то давно не слышно про новое - когда демка-то будет?
Какая демка? Всё готово, только музыку жду и финалкат придумываю:
http://samstyle.narod.ru/project/fght01.png
А по теме:sjasmplus валится, хотя бинарник сохраняет. С device zxspectrum48 отрабатывает без аварий.Код:
device zxspectrum128
org 0x8000
disp 0
dw t1
dw t2
dw t3
t1 ds 6912
t2 ds 8922
t3 ds 10222
siz equ $
ent
savebin "out",0x8000,siz
У меня получилось как-то так:
Код:device zxspectrum48
org 0x4000
LUA ALLPASS
function filesize(filename, varname)
local fp = assert(io.open(filename, "rb"))
local size = fp:seek("end")
sj.parse_line(varname .. " DW " .. tostring(size))
end
ENDLUA
LUA ALLPASS
filesize("test.asm", "mysize")
ENDLUA
э?
Код:device zxspectrum128
ORG #6000
begin
end
display /d,end-begin
savesna "!void.sna",begin
Ну и? Предысторию можно на пару локаций запилить. Короче забыли, ладно.
Далее...
Запятую внутри кавычек sjasm+ считает разделителем параметров макроса:По первому применению - error: Too many arguments for macro: tPosTextКод:MACRO tPosText x,y,txt
db 2,x,y,txt,0
ENDM
tPosText 8,10,"текст, с запятой"
tPosText 8,10,<"текст, с запятой">
По второму - всё гладко.
Компилю с device zxspectrum48
sjasmplus выдаёт: warning: [SAVESNA] RAM <0x4000-0x4001> will be overriden due to 48k snapshot imperfect format.
Ну ладно, понял я что первые два байта экрана будут заюзаны для адреса старта, ладно.
А вот как отключить чтоб не было этого warning?
При "холостом" запуске сжасм выдаёт (среди прочего)
--msg=error Show only error messages
Но если заюзать этот "--msg=error" - то пишет: Unrecognized option: msg
Как быть-то?
Кстати, какого хрена? WOS утверждает, что в 48К снапшотах PC сохраняется на стеке.
Да можно, конечно, просто 48 и весит меньше, да и вообще какого тогда DEVICE SPECTRUM48 прикручивали?
В общем пробую всякие возможности (раньше юзал только SPECTRUM128).
Да и к тому-же затеял очередную НГ-открытку, 48онли, ну и решил снапшот по-честному 48 юзить :)
---------- Post added at 03:07 ---------- Previous post was at 03:04 ----------
В предыдущих версиях sjasm вообще было (хоть 128, хоть 48) - в начале экрана (#4000) стояла JP start_adr
Т.е. даже три байта тратилось, ну щас уже два, прогресс :)
Или это я устаревший sjasmplus юзаю?
SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
Может и новей есть, но попробуй там разберись не зная английского...
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
Адрес хранится на стеке, но тоже через зад - возврат делается через 2 точки в 48-м бейсике: 33b1 (pop hl,de:ret) и 004d (pop de,bc,hl,af:ret). Т.е чихать на регистры в заголовке - сохраним их ещё и на стеке! Кстати, при компиляции положение самого стека никак не задаётся, но в снапшоте он сохраняется (парадоксЪ).
Самим сджасмом кто-нибудь сейчас занимается? Есть мысль расширить SAVESNA - добавить ещё 1 параметр, адрес стека.
Знаю только исходники: https://github.com/mkoloberdin/sjasmplus - в первом посте указано.
Собранные выше rc7 не видел