Motorola 68000 CISC Mimarisi: 16/32-Bit Hibrit Tasarım ve Donanım Mirası

1979’da Teksas’ın Austin kentindeki Motorola yarı iletken tasarım merkezinde, bilişim tarihinin seyrini değiştirecek bir silikon mimarisi tamamlandı. Kod adı “MACSS” (Motorola Advanced Computer System on Silicon) olan bu yonga, Motorola’nın efsanevi 8-bitlik MC6800 serisinin halefi olarak adlandırılmış ve yaklaşık 68.000 transistörlük yoğunluğuyla tarihe geçmişti: Motorola 68000 (MC68000). Dönemin rakibi Intel, 8086 ile 8-bitlik mirası 16-bitlik hantal bellek segmentleriyle yamamaya çalışırken; Motorola mühendisleri geleceğin 32-bit dünyasını öngörerek tamamen simetrik, ortogonal ve doğrusal bir programlama modeli tasarladı. 68000 yalnızca bir mikroişlemci değildi; Commodore Amiga’nın grafik devrimini, ilk Apple Macintosh’un grafiksel arayüzünü (GUI), Sun Microsystems iş istasyonlarını, Atari ST’nin MIDI stüdyolarını ve Sega Mega Drive’ın yüksek hızlı oyunlarını mümkün kılan silikon omurgaydı.[1][2]

⚡ Bir Bakışta: Motorola MC68000 Donanım ve Mimari Künyesi

Transistör Sayısı ve Üretim Teknolojisi: ~68.000 Transistör • 3.5 μm HMOS Mimarisi (DIP64, PLCC68, PGA68 Kılıf)[1]
Programlama Modeli vs Harici Veri Yolu: Dahili: 32-Bit Doğrusal Yazmaçlar • Harici: 16-Bit Veri Yolu (D0-D15)
Fiziksel Adresleme ve Bellek Sınırı: 24-Bit Harici Adres Yolu (A1-A23 + /UDS, /LDS) • 16 MB Doğrusal (Flat) Bellek Alanı
Dahili ALU Yapısı: Üç adet 16-Bit ALU ünitesi (Veri ve Adres Aritmetiği için hibrit yürütme)[1]
Yazmaç Mimarisi (Registers): 8 adet 32-bit Veri (D0-D7), 8 adet 32-bit Adres (A0-A7; A7 çift modlu: USP/SSP)
Gerçek Donanım Saat Frekansları: Amiga PAL: 7.09 MHz • Amiga NTSC: 7.16 MHz • Mac 128K/Plus: 7.83 MHz • Mega Drive: 7.67 MHz
Ayrıcalık Düzeyleri (Privilege Levels): Kullanıcı (User) ve Denetleyici (Supervisor) Modu (Donanımsal OS bellek koruması)

İlk Dönemeç: 16/32-Bit Hibrit Tasarım ve Ortogonal Mimari Zaferi

1970’lerin sonunda mikroişlemci pazarı 8-bitlik sınırlardan kurtulmaya çalışıyordu. Intel, 1978’de duyurduğu 8086 işlemcisinde eski 8080 mimarisiyle geriye dönük uyumluluk sağlamak amacıyla segmentli bellek modeli (segment:offset) kullandı. Intel dünyasında bir programcı 64 kilobaytlık bir bellek bloğunun dışına çıkmak istediğinde, segment yazmaçlarını (CS, DS, SS, ES) sürekli yeniden hesaplamak ve değiştirmek zorundaydı. Bu durum assembly programcıları ve derleyici geliştiricileri için ciddi bir kısıttı.

Motorola mühendisleri ise farklı bir vizyon seçti: 68000’in yazılımcıya görünen programlama modeli (16 adet 32-bit genel amaçlı yazmaç ve program sayacı) tam 32-bit olarak kurgulandı. Bellek, 0’dan 16 Megabayta kadar uzanan kesintisiz, segmentsiz, düz bir cetvel (flat linear memory) gibi adresleniyordu. Herhangi bir veri yazmacı (D0-D7) bayt (8-bit), word (16-bit) veya long-word (32-bit) olarak aynı komut dizilimiyle işlenebiliyordu. Bu tasarım felsefesine ortogonal mimari denir: Komutlar hangi yazmaç veya veri genişliği üzerinde çalışırsa çalışsın kurallar simetriktir.[1][2]

Silikondaki Mühendislik Gerçeği (ALU Genişliği): Programcı açısından 68000 tamamen 32-bitlik bir işlemci gibi görünse de, silikon katmanında maliyet ve transistör bütçesi nedeniyle hibrit bir mühendislik uygulanmıştı. 1979’da bir çipe tek parça 32-bitlik monolitik bir ALU yerleştirmek transistör sayısını ve çip alanını aşırı büyütecekti. Bu yüzden Motorola, MC68000 içine üç adet 16-bitlik ALU ünitesi yerleştirdi (biri veri işlemleri için, ikisi adres indeksleme ve program sayacı güncellemeleri için). İşlemci 32-bitlik bir veri operasyonunu (örneğin ADD.L D1, D0) 16-bitlik veri ALU’sundan iki ardışık adımda geçirerek tamamlıyordu. Gerçek donanımsal 32-bit ALU ise ancak 1984 yılında çıkan MC68020 işlemcisiyle silikona dahil edildi.[1]

Benzer şekilde, anakart maliyetlerini makul seviyede tutmak için harici pin sayısı sınırlandı: Veri yolu 16 pine (D0-D15), adres yolu ise 24 pine indirildi. MC68000 üzerinde fiziksel bir A0 adresi pini dahi bulunmaz; bunun yerine /UDS (Upper Data Strobe) ve /LDS (Lower Data Strobe) hatları kullanılarak 16-bitlik veri yolunun üst baytı, alt baytı veya her ikisi birden seçilir. Böylece 68000, 32-bitlik bir veriyi bellekten okurken dışarıya iki adet 16-bitlik bus döngüsü yapar, ancak bunu iç yazmaçlarında tek bir komutla birleştirir.

İkinci Dönemeç: “Dirty 24-Bit” Sendromu ve Macintosh Krizinin Anatomisi

Motorola 68000’in fiziksel olarak 24 adet adres pini barındırması, işlemcinin azami 2²⁴ = 16.777.216 bayt (16 MB) fiziksel bellek sürebilmesi anlamına geliyordu. Ancak programcının kullandığı adres yazmaçları (A0-A7) ve Program Sayacı (PC) 32-bit genişliğindeydi! Yani adres işaretçilerinin en üstteki 8 biti (bit 24 ila bit 31), harici pinlere fiziksel olarak bağlı değildi ve MC68000 donanımı tarafından tamamen görmezden geliniyordu.[3]

Bu durum, 1984 yılında ilk Apple Macintosh’u geliştiren mühendislerin aklına bellek tasarrufu sağlayan pratik ama tehlikeli bir yöntem getirdi. Belleğin 128 KB ile son derece kısıtlı olduğu o dönemde, Macintosh Bellek Yöneticisi (Memory Manager) işaretçilerin (Master Pointer) kullanılmayan bu üst 8 bitini sistem durum bayrakları (flags) olarak kullanmaya başladı:

  • Bit 31: Bellek bloğu kilitli mi (Handle Locked)?
  • Bit 30: Bellek bloğu sistem tarafından boşaltılabilir mi (Handle Purgeable)?
  • Bit 29: İşaret edilen blok bir kaynak (Resource) verisi mi?

Bu mimari hileye bilişim literatüründe “Dirty 24-Bit” (Kirli 24-Bit) sendromu denir. 68000 işlemcisi üst 8 biti donanımsal olarak yoksaydığı için sistem sorunsuz çalışıyordu. Ancak 1987 yılında Apple, tam 32-bit harici adres yoluna (4 GB fiziksel bellek uzayı) sahip Motorola 68020 tabanlı Macintosh II modelini piyasaya sürdüğünde büyük bir kriz patlak verdi: Artık işlemci işaretçilerin üst 8 bitini de bellek adresi olarak okuyor ve yazılımlar belleğin var olmayan noktalarına atlayarak anında sistem çökmesine (bus error / crash) yol açıyordu![3]

Apple, bu mirası temizlemek için System 7’ye kadar yıllarca süren “32-Bit Temizliği” (32-bit clean) operasyonları yürütmek zorunda kaldı; hatta Connectix firmasının geliştirdiği MODE32 adlı ünlü sistem yaması Apple tarafından lisanslanarak kullanıcılara dağıtıldı.

Üçüncü Dönemeç: Amiga OCS ile Zaman Paylaşımlı DMA Dansı

Motorola 68000’in donanım dünyasındaki en zarif entegrasyonu, Jay Miner ve ekibinin geliştirdiği Commodore Amiga (1000, 2000, 500) mimarisinde gerçekleşti. MC68000, temel bir bellek erişim döngüsünü (bus cycle) en az 4 saat darbesinde (clock cycle) tamamlar. İşlemci bir döngüde bellekten komut veya veri okurken, sonraki döngüde dahili komut çözme ve ALU operasyonuyla meşgul olur ve harici veri yolunu boş bırakır.[4]

Amiga’nın özel çip seti (Agnus, Denise, Paula), sistem veri yolunu 68000’in saat frekansıyla (PAL modellerinde 7.09379 MHz, NTSC modellerinde 7.15909 MHz) kusursuz bir senkronizasyona oturttu. Agnus bellek denetleyicisi, saat döngülerini çift (even) ve tek (odd) zaman dilimlerine (interleaved DMA time slots) ayırdı:

  • Çift Saat Döngüleri (Even Slots): Özel çiplere tahsis edildi. Copper raster satırlarını güncellerken, Paula ses kanallarını beslerken ve Blitter bitmap grafikleri taşırken bu yuvaları kullanır.
  • Tek Saat Döngüleri (Odd Slots): Doğrudan 68000 işlemcisine ayrılmıştır.

Mühendislik Sınırı ve DMA Çekişmesi (Contention): Bu mekanizma sayesinde standart düşük çözünürlüklü (Lores) modda 4 bitplane’e kadar (16 renk) grafik çizilirken, özel çipler işlemcinin hızını 1 saat döngüsü bile yavaşlatmadan çalışabilirdi. Ancak ekran modu 5 bitplane (32 renk), 6 bitplane (HAM/EHB) veya yüksek çözünürlüğe (Hires – 640 piksel) çıkarıldığında, video verisini RAM’den ekrana yetiştirmek zorunda olan Denise ve Agnus, CPU’ya tahsis edilen tek saat yuvalarına da müdahale etmeye (bus contention) başlardı. Ayrıca donanım programcısı Blitter’ın BLTPRI (Blitter Nasty) kontrol bitini etkinleştirdiğinde, Blitter veri yolunu tamamen tekeline alarak işlemciyi transfer bitene kadar durdururdu (bus starvation). Bu hassas zamanlama dengesi, dönemin Amiga demoscene programcılarının milisaniyelik saat hesaplarıyla yazdığı kodların temelini oluşturdu.[4]

68000 Komut Seti ve Saat Döngüsü Zamanlaması

Dönemin oyun ve sistem programcılarının 68000’e hayran kalmasının sebebi, yazmaç zenginliği ve güçlü adresleme modlarıydı. Örneğin birden fazla yazmacı tek bir komutla yığına (stack) saklamak veya geri yüklemek için MOVEM (Move Multiple) komutu kullanılıyordu:

; 68000 Assembly: Alt Rutin Giriş ve Çıkış Örneği
DrawSprite:
    ; TEK BİR KOMUTLA 15 yazmacı yığına kaydet.
    ; Zamanlama Notu: Bu işlem "tek bir saatte" değil; komut çözme (8 cycle) +
    ; her 32-bit yazmaç için 8 cycle olmak üzere toplam ~128 saat döngüsünde yürütülür!
    MOVEM.L D0-D7/A0-A6, -(SP)   

    ; Çekirdek Mantık: Otomatik artımlı adresleme modu (Post-increment)
    MOVE.L  (A0)+, D0            ; A0 adresindeki 32-bit veriyi D0'a al ve A0'ı 4 bayt artır (12 cycle)
    ADD.L   D1, D0               ; 32-bit toplama yap (Hibrit 16-bit ALU ile 8 cycle)
    MOVE.L  D0, (A1)             ; Sonucu hedef bellek adresine yaz (12 cycle)

    ; Yığından 15 yazmacı tek komutla geri yükle (~132 saat döngüsü)
    MOVEM.L (SP)+, D0-D7/A0-A6   
    RTS                          ; Alt rutinden dön (16 cycle)

Yukarıdaki assembly kesitinde görüldüğü üzere, 68000’de tek bir komutla birden çok işlem yapılabilse de her bellek transferi 4 saatlik bir bus döngüsüne tabidir. 32-bitlik bir long-word yazma işlemi harici veri yolu 16-bit olduğu için iki adet bus cycle (en az 8 saat darbesi) tüketir. Bu zamanlama disiplini, modern mimarilerin RISC optimizasyonlarına giden yolun da kapısını aralamıştır.

1980’ler Mikroişlemci Karşılaştırma Matrisi

Mimari Ölçüt Motorola MC68000 Intel 8086 / 8088 MOS Technology 6502
Dahili Model / Harici Veri Yolu 32-Bit Yazmaçlar / 16-Bit Veri (D0-D15) 16-Bit Dahili / 16-Bit (8086) veya 8-Bit (8088) Saf 8-Bit Dahili ve Harici
Adresleme Alanı ve Bellek Modeli 16 MB Doğrusal (Linear Flat, Segment Yok) 1 MB Segmentli (64 KB Segment Blokları) 64 KB Düz Bellek
Genel Amaçlı Yazmaç Düzeni 16 Adet 32-Bit (8 Veri D0-D7, 8 Adres A0-A7) 4 Adet 16-Bit Veri (AX, BX, CX, DX) + İndeks/Segment 3 Adet 8-Bit (A, X, Y) + 8-Bit SP
İşletim Sistemi Ayrımı (Privilege) Kullanıcı (User) ve Denetleyici (Supervisor) Modu Donanımsal Koruma Yok (Gerçek Mod) Donanımsal Koruma Yok
Tipik Donanım Platformları Amiga 500, Mac 128K/Plus, Mega Drive, Atari ST IBM PC (5150), PC XT ve Endüstriyel Klonlar Commodore 64, Apple II, NES, Atari 2600

Sonuç ve Mühendislik Mirası

Motorola 68000 ailesi, günümüzde x86 ve ARM’ın gölgesinde kalmış gibi görünse de, modern 64-bit doğrusal bellek mimarilerinin, Unix iş istasyonlarının ve grafik arayüzlü işletim sistemlerinin temellerini atan gerçek öncüdür. Bir Amiga’nın ekranda çoklu pencereleri akıcı şekilde kaydırması, Macintosh’un pencereleme motoru veya bir Mega Drive’ın Sonic the Hedgehog’u yüksek hızda koşturabilmesi; rastgele bir donanım şansı değil, 1979’da silikona işlenen 32-bitlik ortogonal mimari felsefesinin doğrudan sonucudur.


📚 Doğrulanmış Kaynaklar ve Referanslar

  1. Motorola Semiconductor Products Inc. • M68000 Programmer’s Reference Manual (Motorola, 1992) • Motorola M68000 Programmer’s Reference Manual (arşiv)
  2. Byte Magazine • The Motorola MC68000 Microprocessor Architecture Analysis (September 1979, Sayı 9) • Byte Dergisi 68000 Mimari İncelemesi Arşivi
  3. Apple Computer • Inside Macintosh: Memory Management (32-Bit Cleanliness, Master Pointers and MODE32) • Inside Macintosh Bellek Mimarisi Referansı
  4. Commodore-Amiga Inc. • Amiga Hardware Reference Manual (Addison-Wesley) • Amiga Donanım Referans Kılavuzu (Agnus, Copper ve Interleaved DMA Mimarisi)

68000 mimarisini kullanan efsanevi bilgisayarı ve özel çip setini Amiga Özel Çip Mimarisi ve Jay Miner’ın Gizli Savaşı Dosyamızda keşfedebilirsiniz.

DigiLiner editoryal ekibi; iki bağımsız kaynak doğrulaması, düzeltme kaydı ve insan denetimli yapay zekâ kullanımı ilkeleriyle yayın yapar. Editorial Policy

Yorum bırakın

Yorumlar yayımlanmadan önce incelenir. Bağlantı ve tanıtım içeren mesajlar yayımlanmaz.