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

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

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

12/07/2022'de ...

*) Retro UNIX 386 v1.1'de IBM PC/AT (ve XT-286) ROM BIOS int13h disk
   fonksiyonlarn esas alan diskio proedrlerinde sadeletirme
   yaptm. Retro UNIX'de kullanlmayan fonksiyonlar ve fazla kodlar sildim.
   (diskio.s, diskdata.inc ve diskbss.inc dosyalarnda disket ve hard disk
   iin reset/read/write dndaki fonsiyonlarn silinmesiyle sadeletirme
   ve ksalma oldu ve disket prosedrlerinde bir adet bugfix oldu)
   Bu deiiklikleri versiyon 1.1 ve versiyon 1.0'da denedim. Hatasz olduunu
   dorulaynca versiyon 1.2'ye uyarladm.

16/07/2022'de .. (15/07/2022 akam balayarak)

*) u8.s'de karmak ve orijinal unix v1'deki buffer handling kalntlar
   tayan buffer handling (arabellek kullanm) kodunu zgn/original basit
   kodla deitirdim. Buffer header'daki buffer status ksmnda bit 0 valid
   buffer flag, bit 1 write/modified flag, bit 2 read flag dierleri
   kullanlmyor eklinde basitleti. Diske yazma veya okuma ileminden nce
   bo buffer (bit 0 = 0) aranyor, bulunuyorsa kaytlanyor, sektr zaten
   bir buffer'da kullanlmsa (status bit 0 = 1, device ve LBA ayn) o buffer
   ile devam ediliyor. Free (invalid) yok ise, en eski kullanlm (en son
   kullanlan buffer daima buffer pointer listesinin bana alnyor) buffer
   yeni sektre atanyor (status bit 0 = 0 yaplarak, geersizletiriyor).
   'wslot' status bit 1'i 1 yapyor; 'dskrd' status bit 2'yi 1 yapyor ama
   validation bit 0 olarak braklyor. Disk r/w ilemi baarl olursa,
   'poke' validation flag'n yani status bit 0'i 1 dier bitleri 0 yapyor.
   Bylece o bloklar/sektrler bufferlarda hazr tutulmu oluyor.
   (Okuma veya yazma hatas olursa ilgili buffer geersizletiriyor ki, 
   diskteki ierik ile buffer'daki ierik farkl olmasn. Kernelde mevcut
   haliyle 16 adet buffer (16*520 byte) tanml. u8.s'ye iine yeni buffer
   yntemi aklamalarn yazdm. ux.s'deki 1 byte'lk 'active' alann
   artk (u8.s'de) kullanlmad iin iptal ettim.		
   		
17/07/2022'de ...

*) diskio.s, u0.s, u1.s, u5.s, memory.s ve unix386.s iinde gereksiz 16 bit
   shift (shr, shl) kodlarn 32 bite dntrdm (baz gereksiz
   66h prefixlerini kernel kodundan karmak iin) ve diskio.s iindeki
   gereksiz 'xor ch, ch'yi iptal ettim.	

18/07/2022'de ...

*) diskio.s'de 'DMA_SETUP' da iyiletirme yaptm (sadece 512 byte/sector
   disketler tanml olduundan gereksiz ksm iptal edip, direkt 512 byte'a
   gre kodu ksalttm). u2.s'de 'maknod ve 'anyi' iinde 'wslot' la ilgili
   gereksiz pusp-pop'lar iptal ettim (ebp artk 'wslot' iinde deimiyor).

19/07/2022'de ...

*) Orijinal unix v1 kernel kodu da dahil olamak zere, u6.s'deki 'dskw'
   prosedrnde ('sioreg' iinde file ofset artrma dolaysyla) ve
   u8.de'ki 'bwrite' prosedrlerinde ('dioreg' iinde file offset artrma)
   dolaysyla 'dskwr' deki diske yazma ilemi error ile dnse (yazma
   gereklemese dahi, file offset deimi oluyordu. Oysa write (modified)
   sector buffer geersiz hale geliyordu ve bir sonraki yazmada file offset
   (veya disk block pointer) ayn adrese yeniden yazlmas gerekirken..
   (file offset yazma hatasnda dahi, 'dskwr'den nce gelen 'sioreg' ve
   'dioreg' prosedrleri iinde ilerletildii iin), bir sonraki sektre
   veya ayn sektr iinde yanl ofsete yazlabiliyordu. Kullanc program
   disk yazma hatasndan sonra ayn sektr tekrar yazmay deneyebilir
   veya dosya pointer'n baa almadan ve dosyay silmeden devam edebilir.
   Byle durumlarda dosya ve disk ieriinin (daha da) bozulmamas iin,
   diske yazma ('syswrite') ileminde, sadece disk sektrne yazma baaryla
   gerekleirse, file offset pointer (yazlan byte says kadar) ilerleyecek
   ekilde nemli dzeltmeler yaptm. u6.s'deki 'dskw' prosedrnde,
   'sioreg' prosedrnde ve 'sioreg' deitii iin 'dskr' prosedrnde
   u8.s'deki 'bwrite' ve dioreg' prosedrlerinde  ve 'dioreg' deitii iin
   'bread' prosedrnde deiiklik yaptm.

24/07/2022'de ...

*) keyboard.s iinde gereksiz int 16h kalntlarn temizledim, interrupt
   emlasyonu (pushfd, push cs, near call ve iret) yerine near call return
   ayarlar yaptm.

08/08/2022'de ...

*) 'diskinit.s' iinde ekleme ve dzeltme (TRDOS 386 v2.0.2 'diskinit.s'
   dosyas QEMU emulator programnda hard diskin tannmasn salayan ek
   kod ieriyor, 2020 yl kodu, o kodu Retro UNIX 386 v1 'diskinit.s' 
   dosyasna ekledim. (Daha nce eklemem iyi olurdu, unutmuum; TRDOS 386
   kernelinin 18/04/2021 tarihli 2.0.4 versiyonunda da eksik, en son
   17/03/2021 tarihli Kernrel v2.0.2'de kullanmm !?)		

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