111 lines
3.3 KiB
Plaintext
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)
|