1 puan yazan GN⁺ 2025-02-08 | 1 yorum | WhatsApp'ta paylaş
  • Assembly, CPU mimarisiyle doğrudan bağlantılı olduğu için ilk öğrenme hedefinin seçimi önemlidir; 6502 ise basit yapısı ve gerçek bir ekosistemi birlikte sunan, başlangıç için uygun bir platformdur
  • Yalnızca 6 register ve özgün komut setindeki 56 komutla register, load/store, mantıksal ve aritmetik işlemler, dallanma gibi temel kavramlar hızlıca öğrenilebilir
  • Apple II, Commodore VIC 20, Commodore 64, BBC micro gibi sistemlerde kullanılan gerçek bir CPU olduğu için emülatörler, yeniden üretilmiş cihazlar ve ücretsiz kaynaklarla pratik odaklı öğrenme kolaydır
  • Easy 6502, web üzerinde doğrudan kod yazmayı sağlayan JavaScript tabanlı bir assembler ve simülatör sunarak kısa sürede fikir edinmeyi kolaylaştırır
  • Z80, modern RISC ve x86-x64 de öğrenmeye değerdir, ancak ilk adımda düşük karmaşıklığı sayesinde 6502 öğrenme yükünü azaltır

6502 neden başlangıç için uygundur

  • Assembly programlama, yüksek seviyeli dillere kıyasla donanımla bağlantısı daha güçlü olduğu için, ilk karşılaşılan CPU öğrenme zorluğunu büyük ölçüde etkiler
  • 6502 assembly, günümüzde gerçek dünya uygulamaları yazmak için pek konforlu bir ortam değildir
    • Retro programlamanın kendisine özel bir ilginiz yoksa 6502 üzerinde uzun süre kalmanız gerekmez
  • Başlangıç platformu olarak avantajları basitlik ve gerçekliktir
    • Basit yapısı sayesinde temel kavramlar hızlıca öğrenilebilir
    • Gerçek cihazlar, emülatörler, kitaplar ve çevrimiçi kaynaklar bol olduğu için öğrenme yolunu belirlemek kolaydır
  • Register ve komutlar küçük tutulmuştur

    • 6502’de yalnızca 6 register vardır
      • 1 accumulator
      • 2 index register
      • status register
      • stack register
      • program counter
    • 6502’deki tek 16 bit register program counter’dır
    • Az sayıdaki register, gerçek uygulama yazarken kısıtlayıcı olsa da register’ların rolünü ve nasıl çalıştıklarını anlamaya yardımcı olur
    • Özgün 6502 komut seti yalnızca 56 komut içerir
    • Bu küçük komut kümesiyle bile başlıca komut türleri öğrenilebilir
      • load/store
      • mantıksal işlemler
      • aritmetik işlemler
      • dallanma
    • Bu türler, modern CPU’larda da bir şekilde varlığını sürdürür
    • x86-x64’te register ve komut sayısını saymakla başlamak bile kolay değildir; ARM gibi modern RISC komut setleri de küçük ve basit sayılacak kadar sade değildir

Gerçek ekosistem ve diğer seçenekler

  • Eski ama yaşayan bir ekosistem

    • 6502, 1970’lerin ortasında MOS Technology tarafından Motorola 6800’ün daha ucuz ve sadeleştirilmiş bir sürümü olarak tanıtıldı
      • Aynı ekip daha önce Motorola 6800’ü geliştirmişti
    • Ardından hızla popülerleşerek birçok tanınmış mikrobilgisayarda kullanıldı
      • Apple II
      • Commodore VIC 20
      • Commodore 64
      • BBC micro
    • Bu cihazlar için emülatör bulmak kolaydır ve bazıları için modern yeniden üretim cihazları da vardır
    • 6502’nin ardılları yazının kaleme alındığı sırada hâlâ üretiliyordu ve Olimex’in Neo6502 gibi yeni cihazları da 6502 ailesini çalıştırır
    • Ücretsiz öğrenme kaynakları internette bol miktarda bulunur; bunların önemli bir kısmına 6502.org üzerinden erişilebilir
  • Hemen pratiğe geçmeyi sağlayan öğrenme kaynakları

    • Easy 6502, Nick Morgan’ın kısa sürede 6502’yi denemek isteyenler için uygun olan elektronik kitabıdır
    • Yalnızca metin ve görseller değil, JavaScript ile yazılmış bir 6502 assembler ve simülatörü de içerir
      • Web sayfası üzerinde doğrudan basit 6502 assembly kodu yazılabilir
    • Visual6502.org, assembly öğrenme aracı olmaktan çok 6502’nin basitliğini görsel olarak gösteren bir kaynağa yakındır
  • Diğer başlangıç adaylarından farkı

    • Eğitim amaçlı tasarlanmış sanal CPU’lar temiz ve “kusursuz” bir komut setine sahip olabilir, ancak 6502 kadar zengin öğrenme materyali ve topluluk sunmaları zordur
    • Z80, 6809 ve 68000 gibi retro CPU’lar da iyi seçeneklerdir
      • Bu üç CPU’nun ciddi programlama için 6502’den daha iyi olduğu değerlendirilir
      • Temel kavramları öğrenmede 6502’nin basitliği daha avantajlıdır
    • Z80, 6502’ye göre çok daha fazla register’a sahiptir ve alternatif register seti de içerdiğinden başlamak daha az kolaydır
    • ARM, MIPS ve RISC-V gibi modern RISC mimarileri, ciddi assembly programcılarının bir noktada öğrenmesi gereken yapılardır
      • Ancak başlangıç için ideal değildirler
      • Bunların basitliği, komut setinden çok çipin iç uygulamasına yakındır
    • Modern mikroişlemcilerin çoğu yüksek seviyeli dillerle programlanır; doğrudan assembly komutu yazma deneyimi, CPU tasarım önceliklerinde çok üst sıralarda değildir
    • ARM64’te 64 bitlik bir sabiti register’a yüklemek için bit shift dahil 4 komuta ihtiyaç duyulabilir
      • Buna kıyasla 6502’de bir sabiti register’a yükleme süreci daha basittir
    • x86-x64, modern masaüstü ve sunucularda en yaygın komut seti olarak görülebilir; ARM ise arayı kapatmaktadır
      • 32 bit boyut kısıtına takılmayan ve operand sayısı değişken olan zengin komutları sayesinde bazı açılardan ARM’a göre kodlaması daha kolaydır
      • Ancak yeni başlayanlar için hâlâ oldukça karmaşıktır ve 40 yıllık geçmiş x86-x64’ü daha basit hâle getirmez

1 yorum

 
GN⁺ 2025-02-08
Hacker News yorumları
  • 6502’nin sadeliğinin 68000’den daha iyi olduğuna katılmak zor.
    68000’de daha fazla register ve daha geniş veri tipi genişlikleri var, ama yapısı düzenli. Fiilen A ve D diye iki türün D0~D7, A0~A7 olarak tekrarlandığı bir biçim; D0’da yapılabilen şey D3’te de yapılabilir. Yapısal sadelik ile programlama sadeliği arasında denge kurulmalı; 6502’de biraz karmaşık bir program yazmaya kalkınca kısıtlamalara sürekli çarpıyorsunuz.
    Küçük makinelerin sınırlarını aşmayı öğrenmenin en iyi yolu, aksine o sınırları görmezden gelip yetkin bir yazılım mühendisi olmaktır. Yeni başlayan biri için daha fazla adresleme modu olan, büyük dizilerle uğraşmayı kolaylaştıran, register ve tamsayı genişliği daha bol olan taraftan başlamak daha iyi.

    • Benzer ama farklı bir açıdan bakıyorum. Son birkaç on yılda 6502, 68k, z80, x86/64 ile çoğunlukla demo tarafında uğraştım; bu yazıyı yapay zeka mı yazdı diye düşündüğüm bile oldu.
      6502’de 6 register olduğu için basit olduğu iddia ediliyor, ama 6502’ye sadece bir hafta dokunsanız bile fiilen üç register ile uğraştığınızı anlarsınız. “Semaphore CPU” lakabı da buradan geliyor.
      6502 eğlenceli ve temizdir, ama modern bir yaklaşım istiyorsanız uygun değil. 90’lar tarzı ihtişam yolunu izlemek istiyorsanız MIPS’ten başlamak ya da doğrudan Neon ile başlamak daha iyi. Z80 de register’ları ve karmaşıklığı düşünüldüğünde bugün karşılaşılan şeylere daha benzer sayılabilir.
      Modern assembly’nin kendisi özünde karmaşık değildir. FASM’den başlarsanız zor değildir, ama düşük seviye yaklaşım her zaman çok çabuk karmaşıklaşır. Sonra makrolar yazmaya başlarsınız ve sonunda üstüne kendi yoksul C benzerinizi koyarsınız.
    • Küçük makinelerin sınırlarını aşmayı öğrenmek, yetkin bir yazılım/donanım mühendisi olma yolunda iyi bir adımdır.
      Küçük sistemlerin avantajı, silikondan işletim sistemine ve yazılıma kadar tamamını bütünüyle anlayabilmenizdir.
      6809, 68K’den daha basit ve 6502’den daha güçlüdür; ortogonalliği de iyidir, ama aynı düzeyde bir yazılım tabanı yoktur. Motorola’nın 6809 ve 68K’nin komut kümeleri ile programcı gözünden mimarisinde oldukça iyi bir yön tutturduğunu düşünüyorum. PDP-11/VAX ve NS32K’yi de benzer şekilde ortogonal diye hatırlıyorum.
    • 6502, oyuncak amaçlı assembly için Z80’den daha iyidir, ama bu çok da büyük bir şey söylemek değil. AVR 8-bit komut kümesinden açıkça daha iyi olduğunu söylemek de zor.
      Daha modern bir platform düşünülürse MC68k yerine RISC-V öğretmenin güçlü bir gerekçesi var. RISC-V, yalnızca temel tamsayı komut kümesine bakıldığında çok basit ve zarif; aynı zamanda ARM, Aarch-64, MIPS gibi modern mimarilere benziyor. Hem 32-bit hem 64-bit sürümleri var ve resmi dokümantasyonuna erişmek de kolay.
      MC68k’de bugün pek ilgisi olmayan çok fazla tuhaflık var. Avantajı, birçok donanım platformunda kullanılmış olması ve hâlâ aktif bir retro topluluğa sahip olması denebilir; ama bu daha çok ilgi çekici bir unsur, gerçek anlamda güncel ilgisi düşük.
    • 68K de 24-bit bus, hizalama kısıtları ve dizi indeksleme desteğinin muğlaklığı nedeniyle biraz rahatsız edici. Ölçek çarpanının olmaması da takılıyor.
      68020, komut kümesi mimarisinin C’ye yaklaşabileceği neredeyse en üst noktaya yakın ve kullanım hissi çok iyi.
    • Programlamayı 6510 ile öğrendim, ama 68000 komut kümesinin çok daha iyi, okunması ve öğrenilmesi daha kolay olduğuna katılıyorum. Ben de 68000’i seçerdim.
      Yine de ilk Commodore bilgisayarlarda 65XX kullanmak çok tatmin ediciydi. Bellek koruması olmadığı için video belleğini doğrudan değiştirebiliyor, sprite’lara, fontlara, kenarlıklara ve interrupt’lara dokunabiliyor, kendi kendini değiştiren kod da yazabiliyordunuz. Amiga’daki 68000 assembly ise daha güvenli ve kontrollü bir ortamdı.
  • Assembly öğrenmek için ilk komut kümesi olarak 6502'nin iyi olmadığını düşünüyorum. Zekice ama derin kusurları olan bir mimarinin tuhaflıklarıyla uğraşmaya çok zaman harcatıyor
    Bu dolambaçlı deyimler, MOS'un o dönemdeki araç ve bütçe kısıtlarına bağlı olmayan daha iyi mimarilere pek taşınmıyor
    Küçük ama güçlü ve biraz tuhaflığı olan bir komut kümesi öğrenmek istiyorsanız ARM v6M daha iyi. Bugün hâlâ anlamlı ölçekte üretiliyor; modern açık kaynak araç zincirlerinde debugger, compiler, assembler ve linker desteği de iyi
    Mimarinin açıklığına önem veriyor ve henüz daha az olgun bir platformu göze alabiliyorsanız bir RISC-V MCU seçebilirsiniz. Karar veremiyorsanız RP2350'yi seçin
    ARMv6M komut kümesi küçük; sabit yükleme de belgelerde yazdığı gibi PC'ye göre yükleme kullanıldığında uzun ve sıkıcı komut dizileri gerektirmiyor. Kendi kendini değiştiren koda ya da belleği indekslemek için zero page'e de ihtiyaç yok; register genişliği adres alanıyla aynı. 32 bit olduğu için çoğu 8/16 bit komut kümesine kıyasla öğrenmesi ve öğretmesi daha kolay. Kulağa sıkıcı geliyorsa endişelenmeye gerek yok. ARMv6'da da code golf için kullanılabilecek yeterince tuhaflık var

    • 6502 mimarisini seviyorum ama eski bilgisayarlara ilgi duyan bir yeni başlayanın daha önce assembly deneyimi yoksa genellikle başka bir tarafa yönlendiririm
      PIC16 assembly ile başladım ve çeşitli mimarilerle biraz uğraştım; temizlik açısından en çok MIPS32 hoşuma gitti
      Küçük bir ekleme yapmak gerekirse, Western Design Center'dan yeni üretilmiş 6502, 6502 çekirdekli MCU ve çevre yongaları hâlâ satın alınabiliyor. Mouser gibi yerlerde de satılıyor
      https://www.mouser.com/c/?m=Western%20Design%20Center%20%28W...
    • Eskiden 6502 assembly çok yazdım; 8 bit mimariyle uğraşmaya epey zaman gidiyordu
      Sadece iki 16 bit sayıyı çarpmak bile bir kod yığını gerektiriyor. Yeni bir programcının bununla boğuşması pek faydalı görünmüyor
      Söylediğiniz gibi erken dönem ARM komut kümesi iyi bir seçim
    • ARM'de de yeni başlayanlar için, immediate değerlerin komutun içine sığdırılma biçimi nedeniyle bazı can sıkıcı noktalar var. Bazı immediate değerlerin veya offset'lerin olup bazılarının neden olmadığını sezgisel bulmak zor olabilir
      Elbette bu birçok assembly dili genelinde görülen bir sorun, ama başlangıçta böyle bir sorunu olmayan bir komut kümesiyle başlamak iyi olurdu
    • “Derin kusurlu” derken neyi kastettiğini pek tahmin bile edemiyorum
    • Ben Eater'ın 65C02 breadboard serisini[1] sürekli aklıma getiriyor. O videolarda yapılanları ARM CPU ile de yeniden üretmenin bir yolu var mı?
      [1] https://youtube.com/playlist?list=PLowKtXNTBypFbtuVMUVXNR0z1...
  • Lisans öğrencilerine yıllardır assembly öğreten biri olarak, 6502'nin yeni başlayanlar için iyi olduğuna katılıyorum. Ancak bunun nedeni yalnızca 6502 dilinin kendi avantajları değil
    68K, MIPS, ARM, x86 vb. öğrettim; 6502 öğrettiğimde öğrencilerin tepkisinin iyi olmasının en büyük nedeni CPU'nun etrafındaki bağlamdı. 6502 ile anlaşılması kolay gerçek bir makineyi, yani Nintendo Entertainment System'ı programladık
    Temel memory-mapped I/O, işletim sistemi yok, pipeline komutları yok, delay slot yok, ağ yok, gereksiz gürültü yok. İçinde clock, CPU, birkaç bellek adresi, yardımcı yongalar ve bellek adreslerine eşlenmiş I/O olan basit bir kutuya daha yakın. 6502 en basit komut kümesi değil, ama bu sistemin basitliği büyük yardım sağlıyor
    6502'nin kısıtları da öğrencilerin komutların neden öyle göründüğünü anlaması açısından önemliydi. CPU, dönemin kısıtları içinde tasarlanıp kablolanmıştı ve bu da programlama biçimine yansıyordu
    Yeni başlayanların eğitimi için 6502 ve NES'i seçmek başarılı oldu. 6502 olduğu için değil; 6502, bitleri taşıyan sistemin kendisini basit olmaya zorladığı için
    Öğrenciler 6502'ye dokunup NES tile'larının ekranda hareket ettiğini gördükten sonra, 68000'in bunu nasıl farklı işlediğine, MIPS'in nasıl ortaya çıktığına, pipelining ve delay slot'ların nasıl kullanıldığına, RISC ile CISC farklarının nasıl karşılaştırılacağına doğal biçimde genişlemek kolay oldu. Temel varsa ilerlemek son derece basitleşiyor

  • Bugün kullanılan bir komut kümesini öğrenmeyeceksek, PDP-11 assembler'ın iyi bir başlangıç noktası olarak neredeyse hiç anılmaması biraz şaşırtıcı
    Belki de doğru düzgün ilk öğrendiğim şey PDP-11 olduğu içindir, ama erken mikroişlemcilerin hepsi bir adım geri gibi gelmişti. Z80 assembly'yi birkaç yıl kullandım, ama bugün önermem. Ortogonal bir komut kümesi değil; 6502'de de register sayısı çok az olduğu için assembly yazma hissini doğru vermesi zor

    • Günümüzde PDP-11 bulmak epey zor; işletim sistemi veya compiler vb. edinmek de kolay değil
      PDP-11'i seviyorsanız MSP430'da benzer avantajları biraz sınırlı biçimde, 68000'de ise biraz güçlendirilmiş biçimde elde edebilirsiniz
      Ama aslında böyle kalıntıları unutup RISC-V öğrenmek en iyisi. Ya da çeşitli Arm varyantlarından birini seçin. Kişisel olarak 2000'lerin ortasında çok uğraştığım ARM7TDMI'ye duygusal bir yakınlık duyuyorum. Thumb modu, orijinal Arm modundan biraz daha kolay öğrenilebilir; ama ikisi de RISC-V kadar tatmin edici değil
    • Katılıyorum. PDP-11 çok daha konforlu; karşılaştırma bile olmaz
      Adresleme biçimlerinin RISC'e göre kavramsal olarak daha karmaşık olduğu söylenebilir, ama pratikte 6502 adresleme biçimlerini anlamak PDP-11'inkilerden muhtemelen daha zordur
    • PDP-11 assembly öğrenince C'deki bazı deyimlerin neden öyle olduğu da anlaşılıyor. Örneğin pointer'ın pointer'ı, mimaride doğrudan karşılığı olan yerel bir adresleme biçimi
    • -11 komut kümesi bir mühendislik başyapıtı. DEC, mikrobilgisayar işini tamamen domine etmek için gereken her şeye sahipti
      Ama DEC bu fırsatı görmezden geldi ve IBM, hantal 8086 komut kümesiyle o yeri aldı
      Artık -11 öğrenmenin bir amacı kalmadı
  • Böyle bir sonuca nasıl varıldığını pek anlayamıyorum. Öğrenciler bilgisayar programlamayla ilk kez tanışırken gerçek dünyada kullanım alanı olmayan oyuncak/küçük bir dille başlamak mantıklı olabilir. Ama assembly, öğrenilen ilk dil olmamalı
    Assembly çok pratik bir araçtır ve genelde hata ayıklama ile tersine mühendislikte sık kullanılır. Öyleyse neden çoktan ortadan kalkmış bir platformun assembly’sine zaman harcansın?
    Assembly öğrenmenin en iyi yolu deneme yapmaktır. Sevdiğiniz dilde kod yazıp ara assembly çıktısına bakabilir ya da objdump veya gdb ile içini inceleyebilirsiniz. Değiştirip ne olduğunu da görebilirsiniz
    Eski bilgisayar emülatörleriyle de yapılabilir ama daha zordur. Ekrana tek bir metin yazdırmak için bile o bilgisayarın mimarisini, donanımını ve ROM işlevlerini öğrenmeniz gerekir; bu bilgi de x86-64 üzerinde Linux veya Windows’a neredeyse hiç uygulanamaz

    • C’yi anlamakta zorlanıyordum; 68HC11’de onaltılık ve assembly programlamayı öğrendikten sonra yolum açıldı
      Tamamen yeni başlayan biri için pointer gibi kavramlar fazlasıyla soyut ve anlaşılması güçtü; assembly’de dolaylı adreslemeyi öğrenince C’de pointer’ların neden var olduğu ve nasıl çalıştığı birden netleşti
      Daha önce çoğunlukla Python kullanıyordum ve o çok daha fazla soyutlanmıştı. İnsanlar pointer gibi özelliklerin donanım ve performans kısıtları nedeniyle var olduğunu unutabiliyor. CPU içinde gerçekte neyin neden yapıldığını bilmezseniz sezgisel anlayışınız sınırlı kalır
    • Birkaç ay donanımla uğraşıp assembly programlarsanız, bilgisayarın temel işleyişini üst düzey dillerden tamamen farklı bir şekilde anlarsınız
      Liseden beri tek satır assembly yazmadım ama işlemlerin nasıl yürütüldüğü ve register’ların nasıl çalıştığına dair temel anlayış sayesinde programlama ve optimizasyonun nedenlerini, koşullarını ve istisnalarını çok daha kolay anlar oldum. Temiz ve verimli koda da daha fazla değer vermeye başladım
    • Biz on yaşında çocukken bile BASIC programlama çizgi romanından sonraki ikinci dil olarak bununla gayet iyi başa çıkmıştık
      Geçmişten biraz tat almak isterseniz burada
      https://www.atariarchives.org/
    • Programlama öğrenmenin kabaca iki yolu var. Soyut kavramlardan gerçek uygulamaya inen yukarıdan aşağı yaklaşım; örneğin SICP. Bir de somut düşük seviyeli koddan başlayıp soyutlamaların doğal biçimde ortaya çıkmasını sağlayan aşağıdan yukarı yaklaşım
      Elektronik okuduğum için doğal olarak assembly’den (Motorola HC11) başladım. Dersin sonuna gelindiğinde herkes bağımsız olarak for döngüsü gibi şeyler için makrolar yazmıştı ve buradan C’ye geçiş doğal oldu. C dersinin sonunda C tarzı nesne yönelimi de doğal olarak ortaya çıktı ve sonraki C++ dersine bağlandı
      Bu yaklaşımın dezavantajı, fonksiyonel paradigmaya ya da genel olarak emirsel olmayan paradigmalara doğru kademeli bir yol sunmaması. Ayrıca dilin içeride nasıl çalıştığını sürekli düşünme alışkanlığı oluşuyor; bu bazen ters tepebiliyor. Haskell öğrenmeye çalışırken bile zihnim önce yorumlayıcının nasıl çalıştığını anlamaya yönelmişti
      Assembly öğrenmek yalnızca dili değil, veriyollarını, bellek eşlemeli çevre birimlerini ve makinenin nasıl çalıştığını anlamaktır. Eski platformlarda bu kısım çok daha basittir. Bu yüzden ARM komutları HC11’in CISC komutlarından daha kolay öğrenilse bile, geri kalan her şeyde HC11 yeni başlayanlar için daha dostçadır
    • dmd derleyicisinde -vasm ile derlerseniz üretilen assembly’yi derleme sırasında gösterir. objdump veya -S kullanılsa olmaz mı diye pek iyi değerlendirilmedi, ama doğrudan kullanınca neden kullanışlı olduğunu anlıyorsunuz. Çünkü nesne dosyası oluşturmak için gereken devasa boilerplate olmadan sadece assembly’yi doğrudan çıktılar
      Örneğin AArch64 kod üreteci, daha spesifik olarak da kayan nokta kod üretimi üzerinde çalışıyorsunuz ve şöyle bir fonksiyon var
      float test(float a, float b) { return a * b; }
      dmd -c test.c -arm -vasm ile derlerseniz adres, onaltılık komut, komut mnemonikleri ve komut belirtimi URL’si çıktılanır
      Kodun tamamen doğru olmadığını biliyorum. Hâlâ üzerinde çalışıyorum demiştim :-)
  • Benim için 6502 komut kümesi iyi bir ilk assembly diliydi
    1977’de Oregon’da küçük bir kulübede yaşıyordum ve can sıkıntısından bir Apple II satın aldım. Bir yıl içinde sonradan Apple Writer adını alacak program üzerinde çalışmaya başladım ve tamamını assembly ile yazdım
    https://en.wikipedia.org/wiki/Apple_Writer
    Burada 6502 assembly’sinin epey kaba ve yazması zor olduğu söyleniyor; geriye dönüp bakınca katılıyorum. Ama 1977’de karşılaştıracak bir ölçüt yoktu
    Apple II’de hızlı bir üst düzey dil olmadığı için, küçük programım alternatif eksikliği sayesinde bir Apple ürünü oldu
    Düşününce Apple Writer 8KB RAM içine sığıyordu ama gerçekten iş görüyordu. İnsanların adres listelerini işlemek için kullandığı bir makro dili de vardı
    Yakın zamanda DeepSeek’i yerelde daha kolay çalıştırmak için ana sistemimi 96GB RAM’e yükselttim; bir RTX 4090’ım da var. Birden bu RAM’e neredeyse 12 milyon Apple Writer sığdırabileceğimi fark ettim
    Epey gerçeküstü, ama 1977’den bu yana buna benzer şeyleri söyleme fırsatım çok oldu

  • Başlangıç için assembly dili olarak RISC-V’yi tercih ederim. Tasarımı iyi, daha sezgisel; GCC, LLVM, Rust gibi modern dil ve araç desteği var; QEMU’da ve gerçekten satın alınabilen donanımlarda çalışıyor

    • ARMv7 de bu ölçütleri karşılıyor ve yazması keyifli. Acorn Archimedes’in BBC Basic’i içinde inline olarak kullanılabiliyor
    • Son baktığımda RISC-V’de adının hakkını veren bir makro assembler hâlâ yoktu
    • “Gerçekten satın alınabilen donanım” denecekse, son baktığımda 65C02 de hâlâ üretilip satılıyordu
      Üstelik 14MHz’de bile çalışabiliyor
  • 6502 komut kümesinin basitliği konusu kişisel olarak beni rahatsız eden bir nokta. Böyle bir basitliğin iyi olduğunu düşünenler, Hello World’den öteye hiç geçmemiş gibi görünüyor
    6502 ile orta düzeyde karmaşık bir şeyi programlamak zordur. 8 bit çok kısıtlayıcıdır; örneğin Commodore 64’ün ekran adreslemesine bakmak bile yeter. Çarpma ve bölmeyi kendiniz uygulamanız gerekir; 16 bit toplama/çıkarma da basit olsa bile, verimli yapmak kesinlikle önemsiz değildir
    Amaç temel assembly öğrenmekse, 8086+DOS platformu kıyaslandığında çok daha kolay yönetilir

    • İlk assembly teması bağlamında, çarpma/bölmeyi kendiniz uygulamak zorunda olmak aslında iyi bir şey
      Çeşitli çarpma ve bölme algoritmalarını assembly’ye aktarmak, öğrenmek için çok iyi bir yöntemdir
    • Kısıtlamalar eğlencenin bir parçasıdır. 8086 assembly o kadar eğlenceli değil
      Zaten x86-64, RISC-V veya ARM olmayan, bugünle doğrudan ilgili olmayan bir şey öğreneceksek, 8086’nın avantajının ne olduğundan pek emin değilim
    • En çok yazdığım assembly muhtemelen 8086, daha doğrusu gerçek kipte 80286’dır
      Her anından keyif aldım; segment register’ları da beni pek rahatsız etmedi
  • Bilgisayar bilimi ağırlıklı bir teknik okulda okuyorum; retroyu seven ve kendi arcade makinesini göstermeyi seven bilişim hocamız, belirlenmiş ders planındaki 8808 assembly yerine 6502’ye odaklandı
    Açıkçası hayatımdaki en iyi öğrenme deneyimlerinden biriydi ve başka türlü olmasını istemezdim. Ben Eater’ın breadboard bilgisayarını bile yaptırdı; bu yüzden özellikle elle dokunarak öğrenme hissi çok güçlüydü ve gerçekten ilgi çekiciydi

  • Assembly diliyle ilk tanışmam PDP-10 ile oldu ve elimde yalnızca DEC-10 işlemci kılavuzu vardı
    Tamamen kafam karışmıştı. Yüzlerce komut vardı ve açıklamalar kapalıydı. Register’ın ne olduğunu, accumulator’ın ne olduğunu, adresin ne olduğunu, stack’in ne olduğunu hiç bilmiyordum. David Rolfe, Fortran sürümü Empire’ım için gereken birkaç alt yordamı yazıp biraz yardımcı oldu ama hâlâ yolumu kaybetmiş durumdaydım
    Bir gün arkadaşım Shal Farley’e stack’in ne olduğunu sordum; “Bir tabak yığını düşün. Bir tabak koyuyorsun (push), bir tabak çıkarıyorsun (pop)” dedi. O anda sanki ışık yandı ve hemen anladım
    Sonra küçük bir karttaki 6800 mikroişlemci ile uğraşmaya başladım. Yaklaşık 40 komutu vardı ve hepsi tek bir karta sığıyordu. 40 komutu öğrenmek kolaydı ve birden her şey anlam kazandı
    Yeniden -10 kılavuzuna döndüğümde her şey mantıklı gelmeye başladı