# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. # # Kesme altyapısı: IDT, 8259 PIC yeniden eşleme, 8253 PIT zamanlayıcı. # # Kesme girişleri önyükleme parçasında (calisma/yalin/boot.S); her giriş # yazmaçları saklayıp ana dosyadaki `kesme(vektor, kod)` işlevini çağırır. GIRIS_SAYISI = 48 KOD_SECICI = 0x08 KESME_KAPISI = 0x8E # var, halka 0, 64 bit kesme kapısı # IDT girdisi — x86-64 kesme kapısı tanımlayıcısı (16 bayt, paketli). yapi IdtGirisi: ofset_alt: u16 = 0 secici: u16 = 0 ist: u8 = 0 tur: u8 = 0 ofset_orta: u16 = 0 ofset_ust: u32 = 0 ayrilmis: u32 = 0 fonksiyon kapi_kur(v, adres): g = IdtGirisi.adreste(durum.IDT + v * IdtGirisi.boyut()) g.ofset_alt = bit_ve(adres, 0xFFFF) g.secici = KOD_SECICI g.ist = 0 g.tur = KESME_KAPISI g.ofset_orta = bit_ve(saga_kaydir(adres, 16), 0xFFFF) g.ofset_ust = saga_kaydir(adres, 32) g.ayrilmis = 0 fonksiyon tabloyu_kur(): dongu v icinde 0..GIRIS_SAYISI - 1: kapi_kur(v, kesme_girisi(v)) kesme_tablosu_yukle(durum.IDT, GIRIS_SAYISI * IdtGirisi.boyut()) fonksiyon pic_hazirla(): # Donanım kesmelerini 32–47'ye taşı (0–31 işlemci istisnalarına ait). port_yaz8(0x20, 0x11) port_yaz8(0xA0, 0x11) port_yaz8(0x21, 0x20) port_yaz8(0xA1, 0x28) port_yaz8(0x21, 0x04) port_yaz8(0xA1, 0x02) port_yaz8(0x21, 0x01) port_yaz8(0xA1, 0x01) port_yaz8(0x21, 0b11111100) # yalnız IRQ0 (zamanlayıcı) ve IRQ1 (klavye) port_yaz8(0xA1, 0xFF) fonksiyon zamanlayici_hazirla(hz): bolen = 1193182 // hz port_yaz8(0x43, 0x36) port_yaz8(0x40, bit_ve(bolen, 0xFF)) port_yaz8(0x40, bit_ve(saga_kaydir(bolen, 8), 0xFF)) fonksiyon bitti(v): # Kesme sonu bildirimi (EOI). eger v >= 40: port_yaz8(0xA0, 0x20) port_yaz8(0x20, 0x20)