- Bài viết thảo luận kỹ thuật chi tiết trên Retrocomputing Stack Exchange về vấn đề nhân NT 3.1 gây khởi động lại trên máy 486DX4
- Tác giả đã cài Windows NT 3.1 trên hệ thống Compaq ProSignia 3080 và thay Intel 486DX-33 bằng AMD enhanced 486DX4-SV8B để cải thiện hiệu năng
- Tác giả gặp sự cố khi cố gắng vào chế độ gỡ lỗi nhân, khiến máy khởi động lại thay vì hiện dấu nhắc
kd>
- Tác giả đã kiểm tra nhiều khả năng như bộ nhớ, hỏng tệp hệ thống, hoạt động watchdog phần cứng, và giao tiếp của bộ chuyển đổi USB-to-serial, nhưng không có yếu tố nào là nguyên nhân
- Tác giả phát hiện rằng nhân Windows NT 3.1 không tương thích với các bộ xử lý 486 nâng cao, đặc biệt là những bộ xử lý cung cấp lệnh CPUID
- Vấn đề tương thích được lần ra là do lỗi trong hàm KiSaveProcessorControlState, hàm lưu các thanh ghi điều khiển của bộ xử lý vào cấu trúc CONTEXT mở rộng
- Lỗi này khiến bộ xử lý 80-4-86 có khả năng CPUID bị xem như bộ xử lý 80-260-86, vì hàm đã coi byte tại offset 19h của KPRCB là một phần của số model
- Tác giả đề xuất bản vá thay lệnh
cmp ds:word_FFDFF138, 5 bằng phép so sánh byte, và cần áp dụng hai lần trong NTOSKRNL.EXE
- Cuộc điều tra chi tiết và bản sửa lỗi được đề xuất của tác giả là tài liệu hữu ích cho những ai gặp vấn đề tương tự với nhân NT 3.1 trên các bộ xử lý 486 nâng cao
1 bình luận
Ý kiến trên Hacker News