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


тема: тест хочу ;)



от: Oleg Grigoriev
кому: Eugene Palenock
дата: 15 Nov 2000
Пусть враги твои, Eugene, умрут без сыновей! 15 November 2000 at 03:30, Eugene Palenock => All: EP> Дайте мне какой-нибудь тест в аптеку сходи. :) EP> который сможет эмулятор отличить от реала. EP> Или эмуляторщики наконец победили ? ;) наверное. вот моё творение - написано довольно давно, правда... на реале должен моргать синим. компилить в шторме. == { Begin } ========================================= { emultest.C } == ;тест на эмулятор ; DRIVE EQU #5CF6 IM2TB EQU #BE00 ORG #6000:DI ; LD SP,#6000 ; LD HL,#0000:PUSH HL ; LD HL,#3D2F:PUSH HL LD HL,IM2TB,A,H,I,A LD (HL),H:INC (HL),L:JR NZ,$-#03 INC H:LD (HL),H,L,H LD (HL),#C9 IM 2 LD A,(DRIVE):OR #3C:CALL TOPRFF LD A,#08:CALL TOPR1F,INTRQ LD B,#0A EI:HALT DJNZ $-#02 LOOP XOR A:LD (ENEMY+#01),A CALL TEST1 CALL TEST2 CALL TEST3 LD A,#20:CALL TOPR1F,INTRQ ENEMY LD A,#00 OR A:LD A,#01:JR Z,$+#03:INC A CALL FILL XOR A:CALL FILL LD B,#0A WAIT EI:HALT XOR A:IN (#FE):CPL:AND #1F RET NZ DJNZ WAIT JR LOOP ;*************************************** TEST1 LD D,#00,A,#C3,HL,TEST1R LD (#5CC2),A,(#5CC3),HL LD (TEST1R+#01),SP LD HL,#2740:PUSH HL LD HL,#2A53:PUSH HL LD A,#08,C,#1F JP #3D2F TEST1R LD SP,#0000 CALL INTRQ LD A,(#5CCD):AND #01 LD B,A LD A,(ENEMY+#01):OR B LD (ENEMY+#01),A RET ;*************************************** TEST2 LD D,#00,A,#C3,HL,TEST2R LD (#5CC2),A,(#5CC3),HL LD (TEST2R+#01),SP LD HL,#2740:PUSH HL LD B,#08,HL,#2A55 PUSH HL:DJNZ $-#01 LD HL,#2A53:PUSH HL LD A,#08,C,#1F JP #3D2F TEST2R LD SP,#0000 CALL INTRQ LD A,(#5CCD):AND #01:XOR #01 LD B,A LD A,(ENEMY+#01):OR B LD (ENEMY+#01),A RET ;*************************************** TEST3 LD D,#00,A,#C3,HL,TEST3R LD (#5CC2),A,(#5CC3),HL LD (TEST3R+#01),SP LD HL,#2740:PUSH HL LD B,#00,HL,#2A55 PUSH HL:DJNZ $-#01 LD HL,#2A53:PUSH HL LD A,#08,C,#1F JP #3D2F TEST3R LD SP,#0000 CALL INTRQ LD A,(#5CCD):AND #01 LD B,A LD A,(ENEMY+#01):OR B LD (ENEMY+#01),A RET ;*************************************** ; FILL PUSH AF,BC EI:HALT OUT (#FE) ADD A,A,A,A,A,A LD (FILL1+#01),SP LD B,#30,D,A,E,A,SP,#5B00 .8 PUSH DE DJNZ $-#08 FILL1 LD SP,#0000 POP BC,AF RET ;*************************************** ; INTRQ LD IX,#3EF5:CALL DOS:DI:RET TOPR1F LD C,#1F:JR TOPR TOPRFF LD C,#FF TOPR LD IX,#2A53 DOS PUSH IX:JP #3D2F == { End } =========================================== { emultest.C } == [ WBR, Oleg. ] [ 13:49 15 November XXXV A.S. ]

от: Aleksey Malov
кому: Eugene Palenock
дата: 15 Nov 2000
Приветствую тебя, Eugene! Wed 15 Nov 2000 в 03:30:13 Eugene Palenock и All разговаривали на тему тест хочу ;). EP> Дайте мне какой-нибудь тест который сможет эмулятор отличить от реала. EP> Или эмуляторщики наконец победили ? ;) Кидаю, уже в который раз, тест, который сможет отличить эмулятор от реала. Вот исходник: ═══════════════════ FUCKEMUL.a ══════════════════ 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 halt ;а вот третий тест ;На реальном Z80 команда EI запрещает ;прерывания на время следующей команды, ;однако, если следующая команда ;является командой LD A,I, то флаг ;четности/переполнения покажет, что ;прерывания разрешены ;Возможно, что даже R80 не сможет ;раскусить данный тест ei ld a,i jp pe,real2 inc e real2 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 report:",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 ════════════════════════════════════════════════ Счастливо, Eugene! С вами был Vivid/Brainwave^X-Project. [ZX] [Sailor Moon]




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

Похожие статьи:
Интерфейс - SPECCY за и против, Размышления Spy/Eternity Industry.
Pusher - Pusher v6.01p программа для выдирания и проигрывания музыки.
Реклама - Куплю недоpого чистые дискеты 5,25 дюйма.
Гости - Старые знакомые:О истории создания краснодарской группа UNIT-5
Chaos Constructions'2001 - Касик делится впечатлениями об очередном фестивале компьютерного искусства.

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