• Udělej si sám dandy herní konzole. Jak se to dělá, jak to funguje, jak to funguje. Moderní vývoj pro NES

    Původně mě nenapadlo napsat článek na toto téma, ale zdá se, že toto je již součástí celé série článků na Dandyho témata. A ano, tentokrát jde primárně o domácího Dandyho, a ne o původní konzole – Famicom nebo NES. Právě jsem vyrobil zařízení jako dárek jedné osobě, která natáčí velmi zajímavá videa o Dandym, a zaměřil jsem se na kompatibilitu s tímto konkrétním klonem.

    Faktem je, že pro Famicom i NES vyšlo různé příslušenství: 3D brýle, klávesnice, roboty, čtečky čárových kódů, všechny druhy herních ovladačů a mnoho dalšího. Dorazila k nám jen lehká pistole. Mým úkolem bylo sestavit zařízení, které by kombinovalo splitter pro čtyři hráče (ano, i takové hry byly) a ovladač Arkanoid.

    I/O porty

    Nejprve stojí za to říci, jak fungují herní ovladače Famicom, NES a Dendy s joysticky a jak se v tomto ohledu liší.

    Z hlediska her jsou I/O porty dva registry s adresami $4016 A $4017 , které jsou sdruženy respektive se dvěma porty, kde je vše propojeno. Ale na standardních ovladačích se ke čtení dat používá pouze jeden vodič - D0, jehož data jsou k dispozici prostřednictvím nejméně významného (nulového) bitu v každém z registrů: $4016.0 A $4017.0 . Podobně se používá jeden drát na záznam, běžně se označuje jako STROBE(nebo ZÁPADKA), který vynuluje počítadlo uvnitř gamepadu a který je dostupný prostřednictvím zápisu do $4016.0 (ano, je to společné pro oba ovladače).

    Jednoduše řečeno, abyste získali stav tlačítek na prvním ovladači, musíte nejprve napsat 1 do $4016.0 , okamžitě tam zapište 0, čímž se počítadlo vynuluje, a poté čtěte $4016 A $4017 osmkrát (pro každé z tlačítek), přičemž data tlačítka se získají z nejméně významného bitu. Ale k čemu jsou ostatní bity v těchto registrech, kam tyto řádky vedou? Zvažte port řadiče NES:

    Ano, opravdu do toho jdou D3 A D4! Jsou dostupné prostřednictvím $4016.3 , $4016.4 v prvním přístavu a $4017.3 , $4017.4 druhé a používají se pro nestandardní ovladače.

    Pokud jde o jeho japonský protějšek - Famicom, nejsou zde žádné tyto porty a samotné herní ovladače nejsou od konzole odděleny, ale má rozšiřující port, což je konektor DB-15.

    Vypadá povědomě, že? Ano, když Číňané navrhli našeho Dandyho (pochybuji, že jsme ho navrhli my), a potřebovali vyrobit odnímatelné ovladače, rozhodli se vzít za základ rozšiřující port, protože má kontakty pro druhý ovladač a je umístěn trochu na Famicom vpravo od středu. Nemuseli ani měnit pinout. Pokud jde o první ovladač, vzali stejný DB-15, umístili jej vlevo a změnili pinout tak, aby bylo možné připojit první ovladač. A jen on.

    Porovnejte přední porty Famicomu a našeho Dandyho:

    Tady je takový zvláštní příběh těchto patnáctipinových konektorů na gamepadech, které se u nás používají.

    Ale podívejme se, co je výstupem na tento rozšiřující port Famicom?


    (screenshot z wiki.nesdev.com)

    Ano, přibývají další $4016.1 (pro vstup), $4017.0-4 (pro vstup), $4017.0-2 (na výstupu), externí přerušení a dokonce i zvuk! Byl jsem velmi mile překvapen, když jsem Dendyho rozebral a viděl, že je tam všechno:

    Pravda, ne ve všech modelech, jak se později ukázalo. Ale pokud ano, pak je zde také plná kompatibilita s příslušenstvím Famicom a mohou je používat odpovídající japonské hry. Dovolte mi ale připomenout, že Dandy je velmi zvláštní směs NES a Famicom, PAL a NTSC. Piráti k němu vydali japonské i americké hry, které jsou v podstatě 100% kompatibilní, pokud neberete v potaz toto příslušenství a různé formáty cartridge.

    Celkový: někteří Dandies mají všechny stejné srážky jako na Famicom, přičemž zahrnují některé srážky dostupné na NES. Žádný přístup k $4016.3 A $4016.4 ale používají se zřídka. Pro přehlednost ve formě tabulky:

    Jak příslušenství funguje

    Nazývá se americký splitter pro čtyři hráče pro NES Čtyři skóre je jednoduchá sada posuvných registrů. Tito. prvních osm čtení $4016.0 poskytněte údaje z prvního ovladače a druhých osm - ze třetího. Podobně $4017.0 poskytuje údaje o druhém a čtvrtém ovladači. Navíc, když budete pokračovat ve čtení, zařízení vydá svůj vlastní podpis, pomocí kterého hra určí, že je připojeno Čtyři skóre, ne něco jiného. Ukazuje se, že takové zařízení lze sestavit ze šesti posuvných registrů (4021 nebo 74165) a bude fungovat na jakémkoli Dandy, protože nevyžaduje další datové linky. Samozřejmě pouze s americkými hrami, které vyšly pro NES.

    Japonský protějšek pro Famicom je mnohem jednodušší. Třetí a čtvrtý ovladač se zapojují přímo do rozšiřujícího portu a jsou přístupné přes $4016.1 A $4017.1 . V souladu s tím pro takový adaptér již potřebujeme plnohodnotný rozšiřující port pro Dendy, jinak nám ve čtyřech nebude fungovat japonské hry.

    Ovladač Arkanoid, jak už název napovídá, slouží k hraní Arkanoidu a skládá se z otočného knoflíku a jednoho tlačítka. Uvnitř je to analogově-digitální převodník a posuvný registr, který také konzistentně vydává polohu knoflíku. Rozdíl mezi japonskou a americkou verzí je pouze ve způsobu připojení. Japonská verze hry čte polohu rukojeti a stav tlačítka $4016.1 A $4017.1 a americká verze $4016.3 A $4016.4 respektive. Ukazuje se, že pro japonský Arkanoid potřebujete plnohodnotný rozšiřující port a pro Američana se hodí každý dandy, kde funguje lehká zbraň (používá stejné závěry).

    Vytvořte si vlastní doplněk

    Přestože samotná výše uvedená zařízení mají jednoduchý obvod a jsou sestavena z nejjednodušších logických součástek, pro srdce zařízení typu vše v jednom jsem se rozhodl použít FPGA. Navíc jsem byl požádán, abych tam udělal jednoduchý přepínač-přepínač, ale chtěl jsem umožnit prohození tlačítek A a B. Nejprve jsem zvolil Altera EPM3064ATC100, ale brzy se ukázalo, že 64 makročlánků je pro mě málo a volba padla EPM3128ATC100, kde je již 128 makrobuněk.

    Pokud na to přijde, rozhodl jsem se vůbec nebabrat a dát do zařízení jakousi obrazovku, na které by se zobrazoval aktuální režim a menu nastavení, navíc jsem měl jeden displej syntetizující znak 16x2 dlouho nečinně ležet . Pro práci s ním již potřebujete mikrokontrolér a já jsem si vybral ATMEGA16.

    Vždy mi přišlo nejtěžší, aby zařízení vypadalo dobře. Stále jsem programátor, ne designér, ale právě při výrobě zařízení jako dárku jsem chtěl, aby bylo co nejkrásnější a pohodlné. Navíc je to téměř jediný způsob, jak ostatním nějak ukázat své umělecké dílo: fotografie a videa nejsou totéž, jen málokdo takové věci vytváří podle hotových schémat a 3D modelů, sériová výroba se těžko zavádí, ale dárek je právě to.

    Požadavky na vzhled byly tedy následující: čtyři porty pro standardní ovladače DB-15 od Dandy, čtyři tlačítka pro jejich výběr a konfiguraci, tlačítko „režim“, tlačítko „nastavení“, pohodlná rukojeť pro Arkanoid a tlačítko pro to, které by mělo být dostatečně pohodlné a nepřekáželo. Navíc jsem chtěl udělat aktivní porty osvětlené LED diodami a nějak intuitivně spojené s odpovídajícími tlačítky, nejlogičtější je uspořádat konektory za sebou, ale na to jsou tyhle stupidní DB-15 příliš obrovské. Zařízení by navíc mělo být pohodlné v rukou, protože je samo o sobě herním ovladačem pro Arkanoid. Nakonec jsem skončil s něčím takovým:

    Tlačítka v řadě, porty nad sebou, na boku madlo, vzadu vlevo tlačítko pro Arkanoid.

    Ukazuje se, že uvnitř je spousta místa. Proto jsem se rozhodl dát na jednu desku FPGA s konektory pro vodiče a patice a na druhou mikrokontrolér s obrazovkou a tlačítky. Jsou spojeny s nejjednodušším sériovým rozhraním.

    Deska FPGA (první verze):

    Druhá deska:

    Napsal jsem kód pro FPGA ve Verilog. Pro každý režim se to ukazuje jako docela jednoduché. V první řadě u mnoha z nich musíme počítat hovory do každého z portů, tzn. impulsy na hodinovém drátu:

    Reg čítač1; reg counter2; vždy @ (posedge strobe_in, posedge clock1_in) begin if (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
    (omlouvám se, habr nemůže zvýraznit Verilog)

    Kde strobo_in je stroboskop (jeden pro oba porty) a clock1_in A clock2_in- jedná se o hodiny na každém z portů. Uvnitř konzole je logika: hodiny = R/W nand (adresa == $4016/$4017), tzn. on clock je logická nula, když konzola čte data na odpovídající adrese.

    Režim simulace amerického splitteru pro čtyři hráče vypadá takto:
    always @ (*) begin // Strobe připojen přímo - vstupy k výstupům přiřadí strobe_out = strobe_in; přiřadit strobe_out = strobe_in; přiřadit strobe_out = strobe_in; přiřadit strobe_out = strobe_in; // Vytáhněte hodiny pro každý gamepad v závislosti na tom, kolikrát konzola přečte data clock_out<= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 >8 && čítač1<= 16) ? clock1_in: 1; clock_out <= (counter2 >8 && čítač2<= 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

    V režimu japonského splitteru pro čtyři stačí připojit vstupy k výstupům přímo:
    vždy @ (*) začíná 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

    Nejtěžší bylo umožnit prohození tlačítek A a B, protože se čtou postupně, tzn. musíte znát hodnotu B předem, když konzole žádá o A, ale vydává se těsně po A. Nejdřív mě napadlo nějak urychlit čtení dat z ovladače pomocí nějakého externího generátoru hodin, ale nakonec Rozhodl jsem se vzít hodnotu z předchozího čtení. To způsobuje zpoždění, ale je naprosto nepostřehnutelné. Navíc hry obvykle čtou stav tlačítek několikrát za sebou.

    Všechny tyto režimy a nastavení se samozřejmě musí nějak nastavit. K tomu jsem definoval 12bitový registr řízení, data, do kterých se zapisují přes sériové připojení, s přídavným bitem pro paritu:
    reg kontrola; reg kontrola_parita; reg control_receiver; regcontrol_counter; vždy @ (posedge control_strobe, posedge control_clock) begin if (control_strobe) begin control_counter = 0; kontrolní_parita = 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

    Podle toho ze strany mikrokontroléru vypadá kód (velmi špinavý) takto:
    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; charita = 0; charita = 0 b< 11; b++) { if (data & (1<

    Jinak v kódu mikrokontroléru není nic zvláštního: práce s displejem na ovladači HD44780, tlačítky, LED diodami, jednoduchým menu a práce s analogově-digitálním převodníkem pro určení úhlu natočení knoflíku.

    Všechno jsem odladil, ujistil se, že to funguje, a už jsem začal zasouvat komponenty do pouzdra ...

    Před zavřením víka jsem se ale rozhodl to zkontrolovat na původním Famicomu, protože s ním bude zařízení také používáno. Bohužel, režimy, kde bylo nutné počítat hodinové impulsy, nefungovaly správně. S pomocí logického analyzátoru se ukázalo, že existují snímače z datové linky na hodinovou linku:

    Jedná se o zásah s trváním pouhých několika desítek nanosekund, který vše zkazí. Rozhodl jsem se svým jednoduchým osciloskopem vidět, co se děje na hodinové lince v Dandy:

    A tady je to, co má Famikom na stejném místě:

    Je vidět, že tato linie je vytažena až k VCC, což je velmi silné pro Dendyho a velmi slabé pro původní Famikom. Začal jsem experimentovat s body kitem. Brzy se ukázalo, že je lepší se na výsledek dívat ne logickým analyzátorem, ale samotnou konzolí. Musel jsem si zapamatovat assembler pro procesor 6502, napsat jednoduchý program pro testování a zapsat ho do cartridge:

    Vše se na něm okamžitě stalo jasně vidět a zároveň bylo možné testovat všechny režimy najednou bez změny hry. ROM lze stáhnout

  • hry a herní konzole,
  • Elektronika pro začátečníky
    • tutorial

    Nejprve si přečteme, jak k interakci s ním dochází. A děje se to nahráváním na určitých adresách, je jich 8 skupin: 8 000 $ - 9 FFE(dokonce), $ 8001-$ 9 FFF(zvláštní), 000 $ – BFFE $(dokonce), $ A001 - $ BFFF(zvláštní), 000 $ - $ DFFE(dokonce), $ C001 – $ DFFF(zvláštní), $ 000 - $ FFFE(sudý) a $ E001 - $ FFFF(zvláštní). Psaní na jakoukoli adresu ve skupině je ekvivalentní. Vidíte vzor? Registr se vybírá pomocí tří adresových bitů: A0, A13 A A14, zbytek je irelevantní.

    Zkusme simulovat činnost mapovače pomocí FPGA. Píšu kód v jazyce Verilog. Není to zde zvýrazněno, za to se omlouvám.
    Nejprve popíšeme naše registry, které uchovávají aktuální stav:
    reg banka_select; reg prg_mode; reg chr_mode; reg r; reg zrcadlení; reg ram_protect; reg irq_latch; reg irq_counter; reg a12_low_time; reg irq_reload; reg irq_reload_clear; reg irq_enabled;

    Reakci na záznam popisujeme na odpovídajících adresách. stoupající signál /ROMSEL mluvíme o tom, že došlo k apelu na paměť nábojnice, tzn. podle adres $ 8000 - $ FFFF V tuto chvíli musíme reagovat.
    always @ (posedge romsel) begin // Ale pouze pokud šlo o zápis if (cpu_rw_in == 0) begin // Zvažte stav A14, A13 a A0, aktualizujte případ odpovídajících registrů ((cpu_addr_in, cpu_addr_in)) 3" b000: begin / / $ 8000-$ 9 FFE, dokonce i 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

    Nyní si popíšeme, která banka by měla být zvolena při přístupu k odpovídající části paměti v závislosti na našich registrech.
    Přepínají se podle následující tabulky:

    Kde $8000 & #$40 - toto je náš prg_mode a -2 a -1 jsou předposlední a poslední banka. Ukazuje se tento kód:
    // PRG bankovnictví vždy @ (*) počáteční případ ((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

    Nyní CHR. Existuje takové schéma:

    Kde $8000 & #$40 je režim chr_mode. Dopadne to takto:
    // CHR bankovnictví vždy @ (*) begin if (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

    Režim zrcadlení je popsán pouze na jednom řádku. V závislosti na tom uzavřeme výstup kazety CIRAM A10 na obou A10, na obou A11:
    přiřadit ppu_ciram_a10 = zrcadlení ? ppu_addr_in : ppu_addr_in;

    Dále obtížnější. MMC3 může generovat přerušení, když je na obrazovce nakreslena určitá čára. To je docela užitečné a hry to často využívají. Řádky na obrazovce se počítají pomocí hovorů na A12 u PPU. Při typickém nastavení je signál zapnutý A12 přechází z logické 0 na logickou 1 přesně jednou na řádek, kromě krátkých přechodů na 0. A neměly by se počítat, to trochu komplikuje:

    // Povolí přerušení pouze když je A12 nízké vždy @ (*) begin if (!irq_enabled) begin 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

    Ach ano, MMC3 také podporuje připojení další RAM na $ 6000-$ 7 FFF! Nesmíme zapomenout popsat toto:
    přiřadit cpu_wr_out = cpu_rw_in || ram_protect; přiřadit cpu_rd_out = ~cpu_rw_in; přiřadit cpu_sram_ce = !(cpu_addr_in && cpu_addr_in && m2 && romsel && ram_protect);

    To je vše, naše MMC3 je připravena! Celý kód si můžete prohlédnout zde.

    1.3. Kruhový diagram


    Tato část poskytuje podrobná schematická schémata procesorového modulu a konzolí a také zvažuje možnost sestavení cartridge se softwarem pro 8bitové herní konzole DENDY.

    1.3.1. modul procesoru


    V herní konzoli DENDY jsou obvykle tři desky:
    * centrální procesor;
    * výstupní konektory;
    * RF modulátor a stabilizátor.
    Desky jsou propojeny pružnými plochými (páskovými) kabely. Někdy existují možnosti provedené na jedné nebo dvou deskách s plošnými spoji, ale to nemá vliv na obvod set-top boxu.
    Zpočátku herní konzole obsahovaly několik čipů různého stupně integrace, přičemž hlavními z nich byly čipy centrálního procesoru a videoprocesoru.
    Rozvoj mikroelektroniky vedl k tomu, že herní konzole již obsahují pouze LSI typu UM6561 nebo jeho ekvivalent. V tomto mikroobvodu jsou centrální a grafické procesory, paměť a I/O registry umístěny na jednom čipu.
    Mnoho video set-top boxů vyrobených v Koreji používá několik čipů (obvykle dva nebo tři) místo jednoho UM6561. Princip činnosti set-top boxu a signály na výstupních konektorech se však v tomto případě nemění, takže tyto možnosti zapojení zde nebudou uvažovány.

    Vícečipová varianta
    Schematický diagram první verze herní konzole DENDY, vyrobené pomocí několika mikroobvodů různého stupně integrace, je znázorněn na obr. 1.12.
    Základem herní konzole je tedy čip centrálního procesoru (IC1). Činnost procesoru je synchronizována externím generátorem hodinových impulsů vyrobeným na tranzistorech Q1 a Q2, jejichž frekvence je stabilizována quartz X1 (21,251465 MHz).
    Signály všech interních sběrnic (adresy A0 - A15, data DO - D7 a ovládání) herní konzole jsou vyvedeny na konektor XS1, ke kterému je cartridge připojena. Datová sběrnice (piny IC1/21-28), adresa (piny IC1/4-19) a ovládání (piny IC1/31,34) spojují CPU (IC1) s čipem RAM (IC3) a video procesorem (IC2). ).
    Dekodér adres na čipu 74LS139 (IC8) generuje signály, které umožňují ostatním čipům komunikovat s centrálním procesorem. Na vstupy dekodéru jsou přivedeny tři nejvýznamnější bity adresové sběrnice A13 - A15 (vývody IC8 / 2,3,13) a signál M2 (vývod IC8 / 14). Pokud procesor pracuje s pamětí nainstalovanou v kazetě, pak je signál OT na pinu IC8/9 nízký. Při výměně dat s vestavěnou RAM set-top boxu (IC3) je signálem AO na pinu IC8/4 přijímána nízká úroveň. Nízkoúrovňový signál na kolíku IC8/5 indikuje, že CPU používá čip video procesoru IC2.
    Na stejném čipu s centrálním procesorem je také zvukový procesor herní konzole a obvod dekodéru adresy I/O portu.


    Výstupní signály prvního a druhého audio kanálu jsou smíchány a přiváděny na výstup AU1 (výstup IC1 / 1) a signály zbývajících kanálů - na výstup AU2 (výstup IC1 / 2). Kompletní zvukový signál je tvořen směšováním v obvodu vytvořeném na rezistorech R8 - R12 a kondenzátoru C7 a poté přiveden na výstupní konektor herní konzole a na vstup modulátoru, který generuje RF signál.
    Tři číslice čísla (D0, D1 a D2) zapsané na portu 4016h jsou přenášeny na výstupy IC1 / 39-37.

    Pokaždé, když procesor čte z adresy portu 4016h, objeví se na výstupu CK1 (pin IC1 / 36) nízkoúrovňový pulz. A pokud procesor čte z portu s adresou 4017h, podobný impuls je generován na výstupu CK2 (pin IC1 / 35).
    Výstupní signály herních konzolí a světelné pistole jsou přenášeny na datovou sběrnici přes dva vyrovnávací registry IC6 a IC7 (typ 74HC368).
    Čip videoprocesoru IC2 spolu s čipem videopaměti IC4 poskytuje plnou


    video signál. IC2 a IC4 jsou propojeny adresovými, datovými a řídicími sběrnicemi. Čip video paměti IC4 je podobný hlavnímu čipu RAM.
    Vezměte prosím na vědomí, že ve videoprocesoru IC2 jsou stejné piny (IC2/31-37) použity jako datová sběrnice a jako adresová sběrnice. Nejprve sem přijde spodních osm bitů adresy videopaměti. Když se na výstupu ALE (vývod IC2 / 39) objeví signál nízké úrovně, tato data se uloží do vyrovnávací paměti IC5 (74LS373). Výstup ALE je pak nastaven na vysokou hodnotu, piny IC2/26-30 jsou ponechány s MSB adresy a piny IC2/31-37 jsou použity jako datová sběrnice.
    Signály sběrnice videoprocesoru jsou také směrovány do konektoru kazety XS1.
    Plný video signál z výstupu VIDEO OUT videoprocesoru (pin IC2 / 21) prochází emitorovým sledovačem, vytvořeným na tranzistoru Q3, do výstupního konektoru VIDEO OUT a do modulátoru.
    U některých modelů může chybět stupeň zesílení video signálu.

    Nyní si krátce povíme o hlavních rozdílech od základního schématu, které jsou přítomny v jiných modelech. Všechny se týkají použitých konektorů a účelu jednotlivých pinů.
    Pro uvažovaný herní systém existují dvě hlavní možnosti designu. NES je vybaven 72pinovým konektorem cartridge, 48pinovým rozšiřujícím konektorem a 7pinovými konektory pro připojení herních konzolí. Herní konzole FAMICOM (DENDY) je plně softwarově kompatibilní s NES, ale používá 60pinový konektor cartridge, 15pinový rozšiřující konektor a 9pinový konektor pro herní konzole.
    Rozmístění všech konektorů herní konzole DENDY je na obr. 1.13a-c, a konzole NES - na obr. 1,13 g-e.

    Možnost s jedním čipem
    Schematický diagram jednočipové verze herní konzole DENDY je na obr. 1.14.
    Zde funkce centrálního procesoru, videoprocesoru a paměti zastává jeden LSI typu UM6561. Kmitočet interního generátoru hodin je stabilizován XI quartzovým rezonátorem (26,601712 MHz). Někdy obvod generátoru hodin obsahuje také tranzistor.
    Většina výstupních signálů jde přímo do konektoru kazety XS4. Část signálů jde do konektorů pro připojení herních konzolí XS1, XS2 a rozšiřujícího konektoru XS3.
    Video a audio signály jsou přenášeny na výstupní konektory herní konzole a na vstup modulátoru, někdy přes tranzistorové zesilovače.

    Výstupní konektory
    Konzole DENDY má dva nebo tři konektory pro připojení dálkového ovládání, světelné pistole a dalších periferií. Konektory mohou být tří typů: 7-, 9- a 15-pinové.
    Herní konzole lze připojit k 7-1 nebo 9pinovému konektoru konzoly nebo k 15pinovému rozšiřujícímu konektoru konzoly, světelnou pistoli lze připojit pouze k 7 nebo 15pinovému konektoru, ostatní zařízení k 15pinovému konektor.
    Pro připojení konzol se používají dva 9pinové konektory a jeden 15pinový rozšiřující konektor. Kazeta DENDY používá 60pinový konektor na horní straně.
    NES má dva 7pinové konektory a jeden 48pinový rozšiřující konektor pro herní ovladače.
    Pro připojení cartridge k NES je použit 72pinový konektor, který se od 60pinového konektoru liší přítomností dalších obvodů připojených k rozšiřujícímu konektoru. Do tohoto konektoru jsou vyvedeny signály videoprocesoru a sběrnice CPU.
    Vzhled konektorů herní konzole DENDY a účel jednotlivých kontaktů je na obr. 1.13. Rozšiřující konektor (obr. 1.136) je diskutován níže, protože je to on, kdo je nejvíce

    Pohodlné pro připojení různých přídavných zařízení.
    Pin 2 (AUDIO IN) přijímá zvukový signál, který je smíchán s výstupními signály zvukového procesoru.
    Kontakty 4-8 (J2 DO - J2 D4) jsou vstupy odpovídajících bitů portu druhého joysticku. Signálové kódy z těchto vstupů lze získat z portu 4017h příkazem LDA $4017.
    Vstup J1 D1 (pin 13) je připojen k bitu D1 portu 4016h.
    Když CPU přistupuje k portům s adresami 4016h a 4017h, jsou na výstupech CLK1 (pin 14) a CLK2 (pin 9) generovány krátkodobé nízkoúrovňové impulzy. Výstupy OUT0 -OUT2 (piny 10-12) přijímají bity DO -D2 slova zapsaného na port 4 016h.
    Vstup IRQ (pin 3) přijímá signál požadavku na přerušení.

    1.3.2. Kazeta


    Vyměnitelný modul herní konzole DENDY - cartridge - obvykle obsahuje dva ROM nebo RAM čipy.
    Jeden čip ROM je připojen k video procesoru a ukládá informace generátoru znaků. Místo generátoru znaků ROM používají některé kazety statický čip RAM. Další čip ROM se softwarem je připojen k centrální procesorové jednotce. Někdy je na kazetové desce přídavná paměť RAM napájená lithiovou baterií, která je navržena tak, aby zachránila herní situaci.
    Téměř všechny kazety, s výjimkou těch nejjednodušších, mají čip řadiče paměťové stránky, který funguje jako programovatelný dekodér adres.
    Konstrukčně je kazeta DENDY prefix tvořena ochranným plastovým pouzdrem o rozměrech 105x90x20 mm s klíčem v podobě dvou úkosů pro správnou instalaci. Je v něm umístěna deska s plošnými spoji s 60pinovým konektorem a nainstalovanými nezabalenými mikroobvody: ROM, RAM a řadič stránky.
    Schematický diagram herní kazety bez přídavné paměti RAM s ovladačem stránky MBC1 je znázorněn na obr. 1.15.
    Kazeta se skládá ze dvou ROM čipů (IC1 a IC2) a řadiče paměťových stránek IC3. Čip IC1 (27С128) je ROM video procesoru! s generátory znaků napsanými v něm.
    V adresovém prostoru videoprocesoru jsou jednotlivé stránky ROM umístěny na adresách 0000h - 1FFFh. Nejméně významné bity adresy jsou přiváděny na čip IC1 přímo z odpovídajících pinů konektoru XS1. seniorské hodnosti


    Rýže. 1.15. Schéma náplně herní konzole DENDY

    adresy VA12 a VA13 jsou generovány čipem řadiče stránky paměti IC3.
    Čip ROM je vybrán, když je na vstupu CS (vývod IC1 / 20) připojený k lince VA13 adresové sběrnice videoprocesoru signál nízké úrovně. Data jsou přenášena z výstupů ROM na piny konektoru XS1.
    Čip IC2 (KONAMI ROM 1Mbit) je maskovaná ROM s nahraným programem o kapacitě 1 Mbit (128 Kb). Nízké bity adresy A0 - A13 pocházejí z odpovídajících kontaktů kazety a horní bity adresy A14 - A16 jsou generovány řadičem stránky paměti IC3. Z IC3 je také přenášen CS signál, který umožňuje provoz ROM IC2.
    IC3 je programovatelný adresový dekodér, který generuje MSB adresy pro ROM čipy IC1 a IC2. Generuje také signál VA10", jehož úroveň určuje volbu režimu zobrazení obrazovky.
    V uvažované kazetě nejsou některé výstupy připojeny, takže možnosti mikroobvodu nejsou plně využity.

    1.3.3. Modulátor


    Modulátor herní konzole DENDY přijímá obrazový signál z čipu videoprocesoru IC2 a zvukový signál z čipu centrálního procesoru IC1 a generuje plný TV RF signál v jednom z měřicích rozsahů. Obvod modulátoru není standardizován a je obvykle určen výrobcem. Princip činnosti a složení hlavních komponent jsou však vždy stejné, takže změny v obvodu by neměly způsobit potíže při opravách.
    Schematický diagram jedné z možných variant RF modulátoru je na Obr. 1.16.
    Hlavní RF oscilátor je vyroben na vysokofrekvenčním tranzistoru Q2 (analogický k tranzistoru
    KT368A). Tvoří nosnou frekvenci jednoho z televizních kanálů. Typicky je pracovní frekvence generátoru set-top boxu v rozsahu 170-230 MHz a je určena prvky L1, C8 - C11 1, R9 - R11. Frekvence se nastavuje změnou indukčnosti cívky L1.
    Generátor implementovaný na tranzistoru Q1 (analogický k tranzistoru KT3102) tvoří subnosnou zvuku pro plný televizní signál. Výstupní signál generátoru je modulován audio signálem přicházejícím přes obvod R4, C1 ze vstupu AUDIO IN (pin 4 konektoru CN1).
    V závislosti na výrobci set-top boxu je frekvence generátoru 5,5 nebo 6,5 MHz. Jemné doladění frekvence signálu se provádí otáčením jádra transformátoru T1.
    Směšovač, vyrobený na diodách D1, D2 (analogicky jako dioda KD503A), transformátoru T2 a tranzistoru Q3, tvoří plný KV televizní signál. Vstup směšovače přijímá signál hlavního oscilátoru a nízkofrekvenční video signál z kolíku 3 konektoru CN1. Z výstupu směšovače je RF signál přenášen přes přizpůsobovací obvod C15, L3 do výstupního konektoru RF OUT procesorového modulu.

    1.3.4. Herní konzole


    Pro herní konzoli DENDY existuje asi deset různých typů herních konzolí. Nejpoužívanější je však standardní herní konzole, která je součástí dodávky, dálkový ovladač turbo s dalšími tlačítky a světelná pistole.
    Níže jsou schematická schémata těchto zařízení a také schéma adaptéru pro současné připojení čtyř konzol.

    Standardní herní podložka
    Standardní herní konzole pro konzoli DENDY se skládá z pohyblivého kříže a čtyř

    jednotlivá tlačítka. Uvnitř dálkového ovládání je nezabalený mikroobvod posuvného registru, který je analogem mikroobvodu HEF4021B. Při absenci původního mikroobvodu lze použít téměř jakýkoli 8bitový posuvný registr.
    Schematický diagram standardní konzoly je znázorněn na obr. 1.17.


    Rýže. 1.17. Schematické schéma standardní herní konzole pro konzoli DENDY
    Když během přehrávání stisknete tlačítko, odpovídající vstup posuvného registru se sníží na nízkou úroveň. Vysokou úroveň při otevřených tlačítkách zajišťuje připojení vstupních linek registru k napájecí sběrnici +5 V přes odpory s odporem 10-68 kOhm.
    Stavy vstupů v registru IC1 jsou uloženy, když na PE vstup mikroobvodu dorazí vysokoúrovňový impuls. Poté se na záporné hraně signálu na vstupu CLK (výstup IC1 / 10) obsah registru posune a nejvýznamnější bit je vyveden na sběrnici D0.
    Druhá herní konzole dodávaná k set-top boxu nemusí mít tlačítka START a SELECT, ale to nemá vliv na schéma konzole a princip jejího fungování.

    Turbo dálkové ovládání
    Schematické schéma dálkového ovládání turbo pro herní konzoli DENDY je na obr. 1.18.
    Jediný rozdíl mezi turbo dálkovým ovladačem a standardním je přítomnost přídavného výstupu T6 Hz na mikroobvodu posuvného registru a dvou přídavných tlačítek TURBO A a TURBO B připojených k tomuto výstupu.
    Vnitřní generátor čipu dálkového ovládání generuje na výstupu T sekvenci impulsů o frekvenci 6-10 Hz. Stisknutí a podržení tlačítka TURBO A je tedy stejné jako stisknutí a uvolnění tlačítka A s intenzitou 6krát za sekundu. Použití těchto tlačítek snižuje opotřebení ovladačů, protože tlačítka A a B se obvykle používají ve hře při střelbě.


    Rýže. 1.18. Schéma dálkového ovládání turbo pro herní konzoli DENDY

    Adaptér pro připojení čtyř dálkových ovladačů
    Některé hry mohou mít až čtyři hráče. V tomto případě jsou čtyři herní konzole připojeny paralelně ke konektorům herní konzole prostřednictvím speciálního adaptéru.
    Schematické schéma adaptéru je na obr. 1.19.
    Jak je patrné ze schematického diagramu, hlavním úkolem adaptéru je zajistit čtení informací z konzol 1 a 3 během prvních osmi hodinových impulsů az konzol 2 a 4 - s dalšími osmi.
    Synchronizační signál přivedený na linku STRB zafixuje stav konzolí v jejich vnitřních registrech a provede prvotní nastavení obvodů adaptéru.
    Během prvních osmi hodinových pulsů jsou výstupy Q8 čítačů IC1 a IC2 tlumeny, což zajišťuje odesílání hodinových pulsů do konzolí 1 a 3 a také přenos informací z těchto konzol na vstupy herní konzole.
    Po osmých hodinách odeslaných z herní konzole při čtení z I/O portu se výstup Q8 odpovídajícího čipu (IC1 nebo IC2) přepne na vysokou hodnotu (log. 1), což způsobí přepnutí přepínače IC3 nebo IC4 a připojení k konektory konzoly konzoly 2 resp. 4.

    světelná zbraň
    Na Obr. 1.20 ukazuje možné možnosti schématu zapojení světelné pistole herní konzole DENDY.
    Jako fotocitlivý prvek je zde použit fototranzistor. U nejlevnějších set-top boxů je někdy nahrazena fotodiodou, což vede ke zhoršení citlivosti zařízení.
    Signál z výstupu fotodiody přes oddělovací kondenzátor C1 je přiváděn do zesilovače vyrobeného na tranzistoru Q1. Z kolektoru tohoto tranzistoru je invertovaný signál přenášen přes pin 5 po obvodu D4 do procesorového modulu herní konzole.

    Pokud je pistole namířena na televizní obrazovku, pak je na výstupu D4 generován pulzní signál s frekvencí rovnou periodě skenování snímků.
    Spoušť světelné pistole je spojena s tlačítkem s normálně uzavřenými kontakty. Po uvolnění spouště je kolík konektoru D3 spojen se zemí. Po stisknutí spouště se kontakty rozepnou a na vstupu D3 se objeví signál vysoké logické úrovně, který je zajištěn připojením tohoto obvodu uvnitř herní konzole přes odpor 10-51 kΩ na +5 V sběrnici.

    1.3.5. pohonná jednotka


    Napájecí zdroj herní konzole DENDY se skládá z externího AC adaptéru a vnitřního stabilizátoru.

    Úkolem externího síťového adaptéru je převést síťové napětí ~ 220 V na konstantní napětí 9-12 V, které je přenášeno do vnitřního stabilizátoru herní konzole.
    Schematické schéma síťového adaptéru DENDY je na Obr. 1.21.
    Při opravě jednotky nezapomeňte, že centrální kontakt na výstupním konektoru je připojen ke společnému vodiči.

    Nestabilizované napětí z adaptéru je přiváděno do vnitřního stabilizátoru herní konzole, vyrobeného na čipu AN7805 nebo na tranzistoru a umístěného v modulu procesoru. Na výstupu stabilizátoru se vytvoří konstantní napětí +5 V.
    Schématická schémata dvou variant stabilizátoru napájecího napětí herní konzole DENDY jsou na Obr. 1.22 a nepotřebují další popis.


    Rýže. 1.22. Schémata regulátoru napětí pro herní konzoli DENDY

    1.4. Typické poruchy


    Příloha se nezapne
    Možné důvody: porucha síťového adaptéru nebo interního stabilizátoru; zkrat nebo přerušené napájecí obvody; porucha kazety; selhání modulu procesoru.
    1. Změřte výstupní napětí síťového adaptéru. Pokud překročí 9-12 V, vyměňte síť
    adaptér. Praxe ukazuje, že nejčastěji jsou poruchy způsobeny diodami usměrňovacího můstku. Pokud dojde k poruše transformátoru, postačí jakýkoli napájecí zdroj s výstupním napětím 9-12 V a přípustným zatěžovacím proudem 500 mA.
    2. Odpojte dálkové ovládání, kazetu a modulátor od modulu procesoru a poté zkontrolujte jednotky herní konzoly, zda nevykazují zkrat. Pokud je zjištěn zkrat, po jeho odstranění zkontrolujte stabilizátor a v něm nainstalovaný nízkoodporový odpor. Když dojde k přetížení, jeden z tištěných vodičů v napájecím obvodu obvykle praskne, takže je třeba pečlivě zkontrolovat desky, abyste se ujistili, že jsou vodiče neporušené.
    H. Pokud nedochází ke zkratu, zkontrolujte vnitřní stabilizátor herní konzole. Napětí na výstupu stabilizátoru musí být v rozmezí 5 ± 0,1 V; jinak ve stabilizátoru, vyrobeném na čipu AN7805, vyměňte čip IC1 (podobně jako KR142E-H5A) a zkontrolujte kondenzátory C1 - C4. Ve stabilizátoru implementovaném na tranzistoru zkontrolujte tranzistor Q1 (možná náhrada - KT815), zenerovu diodu D1 (možná náhrada - KS156A) a rezistor R1. Místo odporu je přípustné umístit pojistku, která ochrání stabilizátor před zkratem.
    4. Zapněte set-top box bez ovladačů, modulátoru a kazety. Na konektoru VIDEO OUT musí být přítomen video signál. Když je tento signál přiveden na LF vstup televizoru, na obrazovce se objeví chaotický obraz skládající se z barevných bodů a čtverečků. Přítomnost výstupního signálu indikuje poruchu v konzolách nebo v modulátoru.
    5. Pokud není žádný výstupní signál, zkontrolujte krystalový oscilátor a tranzistorový zesilovač videa. Provozuschopnost křemenného rezonátoru X1 a tranzistorů Q1 - Q3 umožňuje dospět k závěru, že je nutné vyměnit celý modul procesoru.

    Zařízení je nestabilní
    Možné důvody: porucha externího síťového adaptéru nebo interního stabilizátoru; znečištění kontaktů konektoru pro připojení kazety.

    1. Zkontrolujte výstupní napětí AC adaptéru. Často dochází k poruše kvůli nízké nosnosti adaptéru dodávaného s herní konzolí. Problém je vyřešen připojením výkonnějšího adaptéru.
    2. Zkontrolujte spolehlivost spojení kontaktů v konektorech set-top boxu. Zvláště pečlivě je nutné zkontrolovat konektor pro připojení kartuše. Otřete kontakty alkoholem.
    3. Zkontrolujte vnitřní stabilizátor herní konzole. Na radiátor s dostatečnou rozptylovou plochou (cca 10 cm2) je účelné instalovat mikroobvod nebo výkonový tranzistor stabilizátoru.
    4. Nainstalujte do napájecího obvodu další kondenzátory, např. o jmenovité hodnotě 100,0 uF x 16 V a 0,01 uF na každou z prefixových desek a do kazety.

    Světelná pistole nefunguje
    Možné důvody: přerušení propojovacího kabelu nebo špatné kontakty v konektoru; porucha fotodiody nebo tranzistoru světelné pistole; porucha spouštěcích kontaktů v světelné pistoli.
    Algoritmus pro odstraňování problémů:
    2. Zkontrolujte tranzistor ve světelné pistoli a kontakty pod spouští. Zajistěte, aby při stisknutí spouště došlo k uzavření kontaktu, protože k poruše zpravidla dochází v mechanické části zbraně.
    3. Nízká citlivost pistole je často způsobena posunutím zaostřovací čočky instalované v hlavni. V takovém případě musíte čočku nainstalovat na místo a zajistit ji. Nastavení bajonetu objektivu vám umožní zlepšit výkon i fungující světelné pistole.
    4. Pokud vnitřní obvody světelné pistole fungují správně, je potřeba vyměnit celý procesorový modul herní konzole.

    Dálkové ovládání nefunguje
    Možné příčiny: přerušení propojovacího kabelu nebo špatný kontakt v konektoru; tlačítka špinavá; porucha čipu dálkového ovládání.
    Algoritmus pro odstraňování problémů:
    1. Zkontrolujte integritu propojovacího kabelu a spolehlivost spojení v konektoru. V případě poruchy konektoru jej vyměňte spolu s protikusem za jakýkoli dostupný 7pinový konektor.
    2. Zkontrolujte vstupní signály PE a STROBE. Absence signálů naznačuje nutnost výměny centrálního procesoru.
    3. Zkontrolujte výstupní signál mikroobvodu nainstalovaného v dálkovém ovladači. Pokud není signál, vyměňte dálkový ovladač.

    Některá tlačítka na dálkovém ovladači nefungují

    Možné příčiny: znečištění dálkového ovládání nebo porucha mikroobvodu.
    Algoritmus pro odstraňování problémů:
    1. Otřete desku dálkového ovládání a pryžové těsnění vodivými polštářky s alkoholem.
    2. Pokud jsou vodivé podložky na pryžovém těsnění vadné, opravte je nalepením kousků fólie. Výhodnější je použití fólie z cigaretových krabiček: má papírovou základnu, která zajišťuje lepší přilnavost ke gumě.
    3. V případě poškození vodivého povlaku na desce jej obnovte pomocí vyčištěného montážního drátu připájeného ke drahám desky plošných spojů.
    4. Pokud jsou všechny kontaktní plošky v pořádku, je nutné vyměnit mikroobvod nainstalovaný v dálkovém ovladači, případně celý ovladač.

    Žádný RF signál na výstupu modulátoru
    Možné příčiny: porušení nastavení generátoru, porucha hlavního oscilátoru nebo směšovače.
    Algoritmus pro odstraňování problémů:
    1. Zkontrolujte, zda je vadný prvek v obvodu RF modulátoru kontrolou video audio signálů na výstupu LF. Nepřítomnost některého z těchto signálů indikuje poruchu procesorového modulu.
    2. Pokud není slyšet zvuk nebo obraz, oscilátor je s největší pravděpodobností vadný. Chcete-li zkontrolovat generátor, měli byste změřit frekvenci výstupního signálu: měla by být v rozsahu 170-230 MHz. Absence signálu vede k závěru, že je třeba vyměnit tranzistor Q2. Pokud frekvence generátoru překročí stanovené meze, je nutné zkontrolovat prvky LI, C8 -C11, R10, R11.
    3. Poté, co se ujistíte, že hlavní oscilátor funguje, zkontrolujte směšovač (diody D1, D2 a transformátor T2) a také přizpůsobovací obvod L2. C13, C14.
    4. Absence zvukového signálu s normálním obrazem indikuje poruchu generátoru dílčí nosné zvuku. V tomto případě zkontrolujte, zda frekvence mezifrekvenčního generátoru zvuku odpovídá televizní normě (5,5 nebo 6,5 MHz) a případně upravte generátor otáčením jádra transformátoru T1. Pokud na výstupu generátoru není žádný signál, vyměňte tranzistor Q1.

    Jak vyrobit herní konzoli vlastníma rukama aslan napsal 8. listopadu 2017

    Obecně jsem měl nápad to udělat už dávno, ale teprve nyní se software pro taková řemesla dostal do víceméně slušného stavu.
    Než jsem to zkusil udělat z x86 nettopu, ale ta věc mi přišla dost těžkopádná a vrtošivá. Poté prodal nettop a koupil použitý Android TV Box. Je mnohem kompaktnější a lehčí, ale nepodařilo se mi, aby emulátor RetroArch fungoval správně na Androidu, bez ohledu na to, jaká je sestava, jsou zde solidní chyby.

    Proto bylo rozhodnuto sestavit set-top box založený na Raspberry Pi 3, protože pro tyto účely již existují hotové obrazy systému a flexibilita konfigurace je prostě úžasná.


    Takže potřebujeme:
    - Raspberry Pi (pomůže kdokoli, koupil jsem ten nejvýkonnější, s marží);
    - Napájení 5V 3A;
    - Dva USB joysticky;
    - Tělo (lze použít cokoli);
    - Různé konektory a spojovací prvky (podle chuti);
    - Lepidlo (podle chuti, mám rád dvousložkový epoxid).

    Rozhodl jsem se použít pouzdro z mrtvé konzole a na bleším trhu jsem našel takovou 16bitovou, čínskou kopii SEGA Genesis 3 za pár šupů.

    Mnoho času, úsilí a isopropylu bylo vynaloženo na smývání neohrabaných nápisů. Ale je to tak lepší. Bohužel je na pouzdře pár působivých škrábanců, ale zatím jsem ho nechal tak, jak je.

    Přišel jsem na umístění prvků uvnitř pouzdra. Jak vidíte, koupil jsem blok RCA konektorů a v každodenním životě nejneužitečnější, ale pro mé potřeby nepostradatelný, adaptér HDMI máma-táta. Je potřeba oddálit desku od okraje pouzdra. A pak přišel balíček se sadou různých mosazných stojanů (ty jsou na zdejším trhu nějak nereálně drahé).

    Měkké pouzdro HDMI adaptéru jsem o pár milimetrů odřízl a v obou polovinách pouzdra jsem vypiloval obdélníkový otvor. Stojany jsem umístil pod desku a zalil epoxidem, nezapomněl jsem vyčistit místa lepení jemným brusným papírem.

    Stejným způsobem jsem vypiloval kulaté otvory pro tulipány a přilepil stojany. Bylo děsivé řezat, není to tak snadné, udělat to přesně.

    Vše ale dopadlo téměř dokonale! Jsem více než spokojen.

    Pokračujme! Vyřízl jsem kus prkénka a připevnil na něj zásuvku. Bylo by možné vysílat micro-usb, ale je to kanonické. Samozřejmě se bude montovat na stejné stojany.

    Pevný. Skvělý. Nepřišel jsem na to, kam umístit velký kulatý otvor vedle zdroje, původně jsem tam chtěl vysílat analogový signál, ale rozhodl jsem se, že tulipány jsou univerzálnější. Proto jej uzavřu plastovým uzávěrem.

    Připravil jsem desku a připájel dvě USB zdířky pro joysticky.

    Připevnil jsem to na stojany na správné místo na pouzdru. Ale konektory si samozřejmě tvarově nezadají se segovskými a tohle se mi opravdu nelíbilo.

    Proto jsem odpiloval propojku mezi nativními otvory a dovnitř vlepil řezaný plastový falešný panel. Barva je mírně vybledlá, ale není to znát.

    Napájení, USB zásuvky a analogové výstupy jsem připájel dráty. Mimochodem, nevím, jestli je to softwarový čip nebo hardwarový, ale v Raspberry Pi 3 je detekce výstupu (analogový / digitální) automatická, ale v první verzi počítače jsem musel přepínat ručně.

    Je čas vytvořit tlačítka napájení a resetování. Vzhledem k tomu, že v Raspberry Pi nejsou žádná běžná tlačítka pro tyto záležitosti a nechtěl jsem jej vypínat a odpojovat napájení tvrdým způsobem, rozhodl jsem se připojit tlačítka ke kontaktům GPIO a napsat skripty pro vypnutí a restartování do automatického načítání. Vypínací tlačítko musí být zavěšeno na přesně definovaných GPIO, aby se po stisku tlačítka náš set-top box nejen vypnul, ale i zapnul.
    A skripty lze snadno najít na internetu. Zde mě čekalo nemilé překvapení. Pro zapnutí / vypnutí potřebujete tlačítko bez upevnění a nativním přepínačem v konzole byl jednoduchý posuvník. Musel jsem vyrobit vratný mechanismus a namazat jezdec silikonovým mazivem.

    A zde je druhé překvapení: jaký přepínač umístit? Nakonec jsem jen vytáhl nožní spínač z mrtvé tiskárny a ohnul nohu. Nyní, když stisknete posuvník, noha stiskne spínač. Skvělý. Připájeno na desce a upevněno na stojanech.

    Resetovací tlačítko bylo vytaženo ze stejné tiskárny a upevněno na desce. Samotné tlačítko (na pouzdru) však spočívalo na konektoru tlačítka napájení a mělo by být striktně na 5 a 6 GPIO. Musel jsem odříznout zástrčku. Bylo možné pájet přímo, ale nechtěl jsem.

    Slot pro kartuše byl pokrytý síťovinou, zakoupený na bleším trhu a nastříkán bílou barvou. Musel jsem tělo ořezat zevnitř, ale není to nic těžkého.
    A pak přišly joysticky ve stylu Sega Saturn. Proč oni? Protože mají 6 tlačítek a dvě tlačítka nahoře, to znamená, že funkčnost pokrývá NES, SNES a Sega Mega Drive bez problémů. Stačí nastavit joystick při prvním zapnutí a poté opravit konfigurace pro každý emulátor a rozdělit je do složek.

    Samotné joysticky jsou v kvalitě 3 z 5, montáž výborná, ale křížky mačkané nevýrazně. To jsem já o Retrolinku. Můžete najít licencované USB joysticky Sega, ale ceny jsou VELMI kousavé.

    Vlastně je to připraveno! Zbývá zapnout, nakonfigurovat joysticky a připojit Wi-Fi (budete potřebovat klávesnici) a poté projít Total Commanderem do sdílených složek zařízení a pustit tam své oblíbené hry.

    Zde je obrázek při připojení přes RCA. Okamžitě se nabízí nápad zvětšit písma.

    A takhle to dopadne, pokud připojíte HDMI. Mnohem lepší. Ale analogové výstupy se budou hodit při hraní s přáteli na venkově u piva.

    Upozornění: je tam mírné input lag (Input Lag), všiml jsem si toho nejen já a TV s tím nemá nic společného. Internet popisuje způsoby, jak snížit latenci, ale to je jiný příběh.

    A ještě jedno nepříjemné mínus - po připojení napájení se set-top box okamžitě zapne a nečeká na zmáčknutí tlačítka. Ještě jsem nepřišel na to, jak vyhrát.
    V plánu je objednat filmové nápisy na pouzdru na řezu plotrem. A zbytek jsem šťastný a moji přátelé také.

    Původně mě nenapadlo napsat článek na toto téma, ale zdá se, že toto je již součástí celé série článků na Dandyho témata. A ano, tentokrát jde primárně o domácího Dandyho, a ne o původní konzole – Famicom nebo NES. Právě jsem vyrobil zařízení jako dárek jedné osobě, která natáčí velmi zajímavá videa o Dandym, a zaměřil jsem se na kompatibilitu s tímto konkrétním klonem.

    Faktem je, že pro Famicom i NES vyšlo různé příslušenství: 3D brýle, klávesnice, roboty, čtečky čárových kódů, všechny druhy herních ovladačů a mnoho dalšího. Dorazila k nám jen lehká pistole. Mým úkolem bylo sestavit zařízení, které by kombinovalo splitter pro čtyři hráče (ano, i takové hry byly) a ovladač Arkanoid.

    I/O porty

    Nejprve stojí za to říci, jak fungují herní ovladače Famicom, NES a Dendy s joysticky a jak se v tomto ohledu liší.

    Z hlediska her jsou I/O porty dva registry s adresami $4016 A $4017 , které jsou sdruženy respektive se dvěma porty, kde je vše propojeno. Ale na standardních ovladačích se ke čtení dat používá pouze jeden vodič - D0, jehož data jsou k dispozici prostřednictvím nejméně významného (nulového) bitu v každém z registrů: $4016.0 A $4017.0 . Podobně se používá jeden drát na záznam, běžně se označuje jako STROBE(nebo ZÁPADKA), který vynuluje počítadlo uvnitř gamepadu a který je dostupný prostřednictvím zápisu do $4016.0 (ano, je to společné pro oba ovladače).

    Jednoduše řečeno, abyste získali stav tlačítek na prvním ovladači, musíte nejprve napsat 1 do $4016.0 , okamžitě tam zapište 0, čímž se počítadlo vynuluje, a poté čtěte $4016 A $4017 osmkrát (pro každé z tlačítek), přičemž data tlačítka se získají z nejméně významného bitu. Ale k čemu jsou ostatní bity v těchto registrech, kam tyto řádky vedou? Zvažte port řadiče NES:

    Ano, opravdu do toho jdou D3 A D4! Jsou dostupné prostřednictvím $4016.3 , $4016.4 v prvním přístavu a $4017.3 , $4017.4 druhé a používají se pro nestandardní ovladače.

    Pokud jde o jeho japonský protějšek - Famicom, nejsou zde žádné tyto porty a samotné herní ovladače nejsou od konzole odděleny, ale má rozšiřující port, což je konektor DB-15.

    Vypadá povědomě, že? Ano, když Číňané navrhli našeho Dandyho (pochybuji, že jsme ho navrhli my), a potřebovali vyrobit odnímatelné ovladače, rozhodli se vzít za základ rozšiřující port, protože má kontakty pro druhý ovladač a je umístěn trochu na Famicom vpravo od středu. Nemuseli ani měnit pinout. Pokud jde o první ovladač, vzali stejný DB-15, umístili jej vlevo a změnili pinout tak, aby bylo možné připojit první ovladač. A jen on.

    Porovnejte přední porty Famicomu a našeho Dandyho:

    Tady je takový zvláštní příběh těchto patnáctipinových konektorů na gamepadech, které se u nás používají.

    Ale podívejme se, co je výstupem na tento rozšiřující port Famicom?


    (screenshot z wiki.nesdev.com)

    Ano, přibývají další $4016.1 (pro vstup), $4017.0-4 (pro vstup), $4017.0-2 (na výstupu), externí přerušení a dokonce i zvuk! Byl jsem velmi mile překvapen, když jsem Dendyho rozebral a viděl, že je tam všechno:

    Pravda, ne ve všech modelech, jak se později ukázalo. Ale pokud ano, pak je zde také plná kompatibilita s příslušenstvím Famicom a mohou je používat odpovídající japonské hry. Dovolte mi ale připomenout, že Dandy je velmi zvláštní směs NES a Famicom, PAL a NTSC. Piráti k němu vydali japonské i americké hry, které jsou v podstatě 100% kompatibilní, pokud neberete v potaz toto příslušenství a různé formáty cartridge.

    Celkový: někteří Dandies mají všechny stejné srážky jako na Famicom, přičemž zahrnují některé srážky dostupné na NES. Žádný přístup k $4016.3 A $4016.4 ale používají se zřídka. Pro přehlednost ve formě tabulky:

    Jak příslušenství funguje

    Nazývá se americký splitter pro čtyři hráče pro NES Čtyři skóre je jednoduchá sada posuvných registrů. Tito. prvních osm čtení $4016.0 poskytněte údaje z prvního ovladače a druhých osm - ze třetího. Podobně $4017.0 poskytuje údaje o druhém a čtvrtém ovladači. Navíc, když budete pokračovat ve čtení, zařízení vydá svůj vlastní podpis, pomocí kterého hra určí, že je připojeno Čtyři skóre, ne něco jiného. Ukazuje se, že takové zařízení lze sestavit ze šesti posuvných registrů (4021 nebo 74165) a bude fungovat na jakémkoli Dandy, protože nevyžaduje další datové linky. Samozřejmě pouze s americkými hrami, které vyšly pro NES.

    Japonský protějšek pro Famicom je mnohem jednodušší. Třetí a čtvrtý ovladač se zapojují přímo do rozšiřujícího portu a jsou přístupné přes $4016.1 A $4017.1 . V souladu s tím pro takový adaptér již potřebujeme plnohodnotný rozšiřující port pro Dendy, jinak nám ve čtyřech nebude fungovat japonské hry.

    Ovladač Arkanoid, jak už název napovídá, slouží k hraní Arkanoidu a skládá se z otočného knoflíku a jednoho tlačítka. Uvnitř je to analogově-digitální převodník a posuvný registr, který také konzistentně vydává polohu knoflíku. Rozdíl mezi japonskou a americkou verzí je pouze ve způsobu připojení. Japonská verze hry čte polohu rukojeti a stav tlačítka $4016.1 A $4017.1 a americká verze $4016.3 A $4016.4 respektive. Ukazuje se, že pro japonský Arkanoid potřebujete plnohodnotný rozšiřující port a pro Američana se hodí každý dandy, kde funguje lehká zbraň (používá stejné závěry).

    Vytvořte si vlastní doplněk

    Přestože samotná výše uvedená zařízení mají jednoduchý obvod a jsou sestavena z nejjednodušších logických součástek, pro srdce zařízení typu vše v jednom jsem se rozhodl použít FPGA. Navíc jsem byl požádán, abych tam udělal jednoduchý přepínač-přepínač, ale chtěl jsem umožnit prohození tlačítek A a B. Nejprve jsem zvolil Altera EPM3064ATC100, ale brzy se ukázalo, že 64 makročlánků je pro mě málo a volba padla EPM3128ATC100, kde je již 128 makrobuněk.

    Pokud na to přijde, rozhodl jsem se vůbec nebabrat a dát do zařízení jakousi obrazovku, na které by se zobrazoval aktuální režim a menu nastavení, navíc jsem měl jeden displej syntetizující znak 16x2 dlouho nečinně ležet . Pro práci s ním již potřebujete mikrokontrolér a já jsem si vybral ATMEGA16.

    Vždy mi přišlo nejtěžší, aby zařízení vypadalo dobře. Stále jsem programátor, ne designér, ale právě při výrobě zařízení jako dárku jsem chtěl, aby bylo co nejkrásnější a pohodlné. Navíc je to téměř jediný způsob, jak ostatním nějak ukázat své umělecké dílo: fotografie a videa nejsou totéž, jen málokdo takové věci vytváří podle hotových schémat a 3D modelů, sériová výroba se těžko zavádí, ale dárek je právě to.

    Požadavky na vzhled byly tedy následující: čtyři porty pro standardní ovladače DB-15 od Dandy, čtyři tlačítka pro jejich výběr a konfiguraci, tlačítko „režim“, tlačítko „nastavení“, pohodlná rukojeť pro Arkanoid a tlačítko pro to, které by mělo být dostatečně pohodlné a nepřekáželo. Navíc jsem chtěl udělat aktivní porty osvětlené LED diodami a nějak intuitivně spojené s odpovídajícími tlačítky, nejlogičtější je uspořádat konektory za sebou, ale na to jsou tyhle stupidní DB-15 příliš obrovské. Zařízení by navíc mělo být pohodlné v rukou, protože je samo o sobě herním ovladačem pro Arkanoid. Nakonec jsem skončil s něčím takovým:

    Tlačítka v řadě, porty nad sebou, na boku madlo, vzadu vlevo tlačítko pro Arkanoid.

    Ukazuje se, že uvnitř je spousta místa. Proto jsem se rozhodl dát na jednu desku FPGA s konektory pro vodiče a patice a na druhou mikrokontrolér s obrazovkou a tlačítky. Jsou spojeny s nejjednodušším sériovým rozhraním.

    Deska FPGA (první verze):

    Druhá deska:

    Napsal jsem kód pro FPGA ve Verilog. Pro každý režim se to ukazuje jako docela jednoduché. V první řadě u mnoha z nich musíme počítat hovory do každého z portů, tzn. impulsy na hodinovém drátu:

    Reg čítač1; reg counter2; vždy @ (posedge strobe_in, posedge clock1_in) begin if (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
    (omlouvám se, habr nemůže zvýraznit Verilog)

    Kde strobo_in je stroboskop (jeden pro oba porty) a clock1_in A clock2_in- jedná se o hodiny na každém z portů. Uvnitř konzole je logika: hodiny = R/W nand (adresa == $4016/$4017), tzn. on clock je logická nula, když konzola čte data na odpovídající adrese.

    Režim simulace amerického splitteru pro čtyři hráče vypadá takto:
    always @ (*) begin // Strobe připojen přímo - vstupy k výstupům přiřadí strobe_out = strobe_in; přiřadit strobe_out = strobe_in; přiřadit strobe_out = strobe_in; přiřadit strobe_out = strobe_in; // Vytáhněte hodiny pro každý gamepad v závislosti na tom, kolikrát konzola přečte data clock_out<= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 >8 && čítač1<= 16) ? clock1_in: 1; clock_out <= (counter2 >8 && čítač2<= 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

    V režimu japonského splitteru pro čtyři stačí připojit vstupy k výstupům přímo:
    vždy @ (*) začíná 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

    Nejtěžší bylo umožnit prohození tlačítek A a B, protože se čtou postupně, tzn. musíte znát hodnotu B předem, když konzole žádá o A, ale vydává se těsně po A. Nejdřív mě napadlo nějak urychlit čtení dat z ovladače pomocí nějakého externího generátoru hodin, ale nakonec Rozhodl jsem se vzít hodnotu z předchozího čtení. To způsobuje zpoždění, ale je naprosto nepostřehnutelné. Navíc hry obvykle čtou stav tlačítek několikrát za sebou.

    Všechny tyto režimy a nastavení se samozřejmě musí nějak nastavit. K tomu jsem definoval 12bitový registr řízení, data, do kterých se zapisují přes sériové připojení, s přídavným bitem pro paritu:
    reg kontrola; reg kontrola_parita; reg control_receiver; regcontrol_counter; vždy @ (posedge control_strobe, posedge control_clock) begin if (control_strobe) begin control_counter = 0; kontrolní_parita = 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

    Podle toho ze strany mikrokontroléru vypadá kód (velmi špinavý) takto:
    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; charita = 0; charita = 0 b< 11; b++) { if (data & (1<

    Jinak v kódu mikrokontroléru není nic zvláštního: práce s displejem na ovladači HD44780, tlačítky, LED diodami, jednoduchým menu a práce s analogově-digitálním převodníkem pro určení úhlu natočení knoflíku.

    Všechno jsem odladil, ujistil se, že to funguje, a už jsem začal zasouvat komponenty do pouzdra ...

    Před zavřením víka jsem se ale rozhodl to zkontrolovat na původním Famicomu, protože s ním bude zařízení také používáno. Bohužel, režimy, kde bylo nutné počítat hodinové impulsy, nefungovaly správně. S pomocí logického analyzátoru se ukázalo, že existují snímače z datové linky na hodinovou linku:

    Jedná se o zásah s trváním pouhých několika desítek nanosekund, který vše zkazí. Rozhodl jsem se svým jednoduchým osciloskopem vidět, co se děje na hodinové lince v Dandy:

    A tady je to, co má Famikom na stejném místě:

    Je vidět, že tato linie je vytažena až k VCC, což je velmi silné pro Dendyho a velmi slabé pro původní Famikom. Začal jsem experimentovat s body kitem. Brzy se ukázalo, že je lepší se na výsledek dívat ne logickým analyzátorem, ale samotnou konzolí. Musel jsem si zapamatovat assembler pro procesor 6502, napsat jednoduchý program pro testování a zapsat ho do cartridge:

    Vše se na něm okamžitě stalo jasně vidět a zároveň bylo možné testovat všechny režimy najednou bez změny hry. ROM lze stáhnout