Emulimi i Linus Torvalds: krijoni sistemin tuaj operativ nga e para (VIII)

Ne kthehemi te seria e udhëzimeve se si të krijojmë sistemin tonë operativ. Supozoj se do ju pëlqejë shumë ky kapitull sepse më në fund mund të bashkëveprojmë me sistemin tonë operativ. Sot do të lexojmë hyrjen e tastierës. Për këtë, skema është e ngjashme me atë të kohëmatësit. Ne gjithsesi duhet të përdorim IRQ kështu që do të fillojmë njësoj si me kohëmatësin.

ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);

Sidoqoftë, mbajtësi ynë i tastierës është disi më kompleks pasi që ne po lexojmë çelësat dhe po i depozitojmë në një tampon.

i jashtëm "C" i pavlefshëm ND_Keyboard_Handler (strukturat rregulluese * r) {skanuesi i shenjuar i char = ND :: Tastiera :: GetChar (); if (skankodi! = 255) {ND :: Ekrani :: PutChar (skanodi); stringBuffer [stringPos] = skan kod; stringPos ++; }}

http://gist.github.com/634afddcb3e977ea202d

Ne mund të kontrollojmë se si e quajmë një funksion të quajtur ND :: Tastierë :: GetChar. Atje marrim karakterin dhe pastaj nëse nuk është një karakter bosh (këtu kam përdorur 255, do të duhet të përdorim një sistem më të mirë) ne e vendosim karakterin në ekran dhe e ruajmë atë në një tampon të thjeshtë të karaktereve (kjo gjithashtu është subjekt i përmirësimit, sistemi aktual mund të vërshojë).

nsigned char ND :: Tastiera :: GetChar () {skanuesi i shenjave të pa nënshkruar; skanuesi = (karre e pa firmosur) ND :: Portet :: InputB (0x60); nëse (skanimi & ND_KEYBOARD_KEY_RELEASE) {kthimi 255; } other {kthimi en_US [skankodi]; }} char * ND :: Tastiera :: GetString () {while (stringBuffer [stringPos-1]! = '\ n') {} stringPos = 0; kthej stringBuffer; }

http://gist.github.com/2d4f13e0b1a281c66884

Këtu mund të shohim se si merret çelësi që është shtypur. Në 0x60 do të shtypet gjithmonë çelësi i fundit. Në fakt, ai mund të lexohet drejtpërdrejt pa pasur nevojë të përdoret IRQ, por atëherë nuk do të dimë se si të identifikojmë kur ka ndodhur një ndryshim. Aty ne kontrollojmë me operacionin AND se kodi që kemi marrë korrespondon me një çelës që është lëshuar.

Në atë rast ne kthejmë 255 (sepse do ta injorojmë më vonë) dhe përndryshe çelësi është shtypur. Në atë rast, ne e kthejmë pozicionin e një grupi të quajtur en_US. Çfarë informacioni përmban kjo grup? Kjo grup është ajo që ne do ta quajmë një hartë kyçe ose një hartë karakteri. Siç e dini, gjuhë të ndryshme kanë tastierë të ndryshme dhe nuk mbështeten pasi mbishkruajnë çelësat. Kështu që en_US do të na japë çelësin që korrespondon me secilin kod dhe do të funksionojë në një tastierë amerikane.

shenjë e nënshkruar 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, / * Left Shift * / '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0, / * Zhvendosja e djathtë * / '*', 0, / * Alt * / "", 0, / * Bllokimi i kapakëve * / 0,0,0,0,0,0,0,0,0,0, / * Çelësat F1-F10 * / 0, / * Num bllokimi * / 0, / * Kyçi i lëvizjes * / 0, / * Çelësi kryesor * / 0, / * Shigjeta lart * / 0, / * Faqja lart * / '-', 0, / * Shigjeta e majtë * / 0, 0, / * Shigjeta e djathtë * / '+', 0, / * Çelësi i përfundimit * / 0, / * Shigjeta poshtë * / 0, / * Faqja poshtë * / 0, / * Vendos butonin * / 0, / * Butonin e fshirjes * / 0,0,0, 0, 0, 11, / * Çelësat F12-F0 * / XNUMX};

http://gist.github.com/bf52085aec05f3070b65

Ekzistonte edhe një funksion i përcaktuar që mori një frazë. Qëllimi është thjesht për të hyrë më lehtë tek vargjet nga aplikacionet që kanë nevojë për të, për momentin vetëm një. Unë jam duke folur për NextShellLite, një version i reduktuar i predhës së mundshme të ardhshme që do të kishte NextDivel. Qëllimi i NextShellLite është vetëm të sigurojë një guaskë të reduktuar për të testuar gradualisht funksionalitetet e reja. Unë nuk do ta vendos kodin shell këtu por e kam përfshirë brenda kodit NextDivel.

Për momentin nuk funksionon si një program i veçantë por si një funksion i thirrur nga kerneli, kryesisht sepse ende nuk kemi shtuar opsionin për të ekzekutuar ekzekutues. Dhe sigurisht, disa fotografi se si funksionon guaska me funksionet e reja të hyrjes së tastierës.

NextShellLite


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   dario dijo

    mësues i shkëlqyeshëm! faleminderit

  2.   PopArch dijo

    E vërteta është se nuk e ndoqa kurrë tutorialin sepse në pjesën e parë më dha një gabim kur përpiqesha të përpiloja por nuk mbaj mend se çfarë gabimi ishte

  3.   Macja e Lopez dijo

    Na vjen keq për injorancën time të ashpër ... nga janë shkruar këto kode? Nga terminali ??

    1.    AdrianArroyoStreet dijo

      Kodet janë pjesë e kodit burimor. Unë nuk e vë atë të plotë, sepse përndryshe postimi është i gjithë kodi dhe asgjë shpjegim. Unë ju rekomandoj që të lexoni udhëzimet nga fillimi nëse doni ta ndiqni atë. Ju gjithashtu mund të kontrolloni kodin e plotë të burimit këtu (http://github.com/AdrianArroyoCalle/next-divel)

  4.   Kadi dijo

    Si do të ishte përmirësimi që të mos ndodhë tejmbushja?

    1.    Plock dijo

      Kady, e ke kontrolluar akoma kodin e depozitës? Aty është vendosur madhësia maksimale, si dhe funksionet për ta kontrolluar atë, atje ju mund të bëni ndryshimin në madhësi ose të zbatoni një mënyrë të arsyeshme për të liruar bufferin kur të ngopet
      Unë e lë lidhjen që ju ta kontrolloni https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   Nico dijo

    Përshëndetje shumë interesante, do të vazhdoni me këtë «seri» të Emulimit të Toruseve të Linusit?
    A mund të rekomandoni ndonjë libër, informacion për të qenë në gjendje të bëni një bërthamë si kjo?

    Përshëndetje!

  6.   PërgjigjetVeganas.Org dijo

    Pershendetje Faleminderit për udhëzimin. Ju lutemi, a mund të rekomandoni një libër për këtë që keni bërë që nuk është "Sisteme Operative" nga Tanenbaum? Faleminderit shume paraprakisht.
    Përshëndetje.