חיקוי לינוס טורבלדס: צור מערכת הפעלה משלך מאפס (VIII)

אנו חוזרים לסדרת ההדרכות כיצד ליצור מערכת הפעלה משלנו. אני מניח שתאהב מאוד את הפרק הזה כי סוף סוף נוכל לקיים אינטראקציה עם מערכת ההפעלה שלנו. היום נקרא את קלט המקלדת. לשם כך התוכנית דומה לזו של הטיימר. עלינו להשתמש ב- 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.

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

NextShellLite


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   דריו דיג'ו

    מורה מעולה! תודה 🙂

  2.   פופ ארץ ' דיג'ו

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

  3.   החתול של לופז דיג'ו

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

    1.    אדריאן ארויו סטריט דיג'ו

      הקודים הם חלק מקוד המקור. אני לא שם את זה שלם כי אחרת ההודעה כולה קוד ושום דבר הסבר. אני ממליץ לך לקרוא את ההדרכות מההתחלה אם אתה רוצה לעקוב אחריה. תוכלו גם לבדוק את קוד המקור המלא כאן (http://github.com/AdrianArroyoCalle/next-divel)

  4.   Kady דיג'ו

    כיצד יהיה השיפור כך שלא תתרחש הצפה?

    1.    פלוק דיג'ו

      קאדי, האם בדקת כבר את קוד המאגר? שם נקבע הגודל המקסימלי, כמו גם פונקציות לשלוט בו, שם אתה יכול לעשות את השינוי בגודל או ליישם דרך סבירה לשחרר את המאגר כאשר הוא נהיה רווי
      אני משאיר לך את הקישור לבדוק אותו https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   ניקו דיג'ו

    שלום מעניין מאוד, האם אתה מתכוון להמשיך עם "הסדרה" הזו של חיקוי לינוס טורוולים?
    אתה יכול להמליץ ​​על ספר כלשהו, ​​מידע כדי להיות מסוגל ליצור גרעין כזה?

    ברכות!

  6.   תשובות Veganas. אורג דיג'ו

    היי. תודה על ההדרכה. בבקשה, האם אתה יכול להמליץ ​​על ספר שעשית, שאינו "מערכות הפעלה" מאת טננבאום? תודה רבה מראש.
    ברכות.