2 puan yazan GN⁺ 2024-12-09 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 2024’te kamuya açılan Eylül 1996 Sega Channel oyun imajı CD’si sayesinde, yaklaşık 60 MB’lık yayın imajından oyun ve menü verilerini gerçekten çıkarmak mümkün oldu
  • Sega Channel, Genesis oyunlarını kablo ağı üzerinden döngü halinde tekrar tekrar yayınlayan aylık abonelikli bir hizmetti; kullanıcılar, adaptörün sürekli veri döngüsü içinde istedikleri oyunu bulup indirmesiyle oynuyordu
  • İmaj oluşturma zinciri MENUMAKR, PKSPREAD ve NSF’ten oluşuyordu; son kodlamayı yapan NSF.EXE’de debug sembollerinin kalmış olması analiz için bir dönüm noktası oldu
  • Geri yükleme, NSF ile aynı çıktıyı üreten bir C programı yazıldıktan sonra ters yönde çalışan bir decoder ile dosyaların ayrılması ve standart Genesis ROM elde etmek için .SA sıkıştırmasının açılması akışıyla ilerledi
  • Çıkarılan içerikler arasında Sega Channel’a özel Chessmaster ve Klondike oyunları, yeni build’ler, watermark eklenmiş ROM’lar, menü ve oyun açıklaması ROM’ları vardı; hepsi emülatörde çalıştırılabilir hale geldi

Sega Channel hizmetinin ve imaj dosyasının arka planı

  • Sega Channel, Haziran 1994’ten Haziran 1998’e kadar işletilen bir isteğe bağlı oyun hizmetiydi
    • Ülke çapında lansmanı Aralık 1994’te yapıldı
    • Kablo operatörüne bağlı olarak genellikle aylık 10-15 dolar karşılığında her ay yaklaşık 50 Sega Genesis oyunu içeren bir kütüphaneye erişilebiliyordu
    • Hizmetin ulaştığı en yüksek abone sayısı yaklaşık 250 bin düzeyindeydi
  • Abonelere Genesis’e takılan bir adaptör kartuşu veriliyor, bu adaptör de kablo TV hattına bağlanıyordu
    • Açılışta Sega Channel sinyalini arıyor ve oyun menüsünü indiriyordu
    • Menü indirme işlemi genellikle yaklaşık 20 saniye sürüyordu
    • Bir oyun seçildiğinde oyun yaklaşık 1 dakika içinde adaptör RAM’ine indiriliyordu
    • İndirilen oyun, normal perakende kartuş gibi çalışıyordu
  • Güç kapatıldığında veya adaptördeki menü düğmesine basıldığında indirilen oyun siliniyordu
    • Kayıt verileri, kullanıcı başka bir oyun indirmediği sürece korunuyordu
  • Sega Channel’da perakende oyunların yanı sıra Test Drives bölümü de vardı
    • Çıkış öncesi oyunların süre sınırlı veya içerik sınırlı sürümleri oynanabiliyordu
    • Yalnızca Sega Channel’da sunulan oyunlar da bulunuyordu

Yayın imajının oluşturulma ve iletilme biçimi

  • Sega Channel çalışanları aylık oyun listesini; oyun ipuçları, kılavuzlar, haberler ve dijital fan art gibi içerikleri seçiyordu
  • Ardından içerikler Foley Hi-Tech’e iletiliyordu
    • Foley Hi-Tech oyun menüsü grafiklerini ve animasyonlarını hazırlıyor, aylık içeriği ekliyordu
    • Ortaya çıkan sonuç yaklaşık 60 MB boyutunda bir oyun imajı dosyasıydı
  • Oyun imajı CD’ye yazılıyor ve Colorado Denver’daki uydu uplink tesisine gönderiliyordu
    • CD, uplink oyun sunucusu bilgisayarına kuruluyordu
    • Sunucu oyun verilerini uydu üzerinden sürekli döngü halinde yayınlıyordu
    • ABD genelindeki kablo headend’leri uydu sinyalini alıp abonelere aktarıyordu
  • Kablo TV operatörlerinin abonelerden veri alamadığı bir ortamda, hizmetin etkileşim biçimini sürekli döngü yayını belirliyordu
    • Kullanıcı bir oyun seçtiğinde adaptör, Sega Channel veri akışı içinde ilgili oyun verisini buluyordu
  • Yaklaşık 60 MB’lık oyun imajı, 2 adet 6 Mbps carrier kullanılarak yaklaşık 12 Mbps hızla iletiliyordu
    • Sinyal sorunu yoksa kullanıcı seçtiği oyunu tek bir veri döngüsü içinde oynayabiliyordu
    • Daha hızlı indirilebilmesi için menünün yinelenen kopyaları veri akışına ekleniyordu

Eylül 1996 oyun imajı CD’sinin bulunması

  • Kasım 2024’te Sonic Retro forum kullanıcısı RisingFromRuins, uzun süre önce satın aldığı PC ekipmanı yığınını incelerken Eylül 1996 Sega Channel oyun imajı CD’sini buldu
  • CD’nin fotoğraflarını paylaştı ve diskteki oyun imajı dosyasının bir kopyasını yükledi
  • Analizin amacı, imaj dosyasından verileri çıkararak özel oyun veya prototip oyun olup olmadığını kontrol etmekti
  • İlk olarak imaj dosyası bir hex editor ile incelendi
    • Genesis oyunlarında standart ASCII header bulunduğu, oyun ipuçları ve indirilebilir kılavuzların da okunabilir olacağı tahmin ediliyordu
    • Gerçek dosyada okunabilir string görünmüyordu
    • İmaj dosyasının scramble edilmiş veya şifrelenmiş olma ihtimali güçlendi

Geliştirme aracı CD’sinde bulunan imaj oluşturma zinciri

  • 2017’de kullanıcı tdijital’in Foley Hi-Tech’e ait Sega Channel geliştirme materyalleri yedek CD’sini yayımlaması önemli bir ipucu oldu
    • Bu CD’de Primal Rage yarışma sürümü, Japonya sürümü Sega Channel quiz oyunu, Aralık 1994-Ocak 1996 menü demo ROM’ları gibi içerikler daha önce tespit edilmişti
    • Geliştirme araçlarının kendisi ise derinlemesine analiz edilmemişti
  • Genesis tarafındaki indirme kodunu tersine mühendislik etmek yerine, oyun imajını oluşturan araçları tersine mühendislik etme yaklaşımı seçildi
  • İmaj oluşturma akışı üç aşamadan oluşuyordu
    • MENUMAKR: Oyunları, açıklamaları, haber metinlerini, görselleri, müziği vb. ekleyerek menü binary’sini ve MENUSPIN.BAT script dosyasını oluşturuyordu
    • PKSPREAD: Scientific Atlanta tarafından yapılmış bir programdı; MENUSPIN.BAT içeriğini doğruluyor ve PMAP.DAT çıktısı üretiyordu
    • NSF: PMAP.DAT kullanarak giriş dosyalarını encode ediyor ve nihai oyun imajı dosyasını oluşturuyordu
  • Scientific Atlanta, Sega Channel yayın ekipmanları ve kartuş adaptörü üretiminde Sega ile çalışan bir kablo ekipmanı şirketiydi
  • Analizin ana hedefi, nihai imaj dosyasını oluşturan NSF.EXE idi

NSF.EXE tersine mühendisliği

  • NSF.EXE debug modunda derlenmişti, optimizasyon kapalıydı ve semboller executable içine dahil edilmişti
    • Program Borland C++ 4.1 ile derlenmişti
    • IDA Pro debug sembollerini otomatik tanımadığı için semboller Turbo Debugger’da kontrol edilip elle taşındı
  • Doğrudan decoder yazmak yerine önce NSF.EXE’ye eşdeğer bir program yazıldı
    • DOS NSF.EXE’nin ürettiği imajla byte düzeyinde aynı çıktıyı üretebiliyorsa algoritmanın doğru anlaşıldığı kabul edilebilirdi
    • Bir test oyun imajı dosyası oluşturuldu ve çıktı eşleşecek şekilde implemente edildi
  • Bir günlük çalışma ve birkaç akşamlık debugging sonunda NSF.EXE ile aynı çıktıyı veren bir C programı yazıldı
    • IDA ve Visual Studio birlikte açık tutularak assembly’ye olabildiğince yakın uyarlama yöntemi izlendi
    • Orijinalle aynı derlenmiş binary’yi oluşturmak hedeflenmedi
    • Implementasyonda C99 deklarasyonları ve stdint.h tipleri kullanıldığı için Borland C++ 4’te olduğu gibi derlenmeyebilir

NSF’nin iletim için kullandığı encoding yöntemi

  • NSF’nin GetData fonksiyonu PMAP.DAT içinden paket başına giriş dosyasını, dosya içi konumu ve Sega Channel metadata’sını alıyordu
    • Metadata; dosya ID’si ve süre sınırlı demolarda oynanabilir süre gibi bilgileri içeriyordu
    • Ardından veri dosyasından 246 byte’lık chunk okuyordu
  • LoadFrame fonksiyonu veri paketinin başına header ekliyor ve tüm veri byte’larını ters çeviriyordu
    • Byte inversion, veri iletimiyle ilgili bir işlem veya paket içeriğini gizlemeye yönelik bir işlem olabilir
    • Oyun verisinin ortasına BCH hata düzeltme kodu ve parity bit’leri ekleniyordu
    • Bunun sonucunda 246 byte veri 288 byte’a genişliyordu
  • Header’da çeşitli alanlar yer alıyordu
    • GameTimeSync ve GameTimeBit, oyun süre sınırı değerini bit düzeyinde iletiyordu
    • ServiceID genellikle 1’di ve Express Games ile ilişkili olma ihtimali vardı
    • FileID, oyun imajı içindeki her dosyayı benzersiz biçimde tanımlıyordu; menü her zaman dosya 0’dı
    • Address, adaptörün dosyayı RAM’de nereye indireceğini gösteriyordu
    • HeaderCRC ve Header Copy de dahildi
  • InterLeave fonksiyonu paketleri 450 bit’lik chunk’lara ayırıyor ve her chunk’ın bit’lerini karıştırıyordu
    • Bunun burst hatalarını daha dengeli dağıtarak hata düzeltmenin iyi çalışmasını sağlamaya yönelik bir işlem olduğu düşünülüyor
  • Bu süreç 10 paketlik birimler halinde tekrarlanıyordu
    • 10 paket 2880 byte’lık frame olarak gruplanıyordu
    • Frame, paket 0’ın ilk 2 byte’ı, paket 1’in ilk 2 byte’ı şeklinde verileri ördükten sonra diske yazılıyordu
    • Aynı işlem tüm imaj dosyası oluşturulana kadar sürüyordu

Decode etme ve sıkıştırmayı açma

  • NSF’nin davranışı anlaşıldıktan sonra, süreci ters yönde geri alan bir decoder programı yazıldı
    • Decoder, imajdan tekil veri dosyalarını çıkarıyordu
  • Decoder’ın ilk çıktısı geçerli Genesis ROM verisi değildi
    • Çünkü oyun verisi iletimden önce sıkıştırılmıştı
  • ROM sıkıştırma aracı Foley Hi-Tech CD’sindeki GAMEEDIT.EXE idi
    • Bu aracın kendisini yeniden tersine mühendislik etmeye gerek kalmadı
    • GitHub kullanıcısı Octocontrabass, .SA sıkıştırma biçimini zaten tersine mühendislik etmişti
  • Octocontrabass’ın unsa aracıyla .SA dosyalarının sıkıştırması açılarak standart ROM dosyaları elde edildi

Eylül 1996 imajından çıkan oyunlar ve içerikler

  • En dikkat çekici sonuç, Eylül 1996’da yayınlanan Sega Channel’a özel 2 oyun oldu
    • Chessmaster: 1990’larda birçok platformda bulunan, ancak Genesis’te olmayan satranç oyunu
    • Klondike: Sega’nın Sega Channel için sipariş ettiği ve Pitfall ile bilinen David Crane’in programladığı solitaire oyunu
  • İmaj içindeki oyunlar birkaç kategoriye ayrıldı
    • Özel içerik: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
    • Yeni build’ler: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
    • Mevcut dump’lardan yalnızca padding bakımından farklı olanlar: Flashback, Phantasy Star II, The Punisher
    • Watermark eklenmiş mevcut dump’lar: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles vb.
    • Mevcut dump’larla eşleşen çok sayıda oyun: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III vb.
  • Sonic Retro’dan Black Squirrel, Eylül 1996 menüsünü emülatörde çalıştırmanın bir yolunu buldu
    • Sega Channel demo kartuş ROM’unun 0-0x1003FF byte’larını kopyalayıp oyun imajının menü verisini arkasına ekleme yöntemiydi
    • İndirme işlevi çalışmıyor, ancak menü gezilebiliyordu
  • Son içerik oyun açıklaması ROM’u idi
    • Normal bir Genesis ROM gibi görünüyordu, fakat emülatörde çalıştırıldığında yalnızca siyah ekran gösteriyordu
    • Nedeni, normal kartuş gibi adres 0 baz alınarak değil, 0x100000 baz alınarak link edilmiş olmasıydı
    • Sega Channel adaptör belleğinden doğrudan çalıştırılmak üzere yapılmış gibi görünüyordu
    • Header’ın arkasına sıfırlar eklenip kodun header’daki vector’larla hizalanması sağlanınca emülatörde çalıştı
    • Çalıştırıldıktan sonra her oyunun dahili adının görülebildiği geliştirici menüsü belirdi
  • Bu süreç sonucunda oyun imajı dosyasındaki tüm içerikler emülatörde çalıştırılabilir hale geldi

Henüz yorum yok.

Henüz yorum yok.