ZXNet эхоконференция «code.zx»


тема: Распознавание эмуляторов - исправленная версия.



от: Aleksey Malov
кому: All
дата: 01 May 2000
Приветствую тебя, All! Исправленная версия распознавателя эмуляторов. org #6000 ;чистим экран di ld hl,#5aff ld (hl),#7 dec hl bit 3,h jr nz,$-5 xor a ld (hl),a or (hl) dec hl jr z,$-3 ;устанавливаем im 2 ld hl,#fd00 ld de,#fd01 ld b,e ld c,l ld (hl),#fe ld a,h ld i,a ldir ld a,#c3 ;jp nn ld (#fefe),a ld hl,imob ld (#feff),hl im 2 ;декрюнчим кучу NOP'ов ld hl,#8000 ld de,#8001 ld bc,#7Bff ld (hl),0 ;nop ldir ld (hl),#c9 ;ret ei ;матюгаемся ld e,0 ld hl,sysmes call prn ;заносим в счетчик начальное значение ld a,#ff ld (count),a halt ld b,20 ;вызываем 20 раз кучу NOP'ов w1 call #8000 djnz w1 di ld a,(count) ;декрюнчим кучу команд EI (не путать с ;Eternity Industry ;) ) ld hl,#8000 ld de,#8001 ld bc,#7BfE ld (hl),#FD ;EI ldir ld c,a ld a,#ff ld (count),a ei halt ld b,20 ;вызываем 20 раз кучу комад EI w2 call #8000 djnz w2 di ;сравниваем число интов в первом ;и втором случаях с точностью до ё 1 int'a ld a,(count) sub c inc a cp 3 ;если cf=1, то мы под эмулем, т.к. ;z80 во время команды EI не реагирует ;на прерывания => число интов на реальном ;спектруме в первом и втором замерах ;отличается более чем на 1 PUSH AF ei ;также если во время прихода прерывания ;выполнялась команда ld a,i (ld a,r), ;процессор посчитает, что прерывания ;запрещены LD E,0 ld bc,0 w3 ld a,i jp po,real1 djnz w3 dec c jr nz,w3 inc e real1 push de ;снова матюгаемся ld e,#40 ld hl,report call prn ld b,40 call pause pop de pop af rl e xor a or e ;если в первом и во втором тестах ;результаты соответствуют реальному ;z80, то печатаем об этом ld hl,realmes jr z,real ;иначе печатаем, что нас эмулируют ld hl,emulmes real ld e,#60 call prn ;печатаем press any key ld b,100 call pause ld hl,anykey call prn ;опрашиваем any key key xor a in a,(#fe) cpl and 31 jr z,key ;выходим в бейсик или куда-нибудь еще di ld a,#3f ld i,a im 1 ei ret ;процедура печати стринга в верхнюю ;треть экрана методом телетайпа ;hl- asciiz-строка ;е-мл. байт prn ld a,(hl):inc hl or a ret z push hl ld b,5 add a,a ld l,a cp " "*2 jr z,prn0 ld c,40 xor a beep ld b,c xor #18 out (#fe),a djnz $ dec c jr nz,beep inc b prn0 halt djnz prn0 ld h,0 add hl,hl add hl,hl ld a,h add a,#3c ld h,a ld b,4 ld d,#40 prn1 ld a,(hl) ld (de),a inc l inc d djnz prn1 ld b,4 prn2 ld a,(hl) srl a or (hl) ld (de),a inc l inc d djnz prn2 pop hl inc e jr prn ;мессаги sysmes db " 2000 Brainwave of X-Project. " db "System checking! Please wait... ",0 report db "System checking repot:",0 emulmes db " Warning! General failure: " db "CPU not found! Press F1 for " db "software emulation... ;-) ",0 realmes db "Congratulations!!! Test detected" db "the Real ZX-Spectrum. May be. ;)",0 anykey db "Press any key to exit...",0 pause halt djnz pause ret ;обработчик прерываний imob push af ld a,#3e count equ $-1 inc a ld (count),a pop af ei ret Желаю вам здоровья, счастья и творческих узбеков. Aleksey Malov aka VIVID/Brainwave.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Почётные и Вечные - Список Заслуженных Пользователей AC Edit.
Открытые письма Nemo №4.8
Сплошные приколы - 5 приколов. Учись стрелять! Если игра мешает делу...
Misc - НЛП: наведение конфyзионного тpанса.
Программистам - Magic на Scorpion`e, инвертирование символа вертикально, инвертирование символа горизонтально, сдвиг атрибутов влево, сдвиг атрибутов вправо, печать сообщение, ввод символа, звуковой сигнал.

В этот день...   8 мая