• کنسول بازی شیک پوش را خودتان انجام دهید. چگونه انجام می شود، چگونه کار می کند، چگونه کار می کند. تحولات مدرن برای NES

    در ابتدا فکر نمی کردم مقاله ای در مورد این موضوع بنویسم، اما به نظر می رسد که این بخشی از یک سری مقالات در مورد موضوعات شیک است. و بله، این بار در درجه اول در مورد Dandy داخلی است، و نه در مورد کنسول های اصلی - Famicom یا NES. من این دستگاه را به عنوان هدیه به یک نفر که ویدیوهای بسیار جالبی در مورد دندی می گیرد و بر سازگاری با این کلون خاص تمرکز می کند ساخته ام.

    واقعیت این است که لوازم جانبی مختلفی هم برای Famicom و هم برای NES عرضه شد: عینک های سه بعدی، صفحه کلید، ربات ها، بارکدخوان ها، انواع کنترلرهای بازی و موارد دیگر. فقط تپانچه سبک به ما رسیده است. وظیفه من مونتاژ دستگاهی بود که یک اسپلیتر برای چهار بازیکن (بله، چنین بازی هایی وجود داشت) و یک کنترلر Arkanoid را ترکیب کند.

    پورت های ورودی/خروجی

    قبل از هر چیز، لازم است بگوییم که کنترلرهای بازی Famicom، NES و Dendy چگونه با جوی استیک کار می کنند و تفاوت آنها در این زمینه چیست.

    از نظر بازی ها، پورت های I/O دو رجیستر با آدرس هستند $4016 و $4017 ، که به ترتیب با دو پورت مرتبط هستند، جایی که همه چیز متصل است. اما در کنترل کننده های استاندارد، فقط یک سیم برای خواندن داده ها استفاده می شود - D0، داده هایی که از آن به ترتیب از طریق کمترین بیت (صفر) در هر یک از ثبات ها در دسترس است: $4016.0 و $4017.0 . به طور مشابه، یک سیم در هر رکورد استفاده می شود، که معمولا به عنوان نامیده می شود استروب(یا چفت) که شمارنده داخل گیم پد را بازنشانی می کند و از طریق نوشتن در آن در دسترس است $4016.0 (بله، برای هر دو کنترلر رایج است).

    به زبان ساده، برای به دست آوردن وضعیت دکمه های اولین کنترلر، ابتدا باید 1 به را بنویسید $4016.0 ، بلافاصله 0 را در آنجا بنویسید، بنابراین شمارنده را تنظیم مجدد کنید، و سپس بخوانید $4016 و $4017 هشت بار (برای هر یک از دکمه ها)، دریافت اطلاعات دکمه از کمترین بیت مهم. اما بیت های دیگر در این ثبات ها برای چیست، این خطوط به کجا می روند؟ پورت کنترلر NES را در نظر بگیرید:

    بله، آنها واقعاً دنبال آن هستند D3و D4! آنها از طریق در دسترس هستند $4016.3 , $4016.4 در بندر اول و $4017.3 , $4017.4 دوم، و آنها برای کنترل کننده های غیر استاندارد استفاده می شوند.

    در مورد همتای ژاپنی آن - Famicom، این پورت ها وجود ندارد و خود کنترلرهای بازی از کنسول جدا نیستند، اما دارای یک پورت توسعه است که یک کانکتور DB-15 است.

    آشنا به نظر می رسد، درست است؟ بله، زمانی که چینی ها Dandy ما را طراحی کردند (من شک دارم که ما آن را طراحی کرده بودیم) و آنها نیاز به ساخت کنترلرهای جداشدنی داشتند، آنها تصمیم گرفتند که پورت توسعه را به عنوان پایه در نظر بگیرند، زیرا دارای کنتاکت هایی برای کنترلر دوم است و در یک مکان قرار دارد. کمی در سمت راست Famicom مرکز. حتی لازم نبود پین اوت را عوض کنند. در مورد اولین کنترلر، همان DB-15 را گرفتند، آن را در سمت چپ قرار دادند و پین اوت را تغییر دادند تا اولین کنترلر وصل شود. و فقط او

    پورت های جلویی Famicom و Dandy ما را مقایسه کنید:

    در اینجا یک داستان عجیب از این کانکتورهای پانزده پین ​​روی گیم پدهایی است که در کشور ما استفاده می شود.

    اما بیایید ببینیم خروجی این پورت توسعه فامیکام چیست؟


    (عکس از wiki.nesdev.com)

    بله، موارد بیشتری در راه است $4016.1 (برای ورودی)، $4017.0-4 (برای ورودی)، $4017.0-2 (در خروجی)، وقفه خارجی و حتی صدا! وقتی دندی را جدا کردم و دیدم همه اینها آنجاست، بسیار شگفت زده شدم:

    درست است، نه در همه مدل ها، همانطور که بعدا معلوم شد. اما اگر اینطور باشد، با لوازم جانبی فامیکام نیز سازگاری کامل دارد و بازی های ژاپنی مربوطه می توانند از آنها استفاده کنند. اما اجازه دهید به شما یادآوری کنم که Dandy ترکیبی بسیار عجیب از NES و Famicom، PAL و NTSC است. Pirates هر دو بازی ژاپنی و آمریکایی را برای آن منتشر کرد که اگر این لوازم جانبی و فرمت های مختلف کارتریج را در نظر نگیرید اساساً 100٪ سازگار هستند.

    جمع:برخی از Dandies همه کسرهای مشابهی را دارند که در Famicom وجود دارد، در حالی که برخی از کسرهای موجود در NES را نیز شامل می شود. بدون دسترسی به $4016.3 و $4016.4 اما به ندرت مورد استفاده قرار می گیرند. در قالب یک جدول برای وضوح:

    لوازم جانبی چگونه کار می کنند

    یک اسپلیتر آمریکایی چهار نفره برای NES نامیده می شود چهار امتیازیک مجموعه ساده از رجیسترهای شیفت است. آن ها هشت قرائت اول از $4016.0 داده ها را از اولین کنترلر، و هشت دوم - از سوم. به همین ترتیب $4017.0 اطلاعات مربوط به کنترل کننده دوم و چهارم را ارائه می دهد. علاوه بر این، هنگامی که به خواندن ادامه می دهید، دستگاه امضای خود را صادر می کند که با کمک آن بازی مشخص می کند که متصل است. چهار امتیاز، نه چیز دیگری به نظر می رسد که چنین دستگاهی را می توان از شش رجیستر شیفت (4021 یا 74165) مونتاژ کرد و روی هر Dandy کار می کند، زیرا به خطوط داده اضافی نیاز ندارد. البته فقط با بازی های آمریکایی که برای NES عرضه شد.

    همتای ژاپنی Famicom بسیار ساده تر است. سومین و چهارمین کنترلر مستقیماً به درگاه توسعه متصل می شوند و از طریق آن قابل دسترسی هستند $4016.1 و $4017.1 . بر این اساس، برای چنین آداپتوری، ما از قبل به یک پورت توسعه کامل برای Dendy نیاز داریم، در غیر این صورت بازی های ژاپنی برای ما چهار نفر کار نخواهد کرد.

    کنترلر Arkanoid همانطور که از نامش پیداست برای بازی Arkanoid استفاده می شود و از یک دکمه چرخشی و یک دکمه تشکیل شده است. در داخل، این یک مبدل آنالوگ به دیجیتال و یک شیفت رجیستر است که موقعیت دستگیره را نیز به طور مداوم خروجی می دهد. تفاوت نسخه ژاپنی و آمریکایی فقط در روش اتصال است. نسخه ژاپنی بازی موقعیت دسته و وضعیت دکمه را از آن می خواند $4016.1 و $4017.1 و نسخه آمریکایی $4016.3 و $4016.4 به ترتیب. به نظر می رسد که برای Arkanoid ژاپنی به یک درگاه توسعه کامل نیاز دارید و برای آمریکایی هر شیک پوشی در جایی که تفنگ سبک کار می کند (او از همان نتیجه گیری استفاده می کند) این کار را انجام می دهد.

    لوازم جانبی خود را ایجاد کنید

    اگرچه دستگاه های فوق خود مدار ساده ای دارند و از ساده ترین اجزای منطقی مونتاژ شده اند، اما برای قلب دستگاه همه کاره تصمیم گرفتم از یک FPGA استفاده کنم. علاوه بر این، از من خواسته شد که یک سوئیچ ساده در آنجا بسازم، اما می‌خواستم امکان تعویض دکمه‌های A و B را فراهم کنم. ابتدا Altera را انتخاب کردم. EPM3064ATC100، اما خیلی زود مشخص شد که 64 ماکروسل برای من کافی نیست و انتخاب بر سر کار افتاد EPM3128ATC100، جایی که در حال حاضر 128 ماکروسل وجود دارد.

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

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

    بنابراین، الزامات ظاهر به شرح زیر بود: چهار پورت برای کنترلرهای استاندارد DB-15 از Dandy، چهار دکمه برای انتخاب و پیکربندی آنها، یک دکمه "حالت"، یک دکمه "تنظیمات"، یک دسته مناسب برای Arkanoid و یک دکمه برای آن، که باید به اندازه کافی راحت باشد و مانعی ایجاد نکند. علاوه بر این، من می خواستم پورت های فعالی را ایجاد کنم که توسط LED ها روشن می شوند و به نوعی به طور مستقیم با دکمه های مربوطه مرتبط می شوند، منطقی ترین است که کانکتورها را در یک ردیف مرتب کنیم، اما این DB-15 های احمقانه برای آن بسیار بزرگ هستند. علاوه بر این، دستگاه باید در دستان راحت باشد، زیرا به خودی خود یک کنترلر بازی برای Arkanoid است. در پایان، من به چیزی شبیه به این رسیدم:

    دکمه ها در یک ردیف، پورت ها روی هم، یک دسته در کنار، یک دکمه برای Arkanoid در پشت سمت چپ.

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

    برد FPGA (نسخه اول):

    تابلوی دوم:

    من کد FPGA را در Verilog نوشتم. برای هر حالت، به نظر می رسد بسیار ساده است. اول از همه، برای بسیاری از آنها، ما باید تماس های هر یک از پورت ها را بشماریم، یعنی. پالس روی سیم ساعت:

    Reg counter1; reg counter2; همیشه @ (posedge strobe_in، poge clock1_in) اگر (strobe_in) counter1 شروع شود<= 1; else if (counter1 < 31) counter1 <= counter1 + 1; end always @ (posedge strobe_in, posedge clock2_in) begin if (strobe_in) counter2 <= 1; else if (counter2 < 31) counter2 <= counter2 + 1; end
    (با عرض پوزش، habr نمی تواند Verilog را برجسته کند)

    جایی که strobe_inیک بارق است (یکی برای هر دو پورت)، و clock1_inو clock2_in- این به ترتیب ساعت روی هر یک از پورت ها است. منطقی در داخل کنسول وجود دارد: ساعت = R/W nand (آدرس == $4016/$4017)، یعنی. وقتی کنسول داده ها را در آدرس مربوطه می خواند، on clock یک صفر منطقی است.

    حالت شبیه سازی اسپلیتر آمریکایی چهار نفره به این صورت است:
    همیشه @ (*) شروع می شود // Strobe مستقیماً متصل می شود - ورودی ها به خروجی ها اختصاص داده می شود strobe_out = strobe_in; اختصاص strobe_out = strobe_in; اختصاص strobe_out = strobe_in; اختصاص strobe_out = strobe_in; // بسته به تعداد دفعاتی که کنسول اطلاعات clock_out را خوانده است، ساعت را برای هر گیم پد بکشید.<= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 >8 && شمارنده 1<= 16) ? clock1_in: 1; clock_out <= (counter2 >8 && counter2<= 16) ? clock2_in: 1; if (counter1 <= 8) // Первый контроллер joy1_data_out <= joy_data; else if (counter1 <= 16) // Третий контроллер joy1_data_out <= joy_data; // Сигнатура else if (counter1 == 20) joy1_data_out <= 0; else joy1_data_out <= 1; // Второй контроллер if (counter2 <= 8) joy2_data_out <= joy_data; // Четвёртый контроллер else if (counter2 <= 16) joy2_data_out <= joy_data; // Сигнатура else if (counter2 == 19) joy2_data_out <= 0; else joy2_data_out <= 1; // Неиспользуемые выводы оставляем в высокоимпедансном состоянии, они подтягиваются к VCC внутри самой консоли joy1_data_out <= 1"bZ; joy2_data_out <= 4"bZZZZ; end

    در حالت اسپلیتر ژاپنی برای چهار، فقط باید ورودی ها را مستقیماً به خروجی ها متصل کنید:
    همیشه @ (*) clock_out شروع می شود<= clock1_in; clock_out <= clock2_in; clock_out <= clock1_in; clock_out <= clock2_in; joy1_data_out <= joy_data; joy2_data_out <= joy_data; joy1_data_out <= joy_data; joy2_data_out <= joy_data; // Неиспользуемые выводы оставляем в высокоимпедансном состоянии, они подтягиваются к VCC внутри самой консоли joy2_data_out <= 3"bZZZ; end

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

    البته همه این حالت ها و تنظیمات باید به نحوی تنظیم شوند. برای این کار من یک ثبات 12 بیتی تعریف کردم کنترل، داده هایی که از طریق یک اتصال سریال به همراه یک بیت اضافی برای برابری نوشته می شوند:
    کنترل رگ؛ reg control_parity; reg control_receiver; regcontrol_counter; همیشه @ (podge control_strobe، poge control_clock) اگر (control_strobe) شروع control_counter = 0 شروع شود. control_parity = 0; end else begin if (control_counter<= 11) begin control_receiver = control_data; control_parity = control_parity ^ control_data; end; if (control_counter < 12) control_counter = control_counter + 1; end end always @ (posedge strobe_in) begin if (control_counter == 12 && !control_parity) control = control_receiver; end

    بر این اساس، از سمت میکروکنترلر، کد (بسیار کثیف) به صورت زیر است:
    void control_send(uint16_t data) (set_bit(CTRL_PORT, CTRL_STROBE_PIN); // Strobe _delay_us(10); unset_bit (CTRL_PORT, CTRL_STROBE_PIN); // Strobe _delay_us (10); int b; char parity (b = 0); ب< 11; b++) { if (data & (1<

    در غیر این صورت، هیچ چیز خاصی در کد میکروکنترلر وجود ندارد: کار با نمایشگر روی کنترلر HD44780، دکمه ها، LED ها، منوی ساده و کار با مبدل آنالوگ به دیجیتال برای تعیین زاویه چرخش دستگیره.

    من همه چیز را اشکال زدایی کردم ، مطمئن شدم که کار می کند و قبلاً شروع به فشار دادن اجزا به داخل کیس کردم ...

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

    این یک تداخل با مدت زمان تنها چند ده نانوثانیه است که همه چیز را خراب می کند. تصمیم گرفتم با اسیلوسکوپ ساده ام ببینم در خط ساعت در Dandy چه اتفاقی می افتد:

    و این چیزی است که Famikom در همان مکان دارد:

    مشاهده می شود که این خط تا VCC کشیده شده است که برای Dendy بسیار قوی و برای Famikom اصلی بسیار ضعیف است. من شروع به آزمایش با کیت بدن کردم. خیلی زود مشخص شد که بهتر است نتیجه را نه با یک تحلیلگر منطقی، بلکه با خود کنسول نگاه کنید. مجبور شدم اسمبلر پردازنده 6502 را به خاطر بسپارم، یک برنامه ساده برای آزمایش بنویسم و ​​آن را روی کارتریج بنویسم:

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

  • بازی ها و کنسول های بازی،
  • الکترونیک برای مبتدیان
    • آموزش

    ابتدا می خوانیم که چگونه تعامل با او اتفاق می افتد. و از طریق ضبط در آدرس های خاصی اتفاق می افتد، 8 گروه از آنها وجود دارد: 8000 تا 9 FFE دلار(زوج)، 8001 دلار - 9 دلار آمریکا(فرد)، 000$-$BFFE(زوج)، $A001-$BFFF(فرد)، C000$-$DFFE(زوج)، $C001-$DFFF(فرد)، E000$-$FFFE(حتی) و $E001-$FFFF(فرد). نوشتن به هر آدرسی در گروه معادل است. الگو را ببینید؟ ثبت با استفاده از سه بیت آدرس انتخاب می شود: A0, A13و A14، بقیه بی ربط هستند.

    بیایید سعی کنیم عملکرد نقشه‌بردار را با استفاده از FPGA شبیه‌سازی کنیم. من کد را به زبان Verilog می نویسم. اینجا برجسته نشده است، از این بابت عذرخواهی می کنم.
    ابتدا، رجیسترهای خود را که وضعیت فعلی را ذخیره می‌کنند، شرح می‌دهیم:
    reg bank_select; reg prg_mode; reg chr_mode; reg r ; reg mirroring; reg ram_protect; reg irq_latch; reg irq_counter; reg a12_low_time; reg irq_reload; reg irq_reload_clear; reg irq_enabled;

    ما واکنش به رکورد را در آدرس های مربوطه شرح می دهیم. سیگنال افزایشی /رامسلما در مورد این واقعیت صحبت می کنیم که جذابیتی برای حافظه کارتریج وجود داشت، یعنی. توسط آدرس ها 8000 دلار - FFFF دلارما باید در این لحظه واکنش نشان دهیم.
    همیشه @ (posedge romsel) شروع می شود // اما فقط اگر نوشتن بود اگر (cpu_rw_in == 0) شروع شود // وضعیت A14، A13 و A0 را در نظر بگیرید، مورد ثبات مربوطه را به روز کنید ((cpu_addr_in, cpu_addr_in)) 3" b000: start / / $8000-$9FFE، حتی bank_select<= cpu_data_in; prg_mode <= cpu_data_in; chr_mode <= cpu_data_in; end 3"b001: r <= cpu_data_in; // $8001-$9FFF, odd 3"b010: mirroring <= cpu_data_in; // $A000-$BFFE, even 3"b011: ram_protect <= cpu_data_in; // $A001-$BFFF, odd 3"b100: irq_latch <= cpu_data_in; // $C000-$DFFE, even 3"b101: irq_reload <= 1; // $C001-$DFFF, odd 3"b110: irq_enabled <= 0; // $E000-$FFFE, even 3"b111: irq_enabled <= 1; // $E001-$FFFF, odd endcase end if (irq_reload_clear) irq_reload <= 0; end

    حال بیایید توضیح دهیم که بسته به رجیسترهای ما، هنگام دسترسی به قسمت مربوطه از حافظه، کدام بانک باید انتخاب شود.
    آنها مطابق جدول زیر تغییر می کنند:

    جایی که $8000 & #$40 - این prg_mode ما است و -2 و -1 به ترتیب ماقبل آخر و آخرین بانک هستند. معلوم می شود این کد:
    // بانکداری PRG همیشه @ (*) case start ((cpu_addr_in، prg_mode)) // $8000-$9FFF 3"b000: cpu_addr_out<= r; 3"b001: cpu_addr_out <= 6"b111110; // Предпоследний банк // $A000-$BFFF 3"b010, 3"b011: cpu_addr_out <= r; // $C000-$DFFF 3"b100: cpu_addr_out <= 6"b111110; // Предпоследний банк 3"b101: cpu_addr_out <= r; // $E000-$FFFF - всегда является последним банком default: cpu_addr_out <= 6"b111111; endcase // A12 у MMC3 на выходе всегда как на входе, он идёт напрямую в память cpu_addr_out <= cpu_addr_in; end

    اکنون CHR. چنین طرحی وجود دارد:

    جایی که $8000 & #$40 chr_mode است. اینطور معلوم می شود:
    // بانکداری CHR همیشه @ (*) شروع می شود اگر (ppu_addr_in == chr_mode) ppu_addr_out<= {r, ppu_addr_in}; else ppu_addr_out <= r]; // Максимальный размер CHR у MMC3 - 256 килобайт, поэтому A18 всегда 0. ppu_addr_out <= 0; end

    حالت Mirroring تنها در یک خط توضیح داده شده است. بسته به آن، خروجی کارتریج را می بندیم CIRAM A10در هر دو A10، روی هر دو A11:
    اختصاص ppu_ciram_a10 = آینه سازی؟ ppu_addr_in : ppu_addr_in;

    سخت تر. MMC3 می تواند وقفه ایجاد کند زمانی که خط خاصی روی صفحه کشیده می شود. این بسیار مفید است و بازی ها اغلب از آن استفاده می کنند. خطوط روی صفحه با استفاده از تماس به شمارش می شوند A12در PPU با تنظیمات معمولی، سیگنال روشن است A12از 0 منطقی به منطقی 1 دقیقاً یک بار در هر خط می رود، به جز انتقال های کوتاه به 0. و آنها را نباید شمارش کرد، این کار را کمی پیچیده می کند:

    // فعال کردن وقفه ها فقط زمانی که A12 کم است همیشه @ (*) شروع می شود اگر (!irq_enabled) شروع شود irq_ready = 0; irq<= 1"bZ; end else if (irq_enabled && !irq_value) irq_ready = 1; else if (irq_ready && irq_value) irq <= 1"b0; end // Сам счётчик always @ (posedge ppu_addr_in) begin if (a12_low_time == 3) // Время низкого уровня A12 должно быть не менее 3 циклов CPU begin if ((irq_reload && !irq_reload_clear) || (irq_counter == 0)) begin irq_counter = irq_latch; if (irq_reload) irq_reload_clear <= 1; end else irq_counter = irq_counter-1; if (irq_counter == 0 && irq_enabled) irq_value = 1; else irq_value = 0; end if (!irq_reload) irq_reload_clear <= 0; end // Время низкого уровня A12 должно быть не менее 3 циклов CPU always @ (posedge m2, posedge ppu_addr_in) begin if (ppu_addr_in) a12_low_time <= 0; else if (a12_low_time < 3) a12_low_time <= a12_low_time + 1; end

    اوه بله، MMC3 از اتصال رم اضافی نیز پشتیبانی می کند 6000 دلار - 7 دلار آمریکا! توضیح این را فراموش نکنیم:
    اختصاص cpu_wr_out = cpu_rw_in || ram_protect; اختصاص cpu_rd_out = ~cpu_rw_in; اختصاص cpu_sram_ce = !(cpu_addr_in && cpu_addr_in && m2 && romsel && ram_protect);

    این همه، MMC3 ما آماده است! کد کامل در اینجا قابل مشاهده است.

    1.3. مدار


    این بخش نمودارهای شماتیک دقیق ماژول پردازنده و کنسول ها را ارائه می دهد و همچنین گزینه ساخت کارتریج با نرم افزار برای کنسول های بازی DENDY 8 بیتی را در نظر می گیرد.

    1.3.1. ماژول پردازنده


    معمولاً سه تخته در کنسول بازی DENDY وجود دارد:
    * پردازنده مرکزی؛
    * اتصال دهنده های خروجی؛
    * مدولاتور و تثبیت کننده RF.
    تخته ها توسط کابل های تخت (روبان) انعطاف پذیر به هم متصل می شوند. گاهی اوقات گزینه هایی روی یک یا دو برد مدار چاپی ساخته می شوند، اما این روی مدار ست تاپ باکس تاثیری ندارد.
    در ابتدا، کنسول‌های بازی حاوی چندین تراشه با درجات مختلف یکپارچگی بودند که اصلی‌ترین آن‌ها تراشه‌های پردازنده مرکزی و پردازنده ویدیویی بود.
    توسعه میکروالکترونیک منجر به این واقعیت شده است که کنسول های بازی اکنون فقط LSI از نوع UM6561 یا معادل آن را شامل می شوند. در این ریزمدار، پردازنده‌های مرکزی و گرافیکی، حافظه و رجیسترهای ورودی/خروجی روی یک تراشه قرار دارند.
    بسیاری از ستاپ باکس های ویدیویی ساخت کره به جای یک UM6561 از چندین تراشه (معمولاً دو یا سه) استفاده می کنند. با این حال، اصل عملکرد جعبه تنظیم و سیگنال های اتصالات خروجی در این مورد تغییر نمی کند، بنابراین این گزینه های مدار در اینجا در نظر گرفته نمی شوند.

    نوع چند تراشه ای
    یک نمودار شماتیک از اولین نسخه کنسول بازی DENDY که با استفاده از چندین ریز مدار با درجات مختلف یکپارچگی ساخته شده است، در شکل نشان داده شده است. 1.12.
    بنابراین اساس کنسول بازی تراشه پردازنده مرکزی (IC1) است. عملکرد پردازنده توسط یک مولد پالس ساعت خارجی ساخته شده بر روی ترانزیستورهای Q1 و Q2 هماهنگ می شود که فرکانس آن توسط کوارتز X1 (21.251465 مگاهرتز) تثبیت می شود.
    سیگنال های تمام اتوبوس های داخلی (آدرس های A0 - A15، داده های DO - D7 و کنترل) کنسول بازی به کانکتور XS1 که کارتریج به آن متصل است، خروجی می شود. گذرگاه داده (پین‌های IC1/21-28)، آدرس (پین‌های IC1/4-19) و کنترل (پین‌های IC1/31،34) CPU (IC1) را به تراشه RAM (IC3) و پردازشگر ویدیو (IC2) متصل می‌کنند. ).
    رمزگشای آدرس روی تراشه 74LS139 (IC8) سیگنال هایی تولید می کند که به تراشه های دیگر اجازه می دهد با پردازنده مرکزی ارتباط برقرار کنند. سه بیت مهم گذرگاه آدرس A13 - A15 (پین های IC8 / 2،3،13) و سیگنال M2 (پایین IC8 / 14) به ورودی های رمزگشا تغذیه می شوند. اگر پردازنده با حافظه نصب شده در کارتریج کار می کند، سیگنال OT در پین IC8/9 کم است. هنگامی که داده ها با RAM داخلی جعبه تنظیم (IC3) رد و بدل می شوند، یک سطح پایین توسط سیگنال AO در پایه IC8/4 دریافت می شود. یک سیگنال سطح پایین در پین IC8/5 نشان می دهد که CPU از تراشه پردازنده ویدیویی IC2 استفاده می کند.
    روی همان تراشه با پردازنده مرکزی، یک پردازنده صدای کنسول بازی و یک مدار رمزگشای آدرس پورت ورودی / خروجی نیز وجود دارد.


    سیگنال های خروجی کانال های صوتی اول و دوم مخلوط می شوند و به خروجی AU1 (خروجی IC1 / 1) و سیگنال های کانال های باقی مانده - به خروجی AU2 (خروجی IC1 / 2) تغذیه می شوند. سیگنال صوتی کامل با اختلاط در مدار ساخته شده بر روی مقاومت های R8 - R12 و خازن C7 تشکیل می شود و سپس به کانکتور خروجی کنسول بازی و ورودی مدولاتوری که سیگنال RF را تولید می کند تغذیه می شود.
    سه رقم از عدد (D0، D1 و D2) نوشته شده در پورت 4016h به خروجی های IC1 / 39-37 منتقل می شود.

    هر بار که پردازنده از آدرس پورت 4016h می خواند، یک پالس سطح پایین در خروجی CK1 ظاهر می شود (پین IC1 / 36). و اگر پردازنده از پورت با آدرس 4017h بخواند، یک پالس مشابه در خروجی CK2 (پین IC1 / 35) تولید می شود.
    سیگنال های خروجی کنسول های بازی و تفنگ نوری از طریق دو رجیستر بافر IC6 و IC7 (نوع 74HC368) به گذرگاه داده منتقل می شود.
    تراشه پردازشگر ویدئو IC2 به همراه تراشه حافظه ویدئویی IC4 یک کامل را فراهم می کند


    سیگنال ویدیویی IC2 و IC4 توسط گذرگاه های آدرس، داده و کنترل به هم متصل می شوند. تراشه حافظه ویدئویی IC4 مشابه تراشه رم اصلی است.
    لطفاً توجه داشته باشید که در پردازنده ویدیویی IC2، از همان پین‌ها (IC2/31-37) به عنوان گذرگاه داده و به عنوان گذرگاه آدرس استفاده می‌شود. ابتدا هشت بیت پایینی آدرس سلول حافظه ویدئویی به اینجا می آیند. هنگامی که یک سیگنال سطح پایین در خروجی ALE ظاهر می شود (پین IC2 / 39)، این داده ها در بافر رجیستر IC5 (74LS373) ذخیره می شود. سپس خروجی ALE بالا تنظیم می‌شود، پین‌های IC2/26-30 با MSBهای آدرس باقی می‌مانند و پین‌های IC2/31-37 به عنوان گذرگاه داده استفاده می‌شوند.
    سیگنال‌های گذرگاه پردازنده ویدیویی نیز به کانکتور کارتریج XS1 هدایت می‌شوند.
    سیگنال ویدئویی کامل از خروجی VIDEO OUT پردازنده ویدئو (پین IC2 / 21) از طریق دنبال کننده امیتر ساخته شده در ترانزیستور Q3 به کانکتور خروجی VIDEO OUT و به مدولاتور می رود.
    مرحله تقویت سیگنال ویدئویی ممکن است در برخی مدل ها وجود نداشته باشد.

    اکنون به طور خلاصه در مورد تفاوت های اصلی با طرح اصلی که در مدل های دیگر وجود دارد صحبت خواهیم کرد. همه آنها به اتصال دهنده های مورد استفاده و هدف پین های جداگانه مربوط می شوند.
    دو گزینه طراحی اصلی برای سیستم بازی در نظر گرفته شده وجود دارد. NES مجهز به کانکتور کارتریج 72 پین، کانکتور گسترش 48 پین و کانکتورهای 7 پین برای اتصال کنسول های بازی است. کنسول بازی FAMICOM (DENDY) کاملاً نرم افزاری با NES سازگار است، اما از یک کانکتور کارتریج 60 پین، یک رابط گسترش 15 پین و کانکتورهای 9 پین برای کنسول های بازی استفاده می کند.
    طرح تمام کانکتورهای کنسول بازی DENDY در شکل نشان داده شده است. 1.13a-c و کنسول های NES - در شکل. 1.13g-e.

    گزینه تک تراشه
    یک نمودار شماتیک از یک نسخه تک تراشه ای از کنسول بازی DENDY در شکل نشان داده شده است. 1.14.
    در اینجا، عملکرد پردازنده مرکزی، پردازنده ویدیویی و حافظه توسط یک LSI از نوع UM6561 انجام می شود. فرکانس مولد ساعت داخلی توسط یک تشدید کننده کوارتز XI (26.601712 مگاهرتز) تثبیت می شود. گاهی اوقات مدار ژنراتور ساعت شامل یک ترانزیستور نیز می شود.
    بیشتر سیگنال های خروجی مستقیماً به کانکتور کارتریج XS4 می روند. بخشی از سیگنال ها به کانکتورهای اتصال کنسول های بازی XS1، XS2 و کانکتور توسعه XS3 می رود.
    سیگنال های تصویری و صوتی به کانکتورهای خروجی کنسول بازی و به ورودی مدولاتور منتقل می شوند، گاهی اوقات از طریق تقویت کننده های ترانزیستوری.

    کانکتورهای خروجی
    کنسول DENDY دارای دو یا سه کانکتور برای اتصال ریموت، تفنگ نوری و سایر لوازم جانبی است. کانکتورها می توانند سه نوع باشند: 7، 9 و 15 پین.
    کنسول های بازی را می توان به کانکتور کنسول 7-1 یا 9 پین یا به کانکتور گسترش کنسول 15 پین وصل کرد، تفنگ نوری را فقط می توان به کانکتور 7 یا 15 پین و سایر دستگاه ها را به 15 پین وصل کرد. اتصال دهنده
    برای اتصال کنسول ها از دو کانکتور 9 پین و یک کانکتور انبساط 15 پین استفاده شده است. کارتریج DENDY از یک کانکتور 60 پین در قسمت بالایی استفاده می کند.
    NES دارای دو کانکتور 7 پین و یک کانکتور توسعه 48 پین برای کنترلرهای بازی است.
    برای اتصال کارتریج به NES از یک کانکتور 72 پین استفاده شده است که با وجود مدارهای اضافی متصل به کانکتور انبساط با کانکتور 60 پین متفاوت است. سیگنال های پردازشگر ویدئو و گذرگاه CPU به این کانکتور خروجی می شود.
    ظاهر کانکتورهای کنسول بازی DENDY و هدف تک تک مخاطبین در شکل نشان داده شده است. 1.13. اتصال دهنده گسترش (شکل 1.136) در زیر مورد بحث قرار گرفته است، زیرا این او است که بیشتر

    مناسب برای اتصال دستگاه های مختلف اضافی.
    پین 2 (AUDIO IN) سیگنال صوتی را دریافت می کند که با سیگنال های خروجی پردازنده صدا مخلوط می شود.
    کنتاکت های 4-8 (J2 DO - J2 D4) ورودی بیت های مربوطه پورت جوی استیک دوم هستند. کدهای سیگنال از این ورودی ها را می توان از پورت 4017h با دستور LDA $4017 دریافت کرد.
    ورودی J1 D1 (پایه 13) به بیت D1 پورت 4016h متصل است.
    هنگامی که CPU به پورت هایی با آدرس های 4016h و 4017h دسترسی پیدا می کند، پالس های کوتاه مدت سطح پایین در خروجی های CLK1 (پایین 14) و CLK2 (پایین 9) تولید می شوند. خروجی های OUT0 -OUT2 (پین های 10-12) بیت های DO -D2 از کلمه نوشته شده در پورت 4 016h را دریافت می کنند.
    ورودی IRQ (پایه 3) سیگنال درخواست وقفه را دریافت می کند.

    1.3.2. کارتریج


    ماژول قابل تعویض کنسول بازی DENDY - یک کارتریج - معمولاً شامل دو تراشه ROM یا RAM است.
    یک تراشه ROM به پردازنده ویدئو متصل است و اطلاعات تولید کننده کاراکتر را ذخیره می کند. به جای رام مولد کاراکتر، برخی کارتریج ها از تراشه رم ثابت استفاده می کنند. یک تراشه رام دیگر با نرم افزار به واحد پردازش مرکزی متصل است. گاهی اوقات یک رم اضافی با باتری لیتیومی روی برد کارتریج وجود دارد که برای حفظ وضعیت بازی طراحی شده است.
    تقریباً همه کارتریج ها، به استثنای ساده ترین آنها، دارای یک تراشه کنترل کننده صفحه حافظه هستند که به عنوان رمزگشای آدرس قابل برنامه ریزی عمل می کند.
    از نظر ساختاری، کارتریج پیشوند DENDY یک کیس پلاستیکی محافظ در ابعاد 105x90x20 میلی متر است که دارای یک کلید به شکل دو مخروطی برای نصب صحیح است. این یک برد مدار چاپی با یک کانکتور 60 پین و ریز مدارهای بسته بندی نشده نصب شده است: ROM، RAM و کنترل کننده صفحه.
    یک نمودار شماتیک از یک کارتریج بازی بدون RAM اضافی با کنترل کننده صفحه MBC1 در شکل نشان داده شده است. 1.15.
    کارتریج از دو تراشه ROM (IC1 و IC2) و یک کنترل کننده صفحه حافظه IC3 تشکیل شده است. چیپ IC1 (27С128) رام پردازنده ویدیویی است! با مولدهای شخصیت در آن نوشته شده است.
    در فضای آدرس پردازنده ویدئو، صفحات جداگانه ROM در آدرس های 0000h - 1FFFh قرار می گیرد. کم اهمیت ترین بیت های آدرس مستقیماً از پین های مربوطه کانکتور XS1 به تراشه IC1 داده می شود. رتبه های ارشد


    برنج. 1.15. نمودار شماتیک کارتریج کنسول بازی DENDY

    آدرس های VA12 و VA13 توسط تراشه کنترل کننده صفحه حافظه IC3 تولید می شوند.
    تراشه ROM زمانی انتخاب می شود که یک سیگنال سطح پایین در ورودی CS (پین IC1 / 20) متصل به خط VA13 گذرگاه آدرس پردازنده ویدیو وجود داشته باشد. داده ها از خروجی های ROM به پین ​​های کانکتور XS1 منتقل می شوند.
    Chip IC2 (KONAMI ROM 1Mbit) یک رام ماسک شده با برنامه ضبط شده در آن با ظرفیت 1 مگابیت (128 کیلوبایت) است. بیت های پایین آدرس A0 - A13 از مخاطبین مربوطه کارتریج می آیند و بیت های بالای آدرس A14 - A16 توسط کنترل کننده صفحه حافظه IC3 تولید می شوند. سیگنال CS که عملکرد ROM IC2 را امکان پذیر می کند، از IC3 نیز ارسال می شود.
    IC3 یک رمزگشای آدرس قابل برنامه ریزی است که MSB آدرس تراشه های ROM IC1 و IC2 را تولید می کند. همچنین یک سیگنال VA10 اینچی تولید می کند که سطح آن انتخاب حالت نمایش صفحه را تعیین می کند.
    در کارتریج مورد نظر، برخی از خروجی ها به هم متصل نیستند، بنابراین از قابلیت های ریز مدار به طور کامل استفاده نمی شود.

    1.3.3. تعدیل کننده


    مدولاتور کنسول بازی DENDY یک سیگنال تصویر را از تراشه پردازشگر ویدئویی IC2 و یک سیگنال صوتی را از تراشه پردازنده مرکزی IC1 دریافت می کند و یک سیگنال RF کامل تلویزیون را در یکی از محدوده های متر تولید می کند. مدار مدولاتور استاندارد نیست و معمولاً توسط سازنده تعیین می شود. با این حال، اصل عملکرد و ترکیب اجزای اصلی همیشه یکسان است، بنابراین تغییرات در مدار نباید باعث ایجاد مشکل در هنگام تعمیر شود.
    یک نمودار شماتیک از یکی از انواع احتمالی مدولاتور RF در شکل نشان داده شده است. 1.16.
    اسیلاتور اصلی RF بر روی یک ترانزیستور فرکانس بالا Q2 (مشابه ترانزیستور) ساخته شده است.
    KT368A). فرکانس حامل یکی از کانال های تلویزیونی را تشکیل می دهد. به طور معمول، فرکانس عملکرد ژنراتور جعبه تنظیم در محدوده 170-230 مگاهرتز است و توسط عناصر L1، C8 - C11 1، R9 - R11 تعیین می شود. فرکانس با تغییر اندوکتانس سیم پیچ L1 تنظیم می شود.
    ژنراتور که بر روی ترانزیستور Q1 (مشابه ترانزیستور KT3102) پیاده سازی شده است، فرعی صدا را برای سیگنال تلویزیون کامل تشکیل می دهد. سیگنال خروجی ژنراتور توسط یک سیگنال صوتی که از طریق مدار R4، C1 از ورودی AUDIO IN (پین 4 کانکتور CN1) می آید، مدوله می شود.
    بسته به سازنده ست تاپ باکس، فرکانس ژنراتور 5.5 یا 6.5 مگاهرتز است. تنظیم دقیق فرکانس سیگنال با چرخش هسته ترانسفورماتور T1 انجام می شود.
    میکسر ساخته شده بر روی دیودهای D1، D2 (مشابه دیود KD503A)، ترانسفورماتور T2 و ترانزیستور Q3، یک سیگنال تلویزیونی HF کامل را تشکیل می دهد. ورودی میکسر یک سیگنال نوسانگر اصلی و یک سیگنال ویدئویی با فرکانس پایین را از پایه 3 کانکتور CN1 دریافت می کند. از خروجی میکسر، سیگنال RF از طریق مدار مطابق C15، L3 به کانکتور خروجی RF OUT ماژول پردازنده منتقل می شود.

    1.3.4. کنسول های بازی


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

    پد بازی استاندارد
    کنسول استاندارد بازی برای کنسول DENDY از یک صلیب متحرک و چهار تشکیل شده است

    دکمه های فردی در داخل ریموت کنترل یک ریزمدار بدون بسته بندی وجود دارد که آنالوگ ریز مدار HEF4021B است. در غیاب ریزمدار اصلی، تقریباً از هر رجیستر شیفت 8 بیتی می توان استفاده کرد.
    یک نمودار شماتیک از یک کنسول استاندارد در شکل نشان داده شده است. 1.17.


    برنج. 1.17. نمودار شماتیک یک کنسول بازی استاندارد برای کنسول DENDY
    هنگامی که یک دکمه در حین پخش فشار داده می شود، ورودی مربوطه شیفت رجیستر پایین می آید. سطح بالایی هنگام باز بودن دکمه ها با اتصال خطوط ورودی رجیستر به گذرگاه برق +5 ولت از طریق مقاومت هایی با مقاومت 10-68 کیلو اهم فراهم می شود.
    حالت های ورودی در رجیستر IC1 زمانی ذخیره می شود که یک پالس سطح بالا به ورودی PE میکرو مدار می رسد. پس از آن، در لبه منفی سیگنال در ورودی CLK (خروجی IC1 / 10)، محتویات رجیستر جابجا می شوند و مهم ترین بیت در گذرگاه D0 خروجی می شود.
    دومین کنسول بازی ارائه شده با جعبه تنظیم ممکن است دکمه های START و SELECT را نداشته باشد، اما این روی طرح کنسول و اصل عملکرد آن تأثیری ندارد.

    توربو ریموت
    نمودار شماتیک کنترل از راه دور توربو برای کنسول بازی DENDY در شکل نشان داده شده است. 1.18.
    تنها تفاوت بین کنترل از راه دور توربو و استاندارد، وجود خروجی T6 هرتز اضافی بر روی ریز مدار رجیستر شیفت و دو دکمه اضافی TURBO A و TURBO B متصل به این خروجی است.
    ژنراتور داخلی تراشه کنترل از راه دور، دنباله ای از پالس ها را با فرکانس 6-10 هرتز در خروجی T تولید می کند. بنابراین، فشار دادن و نگه داشتن دکمه TURBO A مانند فشار دادن و رها کردن دکمه A با شدت 6 بار در ثانیه است. استفاده از این دکمه ها باعث کاهش ساییدگی کلیدهای ریموت می شود، زیرا در بازی معمولاً از دکمه های A و B هنگام تیراندازی استفاده می شود.


    برنج. 1.18. نمودار شماتیک کنترل از راه دور توربو برای کنسول بازی DENDY

    آداپتور برای اتصال چهار کنترل از راه دور
    برخی از بازی ها می توانند تا چهار بازیکن داشته باشند. در این حالت چهار کنسول بازی به صورت موازی از طریق یک آداپتور مخصوص به کانکتورهای کنسول بازی متصل می شوند.
    نمودار شماتیک آداپتور در شکل نشان داده شده است. 1.19.
    همانطور که از نمودار شماتیک مشاهده می شود، وظیفه اصلی آداپتور این است که اطمینان حاصل کند که اطلاعات از کنسول های 1 و 3 در طول هشت پالس ساعت اول و از کنسول های 2 و 4 - با هشت پالس بعدی خوانده می شود.
    سیگنال همگام سازی اعمال شده در خط STRB وضعیت کنسول ها را در رجیسترهای داخلی آنها ثابت می کند و تنظیمات اولیه مدارهای آداپتور را انجام می دهد.
    در طول هشت پالس ساعت اول، خروجی های Q8 شمارنده های IC1 و IC2 به پایین هدایت می شوند که این امر تضمین می کند که پالس های ساعت به کنسول های 1 و 3 ارسال می شوند و همچنین اطلاعات این کنسول ها به ورودی های کنسول بازی منتقل می شود.
    پس از ساعت هشتم ارسال شده از کنسول بازی هنگام خواندن از درگاه I/O، خروجی Q8 تراشه مربوطه (IC1 یا IC2) بالا می رود (log. 1) که باعث سوئیچ IC3 یا IC4 می شود و به آن متصل می شود. کانکتورهای کنسول به ترتیب 2 یا 4 کنسول هستند.

    تفنگ سبک
    روی انجیر 1.20 گزینه های ممکن برای نمودار مدار تفنگ سبک کنسول بازی DENDY را نشان می دهد.
    ترانزیستور نوری در اینجا به عنوان یک عنصر حساس به نور استفاده می شود. در ارزان ترین ستاپ باکس ها، گاهی اوقات با یک فتودیود جایگزین می شود که منجر به بدتر شدن حساسیت دستگاه می شود.
    سیگنال خروجی فتودیود از طریق خازن جداکننده C1 به یک تقویت کننده ساخته شده بر روی ترانزیستور Q1 تغذیه می شود. از کلکتور این ترانزیستور، سیگنال معکوس از طریق پین 5 در امتداد مدار D4 به ماژول پردازنده کنسول بازی منتقل می شود.

    اگر تفنگ به سمت صفحه تلویزیون گرفته شود، سیگنال پالسی در خروجی D4 با فرکانس برابر با دوره اسکن فریم تولید می شود.
    ماشه تفنگ نوری به دکمه ای با کنتاکت های معمولی بسته متصل است. هنگامی که ماشه آزاد می شود، پین اتصال D3 به زمین متصل می شود. هنگامی که ماشه فشار داده می شود، کنتاکت ها باز می شوند و یک سیگنال سطح منطقی بالا در ورودی D3 ظاهر می شود که با اتصال این مدار در داخل کنسول بازی از طریق یک مقاومت 10-51 کیلو اهم به گذرگاه +5 ولت ارائه می شود.

    1.3.5. واحد قدرت


    منبع تغذیه کنسول بازی DENDY از یک آداپتور AC خارجی و یک تثبیت کننده داخلی تشکیل شده است.

    وظیفه آداپتور شبکه خارجی تبدیل ولتاژ شبکه ~ 220 ولت به ولتاژ ثابت 9-12 ولت است که به تثبیت کننده داخلی کنسول بازی منتقل می شود.
    نمودار شماتیک آداپتور شبکه DENDY در شکل نشان داده شده است. 1.21.
    هنگام تعمیر دستگاه، به یاد داشته باشید که کنتاکت مرکزی کانکتور خروجی به یک سیم مشترک متصل است.

    ولتاژ ناپایدار از آداپتور به تثبیت کننده داخلی کنسول بازی، ساخته شده بر روی تراشه AN7805 یا روی یک ترانزیستور و در ماژول پردازنده، عرضه می شود. ولتاژ ثابت +5 ولت در خروجی تثبیت کننده تشکیل می شود.
    نمودارهای شماتیک دو نوع تثبیت کننده ولتاژ تغذیه کنسول بازی DENDY در شکل نشان داده شده است. 1.22 و نیازی به توضیحات اضافی نیست.


    برنج. 1.22. نمودارهای شماتیک تنظیم کننده ولتاژ برای کنسول بازی DENDY

    1.4. خرابی های معمولی


    پیوست روشن نمی شود
    دلایل احتمالی: خرابی آداپتور شبکه یا تثبیت کننده داخلی. اتصال کوتاه یا مدارهای منبع باز؛ نقص کارتریج؛ خرابی ماژول پردازنده
    1. ولتاژ خروجی آداپتور شبکه را اندازه گیری کنید. اگر بیش از 9-12 ولت است، برق را تعویض کنید
    آداپتور تمرین نشان می دهد که اغلب خرابی ها توسط دیودهای پل یکسو کننده ایجاد می شود. اگر ترانسفورماتور خراب شود، هر منبع تغذیه با ولتاژ خروجی 9-12 ولت و جریان بار مجاز 500 میلی آمپر انجام می شود.
    2. کنترل از راه دور، کارتریج و مدولاتور را از ماژول پردازنده جدا کنید، سپس واحدهای کنسول بازی را برای اتصال کوتاه بررسی کنید. در صورت تشخیص اتصال کوتاه، پس از رفع آن، تثبیت کننده و مقاومت کم مقاومت نصب شده در آن را بررسی کنید. هنگامی که اضافه بار رخ می دهد، یکی از هادی های چاپ شده در مدار برق معمولاً می شکند، بنابراین باید بردها را به دقت بررسی کنید تا از سالم بودن هادی ها مطمئن شوید.
    H. در صورت عدم اتصال کوتاه، استابلایزر داخلی کنسول بازی را بررسی کنید. ولتاژ خروجی تثبیت کننده باید در محدوده 0.1 ± 5 ولت باشد. در غیر این صورت، در تثبیت کننده ساخته شده بر روی تراشه AN7805، باید تراشه IC1 (مشابه KR142E-H5A) را جایگزین کنید و خازن های C1 - C4 را بررسی کنید. در تثبیت کننده نصب شده روی ترانزیستور، ترانزیستور Q1 (تعویض احتمالی - KT815)، دیود زنر D1 (تعویض احتمالی - KS156A) و مقاومت R1 را بررسی کنید. به جای مقاومت، جایز است فیوز قرار دهید که تثبیت کننده را از اتصال کوتاه محافظت می کند.
    4. ست تاپ باکس را بدون ریموت، مدولاتور و کارتریج روشن کنید. یک سیگنال ویدیویی باید در جک VIDEO OUT وجود داشته باشد. هنگامی که این سیگنال به ورودی LF تلویزیون اعمال می شود، یک تصویر آشفته بر روی صفحه ظاهر می شود که از نقاط و مربع های رنگی تشکیل شده است. وجود سیگنال خروجی نشان دهنده نقص در کنسول یا مدولاتور است.
    5. اگر سیگنال خروجی وجود ندارد، نوسان ساز کریستالی و مرحله تقویت ویدئو ترانزیستور را بررسی کنید. قابلیت سرویس دهی رزوناتور کوارتز X1 و ترانزیستورهای Q1 - Q3 به ما امکان می دهد نتیجه بگیریم که لازم است کل ماژول پردازنده جایگزین شود.

    دستگاه ناپایدار است
    دلایل احتمالی: خرابی آداپتور شبکه خارجی یا تثبیت کننده داخلی. آلودگی مخاطبین کانکتور اتصال کارتریج.

    1. ولتاژ خروجی آداپتور AC را بررسی کنید. اغلب به دلیل ظرفیت کم بار آداپتور عرضه شده با کنسول بازی، خرابی رخ می دهد. مشکل با اتصال یک آداپتور قوی تر حل می شود.
    2. قابلیت اطمینان اتصالات تماسی را در کانکتورهای ست تاپ باکس بررسی کنید. کانکتور اتصال کارتریج باید با دقت بررسی شود. تماس ها را با الکل پاک کنید.
    3. استابلایزر داخلی کنسول بازی را بررسی کنید. نصب ریز مدار یا ترانزیستور قدرت تثبیت کننده روی رادیاتور با سطح اتلاف کافی (حدود 10 سانتی متر مربع) مفید است.
    4. خازن های اضافی را در مدار برق نصب کنید، به عنوان مثال، با مقدار اسمی 100.0 uF x 16 V و 0.01 uF بر روی هر یک از بردهای پیشوند و در کارتریج.

    تفنگ سبک کار نمی کند
    دلایل احتمالی: شکستگی در کابل اتصال یا تماس های بد در کانکتور. نقص عملکرد دیود نوری یا ترانزیستور تفنگ نور؛ اختلال در عملکرد کنتاکت های ماشه در تفنگ نور.
    الگوریتم عیب یابی:
    2. ترانزیستور در تفنگ نور و کنتاکت های زیر ماشه را بررسی کنید. اطمینان حاصل کنید که هنگام فشار دادن ماشه، یک تماس بسته است، زیرا شکست، به عنوان یک قاعده، در قسمت مکانیکی اسلحه رخ می دهد.
    3. حساسیت کم تفنگ اغلب به دلیل جابجایی لنز فوکوس نصب شده در لوله است. در این صورت باید لنز را در جای خود نصب کرده و محکم کنید. تنظیم پایه لنز به شما امکان می دهد عملکرد حتی یک تفنگ سبک کار را بهبود بخشید.
    4. اگر مدارهای داخلی تفنگ نوری به درستی کار می کنند، کل ماژول پردازنده کنسول بازی باید تعویض شود.

    کنترل از راه دور کار نمی کند
    علل احتمالی: شکستن کابل اتصال یا تماس ضعیف در کانکتور. دکمه ها کثیف؛ خرابی تراشه کنترل از راه دور
    الگوریتم عیب یابی:
    1. یکپارچگی کابل اتصال و قابلیت اطمینان اتصال در کانکتور را بررسی کنید. در صورت خرابی کانکتور، آن را به همراه قسمت جفتی، با هر کانکتور 7 پینی که موجود است تعویض کنید.
    2. سیگنال های ورودی PE و STROBE را بررسی کنید. عدم وجود سیگنال نشان دهنده نیاز به تعویض پردازنده مرکزی است.
    3. سیگنال خروجی میکرو مدار نصب شده در کنترل از راه دور را بررسی کنید. در صورت عدم وجود سیگنال، کنترل از راه دور را تعویض کنید.

    برخی از دکمه های کنترل از راه دور کار نمی کنند

    علل احتمالی: آلودگی ریموت کنترل یا خرابی ریز مدار.
    الگوریتم عیب یابی:
    1. برد کنترل از راه دور و واشر لاستیکی را با پدهای رسانا با الکل پاک کنید.
    2. اگر لنت های رسانای واشر لاستیکی معیوب هستند، آنها را با چسباندن قطعات فویل تعمیر کنید. استفاده از فویل از بسته های سیگار راحت تر است: دارای پایه کاغذی است که چسبندگی بهتری به لاستیک ایجاد می کند.
    3. در صورت آسیب به پوشش رسانا روی برد، آن را با استفاده از سیم نصب تمیز شده که به مسیرهای برد مدار چاپی لحیم شده است، بازگردانید.
    4. اگر تمام پدهای تماسی سالم هستند، لازم است ریز مدار نصب شده در ریموت کنترل یا کل ریموت کنترل را تعویض کنید.

    بدون سیگنال RF در خروجی مدولاتور
    علل احتمالی: نقض تنظیمات ژنراتور، نقص در نوسانگر اصلی یا میکسر.
    الگوریتم عیب یابی:
    1. با بررسی سیگنال های صوتی تصویری در خروجی LF بررسی کنید که عنصر خراب در مدار مدولاتور RF قرار دارد. عدم وجود هر یک از این سیگنال ها نشان دهنده خرابی ماژول پردازنده است.
    2. اگر صدا یا تصویر وجود نداشته باشد، به احتمال زیاد نوسان ساز معیوب است. برای بررسی ژنراتور، باید فرکانس سیگنال خروجی را اندازه گیری کنید: باید در محدوده 170-230 مگاهرتز باشد. عدم وجود سیگنال منجر به این نتیجه می شود که ترانزیستور Q2 باید جایگزین شود. اگر فرکانس ژنراتور فراتر از محدودیت های مشخص شده باشد، لازم است عناصر LI، C8 -C11، R10، R11 را بررسی کنید.
    3. پس از اطمینان از اینکه نوسان ساز اصلی کار می کند، میکسر (دیودهای D1، D2 و ترانسفورماتور T2) و همچنین مدار تطبیق L2 را بررسی کنید. C13، C14.
    4. عدم وجود سیگنال صوتی با تصویر معمولی نشان دهنده خرابی ژنراتور فرعی حامل صوتی است. در این مورد، بررسی کنید که فرکانس مولد صدای IF با استاندارد تلویزیون (5.5 یا 6.5 مگاهرتز) مطابقت داشته باشد و در صورت لزوم، ژنراتور را با چرخاندن هسته ترانسفورماتور T1 تنظیم کنید. اگر سیگنالی در خروجی ژنراتور وجود ندارد، ترانزیستور Q1 را تعویض کنید.

    چگونه با دستان خود یک کنسول بازی بسازیم اصلان نوشته شده در 8 نوامبر 2017

    به طور کلی، مدتها پیش ایده انجام این کار را داشتم، اما فقط اکنون نرم افزار چنین صنایع دستی به وضعیت کم و بیش مناسبی رسیده است.
    قبل از اینکه من سعی کردم این کار را از طریق یک نت تاپ x86 انجام دهم، اما چیز بسیار دست و پا گیر و دمدمی مزاجی بود. سپس نت تاپ را فروخت و یک Android TV Box دست دوم خرید. این بسیار فشرده تر و سبک تر است، اما من نتوانستم شبیه ساز RetroArch را به درستی در اندروید کار کنم، مهم نیست که مونتاژ آن چگونه باشد، اشکالات محکمی وجود دارد.

    بنابراین، تصمیم گرفته شد که یک جعبه تنظیم بر اساس Raspberry Pi 3 جمع آوری شود، زیرا در حال حاضر تصاویر سیستمی آماده برای این اهداف وجود دارد و انعطاف پذیری پیکربندی به سادگی فوق العاده است.


    بنابراین، ما نیاز داریم:
    - Raspberry Pi (هر کس انجام خواهد داد، من قوی ترین را خریدم، با حاشیه)؛
    - منبع تغذیه 5 ولت 3 آمپر؛
    - دو جوی استیک USB.
    - بدن (هر چیزی را می توان استفاده کرد)؛
    - اتصالات و اتصال دهنده های مختلف (به سلیقه).
    - چسب (به سلیقه، من اپوکسی دو جزئی را دوست دارم).

    من تصمیم گرفتم از کیس یک کنسول مرده استفاده کنم، و در یک بازار کثیف یک کپی چینی 16 بیتی از SEGA Genesis 3 را به قیمت چند دلار پیدا کردم.

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

    من محل عناصر داخل کیس را فهمیدم. همانطور که می بینید، من یک بلوک کانکتور RCA خریدم و بی فایده ترین آنها در زندگی روزمره، اما برای نیازهای من ضروری است، یک آداپتور HDMI مادر و پدر. برای دور کردن تخته از لبه کیس لازم است. و سپس بسته ای با مجموعه ای از قفسه های برنجی مختلف به دست آمد (آنها به نوعی در بازار محلی گران قیمت هستند).

    قاب نرم آداپتور HDMI را چند میلی متر بریدم و یک سوراخ مستطیلی در هر دو نیمه کیس ایجاد کردم. قفسه ها را زیر تخته گذاشتم و آن را با اپوکسی پر کردم و فراموش نکردم که محل های چسب را با سمباده ریز تمیز کنم.

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

    اما همه چیز تقریباً عالی بود! من بیش از حد راضی هستم.

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

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

    برد را آماده کردم و دو سوکت USB را برای جوی استیک ها لحیم کردم.

    من آن را روی قفسه ها در جای مناسب روی کیس ثابت کردم. اما، البته، کانکتورها از نظر شکل با Segov مطابقت ندارند و من واقعاً این را دوست نداشتم.

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

    پاور، سوکت USB و خروجی های آنالوگ را با سیم لحیم کردم. به هر حال، من نمی دانم که این یک تراشه نرم افزاری است یا سخت افزاری، اما در Raspberry Pi 3 تشخیص خروجی (آنالوگ / دیجیتال) به صورت خودکار است، اما در نسخه اول رایانه مجبور شدم به صورت دستی سوئیچ کنم.

    زمان ساخت دکمه های پاور و تنظیم مجدد است. از آنجایی که هیچ دکمه معمولی برای این موارد در Raspberry Pi وجود ندارد و من نمی خواستم آن را خاموش کنم و برق را به سختی قطع کردم، تصمیم گرفتم دکمه ها را به مخاطبین GPIO وصل کنم و اسکریپت هایی برای خاموش شدن بنویسم. و راه اندازی مجدد در بارگذاری خودکار. دکمه پاور باید روی GPIO های کاملاً تعریف شده آویزان شود، به طوری که وقتی دکمه فشار داده می شود، ست تاپ باکس ما نه تنها خاموش می شود، بلکه روشن می شود.
    و اسکریپت ها به راحتی در اینترنت پیدا می شوند. اینجا من با یک سورپرایز ناخوشایند مواجه شدم. برای روشن/خاموش کردن، به یک دکمه بدون تعمیر نیاز دارید و سوئیچ اصلی در کنسول یک نوار لغزنده ساده بود. مجبور شدم یک مکانیسم برگشت درست کنم و لغزنده را با گریس سیلیکون آغشته کنم.

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

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

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

    خود جوی استیک ها از نظر کیفیت 3 از 5 هستند، مونتاژ عالی است، اما ضربدرها به طور نامشخص فشرده می شوند. این من درباره Retrolink هستم. می توانید جوی استیک های USB دارای مجوز سگا را پیدا کنید، اما قیمت ها بسیار گزنده هستند.

    در واقع، آماده است! باقی مانده است که جوی استیک ها را روشن کنید، پیکربندی کنید و Wi-Fi را وصل کنید (به یک صفحه کلید نیاز دارید) و سپس از طریق Total Commander به پوشه های اشتراک گذاری شده دستگاه بروید و بازی های مورد علاقه خود را در آنجا رها کنید.

    در اینجا یک تصویر هنگام اتصال از طریق RCA است. این ایده بلافاصله خود را برای بزرگتر کردن فونت ها نشان می دهد.

    و اگر HDMI را وصل کنید به این ترتیب معلوم می شود. خیلی بهتر. اما خروجی های آنالوگ برای بازی با دوستان در کشور با آبجو مفید خواهد بود.

    سلب مسئولیت: یک تاخیر ورودی جزئی وجود دارد (Input Lag)، نه تنها توسط من متوجه شدم، و تلویزیون هیچ ربطی به آن ندارد. اینترنت روش هایی را برای کاهش تأخیر توصیف می کند، اما این داستان دیگری است.

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

    در ابتدا فکر نمی کردم مقاله ای در مورد این موضوع بنویسم، اما به نظر می رسد که این بخشی از یک سری مقالات در مورد موضوعات شیک است. و بله، این بار در درجه اول در مورد Dandy داخلی است، و نه در مورد کنسول های اصلی - Famicom یا NES. من این دستگاه را به عنوان هدیه به یک نفر که ویدیوهای بسیار جالبی در مورد دندی می گیرد و بر سازگاری با این کلون خاص تمرکز می کند ساخته ام.

    واقعیت این است که لوازم جانبی مختلفی هم برای Famicom و هم برای NES عرضه شد: عینک های سه بعدی، صفحه کلید، ربات ها، بارکدخوان ها، انواع کنترلرهای بازی و موارد دیگر. فقط تپانچه سبک به ما رسیده است. وظیفه من مونتاژ دستگاهی بود که یک اسپلیتر برای چهار بازیکن (بله، چنین بازی هایی وجود داشت) و یک کنترلر Arkanoid را ترکیب کند.

    پورت های ورودی/خروجی

    قبل از هر چیز، لازم است بگوییم که کنترلرهای بازی Famicom، NES و Dendy چگونه با جوی استیک کار می کنند و تفاوت آنها در این زمینه چیست.

    از نظر بازی ها، پورت های I/O دو رجیستر با آدرس هستند $4016 و $4017 ، که به ترتیب با دو پورت مرتبط هستند، جایی که همه چیز متصل است. اما در کنترل کننده های استاندارد، فقط یک سیم برای خواندن داده ها استفاده می شود - D0، داده هایی که از آن به ترتیب از طریق کمترین بیت (صفر) در هر یک از ثبات ها در دسترس است: $4016.0 و $4017.0 . به طور مشابه، یک سیم در هر رکورد استفاده می شود، که معمولا به عنوان نامیده می شود استروب(یا چفت) که شمارنده داخل گیم پد را بازنشانی می کند و از طریق نوشتن در آن در دسترس است $4016.0 (بله، برای هر دو کنترلر رایج است).

    به زبان ساده، برای به دست آوردن وضعیت دکمه های اولین کنترلر، ابتدا باید 1 به را بنویسید $4016.0 ، بلافاصله 0 را در آنجا بنویسید، بنابراین شمارنده را تنظیم مجدد کنید، و سپس بخوانید $4016 و $4017 هشت بار (برای هر یک از دکمه ها)، دریافت اطلاعات دکمه از کمترین بیت مهم. اما بیت های دیگر در این ثبات ها برای چیست، این خطوط به کجا می روند؟ پورت کنترلر NES را در نظر بگیرید:

    بله، آنها واقعاً دنبال آن هستند D3و D4! آنها از طریق در دسترس هستند $4016.3 , $4016.4 در بندر اول و $4017.3 , $4017.4 دوم، و آنها برای کنترل کننده های غیر استاندارد استفاده می شوند.

    در مورد همتای ژاپنی آن - Famicom، این پورت ها وجود ندارد و خود کنترلرهای بازی از کنسول جدا نیستند، اما دارای یک پورت توسعه است که یک کانکتور DB-15 است.

    آشنا به نظر می رسد، درست است؟ بله، زمانی که چینی ها Dandy ما را طراحی کردند (من شک دارم که ما آن را طراحی کرده بودیم) و آنها نیاز به ساخت کنترلرهای جداشدنی داشتند، آنها تصمیم گرفتند که پورت توسعه را به عنوان پایه در نظر بگیرند، زیرا دارای کنتاکت هایی برای کنترلر دوم است و در یک مکان قرار دارد. کمی در سمت راست Famicom مرکز. حتی لازم نبود پین اوت را عوض کنند. در مورد اولین کنترلر، همان DB-15 را گرفتند، آن را در سمت چپ قرار دادند و پین اوت را تغییر دادند تا اولین کنترلر وصل شود. و فقط او

    پورت های جلویی Famicom و Dandy ما را مقایسه کنید:

    در اینجا یک داستان عجیب از این کانکتورهای پانزده پین ​​روی گیم پدهایی است که در کشور ما استفاده می شود.

    اما بیایید ببینیم خروجی این پورت توسعه فامیکام چیست؟


    (عکس از wiki.nesdev.com)

    بله، موارد بیشتری در راه است $4016.1 (برای ورودی)، $4017.0-4 (برای ورودی)، $4017.0-2 (در خروجی)، وقفه خارجی و حتی صدا! وقتی دندی را جدا کردم و دیدم همه اینها آنجاست، بسیار شگفت زده شدم:

    درست است، نه در همه مدل ها، همانطور که بعدا معلوم شد. اما اگر اینطور باشد، با لوازم جانبی فامیکام نیز سازگاری کامل دارد و بازی های ژاپنی مربوطه می توانند از آنها استفاده کنند. اما اجازه دهید به شما یادآوری کنم که Dandy ترکیبی بسیار عجیب از NES و Famicom، PAL و NTSC است. Pirates هر دو بازی ژاپنی و آمریکایی را برای آن منتشر کرد که اگر این لوازم جانبی و فرمت های مختلف کارتریج را در نظر نگیرید اساساً 100٪ سازگار هستند.

    جمع:برخی از Dandies همه کسرهای مشابهی را دارند که در Famicom وجود دارد، در حالی که برخی از کسرهای موجود در NES را نیز شامل می شود. بدون دسترسی به $4016.3 و $4016.4 اما به ندرت مورد استفاده قرار می گیرند. در قالب یک جدول برای وضوح:

    لوازم جانبی چگونه کار می کنند

    یک اسپلیتر آمریکایی چهار نفره برای NES نامیده می شود چهار امتیازیک مجموعه ساده از رجیسترهای شیفت است. آن ها هشت قرائت اول از $4016.0 داده ها را از اولین کنترلر، و هشت دوم - از سوم. به همین ترتیب $4017.0 اطلاعات مربوط به کنترل کننده دوم و چهارم را ارائه می دهد. علاوه بر این، هنگامی که به خواندن ادامه می دهید، دستگاه امضای خود را صادر می کند که با کمک آن بازی مشخص می کند که متصل است. چهار امتیاز، نه چیز دیگری به نظر می رسد که چنین دستگاهی را می توان از شش رجیستر شیفت (4021 یا 74165) مونتاژ کرد و روی هر Dandy کار می کند، زیرا به خطوط داده اضافی نیاز ندارد. البته فقط با بازی های آمریکایی که برای NES عرضه شد.

    همتای ژاپنی Famicom بسیار ساده تر است. سومین و چهارمین کنترلر مستقیماً به درگاه توسعه متصل می شوند و از طریق آن قابل دسترسی هستند $4016.1 و $4017.1 . بر این اساس، برای چنین آداپتوری، ما از قبل به یک پورت توسعه کامل برای Dendy نیاز داریم، در غیر این صورت بازی های ژاپنی برای ما چهار نفر کار نخواهد کرد.

    کنترلر Arkanoid همانطور که از نامش پیداست برای بازی Arkanoid استفاده می شود و از یک دکمه چرخشی و یک دکمه تشکیل شده است. در داخل، این یک مبدل آنالوگ به دیجیتال و یک شیفت رجیستر است که موقعیت دستگیره را نیز به طور مداوم خروجی می دهد. تفاوت نسخه ژاپنی و آمریکایی فقط در روش اتصال است. نسخه ژاپنی بازی موقعیت دسته و وضعیت دکمه را از آن می خواند $4016.1 و $4017.1 و نسخه آمریکایی $4016.3 و $4016.4 به ترتیب. به نظر می رسد که برای Arkanoid ژاپنی به یک درگاه توسعه کامل نیاز دارید و برای آمریکایی هر شیک پوشی در جایی که تفنگ سبک کار می کند (او از همان نتیجه گیری استفاده می کند) این کار را انجام می دهد.

    لوازم جانبی خود را ایجاد کنید

    اگرچه دستگاه های فوق خود مدار ساده ای دارند و از ساده ترین اجزای منطقی مونتاژ شده اند، اما برای قلب دستگاه همه کاره تصمیم گرفتم از یک FPGA استفاده کنم. علاوه بر این، از من خواسته شد که یک سوئیچ ساده در آنجا بسازم، اما می‌خواستم امکان تعویض دکمه‌های A و B را فراهم کنم. ابتدا Altera را انتخاب کردم. EPM3064ATC100، اما خیلی زود مشخص شد که 64 ماکروسل برای من کافی نیست و انتخاب بر سر کار افتاد EPM3128ATC100، جایی که در حال حاضر 128 ماکروسل وجود دارد.

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

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

    بنابراین، الزامات ظاهر به شرح زیر بود: چهار پورت برای کنترلرهای استاندارد DB-15 از Dandy، چهار دکمه برای انتخاب و پیکربندی آنها، یک دکمه "حالت"، یک دکمه "تنظیمات"، یک دسته مناسب برای Arkanoid و یک دکمه برای آن، که باید به اندازه کافی راحت باشد و مانعی ایجاد نکند. علاوه بر این، من می خواستم پورت های فعالی را ایجاد کنم که توسط LED ها روشن می شوند و به نوعی به طور مستقیم با دکمه های مربوطه مرتبط می شوند، منطقی ترین است که کانکتورها را در یک ردیف مرتب کنیم، اما این DB-15 های احمقانه برای آن بسیار بزرگ هستند. علاوه بر این، دستگاه باید در دستان راحت باشد، زیرا به خودی خود یک کنترلر بازی برای Arkanoid است. در پایان، من به چیزی شبیه به این رسیدم:

    دکمه ها در یک ردیف، پورت ها روی هم، یک دسته در کنار، یک دکمه برای Arkanoid در پشت سمت چپ.

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

    برد FPGA (نسخه اول):

    تابلوی دوم:

    من کد FPGA را در Verilog نوشتم. برای هر حالت، به نظر می رسد بسیار ساده است. اول از همه، برای بسیاری از آنها، ما باید تماس های هر یک از پورت ها را بشماریم، یعنی. پالس روی سیم ساعت:

    Reg counter1; reg counter2; همیشه @ (posedge strobe_in، poge clock1_in) اگر (strobe_in) counter1 شروع شود<= 1; else if (counter1 < 31) counter1 <= counter1 + 1; end always @ (posedge strobe_in, posedge clock2_in) begin if (strobe_in) counter2 <= 1; else if (counter2 < 31) counter2 <= counter2 + 1; end
    (با عرض پوزش، habr نمی تواند Verilog را برجسته کند)

    جایی که strobe_inیک بارق است (یکی برای هر دو پورت)، و clock1_inو clock2_in- این به ترتیب ساعت روی هر یک از پورت ها است. منطقی در داخل کنسول وجود دارد: ساعت = R/W nand (آدرس == $4016/$4017)، یعنی. وقتی کنسول داده ها را در آدرس مربوطه می خواند، on clock یک صفر منطقی است.

    حالت شبیه سازی اسپلیتر آمریکایی چهار نفره به این صورت است:
    همیشه @ (*) شروع می شود // Strobe مستقیماً متصل می شود - ورودی ها به خروجی ها اختصاص داده می شود strobe_out = strobe_in; اختصاص strobe_out = strobe_in; اختصاص strobe_out = strobe_in; اختصاص strobe_out = strobe_in; // بسته به تعداد دفعاتی که کنسول اطلاعات clock_out را خوانده است، ساعت را برای هر گیم پد بکشید.<= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 >8 && شمارنده 1<= 16) ? clock1_in: 1; clock_out <= (counter2 >8 && counter2<= 16) ? clock2_in: 1; if (counter1 <= 8) // Первый контроллер joy1_data_out <= joy_data; else if (counter1 <= 16) // Третий контроллер joy1_data_out <= joy_data; // Сигнатура else if (counter1 == 20) joy1_data_out <= 0; else joy1_data_out <= 1; // Второй контроллер if (counter2 <= 8) joy2_data_out <= joy_data; // Четвёртый контроллер else if (counter2 <= 16) joy2_data_out <= joy_data; // Сигнатура else if (counter2 == 19) joy2_data_out <= 0; else joy2_data_out <= 1; // Неиспользуемые выводы оставляем в высокоимпедансном состоянии, они подтягиваются к VCC внутри самой консоли joy1_data_out <= 1"bZ; joy2_data_out <= 4"bZZZZ; end

    در حالت اسپلیتر ژاپنی برای چهار، فقط باید ورودی ها را مستقیماً به خروجی ها متصل کنید:
    همیشه @ (*) clock_out شروع می شود<= clock1_in; clock_out <= clock2_in; clock_out <= clock1_in; clock_out <= clock2_in; joy1_data_out <= joy_data; joy2_data_out <= joy_data; joy1_data_out <= joy_data; joy2_data_out <= joy_data; // Неиспользуемые выводы оставляем в высокоимпедансном состоянии, они подтягиваются к VCC внутри самой консоли joy2_data_out <= 3"bZZZ; end

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

    البته همه این حالت ها و تنظیمات باید به نحوی تنظیم شوند. برای این کار من یک ثبات 12 بیتی تعریف کردم کنترل، داده هایی که از طریق یک اتصال سریال به همراه یک بیت اضافی برای برابری نوشته می شوند:
    کنترل رگ؛ reg control_parity; reg control_receiver; regcontrol_counter; همیشه @ (podge control_strobe، poge control_clock) اگر (control_strobe) شروع control_counter = 0 شروع شود. control_parity = 0; end else begin if (control_counter<= 11) begin control_receiver = control_data; control_parity = control_parity ^ control_data; end; if (control_counter < 12) control_counter = control_counter + 1; end end always @ (posedge strobe_in) begin if (control_counter == 12 && !control_parity) control = control_receiver; end

    بر این اساس، از سمت میکروکنترلر، کد (بسیار کثیف) به صورت زیر است:
    void control_send(uint16_t data) (set_bit(CTRL_PORT, CTRL_STROBE_PIN); // Strobe _delay_us(10); unset_bit (CTRL_PORT, CTRL_STROBE_PIN); // Strobe _delay_us (10); int b; char parity (b = 0); ب< 11; b++) { if (data & (1<

    در غیر این صورت، هیچ چیز خاصی در کد میکروکنترلر وجود ندارد: کار با نمایشگر روی کنترلر HD44780، دکمه ها، LED ها، منوی ساده و کار با مبدل آنالوگ به دیجیتال برای تعیین زاویه چرخش دستگیره.

    من همه چیز را اشکال زدایی کردم ، مطمئن شدم که کار می کند و قبلاً شروع به فشار دادن اجزا به داخل کیس کردم ...

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

    این یک تداخل با مدت زمان تنها چند ده نانوثانیه است که همه چیز را خراب می کند. تصمیم گرفتم با اسیلوسکوپ ساده ام ببینم در خط ساعت در Dandy چه اتفاقی می افتد:

    و این چیزی است که Famikom در همان مکان دارد:

    مشاهده می شود که این خط تا VCC کشیده شده است که برای Dendy بسیار قوی و برای Famikom اصلی بسیار ضعیف است. من شروع به آزمایش با کیت بدن کردم. خیلی زود مشخص شد که بهتر است نتیجه را نه با یک تحلیلگر منطقی، بلکه با خود کنسول نگاه کنید. مجبور شدم اسمبلر پردازنده 6502 را به خاطر بسپارم، یک برنامه ساده برای آزمایش بنویسم و ​​آن را روی کارتریج بنویسم:

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