Meniru Linus Torvalds: buat sistem operasi Anda sendiri dari awal (VIII)

Kami kembali ke seri tutorial tentang cara membuat sistem operasi kami sendiri. Saya rasa Anda akan sangat menyukai bab ini karena akhirnya kita dapat berinteraksi dengan sistem operasi kita. Hari ini kita akan membaca input keyboard. Untuk ini, skemanya mirip dengan timer. Kita harus tetap menggunakan IRQ jadi kita akan mulai sama seperti timer.

ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);

Penangan keyboard kami, bagaimanapun, agak lebih kompleks karena kami membaca kunci dan menyimpannya dalam buffer.

extern "C" void ND_Keyboard_Handler (struct regs * r) {unsigned char scancode = ND :: Keyboard :: GetChar (); if (scancode! = 255) {ND :: Screen :: PutChar (scancode); stringBuffer [stringPos] = kode pindai; stringPos ++; }}

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

Kita dapat memeriksa bagaimana kita memanggil fungsi yang disebut ND :: Keyboard :: GetChar. Di sana kami mendapatkan karakter dan kemudian jika itu bukan karakter kosong (di sini saya telah menggunakan 255, kami harus menggunakan sistem yang lebih baik) kami meletakkan karakter di layar dan menyimpannya dalam buffer sederhana karakter (ini juga tunduk pada perbaikan, sistem saat ini mungkin meluap).

nsigned char ND :: Keyboard :: GetChar () {unsigned char scancode; scancode = (unsigned char) ND :: Ports :: InputB (0x60); if (scancode & ND_KEYBOARD_KEY_RELEASE) {return 255; } lain {return en_US [scancode]; }} char * ND :: Keyboard :: GetString () {while (stringBuffer [stringPos-1]! = '\ n') {} stringPos = 0; return stringBuffer; }

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

Di sini kita bisa melihat bagaimana kunci yang telah ditekan diperoleh. Pada 0x60 akan selalu ada tombol terakhir yang ditekan. Faktanya, dapat dibaca secara langsung tanpa harus menggunakan IRQ, tetapi kemudian kita tidak akan tahu bagaimana mengidentifikasi ketika suatu perubahan telah terjadi. Di sana kami memeriksa dengan operasi AND bahwa kode yang kami peroleh sesuai dengan kunci yang telah dirilis.

Dalam hal ini kami mengembalikan 255 (karena kami akan mengabaikannya nanti) dan sebaliknya tombol telah ditekan. Dalam hal ini kami mengembalikan posisi array yang disebut en_US. Informasi apa yang terkandung dalam array ini? Array ini adalah apa yang kita sebut peta kunci atau peta karakter. Seperti yang Anda ketahui, bahasa yang berbeda memiliki keyboard yang berbeda dan tidak didukung saat mereka menimpa tombol. Jadi en_US akan memberi kita kunci yang sesuai dengan setiap kode dan itu akan berfungsi pada keyboard Amerika.

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, / * Shift Kiri * / '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0, / * Shift kanan * / '*', 0, / * Alt * / '', 0, / * Caps lock * / 0,0,0,0,0,0,0,0,0,0, / * Tombol F1-F10 * / 0, / * Num lock * / 0, / * Scroll lock * / 0, / * Home key * / 0, / * Panah atas * / 0, / * Page up * / '-', 0, / * Panah kiri * / 0, 0, / * Panah kanan * / '+', 0, / * Tombol putus * / 0, / * Panah bawah * / 0, / * Page down * / 0, / * Tombol sisipkan * / 0, / * Tombol hapus * / 0,0,0, 0, 0, 11, / * Tombol F12-F0 * / XNUMX};

http://gist.github.com/bf52085aec05f3070b65

Ada juga fungsi yang didefinisikan yang mendapat frase. Tujuannya hanya untuk lebih mudah mengakses string dari aplikasi yang membutuhkannya, pada saat ini hanya satu. Saya berbicara tentang NextShellLite, versi yang dikurangi dari kemungkinan shell masa depan yang akan dimiliki NextDivel. Tujuan NextShellLite hanya menyediakan shell yang dikurangi untuk menguji fungsionalitas baru secara bertahap. Saya tidak akan meletakkan kode shell di sini tetapi saya telah memasukkannya ke dalam kode NextDivel.

Saat ini ini tidak berfungsi sebagai program terpisah tetapi sebagai fungsi yang dipanggil oleh kernel, terutama karena kami belum menambahkan opsi untuk menjalankan executable. Dan tentu saja, beberapa gambaran tentang bagaimana shell bekerja dengan fungsi input keyboard yang baru.

BerikutnyaShellLite


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   dariyo dijo

    guru yang luar biasa! terima kasih 🙂

  2.   PopArch dijo

    Yang benar adalah saya tidak pernah mengikuti tutorial karena di bagian pertama itu memberi saya kesalahan ketika mencoba mengkompilasi tetapi saya tidak ingat kesalahan apa itu

  3.   Kucing Lopez dijo

    Maaf atas ketidaktahuan saya yang kasar ... dari mana kode-kode ini ditulis? Dari terminal ??

    1.    AdrianArroyoStreet dijo

      Kode-kode tersebut adalah bagian dari kode sumber. Saya tidak memasukkannya secara lengkap karena jika tidak postingan tersebut semua kode dan tidak ada penjelasan. Saya menyarankan Anda membaca tutorial dari awal jika Anda ingin mengikutinya. Anda juga dapat memeriksa kode sumber lengkap di sini (http://github.com/AdrianArroyoCalle/next-divel)

  4.   Kady dijo

    Bagaimana perbaikannya agar luapan tidak terjadi?

    1.    Plock dijo

      Kady, apakah kamu sudah mengecek kode repositori? Di sana ukuran maksimum ditetapkan, serta fungsi untuk mengontrolnya, di sana Anda dapat membuat perubahan ukuran atau menerapkan cara yang wajar untuk membebaskan buffer saat buffer sudah jenuh
      Saya meninggalkan tautan untuk Anda memeriksanya https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   Nico dijo

    Halo sangat menarik, apakah Anda akan melanjutkan dengan "rangkaian" Meniru Linus Torval ini?
    Dapatkah Anda merekomendasikan buku apa pun, informasi untuk membuat kernel seperti ini?

    Salam!

  6.   AnswersVeganas.Org dijo

    Hai. Terima kasih untuk tutorialnya. Tolong, bisakah Anda merekomendasikan buku tentang ini yang Anda buat yang bukan "Sistem Operasi" oleh Tanenbaum? Terima kasih banyak sebelumnya.
    Salam.