Препроцессор и кодогенерация, например можно генерить нужные таблички и развёрнутый код для вывода спрайтов.
Вид для печати
Так, всё, хорош флудить, бред уже какой-то пошел. thims хочет делать себе ассемблер и эмуль с блекджеком и всем прочим - успехов ему. Засим собственно можно и прекратить спор ни о чем.
А можно в какой нибудь ветке UnrealSpeccy сделать автозагрузку и автостарт, например, снэпшота или, скажем, scl?
Предположим, в ini анрила добавить строку типа autostartfile=имяфайла.sna . Далее, когда анрил запущен, с некой периодичностью он должен сканировать каталог, указанный в ini анрила как DIR, на появление этого файла в этом каталоге.
В случае появления запускать этот файл, затем удалять его и снова ожидать его появления, чтобы снова запустить.
Как мне кажется, это удобно для отладки своих программ в связке SjASMPlus+Unreal с помощью директивы SjASMPlus "savesna":
Компилируем свой код и пишем .sna в каталог. Уже запущенный Unreal автоматически подхватывает нужный файл и запускает его, не забыв заново загрузить пользовательский список меток и брикпойнтов. Удаляет файл из каталога.
Думаю, что я своими силами мог реализовать подобное, если бы на это найти время...
Для того, кто возьмется - готов заплатить, ну, 500 деревянных.
Или это уже реализовано как-то?
1. Собственно, смысл я уже описал выше.
2. Гемор - это ваше субьективное понятие, как программиста
3. Этот ваш "гемор" - для юзера ничто иное, как опция. Кого волнует, насколько это сложно реализовать программисту. Кстати, уверен, что несложно.
4. Лично мне недостаточно комфортно работается в среде SJasm+UnrealSpeccy+UEStudio, когда при компиляции и билде нового кода в sna я постоянно должен закрывать окно анрила, плюс закрывать еще окно командной строки, которое анрил не закрывает, даже при установленном hideconsole=1, когда анрил запускается из командной строки. Либо при каждом новом билде получать +2 окна анрила (анрил и окно консоли) в котором запускается мой новый скомпилированный снэп.
Гораздо проще, если анрил будет проверять появление заданного снэпа в директории и сам будет загружать его.
я когда отлаживал, вообще не закрывал анрил. просто f3, тык в снап и готово, при этом ты сразу в отладчике. какая-то надуманная проблема, ИМХО.
А можно ли как-то автоматом подсчитать кол-во тактов между парой меток(ну если конечно там циклов/переходов нету)?
поставить 2 бряка на 2 метки, потом нажать esc. когда вывалишься в отладчик на 2й метке, внизу будет видно скока тактов сожралось (и пофиг на циклы/переходы).
Для того, чтобы это сделать в асме, надо в асм запилить половину эмулятора :) учитывая вон вышесказанное про ноп в три такта. мало ли кто по какому режиму считать собрался.
ахаха! :)
поди включен режим с ваитами:) 3 такта блин:) чЮдаки, лол:)
когда мне надо было выравнивать по тактам куски кода, я делал примерно так:
тут ручная работа, конечно, есть, но все же проще что-то менять. padd_macro - макрос (или куча макросов), который добавляет код в нужное кол-во тактов.Код:code ;X t
code ;Y t
code ;Z t
padd_macro Tneed-X-Y-Z
было дело, даже писал автоматический такой "компилятор", который делал то же, что и макрос, но в процессе работы проги и кол-во тактов дробное(!). но в любом случае вручную надо было задавать кол-во тактов полезного кода.
в этом проверь - http://detstwo.com/pub/zemu/
зуб даю что NOP - 4 такта :)
чо-где последняя-распоследняя версия ужасма?:) с правками от 2012 года?
Реализовал еще одно решение, проще предыдущего. PureBasic.
launcher.exe запускается после окончания компиляции SjASM или, к примеру, по кнопке Run из IDE (UEStudio).
Код:;launcher.exe при запуске ищет окно UnrealSpeccy
;в случае отсутствия запущенного эмулятора - запускает его и снова ищет окно
;переводит фокус на окно Unreal и имитирует нажатие клавиш
;Alt+F3 - быстрая загрузка qsave1.sna
;если UnrealSpeccy был изначально свернут - сворачивает снова
;иначе оставляет окно активным
;--------------
;поиск главного окна UnrealSpeccy
count=0
minim=0
Repeat
count=count+1
UnrealWin=FindWindow_(0,"UnrealSpeccy") ;ищем по заголовку окна
Delay(1)
If count=1000
RunProg = WinExec_("D:\ZX\Unreal\unreal.exe", #SW_SHOWNORMAL)
Delay(1000)
EndIf
Until UnrealWin>0 ;пока не найдем окно
;фокус в окно Unreal
If GetWindowLong_(UnrealWin, #GWL_STYLE) & #WS_MINIMIZE
minim=1
ShowWindow_(UnrealWin, #SW_SHOWNORMAL)
UpdateWindow_(UnrealWin)
EndIf
actwin=GetWindowThreadProcessId_(GetForegroundWindow_(),0)
curwin=GetCurrentThreadId_()
If (actwin<>curwin)
AttachThreadInput_(actwin,curwin,#True)
EndIf
SetForegroundWindow_(UnrealWin)
If (actwin<>curwin)
AttachThreadInput_(actwin,curwin,#False)
EndIf
InvalidateRect_(UnrealWin,#Null,#True)
;эмуляция нажатия ALT+F3 (quick load qsave1.sna)
Delay (800)
keybd_event_(#VK_MENU,MapVirtualKey_(#VK_MENU,0),0,0)
keybd_event_(#VK_F3,MapVirtualKey_(#VK_F3,0),0,0)
Delay(200)
keybd_event_(#VK_MENU,MapVirtualKey_(#VK_MENU,0),#KEYEVENTF_KEYUP,0)
keybd_event_(#VK_F3,MapVirtualKey_(#VK_F3,0),#KEYEVENTF_KEYUP,0)
If minim=1
ShowWindow_(UnrealWin, #SW_SHOWMINIMIZED)
EndIf
Друзья! У меня возник вопрос, этот sjasm может упаковывать откомпилизованные исходники?
Хочется чтобы после ассемблирования на trd образе появился бейсик с монолоадером и упакованный кодовый блок, например хрустом. Киньте примером плз.
паковать можно хрустом(отдельной консольной утилитой), кидать на trd упакованный блок тоже отдельной утилитой.
Ребят, а пример есть? У меня под рукой ни утилиты, ничего.
кстати, когда дему писал, в sjasm'e глюк нашел, но затерял исходник.
надо бы вопроизвести..
можно конечно - использовать sjasm как часть утилит для сборки образа (как гвозди микроскопом)... может можно и паковать, если написать хруст на lua...
А зачем использовать какие-то левые консольные программы, когда всё умеет сам sjasm? Так можно и собственнно сохранение в SNA делать отдельный утилитой например, вывод блоков - тоже отдельной, а че, подумаешь, стопицот левых программ висит.
если бы он это делал за один проход вместе со сжатием, было бы норм (хотя и странно). а так получается, добавляются постбилд-шаги, где ассемблер используется для "левых" целей... это называется "костыли".
Что-то этот dehrust.bin корявый какой-то. У меня заработал только исходник от обычного спековского хруста 1.3, который тут недавно выложили.
drbars, посмотри EvoSDK, там реализовано все на автомате от компиляции исходника на Си (!!?) и вплоть до создания монолоадера на сжасме и последующим формированием трд и запуском в эмуле. Уверен там найдешь что-то полезное для себя
Я пользуюсь вместо хруста MegaLZ, с хрустом тоже какая-то заморочка была при распаковке.
Приветствую !
подскажите пожалуйста, есть ряд вопросов
osx,
SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
как понять номер строки с ошибкой
т.к. сейчас то что вижу не имеет отношения к реальности
например
p2.asm(42): error: Syntax error: ','B'
- 26 строка в файле
правда по LST файлу можно найти где ошибка но как-то странно
2. подскажите как правильно записать бинарникКод:00101 4024 out_de_99: ; CODE XREF: vdp_wr_de_a+4p
00102 4024
00103 4024 ; vdp_rd_de+1p ...
00104 4024
00105 4024 7B ld a, e
00106 4025
00107 4025 D3 99 out (99h), a ; '™'
00108 4027
00109 4027 7A ld a, d
00110 4028
00111 4028 D3 99 out (99h), a ; '™'
00112 402A
00113 402A C9 ret
в чем сейчас грабля
есть исходник, в нем 2 ORG
ORG 4000h
sdaddsa
ORG 0E000h
ds
ds
после e000 только DS
но при записи, это все пишется одним потоком байт, и дописывает 0 вместо всех DS
я бы ожидал что DS это просто объявление адресов, без реальных 0
ds это заполнение символом, который идёт после ds. У тебя в данном случае чем заполняется? Бинарник сохраняется с начала и до конца, что ты от него хочешь-то? По файлам он тоже все нормально строку показывает, че-то или ты не понимаешь, или одно из двух, в общем надо файл.