vak: (Знайка)
[personal profile] vak
Покажу как выглядит поиск ошибки в симуляторе. Сначала запускаем работающий вариант, с записью трассировки в файл.
$ tiltti msdos3.31-1.44m.img -r -o a.log
Теперь запускаем глюкавую версию, получаем второй файл трассировки.
$ tiltti --386 msdos3.31-1.44m.img -r -o b.log
Сравниваем файлы трассировки умной тулзой. В левой части экрана работает процессор i8086. В правой части - процессор i386. Выполняют один и тот же код, а именно MS-DOS 3.31. Результаты должны совпадать, за исключением того, что слева регистры 16-битные, а справа 32-битные. И они совпадают... до момента ошибки.



Как видим, команда STOSB слева выполняет 8 итераций и завершается. Та же команда справа продолжает крутиться до бесконечности. Что за ерунда? Проверим значение счётчика итераций в регистре CX. Глядите, команда MOV на адресе 07d89 заносит значение 8 в регистр CX (слева). А справа в регистре ECX оказывается ffff0008. Тоже не придерёшься: в реальнгом режиме задействуются только младшие 16 бит регистра. В старших битах остался мусор от каких-то предыдущих команд.

Но команда STOSB тоже должна использовать только младшую половину регистра CX, и выполнить 8 итераций. Вместо этого она, очевидно, берёт полное 32-битное значение, и крутится до морковкина заговенья.

А всё почему? От нетерпения. 😀 Надо было сначала добиться работы всех 100% MOO тестов, и потом уже пробовать грузить ДОС. Но очень хотелось глянуть, как оно пойдёт.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org