1 puan yazan GN⁺ 2025-04-06 | 1 yorum | WhatsApp'ta paylaş
  • Evde monte edilebilecek minimal bir bilgisayar hedeflenerek Debian Linux, vi, gcc ve make çalıştırabilen 8 MB RAM’li, 1 MIPS sınıfı bir sistem yalnızca 8 pinli bileşenlerle gerçekleştirildi
  • Nihai kart STM32G031, 8 MB SPI PSRAM ve PL2303GL USB-seri köprüsü olmak üzere 3 çipten oluşuyor; 8 pinli paket kısıtı nedeniyle kullanılabilen I/O sayısı yalnızca 6
  • Pin yetersizliği tasarımın temel zorluğu; RAM normal SPI, SD kart RAM pinlerini paylaşan 1-bit SDIO, UART gönderimi ise bit banging ile ele alınıyor
  • Yazılımda mevcut ARMv6M assembly tabanlı MIPS emülatörü yeniden kullanılıyor; 8 KB bootloader, SD kart FAT dosya sistemindeki FIRMWARE.BIN ile firmware’i güncelliyor
  • STM32G031, VOS0 ayarıyla resmi 64 MHz’in üzerine overclock ediliyor; 148 MHz host CPU’da yaklaşık 1,65 MHz MIPS R3000 düzeyinde Debian’ı yaklaşık 1 dakika içinde başlatıyor

Yalnızca 8 pinli çiplerle yapılmış minimal Linux bilgisayarı

  • Amaç, evde kolayca monte edilebilen kit tipi modern bir bilgisayarı yalnızca 8 pinli çiplerle yapmak
  • Modern bilgisayar için asgari ölçüt Debian Linux, vi, gcc ve make çalıştırabilme olarak belirlendi
  • Önceki deneylere dayanarak Linux çalıştırmak için gereken minimum özellikler 8 MB RAM ve 1 MIPS CPU olarak ayarlandı
  • Depolama için SD kart, konsol bağlantısı için USB-seri kullanılıyor
  • Kart küçük ve yuvarlak formda; üst kısmında kart kenarı tipi USB-C konektörü bulunuyor
  • Lehimleme deneyimi neredeyse olmayan kişilerin bile 45 W lehim havyasıyla monte edebilmesi için bileşen sayısı ve pin sayısı azaltıldı

Bileşen seçimi

  • USB bağlantısı için PL2303GL seçildi
    • Harici bileşen gerektirmeden çalışan bir USB-seri köprüsü ve ayrıca 100 mA’lik 3,3 V regülatör çıkışı sağlıyor
    • Başlıca işletim sistemleri için sürücüleri var; macOS’te App Store üzerinden kurulum gerekiyor
  • Alternatif olarak ATTINYx5 ve V-USB ile USB uygulaması da değerlendirildi
    • USB low-speed, spesifikasyona göre bulk endpoint kullanamaz; ancak başlıca işletim sistemleri bunu zorunlu tutmadığından ACM seri port uygulaması çalışıyor
    • V-USB CPU zamanı, flash ve RAM’i fazla kullandığı için bu proje açısından ağır bir yük
  • RAM olarak SOIC-8 SPI PSRAM kullanılıyor
    • ISSI, APMEMORY, Vilsion gibi şirketler ilgili parçaları üretiyor; 8 MB parçalar genel dağıtım kanallarından temin edilebiliyor
    • 16 MB çipler birkaç üretici tarafından vaat edilmiş olsa da fiilen tedarik edilmediği değerlendirildi
  • Mikrodenetleyici olarak PIC16F, RL78, PSoC1, eZ8, S08CPUv2, STM8, MSP430, AVR, PSoC4, MSPM0C, CH32V003, CH570E ve STM32G0 aileleri karşılaştırıldı
  • Nihai seçim STM32G031J4M6/STM32G031 ailesi oldu
    • Cortex-M0+ çekirdeği, resmi 64 MHz, 32 KB flash ve 8 KB RAM sunuyor
    • 8 pinli pakette performans ve bellek açısından diğer adaylardan avantajlıydı
    • STM çiplerinin errata belgesi kalitesi endişe yaratsa da tasarım, çip üzerindeki çevre birimlerini minimum düzeyde kullandığı için seçilebilir bulundu

6 I/O pini içine sığdırılan donanım tasarımı

  • Konsol UART

    • UART RX ve TX’i diğer işlevlerle birleştirmek zor
    • RX paylaşılırsa başka işlemler sırasında gelen veriler kaçırılabilir; TX paylaşılırsa kısa low darbeleri bile PC’de karakter gibi görünebilir
    • Bu nedenle 6 I/O’dan 2’si UART konsoluna ayrıldı
    • Nihai pin yerleşiminde pin 8 USART2 RX olarak kullanılıyor, pin 7 ise UART TX’i bit banging ile yapıyor
    • UART gönderimi sırasında tüm yürütme durduğu için mümkün olan hızlı değer olan 115.200 bps kullanılıyor
    • Tek karakter gönderimi yaklaşık 87 mikrosaniye sürüyor; kart çoğu zaman çıktı vermediğinden bu yöntem kabul edilebilir
  • RAM bağlantısı

    • SPI PSRAM QSPI destekliyor, ancak QSPI için 6 pin gerektiğinden kullanılamıyor
    • dual-SPI, ek pin kullanmadan normal SPI’dan 2 kat hızlı olabilir; ancak STM32G031 dual-SPI desteklemiyor
    • CPU ile dual-SPI’ı bit banging yapmak da donanım SPI ve DMA birleşimini geçmekte zor görülüyor
    • Sonuç olarak RAM normal SPI ile bağlanıyor ve bu bağlantı tek başına kalan 4 pinin tamamını kullanıyor
  • SD kart bağlantısı

    • SD kartı SPI modunda kullanmak için fazladan bir chip select pini gerekiyor; ancak boş pin yoktu
    • RAM nCS’yi inverter ile ters çevirip SD kart nCS olarak kullanma yöntemi bazı kartlarda sorun çıkardı ve ek bileşen de gerektiriyordu
    • UART TX pinini alçak geçiren filtreyle birlikte SD card nCS olarak paylaşma yöntemi de değerlendirildi; ancak 300 bps veya daha düşük UART gerektiriyor ve SD kart yavaş olduğunda kırılgandı
    • Nihai çözüm, SD kartın 1-bit SDIO protokolünü doğrudan uygulamak oldu
    • RAM nCS SD CLK, RAM CLK SD CMD, RAM MOSI ise SD DAT olarak paylaşılıyor
    • RAM erişimi SD kart tarafından idle durumundaki 1 bit gibi, SD erişimi ise RAM tarafından yalnızca seçme ve bırakmanın tekrarlanması gibi göründüğü için güvenli çalışıyor
    • Ancak SD transaction ortasında RAM erişimi araya giremediğinden çok bloklu okuma/yazma kullanılamıyor
    • STM32G031 pin yerleşimi nedeniyle SDIO donanım birimi olarak kullanılamadığından tüm SD erişimi bit banging ile yapılıyor
    • Assembly uygulaması yaklaşık 14 CPU cycles/bit verim sağlıyor

Bootloader ve Linux önyükleme akışı

  • Emülatör

    • Mevcut LinuxCard projesindeki MIPS emülatörü yeniden kullanıldı
    • Emülatör ARMv6M assembly ile yazılmıştı ve Linux’u başlatabiliyordu
    • Daha hızlı çalıştırma için MIPS-to-ARMv6M JIT de yazıldı; ancak kod boyutu 46 KB olduğu için çok büyüktü ve 6 KB dönüştürme önbelleğinde hız kazancı da yeterli olmadığından kullanılmadı
    • STM32G031’in 32 KB flash’ı 8 KB bootloader ve 24 KB ana kod olarak ayrılıyor
  • Firmware güncellemesi için bootloader

    • Debug pinleri bırakılamadığı için SD karttan firmware güncelleyen bir bootloader gerekiyordu
    • Bootloader içinde SDIO sürücüsü, FAT dosya sistemi sürücüsü, flash yazma kodu, loglama ve bit banging UART gönderim kodu yer alıyor
    • Gerçek boyutu yaklaşık 6,5 KB, ancak flash blok birimi nedeniyle 8 KB alan kullanıyor
    • SD kartta FIRMWARE.BIN aranıyor; temel kontrollerden geçerse ve sürüm artışı koşulunu karşılarsa güncelleme uygulanıyor
    • Uygulama imajında offset 16’daki word sürüm numarası olarak kullanılıyor
    • Bootloader offset 8’deki byte bootloader sürümüdür; ana uygulama açılış metnini göstermek dışında kullanılmıyor
    • Bootloader, FAT dosya sisteminde adı CLOCK ile başlayan dosya veya dizinleri de arıyor
    • Ardından gelen sayı ana uygulamanın clock hızı olarak kullanılıyor; 32–200 MHz aralığı dışındaysa veya değer yoksa 132 MHz kullanılıyor
  • Kart bölümleri ve kernel yükleme

    • Önyükleme akışı PC açılış sürecine benzer şekilde oluşturuldu
    • SD kartın ilk sektörü RAM başlangıç kısmına okunup oraya atlanıyor
    • İlk aşama kodu type 0xBB partition’ı bulup 0x80001000 adresine yüklüyor ve oraya atlıyor
    • İkinci aşama bootloader, active olarak işaretlenmiş partition’ı FAT16 olarak mount ediyor ve VMLINUX dosyasını ELF olarak yüklüyor
    • Kernel komut satırı bootloader’a gömülü
    • root /dev/pvd3, init ise /sbin/uMIPSinit
    • /dev/pvd1, /boot olarak mount edilmeye çalışılıyor
    • Projenin partition sırası FAT partition, bootloader partition, rootfs şeklinde
    • Windows ve macOS ilk partition’ı mount ettiğinden FAT partition üzerinden dosyaları kolayca içeri-dışarı taşımak mümkün
    • Başlatılan Linux’ta da bu partition /boot olarak görünüyor

Performans ve overclock

  • STM32G031’in resmi çalışma hızı 64 MHz olsa da dahili voltaj ayarı kullanılarak daha yüksek clock denendi
  • STM belgelerinde VOS2 1,0 V ve VOS1 1,2 V ayarları var; VOS1’de yaklaşık 75 MHz üzeri kararlı değil
  • Eski belgelerde ve benzer çip belgelerinde görülen VOS0 1,35 V ayarı kullanıldığında overclock alanı ciddi biçimde artıyor
  • Çiplerin çoğu 136 MHz’de iyi çalışıyor, bazıları 180 MHz’e kadar çıkıyor
  • Flash bellek hızlanmadığı için flash wait states doğru yönetilmeli
  • 148 MHz host CPU’da emüle edilen MIPS CPU, FPU devre dışıyken yaklaşık 1,65 MHz MIPS R3000’e benziyor
  • Sistem yaklaşık 1 dakika içinde açılıyor; vi, make, objdump ve gcc çalışıyor
  • Tam bir Debian sistemi olduğundan .deb paketleri /boot üzerinden getirilip kurulabiliyor

Montaj ve ilk çalıştırma

  • Montaj akışı

    • Kartın doğrudan üretilebilmesi için tasarım dosyaları sağlanıyor ve kit satışı yapacak şirket aranıyor
    • Montaj SD kart soketi, kapasitör, direnç, STM32G031, PL2303GL sırasıyla yapılıyor
    • R101, R102, R201, R202 başlangıçta doldurulmuyor
    • Önce bootloader STM32’ye yazılmalı
    • R101 ve R201 köprülenerek ROM bootloader için seri kablolama yapılandırılıyor
    • SD kart takılı değilken ve RAM çipi de henüz lehimlenmemişken işlem yapılıyor
    • Bootloader yazıldıktan sonra R101/R201 köprüsü kaldırılıyor ve R102/R202 köprüleniyor
    • Ardından APS6408 veya VTI7064 RAM çipi U2 konumuna lehimlenince donanım montajı tamamlanıyor
  • Firmware ve ilk açılış

    • SD kart en az 1 GB olmalı ve sağlanan disk imajı yazılmalı
    • İmajda 1. aşama MIPS bootloader, 2. aşama MIPS bootloader, Linux kernel ve firmware kopyası içeren partition ile Debian rootfs bulunuyor
    • FAT partition’a FIRMWARE.BIN konduğunda ilk açılışta bootloader kendini flash’lıyor
    • Seri terminal 115.200 bps, 8N1 olarak ayarlanıyor
    • İlk çalıştırmada STM32 fuse programlanır; USB-C kablosunu çıkarıp yeniden takmak gerekebilir
    • Yaklaşık 20 saniye sonra Linux kernel açılış mesajları başlar; tam açılış yaklaşık 1 dakika sürer
    • Yalnızca 8 MB RAM olduğu için ilk komut olarak swapon /swapfile çalıştırılması kuvvetle önerilir
    • swap etkinleştirme onlarca saniye sürer, ancak sonrasında daha fazla program çalıştırılabilir

İndirme dosyaları ve kullanım

  • Ana indirme uMIPS.8PL.zip
  • Arşiv, kart üretimi ve çalıştırma için gereken dosyaları içeriyor
    • schematics: devre şemaları
    • gerbers: kart üretimi için Gerber dosyaları
    • srcs: emülatör ve bootloader kaynakları
    • binaries/SD.img: SD karta yazılacak imaj
    • BOOTLOADER.BIN: montaj sırasında çipe yazılacak bootloader
    • FIRMWARE.BIN: önceden derlenmiş firmware imajı
  • Açılıştan sonra varsayılan shell sh; bash de çalıştırılabiliyor
  • RAM yetersizliğinden kaçınmak için imajda bulunan swapfile’ı swapon /swapfile ile etkinleştirmek iyi olur
  • MCU’nun 120 MHz’de çalıştığı varsayılırsa efektif CPU hızı yaklaşık 1,5 MHz
  • Basit bir C programını gcc ile derlemek birkaç dakika sürüyor, ama çalışıyor
  • Örnek olarak kayan noktalı ve sabit noktalı Mandelbrot üreteçleri kaynak ve binary biçiminde sağlanıyor
  • Kurulu araçlar arasında vim, make ve gcc bulunuyor; Debian paketleri SD karttaki paylaşımlı FAT16 partition üzerinden eklenebilir

1 yorum

 
GN⁺ 2025-04-06
Hacker News yorumları
  • Hangi pinlerin SDIO'nun üç piniyle birleştirilebileceğini düşündükten sonra RAM'in nCS pinini SD kartın CLK'si, RAM'in CLK pinini SD kartın CMD'si, RAM'in MOSI pinini de SD kartın DAT pini olarak kullanma çözümüne varılması gerçekten harika bir hack
    Her aygıtla olası etkileşimleri tek tek değerlendirince güvenli çalıştığının da ikna edici olması, bunu Hacker News'e fazlasıyla layık kılıyor

    • “Bir süre düşündükten sonra çözüm apaçıktı” ifadesi tişört yazısı olmaya da gayet uygun
  • USB'ye bağlanmak için ayrı bir çip kullanmanın varsayılan seçenek hâline gelmesini görmek bana hep biraz üzücü geliyor
    USB çok karmaşık bir protokol; düşük hızlı USB 1.1 çalıştıran temel V-USB seviyesinin ötesine geçince, özel donanım ve epey büyük bir yazılım yığını olmadan genelde zor görünüyor
    Buna karşılık SPI inanılmaz derecede basit; gereken asgari donanım, yeterince hızlı clock alabilen bir shift register kadar
    Eski masaüstü ve dizüstülerde olduğu gibi dışarıya açık seri/paralel portların bulunup bu tür düşük seviye iletişimin yapılabildiği günleri özlüyorum
    Basit çevre birimleri UART, I2C, SPI multidrop'u kısa mesafede birkaç standart clock ve tek bir konnektörle kullansaydı; monitör veya harici disk gibi veri yoğun aygıtlar da doğrudan IEEE 802.3 Ethernet'e geçseydi, belki USB ve Ethernet'i ayrı ayrı desteklemek yerine yalnızca Ethernet linkini desteklemek yeterli olurdu

    • SPI'ın basit olduğu doğru; zaten transistor bütçesinden tasarruf etmek için mümkün olduğunca az silikonla uygulanacak şekilde tasarlanmış bir protokol
      SPI, USB'nin sunduğu güç sağlama, hot-plug, aygıt keşfi, bit hataları gibi birçok kullanışlı özelliği hesaba katmaz
      Yazılım geliştiricilerin SPI idiomlarını ve donanım tasarımcılarının SPI'ı nasıl kullandığını anlamasında değer var
      SPI genellikle çevre birimlerinin register'larını doldurmak için kullanılır; USB veya Ethernet'te ve onların üzerindeki soyutlama katmanlarında sık görülen üst seviye asenkron iletişimden farklı bir karaktere sahiptir
      SPI frame'leri için evrensel bir standart yok ama yerleşik örüntüler var ve sayısız uygulamada bu kadarı yeterli oldu
    • USB PHY'yi seri-Ethernet dönüştürücü ve Ethernet PHY ile değiştirmeyi önermek gibi geliyor
      Gerçekçi bakınca SPI ve I2C gibi basit protokoller yeterli değil
      Hızlı değiller, single-ended sinyalleme kullandıkları için gürültüye çok duyarlılar ve hata düzeltmeleri de yok
      Bu protokoller amaçlanan kullanım için, yani PCB üzerindeki IC'leri birbirine bağlamak için çok uygundur; ancak sonlandırma olmadan portu dışarıya açarsanız hiçbir şeyi garanti etmek zordur
      Modern PC'lerde de bu protokoller ve türevleri çokça kullanılır, ama nihayetinde bunlar dahili bus'lardır
      USB spesifikasyonuna ayrıntılı bakmadım ama bit-banging'in başlıca sorunu muhtemelen gereken hızdır
      Mikrodenetleyici pinleri toggle ederken aynı anda protokolü çözümleyecek ve hata düzeltmeyi yönetecek kadar hızlı olmadığından özel donanım gerekir
      I2C'yi bit-banging ile çalıştırırken de aynı sorunla karşılaşabilirsiniz
      20MHz CPU ile elde edilebilecek maksimum clock yaklaşık 250KHz'dir; bu, tipik maksimum hız olan 400KHz'in biraz üzerinde yarısı kadardır ve 1MHz sürümü fiilen imkânsızdır
      PHY'lerin var olma nedeni, iletişim protokolünü donanıma devretmenin ezici biçimde daha ucuz olmasıdır
      Aksi hâlde iletişimi elle yönetmeye kaynak ayırmak için CPU'yu çok daha fazla abartmanız gerekir; bu yüzden modern mikrodenetleyicilerde I2C, SPI ve seri iletişim donanımı bulunur
      Sonuç olarak SPI, I2C, UART gibi basit seri protokoller harici çevre birimleri için çok kötü seçimlerdir
      Uygun hızlarda çalışmaları zordur, uzun kablolara ve gürültüye dayanamazlar
      RS-232 bir UART olmadığı için onu istisna saysak bile, bu protokollerin doğası ve tasarımı gereği bu şekilde kullanılamazlar; bunu destekleyecek şekilde spesifikasyonu değiştirmeye kalkarsanız sonunda USB'yi yeniden icat etmiş olursunuz
    • AV sektöründe yeni donanım 10 bin doları aşsa bile cihazlar arası kontrol sinyallerinde hâlâ RS-232 kral
      Dijital tabela ya da toplantı odası TV ekranları da HDMI-CEC'ten daha esnek kontrol için çoğu zaman RS-232 sunuyor
      Çoğu durumda 9600bps'den yüksek bit hızına gerek yok ve en yaygın konnektör Tx, Rx, GND'den oluşan 3 pinli vidalı terminal
      Günümüz kurulumlarında genellikle bir yerlerde en az bir RS232-USB adaptörü bulunuyor; büyük odalarda ise RS232 Ethernet üzerinden köprüleniyor
      Bu alana ilk girdiğimde şaşırmıştım, ama birçok kurulumun onlarca yıllık olduğunu ve bileşenlerin tek tek değiştirildiğini düşününce anlaşılır geliyor
    • Yazı 8 pinli çipleri uzun uzun tarıyor ama çok popüler olan CH32V003 eksik
      Bu çip yaklaşık 0,10 dolar seviyesinde; 2KB RAM, 16KB Flash, 48MHz ve 1 CPI ile çalışıyor
      Yeni CH570 de SOIC8 paketinde yaklaşık 0,10 dolar seviyesinde; 100MHz, 16KB RAM, 256KB Flash, USB ve 2.4GHz paket radyosu bile var, geliştirme kartını sipariş ettim
    • USB aygıtı olarak çalışabilen çok sayıda mikrodenetleyici var, ama bu sefer paket kısıtı nedeniyle hariç tutulmuşlar
  • Kendi kartını yapmak isteyenler için gereken PCB kalınlığını da belirtmek iyi olurdu
    Yanlış hatırlamıyorsam yaklaşık 0,8mm ve “USB-C edge connector”ın fişe uyması için bu kalınlık gerekiyor

  • Harika bir yazı, ama 8 pin şartı biraz daha esnek ele alınsaydı çok daha basit olur muydu diye merak ediyorum
    Sadece birkaç pin daha olsa proje karmaşıklığı ciddi biçimde azalır, lehimleme süresi de yalnızca çok az artardı gibi geliyor

    • O zaman hiç meydan okuma olmazdı, eğlencesi de kalmazdı
      Dahili USB'si olan çok daha hızlı çipler çok
      Allwinner V3s de elle lehimlenebilir, RAM'i dahili ve Linux'u native olarak gayet iyi boot eder
      RP2350 de iyi bir seçenek; dahili cache'e sahip harika bir QSPI RAM arayüzü ve USB desteği var
  • Neredeyse 2 çipli bir projeye yakın
    Biri yalnızca USB-seri IC; SD kartı saymasaydık, SD kartla birlikte yine 3’e çıkıyor
    Toplam pin sayısı o kadar az ki dead bug yöntemiyle yapmayı denemek geliyor insanın içinden

    • Dead bug sürümü yapılmadı; yapılırsa ilk örnek olur
      microSD-to-SD adaptörü, lehimlenebilir bir microSD tutucu olarak oldukça işe yarar
    • SD kartın içinde de epey güçlü bir işlemci var; muhtemelen 32 bit ARM olma ihtimali yüksek
      Ona yönelik benzer bir numara yapmak da eğlenceli bir hack olabilir
    • USB-seri IC’yi başkasının yaptığı kablo tarafına alırsanız “saymak zorunda kalmazsınız”; bu da microSD’yi saymamaya benzer görülebilir
  • Teknik olarak çok havalı bir proje, ama yeni başlayanlara yönelik yeni bir bilgisayar kiti yapma hedefinden biraz sapacak kadar uç noktaya gitmiş gibi
    Yeni başlayan biri için SOIC8 lehimlemekle SOIC28 lehimlemek arasında büyük fark yok
    SOIC28 de SOIC8 kadar kolay ya da zor sayılır
    Daha büyük bir çip kullanılırsa asgari düzeyde ses, klavye ve ileride VGA tarzı gerçek monitör çıkışı bile eklenebilir; böylece çok daha kullanışlı bir bilgisayar olabilir
    Lehimleme zorluğu neredeyse artmadan, ilgisi oluşan kullanıcıların genişletmesi için iyi bir temel olur

    • Doğru
      Böyle bir yönde yapmak istiyorsanız kodumu kullanabilirsiniz
      Ben 8 pinlik yapay kısıt hoşuma gittiği için böyle yaptım
  • Kartı bile atlayıp bunu bir devre heykeli olarak yapma yönünde garip bir dürtü oluşuyor

    • Öyle yapılacaksa IC’lerden birinin üzerine serigrafiyle “555” yazılmalı
    • Denense güzel olur
      Ben sanatçı ya da heykeltıraş olmadığım için buna cesaret edemedim
  • Depolama için SD kart yerine 8 pinli SPI Flash kullanmak sevimli olurdu

    • Bunu değerlendirdim, ama o zaman dosya ekleyip çıkarma yöntemi zorlaşıyor
  • “Kişisel nedenlerle RISC-V’ye alerjim var” demiş; nedeni merak ediliyor

    • Komut kümesini beğenmiyorum
      Alevli bir tartışma başlatmak istemiyorum; bu sadece kişisel görüşüm, ama oldukça güçlü bir görüş
      RISC-V tarihsel olarak yeterince geç tasarlandı ve mevcut birikimin büyük kısmından yararlanabilirdi; bence bunu neredeyse hiç yapmadı
      Bu yüzden en baştan düzgün yapılması gereken şeyleri düzeltmek için çeşitli uzantılar öneriliyor
      Eklemeler arttıkça, ancak 10 yıl sonra yavaş yavaş mantıklı bir biçime yaklaşmaya başladı
      Bir öğrenme süreci gerektiği bahanesini de kabul etmiyorum
      Gerekli bilgiler en baştan vardı ve hatalar çoğumuz için açıktı
      Bazı uzantılar, temel tasarım sorunlarının üzerine yapıştırılan yara bandından ibaret
      Örneğin shadd2, dizi erişimi için doğru düzgün adresleme modu olmaması sorununu yamayan bir yara bandı
      Buna verilen yaygın cevap, çekirdek içinde sihirli komut füzyonu vaat etmek; sık sık vaat ediliyor ama gerçekte sunulmuyor
      Özellikle de RISC-V’nin tek hedefi gibi görünen düşük maliyetli işlemcilerde hiç sunulmuyor
      Bit alanı çıkarma ve ekleme komutlarının olmaması da amatörce bir hata; bunu düzelten bir uzantı da var
      Ama böyle bir özelliğe ihtiyaç olduğu en baştan açık olmalıydı
      Bir kayıttaki belirli bir bite göre koşullu dallanma yapan komutlar da yaygın olduğu için, en baştan düşünülmesi gereken bariz bir özellikti
      Modern yazılım biraz analiz edilse bile ortaya çıkardı
      Can sıkıcı olan, bilginin zaten mevcut olması
      Modern yazılımın neler yaptığını biliyorlardı ama hepsi görmezden gelindi; sonuçta biraz güncellenmiş bir MIPS-1 aldığımızı düşünüyorum
      Şimdi üzerine bir sürü uzantı eklendi ve parçalanma ciddi boyuta ulaştı
      Bir ölçüde makul nihai sonuç olan RV23 gibi bir şeyi hedefleyebilirsiniz, ama bunu uygulayan donanım yok; ya da her yerde çalışan ama berbat performans gösteren en küçük ortak paydayı hedeflemek zorundasınız
      RISC-V’yi gerçek yüksek performanslı bilişim için kullanmaya çalıştığınızda daha ciddi tasarım sorunları da var, ama onu bir sonraki rant’e bırakıyorum
      Benzer dönemde tasarlanan başka bir komut kümesi, modern yazılımın nasıl göründüğüne dair bilgiyi gerçekten kullandı ve sonuç ortada: aarch64
  • Projenin kendisi de çok havalı, ama bu sayfa küçük mikrodenetleyiciler hakkında bilgi edinmek için de harika bir kaynak
    WLCSP ailesi eksik, ancak ARM için MIPS emülatörü sayfasına https://dmitry.gr/?r=05.Projects&proj=33.%20LinuxCard da uzanıyor; oldukça ilginç görünüyor