Тестируем i386
2026-02-26 13:57На симуляторе PC i86 успешно запускаются все версии PC DOS, все DR-DOS и почти все MS-DOS. Кроме последней неофициальной версии MS-DOS 7.1: потому что она требует процессора i386. А именно она и интересна полной поддержкой FAT32 и длинных имён файлов.
Так что я решил проапгредить процессор в симуляторе. Благо, для i386 тоже есть хороший набор тестов: SingleStepTests/80386. И тут же на первом тесте обнаруживаем странность, в регистре EFLAGS.
Интеловская документация утверждает, что неиспользуемые старшие 14 бит регистра EFLAGS всегда нули. Но из реального хардвера вычитываются единицы.
Так что я решил проапгредить процессор в симуляторе. Благо, для i386 тоже есть хороший набор тестов: SingleStepTests/80386. И тут же на первом тесте обнаруживаем странность, в регистре EFLAGS.
Интеловская документация утверждает, что неиспользуемые старшие 14 бит регистра EFLAGS всегда нули. Но из реального хардвера вычитываются единицы.
Figure 2-8. EFLAGS Register
16-BIT FLAGS REGISTER
A
+-------------------+---------------+
31 23 15 7 0
+-------------------+---------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |V|R| |N| IO|O|D|I|T|S|Z| |A| |P| |C|
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | |0| | | | | | | | |0| |0| |1| |
| |M|F| |T| PL|F|F|F|F|F|F| |F| |F| |F|
+-------------------+---------------+++++-+++-+-+++++++++++++-+++-+++-+++
| | | | | | | | | | | | |
VIRTUAL 8086 MODE---X----------+ | | | | | | | | | | | |
RESUME FLAG---X------------+ | | | | | | | | | | |
NESTED TASK FLAG---X----------------+ | | | | | | | | | |
I/O PRIVILEGE LEVEL---X-------------------+ | | | | | | | | |
OVERFLOW---S----------------------+ | | | | | | | |
DIRECTION FLAG---C------------------------+ | | | | | | |
INTERRUPT ENABLE---X--------------------------+ | | | | | |
TRAP FLAG---S----------------------------+ | | | | |
SIGN FLAG---S------------------------------+ | | | |
ZERO FLAG---S--------------------------------+ | | |
AUXILIARY CARRY---S------------------------------------+ | |
PARITY FLAG---S----------------------------------------+ |
CARRY FLAG---S--------------------------------------------+
S = STATUS FLAG, C = CONTROL FLAG, X = SYSTEM FLAG
NOTE: 0 OR 1 INDICATES INTEL RESERVED. DO NOT DEFINE
