Linu Torvaldsin jäljitteleminen: luo oma käyttöjärjestelmäsi tyhjästä (VIII)

Palaamme opetusohjelmien sarjaan, kuinka luoda oma käyttöjärjestelmä. Oletan, että pidät tästä luvusta paljon, koska voimme vihdoin olla vuorovaikutuksessa käyttöjärjestelmän kanssa. Tänään luemme näppäimistön syötteen. Tätä varten järjestelmä on samanlainen kuin ajastimen. Meidän on joka tapauksessa käytettävä IRQ-arvoja, joten aloitamme samalla tavalla kuin ajastimella.

ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);

Näppäimistön käsittelijämme on kuitenkin jonkin verran monimutkaisempi, koska luemme avaimet ja talletamme ne puskuriin.

ulkoinen "C" mitätöi ND_Keyboard_Handler (struct regs * r) {allekirjoittamaton char scancode = ND :: Näppäimistö :: GetChar (); if (scancode! = 255) {ND :: Näyttö :: PutChar (scancode); stringBuffer [stringPos] = scancode; stringPos ++; }}

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

Voimme tarkistaa, miten kutsumme toimintoa nimeltä ND :: Näppäimistö :: GetChar. Sieltä saamme merkin ja sitten, jos se ei ole tyhjä merkki (tässä olen käyttänyt 255, meidän olisi käytettävä parempaa järjestelmää), laitamme merkin ruudulle ja tallennamme sen yksinkertaiseen merkkipuskuriin (tämä on myös parannetaan, nykyinen järjestelmä voi ylittyä).

nsigned char ND :: Näppäimistö :: GetChar () {unsigned char scancode; scancode = (allekirjoittamaton merkki) ND :: Portit :: InputB (0x60); if (scancode & ND_KEYBOARD_KEY_RELEASE) {palauta 255; } else {return en_US [scancode]; }} char * ND :: Näppäimistö :: GetString () {while (stringBuffer [stringPos-1]! = '\ n') {} stringPos = 0; palauta stringBuffer; }

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

Täältä voimme nähdä, kuinka painettu avain saadaan. Kohdassa 0x60 on aina viimeinen painettu näppäin. Itse asiassa se voidaan lukea suoraan tarvitsematta käyttää IRQ: ta, mutta silloin emme tiedä, miten tunnistaa muutos. Siellä tarkistamme AND-toiminnolla, että saamamme koodi vastaa vapautettua avainta.

Siinä tapauksessa palautamme 255 (koska sivuutamme sen myöhemmin) ja muuten näppäintä on painettu. Tällöin palautamme taulukon nimeltä en_US. Mitä tietoja tämä taulukko sisältää? Tätä taulukkoa kutsutaan avainkartaksi tai merkkikartaksi. Kuten tiedät, eri kielillä on eri näppäimistöt, eikä niitä tueta, koska ne korvaavat näppäimet. Joten en_US antaa meille koodia vastaavan avaimen ja se toimii amerikkalaisella näppäimistöllä.

allekirjoittamaton merkki 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, / * vasen vaihto * /' \\ ',' z ',' x ', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0, / * Oikea siirtymä * / '*', 0, / * Alt * / '', 0, / * Caps lock * / 0,0,0,0,0,0,0,0,0,0, / * F1-F10-näppäimet * / 0, / * Numerolukko * / 0, / * Vierityslukko * / 0, / * Kotinäppäin * / 0, / * Ylänuoli * / 0, / * Sivu ylös * / '-', 0, / * Vasen nuoli * / 0, 0, / * Oikea nuoli * / '+', 0, / * Lopetusnäppäin * / 0, / * Nuoli alas * / 0, / * Sivu alas * / 0, / * Lisää avain * / 0, / * Poista näppäin * / 0,0,0, 0, 0, 11, / * F12-F0-näppäimet * / XNUMX};

http://gist.github.com/bf52085aec05f3070b65

Siellä oli myös määritelty funktio, joka sai lauseen. Tarkoituksena on yksinkertaisesti helpommin käyttää merkkijonoja sitä tarvitsevista sovelluksista, tällä hetkellä vain yksi. Puhun NextShellLite-ohjelmasta, vähennetystä versiosta mahdollisesta tulevasta kuoresta, joka NextDivelillä olisi. NextShellLite-ohjelman tarkoituksena on vain tarjota supistettu kuori uusien toimintojen asteittaiseksi testaamiseksi. En aio laittaa shell-koodia tähän, mutta olen sisällyttänyt sen NextDivel-koodiin.

Tällä hetkellä se ei toimi erillisenä ohjelmana, vaan ytimen kutsumana funktiona lähinnä siksi, että emme ole vielä lisänneet mahdollisuutta suorittaa suoritettavia tiedostoja. Ja tietysti joitain kuvia siitä, kuinka kuori toimii uusien näppäimistön syöttötoimintojen kanssa.

SeuraavaShellLite


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   Daryo dijo

    erinomainen tutor! kiitos 🙂

  2.   Poparkki dijo

    Totuus on, että en koskaan seurannut opetusohjelmaa, koska ensimmäisessä osassa se antoi minulle virheen yrittäessäni kääntää, mutta en muista mitä virhe se oli

  3.   Lopezin kissa dijo

    Anteeksi raa'asta tietämättömyydestäni ... mistä nämä koodit kirjoitetaan? Terminaalista ??

    1.    AdrianArroyoKatu dijo

      Koodit ovat osa lähdekoodia. En laita sitä täydelliseksi, koska muuten viesti on kaikki koodi eikä mitään selitystä. Suosittelen, että luet oppaat alusta alkaen, jos haluat seurata niitä. Voit myös tarkistaa koko lähdekoodin täältä (http://github.com/AdrianArroyoCalle/next-divel)

  4.   Kady dijo

    Kuinka parannus olisi niin, ettei ylivuotoa tapahdu?

    1.    Plock dijo

      Kady, oletko tarkistanut arkistokoodin jo? Siellä on määritetty enimmäiskoko samoin kuin toiminnot sen hallitsemiseksi, voit muuttaa kokoa tai toteuttaa kohtuullisen tavan vapauttaa puskuri, kun se kyllästyy
      Jätän linkin tarkistettavaksi https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   Nico dijo

    Hei, erittäin mielenkiintoinen, jatkatko tätä Linus Torvalsin jäljittelemisen «sarjaa»?
    Voitteko suositella jotain kirjaa, tietoa tällaisen ytimen tekemiseksi?

    Terveisiä !!

  6.   Vastaukset Veganas.Org dijo

    Hei. Kiitos opetusohjelmasta. Voitteko suositella teidän tekemänne kirjaa, joka ei ole Tanenbaumin "käyttöjärjestelmät"? Kiitos paljon etukäteen.
    Tervehdys.