خبر

  • تک بورد - چگونه شبیه سازهای SNES چند پیکسل از کمال کامل دریافت کردند

    چگونه شبیه سازهای SNES چند پیکسل از کمال کامل دریافت کردند
    5 روز قبل

    از بایگانی ها: دوباره از کار یک تیتان شبیه سازی بازی کلاسیک که این هفته درگذشت ، بازدید کنید.
    بروزرسانی ، 28 ژوئن 2021: ارس از اینكه نویسنده این قطعه ، كه از دستگیره Near نیز در تعاملات آنلاین استفاده می كرد ، ناراحت شد ، گفته می شود آخر هفته زندگی خود را گرفتند. ما امروز به یاد مشارکت های چشمگیر آنها در انجمن شبیه سازی بازی های کلاسیک و Ars ، این قطعه را بازنشر می کنیم. همچنین می توانید قسمت

    اگر شما یا کسی که می دانید با افکار خودکشی دست و پنجه نرم می کنید ، لطفاً با شماره تلفن 800-273-8255 با مرکز ملی پیشگیری از خودکشی تماس بگیرید یا با یک خط تلفن بین المللی مشابه تماس بگیرید. ما همچنین خوانندگان را تشویق می کنیم که در صورت جابجایی به فدراسیون آمریکا برای پیشگیری از خودکشی کمک کنند.

    بیشتر بخوانید دقت به قدرت می رسد: تلاش 3GHz یک نفر برای ساخت یک شبیه ساز SNES عالی رمزگذار bsnes ، من طی 15 سال گذشته سعی در بهینه سازی شبیه سازی Super Nintendo داشته ام. اکنون در نقطه ای هستیم که این هدف در چشم است ، اما در آنجا با آخرین چالش روبرو هستیم: زمان دقیق چرخه پردازنده های ویدیویی SNES. به دست آوردن این مقدار نهایی دقت شبیه سازی نیاز به یک تلاش جامعه دارد که امیدوارم برخی از شما بتوانند به آن کمک کنند. اما اول ، بگذارید بازگو کنم که ما چقدر پیشرفت کرده ایم. جایی که ما

    امروز هستیم ، شبیه سازی SNES در مکان بسیار خوبی است. ممنوع کردن وسایل جانبی غیرمعمول که در برابر تقلید مقاوم هستند (مانند کلوپ گلف مبتنی بر سنسور نور ، دوچرخه ورزشی یا مودم شماره گیری که برای قرار دادن شرط بندی با پول واقعی در مسابقات اسب زنده در ژاپن استفاده می شود) ، هر عنوان SNES دارای مجوز رسمی است کاملاً قابل بازی کردن ، و مشخص نیست که هیچ بازی مشکلی قابل توجه داشته باشد.

    شبیه سازی SNES آنقدر دقیق شده است که حتی سعی کردم شبیه ساز خود را به دو نسخه تقسیم کنم: higan ، که روی دقت و سخت افزار مطلق تمرکز دارد مستندات؛ و bsnes ، که بر عملکرد ، ویژگی ها و سهولت استفاده تمرکز دارد.

    اخیراً برخی موارد شگفت انگیز از شبیه سازی SNES ظاهر شده اند ، از جمله:

    شبیه سازی سطح پایین از همه پردازنده های SNES حالت HD 7 حذف کند کردن سرعت پشتیبانی صفحه گسترده MSU1 برای CD-audio و FMV Run-جلو برای کاهش تأخیر کنترل سرعت پویا برای هماهنگ سازی صوتی و تصویری کامل

    ... و موارد دیگر!

    پس این درست است ، درست است؟ عزیزم در یک کار خوب انجام شده ، با تشکر از همه ماهی ها؟ خوب ... کاملاً خوب نیست.

    امروز ، تقریباً برای همه اجزای SNES از دقت سطح چرخه لذت می بریم. تنها استثنا PPUs (واحد پردازش تصویر) است که برای تولید فریم های ویدیویی ارسال شده به صفحه شما استفاده می شود. ما بیشتر می دانیم که PPU چگونه کار می کند ، اما باید در مورد برخی از عملکردها حدس بزنیم که کمال کمتری دارند.

    در طرح بزرگ موارد ، موارد باقیمانده نسبتاً کوچک هستند. اگر به دنبال خود به دنبال کمال شبیه سازی صد در صد وفادار به خاطر خود نیستید ، نمی خواهم شما را در مورد نیاز به بهبود بیشتر شبیه سازی SNES PPU متقاعد کنم. همانند هر هدفی در زندگی ، هرچه به کمال نزدیک می شویم ، بازده نیز کاهش می یابد.

    می توانم به شما بگویم چرا این مسئله برای من مهم است: این کار زندگی من است و من نمی خواهم بگویم که این کار را نزدیک به پایان رساندم بدون اینکه آخرین قطعه از آن درست شود. من پیرتر می شوم ، و برای همیشه در اینجا نخواهم بود. من می خواهم این قطعه نهایی حل شود تا بتوانم در بازنشستگی خود اطمینان داشته باشم که SNES با تقلید با وفاداری و کاملاً حفظ شده است. هیچ سنگی روی سنگ رها نشده و هیچ منطقه ای ناتمام مانده است. می خواهم بگویم که این کار تمام شده است.

    اگر هنوز هم شیفته شما هستید ، برای مطالعه عمیق در زمینه مشکل و راه حل های پیشنهادی من ادامه مطلب را بخوانید.

    مدل سازی طرح SNES

    بیایید با نگاهی به اجزای سازنده SNES شروع کنیم:

    نمودار سیستم Super NES نمودار بزرگنمایی / سیستم Super NES.

    فلش ها جهتی را نشان می دهند که پردازنده های مختلف در SNES می توانند با یکدیگر ارتباط برقرار کنند و خطوط نقطه دار حافظه را نشان می دهد. اتصالات تراشه.

    نکته کلیدی در حال حاضر این است که توجه داشته باشید که خروجی فیلم و صدا مستقیماً از PPU و DSP ارسال می شود. این بدان معناست که آنها مانند "جعبه های سیاه" عمل می کنند که در آنها هیچ تصویری از آنچه اتفاق می افتد نداریم. بعداً این مهم خواهد بود.

    صحت

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

    ما می توانیم یک برنامه نرم افزاری طراحی کنیم که هر مقدار ممکن را از 0 تا 255 به صورت ضرب و ضرب ضرب کند. سپس می توانیم نتایج عددی و پرچم ضرب را بیرون بیاوریم. با این کار دو جدول 65،536 ورودی تولید می شود.

    تبلیغات

    با تجزیه و تحلیل این جداول ، می توانیم دقیقاً نحوه و زمان تنظیم نتایج خاص پردازنده را به روش های خاصی تعیین کنیم. سپس می توانیم شبیه سازهای خود را تغییر دهیم ، بنابراین ، هنگام اجرای همان آزمون ، ما دقیقاً همان جداول را در همان زمان تولید می کنیم.

    حال فرض کنید پردازنده از 16 بیت x 16 بیت ضرب کرده است. با آزمایش هر مقدار ممکن ، 4 میلیارد نتیجه بدست می آید که شروع به آزمایش عملی در یک زمان معقول می کند. اگر CPU 32 برابر 32 بیتی ضرب داشته باشد ، آزمایش همه ترکیبات ورودی قبل از مرگ گرما در جهان (حداقل با فناوری فعلی) عملی نخواهد بود.

    در موارد مانند این ، ما باید با آزمایشات خود انتخاب بیشتری داشته باشیم و سعی کنیم دقیقاً تعیین کنیم که چه زمان ممکن است پرچم ها تغییر کند ، چه زمانی نتایج ممکن است سرریز شود و غیره. در غیر این صورت تست هایی خواهیم داشت که هرگز به اتمام نمی رسند.

    ضرب یک عمل کاملاً پیش پا افتاده است ، اما این فرآیند کلی مهندسی معکوس است و به عملیات پیچیده تری مانند نحوه خالی شدن افقی SNES نیز گسترش می یابد. DMA (دسترسی مستقیم به حافظه) کار را منتقل می کند. ما آزمایشاتی را ایجاد می کنیم که سعی می کند اتفاقات لبه ها را تشخیص دهد ، سپس تأیید می کند که شبیه سازی ما با SNES واقعی یکسان است.

    نوسانگرها و چرخه ها

    SNES شامل دو نوسانگر است: یک ساعت بلوری که با سرعت 21 مگاهرتز کار می کند ، که CPU و PPU را کنترل می کند. و یک تشدید کننده سرامیک با سرعت 24 مگاهرتز کار می کند که SMP و DSP را کنترل می کند. پردازنده های کارتریج گاهی از نوسانگر CPU 21 مگاهرتز استفاده می کنند و گاهی شامل اسیلاتورهای مخصوص خود هستند که در فرکانس های مختلف کار می کنند.

    بازآفرینی این صفحه مدار اصلی Super Famicom صرفاً در نرم افزار دشوارتر از آن است که به نظر می رسد. Enlarge / Recreating این صفحه مدار اصلی Super Famicom صرفاً در نرم افزار دشوارتر از آن است که به نظر می رسد. Wikimedia Commons

    ساعت عنصر اصلی زمان بندی هر سیستم است و SNES است برای انجام کارهای مختلف در فرکانسها و زمانهای خاص طراحی شده است.

    اگر یک ساعت 100 هرتزی را تصور کنید ، این دستگاهی با یک پین دیجیتال است که به منطق بالا (به عنوان مثال 5 ولت) منتقل می شود ، و سپس دوباره به منطق کم (0 ولت یا زمین) 100 بار در ثانیه بنابراین در هر ثانیه ، ولتاژ پین 200 برابر کل نوسان می کند: 100 لبه ساعت در حال افزایش و 100 لبه ساعت در حال سقوط.

    یک چرخه ساعت به طور کلی به عنوان یک انتقال کامل تلقی می شود ، بنابراین یک ساعت 100 هرتز 100 چرخه ساعت ایجاد می کند در ثانیه برخی از سیستم ها وجود دارد که نیاز به تمیز کردن لبه ها از بالا و پایین آمدن دارد ، و برای آن ، ما این مرحله را به نیم سیکل تقسیم می کنیم تا هر فاز (بالا یا پایین) سیگنال ساعت را نشان دهیم.

    هدف اصلی از یک شبیه ساز معتبر انجام وظایف دقیقاً به همان روشها و دقیقاً در همان زمان سخت افزار واقعی است. به طور خاص چگونگی انجام وظایف مهم نیست. آنچه مهم است این است که شبیه ساز ، وقتی ورودی های یکسانی به آن داده می شود ، با همان زمان سخت افزار واقعی ، همان خروجی ها را تولید می کند. به عنوان مثال ضریب پردازنده SNES را در نظر بگیرید. پردازنده SNES به جای مکث برای انتظار برای تکمیل ضرب ، نتیجه ضرب را یک بیتی در پس زمینه و بیش از هشت چرخه کد پردازنده محاسبه می کند. این به کد شما امکان می دهد هنگام انتظار برای تکمیل ، کارهای دیگری را انجام دهد.

    هر نرم افزار تجاری منتشر شده احتمالاً در آن هشت دوره منتظر خواهد ماند ، زیرا اگر سعی کنید نتیجه را قبل از آماده شدن بخوانید ، در عوض یک نتیجه تا حدی محاسبه کنید. با این حال ، شبیه سازهای قبلی SNES بلافاصله و بدون انتظار برای این چرخه های اضافی ، نتایج صحیح را ارائه دادند.

    هنگامی که علاقه مندان شروع به ایجاد و آزمایش نرم افزار homebrew از طریق شبیه ساز کردند ، این اختلاف باعث ایجاد برخی مشکلات شد. برخی از این نرم افزارها ، مانند بسیاری از هک های ROM اولیه Super Mario World ، فقط به درستی بر روی این شبیه سازهای قبلی کار می کنند و نه بر روی سخت افزار واقعی SNES. دلیل این امر این است که آنها با توجه به نتایج ضرب فوری شبیه ساز (و سخت افزار واقعی و واقعی) در نظر گرفته شده اند.

    با بهبود شبیه سازها ، این نرم افزار قدیمی خراب شد و ما مجبور شدیم گزینه های سازگاری را در شبیه سازهای جدیدتر ما به منظور از دست دادن این نرم افزار به موقع. بله ، هرچه گفتن سوررئال است ، این روزها شبیه سازهای ما مجبورند از شبیه سازهای دیگر تقلید کنند! چگونه متا!

    تبلیغات

    نکته خوب در مورد تاخیر ضرب پردازنده این است که بسیار قابل پیش بینی است: هشت چرخه محاسبه بلافاصله پس از درخواست ضرب شروع می شوند. با نوشتن کد برای خواندن نتایج پس از هر چرخه ، ما توانستیم تأیید کنیم که پردازنده SNES از الگوریتم Booth برای ضرب استفاده می کند.

    همگام سازی ساعت

    مدل سازی سایر عملکردها چندان ساده نیست ، زیرا به صورت غیر همزمان انجام می شوند در پس زمینه. تازه سازی DRAM پردازنده SNES یکی از این موارد است.

    هنگام ارائه هر اسکن ، در یک نقطه خاص ، با تازه شدن محتوای تراشه RAM ، کل پردازنده SNES برای مدت کوتاهی یخ می زند. این مورد نیاز است زیرا ، به عنوان یک اقدام برای کاهش هزینه ، SNES از RAM پویا (به جای RAM استاتیک) برای حافظه اصلی پردازنده خود استفاده کرده است. RAM پویا باید به طور دوره ای تازه شود تا محتوای آن در طول زمان حفظ شود.

    برای یک شبیه ساز کاملاً عالی ، فقط 3500 پوند بازی تجاری SNES قابل پخش برای پخش کافی نیست. هر عملکرد سیستم دارای همچنین با دقت کامل چرخه شبیه سازی شود. Enlarge / برای یک شبیه ساز کاملاً عالی ، فقط برای بازی کردن بازی های SNES 3500 پوندی که به صورت تجاری منتشر شده است ، قابل بازی نیست. هر عملکرد سیستم نیز باید با دقت کامل چرخه شبیه سازی شود.

    مهمترین نکته برای فهم زمان دقیق این عملیات ، استفاده از شمارنده های افقی و عمودی SNES PPU بود. این شمارنده ها پیش می روند و پس از هر دوره خالی شدن عمودی و عمودی مجدداً تنظیم می شوند. با این حال ، دقت آنها فقط یک چهارم فرکانس نوسان ساز CPU SNES است. به این معنا که شمارنده افقی هر چهار سیکل ساعت فقط یک بار افزایش می یابد.

    با چندین بار خواندن شمارنده ها ، من توانستم تعیین کنم که شمارنده با کدام یک چهارم چرخه ساعت هم تراز شده است. با تلفیق این بینش و عملکردی خاص ساخته شده که می تواند تعداد دقیق و مشخصی از چرخه ساعت را توسط کاربر مشخص کند ، امکان تراز کامل پردازنده SNES با هر موقعیت دقیق چرخه ساعت که می خواهم امکان پذیر شد.

    توسط با تکرار در محدوده ای از چرخه های ساعت در یک حلقه ، می توانم دقیقاً تعیین کنم که برخی عملیات (مانند DRAM refresh ، انتقال HDMA ، نظرسنجی وقفه ، و غیره) اتفاق بیفتد و من می توانم این را دقیقاً تحت شبیه سازی تولید کنم.

    تراشه SNES SMP تایمرهای خاص خود را نیز دارد و مهندسی معکوس مشابه نیز در برابر آن پردازنده موفق بود. من می توانم یک مقاله کامل را صرفاً در مورد ثبت نام SMP TEST صرف کنم ، که به رمزگذاران امکان کنترل تقسیم ساعت SMP و تایمرهای آن را می دهد. کافی است بگویم که گرچه این روند آسان و سریع نبود ، اما در نهایت پیروز شدیم.

    جمع آوری پردازنده های بزرگ

    تراشه SuperFX فقط یکی از بسیاری از پردازنده های کارتریجی است که یک شبیه ساز SNES دارد. به درستی رسیدگی کند. Enlarge / تراشه SuperFX فقط یکی از بسیاری از پردازنده های کارتریج است که یک شبیه ساز SNES باید به درستی از عهده آنها برآید. تعداد زیادی از پردازنده های SNES در کارتریج های مختلف بازی مورد استفاده قرار گرفتند که لازم بود وجود داشته باشد رام هم شد. از پردازنده های مرکزی اختصاصی مانند SuperFX و SA-1 ، پردازنده های سیگنال دیجیتال مانند DSP-1 و Cx4 ، شتاب دهنده های فشار فشرده مانند S-DD1 و SPC7110 ، ساعت های بلادرنگ از شارپ و اپسون و موارد دیگر. ..

    به این معنی که یک شبیه ساز SNES باید بتواند از دستورالعمل ها و حافظه پنهان های پیکسل SuperFX استفاده کند. داور درگیری باس حافظه SA-1 (که به SNES CPU و SA-1 اجازه می دهد تراشه های ROM و RAM مشابه را به طور همزمان به اشتراک بگذارند). سیستم عامل تعبیه شده از DSP-1 و Cx4. رمزگذارهای حسابی مبتنی بر پیش بینی S-DD1 و SPC7110. و موارد لبه BCD (رمز اعشاری کد شده باینری) از ساعتهای واقعی. به آرامی اما مطمئناً ، با استفاده از تکنیک های فوق برای تعیین صحت و زمان بندی ، ما توانستیم تقریباً کاملاً از همه این تراشه ها تقلید کنیم.

    در واقع یک تلاش گسترده و هزاران دلار برای جدا کردن و استخراج آن لازم بود میان افزار برنامه نویسی از پردازنده های سیگنال دیجیتال که در بازی های مختلف استفاده می شود. در یک نمونه ، تقلید از NEC uPD772x منجر به استفاده کد از higan برای نجات صدای استاد فقید استفان هاوکینگ شد!

    در مورد دیگر ، ما مجبور شدیم کل مجموعه دستورالعمل های Hitachi HG51B را مهندسی معکوس کنیم. معماری ، زیرا این معماری هرگز مستند عمومی نبود. در یک بازی دیگر ، یک بازی (Hayazashi Nidan Morita Shougi 2) در نهایت شامل یک پردازنده 32 بیتی ، 21 مگاهرتزی ARM6 برای شتاب بخشیدن به موتور شطرنج ژاپنی خود بود!

    حفظ همه شرکت های تولید کننده SNES به تنهایی یک کار ساده بود سفر چند ساله پر از چالش و شگفتی.

    پردازش سیگنال دیجیتال

    با پردازنده کارتریج DSP-1 اشتباه گرفته نشود ، تراشه Sony S-DSP (پردازشگر سیگنال دیجیتال) همان چیزی است که صدای متمایز را از SNES این تراشه هشت کانال صوتی را با رمزگذاری 4 بیتی ADPCM ترکیب کرده و سیگنال استریو 16 بیتی تولید می کند.

    در سطح و طبق نمودار سیستم قبلی ، DSP در ابتدا مانند جعبه سیاه به نظر می رسد: شما کانال های صوتی و تنظیمات میکسر را پیکربندی کنید و به دلیل تولید صدا برای بلندگوهای خود بنشینید.

    اما یک ویژگی اصلی به توسعه دهنده ای به نام بلارگ اجازه می دهد تا این تراشه را کاملاً مهندسی کند: echo بافر SNES DSP دارای یک ویژگی است که خروجی های نمونه های قبلی را با هم مخلوط می کند تا اثر echo ایجاد کند. این اتفاق در انتهای فرآیند تولید صدا رخ می دهد (به غیر از آخرین پرچم قطع کننده نهایی که می تواند برای خاموش کردن همه خروجی های صدا اعمال شود.)

    با نوشتن دقیق کد زمانبندی شده و نظارت بر نتایج echo ، کشف ترتیب دقیق عملیاتی که SNES DSP برای تولید هر نمونه و تولید صوتی کاملاً دقیق و با چرخه انجام می دهد ، امکان پذیر شد.





خبرهای دیگر از بازی کردن