Для того, чтобы это сделать в асме, надо в асм запилить половину эмулятора учитывая вон вышесказанное про ноп в три такта. мало ли кто по какому режиму считать собрался.
Для того, чтобы это сделать в асме, надо в асм запилить половину эмулятора учитывая вон вышесказанное про ноп в три такта. мало ли кто по какому режиму считать собрался.
Последний раз редактировалось Shadow Maker; 08.06.2012 в 22:14.
Свирепый агрессивно-депрессивный мордовец!
Не уверен - не напрягай!
Не сдавайся. Дыши?
Virtual TR-DOS
ахаха!
поди включен режим с ваитами 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
Последний раз редактировалось Лас; 10.06.2012 в 02:15.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)