Угледање на Линуса Торвалдса: креирајте свој оперативни систем од нуле (ВИИИ)

Враћамо се на серију водича о томе како створити сопствени оперативни систем. Претпостављам да ће вам се ово поглавље свидети јер коначно можемо да комуницирамо са нашим оперативним системом. Данас ћемо прочитати унос са тастатуре. Због тога је шема слична оној са тајмером. Ионако морамо користити ИРК-ове, па ћемо започети исто као код тајмера.

НД_ИРК_ИнсталлХандлер (1, & НД_Кеибоард_Хандлер);

Наш руковалац тастатуром је, међутим, нешто сложенији јер читамо тастере и депонујемо их у бафер.

ектерн "Ц" воид НД_Кеибоард_Хандлер (струцт регс * р) {унсигнед цхар сцанцоде = НД :: Кеибоард :: ГетЦхар (); иф (сцанцоде! = 255) {НД :: Сцреен :: ПутЦхар (сцанцоде); стрингБуффер [стрингПос] = код за скенирање; стрингПос ++; }}

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

Можемо провјерити како зовемо функцију која се зове НД :: Кеибоард :: ГетЦхар. Тамо добијамо знак и онда ако то није празан знак (овде сам користио 255, морали бисмо да користимо бољи систем) стављамо лик на екран и чувамо га у једноставном баферу знакова (ово је такође предмет побољшања, тренутни систем може се прелити).

нсигнед цхар НД :: Кеибоард :: ГетЦхар () {унсигнед цхар сцанцоде; сцанцоде = (непотписани знак) НД :: Портс :: ИнпутБ (0к60); иф (сцанцоде & НД_КЕИБОАРД_КЕИ_РЕЛЕАСЕ) {ретурн 255; } елсе {повратак ен_УС [сцанцоде]; }} цхар * НД :: Кеибоард :: ГетСтринг () {вхиле (стрингБуффер [стрингПос-1]! = '\ н') {} стрингПос = 0; ретурн стрингБуффер; }

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

Овде можемо видети како се добија тастер који је притиснут. На 0к60 увек ће бити притиснут последњи тастер. У ствари, може се читати директно без употребе ИРК-а, али тада нећемо знати како да идентификујемо када је дошло до промене. Тамо проверавамо операцијом АНД да ли код који смо добили одговара кључу који је објављен.

У том случају враћамо 255 (јер ћемо то касније игнорисати), а иначе је тастер притиснут. У том случају враћамо положај низа званог ен_УС. Које информације садржи овај низ? Овај низ бисмо назвали мапом тастера или мапом знакова. Као што ћете знати, различити језици имају различите тастатуре и нису подржани јер преписују тастере. Тако ће нам ен_УС дати кључ који одговара сваком коду и радиће на америчкој тастатури.

непотписани цхар ен_УС [128] = {0,27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0 ',' - ',' = ',' \ б ',' \ т ',' к ',' в ',' е ',' р ',' т ',' и ',' у ',' и ',' о ',' п ',' [','] ',' \ н ', 0, / * Цтрл * /' а ',' с ',' д ',' ф ',' г ', 'х', 'ј', 'к', 'л', ';', '\' ',' ``, 0, / * Лефт Схифт * / '\\', 'з', 'к', 'ц', 'в', 'б', 'н', 'м', ',', '.', '/', 0, / * Десни помак * / '*', 0, / * Алт * / '', 0, / * Цапс лоцк * / 0,0,0,0,0,0,0,0,0,0, / * Ф1-Ф10 тастери * / 0, / * Нум лоцк * / 0, / * Закључавање помицања * / 0, / * Тастер Почетна * / 0, / * Стрелица нагоре * / 0, / * Страница горе * / '-', 0, / * Стрелица улево * / 0, 0, / * Стрелица удесно * / '+', 0, / * Тастер за завршетак * / 0, / * Стрелица надоле * / 0, / * Страница надоле * / 0, / * Тастер за уметање * / 0, / * тастер за брисање * / 0,0,0, 0, 0, 11, / * тастери Ф12-Ф0 * / XNUMX};

http://gist.github.com/bf52085aec05f3070b65

Такође је постојала дефинисана функција која је добила фразу. Сврха је једноставно приступити стринговима из апликација којима је потребна, тренутно само једној. Говорим о НектСхеллЛите, смањеној верзији могуће будуће љуске коју би НектДивел имао. Сврха НектСхеллЛите-а је само да обезбеди смањену љуску ради постепеног тестирања нових карактеристика. Нећу овде стављати схелл код, али сам га уврстио у НектДивел код.

Тренутно не ради као засебан програм, већ као функција коју позива језгро, углавном зато што још увек нисмо додали опцију за покретање извршних датотека. И наравно, неколико слика како љуска ради са новим функцијама за унос тастатуре.

НектСхеллЛите


Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   дарио дијо

    одличан тутор! хвала 🙂

  2.   ПопАрцх дијо

    Истина је да никада нисам следио туторијал јер ми је у првом делу дао грешку приликом покушаја компајлирања, али не сећам се о којој грешци је реч

  3.   Лопезова мачка дијо

    Жао ми је због мог глупог незнања ... одакле су написани ови кодови? Са терминала ??

    1.    АдрианАрроиоСтреет дијо

      Кодови су део изворног кода. Не стављам га у потпуности, јер је у супротном пошта сав код и нема објашњења. Препоручујем вам да упутства прочитате од почетка ако желите да их пратите. Пун изворни код такође можете проверити овде (http://github.com/AdrianArroyoCalle/next-divel)

  4.   кади дијо

    Како би било побољшање да се не догоди преливање?

    1.    Плоцк дијо

      Кади, јеси ли већ проверио код спремишта? Тамо је утврђена максимална величина, као и функције за контролу, тамо можете извршити промену величине или применити разуман начин да ослободите бафер када постане засићен
      Остављам вам везу да бисте је проверили https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   Нико дијо

    Здраво врло занимљиво, да ли ћете наставити са овом «серијом» опонашања Линус Торвалс-а?
    Можете ли препоручити било коју књигу и информације како бисте могли да направите овакав кернел?

    Поздрав!

  6.   АнсверсВеганас.Орг дијо

    Здраво. Хвала на лекцији. Молим вас, можете ли препоручити књигу о овоме коју сте направили и која није „Оперативни системи“ компаније Таненбаум? Хвала вам пуно унапред.
    Поздрав.