Sega Channel गेम इमेज फ़ाइल फ़ॉर्मैट की रिवर्स इंजीनियरिंग
(infochunk.com)- 2024 में सार्वजनिक हुई सितंबर 1996 की Sega Channel गेम इमेज CD की बदौलत, लगभग 60MB की broadcast इमेज से गेम और menu data को वास्तव में निकाला जा सका
- Sega Channel एक monthly subscription सेवा थी जो cable network पर Genesis games को लगातार broadcast करती थी, और user का adapter continuous data loop में से मनचाहा गेम ढूंढकर download कर खेलने देता था
- image creation chain MENUMAKR, PKSPREAD, NSF से होकर जाती थी, और final encoding करने वाले NSF.EXE में debug symbols बचे हुए थे, जो analysis का breakthrough बने
- restoration की प्रक्रिया में पहले NSF जैसा ही output देने वाला C program बनाया गया, फिर reverse decoder से files अलग की गईं और .SA compression खोलकर standard Genesis ROM हासिल किए गए
- निकाले गए content में Sega Channel exclusive games Chessmaster और Klondike, नए builds, watermark लगे ROM, menu और game description ROM शामिल थे, और सभी emulator में चलाने योग्य स्थिति में आ गए
Sega Channel सेवा और image file का background
- Sega Channel जून 1994 से जून 1998 तक चलने वाली game on-demand service थी
- nationwide launch दिसंबर 1994 में हुआ
- cable operator के हिसाब से आम तौर पर महीने के 10~15 डॉलर देकर हर महीने लगभग 50 Sega Genesis games की library access की जा सकती थी
- service के peak subscribers लगभग 2.5 लाख के स्तर पर थे
- subscriber को Genesis से जुड़ने वाला adapter cartridge मिलता था, और यह adapter cable TV line से जुड़ता था
- boot पर यह Sega Channel signal खोजता और game menu download करता था
- menu download में आम तौर पर करीब 20 सेकंड लगते थे
- game चुनने पर adapter RAM में लगभग 1 मिनट तक download होता था
- downloaded game सामान्य retail cartridge की तरह काम करता था
- power बंद करने या adapter का menu button दबाने पर downloaded game मिट जाता था
- saved data तब तक बना रहता था जब तक user कोई दूसरा game download नहीं करता था
- Sega Channel में retail games के अलावा Test Drives section भी था
- release से पहले games के time-limited या content-limited versions खेले जा सकते थे
- कुछ games केवल Sega Channel पर ही उपलब्ध थे
broadcast image कैसे बनाई और deliver की जाती थी
- Sega Channel staff monthly game lineup और game hints, manuals, news, digital fanart जैसे content चुनता था
- इसके बाद content Foley Hi-Tech को भेजा जाता था
- Foley Hi-Tech game menu graphics और animations बनाता और monthly content insert करता था
- नतीजा लगभग 60MB size की game image file होती थी
- game image को CD पर burn करके Colorado, Denver के satellite uplink facility में भेजा जाता था
- CD को uplink game server computer में install किया जाता था
- server game data को satellite के जरिए लगातार loop में broadcast करता था
- पूरे अमेरिका के cable headends satellite signal लेकर subscribers तक पहुंचाते थे
- ऐसे माहौल में, जहां cable TV operator subscribers से data receive नहीं कर सकता था, continuous loop broadcast ही service के interaction model को तय करता था
- user game चुनता तो adapter Sega Channel data stream में वह game data ढूंढ निकालता था
- लगभग 60MB game image 2 6Mbps carriers का इस्तेमाल करके करीब 12Mbps पर transmit होती थी
- signal problem न हो तो user data के एक loop के भीतर चुना हुआ game खेल सकता था
- menu को जल्दी download किया जा सके, इसलिए data stream में उसकी duplicate copies डाली जाती थीं
सितंबर 1996 की game image CD की खोज
- नवंबर 2024 में Sonic Retro forum user RisingFromRuins ने बहुत पहले खरीदे गए PC equipment के ढेर को जांचते समय सितंबर 1996 की Sega Channel game image CD खोजी
- उन्होंने CD की तस्वीरें डालीं और disc की game image file की copy upload की
- analysis का लक्ष्य image file से data extract करके यह देखना था कि क्या इसमें exclusive games या prototype games हैं
- शुरुआत में hex editor से image file देखी गई
- Genesis games में standard ASCII header होता है, और अनुमान था कि game hints और downloadable manuals भी पढ़े जा सकेंगे
- असल file में पढ़ने लायक strings नहीं दिखीं
- image file के scrambled या encrypted होने की संभावना बढ़ गई
development tools CD में मिली image creation chain
- 2017 में user tdijital द्वारा Foley Hi-Tech की Sega Channel development materials backup CD सार्वजनिक करना एक अहम clue बना
- इस CD में Primal Rage contest version, Japanese Sega Channel quiz game, दिसंबर 1994~जनवरी 1996 menu demo ROMs आदि पहले देखे जा चुके थे
- development tools खुद गहराई से analyze नहीं किए गए थे
- Genesis side के download code को reverse engineer करने के बजाय, game image बनाने वाले tools को reverse engineer करने का approach चुना गया
- image creation flow तीन steps का था
- MENUMAKR: games, descriptions, news text, art, music आदि जोड़कर menu binary और
MENUSPIN.BATscript file बनाता है - PKSPREAD: Scientific Atlanta द्वारा बनाया गया program, जो
MENUSPIN.BATcontent validate करता है औरPMAP.DAToutput करता है - NSF:
PMAP.DATका इस्तेमाल करके input files encode करता है और final game image file बनाता है
- MENUMAKR: games, descriptions, news text, art, music आदि जोड़कर menu binary और
- Scientific Atlanta एक cable equipment company थी, जिसने Sega Channel broadcast equipment और cartridge adapter बनाने में Sega के साथ काम किया था
- analysis का मुख्य target final image file बनाने वाला NSF.EXE था
NSF.EXE reverse engineering
- NSF.EXE debug mode में compile किया गया था, optimization बंद था और symbols भी executable में शामिल थे
- यह program Borland C++ 4.1 से compile किया गया था
- IDA Pro debug symbols को automatically पहचान नहीं पाया, इसलिए Turbo Debugger में symbols देखकर उन्हें manually transfer किया गया
- सीधे decoder लिखने के बजाय, पहले NSF.EXE के बराबर program लिखा गया
- अगर DOS NSF.EXE द्वारा बनाई गई image जैसा byte-for-byte identical output बनाया जा सके, तो algorithm को सही समझा गया माना जा सकता था
- test game image file बनाई गई और output match होने तक implementation किया गया
- एक दिन के काम और कई शाम debugging के बाद NSF.EXE जैसा output देने वाला C program लिखा गया
- IDA और Visual Studio साथ में खोलकर assembly के जितना करीब हो सके उतना match करने के तरीके से implement किया गया
- original जैसा compiled binary बनाना लक्ष्य नहीं था
- implementation में C99 declarations और
stdint.htypes इस्तेमाल हुए, इसलिए संभव है कि यह Borland C++ 4 में जस का तस compile न हो
NSF की transmission encoding method
- NSF का
GetDatafunctionPMAP.DATसे packet-wise input file, file में position, और Sega Channel metadata लाता है- metadata में file ID और time-limited demo का playable time आदि शामिल होता है
- इसके बाद data file से 246-byte chunks पढ़े जाते हैं
LoadFramefunction data packet के आगे header लगाता है और सभी data bytes को invert करता है- byte inversion data transmission से जुड़ी processing हो सकती है या packet content छिपाने का तरीका हो सकता है
- game data के बीच BCH error correction codes और parity bits insert किए जाते हैं
- नतीजतन 246-byte data 288 bytes में expand हो जाता है
- header में कई fields होती हैं
GameTimeSyncऔरGameTimeBitgame time-limit value को bit-by-bit transmit करते हैंServiceIDआम तौर पर 1 होता है, और संभव है कि Express Games से संबंधित होFileIDgame image के अंदर हर file को uniquely identify करता है, और menu हमेशा file 0 होता हैAddressबताता है कि adapter file को RAM में कहां download करेगाHeaderCRCऔरHeader Copyभी शामिल होते हैं
InterLeavefunction packets को 450-bit chunks में बांटकर हर chunk के bits को shuffle करता है- ऐसा लगता है कि यह burst errors को ज्यादा evenly distribute करने के लिए किया गया, ताकि error correction बेहतर काम करे
- यह प्रक्रिया 10 packets के blocks में repeat होती है
- 10 packets को 2880-byte frame में बांधा जाता है
- frame में packet 0 के पहले 2 bytes, packet 1 के पहले 2 bytes जैसे data interleave करके disk पर लिखा जाता है
- यही processing पूरी image file बनने तक जारी रहती है
decoding और decompression
- NSF behavior समझने के बाद, प्रक्रिया को reverse order में लौटाने वाला decoder program लिखा गया
- decoder image से individual data files extract करता है
- decoder का पहला output valid Genesis ROM data नहीं था
- वजह यह थी कि game data transmission से पहले compress किया गया था
- ROM compression tool Foley Hi-Tech CD के अंदर
GAMEEDIT.EXEथा- इस tool को फिर से reverse engineer करने की जरूरत नहीं पड़ी
- GitHub user Octocontrabass ने पहले ही .SA compression format reverse engineer कर रखा था
- Octocontrabass के
unsatool से.SAfiles को standard ROM files में decompress किया गया
सितंबर 1996 image से निकले games और content
- सबसे उल्लेखनीय परिणाम सितंबर 1996 में broadcast हुए 2 Sega Channel exclusive games थे
- Chessmaster: 1990s में कई platforms पर मौजूद chess game, लेकिन Genesis पर नहीं था
- Klondike: solitaire game जिसे Sega ने Sega Channel के लिए commission किया था और जिसे Pitfall के लिए जाने जाने वाले David Crane ने program किया था
- image के अंदर के games कई categories में बांटे गए
- exclusive content: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
- new builds: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
- existing dumps से केवल padding में अलग items: Flashback, Phantasy Star II, The Punisher
- watermark जोड़े गए existing dumps: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles आदि
- existing dumps से match करने वाले कई games: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III आदि
- Sonic Retro के Black Squirrel ने सितंबर 1996 menu को emulator में चलाने का तरीका खोजा
- Sega Channel demo cartridge ROM के
0-0x1003FFbytes copy करके, game image का menu data उसके पीछे जोड़ने का तरीका है - download function काम नहीं करता, लेकिन menu browse किया जा सकता है
- Sega Channel demo cartridge ROM के
- आखिरी content game description ROM था
- यह सामान्य Genesis ROM जैसा दिखता था, लेकिन emulator में चलाने पर सिर्फ black screen आती थी
- कारण यह था कि यह सामान्य cartridge की तरह address 0 के आधार पर नहीं, बल्कि 0x100000 के आधार पर linked था
- लगता है कि इसे Sega Channel adapter memory से सीधे चलाने के लिए बनाया गया था
- header के बाद zeros जोड़कर code को header के vectors के साथ align किया गया, तो यह emulator में चलने लगा
- चलाने के बाद हर game का internal name दिखाने वाला developer menu सामने आया
- इस प्रक्रिया के बाद game image file का सारा content emulator में चलाने योग्य हो गया
अभी कोई टिप्पणी नहीं है.