1 puan yazan GN⁺ 2024-09-21 | 2 yorum | WhatsApp'ta paylaş
  • Yalnızca 1971 tarihli 4 bit Intel 4004’ün CPU olarak kullanıldığı gerçek bir kartta Debian Linux başlatılarak, eski mikroişlemci sınırları ile yazılım katmanlamasının uç bir örneği gösteriliyor
  • Linux 4004 üzerinde doğrudan çalışmıyor; 4004 assembly ile yazılmış bir MIPS R3000/DECstation 2100 emülatörü üzerinde başlatılıyor, disk ve konsolun bir kısmı ise hypercall’lar ve yarı sanallaştırma sürücüleriyle basitleştiriliyor
  • 4 KB ROM sınırı, 4 bit işlemler, mantıksal işlemlerin olmaması, sığ çağrı yığını ve 4002 RAM’in kendine özgü adreslemesi nedeniyle ROM banking, lookup table, status nibble, PSRAM tabanlı sanal RAM gibi dolambaçlı çözümler gerekti
  • Optimizasyondan sonra gerçek 4004’ün 740 KHz hızında Linux başlatma için tahmini süre 4,76 gün; üretilen kart 790 KHz’e overclock edilerek sanal MIPS’in yaklaşık 74,73 Hz’de çalışması sağlanıyor
  • Ortaya çıkan ürün duvara asılabilen bir retro sanat kartı olarak tasarlandı; 40x2 VFD, 32 PC LED’i, SD kart, SPI PSRAM ve UART içeriyor; kaynak kodu ve disk imajları ticari olmayan kullanım koşuluyla yayımlandı

Gerçek 4004 üzerinde Debian Linux başlatma

  • Linux/4004, 1971 tarihli Intel 4004’ü tek CPU olarak kullanan gerçek bir kartta Debian Linux başlatan bir projedir
  • 4004, dünyanın ticari olarak üretilen ilk mikroişlemcisi olarak tanıtılır; projede 1970’lerden kalma gerçek Intel 4004 çipleri kullanıldı
  • Demo videosunda sıkıcılığı azaltmak için bölümlere göre değişken hızlandırma uygulanmış; ekrandaki saat ve takvim doğru
  • Sabit hızda oynatılan, ham video niteliğinde ayrı bir kayıt da sunuluyor

Neden 4004?

  • 2012’de 8 bit AVR mikrodenetleyici üzerinde Linux çalıştırılarak “Linux’u en düşük donanım özelliklerinde çalıştırma” rekoru kırılmış, ardından daha pratik LinuxCard projesi de yürütülmüştü
  • 2023’te AVR tabanlı rekoru yenileme girişimi ve MOS 6510 üzerinde Linux başlatan bir proje ortaya çıkınca hedef daha düşük seviyeli CPU’lara yöneldi
  • Aday Intel 8080 ve 8008’den daha da geriye gitmek için 1971 tarihli Intel 4004 seçildi
  • 4004, 4 bit bir çip olduğu için 8 bit CPU’lardan daha düşük bir eşiği net biçimde ortaya koyabiliyor

Intel 4004’ün kısıtları

  • 4004, 4 bit birimler halinde çalışır; komutların çoğu 1 bayttır ve 8 saat çevriminde yürütülür
    • Bazı 2 bayt komutlar 16 çevrim gerektirir
    • FIN, 1 baytlık bir komut olmasına rağmen 16 çevrim süren bir istisnadır
  • Komut kümesinde AND, OR, XOR gibi mantıksal işlemler yoktur; temelde ADD ve SUB ağırlıklıdır
  • carry flag, SUB girişinde borrow gibi, SUB sonrasında ise not borrow gibi davranan kendine özgü bir yapıya sahiptir; bu gerçek donanımda doğrulandı
  • İç register’lar 16 adet 4 bit register’dan oluşur, PC 12 bittir ve donanımsal return stack 4 seviyelidir
    • Mevcut en üst stack girdisi PC olarak kullanıldığı için gerçek fonksiyon iç içe geçme derinliği en fazla 3 seviyedir
  • Interrupt yoktur; TEST pin’ini koşullu dallanmada polling ile izlemek, dış olayları işlemeye en yakın yöntemdir

Bellek ve I/O yapısı

  • 4004, bellek komutlarını doğrudan kendisi işlemez; veri yoluna bağlı 4001/4002/4289/4265/4308 gibi çipler komutları decode edip yürütür
  • 4001, 256 bayt mask ROM ve 4 bit I/O portu bulunan bir ROM çipidir; ROM içeriği ve I/O port yapılandırması üretim sırasında sabitlenir
  • 4002, 320 bit DRAM, refresh devresi ve yalnızca çıkış amaçlı 4 bit porta sahip bir RAM çipidir
    • Bir RAM bank’i 4 adet 4002’den oluşabilir
    • Her RAM bank’inde doğrudan adreslenebilen 256 nibble ve ayrı erişilen 64 status nibble bulunur
  • 4289, 4008 ve 4009’un işlevlerini birleştiren bir ROM controller’dır; 4004’ün 5 V EEPROM/EPROM ile görece kolay bağlanmasını sağlar
  • Bellek erişimi için bank seçimi, adresin register çiftine yüklenmesi, SRC ile adresin veri yoluna aktarılması, RDM/WRM yürütülmesi gibi çok aşamalı bir prosedür gerekir
    • status nibble, sık kullanılan verilere hızlı erişimde işe yaradı ve MIPS emülatörünün hızını yaklaşık %30 artırmaya katkı sağladı

Geliştirme kartı ve emülatör hazırlığı

  • İlk doğrulama amaçlı geliştirme kartı; 4201 clock generator, 4004 CPU, 4002-1 RAM, 4289 ROM controller ve ROM rolündeki ATMEGA48’den oluşuyordu
  • Güç 5 V’tan başlatıldı; izole 5 V-10 V boost converter’ın pozitif ucu toprağa bağlanarak -10 V güç üretildi ve MCS-04 çiplerine verildi
  • İlk 4004 programı, 4002 output pin 0’a bağlı LED’i yanıp söndüren koddı; akım sınırı artırıldıktan sonra çalıştı
  • Gerçek kartı yapmadan önce u4004 adlı bir 4004 emülatörü yazıldı
    • Yalnızca 4004 çekirdeğini değil; sanal SD kartı, SPI UART’ı, VFD’yi, 4002 yerleşimini ve PC LED’lerini de emüle eder
    • Gerçek donanımda debug edilmesi zor olan SPI pin durumlarını ve çevre birimi davranışlarını önce doğrulamak için kullanıldı

Linux’u doğrudan çalıştırmak yerine MIPS emülasyonu

  • Linux 4004 üzerinde doğrudan çalıştırılamaz
    • 4004 hedefli bir C derleyicisi yoktur ve mimari kısıtlar nedeniyle Linux kernel’ini doğrudan taşımak zor görülmüştür
    • Çağrı iç içe geçmesi, ROM/RAM adres alanı ve 4 bit işlem sınırları doğrudan çalıştırmayı engeller
  • Bunun yerine 4004 üzerinde bir MIPS R3000 emülatörü yazıldı ve onun üzerinde DECstation 2100 için Linux başlatıldı
  • MIPS, diğer adaylara kıyasla 4004 kod alanı içinde emüle edilmesi daha kolay olduğu için seçildi
    • ARM’de çok sayıda keyfi shift operand’ı vardır
    • RISC-V’nin adresleme biçimi nedeniyle yavaş olacağı değerlendirildi
    • x86’da yalnızca komut decode işlemi bile 4 KB’ı aşabilir
    • PPC fazla karmaşıktır
  • İlk hedef, emülatörün tamamını 4004’ün varsayılan olarak adresleyebildiği 4 KB ROM içine sığdırmaktı

MIPS emülatörü uygulamasındaki dolambaçlı çözümler

  • Yalnızca MIPS komut decode işlemi bile kayda değer ROM alanı tüketir
    • 64 girdili top-level opcode dispatch table 128 bayt gerektirir
    • Ek sub-table’lar dahil edildiğinde ana decode için 359 bayt gerekti
  • MIPS’in 32 adet 32 bit register’ı 1024 bit, yani 4004 açısından 256 nibble’dır ve bir RAM bank’ini kaplar
  • MIPS TLB normalde 64 entry’ye sahiptir; ancak Linux tam olarak 64 entry istemediği için 16 entryye düşürüldü
    • TLB entry sayısı 4, 8, 12, 16 olacak şekilde yapılandırılabilecek biçimde tasarlandı
  • 4004’te mantıksal işlem olmadığı için AND/OR/XOR/NOR; toplama ve carry, shift ve döngülerle uygulandı
    • Daha sonra ROM alanı arttıktan sonra 256 entry’lik lookup table ile optimize edildi
  • shift de yalnızca 4004’ün 1 bit carry üzerinden döndürme komutlarıyla uygulanmak zorundaydı; sonrasında nibble düzeyinde kopyalama ve en fazla 3 bit shift ile iyileştirildi
  • MIPS’in $zero register’ının işlenmesinde, 4004’ün circular return stack özelliğinden yararlanılarak ROM alanından tasarruf edildi
    • Hedef $zero olduğunda return etmek yerine sonraki komut işlemeye geçilerek callsite başına 3 bayt ve 3 çevrim azaltıldı

ROM banking ve performans iyileştirme

  • Yalnızca 4 KB ROM ile SD kart, PSRAM, VFD, UART gibi bileşenleri yöneten kodları da sığdırmak mümkün olmadığından 8 KB ROM iki bank’e ayrılarak kullanıldı
  • ROM bank geçişi 4002 output pin ile kontrol edildi; bank’ler arası call/return için veneer’ler yerleştirildi
  • ROM alanı büyüdükten sonra performans optimizasyonu mümkün oldu
    • AND/OR/XOR işlemlerinin her biri 256 entry’lik lookup table ile uygulandı
    • nibble çarpma lookup table’ı kullanılarak multiplication, önceki bit düzeyi uygulamaya kıyasla 8 kat hızlandı
  • Mantıksal işlem lookup table’ı, 4004’ün JIN komutu ROM page’in sonunda olduğunda sonraki page’i temel alarak jump yapması özelliğinden yararlanır
  • multiplication table, FIN ile ROM’daki bayt verilerini okuma yöntemi ve 0 entry işleminden kaçınma yaklaşımı birleştirilerek uygulandı

Nihai donanım yapılandırması

  • Nihai kart, 1970'ler havasında through-hole ağırlıklı bir sanat kartı olarak tasarlandı
    • Kalın dik açılı trace'ler, via olmaması, duvara asma delikleri ve VFD ekran içeriyor
  • Başlıca bileşenler şunlar
    • 4004 veya 4040 CPU
    • 4201 clock generator
    • 4002 RAM yongaları
    • 4289 ROM controller
    • EEPROM
    • 1~2 adet SPI PSRAM
    • SD kart yuvası
    • SC16IS741A SPI UART
    • 40x2 VFD
    • 32 adet PC gösterge LED'i
  • SPI PSRAM, sanal MIPS RAM'i olarak kullanılıyor
    • İlk PSRAM'in kernel'i kesintisiz biçimde yüklemesi gerektiğinden en az 4MB olması gerekiyor
    • İkinci PSRAM boş bırakılabilir veya 128KB üzeri herhangi bir kapasitede takılabilir
  • VFD olarak Futaba M402SD10FJ kullanıldı; Noritake CU40025-UW6J'nin uyumlu olduğu bilgisi alındı
  • UART, through-hole SPI UART adayı olan MAX3100'ün akış denetimi kısıtları nedeniyle SC16IS741A yüzey montaj bileşeni olarak seçildi

Güç ve seviye dönüştürme

  • MCS-04 bileşenleri -15V serisinden alışılmadık gerilimler ve inverted logic kullanıyor
    • Sistem düzeyinde -10V ve +5V besleme olarak düşünmek daha basit
  • Kart, USB-C edge connector üzerinden +5V alıyor; ayrıca +3.3V ve -10V üretiyor
  • +3.3V step-down regulator, LM2574 tabanlı olarak yapılandırıldı
  • -10V güç beslemesi, ilk revision'daki MAX764 yeterli akım sağlayamadığı için MAX774, harici FET, büyük diode ve büyük inductor konfigürasyonuna değiştirildi
    • Son durumda -10V hattında 700mA üzeri sağlıyor ve ripple 200mV altında
  • 4002 output'unu 3.3V domain'e dönüştüren seviye dönüştürme zordu; 10K pulldown, 2.7K resistor, TVS clamp ve direnç bölücüyü birleştiren yöntemle çözüldü

Hata ayıklama araçları ve gerçek kusurlar

  • 4004'te yerleşik hata ayıklama özelliği olmadığı için MCS-04 bus, Saleae Logic ile uzun süre yakalandı
  • Bus state, ROM address, ROM read value, disassembly ve RAM/I/O read/write değerlerini analiz etmek için MCS-04 bus decoder yazıldı
    • Daha sonra Saleae'ye katkılandı ve genel Saleae software'e dahil edildi
  • Revision 1.1 kartında çıkış karakterlerinin nadiren bozulduğu bir sorun vardı
    • Örneğin inin h, Cnin B gibi görünmesiyle alt bit'in kaybolması şeklinde
  • Analiz sonucunda, kernel memcpy() sırasında emulated $t1'in saklandığı 4002 yongasında belirli bir nibble'ın bottom bit'inin zaman zaman 1'den 0'a düştüğü kusur doğrulandı
  • İlgili 4002 değiştirildikten sonra metin çıkışı normale döndü

Önyükleme yolu

  • Firmware önce üçüncü RAM bank'indeki bellek yongası sayısını probe ederek TLB entry sayısını belirliyor
  • Ardından VFD, UART ve SD kartı ilklendiriyor
    • SD kart ilklendirme başarısız olursa "Failed to init SD card. Halting here and now!" gösteriyor
    • Bu dize, firmware'in tamamındaki tek dize
  • Firmware'de sanal ROM bulunmuyor; SD kartın ilk sector'ünü RAM'de 0x80000000 adresine yükleyip oraya jump ediyor
  • İlk sector'deki 446 baytlık loader, partition table içinde type 0xBB partition'ı bulup 0x80001000 adresine okuyor ve jump ediyor
  • İkinci loader yaklaşık 14KB boyutunda ve C ile yazılmış
    • Active partition'ı FAT12/16/32 olarak mount ediyor
    • vmlinux'u ELF olarak parse edip RAM'e yüklüyor ve entrypoint'e jump ediyor
    • Machine type, magic value, RAM mapping ve early console printing için callback table iletiyor

Disk ve SD kart erişimi

  • Disk erişimi, LinuxCard projesindekiyle aynı PVD yarı sanallaştırılmış disk driver'ını kullanıyor
  • 4004 assembly ile SII SCSI chip ve SCSI disk emüle etmek yerine, sector read/write hypercall sanal MIPS açısından DMA gibi çalışıyor
  • Linux/4004 kartının toplam RAM'i status nibble dahil edildiğinde 440 bayt, hariç tutulduğunda 352 bayt
    • MIPS register state ve TLB'nin her biri büyük yer kapladığından SD kartın 512 baytlık sector buffer'ı için yer yok
  • SD sector verisi 4004 RAM'e konmuyor; SD kart ve PSRAM'in ayrı SPI bus'ı kullanılarak doğrudan PSRAM'e okunuyor veya PSRAM'den SD'ye yazılıyor
  • Bir SD sector'ünü okumak veya yazmak yaklaşık 1 saniyeden biraz uzun sürüyor
  • SD spec'in ACMD41 ilklendirme timing gereksinimleri bit-banging SPI ile karşılanamıyordu, ancak test edilen SD kartlar 5KHz ve 200ms üzeri aralıklarda da ilklendirildi

Çalışma hızı ve optimizasyon sonuçları

  • Gerçek SD kart ve SPI PSRAM emüle edildikten sonra ilk tahmini önyükleme süresi, 740KHz 4004 bazında 8,9 gün idi
  • Başlıca optimizasyon sonuçları şöyle
    • Mantıksal işlemler ve multiplication lookup table ile 8,4 gün
    • PSRAM nibble gönderme/alma döngüsünün unroll edilmesiyle 7,25 gün
    • Specialized memory copy ve döngü unroll ile 6,63 gün
    • Mevcut komut saklama alanının kaldırılması ve liveness tracking ile 6,50 gün
    • Shift iyileştirmesiyle 6,19 gün
    • PSRAM address sending döngüsünün unroll edilmesiyle 6,01 gün
    • Linux kernel config'in küçültülmesi, dummy console 1x1 ayarı ve tiny init kullanımıyla 5,33 gün
    • 2TB ve üzeri block device desteğinin kaldırılması ve ext4 huge_files feature'ının devre dışı bırakılmasıyla 4,81 gün
    • Instruction fetch'e özel fast path ile 4,76 gün
  • 4,76 günlük önyükleme, 740KHz 4004 bazında yaklaşık 70Hz'lik bir MIPS machine'e karşılık geliyor
  • Üretilen kart, 4201'i divide-by-7 modunda kullanıp 5.5296MHz crystal ile 790KHz'e overclock edildi
  • Linux/4004 kartının 4004 instruction mix'i %8,8 16-cycle komut, %91,2 8-cycle komut; effective speed ise 90.640 instructions/s
  • Sanal timer interrupt 16Hz ve her 65.536 virtual instruction'da IRQ iletiliyor; bu nedenle sanal CPU 1.05MHz olarak algılanıyor
    • Gerçek emulated MIPS guest, 740KHz'de yaklaşık 70Hz, 790KHz'de yaklaşık 74,73Hz
    • Zaman 14.030 kat uzuyor ve sanal 1 saniye gerçekte yaklaşık 3 saat 54 dakikaya karşılık geliyor

Linux yapılandırması ve kullanım deneyimi

  • Linux kernel, gereksiz subsystem'ler ve filesystem'ler, TCP/IP gibi ihtiyaç duyulmayan ayarlar kaldırılarak yaklaşık 2,5MB'a indirildi
  • Yalnızca init=/bin/sh kullanılırsa session, $PATH, /proc, /sys vb. olmadan başlandığı için tiny init olan /sbin/uMIPSinit yazıldı
    • /proc ve /sys mount ediliyor
    • Hostname ve $PATH ayarlanıyor
    • sh her kapandığında yeniden çalıştırılıyor
  • 4,5MB RAM, örneğin 4MB chip + 512KB chip ile bile swap olmadan shell prompt'a kadar boot edilebiliyor
  • Swap açılırsa cihazın kendisinde kernel source build edilebiliyor
    • Kernel source build'in yıllar süreceği tahmin ediliyor
    • ext4 journal sayesinde güç kesilse bile yeniden başlatma sonrası filesystem'i kurtarıp compilation'ı yeniden başlatma planlanıyor

Sanat kartı olarak hedef

  • Bu proje en başından itibaren kısmen sanatsal bir hedef taşıyordu
  • Kart duvara asılabilecek şekilde tasarlandı; VFD, retro-style PCB layout ve PC LED'lere sahip
  • VFD ve serial port üzerinde Mandelbrot set'i text mode'da çizen bir program dahil
    • Floating point sürümü /root/mandelbrot, Linux'un kayan nokta işlemlerini emüle etmesini gerektirdiğinden 13 satır x 40 sütunluk bir görüntüyü çizmek yaklaşık 30 gün sürüyor
    • Integer-only sürüm /root/mandelbrot_nofp ise 9 saat içinde tamamlanıyor

Parça maliyeti ve yeniden üretilebilirlik

  • Başkalarının yeniden üretebilmesini sağlamak önemli bir hedef olduğundan, bulunması zor olan 4265’ten kaçınıldı
  • 4201, alternatif clock devresinden daha basit olduğu; 4289 ise 4008+4009 kombinasyonundan daha kolay bulunabildiği için seçildi
  • Kart, 4004 yerine 4040 da takılabilecek şekilde tasarlandı; 4040’ın ek özellikleri kullanılmadığından 4004 uyumluluğu korundu
  • TLB için 4002 çiplerinden yalnızca 1, 2, 3 veya 4 adet takılarak sırasıyla 4, 8, 12 ya da 16 entry’li TLB olarak kullanılabiliyor
    • TLB entry sayısı azsa performans düşer
    • İlgili bank, PC display LED’lerinin üst 16 bit’inden de sorumlu olduğundan, yalnızca bir kısmı takılırsa bazı LED’ler çalışmaz
  • 1970’ler dönemine ait parçalar pahalı
    • 4004 yaklaşık $250
    • 4040 yaklaşık $60
    • 4201 yaklaşık $50
    • 4002-1 yaklaşık $7
    • 4002-2 yaklaşık $25
    • 4289 yaklaşık $70
  • Modern parçalar nispeten ucuz; SPI VFD bulunması zor olabilir, ancak eBay’de $15’a bulunduğu bir örnek var
  • VFD takmadan, yalnızca serial port üzerinden etkileşim kurulan yapılandırma da destekleniyor

Video üretim süreci

  • Gerçek boot sahnesi, yaklaşık 9 gün boyunca fotoğraf çekilip videoya dönüştürülerek oluşturuldu
  • 1920x1080 fotoğraf 2 saniyede bir çekildiğinde saatte yaklaşık 1,76 GB oluşuyor; 9 günlük çekim yaklaşık 379 GB ve yaklaşık 388 bin dosya demek
  • Android cihazlarda uzun süreli çekim sırasında hang veya aşırı ısınma sorunları yaşandı; iPhone SE3’te çekimin kendisi kararlıydı, ancak depolama alanı ve fotoğraf offload sorunları vardı
  • Sonuçta 512 GB iPhone 12 Pro Max kullanılarak tamamı kesintisiz çekildi; Linux’ta ifuse ile mount edildikten sonra cp -Rvf ile yaklaşık 400 bin dosya 10 saati aşkın sürede kopyalandı
  • Nihai video ffmpeg komutlarıyla üretildi; sıkıcı bölümlerde değişken hızlandırma uygulandı
    • Oynatma hızı 5 FPS, yani 10x realtime’dan 960 FPS, yani 1920x realtime’a kadar değişiyor
    • Ayrı, kurgusuz sürüm 0.5 FPS capture ve 60 FPS playback ile 120x realtime hızında

Yayınlanan materyaller ve lisans

  • SD kart için disk image ayrı bir indirme olarak sunuluyor
  • main download içinde şunlar yer alıyor
    • Saleae software için MCS-04 bus analyzer
    • i4004 DECstation 2100 emulator source
    • MIPS MBR ve second-stage bootloader source
    • kernel config ve version info
    • Linux/4004 kartı için u4004 emulator source
  • Lisans ticari olmayan kullanım için ücretsiz; ticari kullanım için ayrı lisans gerekiyor
  • Her türlü kullanımda source ve binary form içinde özgün üreticiye credit verilmesi gerekiyor

2 yorum

 
y15un 2024-09-21

Orijinal yazının yazarı, bu kez DEF CON'da rozet meselesi yüzünden sahneden indirilen o kişiymiş. Kimin tarafını tutacağım demeyeceğim ama yine de becerisi gerçekten etkileyici.

 
GN⁺ 2024-09-21
Hacker News yorumları
  • Vay, 15MHz m68030, 16 bit bellek veri yolu, 10MB RAM üzerinde modern NetBSD’nin yavaş olduğunu sanıyordum; bu gerçekten çılgınca
    80’lerin sonu–90’ların başında bilgisayarların kalıcı depolama, açık adres alanı ve MMU edinmeye başlamasıyla fiilen modern bilişime ulaşıldığını çok iyi gösteriyor
    Amiga 3000 ya da i80486 bilgisayarlar da modern bilgisayarlarla aynı şeyleri çalıştırabiliyor; bugün bunları çok daha hızlı çalıştırıyoruz ya da o zamanlar olmayan GPU gibi şeyler var, ama işlevsel olarak büyük fark yok
    Dmitry’nin işlevsel kelimesini ne kadar gevşek tanımlayabileceğini göstermesi hoş

    • ABD’de de öyle miydi bilmiyorum ama 70’ler ve 80’lerde Sovyetler Birliği’nde yazışmalı satranç çok popülerdi
      Hamleler gerçek posta yoluyla gönderilip alınırdı ve bir oyun aylar, hatta yıllar sürebilirdi
      Cevap geldiğinde ilk stratejinizi unutmuş olabileceğiniz için satranca ayrı bir zorluk katardı; bu proje de aslında yazışmalı Linux
      Komut çıktısı geldiğinde o komutu neden çalıştırdığınızı unutmuş olabilirsiniz
    • 15MHz m68030, 16 bit bellek veri yolu, 10MB RAM; acaba Mac LC II olabilir mi? :)
      80’lerin sonu–90’ların başı değil, aslında 1960’ların sonlarında bile mümkündü
      Linux’u IBM Model 67’ye [1] port etmek de mümkün gibi görünüyor; GCC zaten o komut kümesini hedefleyebildiği için kolay bile olabilir
      MMU da yeterli; hızlı çekirdek belleğin en fazla 2MB olması kısıtı sert olsa da, o 68030 makineyle benzer sınıfta, biraz daha yavaş olurdu gibi
      Tam sanallaştırma ve donanımın zorladığı bellek/GÇ sınırları da erken dönemde icat edilmişti, ama bu özelliklerin mini bilgisayarlara ve mikro bilgisayarlara inmesi zaman aldı; yaygın yazılımların bunlardan yararlanması ise çok daha uzun sürdü
      [1] https://en.wikipedia.org/wiki/IBM_System/360_Model_67
    • Bu temelde Turing tamlığı kavramı
      Turing tam olan herhangi bir sistem her şeyi çalıştırabilir; çok yavaş olabilir ama çalıştırır
      Yeterince zaman varsa ChatGPT de 4004 üzerinde çalışabilir
    • Çok çekirdek oldukça büyük bir işlevsel fark
      Bir tekerleğe otomobil bağlayınca üç tekerlek daha kazanmasına benziyor
  • Hackaday Supercon 2002’nin katılımcı rozeti (https://hackaday.com/2022/10/12/the-2022-supercon-badge-is-a...), sanal bir 4 bit CPU ve komutları doğrudan girip çalıştırabileceğiniz/adım adım yürütebileceğiniz bir kontrol paneli uyguluyordu
    Kontrol panelinde belleğin bir sayfasını bit bit görebileceğiniz bir ekran vardı; onun üzerinde bir uzay nişancı oyunu uygulamak gerçekten eğlenceliydi
    Voya4 mimarisini 4004 ile karşılaştırmak da ilginçti; benzer ödünler vardı ama Voya4, CPU komut kümeleri konusunda 50 yıllık deneyimin avantajına sahip
    Ancak dimitygr’nin yöntemi o rozette işe yaramaz; çünkü CPU emülatörünü uygulayan PIC24’ün içinde bellek ve RAM’in tamamı yerleşik
    Bu arada 4 bit CPU’lar hâlâ üretiliyor ve kullanılıyor. Seri üretilen birçok kızılötesi uzaktan kumanda 4 bit MCU ile programlanıyor. Veri sayfası için bkz. https://www.emmicroelectronic.com/sites/default/files/produc...

    • 2022 yılı
  • Yetersiz performanslı bir makinede bir şey çalıştırılıp çalıştırılamayacağı sorulduğunda sık sık AVR örneğini verirdim; artık bağlantı olarak gösterecek yeni bir örneğim var
    Frekansa ve güç tüketimine bakınca ne kadar RF saçtığını, SDR’nin waterfall görünümünde algılanıp çözümlenip çözümlenemeyeceğini de merak ediyorum
    Hâlâ okuyorum ama şu ana kadar “soubroutine” kelimesini gördüm; yazım hatası gibi

  • Vay, bu ucuz bitmiş bir proje olmasa gerek. eBay koleksiyonerleri sağ olsun
    Ve muhtemelen VFD yerine LCD seçeceğim tek durum bu olurdu
    Yıllar sürecek bir derleme çalıştırıyorsanız, bittiğinde VFD burn-in yüzünden berbat hâle gelmiş olurdu

    • Bence kişisel olarak fahri doktorayı hak eden bir proje
      Ne yazık ki üniversite öğretim üyeleri HN’i pek okumuyor gibi
  • Vay, harika
    Yüksek PC bitlerine bakınca o anda neyin çalıştığı görünüyor
    Not: Yine de internet üzerinden bir sunucunun berbat IPMI’sinde sanal ISO ile kernel yüklemekten daha hızlı ;D

    • Önyükleme sırasında LED’lere bakıp vmlinux üzerinde nm çalıştırırsanız kernel fonksiyonlarıyla kolayca eşleyebilirsiniz
      Kullanıcı alanına girdikten sonra ana ikiliyi (0x01000000’un epey altında) ve paylaşılan kütüphaneleri (0x77000000 civarındaki yüksek adreslere yüklenir) de ayırt edebilirsiniz
    • İnternet üzerinden bir sunucunun berbat IPMI’sinde sanal ISO ile kernel yüklemek sözü, Raspberry Pi üzerinde çalışan NFS ile barındırılan bir ISO ile Dell M1000e blade sunucusunu önyüklemeye çalıştığım anıyı hatırlattı
      Hem önyükleme hem çalışma acı verecek kadar yavaştı
  • Gerçekten ilginç bir yazıydı
    4004 hakkında biraz okuduğum için garip bir çip olduğunu biliyordum ama anlaşılmazlık düzeyi hayalimin ötesinde
    Şimdi aynı transistör sayısıyla bir CPU yapılsa ne kadar iyi yapılabileceğini görmek istiyorum
    6502’den o kadar da çok daha az değil; 8 bit olsaydı programlaması çok daha kolay olurdu gibi

    • Transistörlerle yapılırsa MIPS emülatörümü ona port ederim :)
  • Video çekimi 9 gün sürdü ve 1 saniyelik emülasyon 4 saat aldı
    Ayrıca neden Windows 95 kullandığını da merak ediyorum

    • Windows 2000
      Video için gerçek seri porta sahip, USB olmayan bir dizüstü bilgisayara ihtiyacım vardı
      Bu dizüstü bu koşulu sağlıyordu ve eBay’de 20 dolardı
      Kişisel olarak Windows 2000’in en güzel görünen Windows olduğunu düşündüğüm için demo videosu için onu kurdum
    • Ufak bir düzeltme yaptığım için kusura bakmayın ama videodaki dizüstü Windows 2000 gibi görünüyor
  • Gerçekten harika
    Bu projenin büyük kısmını anlayabilecek kadar bilgimin artmasını isterdim ama şu anki sınırlı bilgisayar bilimi becerilerimle bana fazla zor geldi
    Yine de tamamen anlayabildiğim öne çıkan kısım “Section 14.b & 14.c - Getting the data...” idi
    Sadece 400 bin dosya, 4 yıl boyunca günde yaklaşık 275 fotoğraf yetmiş
    İşleme, depolama ve ağ performansının bu kadar bol olduğu hâlde en çok kullanılan medya senkronizasyon uygulamaları takılıyor ya da yavaş senkronize ediyor, AirDrop başarısız oluyor ve “tümünü seç” UI işlevinin bile olmadığı bir çağda yaşıyor olmamız gerçekten tuhaf :)

    • Dmitry’nin fotoğrafları çeker çekmez sürekli PC’ye kopyalamak için MobiusSync veya Syncthing gibi senkronizasyon araçlarını düşünüp düşünmediğini merak ediyorum
  • Böyle işler için Nobel Ödülü gibi bir şey lazım

    • En yakını muhtemelen Ig Nobel Prize olur: https://en.wikipedia.org/wiki/Ig_Nobel_Prize
    • Bilgi işlem alanında bunun karşılığı olan Turing Award var
      Bilgisayar biliminin tuhaf ve sıra dışı uygulamalarını takdir eden bir kategori eklenebilir
  • “Why MIPS?” bölümünde “bazıları berbat adresleme biçimleri yüzünden yavaş olmak zorunda (RISCV)” denmiş; RISC-V adresleme biçiminde sorun ne?

    • Aslında sorun adresleme biçiminden çok komut formatı meselesine daha yakın
      RISC-V’de bazı komutlarda immediate değer bitleri ardışık saklanmıyor
      MIPS komutlarında immediate toplama, sabit yükleme, dallanma gibi değer bitleri her zaman sırayla saklanır
      RISC-V’de ise bitler bazen karıştırılmış durumda
      Örneğin koşulsuz dallanmada hedef ofset bitleri bit 19, bits 9-0, bit 10, bits 18-11 sırasıyla saklanır
      Donanımda kabloları doğru bağlamak yeterli olduğundan yeniden sıralamanın maliyeti fiilen yoktur, ancak yazılımda bunu düzeltmek için çok sayıda bit işlemi gerekir
      RISC-V’nin bunu yapmasının nedeni donanım tasarımını basitleştirmektir
    • Aşırı düşük performanslı bir donanımda emüle etmeye çalışmıyorsanız muhtemelen pek sorun olmaz