Home  Articles  Programs 

GOS Tanıtım

GOS = C64'te Disk önbelleği + Geçici program alanı (TPA) komutları + Genişletilmiş BASIC + Mouse

Kendi işletim sistemini kendin yaz furyası zamanlarında ben de Commodore'u daha rahat kullanabilmek için bir şeyler yapmış, adını DOS ve GEOS'tan esinlenerek GOS koymuştum.

DOS ve CP/M gibi komutlar diskten yüklenip çalıştırılıyor. BASIC yorumlayıcı, eğer girilen komutu tanımıyorsa syntax error vermek yerine "COM.komutadı" şeklindeki kodu diskte arayıp $C000'a yükleyip çalıştırıyordu. Grafik ekran kullanımı kolaylığı ve mouse desteği vb. de sağladığından Graphical Operating System demekte sakınca görmemişim.

Diskten okuma hızı sorun olmasın diye bir de disk-cache yapmıştım. Kütüphaneden epey kitap taşıdığımı hatırlıyorum, modified LRU vb. hangi algoritmayı seçeyim diye epeyi deneme yanılma yapmıştım... Hem directory hem de sık kullanılan bloklar bellekte tutuluyordu. Sonra, cache'te olmayanları diskte bakınırken blokları tek tek yüklemek yerine bir track'i olduğu gibi yüklemenin toplamda daha hızlı olduğunu fark ettim. Bir track-buffer yapınca pratikte iki farklı cache'i olmuş oldu.

GOS, standart olarak mouse destekliyor. Basit animasyonlar göstermek için bir komutu var. BASIC içinden başka BASIC programını yükleyip çalıştırabiliyor. Bir BASIC programının değişkenlerini saklayıp aktarabiliyor. CLS, LOCATE, SCREEN vb. gibi standart eklentiler var ve sinüs karekök gibi bazı fonksiyonları çok daha hızlı işliyor. Bir ek bellek yöneticisi de yazmıştım, cache'e yarasın diye, ama onu bunda mı yoksa LUnix'te mi kullandım emin değilim şu an. En son sanırım diskten daha da hızlı okuma için veri sıkıştırma, Huffman encoding kullanmakla meşguldüm GOS'ta. Sonra ne olduysa terk etmişim. Sanırım Linux'a geçtiğim tarihlere denk geliyor.

İşte bu GOS çalışma diskimi, 19 yıl sonra daha yeni .D64 olarak aktardım.

Directory'den bir örnek şöyle:

dir
0 "calisma-1       " 0f 2a
109  "gos9510141937"    prg
4    "com.status"       prg
1    "com.mem"          prg
5    "com.scrch"        prg
1    "com.execute"      prg
1    "com.dummy"        prg
1    "com.trace"        prg
1    "com.swap"         prg
1    "com.putclr"       prg
1    "com.makehi"       prg
2    "com.makelow"      prg
2    "com.block"        prg
1    "com.fill"         prg
1    "com.reclr"        prg
4    "com.show"         prg
4    "com.picput"       prg
3    "com.movie"        prg
2    "com.style"        prg
1    "com.exec"         prg
1    "com.baspack"      prg
6    "ptc.baspack"      prg
1    "com.dump"         prg
1    "com.type"         prg
1    "com.cllearn"      prg
4    "com.clvar"        prg
4    "com.cltrain"      prg
3    "com.clcall"       prg
3    "com.clput"        prg
3    "com.cltake"       prg
1    "com.volume"       prg
1    "com.wave"         prg
1    "com.envelope"     prg
1    "com.oscillate"    prg
1    "com.setsid"       prg
1    "com.tune"         prg
1    "com.play"         prg
1    "com.filter"       prg
1    "com.italic"       prg
1    "com.pack"         prg
1    "com.key"          prg
1    "com.renum"        prg
1    "com.del"          prg
1    "com.cat"          prg
2    "com.shlscr"       prg
3    "com.fractal"      prg
3    "com.brott"        prg
1    "com.count"        prg
1    "com.scrcount"     prg
1    "com.dsp"          prg
1    "com.hear"         prg
1    "com.patch"        prg
1    "com.mkhi"         prg
1    "com.scrollup"     prg
1    "com.discard"      prg
2    "com.comptable"    prg
1    "&fasthead"        usr
2    "sys.config"       prg
9    "fnt.turcbig"      prg
9    "fnt.turcsmall"    prg
9    "fnt.capital80"    prg
9    "fnt.small80"      prg
6    "mv0.cube-1"       prg
25   "mv0.surface1"     prg
22   "mv0.lissajous"    prg
10   "mv0.cube&pyram."  prg
10   "mv0.cube&pyram"   prg
19   "gsb.edit-16"      prg
15   "gsb.menu-15"      prg
11   "gsb.disker"       prg
1    "gsb.testline"     prg
2    "gsb.datarate"     prg
19   "gsb.edit"         prg
1    "gsb.iterate"      prg
1    "gsb.numofite"     prg
3    "gsb.mandelrnd"    prg
4    "gsb.ratetest"     prg
5    "gsb.hashfunc1"    prg
2    "gsb.dynmap-1"     prg
2    "gsb.test"         prg
15   "gsb.menu"         prg
5    "gsb.parallel"     prg
4    "gsb.diskspeed"    prg
7    "gsb.numgraph"     prg
1    "mnu.root"         prg
...

Dosya adından anlaşıldığı üzere bu 14 Ekim 1995 saat 19:37 versiyonu!

Buradaki, COM'lar 49152'ye yüklenen kısa komut dosyaları, GSB'ler GOS BASIC, MV0'lar movie file versiyon 0, FNT'ler font vb. dosyaları.

Açılış mesajı ise şöyle:

status

current drive # :8 fastid :on fastopen :on cache size :22 blocks fastopen file size :36 files cache hit # :0 cache missed # :0 cache success : %0 cache compress ratio : 1 free system ram :5655 bytes max. free system ram : 5655 bytes ready.

rem 8320-8700 is cleaned rem there is a new code at 70e0 rem new load-block routine is : 3868 rem 3b00-4fff is readahead buffer

Diskteki ve RAM'daki çoğu komutun ne işe yaradığını, parametrelerini vs. anımsamıyorum. Umarım bir kenara yazmışımdır ve bu tatilde bulabilirim.

Kodları dokümante etmek ve kolay erişilir bir yere koymak şart şart... Fark ettim ki 19 yıl sonra kod anımsamaya çalışmak, bisiklete binmeye pek benzemiyor.

İlker Fıçıcılar
25.07.2014

Keywords: GOS, Commodore 64, İşletim Sistemi


C64 Projects Twitter Page

İlker Fıçıcılar's CBM Page