Files
semih c5468f5d0a Ç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.
2026-10-17 13:09:50 +03:00

111 lines
3.3 KiB
Plaintext

# 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)