Files
ornekler/cekirdek/minimal-kernel/kabuk.kbl
T
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

134 lines
4.9 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/.
#
# Basit komut satırı: satır düzenleme, yerleşik komutlar ve UTF-8 tamponu.
kullan "arayuz.kbl"
kullan "bellek.kbl"
AZAMI = 120
ISTEM_RENGI = 0x1E # mavi zemin, sarı yazı
YAZI_RENGI = 0x17 # mavi zemin, gri yazı
fonksiyon istem():
ekran.renk(ISTEM_RENGI)
ekran.yaz("kaba> ")
ekran.renk(YAZI_RENGI)
bellek_yaz64(durum.SATIR_UZUNLUK, 0)
fonksiyon uzunluk():
don bellek_oku64(durum.SATIR_UZUNLUK)
fonksiyon satir_metni():
# Komut satırı tamponundan metin (yığından ayrılır, iş bitince bırakılır).
don metin_oku(durum.KABUK_TAMPON, uzunluk())
fonksiyon komut_mu(satir, tr, ascii):
# Komutlar Türkçe yazımıyla ve ASCII karşılığıyla kabul edilir (yardım = yardim).
don satir == tr veya satir == ascii
fonksiyon yardim():
ekran.satir("Komutlar (Türkçe ya da ASCII yazılabilir):")
ekran.satir(" yardım bu liste")
ekran.satir(" panel sistem gösterge panelini çizer")
ekran.satir(" türkçe Türkçe karakter vitrini")
ekran.satir(" hakkında çekirdek bilgisi")
ekran.satir(" zaman açılıştan beri geçen süre")
ekran.satir(" yaz METİN metni ekrana yazar")
ekran.satir(" uzunluk METİN metnin harf sayısı (UTF-8)")
ekran.satir(" klavye tr|us klavye düzeni")
ekran.satir(" bellek bellek haritası ve sayfa ayırıcı")
ekran.satir(" ayır sayfa ayırıcıyı dener")
ekran.satir(" yığın yığın kullanımı")
ekran.satir(" temizle ekranı temizler")
ekran.satir(" kapat makineyi kapatır")
fonksiyon calistir():
eger uzunluk() == 0:
don 0
satir = satir_metni()
eger komut_mu(satir, "yardım", "yardim"):
yardim()
degilse eger satir == "panel":
arayuz.panel_ciz()
degilse eger komut_mu(satir, "türkçe", "turkce"):
arayuz.turkce_vitrin()
degilse eger komut_mu(satir, "hakkında", "hakkinda"):
ekran.satir("KabaLang mini çekirdek — KabaLang ile yazıldı, LLVM ile derlendi.")
ekran.satir("x86-64 uzun kip, 100 Hz zamanlayıcı, PS/2 klavye (Türkçe Q), VGA metin kipi.")
degilse eger satir == "zaman":
t = bellek_oku64(durum.TIK)
ekran.satir(f"Açılıştan beri: {t // 100}.{(t % 100) // 10} sn")
degilse eger satir == "temizle":
ekran.temizle(YAZI_RENGI)
degilse eger satir == "bellek":
bellek.haritayi_yaz()
degilse eger komut_mu(satir, "yığın", "yigin"):
ekran.satir(f"Yığın: {calisma_zamani.yigin_kullanilan()} bayt kullanılıyor")
degilse eger satir.ile_baslar("uzunluk "):
m = satir.parca(8, satir.uzunluk() - 8)
ekran.satir(f"\"{m}\": {m.uzunluk()} harf")
degilse eger satir == "klavye tr":
klavye.duzen(0)
ekran.satir("Klavye: Türkçe Q")
degilse eger satir == "klavye us":
klavye.duzen(1)
ekran.satir("Klavye: ABD")
degilse eger komut_mu(satir, "ayır", "ayir"):
a = bellek.sayfa_ayir()
b = bellek.sayfa_ayir()
ekran.yaz("ayrıldı: ")
ekran.onaltilik(a)
ekran.yaz(" ")
ekran.onaltilik(b)
ekran.karakter(0x0A)
bellek.sayfa_birak(a)
c = bellek.sayfa_ayir()
ekran.yaz("bırakılıp yeniden ayrılan: ")
ekran.onaltilik(c)
eger c == a:
ekran.satir(" (geri verilen sayfa yeniden kullanıldı)")
degilse:
ekran.karakter(0x0A)
degilse eger satir.ile_baslar("yaz "):
ekran.satir(satir.parca(4, satir.uzunluk() - 4))
degilse eger satir == "kapat":
ekran.satir("Kapatılıyor...")
seri.satir("kabuk: kapat")
port_yaz16(0x604, 0x2000)
degilse:
ekran.satir("Bilinmeyen komut: " + satir)
don 0
fonksiyon tampona_ekle(b):
bellek_yaz8(durum.KABUK_TAMPON + uzunluk(), b)
bellek_yaz64(durum.SATIR_UZUNLUK, uzunluk() + 1)
fonksiyon son_harfi_sil():
# UTF-8: devam baytlarını (10xxxxxx) ve baş baytı birlikte siler.
n = uzunluk()
iken n > 0 ve bit_ve(bellek_oku8(durum.KABUK_TAMPON + n - 1), 0xC0) == 0x80:
n = n - 1
eger n > 0:
n = n - 1
bellek_yaz64(durum.SATIR_UZUNLUK, n)
fonksiyon tus(cp):
# Klavyeden gelen bir kod noktasını işler; tampon UTF-8 tutar.
eger cp == 0x0A:
ekran.karakter(0x0A)
calistir()
istem()
degilse eger cp == 0x08:
eger uzunluk() > 0:
son_harfi_sil()
ekran.geri_sil()
degilse eger cp != 0 ve uzunluk() < AZAMI - 1:
eger cp < 0x80:
tampona_ekle(cp)
degilse:
tampona_ekle(bit_veya(0xC0, saga_kaydir(cp, 6)))
tampona_ekle(bit_veya(0x80, bit_ve(cp, 0x3F)))
ekran.kod_noktasi(cp)