גישה לזיכרון מסך ב-C

DecayCell

New member
גישה לזיכרון מסך ב-C

אני צריך לכתוב פונקציה ב-C שמעתיקה מתוך buffer כלשהו את תוכנו לזיכרון המסך הטקסטואלי. הצרה היא שאני צריך לכתוב את התוכנית כך שתעבור הידור גם ב-GCC וגם בקומפיילר של בורלנד... למישהו יש רעיון איך אפשר לכתוב את הגישה עצמה לזיכרון? אפילו שימוש באסמבלי יהיה טוב, ובלבד שזה יעבוד עבור כמה שיותר מהדרי PC...
 

DecayCell

New member
אכן, כביכול DOS

אבל לא native DOS, אלא הגירסא של Win98 והאמולטור של XP.
 

voguemaster

New member
לא הבנתי מה הבעיה

הזיכרון הטקסטואלי נמצא בכתובת B800 (כתובת סגמנט כמובן). כל עוד אתה על PC זה לא ממש משנה עם מה אתה מקמפל. אתה רק ניגש לכתובת הזו. מעבר לכך, אם אתה ממש רוצה לעשות מימוש יפה אתה יכול לבקש מה-BIOS את המיקום של הזיכרון (והוא אכן יחזיר לך B800 כמובן) בעזרת איזשהו interrupt ששכחתי את מספרו. תראה לדוגמא:
typedef unsigned char BYTE; #define SCREEN_WIDTH 80 #define SCREEN_HEIGHT 25 // allocate an array of bytes BYTE bVirtualScreen[SCREEN_WIDTH*SCREEN_HEIGHT], *bDisplay; // obtain the address bDisplay = 0xb8000; // segment+offset address // if you have some content in bVirtualScreen, display it memcpy( bDisplay, bVirtualScreen, SCREEN_WIDTH*SCREEN_HEIGHT);​
לזה התכוונת ?? השיטה הזו לא שונה בהרבה גם ברזולוציות גבוהות יותר (ברמתה הבסיסית בכל אופן).
 

voguemaster

New member
הממ כמה צפוי ../images/Emo13.gif

אצטרך לבדוק את העניין יותר לעומק. אבל לא הבנתי איך אתה מקמפל את התוכנית שלך. האם אתה מקמפל עם קומפיילר Win32 כמו זה של Visual או אחד אחר כמו זה של DevCPP ?? כי אם כן, יוצא EXE שונה לחלוטין. מצד שני, אם אתה עובד עם קומפיילר לסביבת DOS ורק מריץ אותו תחת האמולציה, זה משהו אחר (*אמור* לעבוד...). אצטרך לבדוק את העניין הזה... לעזא עם MS וה-DOS VM שלהם
 

DecayCell

New member
בעזרת ++Dev-C

שגם הוא משתמש בקומפיילר Win32 כשר למהדרין (מקמפל תוכניות Win32 ללא כל עכבות).
למיטב ידיעתי אין port טוב ל-DOS של GCC שאינו עובד ב-protected mode.
 

MotiAd

New member
מן הסתם תקבל את זה...

ובמצב כזה הכתובת בזיכרון היא B8000. (של המעבד הכוונה-מצב מוגן).
 

MotiAd

New member
אהה...

זה שווה חיפוש. ובכל מקרה תנסה לעבוד עם אינטרפטים. וינדוס מאוד סלחנית בעבודה איתם.
 

voguemaster

New member
זו לא הדרך בכלל

הדרך היחידה לעשות את זה נכון, אם כותבים ל-DOS: לעבוד עם קומפיילר של DOS! נדמה לי שבורלנד 4 ירוץ יפה מאוד באמולציה. כולה קצת קוד C... הכי גרוע אפשר לכתוב שגרת אסמבלי קצרצרה שמעתיקה. הבעיה עם לעבוד עם קומפיילר של WIN32 היא שיש הגנה על האיזור הזה. זה הופך את העניינים לקשים יותר לביצוע (גם תלוי באיזו מע' הפעלה ספציפית).
 

MotiAd

New member
כחתי שהוא עובד עם...

VC. טעות שלי באמת. גם הפסיקות שם לא אותו דבר.
 
למעלה