אנו חוזרים לסדרת ההדרכות כיצד ליצור מערכת הפעלה משלנו. אני מניח שתאהב מאוד את הפרק הזה כי סוף סוף נוכל לקיים אינטראקציה עם מערכת ההפעלה שלנו. היום נקרא את קלט המקלדת. לשם כך התוכנית דומה לזו של הטיימר. עלינו להשתמש ב- IRQ בכל מקרה אז נתחיל כמו עם הטיימר.
ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);
המטפל במקלדת שלנו, לעומת זאת, מורכב מעט יותר מכיוון שאנו קוראים את המקשים ומפקידים אותם במאגר.
חיצוני "C" בטל ND_Keyboard_Handler (struct regs * r) {char scancode לא חתום = ND :: מקלדת :: GetChar (); אם (scancode! = 255) {ND :: Screen :: PutChar (scancode); stringBuffer [stringPos] = scancode; stringPos ++; }}
http://gist.github.com/634afddcb3e977ea202d
אנו יכולים לבדוק כיצד אנו קוראים לפונקציה הנקראת ND :: מקלדת :: GetChar. שם אנו משיגים את הדמות ואז אם לא מדובר בתו ריק (כאן השתמשתי ב- 255, היינו צריכים להשתמש במערכת טובה יותר) שמנו את הדמות על המסך ואחסנו אותה במאגר פשוט של תווים (זה גם רגישים לשיפור, המערכת הנוכחית עשויה לעלות על גדותיהם).
nsigned char ND :: מקלדת :: GetChar () {scancode char לא חתום; scancode = (char לא חתום) ND :: יציאות :: InputB (0x60); if (scancode & ND_KEYBOARD_KEY_RELEASE) {return 255; } אחר {return en_US [scancode]; }} char * ND :: מקלדת :: GetString () {while (stringBuffer [stringPos-1]! = '\ n') {} stringPos = 0; החזר stringBuffer; }
http://gist.github.com/2d4f13e0b1a281c66884
כאן אנו יכולים לראות כיצד מתקבל המקש שנלחץ עליו. ב- 0x60 תמיד יילחץ המקש האחרון. למעשה, ניתן לקרוא אותו ישירות מבלי שנצטרך להשתמש ב- IRQ, אך אז לא נדע לזהות מתי חל שינוי. שם אנו בודקים עם פעולת AND שהקוד שקיבלנו תואם למפתח ששוחרר.
במקרה כזה נחזיר 255 (כי נתעלם ממנה בהמשך) ואחרת נלחץ על המקש. במקרה כזה אנו מחזירים את המיקום של מערך שנקרא en_US. איזה מידע מערך זה מכיל? מערך זה הוא מה שהיינו מכנים מפת מפתח או מפת תווים. כידוע, בשפות שונות יש מקלדות שונות ואינן נתמכות מכיוון שהן מחליפות את המקשים. אז en_US ייתן לנו את המפתח המתאים לכל קוד והוא יעבוד על מקלדת אמריקאית.
לא חתום en_US [128] = {0,27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0 ',' - ',' = ',' \ b ',' \ t ',' q ',' w ',' e ',' r ',' t ',' y ',' u ',' i ',' o ',' p ',' [','] ',' \ n ', 0, / * Ctrl * /' a ',' s ',' d ',' f ',' g ', 'h', 'j', 'k', 'l', ';', '\' ',' ', 0, / * Shift Left * /' \\ ',' z ',' x ', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0, / * משמרת ימינה * / '*', 0, / * Alt * / '', 0, / * Caps lock * / 0,0,0,0,0,0,0,0,0,0, / * מקשי F1-F10 * / 0, / * נעילת מספר * / 0, / * נעילת גלילה * / 0, / * מקש בית * / 0, / * חץ למעלה * / 0, / * דף למעלה * / '-', 0, / * חץ שמאלה * / 0, 0, / * חץ ימינה * / '+', 0, / * מקש סיום * / 0, / * חץ למטה * / 0, / * דף למטה * / 0, / * הכנס מקש * / 0, / * מחק מקש * / 0,0,0, 0, 0, 11, / * מקשי F12-F0 * / XNUMX};
http://gist.github.com/bf52085aec05f3070b65
הייתה גם פונקציה מוגדרת שקיבלה ביטוי. המטרה היא פשוט לגשת ביתר קלות למיתרים מהיישומים הזקוקים לכך, כרגע רק אחד. אני מדבר על NextShellLite, גרסה מופחתת של המעטפת העתידית האפשרית שתהיה ל- NextDivel. מטרת NextShellLite היא רק לספק מעטפת מופחתת כדי לבדוק בהדרגה פונקציות חדשות. אני לא מתכוון להכניס את קוד הפגז לכאן אבל הכנסתי אותו לקוד NextDivel.
כרגע זה לא עובד כתוכנית נפרדת אלא כפונקציה שנקראת על ידי הליבה, בעיקר בגלל שעדיין לא הוספנו את האפשרות להריץ הפעלות. וכמובן, כמה תמונות של איך הקליפה עובדת עם פונקציות קלט המקלדת החדשות.
מורה מעולה! תודה 🙂
האמת היא שמעולם לא עקבתי אחר ההדרכה כי בחלק הראשון זה נתן לי שגיאה בניסיון לקמפל אבל אני לא זוכר איזו שגיאה זו הייתה
סליחה על בורותי הגסה ... מאיפה נכתבים הקודים האלה? מהטרמינל ??
הקודים הם חלק מקוד המקור. אני לא שם את זה שלם כי אחרת ההודעה כולה קוד ושום דבר הסבר. אני ממליץ לך לקרוא את ההדרכות מההתחלה אם אתה רוצה לעקוב אחריה. תוכלו גם לבדוק את קוד המקור המלא כאן (http://github.com/AdrianArroyoCalle/next-divel)
כיצד יהיה השיפור כך שלא תתרחש הצפה?
קאדי, האם בדקת כבר את קוד המאגר? שם נקבע הגודל המקסימלי, כמו גם פונקציות לשלוט בו, שם אתה יכול לעשות את השינוי בגודל או ליישם דרך סבירה לשחרר את המאגר כאשר הוא נהיה רווי
אני משאיר לך את הקישור לבדוק אותו https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp
שלום מעניין מאוד, האם אתה מתכוון להמשיך עם "הסדרה" הזו של חיקוי לינוס טורוולים?
אתה יכול להמליץ על ספר כלשהו, מידע כדי להיות מסוגל ליצור גרעין כזה?
ברכות!
היי. תודה על ההדרכה. בבקשה, האם אתה יכול להמליץ על ספר שעשית, שאינו "מערכות הפעלה" מאת טננבאום? תודה רבה מראש.
ברכות.