Files
ornekler/cekirdek/asal-sayilar/asal_sayilar.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

85 lines
2.0 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/.
#
# Asal sayılar: çekirdek 2..1000 arasındaki asalları bulur, ekrana bir
# tablo olarak, seri porta da toplam olarak yazar.
VGA = 0xB8000
SERI = 0x3F8
fonksiyon seri_bayt(b):
iken bit_ve(port_oku8(SERI + 5), 0x20) == 0:
devam
port_yaz8(SERI, b)
fonksiyon seri_yaz(m):
i = 0
iken bayt(m, i) != 0:
seri_bayt(bayt(m, i))
i = i + 1
fonksiyon hucre(satir, sutun, karakter, renk):
bellek_yaz16(VGA + (satir * 80 + sutun) * 2, renk * 256 + karakter)
fonksiyon yaz(m, satir, sutun, renk):
i = 0
iken bayt(m, i) != 0:
hucre(satir, sutun + i, bayt(m, i), renk)
i = i + 1
fonksiyon basamak_sayisi(n):
b = 1
iken n >= 10:
n = n // 10
b = b + 1
don b
fonksiyon sayi(n, satir, sutun, renk):
# Sağa yaslı değil, soldan yazar; kaç basamak yazıldığını döner.
b = basamak_sayisi(n)
k = b - 1
iken k >= 0:
hucre(satir, sutun + k, 0x30 + n % 10, renk)
n = n // 10
k = k - 1
don b
fonksiyon seri_sayi(n):
eger n >= 10:
seri_sayi(n // 10)
seri_bayt(0x30 + n % 10)
fonksiyon asal_mi(n):
eger n < 2:
don yanlis
d = 2
iken d * d <= n:
eger n % d == 0:
don yanlis
d = d + 1
don dogru
dongu i icinde 0..80 * 25 - 1:
bellek_yaz16(VGA + i * 2, 0x0F20)
yaz("Asal sayilar (2..1000) -- KabaLang cekirdegi", 0, 2, 0x0E)
satir = 2
sutun = 2
adet = 0
dongu n icinde 2..1000:
eger asal_mi(n):
adet = adet + 1
sayi(n, satir, sutun, 0x0A)
sutun = sutun + 5
eger sutun > 74:
sutun = 2
satir = satir + 1
yaz("Toplam:", satir + 2, 2, 0x0F)
sayi(adet, satir + 2, 10, 0x0E)
seri_yaz("2..1000 arasinda asal sayi adedi: ")
seri_sayi(adet)
seri_bayt(10)
dur()