
Сообщение от
b2m
Tronix, у меня какая-то неправильная версия CheckIt, она использует 32-битные команды (с префиксами 66h,67h). А какая версия использовалась на Поиске? И где её скачать?
Ну у меня обычная CheckIT 4.10 работает на поиске без проблем. Вот тут брал: http://old-dos.ru/dl.php?id=619 То, что оно пытается юзать 386 команды - нормально вполне, там детектится 386 и выше проц. Скорее всего на этом все и вылетает. Нужно обрабатывать invalid opcode
---------- Post added at 18:24 ---------- Previous post was at 18:16 ----------
Вот стандартная тащемто детектилка проца тех времен:
Код:
; 8086 CPU check
; Bits 12-15 are always set on the 8086 processor
;
check_8086:
push cs
pop ds
push cs
pop es
pushf ;save FLAGS
pop bx ;store FLAGS in BX
mov ax, 0fffh ;clear bits 12-15
and ax, bx ; in FLAGS
push ax ;store new FLAGS calue on stack
popf ;replace current FLAGS value
pushf ;set new flags
pop ax ;store new flags in AX
and ax, 0f000h ;if bits 12-15 are set, then CPU
cmp ax, 0f000h ; is an 8086/8088
mov cpu_type, 0 ; save the CPU type
je end_get_cpuid_
jmp short check_80286
end_get_cpuid_:jmp end_get_cpuid
;
; Intel 286 CPU check
; Bits 12-15 are always clear on the Intel processor.
;
check_80286:
.286
Смысл в том, что биты 12-15 регистра флагов на 8088 хрен поменяешь, они всегда аппаратно в единице. У вас в эмуле этот код отрабатывает и прыгает на проверку 286 и далее.