שלום לכולם...

MotiAd

New member
שלום לכולם...

אני בא לכאן מנענע בתקווה למצוא ישועה. אני בונה מערכת הפעלה ועובד על ממשק משתמש. אני יודע שאפשר להגיע לרזולוציות גבוהות ועומקי צבע גבוהים. ובבקשה בלי זיוני שכל על INTERRUPTS של אסמבלי. אני מתכנת גם ב-C וגם באסמבלי כך שהחומר לא אמור לשנות. כל מה שאני רוצה לדעת איך אני אמור להציג גרפיקה על המסך ברזולוציות גבוהות, כמו: SVGA או XGA. אני מקווה שתוכלו לעזור לי. ביי ותודה, מוטי.
 

voguemaster

New member
בלי INTERRUPTS ??

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

היכרות עם ממשקי דרייברים. לדוגמה לכרטיסי רשת יש סטנדרט תעשייתי שנקרא NDIS ואני מאמין שגם לכרטיסי מסך יש איזה שהוא סטנדרט ולו הקליל ביותר... מערכת הפעלה שלך צריכה לתמוך בסטנדרטים האלה אחרת לא תוכל לגשת לשום חומרה שהיצרן שלה מכבד את עצמו. אולי תוכל למצוא הסבר ב-DDK של Windows, כי שם יש הוראות איך לכתוב דרייברים - ואני מאמין שתהיה שם גם חשיפה לסטנדרטים שאתה צריך.
 

MotiAd

New member
ונניח שאני כן רוצה להשתמש בהם.

ונניח שאני כן רוצה שלהשתמש ב-INTERRUPTS אז איך אני עושה את זה? אם תוכלו לכוון אותי למידע זה יועיל ליי מאוד ואני אודה לכם מאוד. בקשר לנושא שלי למעלה.
 
אני לא בטוח

למה בדיוק אנשים התכוונו כאשר הם אמרו INTERRUPTS. לדוגמה, מישהו עירב נושא של REGISTERS על כרטיס המסך עם נושא ה-INTERRUPTS. זה לא בדיוק קשור. כתיבה ל-REGISTERS של כרטיס המסך דורש ממך היכרות עם כרטיס מסך מסוים. ברור לך שזה לא פרקטי עבור מי שוכתב מערכת הפעלה מודרנית. עבודה עם INTERRUPTS: באופן עקרוני, התפקיד של מערכת ההפעלה "להצמיד" דרייבר מסויים ל-INTERRUPT מסוים. מכיוון שכל הדרייברים אמורים להיכתב לפי איזשהו סטנדרט, אז העבודה מול INTERRUPTS היא בדיוק אותו סטנדרט שדיברתי עליו. אם תמצא את הסטנדרט, תמצא גם איך עובדים עם ה-INTERRUPTS. זו דעתי.
 
אבל מכיוון

שאני עדיין לא כתבתי דרייברים למערכת הפעלה מלבד דוס, אני יכול לומר לך שאתה עלול למצוא אולי שיטות אחרות לפנות לדרייבר מאשר דרך INTERRUPT... אז קח בחשבון שאולי תצטרך לרדת מנושא ה-INTs... שמור על ראש פתוח
 

voguemaster

New member
מה ??

אני עירבתי את נושא הרגיסטרים ומסיבה טובה. כדי לגרום לכרטיס מסך לבצע פעולה מסוימת (נניח להיכנס למוד רזולוציה גבוהה) צריך לשחק לו ברגיסטרים. כל דרייבר עושה את זה, בהתאם למוסכמות כלשהי. כלומר אלו שכותבים דרייבר כלשהו מיישמים את אותה המוסכמות אבל מאחורי הקלעים אין שימוש בפסיקות, אלא בתכנות של כרטיס המסך. פה בדיוק הבעיה שגם עמדה בפני מפתחי משחקים בתקופת ה-DOS. צריך להכיר כל כרטיס וכרטיס כדי לדעת איך "להפעיל" אותו. מה שאולי לא ברור לחלק מהאנשים פה זה שדרייבר של חברה מסוימת נכתב ע"י אותה חברה, כשהוא מתאים למוסכמות הכללית שאנחנו מדברים עליה. אם לחלונות, אז הדרייבר תומך בפונקציות GDI וכד´ בחומרה. אם ל-DOS הדרייבר תומך בדברים כמו VESA וכד´. ד"א, איך לדעתך מיישמים את הפסיקות של VESA ?? מאחורי הקלעים ב-VESA BIOS יש קוד שבדיוק משחק ברגיסטרים ע"מ לתת את התוצאות המבוקשות בכל פעם שמשתמשים בפסיקה. אבל פסיקות זה לא דבר יעיל ולא דבר מהיר לכן לא משתמשים בזה כשכותבים דרייברים. מה לעשות, אלו החיים. אלי
 

MotiAd

New member
אתה תוכל להפנות אותי...?

אתה תוכל להפנות אותי לחומר שקשור לטיפול ברגיסטרים? אני אשמח מאוד. תשלח אותו לאי מייל אם אתה צריך אין לי הגבלה. [email protected]
 
מהבקשה המקורית

אני מבין שהוא לא רוצה לכתוב דרייברים, אלא *מערכת הפעלה*. לרדת לרמה של Registers זה כמו לכתוב דרייבר. כלומר: צריך *להשתמש* בממשק דרייברים סטנדרטי. האם ממשק מסויים עובד דרך Interrupts או לא - זה כבר לא משנה. כל סטנדרט והדרישות שלו. ההמלצה שלי עדיין בעניה עומדת: לחפש חומר לגבי ממשקי דרייברים סטנדרטיים ולהמשיך משם. אם מישהו פה בכל זאת רוצה לעבוד ברמה של Registers אז צריך לחפש חומר על מה שנקרא ModeX אבל הכיוון הזה לא מומלץ למי שכותב *מערכות הפעלה*.
 

voguemaster

New member
דרך אגב

אפשר לעבוד ברזולוציות גבוהות בקלות בלי MODEX. אבל לדעתי תהיה לו בעיה למצוא דרייברים למערכת ההפעלה שלו. אם זה היה כ"כ פשוט, כלומר הוא רק היה צריך להתממשק מול דרייבר קיים. שנינו יודעים שזה לא פועל. יש דרייבר לכל מערכת הפעלה שונה של מיקרוסופט וגם של אחרות!! מה שזה אומר זה שדרייברים למערכות הפעלה שונות, שונים בעצמם. אלי
 
יכול להיות -

ואני מדגיש *יכול*, שאתה מאוד מאוד צודק. אבל כל מערכת הפעלה מודרנית בד"כ בנויה משכבות. שכבת ה-Low-level Drivers עשויה להיות מקשה נפרדת, ובעלת סטנדטים משלה - אפילו אם הם של מיקרוסופט. יש הרבה סטנדרטים. אז *יכול להיות*, שאפשר פשוט לבחור אחד (או יותר), ולהשתמש בו בשביל ליישם שכבה מקבילה במערכת הפעלה אחרת. אבל בשביל זה צריך לשבת ולקרוא DDK. נ.ב. פתרון ה-Modex הוא סה"כ דרך קצת יותר נוחה מלמצוא תיעוד מלא של כל ה-Registeres של כרטיס מסך מסויים. הרבה כרטיסים מיישמים ממשק אחיד בפקודות IN/OUT עבור Modex.
 

voguemaster

New member
כן מוסכם

אבל יש עוד דרך. לא צריך להיכנס למצב מוגן ואפשר לגשת לזיכרון בצורה לינארית בלי החלפת BANKS.
אלי
 

MotiAd

New member
ואיך אני עושה את זה?

הרי בכל סגמנט יש לי רק 64 קיי זיכרון וזה מספיק בקושי שלרזולוציה של 320X200.
 
למעלה