Retro UNIX 386 v2 iin kernel programlama/gelitirme notlar...
(Erdoan Tan).. Tarih srasna gre gnlk taslak notlar.
------------------------------------------------------------------------------
(Yaplm ve yaplacak ilemleri/deiiklikleri aklamak ve hatrlamak iin.)

benioku2.txt'den devam..
(O dosyann sonunda Retro UNIX v1.2, Kernel v0.2.2.1 tamamlanm oldu)

..burada yazdklarm Retro UNIX v1.2, Kernel v0.2.2.2'in gelitirme notlar.

11/06/2022'de....

1) 'keyboard.s' dosyas kontrol ve 'KB_INT_1' iinde ufak (short jmp) dzeltme.
2) 'kybdata.s' dosyasnda 'K8:' tablosunda PC-XT 286 BIOS'a gre ufak dzeltme.
3) 'sysdefs.s' dosyasnda NBUF (buffer) saysn 6'dan 16'ya kardm.

12/06/2022'de...

1) u6.s'de 'writei' iinde syswrite'i 0 character count ile arnca lpr (LPT)
   inode'u ise (LPT1) printer status ('lpr_stat' zerinden) dndrecek ekilde
   ufak deiiklik.
2) u6.s'de 'wlpr' prosedr LPT1'e istenen sayda karakterleri 'cpass'
   kullanarak yazyor. Kod MSDOS 3.3 bios'undaki printer driver (PRN$WRIT)
   kodundan deitirme.
3) u6.s'de 'lpr_stat' prosedr printer'n durumunu dndryor/veriyor.
   Kod MSDOS 3.3 bios'undaki printer driver (PRN$STAT) kodundan deitirme. 
4) u9.s'de IBM PC-AT BIOS v3 (PRT.ASM) kaynak kodundan (INT 17h kodundan)
   uyarlarma int17h prosedrn yazdm. Paralel porttan yazdma dk seviye
   (donanm dzeyi) kodu. Sadece LPT1 (378h) protuna gre basitletirdim.
   Bu kod write, status ve init ksmndan oluuyor. Printer initialization
   ksmn u7.s'de 'sysopen' ile altracak ekilde dzenledim.
   Hata dnnde yeniden denemeden nce bekleme sresi iin original PC-AT
   bios kodu yerine 1999 ylnda yazlm award bios kodundan, printer 
   kontrolnde kullanlan (refresh sresine balanm, 30 mikro saniye 
   temelinde dng says kullanlan) bekleme/geciktirme (delay) yntemini
   kullandm. (Tekrar says ve her br deneme iin bekleme sresi
   386 bios'una gre.)			
5) u7.s'de /dev/lpr iin 'ejec' ('lpr_init') initialization kodunu yazdm.
   'sysopen' ile '/dev/lpr' (inode 16) alnca )'iopen' iinden) 'ejec' 
   initialization kodu arlyor. 'iopen' iinde 'sysclose' iin herhangi
   bir ilem yaplmyor. Dier ayrntlar yukarda (4'deki) gibi.
6) 'sysdefs.s' iine olas printer hata kodlarn ekledim.
   Hata kodlar MSDOS 3.3'deki gibi, time_out, out of paper, io error, busy 	

7) Printerdan sayfa(lar) yazdrmak iin..
   'syswrite' u ekilde kullanlabilecek:

	sys	_write, ebx, ecx, edx
	
	ebx = 'sysopen' den dnteki file descriptor
	ecx = kullancnn (programn) yazdrma buffer'/tamponu
	edx = yazdrlacak karakter says (yazdrma ilemi, bo karakter de
	      yazdrlsa edx'deki say kadar karakter yaznca tamamlanacak).
	
	Yazdrma hatas olmazsa...
	Dnte: (cf=0)
		eax = yazdrlan karakter says
   	Yazdma hatas olursa...
	Dnte: (cf=1)
		eax = hata kodu ('sysdefs.s' iinde tanmlanm kodlardan)
		edx = yazdrlan karakter says (istenilenden az)

	syswrite sistem ars edx = 0 ile yaplrsa, eax'de printer status
	dner (IBM PC-AT ROMBIOS printer status flag AH'de, error code AL'de)

14/06/2022'de...

shell'de '>' ile baka bir ekrana (tty'ye) ynlendirme yapld zaman,
u9.s'deki putc' prosedrnn dalland 'write_tty' prosedrnn en son
'set_cpos' aamasnda aktif ekran sayfas kyaslamas yaparken 
(aktif ekran index -pseudo tty- numaras yazmann ynlendirildii ekrann
-pseudo tty'nin- index numarasndan kk olduu iin), 'cmp' ilemci komutu
sonucunda cf = 1 olarak dnyordu. Bu da 'putc' prosedrnn (u6.s'deki
'wtty_1' de) carry/hata ile dnmesi dolaysyla, ynlendirilmi ekranda 
'sleep' durumuna yol ayordu; ynlendirilmi ekran aktif ekran olmadka da
'sleep' durumundan klamyordu. 'putc'nin pseduo tty'ye yazdktan sonra
carry ile dnmesini, dne 'clc' koyarak nledim.

***
Retro UNIX 386 v1.2 (Kernel v0.2.2.2) deiiklik/dzeltme notlar sonu.
***	
						 