2 poin oleh GN⁺ 2024-12-09 | Belum ada komentar. | Bagikan ke WhatsApp
  • Berkat CD image game Sega Channel September 1996 yang dipublikasikan pada 2024, kini data game dan menu benar-benar dapat dikeluarkan dari image siaran berukuran sekitar 60 MB
  • Sega Channel adalah layanan berlangganan bulanan yang menyiarkan game Genesis secara berulang melalui jaringan kabel, dan pengguna memainkannya dengan adaptor yang mencari lalu mengunduh game yang diinginkan dari loop data berkelanjutan
  • Rantai pembuatan image terdiri dari MENUMAKR, PKSPREAD, dan NSF; simbol debug di NSF.EXE, yang menangani encoding akhir, masih tersisa sehingga menjadi terobosan dalam analisis
  • Pemulihan dilakukan dengan membuat program C yang menghasilkan output sama seperti NSF, lalu memisahkan file menggunakan decoder urutan terbalik dan membuka kompresi .SA untuk memperoleh ROM Genesis standar
  • Konten yang diekstrak mencakup game eksklusif Sega Channel Chessmaster dan Klondike, build baru, ROM ber-watermark, serta ROM menu dan deskripsi game; semuanya menjadi dapat dijalankan di emulator

Latar belakang layanan Sega Channel dan file image

  • Sega Channel adalah layanan game on-demand yang beroperasi dari Juni 1994 hingga Juni 1998
    • Peluncuran nasionalnya dilakukan pada Desember 1994
    • Tergantung operator kabel, pelanggan biasanya dapat membayar 10–15 dolar AS per bulan untuk mengakses pustaka sekitar 50 game Sega Genesis setiap bulan
    • Jumlah pelanggan puncak layanan ini sekitar 250 ribu orang
  • Pelanggan menerima kartrid adaptor yang disambungkan ke Genesis, dan adaptor ini terhubung ke kabel TV
    • Saat booting, adaptor mencari sinyal Sega Channel dan mengunduh menu game
    • Pengunduhan menu biasanya memakan waktu sekitar 20 detik
    • Saat game dipilih, game diunduh ke RAM adaptor selama sekitar 1 menit
    • Game yang diunduh berjalan seperti kartrid ritel biasa
  • Jika daya dimatikan atau tombol menu pada adaptor ditekan, game yang telah diunduh akan terhapus
    • Data simpanan tetap dipertahankan selama pengguna tidak mengunduh game lain
  • Selain game ritel, Sega Channel juga memiliki bagian Test Drives
    • Pengguna dapat memainkan versi dengan batas waktu atau batas konten dari game yang belum dirilis
    • Ada juga game yang hanya tersedia di Sega Channel

Cara image siaran dibuat dan dikirimkan

  • Staf Sega Channel memilih konten seperti jajaran game bulanan, petunjuk game, manual, berita, dan fan art digital
  • Setelah itu, konten dikirim ke Foley Hi-Tech
    • Foley Hi-Tech membuat grafik dan animasi menu game, lalu memasukkan konten bulanan
    • Hasilnya adalah file image game berukuran sekitar 60 MB
  • Image game dibakar ke CD dan dikirim ke fasilitas uplink satelit di Denver, Colorado
    • CD dipasang di komputer server game uplink
    • Server terus menyiarkan data game dalam loop melalui satelit
    • Headend kabel di seluruh Amerika Serikat menerima sinyal satelit dan meneruskannya ke pelanggan
  • Dalam lingkungan ketika operator TV kabel tidak dapat menerima data dari pelanggan, siaran loop berkelanjutan menentukan cara interaksi layanan ini
    • Saat pengguna memilih game, adaptor menemukan data game tersebut di stream data Sega Channel
  • Image game sekitar 60 MB dikirim pada sekitar 12 Mbps menggunakan dua carrier 6 Mbps
    • Jika tidak ada masalah sinyal, pengguna dapat memainkan game yang dipilih dalam satu loop data
    • Salinan duplikat menu dimasukkan ke stream data agar dapat diunduh lebih cepat

Penemuan CD image game September 1996

  • Pada November 2024, pengguna forum Sonic Retro RisingFromRuins menemukan CD image game Sega Channel September 1996 saat memeriksa tumpukan peralatan PC yang dibelinya lama sebelumnya
  • Ia mengunggah foto CD dan salinan file image game dari disk tersebut
  • Tujuan analisisnya adalah mengekstrak data dari file image untuk memeriksa apakah ada game eksklusif atau game prototipe
  • Awalnya, file image diperiksa dengan hex editor
    • Game Genesis memiliki header ASCII standar, dan petunjuk game serta manual yang dapat diunduh diperkirakan juga bisa dibaca
    • Namun pada file sebenarnya tidak terlihat string yang dapat dibaca
    • Kemungkinan file image telah diacak atau dienkripsi menjadi lebih besar

Rantai pembuatan image yang ditemukan dari CD alat pengembangan

  • Pada 2017, pengguna tdijital merilis CD cadangan materi pengembangan Sega Channel milik Foley Hi-Tech, yang menjadi petunjuk penting
    • Dari CD ini sebelumnya telah ditemukan versi kontes Primal Rage, game kuis Sega Channel versi Jepang, serta ROM demo menu Desember 1994–Januari 1996
    • Alat pengembangannya sendiri belum dianalisis secara mendalam
  • Alih-alih merekayasa balik kode pengunduhan di sisi Genesis, pendekatan yang dipilih adalah merekayasa balik alat yang membuat image game
  • Alur pembuatan image terdiri dari tiga tahap
    • MENUMAKR: menambahkan game, deskripsi, teks berita, seni, musik, dan lain-lain untuk membuat biner menu serta file skrip MENUSPIN.BAT
    • PKSPREAD: program buatan Scientific Atlanta yang memvalidasi isi MENUSPIN.BAT dan menghasilkan PMAP.DAT
    • NSF: menggunakan PMAP.DAT untuk meng-encode file input dan membuat file image game akhir
  • Scientific Atlanta adalah perusahaan peralatan kabel yang bekerja sama dengan Sega dalam pembuatan peralatan siaran Sega Channel dan adaptor kartrid
  • Sasaran utama analisis adalah NSF.EXE, yang membuat file image akhir

Reverse engineering NSF.EXE

  • NSF.EXE dikompilasi dalam mode debug, optimisasi dimatikan, dan simbol juga disertakan di file executable
    • Program ini dikompilasi dengan Borland C++ 4.1
    • IDA Pro tidak otomatis mengenali simbol debug, sehingga simbol diperiksa di Turbo Debugger lalu dipindahkan secara manual
  • Alih-alih langsung menulis decoder, terlebih dahulu dibuat program yang setara dengan NSF.EXE
    • Jika dapat menghasilkan output yang identik byte demi byte dengan image buatan DOS NSF.EXE, berarti algoritmenya dapat dianggap telah dipahami dengan benar
    • File image game uji dibuat, lalu implementasi disesuaikan hingga outputnya cocok
  • Setelah satu hari kerja dan beberapa malam debugging, sebuah program C yang menghasilkan output sama dengan NSF.EXE berhasil ditulis
    • Implementasinya dilakukan dengan membuka IDA dan Visual Studio bersamaan, lalu dibuat semirip mungkin dengan assembly
    • Membuat biner hasil kompilasi yang sama dengan asli bukanlah targetnya
    • Implementasi menggunakan deklarasi C99 dan tipe stdint.h, sehingga kemungkinan tidak dapat langsung dikompilasi dengan Borland C++ 4

Metode encoding transmisi NSF

  • Fungsi GetData pada NSF mengambil file input per paket, posisi dalam file, dan metadata Sega Channel dari PMAP.DAT
    • Metadata mencakup ID file dan waktu bermain yang tersedia untuk demo berbatas waktu
    • Setelah itu, fungsi membaca chunk 246 byte dari file data
  • Fungsi LoadFrame menambahkan header di depan paket data dan membalik semua byte data
    • Pembalikan byte bisa jadi terkait pemrosesan transmisi data atau untuk menyamarkan isi paket
    • Di tengah data game disisipkan kode koreksi kesalahan BCH dan bit paritas
    • Hasilnya, data 246 byte diperluas menjadi 288 byte
  • Header berisi berbagai field
    • GameTimeSync dan GameTimeBit menyampaikan nilai batas waktu game dalam satuan bit
    • ServiceID biasanya bernilai 1 dan mungkin terkait dengan Express Games
    • FileID mengidentifikasi secara unik tiap file di dalam image game, dan menu selalu berupa file 0
    • Address menunjukkan lokasi RAM tempat adaptor akan mengunduh file
    • HeaderCRC dan Header Copy juga disertakan
  • Fungsi InterLeave membagi paket menjadi chunk 450 bit dan mengacak bit pada tiap chunk
    • Ini tampaknya dilakukan untuk menyebarkan burst error secara lebih merata agar koreksi kesalahan bekerja dengan baik
  • Proses ini diulang per 10 paket
    • 10 paket digabung menjadi frame 2880 byte
    • Frame ditulis ke disk setelah data dijalin, seperti 2 byte pertama dari paket 0, 2 byte pertama dari paket 1, dan seterusnya
    • Pemrosesan yang sama berlanjut hingga seluruh file image dibuat

Decoding dan dekompresi

  • Setelah perilaku NSF dipahami, sebuah program decoder yang membalik proses secara berurutan ditulis
    • Decoder ini mengekstrak masing-masing file data dari image
  • Output decoder pertama bukan data ROM Genesis yang valid
    • Penyebabnya adalah data game telah dikompresi sebelum transmisi
  • Alat kompresi ROM adalah GAMEEDIT.EXE di dalam CD Foley Hi-Tech
    • Alat ini sendiri tidak perlu direkayasa balik lagi
    • Pengguna GitHub Octocontrabass sudah merekayasa balik format kompresi .SA
  • Dengan alat unsa dari Octocontrabass, file .SA didekompresi menjadi file ROM standar

Game dan konten dari image September 1996

  • Hasil yang paling menonjol adalah dua game eksklusif Sega Channel yang disiarkan pada September 1996
    • Chessmaster: game catur yang ada di berbagai platform pada 1990-an, tetapi tidak tersedia di Genesis
    • Klondike: game solitaire yang dipesan Sega untuk Sega Channel dan diprogram oleh David Crane, yang dikenal lewat Pitfall
  • Game di dalam image diklasifikasikan ke beberapa kategori
    • Konten eksklusif: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
    • Build baru: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
    • Item yang hanya berbeda padding dari dump yang sudah ada: Flashback, Phantasy Star II, The Punisher
    • Dump lama dengan watermark tambahan: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles, dan lainnya
    • Banyak game yang cocok dengan dump yang sudah ada: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III, dan lainnya
  • Black Squirrel dari Sonic Retro menemukan cara menjalankan menu September 1996 di emulator
    • Caranya adalah menyalin byte 0-0x1003FF dari ROM kartrid demo Sega Channel, lalu menambahkan data menu dari image game di belakangnya
    • Fungsi pengunduhan tidak berjalan, tetapi menu dapat dijelajahi
  • Konten terakhir adalah ROM deskripsi game
    • Sekilas terlihat seperti ROM Genesis biasa, tetapi saat dijalankan di emulator hanya menampilkan layar hitam
    • Penyebabnya adalah ROM ini ditautkan dengan basis 0x100000, bukan basis alamat 0 seperti kartrid biasa
    • ROM ini tampaknya dibuat untuk dijalankan langsung dari memori adaptor Sega Channel
    • Setelah menambahkan nol di belakang header agar kode sejajar dengan vektor pada header, ROM dapat dijalankan di emulator
    • Setelah berjalan, muncul menu untuk pengembang yang menampilkan nama internal masing-masing game
  • Melalui proses ini, seluruh konten file image game menjadi dapat dijalankan di emulator

Belum ada komentar.

Belum ada komentar.