Çekirdek örnekleri: KabaLang Minimal Kernel (MPL-2.0) ve üç küçük çekirdek
KabaLang'ın --yalin kipiyle yazılmış, işletim sistemi olmadan açılan x86-64 çekirdeği: kesmeler, 100 Hz zamanlayıcı, Türkçe Q klavye, Türkçe karakterli VGA ekranı, bellek haritası, sayfa ayırıcı, kabuk. Ek örnekler: merhaba, asal sayılar, VGA renkleri.
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# 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/.
|
||||
#
|
||||
# KabaLang mini çekirdek — giriş noktası.
|
||||
#
|
||||
# Derle: kabalang derle --yalin ana.kbl -o cekirdek.elf
|
||||
# Çalıştır: qemu-system-x86_64 -kernel cekirdek.elf -serial stdio
|
||||
|
||||
kullan "durum.kbl"
|
||||
kullan "seri.kbl"
|
||||
kullan "ekran.kbl"
|
||||
kullan "kesme.kbl"
|
||||
kullan "klavye.kbl"
|
||||
kullan "bellek.kbl"
|
||||
kullan "kabuk.kbl"
|
||||
kullan "arayuz.kbl"
|
||||
|
||||
KESME_ZAMANLAYICI = 32
|
||||
KESME_KLAVYE = 33
|
||||
|
||||
TUS_F1 = 0x3B
|
||||
TUS_F2 = 0x3C
|
||||
TUS_F3 = 0x3D
|
||||
TUS_F4 = 0x3E
|
||||
TUS_F5 = 0x3F
|
||||
TUS_F10 = 0x44
|
||||
|
||||
fonksiyon kesme(vektor, kod):
|
||||
eger vektor < 32:
|
||||
ekran.renk(0x4F)
|
||||
ekran.yaz(" ISTISNA ")
|
||||
ekran.sayi(vektor)
|
||||
ekran.yaz(" hata kodu ")
|
||||
ekran.sayi(kod)
|
||||
seri.satir("cekirdek: islemci istisnasi")
|
||||
dur()
|
||||
eger vektor == KESME_ZAMANLAYICI:
|
||||
bellek_yaz64(durum.TIK, bellek_oku64(durum.TIK) + 1)
|
||||
eger vektor == KESME_KLAVYE:
|
||||
klavye.kesmede_al()
|
||||
kesme.bitti(vektor)
|
||||
|
||||
# ── Kurulum ──────────────────────────────────────────────────────────────
|
||||
bellek_yaz64(durum.TIK, 0)
|
||||
bellek_yaz64(durum.KB_YAZ, 0)
|
||||
bellek_yaz64(durum.KB_OKU, 0)
|
||||
bellek_yaz64(durum.KB_SHIFT, 0)
|
||||
bellek_yaz64(durum.KB_DUZEN, 0)
|
||||
|
||||
seri.hazirla()
|
||||
seri.satir("KabaLang mini cekirdek basliyor")
|
||||
|
||||
# Donanımsal Türkçe Yazı Tipi Kurulumu (VGA Plane 2)
|
||||
ekran.turkce_font_kur()
|
||||
seri.satir("turkce font kuruldu")
|
||||
|
||||
bellek.hazirla()
|
||||
seri.satir("bellek haritasi okundu")
|
||||
|
||||
# Yığın: 256 sayfa (1 MB); metin işlemleri (birleştirme, f-string…) buradan ayırır.
|
||||
YIGIN_SAYFA = 256
|
||||
calisma_zamani.yigin_kur(bellek.bolge_ayir(YIGIN_SAYFA), YIGIN_SAYFA * bellek.SAYFA)
|
||||
|
||||
# Ön arayüz: bellek haritası ve yığın hazır olduktan sonra (f-string yığından ayırır).
|
||||
arayuz.panel_ciz()
|
||||
seri.satir("on arayuz cizildi")
|
||||
|
||||
kesme.tabloyu_kur()
|
||||
kesme.pic_hazirla()
|
||||
kesme.zamanlayici_hazirla(100)
|
||||
kesmeleri_ac()
|
||||
seri.satir("kesmeler acik")
|
||||
|
||||
kabuk.istem()
|
||||
|
||||
# ── Ana döngü: kesme gelene dek uyu, gelen tuşları kabuğa ver ─────────────
|
||||
iken dogru:
|
||||
kesme_bekle()
|
||||
iken klavye.bekleyen_var_mi():
|
||||
ham = klavye.kod_al() # bit 7 = shift
|
||||
kod = klavye.tarama_kodu(ham)
|
||||
eger kod == TUS_F1:
|
||||
arayuz.panel_ciz()
|
||||
kabuk.istem()
|
||||
degilse eger kod == TUS_F2:
|
||||
t = bellek_oku64(durum.TIK)
|
||||
ekran.yaz("Acilistan beri: ")
|
||||
ekran.sayi(t // 100)
|
||||
ekran.yaz(".")
|
||||
ekran.sayi((t % 100) // 10)
|
||||
ekran.satir(" sn")
|
||||
kabuk.istem()
|
||||
degilse eger kod == TUS_F3:
|
||||
bellek.haritayi_yaz()
|
||||
kabuk.istem()
|
||||
degilse eger kod == TUS_F4:
|
||||
arayuz.turkce_vitrin()
|
||||
kabuk.istem()
|
||||
degilse eger kod == TUS_F5:
|
||||
arayuz.panel_ciz()
|
||||
kabuk.istem()
|
||||
degilse eger kod == TUS_F10:
|
||||
ekran.satir("Kapatılıyor...")
|
||||
seri.satir("kabuk: kapat")
|
||||
port_yaz16(0x604, 0x2000)
|
||||
degilse:
|
||||
c = klavye.karakter(ham)
|
||||
eger c != 0:
|
||||
kabuk.tus(c)
|
||||
Reference in New Issue
Block a user