در دنیای مهندسی معکوس و شبیهسازی کنسولهای کلاسیک، همیشه چالشهای «اجرای ایکس روی ایگرگ» جذابیت خاص خود را دارند. اما وقتی صحبت از اجرای یک عنوان سهبعدی سنگین مانند Super Mario 64 روی کنسول ۱۶ بیتی SNES (Super Nintendo Entertainment System) میشود، موضوع از یک سرگرمی ساده فراتر رفته و به یک مسئله پیچیده معماری رایانه تبدیل میگردد. توبیاس فریدلی (Tobias Friedly) در پروژهای تحت عنوان «Super Mario FX» توانست کاری را انجام دهد که دههها به عنوان یک افسانه در تاریخ بازیهای ویدیویی شناخته میشد: اجرای شبیهسازی شده ماریو سهبعدی روی سختافزاری که اساساً برای بازیهای دوبعدی طراحی شده بود.
شکاف عظیم معماری: از ۱۶ بیت تا ۶۴ بیت
برای درک عظمت این دستاورد، باید تفاوت فاحش میان معماری Nintendo 64 و SNES را تحلیل کنیم. کنسول Nintendo 64 از یک پردازنده ۶۴ بیتی با فرکانس ۹۳.۷۵ مگاهرتز بهره میبرد و در کنار آن دارای یک پردازنده کمکی (Coprocessor) اختصاصی برای مدیریت گرافیک و صدا بود. در مقابل، قلب تپنده SNES یک پردازنده ۱۶ بیتی با فرکانس ناچیز ۳.۵۸ مگاهرتز است. حافظه رم (RAM) نیز در اینجا یک فاکتور تعیینکننده است؛ در حالی که نینتندو ۶۴ از ۴ مگابایت رم یکپارچه بهره میبرد، SNES تنها ۲۵۶ کیلوبایت حافظه در اختیار داشت. اجرای گرافیک سهبعدی روی چنین سختافزاری بدون استفاده از راهکارهای خلاقانه، از نظر تئوری غیرممکن به نظر میرسید.
استفاده از تراشه کمکی Super FX به عنوان میانبر سختافزاری
فریدلی برای دور زدن محدودیتهای CPU اصلی، به سراغ تکنولوژی «تراشههای بهبودیافته» (Enhancement Chips) رفت که در زمان خود توسط نینتندو برای توسعه قابلیتهای کارتریجها طراحی شده بودند. کلیدیترین ابزار در این پروژه، تراشه Super FX بود. این تراشه در واقع یک پردازنده کمکی RISC است که به کارتریج اجازه میدهد محاسبات هندسی سهبعدی و پردازش چندضلعیها (Polygons) را بدون بارگذاری بیش از حد بر دوش CPU ضعیف SNES انجام دهد. جالب است بدانید که این تراشه در دوران توسعه خود، نام رمز «MARIO» را یدک میکشید و قرار بود بستری برای بازیهای سهبعدی نینتندو روی SNES باشد.
معماری نرمافزاری: پیادهسازی موتور اختصاصی
از آنجایی که انتقال مستقیم (Direct Port) بازی Super Mario 64 به دلیل تفاوت فاحش معماری غیرممکن بود، فریدلی یک موتور بازی اختصاصی برای این کنسول قدیمی نوشت. این موتور وظیفه پردازش هندسه و رندرینگ را بر اساس قابلیتهای Super FX بر عهده دارد و از داراییهای گرافیکی (Assets) اصلی بازی Super Mario 64 برای نمایش محیط استفاده میکند. در اینجا مشخصات فنی چالشبرانگیز این پروژه به شرح زیر است:
- پردازنده میزبان: Ricoh 5A22 (16-bit, 3.58 MHz)
- پردازنده کمکی: GSU-1/2 (Super FX)
- محدودیت حافظه جانبی: حداکثر ۲ مگابایت برای هر مرحله (Level)
- متد رندرینگ: تبدیل چندضلعیهای سهبعدی به دیتای قابل فهم برای پردازنده گرافیکی SNES
چالشهای پیش رو و چشمانداز آینده
بزرگترین مانع فریدلی در این مسیر، کمبود حافظه و محدودیتهای پهنای باند تراشه Super FX بود. هر مرحله در پروژه Super Mario FX باید در محدوده ۲ مگابایت فشرده شود که فرآیند بهینهسازی بسیار دقیقی را میطلبد. با این حال، ویدیوهای منتشر شده از «Game of Tobi» نشان میدهند که حرکات ماریو و تعامل با محیط کاملاً قابل تشخیص و «قابل بازی» (Playable) هستند. فریدلی قصد دارد این پروژه را پس از تکمیل به صورت عمومی منتشر کند که میتواند به عنوان یک مرجع آموزشی بینظیر برای علاقهمندان به مهندسی معکوس کنسولهای کلاسیک تبدیل شود.