Network Working Group Karl C. Kelley Request for Comments: 387 Jaacov Meir NIC: 11359 8/10/72 Kategoriler: D.6, F Geçersiz Kıldığı: Referanslar: RFC #292
AĞ GRAFİK PROTOKOLÜ SEVİYE 0'IN UYGULANMASINDA BAZI DENEYİMLER
Birden fazla ana makinede NGP-0'ı uygulama sürecindeyiz. Şimdilik, uzak ana makineyi "son akıllı makine" olarak ele almak zorunda kalıyoruz. NGP-0'ı Computek ekranı için makineye bağımlı bir koda dönüştürmeye çalışıyoruz. Uzak ana makineler CCN, UCSD ve yakında RANDCSG'dir. Bu çalışmaya ilişkin daha fazla yorum sonraki RFC'lerde yapılacaktır. Bu RFC'nin ele aldığı konu iki yönlüdür:
- Koordinat sayı sistemini netleştirmek.
- Aşağıdakilerden herhangi birini yapmadan TEXTR dizgesinin nasıl gerçekleştirileceği üzerine düşünmek:
- a. Metin dizgesi çıktı verilirken mevcut konumu okuyup kaydetmek, ya da
- b. Her NGP komutu için ışın konumunu izleyip bu bilgiyi bir yerde saklamak.
Bu RFC'nin bir eki, NGP koordinat sisteminden PDP-10 üzerindeki kayan nokta aritmetiğine dönüşümü ana hatlarıyla açıklayacaktır.
Koordinat Verileri
NGP-0 belgesi (RFC 292), komut mutlak ya da göreli kipte olsun, koordinat verilerinin biçiminin aynı olduğunu açıkça belirtmemektedir. Söylenen tek şey, sol uçtaki bitin işaret biti olduğu iki'nin tümleyeni gösteriminde olduklarıdır. İki farklı iki'nin tümleyeni düzeni kullanmak mümkündür:
Sistem A Sistem B
(Mutlak Koordinatlar) (Göreli Koordinatlar)
-1 -2 -3 -16 0 -1 -2 -15
-2 2 2 ... ...2 -2 2 2 ... 2
+--+--+--+--+---------+--+--+ +--+--+--+--+---------+--+--+
| | | | | | | | | | | | | | | |
+--+--+--+--+---------+--+--+ +--+--+--+--+---------+--+--+
^ ^
.0111 ...............11 = +1/2-e 0.11 ..............11 = 1-e
.00 .................01 = +e 0.100 .............00 = 1/2
.00 .................0 = 0 0.00 ..............01 = e
.111 ................11 = -e 0.00 ..............00 = 0
.100 ................ = 1/2 1.11 ..............11 = -e
1.10 ..............00 = -1/2
1.00 ..............01 = -1+e = -(1-e)
1.00 ..............00 = -1
-16 -15
Nerede: e = 2 Nerede: e = 2
-16 -15
Aralık: -1/2 ile +1/2 - e Aralık: -1 ile +1 - e
Mutlak koordinat verilerinin -1/2 ile +1/2 - e aralığında olması gerekliliğinin, iki farklı sayı sisteminin kullanılması gerektiği şeklinde yorumlanabileceğini ileri sürüyorum. Bu doğrultuda düşünüldüğünde, Sistem A'nın avantajı, hiçbir zaman aralık dışında bir sayı verilmemesidir; bu da bazı denetim sorunlarını ortadan kaldırır. Ayrıca tam bir bit daha fazla hassasiyet sağlar.
Bununla birlikte, uğraşılması gereken iki sistemin olması konuyu gereksiz yere karmaşıklaştırır ve ek kodlama gerektirir. Bunun yerine yukarıdaki Sistem B'ye bağlı kalmak daha mantıklıdır. Kullanımındaki avantajlardan bazıları şunlardır:
- Tek bir sistem hem mutlak hem de göreli koordinatları ele alabilir.
- Bir mutlak koordinat aralığı aşarsa, işaret bitini zorla ayarlamak hoş bir sarmalanma (wrap-around) sağlar.
- Gösterim, çoğu makinede kayan nokta sayıların mantissası ile aynıdır. Ancak, normalize edilmiş kayan nokta sayıların mantissalarının mutlak koordinatlar için gereken aralıkta olmadığını unutmayın. Program, üs 0 olana kadar mantissayı kaydırmak zorunda kalacaktır.
NGP belgesinin iki sayı sisteminin gerekli olduğu şeklinde az sayıda kişi tarafından yorumlanmış olması mümkündür. Eğer durum buysa, o kadar iyi. Her halükârda, karşıt mantığın ezici gücüyle bu görüşten vazgeçirilene kadar, tüm uygulamalarımızda hem mutlak hem de göreli koordinatlar için yukarıdaki Sistem B'yi kullanacağız.
TEXTR Komutu
RFC 292'nin 4. sayfasındaki son paragraf şöyle demektedir: "...bir komut, çıktısı yalnızca geçerli komutun kendisinin ve komutun başlangıcındaki geçerli 'ışın konumu'nun bir fonksiyonu ise dahil edilmelidir. Başka bir deyişle, seviye 0 için yorumlayıcının 'kipler' ya da itmeli yığınlar için dahili bir depolamaya ihtiyacı yoktur."
Computek ekranı durumunda, NGP komutlarının çoğu aygıtın yeteneklerine karşılık gelmektedir. Tek istisna TEXTR komutudur. Dizge görüntülendikten sonra hangi ışın konumuna dönüleceğini bilmenin iki yolu vardır. Bir yol, dizge çıktısını yapmadan hemen önce ekrandan imleç konumunu okumaktır. Bu uygun değildir; çünkü aygıttan okuma gerektirir (giriş protokolleri uygulanana kadar bunu yapamayız). Ayrıca bu aygıtta imleç konumu yalnızca 4 osiloskop noktası hassasiyetinde doğrudur.
Işın konumuna nasıl dönüleceğini bilmenin ikinci yolu, ışının tüm hareketlerini yazılımda izlemektir. Bu nedenle, NGP-0'dan Computek'e çevirilerimizin uygulanmasında bir yazılımsal X yazmacı ve Y yazmacı kullanılacaktır. Mutlak komutlarda, yazmaçlar o komutun koordinatlarına ayarlanacaktır. Göreli komutlarda ise koordinat verileri yazmaçlara eklenecektir. Resmin başında ve sonunda bu yazmaçlar 0'a ayarlanacaktır.
TEXTR komutu da bu yazılımsal ışın yazmaçlarının değiştirilmesine neden olacaktır. Yani, dizgedeki her karakter için X yazmacı, ekranda gerçekte olanı yansıtacak şekilde artırılacaktır.
EK
NGP-0'dan PDP-10 Kayan Nokta
NGP-0, tüm veri sayılarını (X ve Y parametreleri) aşağıdaki biçimde bir kesirli sayı olarak ele alır (her sayı için 16 bit).
+--+--+--+--+--+--+-----------------+--+--+--+--+
| | | | | | | ... ... | | | | |
+--.--+--+--+--+--+-----------------+--+--+--+--+
Bit konumu 0 1 2 3 ...... 14 15
İkili noktanın bit 0 ile bit 1 arasında varsayıldığı kabul edilir. Bit 0 işaret bitidir ve tüm negatif sayılar iki'nin tümleyeni olarak gösterilir. PDP-10 makine kodunda kayan nokta kesirlerinin (mantissa kısmı) gösterimi yukarıdakine çok benzer (tek bir istisna vardır — -1 sayısı), bu nedenle dönüşüm basitçe iki işlemle elde edilebilir: taşıma ve yerine koyma.
Veri (X, Y) Dönüşümü
NGP (uç noktalar) Kayan Nokta (PDP-10)
(16 bit) (36 bit)
üs mantissa
1/2 0.1000 . . . . . .0 0 10000000 10 . . . . . .0
-1/2 1.1000 . . . . . .0 1 01111111 10 . . . . . .0
-1 1.00 . . . . . .0 1 01111101 10 . . . . . .0
Özel durum
1-e 0.11 . . . . . .1 0 10000000 1111 . . . . .1
NGP'den PDP-10 için Kayan Noktaya Çeviri
- İşaret bitini (en soldaki bit) işaret bitine taşı.
- Kesir kısmını (15 bit) mantissa kısmına taşı (sola yaslı; sağ tarafı sıfırlarla doldur).
- Üs kısmını (8 bit) aşağıdakilere göre doldur:
- a. Pozitif sayıysa:
exp = 10000000 = (80) hex - b. Negatif sayıysa:
exp = 01111111 = (7F) hex - c. Yalnızca tek bir sayıda istisna vardır:
- NGP'de -1 (negatif işaret ve kesir kısmı tamamen sıfır)
- Mantissa, -1/2 ile aynı olur
- Üs,
(82) hexdeğerinin bire tümleyeni olur =(7D) hex
- NGP'de -1 (negatif işaret ve kesir kısmı tamamen sıfır)
- a. Pozitif sayıysa:
NGP kesri için kullanılan bit sayısından (24 bite kadar) bağımsız olarak, dönüşüm yöntemleri aynı kalacaktır.
Bu RFC, çevrimiçi RFC arşivlerine girilmek üzere Alex McKenzie tarafından, eski adıyla BBN Corp. olan GTE'nin desteğiyle makine tarafından okunabilir biçime dönüştürülmüştür. (9/99).