אני עובד כבר די הרבה זמן על פיתוח מנוע גרפי עצמאי, בינתיים דו-מימדי... תוך שימוש בכלים של VESA דרך ה-BIOS...
עד עכשיו, תיכנתתי ב-Dos16, כלומר ב-16 סיביות במצב Real-Mode... (ב- ++Borland C)...
כעת, אני מנסה להמיר את הקוד לאסמבלי במצב Win32, כלומר ב-32 סיביות במצב Protected-Mode... (ב-MASM32)...כידוע, האינטראפטים שאיתם עבדתי ב-16 סיביות (int 10h), אינם תקפים עוד לגבי 32 סיביות... ולכן, קראתי קצת, והבנתי שיש צורך בשימוש באינטראפט 31h (פונקציה 300h) שמדמה פעולות Real-Mode ב-Protected-Mode...
הפונקציה הזו מקבלת כפרמטרים מצביע למבנה של רגיסטרים, והאינטראפט שיש להפעיל, ואמורה להפעיל את האינטראפט הרצוי...
זה מה שעשיתי:
.486 .model flat, stdcalldpmi struc _edi dd 0 _esi dd 0 _bp dw 0 _bph dw 0 _ddw dd 0 _ebx dd 0 _edx dd 0 _ecx dd 0 _eax dd 0 _flg dw 0 _es dw 0 _ds dw 0 _fs dw 0 _gs dw 0 _ip dw 0 _cs dw 0 _sp dw 0 _ss dw 0 dpmi ends .data real_mode dpmi <> .code start: les di, real_mode mov real_mode._eax, 4F02h mov real_mode._ebx, 101h mov ax, 300h mov bx, 10h xor cx, cx int 31h end start
|
אני מקבל שגיאת Run-Time, ולאחר Debug על השורה int 31h, בהודעה של access violation או משהו כזה...
אגב, התוכנית הזו אמורה לשנות את המצב הגרפי למצב של 640x480x8...
מישהו יכול לעזור?