אני יודע לעבור למוד 13 וכל מיני כאלו, אבל מה אני צריך לעשות כדי לעבור למוד שמכיל 16 צבעים ברזולוציה של 800X600? אני יודע לעבור לזה עם הספרייה graphics.h אבל אני רוצה לעבוד בלי הספרייה הזאת...
חלון A הוא בגודל 64KB ואילו בשביל 640*480 ב256 צבעים, צריך יותר זכרון. לכן צריך להזיז את המקום אליו מצביע חלון A בזכרון המסך, פעולה זאת נקראת BANK SWITCH. כל פעם נגיש לך בלוק אחר בזכרון מסך, ובשביל להגיע לשורה הנכונה, לא מספיק להכפיל את y ב640 אתה צריך לדאוג שהשורה הנדונה נמצאת בחלון אליו אתה מסתכל באותו רגע.
כאשר bank, הוא מספר ה-bank שברצונך לאפשר ברגע... המשוואה היא כזאת... עבור pixel מסויים, כלומר ה-offset שלו (המיקום הוירטואלי שלו בזיכרון - y * x_resolution + x), ה-bank יהיה: pixel_offset << 16, כלומר חילוק ב-64KB... או לחלופין, אם זה שונה מ-64, תשנה את ה-16...
אתה מנסה לשלב בין צביעת הנקודה(שמלכתחילה לא צריכה להתבצע ע"י פסיקה) עם שינוי BANK, בפסיקה בודדת וזה וודאי לא אפשרי.
הקוד שאתה כתבת מעיד על חוסר הבנה בסיסית, לא רק של פונקציות VESA אלא של אסמבלי בסיסי. אתה כותב מידע בah, ואז מייד דורש אותו כשאתה כותב לax ואז דורס את החלק העליון של ax שוב כשאתה כותב לah.
מה גם שבכלל לא כתבת, איפה במסך אתה רוצה, חשבת את a ואז זרקת 16 ביט נמוכים של מידע, בכלל לא הכנסת את המידע על איזה פיקסל לצבוע!
אני ממליץ לך לשבת וללמוד אסמבלי בסיסי, כמו היחס בין AX AH וAL, ואז תחזור לVESA.