پرش به محتوای اصلی
پرش به محتوای مقاله

درون فرآیند بازنویسی کدهای Pokémon Emerald برای معماری Cortex-M33

·۱۶ مرداد ۱۴۰۵۵ دقیقه مطالعه
پورت بازی پوکمون زمرد برای میکروکنترلر RP2350 با خروجی HDMI ۶۰ فریم بر ثانیه بدون شبیه‌ساز
پورت بازی پوکمون زمرد برای میکروکنترلر RP2350 با خروجی HDMI ۶۰ فریم بر ثانیه بدون شبیه‌ساز
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

حذف کامل لایه شبیه‌ساز و اجرای بومی (Native) یک بازی کنسولی روی میکروکنترلر RP2350 با خروجی HDMI واقعی و نرخ ۶۰ فریم بر ثانیه.

تصور کنید یک کنسول بازی با کیفیت بالا را تنها با ۶ دلار بسازید. این دیگر یک رویای نوستالژیک نیست، بلکه نتیجه‌ی مهندسی دقیقی است که بازی Pokémon Emerald را به‌صورت بومی و با نرخ ۶۰ فریم بر ثانیه (locked 60 fps) و با خروجی کامل HDMI روی یک میکروکنترلر کوچک اجرا می‌کند. این پروژه ثابت می‌کند که برای تجربه بازی‌های رترو با کیفیت بالا، نیازی به شبیه‌ساز یا سخت‌افزارهای گران‌قیمت نیست، به شرطی که کد زیربنایی برای معماری‌های مدرن ARM بازنویسی و کامپایل شود.

برای اکثر علاقه‌مندان به سخت‌افزار، اجرای بازی‌های Game Boy Advance (GBA) معمولاً به معنای استفاده از یک شبیه‌ساز (Emulator) است؛ ابزاری شبیه به یک مترجم هم‌زمان که سعی می‌کند سخت‌افزار قدیمی را تقلید کند و در این مسیر منابع پردازشی زیادی را مصرف می‌کند. اما این پروژه مسیر متفاوتی را طی کرده و با بازی مانند یک اپلیکیشن بومی برخورد می‌کند؛ درست مثل وقتی که یک برنامه مدرن مستقیماً روی گوشی هوشمند شما اجرا می‌شود، نه از طریق یک ماشین مجازی.

به نقل از مخزن github.com، توسعه‌دهنده این پروژه با بهره‌گیری از پروژه مهندسی معکوس pret به این هدف رسیده است. طبق مستندات، کد بازی از مجموعه دستورات قدیمی ARMv4T به معماری Cortex-M33 که در تراشه RP2350 به کار رفته، بازنویسی و کامپایل شده است.

همان‌طور که در تحلیل‌های پیشین ما درباره‌ی بهینه‌سازی‌های سخت‌افزاری در لبه (Edge Computing) اشاره کردیم، حذف لایه‌های واسط، کلید دستیابی به عملکرد حداکثری در سخت‌افزارهای محدود است.

این پروژه در واقع نسخه‌ای تغییریافته (Fork) از pokeemerald-wasm است که خود آن نیز بر پایه pret/pokeemerald بنا شده است. توسعه‌دهنده برای جلوگیری از شروع از صفر، از ساختار پورت WASM استفاده کرد. پروژه tripplyons/pokeemerald-wasm پیش‌تر وابستگی‌های سخت‌افزاری GBA را پشت ماکروهای #if WASM قرار داده بود. او تنها با تغییر این بخش‌ها به #if WASM || RP2350 توانست کارهای مربوط به «سخت‌افزارزدایی» (de-hardwaring) را به سرعت به پایان برساند و تنها روی پیاده‌سازی‌های مخصوص میکروکنترلر (MCU) تمرکز کند.

برای تضمین دقت، از ابزاری به نام rp2350/ppu_validate.sh استفاده شده است. این ابزار بازی را در مرورگر اجرا کرده، حافظه GBA و فریم‌های مرجع را از رسترایزر جاوااسکریپت استخراج می‌کند و سپس آن‌ها را با خروجی RP2350 مقایسه (pixel-diff) می‌کند تا از تطابق دقیق پیکسل‌ها اطمینان حاصل شود. این فرآیند تنها دلیلی است که می‌توان ادعا کرد واحد پردازش تصویر (PPU) به‌صورت «بایت-به-بایت» (byte-exact) دقیق است.

در لایه معماری، این سیستم از برد WeAct Studio Core2350B با تراشه RP2350B و ۱۶ مگابایت حافظه فلش QSPI استفاده می‌کند. برای حفظ عملکرد، بار کاری بین دو هسته تقسیم شده است:

  • هسته ۰: تمام منطق بازی را مدیریت می‌کند. این هسته وضعیت بازی را در حدود ۰.۳ میلی‌ثانیه برای هر فریم پردازش می‌کند.
  • هسته ۱: به عنوان یک رسترایزر نرم‌افزاری عمل کرده و واحد پردازش تصویر (PPU) کنسول GBA را بازسازی می‌کند تا یک فریم‌بافر RGB565 با رزولوشن ۲۴۰×۱۶۰ بسازد. این عملیات حدود ۱۲ میلی‌ثانیه زمان می‌برد.

این رویکرد دوهسته‌ای اجازه می‌دهد بازی با فرکانس ۲۵۲ مگاهرتز اجرا شود. خروجی تصویر از طریق یک مبدل HSTX-to-HDMI تامین می‌شود که طبق ترتیب پین‌های Pico DVI Sock سیم‌کشی شده است. این سیستم تصویری بدون لرزش (tear-free) با رزولوشن ۶۴۰×۴۸۰p و نرخ ۶۰ هرتز ارائه می‌دهد که به‌طور کامل با سیگنال اسکن (vsync-locked) هماهنگ است.

کل بازی شامل گرافیک، نقشه‌ها و موسیقی در یک فایل ۱۱.۷ مگابایتی بسته‌بندی شده است. این فایل به‌صورت XIP (اجرا در مکان) مستقیماً از حافظه فلش خوانده می‌شود. نقشه حافظه اصلی بازی حفظ شده است؛ یعنی بازی همچنان در همان آدرس‌های قدیمی برای DISPCNT، VRAM، OAM و پالت رنگ‌ها می‌نویسد، اما این آدرس‌ها اکنون به SRAM معمولی نگاشت شده‌اند. همچنین پایه حافظه بازی از 0x08000000 به 0x10000000 تغییر یافته است.

حدود ۳۷۸ کیلوبایت از حافظه ۵۲۰ کیلوبایتی RP2350 توسط رم فعال اشغال شده است. برای پایداری، یک حلقه کنترل DMA (DMA control-block ring) پیاده‌سازی شده است. این سیستم یک فریم کامل ۵۲۵ خطی را به سریال‌ساز HSTX می‌فرستد بدون اینکه در مسیر بازنشانی (re-arm)، نیازی به دخالت CPU باشد. این مکانیزم دقیقاً همان چیزی است که از پرش یا لرزش تصویر هنگام ذخیره بازی (Save) جلوگیری می‌کند و مشکل ریزش تصویر HDMI (که حدود ۰.۸ بار در دقیقه رخ می‌داد) را کاملاً حذف کرده است.

سخت‌افزار مورد نیاز بسیار مینیمال اما خاص است:

  • برد اصلی: RP2350B (مدل WeAct Studio Core2350B).
  • ویدیو: مبدل HSTX-to-HDMI.
  • ورودی: ۱۰ دکمه GPIO (از GP0 تا GP9) که به زمین (Ground) متصل شده‌اند.
  • صوت: DAC مدل PCM5102A با رابط I²S برای خروجی صدا (اختیاری).

برای ساخت پروژه، یک توالی خاص لازم است: ابتدا اجرای make tools && make modern برای تولید دارایی‌ها، سپس استفاده از rp2350/gen_sound_assets.sh برای تبدیل فایل‌های wav/mid و در نهایت rp2350/build_objs.sh برای ایجاد کتابخانه libpokeemerald.a. فایل باینری نهایی از طریق picotool و در قالب یک فایل .uf2 بارگذاری می‌شود. برای عیب‌یابی، اهداف مجزایی مانند hstx_test برای نمایش نوارهای رنگی و i2s_test برای تولید موج سینوسی ۴۴۰ هرتز در پروژه گنجانده شده است.

با وجود اینکه بازی از ابتدا تا انتها قابل بازی است — شامل بوت شدن، مقدمه، حرکت در دنیای بازی و مبارزات — اما برخی ویژگی‌ها هنوز به‌صورت ناقص (stubbed) هستند:

  • صوت: موتور m4a پورت شده است، اما سازهای فشرده‌شده DPCM و پخش معکوس صداها ساکت هستند. همچنین میکس صدا به نرخ فریم وابسته است، به این معنی که در صحنه‌های زیر ۶۰ فریم، افت صدا (audio underruns) رخ می‌دهد.
  • اتصالات: مسیرهای کابل لینک و RFU پیاده‌سازی نشده‌اند. تبادل پوکمون‌ها و دانلود Mystery Gift کار نمی‌کنند، زیرا دومی سعی می‌کند داده‌ها را به عنوان کد Thumb جابه‌جا کند که با معماری M33 سازگار نیست.
  • ساعت: ساعت داخلی (RTC) در وضعیت «ساعت کارتج مرده» است. چون RP2350 فاقد پین‌های GPIO کارتج برای شبیه‌سازی RTC است، زمان همیشه صفر نمایش داده می‌شود. این موضوع باعث توقف رشد توت‌ها و سایر رویدادهای وابسته به زمان می‌شود.
  • عملکرد: تنها صحنه‌ای که نرخ فریم را به زیر ۶۰ می‌کشاند، سینماتیک ابتدایی (OBJ-window) است که به دلیل نبود مسیر پردازش سریع، بین ۲۰ تا ۲۵ میلی‌ثانیه زمان می‌برد.

این پروژه معیار جدیدی برای توانمندی‌های میکروکنترلرهای ارزان‌قیمت تعریف می‌کند و نشان می‌دهد که ترکیب مهندسی معکوس متن‌باز با بهینه‌سازی سخت‌افزاری، می‌تواند هزینه‌های سنگین شبیه‌سازی را کاملاً حذف کند. برای توسعه‌دهندگان، این به معنای آن است که RP2350 قادر به مدیریت رسترایزیشن نرم‌افزاری پیچیده و بلادرنگ است؛ قابلیتی که پیش از این تنها در اختیار SoCهای بسیار قدرتمند بود. این پروژه یک میکروکنترلر ساده را به یک کنسول بازی اختصاصی تبدیل می‌کند.

گام بعدی شما

  • اگر به سخت‌افزار علاقه‌مندید، بررسی کنید که چگونه بازنویسی کد (Recompilation) می‌تواند جایگزین شبیه‌سازی شود.
  • مخزن گیت‌هاب پروژه را برای مشاهده نحوه پیاده‌سازی رسترایزر نرم‌افزاری در هسته دوم مطالعه کنید.
  • قابلیت‌های تراشه RP2350 را در مقایسه با RP2040 برای پروژه‌های مالتی‌مدیا بررسی کنید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این دستاورد با تکیه بر تخصص در مهندسی معکوس، نشان می‌دهد که سخت‌افزارهای بسیار ارزان می‌توانند کارهای پیچیده گرافیکی را بدون لایه شبیه‌ساز انجام دهند. این موضوع اعتبار رویکرد بازنویسی کد برای بهینه‌سازی در لبه را افزایش می‌دهد.

تأثیر برای ایران

این پروژه برای توسعه‌دهندگان سخت‌افزار و دانشجویان الکترونیک در ایران که به دنبال پیاده‌سازی سیستم‌های مالتی‌مدیا با بودجه کم هستند، یک الگوی عملی و در دسترس است.

·نگاه ما
تحریریه دات‌هوش

این پروژه ثابت می‌کند که محدودیت‌های سخت‌افزاری اغلب ناشی از لایه‌های نرم‌افزاری ناکارآمد هستند، نه ضعف تراشه. با انتقال از شبیه‌سازی به اجرای بومی، مرز بین میکروکنترلرهای ساده و سیستم‌های روی چیپ (SoC) کمرنگ‌تر می‌شود. این رویکرد می‌تواند راه را برای تبدیل سخت‌افزارهای صنعتی ارزان به گره‌های پردازشی پیچیده‌تر باز کند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.