גישה לכתובת של המסך

VeryKnownDeath

New member
גישה לכתובת של המסך

אני הצלחתי לעבור למצב של 256 צבעים ב-C, ע"י הפונקציה הבאה...
void color_mode(void) { union REGS regs; regs.h.ah=0; regs.h.al=0X13; int86(0X10,&regs,&regs); }​
עשיו ניסתי לגשת ישירות לכתובת המסך ע"פ הפעולה הבאה...
typedef unsigned char byte; byte *VGA=(byte *)MK_FP(0xA000,0);​
אני לא הצלחתי להבין למה זה לא עובד (רציתי לעשות זאת כדי לשתול פיקסל...
putpixel(int x,int y,int color) { VGA[y*320+x]=color; }​
אני אשמח לכל עזרה...ותודה מראש
 

voguemaster

New member
כי לא ככה זה עובד

הכתובת שהכנסת בתור המיקום של הבאפר של ה-VGA לא נכונה. מה שהכנסת זו כתובת הסגמנט. אני לא יודע אם סיפרו לך אבל כדי לחשב את הכתובת האמיתית של תא בזיכרון אם קיבלת כתובת סגמנט וכתובת היטס היא ע"י הכפלה של כתובת הסגמנט ב-16 (כלומר בהקסה מוסיפים עוד 0 בסוף) ואז מחברים את כתובת ההיסט בתוך הסגמנט. מצד שני, מה שניסית לעשות טיפה עקום... שטויות, ככה לומדים
 

codec

New member
דווקא נראה בסדר...

הכתובת של זיכרון ה-VGA נכונה. MK_FP מקבל סגמנט והיסט ומחזיר מצביע. על פניו זה נראה בסדר. מה אתה רואה/לא רואה? תנסה "להדפיס" מספר יותר גדול של פיקסלים, ותגיד מה אתה רואה...
 

VKD

New member
אני פשוט לא רואה כלום!

ניסתי להדפיס פיקסלים וזה לא עשה כלום!
 
למעלה