Hakkındaki en yeni makaleleri okuduğumda
DNA tabanlı bilgi işlem, Oldukça tatsız bir gerçekle yüzleşmek zorunda kaldım. Aynı zamanda bilgisayar bilimi alanında da uzmanlaşan bir genetikçi olmama rağmen, iki kavram arasında köprü kurmaya çalışıyordum; evrensel Turing makinesibilgi işlemin özü ve von Neumann mimarisi, çoğu modern CPU’nun temeli. Turing’in kitabında açıklanan makineyi taklit etmek için C++ kodu yazmıştım. 1936 kağıdıve örneğin bir kelimenin palindrom olup olmadığına karar vermek için kullanabilirdi. Ancak böyle bir makinenin -tek boyutlu teyp belleği ve aynı anda o teypteki yalnızca bir sembole bakabilme yeteneği- aritmetik mantık birimi gibi donanım özelliklerine sahip milyar transistörlü bir işlemci gibi nasıl davranabileceğini anlayamıyordum. (ALU), program sayacı ve talimat kaydı.
Eski ders kitaplarını taradım ve teorik bilgisayar bilimi ile ilgili çevrimiçi dersleri izledim, ancak bilgim ilerlemedi. Gerçek bir işlemci için yazılmış kodu çalıştırabilen fiziksel bir Turing makinesi yapmaya karar verdim.
Milyar transistörlü bir dev yerine, mütevazi 8-bit’i hedef alacağımı düşündüm.
6502 mikroişlemci. Bu efsanevi çip, gençliğimde kullandığım bilgisayarlara güç veriyordu. Ve son bir kanıt olarak, simüle edilmiş işlemcimin çalışması gerekecekti. Pac-Manözellikle oyunun Apple II bilgisayarı için yazılmış versiyonu.
Turing’in makalesinde, onun adını taşıyan makine, sonsuz belleğe sahip soyut bir kavramdır. Gerçekte sonsuz bellek mümkün değildir, ancak fiziksel Turing makineleri eldeki görev için yeterli bellekle oluşturulabilir. Bir Turing makinesinin donanım uygulaması, bir kural kitabı ve bir not defteri etrafında organize edilebilir. Aslında temel aritmetik işlemleri yaparken kafamızda bir kural kitabı kullanırız (örneğin 1’i ne zaman taşıyacağımızı bilmek gibi). Sayıları ve diğer sembolleri bu kuralları kullanarak manipüle ederek, örneğin uzun bölme işlemini adım adım gerçekleştiriyoruz. Yine de önemli farklılıklar var. Ana soruna dönmeden önce kenarda bir çizik hesabı yaparak iki boyutlu bir not defterinin her yerini dolaşabiliriz. Bir Turing makinesiyle, tek boyutlu bir not defterinde yalnızca sola veya sağa hareket edebilir, her seferinde bir simge okuyabilir veya yazabiliriz.
Benim için önemli bir keşif, 6502’nin dahili kayıtlarının tek boyutlu bir not defterinde dört sembol – 0, 1, _ (veya boşluk) ve $ kullanılarak sırayla çoğaltılabilmesiydi. 0 ve 1 sembolleri, 6502 kaydında yer alacak gerçek ikili verileri depolamak için kullanılır. $ sembolü, farklı yazmaçları tasvir etmek için kullanılır ve _ sembolü, üzerinde çalıştığımız hafızadaki bir noktaya geri dönmeyi kolaylaştıran bir işaretleyici görevi görür. Apple II’nin ana hafızası benzer bir şekilde taklit edilir.
Birkaç parmak arası terlik, birkaç NOT kapısı ve bir yukarı-aşağı sayacı dışında, PureTuring makinesi yalnızca RAM ve ROM yongaları kullanır; mantık yongaları yoktur. Bir Arduino kartı [bottom] ekran verilerini ayıklamak için RAM’i izler. James Provost
Bir CPU programlamak, yazmaçları manipüle etmek ve içeriklerini bir komut seti kullanarak ana belleğe ve ana bellekten aktarmakla ilgilidir. 6502’nin talimatlarını, kayıtlar üzerinde işleyen kural zincirleri olarak, sembol sembol taklit edebilirdim. Kurallar programlanabilir bir ROM’da saklanır, bir kuralın çıktısı bir sonraki kuralı dikte eder, not defterine ne yazılması gerektiğini (RAM çipi olarak uygulanır) ve bir sonraki sembolü mü yoksa bir öncekini mi okumamız gerektiğini belirtir. .
Makineme PureTuring adını verdim. ROM’un veri çıkışları parmak arası terlik setine bağlanır. Parmak arası terliklerden bazıları, sonraki veya önceki sembolün getirilmesine izin vermek için RAM’e bağlanır. Diğerleri, bir sonraki kuralı seçen bir geri besleme döngüsünde ROM’un kendi adres hatlarına bağlanır.
Bazı yazmaçların bitlerini ayrı 8 bitlik parçalar olarak bırakmak yerine serpiştirmenin daha verimli olduğu ortaya çıktı. 6502’nin talimat setini uygulamak için kural kitabının oluşturulması 9.000 kural gerektiriyordu. Bunlardan 2.500 tanesi, dizin kartlarına yazmak için eski usul bir yöntem kullanılarak oluşturuldu ve geri kalanı bir komut dosyası tarafından oluşturuldu. Bunu bir araya getirmek yaklaşık altı ay sürdü.
6502 kayıttan sadece bazıları programcılara açıktır. [green]; dahili, gizli kayıtları [purple] talimatları yürütmek için kullanılır. Her kaydın altında, kayıtların nasıl düzenlendiği ve PureTuring’in “kasetinde” bazen serpiştirildiği gösterilir.James Provost
Bir yazılım talimatını getirmek için PureTuring, program sayacı tarafından işaret edilen hafıza konumuna gelene kadar $ sembollerini yer işareti olarak kullanarak not defterinde adım adım ilerlemektedir. 6502 işlem kodları bir bayt uzunluğundadır, dolayısıyla sekizinci bit okunduğunda PureTuring 256 durumdan birindedir. Daha sonra PureTuring, talimat kaydına geri döner ve talimatı gerçekleştirmeye geçmeden önce işlem kodunu oraya yazar. Gerçek 6502 için bir ila altı döngüye karşılık, tek bir talimatın getirilmesi 3 milyona kadar PureTuring saat döngüsü alabilir!
6502, bellek eşlemeli bir giriş/çıkış sistemi kullanır. Bu, ekranlar gibi aygıtların ana bellekte bir yerde konumlar olarak temsil edildiği anlamına gelir. Not defterinin Apple II’nin grafik belleğine karşılık gelen kısmını izlemek için bir Arduino kullanarak, pikselleri çıkarabilir ve bunları ekli bir terminalde veya ekranda gösterebilirim. Apple II’nin piksel verileri karmaşık bir şemada düzenlendiğinden, bu, Arduino için bir “buz çözme” işlevi yazmayı gerektiriyordu. (
Steve Wozniak Apple II’yi etkinleştirmek için bu şemayı yarattı dijital çiplerle sahte bir analog renkli TV sinyali ve dinamik RAM’i güncel tutun.)
Bir klavyeden not defterine benzer bir şekilde girdi ekleyebilirdim, ama rahatsız etmedim çünkü gerçekten oynuyordum.
Pac-Man PureTuring’de olağanüstü bir sabır gerekirdi: Sadece bir kare değerindeki hareketi çizmek yaklaşık 60 saat sürdü. Pac-Man karakter ve peşindeki düşman hayaletleri. Makineyi süreklilik boyunca bir von Neumann mimarisine doğru hareket ettiren bir değişiklik, bir not defteri sembolüne rasgele erişime izin vermek için devre ekledi ve önceki tüm semboller arasında gezinmeyi gereksiz hale getirdi. Bu ayar, oyun karakterlerini kare başına yalnızca 20 saniyeye çekmek için gereken süreyi kısalttı!
İleriye dönük olarak, özellikler bir Turing makinesinden bir von Neumann mimarisine parça parça taşınarak tek tek eklenebilir: Veri yolunu bir defada bir yerine sekiz sembol okuyacak şekilde genişletin, not defterindeki kayıtları donanım kayıtları ile değiştirin, bir ALU ekleyin , ve benzeri.
Şimdi DNA tabanlı bilgi işlem üzerine makaleler ve makaleler okuduğumda, her bir öğeyi bir Turing makinesindeki bir şeye kadar izleyebilirim veya kavramsal bir bant boyunca kendi küçük zihinsel makinemi çalıştıran geleneksel bir mimariye doğru ilerleyebilirim!