Кажется получилось!
Вот пример. Он компилируется! Для проверки - просмотр в дебагере.
IncText_test.asm
Код:
DEVICE ZXSPECTRUM128
LUA PASS1
function inc_text(file_name,label_attr,line_terminator)
if line_terminator==nil then
l_t=13
else
l_t=line_terminator
end
for line in io.lines(file_name) do
if string.sub(line,1+string.len(line)-string.len(label_attr))==label_attr then
--print (string.sub(line,1,string.len(line)-string.len(label_attr)),sj.current_address)
sj.parse_line(string.sub(line,1,string.len(line)-string.len(label_attr)))
else
for i = 1,string.len(line) do
sj.add_byte(string.byte(line,i))
end
sj.add_byte(l_t)
end
end
end
ENDLUA
;----------------------------------------------------------------------
ORG #8000
START
LD HL,TT1
LD DE,TT2
LD IX,TT3
MainLoop
JP MainLoop
LUA ALLPASS
inc_text("test.txt",">>")
ENDLUA
SAVESNA "textovik.sna",START ;в папку unreal после компиляции сохранится снапшот для запуска в эмуляторе, содержащий программу, описанную сверху
Образец текста.
test.txt
Код:
TT1>>
Hello!!
Ready?
3
2
1
Go!
TT2>>
SOS!!!
TT3>>
GAME OVER
PRESS ANY KEY
Final>>
LD A,123>>
RLCA>>
JP Final>>
BYTE "SEVER",0,"BURAN",0>>
Как видите, можно добавлять через текст не только метки.
Это моя первая "программа" на LUA, так что я готов к любой критике как стиля так и содержания.