Sibuyela ochungechungeni lwezifundo zokuthi singalwenza kanjani uhlelo lwethu lokusebenza. Ngicabanga ukuthi uzosithanda kakhulu lesi sahluko ngoba ekugcineni singaxhumana nesistimu yethu yokusebenza. Namuhla sizofunda okokufaka kwekhibhodi. Ngalokhu, uhlelo luyefana nolwesikhathi. Kufanele sisebenzise ama-IRQ noma kunjalo ukuze siqale ngokufana nesibali sikhathi.
ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);
Isiphathi sethu sekhibhodi, noma kunjalo, siyinkimbinkimbi ngokwengeziwe ngoba sifunda okhiye futhi sibabeka kubhafa.
i-extern "C" ayikho i-ND_Keyboard_Handler (i-regs * r) {unsigned char scancode = ND :: Ikhibhodi :: GetChar (); uma (scancode! = 255) {ND :: Screen :: PutChar (scancode); umucuBuffer [stringPos] = i-scancode; umucuPos ++; }}
http://gist.github.com/634afddcb3e977ea202d
Singabheka ukuthi siwubiza kanjani umsebenzi obizwa nge-ND :: Keyboard :: GetChar. Lapho sithola umlingiswa bese kuthi uma kungeyena umlingiswa ongenalutho (lapha ngisebenzise ama-255, kuzofanele sisebenzise uhlelo olungcono) sibeka umlingisi esikrinini bese sikugcina kubhafa elula yezingoma (lokhu futhi kuyisihloko ukwenza ngcono, uhlelo lwamanje lungachichima).
I-charged char ND :: Ikhibhodi :: :: GetChar () {unsigned char scancode; scancode = (unsigned char) ND :: Amachweba :: InputB (0x60); uma (i-scancode & ND_KEYBOARD_KEY_RELEASE) {buyela ku-255; } okunye {return en_US [scancode]; }} char * ND :: Keyboard :: GetString () {ngenkathi (stringBuffer [stringPos-1]! = '\ n') {} stringPos = 0; intambo yokubuyisaBuffer; }
http://gist.github.com/2d4f13e0b1a281c66884
Lapha singabona ukuthi ukhiye ocindezelweyo utholakala kanjani. Ku-0x60 kuyohlale kunenkinobho yokugcina ecindezelwe. Eqinisweni, ingafundwa ngqo ngaphandle kokusebenzisa i-IRQ, kepha lapho-ke ngeke sazi ukuthi singabona kanjani uma ushintsho lwenzekile. Lapho sibheka ukusebenza KANYE nokuthi ikhodi esiyitholile ifana nokhiye okhishiwe.
Kuleso simo sibuyisa ama-255 (ngoba sizokuziba ngokuhamba kwesikhathi) bese kungenjalo ukhiye ucindezelwe. Uma kunjalo sibuyisa isikhundla samalungu afanayo abizwa nge- en_US. Yiluphi ulwazi lolu luhlu oluqukethe? Leli hlu yilokho esingakubiza ngokuthi imephu yokhiye noma imephu yezinhlamvu. Njengoba wazi, izilimi ezahlukahlukene zinamakhibhodi ahlukile futhi azisekelwa njengoba zibhala ngaphezulu okhiye. Ngakho-ke i-en_US izosinika ukhiye ohambelana nekhodi ngayinye futhi izosebenza kukhibhodi yaseMelika.
unsigned char 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, / * Kwesokunxele Shift * / '\\', 'z', 'x' , 'c', 'v', 'b', 'n', 'm', ',', ',', '/', 0, / * Right shift * / '*', 0, / * Alt * / '', 0, / * Ofeleba abakhulu * / 0,0,0,0,0,0,0,0,0,0, / * F1-F10 okhiye * / 0, / * Num lock * / 0 , / * Skrolela ukukhiya * / 0, / * Ukhiye wasekhaya * / 0, / * Umcibisholo ophezulu * / 0, / * Ikhasi phezulu * / '-', 0, / * Umcibisholo wesobunxele * / 0, 0, / * Kwesokudla umcibisholo * / '+', 0, / * Inkinobho yokuphela * / 0, / * Umcibisholo waphansi * / 0, / * Ikhasi phansi * / 0, / * Faka ukhiye * / 0, / * Susa ukhiye * / 0,0,0 , 0, 0, 11, / * F12-F0 Okhiye * / XNUMX};
http://gist.github.com/bf52085aec05f3070b65
Kwakukhona nomsebenzi ochaziwe othole ibinzana. Inhloso ukumane ukufinyelela kalula izintambo kusuka kuzinhlelo zokusebenza ezizidingayo, okwamanje eyodwa kuphela. Ngikhuluma nge-NextShellLite, inguqulo encishisiwe yegobolondo elizayo elizayo i-NextDivel engaba nalo. Inhloso ye-NextShellLite ukuhlinzeka kuphela ngegobolondo elincishisiwe lokuhlola kancane ukusebenza okusha. Ngeke ngibeke ikhodi yeShell lapha kepha ngiyifakile ngaphakathi kwekhodi ye-NextDivel.
Okwamanje ayisebenzi njengohlelo oluhlukile kepha njengomsebenzi obizwa yi-kernel, ikakhulukazi ngoba asikangezi inketho yokuqalisa okuphumelelayo. Futhi-ke, ezinye izithombe zendlela igobolondo elisebenza ngayo nemisebenzi yokufaka yekhibhodi entsha.