• Kendin yap şık oyun konsolu. Nasıl yapılır, nasıl çalışır, nasıl çalışır. NES için modern gelişmeler

    İlk başta bu konu hakkında bir makale yazmayı düşünmedim, ancak görünüşe göre bu zaten Dandy konuları üzerine bir dizi makalenin parçası. Ve evet, bu sefer konu orijinal konsollar olan Famicom veya NES değil, öncelikle yerli Dandy ile ilgili. Cihazı, Dandy hakkında çok ilginç videolar çeken bir kişiye hediye olarak yaptım ve bu özel klonla uyumluluğa odaklandım.

    Gerçek şu ki, hem Famicom hem de NES için çeşitli aksesuarlar çıktı: 3D gözlükler, klavyeler, robotlar, barkod okuyucular, her türlü oyun kumandası ve çok daha fazlası. Bize sadece hafif tabanca geldi. Görevim, dört oyuncu için bir ayırıcıyı (evet, böyle oyunlar vardı) ve bir Arkanoid denetleyiciyi birleştirecek bir cihaz monte etmekti.

    G/Ç bağlantı noktaları

    Öncelikle Famicom, NES ve Dendy oyun kumandalarının joysticklerle nasıl çalıştığını ve bu konuda nasıl farklılaştıklarını anlatmakta fayda var.

    Oyunlar açısından, G / Ç bağlantı noktaları, adresleri olan iki kayıttır. $4016 Ve $4017 , sırasıyla her şeyin bağlı olduğu iki bağlantı noktasıyla ilişkilendirilir. Ancak standart denetleyicilerde, verileri okumak için yalnızca bir kablo kullanılır - D0, kayıtların her birindeki en önemsiz (sıfır) bit aracılığıyla sırasıyla mevcut olan veriler: $4016.0 Ve $4017.0 . Benzer şekilde, kayıt başına bir tel kullanılır, buna genellikle çakar(veya MANDALLI), gamepad içindeki sayacı sıfırlar ve şuraya yazarak kullanılabilir: $4016.0 (evet, her iki denetleyici için ortaktır).

    Basitçe söylemek gerekirse, ilk denetleyicideki düğmelerin durumunu almak için önce 1'e yazmanız gerekir. $4016.0 , hemen oraya 0 yazın, böylece sayacı sıfırlayın ve ardından okuyun $4016 Ve $4017 sekiz kez (düğmelerin her biri için), düğme verilerini en önemsiz bitten almak. Peki bu registerlardaki diğer bitler ne işe yarıyor, bu satırlar nereye gidiyor? NES denetleyici bağlantı noktasını göz önünde bulundurun:

    Evet, gerçekten bunun için gidiyorlar D3 Ve D4! aracılığıyla kullanılabilirler $4016.3 , $4016.4 ilk limanda ve $4017.3 , $4017.4 ikincisi ve standart olmayan kontrolörler için kullanılırlar.

    Japon muadili Famicom'a gelince, bu bağlantı noktaları yoktur ve oyun denetleyicilerinin kendileri konsoldan ayrılmamıştır, ancak DB-15 konektörü olan bir genişletme bağlantı noktasına sahiptir.

    Tanıdık geliyor, değil mi? Evet, Çinliler Dandy'mizi tasarladığında (biz tasarladığımızdan şüpheliyim) ve çıkarılabilir denetleyiciler yapmaları gerektiğinde, ikinci denetleyici için bağlantı noktalarına sahip olduğu ve bulunduğu için genişletme bağlantı noktasını temel almaya karar verdiler. merkezin sağındaki Famicom'da biraz. Pinout'u değiştirmek zorunda bile kalmadılar. İlk kontrolöre gelince, aynı DB-15'i alıp sola yerleştirdiler ve ilk kontrolörün bağlanabilmesi için pin çıkışını değiştirdiler. Ve sadece o.

    Famicom'un ve bizim Dandy'nin ön bağlantı noktalarını karşılaştırın:

    İşte ülkemizde kullanılan gamepad'lerdeki bu on beş pimli konektörlerin çok garip bir hikayesi.

    Ama bakalım bu Famicom genişletme bağlantı noktasının çıktısı ne?


    (wiki.nesdev.com'dan ekran görüntüsü)

    evet devamı geliyor $4016.1 (giriş için), $4017.0-4 (giriş için), $4017.0-2 (çıkışta), harici kesinti ve hatta ses! Dendy'yi parçalara ayırıp tüm bunların orada olduğunu gördüğümde çok hoş bir şekilde şaşırdım:

    Doğru, daha sonra ortaya çıktığı gibi tüm modellerde değil. Ancak öyleyse, Famicom aksesuarlarıyla da tam uyumluluk vardır ve bunlar ilgili Japon oyunları tarafından kullanılabilir. Ama size Dandy'nin NES ile Famicom, PAL ve NTSC'nin çok garip bir karışımı olduğunu hatırlatmama izin verin. Korsanlar, bu aksesuarları ve farklı kartuş formatlarını hesaba katmazsanız, esasen% 100 uyumlu olan hem Japon hem de Amerikan oyunlarını piyasaya sürdü.

    Toplam: bazı Dandies, NES'te mevcut olan bazı kesintileri içerirken, Famicom'daki ile aynı kesintilere sahiptir. erişim yok $4016.3 Ve $4016.4 ancak nadiren kullanılırlar. Açıklık için bir tablo şeklinde:

    Aksesuarlar nasıl çalışır?

    NES için bir Amerikan dört oyunculu splitter denir Dört Skor basit bir kaydırma yazmacı kümesidir. Onlar. ilk sekiz okuma $4016.0 ilk denetleyiciden ve ikinci sekizden - üçüncüden veri verin. benzer şekilde $4017.0 ikinci ve dördüncü kontrolörler hakkında veri verir. Ayrıca okumaya devam ettiğinizde cihaz, oyunun bağlı olduğunu belirlediği kendi imzasını verir. Dört Skor, başka bir şey değil. Böyle bir cihazın altı vardiya kaydından (4021 veya 74165) monte edilebileceği ve ek veri hatları gerektirmediği için herhangi bir Dandy üzerinde çalışacağı ortaya çıktı. Tabii sadece NES için çıkan Amerikan oyunlarıyla.

    Famicom'un Japon muadili çok daha basittir. Üçüncü ve dördüncü denetleyiciler, doğrudan genişletme bağlantı noktasına takılır ve şu adresten erişilebilir: $4016.1 Ve $4017.1 . Buna göre, böyle bir adaptör için, Dendy için zaten tam teşekküllü bir genişletme bağlantı noktasına ihtiyacımız var, aksi takdirde dördümüzün Japon oyunları oynaması işe yaramayacaktır.

    Arkanoid denetleyici, adından da anlaşılacağı gibi, Arkanoid oynamak için kullanılır ve bir döner düğme ile bir düğmeden oluşur. İçeride, bu bir analogdan dijitale dönüştürücü ve aynı zamanda düğmenin konumunu tutarlı bir şekilde veren bir kaydırma yazmacıdır. Japon ve Amerikan sürümleri arasındaki fark yalnızca bağlantı yöntemindedir. Oyunun Japonca versiyonu, tutamacın konumunu ve düğmenin durumunu okur. $4016.1 Ve $4017.1 ve Amerikan versiyonu $4016.3 Ve $4016.4 sırasıyla. Görünüşe göre Japon Arkanoid için tam teşekküllü bir genişleme bağlantı noktasına ihtiyacınız var ve Amerikalı için hafif silahın çalıştığı herhangi bir züppe yapacak (aynı sonuçları kullanıyor).

    Kendi aksesuarını yarat

    Yukarıdaki cihazların kendileri basit bir devreye sahip olmalarına ve en basit mantık bileşenlerinden monte edilmelerine rağmen, hepsi bir arada cihazın kalbi için bir FPGA kullanmaya karar verdim. Üstelik orada basit bir switch-switch yapmam istendi ama ben A ve B butonlarının yer değiştirmesini mümkün kılmak istedim.Önce Altera'yı seçtim. EPM3064ATC100, ancak kısa süre sonra 64 makro hücrenin benim için yeterli olmadığı anlaşıldı ve seçim bana düştü EPM3128ATC100, zaten 128 makro hücrenin olduğu yer.

    O noktaya gelirse, hiç önemsememeye ve cihaza mevcut modu ve ayarlar menüsünü gösterecek bir tür ekran koymaya karar verdim, ayrıca uzun süre boşta duran 16x2 işaret sentezleyen bir ekranım vardı. . Onunla çalışmak için zaten bir mikrodenetleyiciye ihtiyacınız var ve ben seçtim ATMEGA16.

    Bir cihazın iyi görünmesini sağlamayı her zaman zor bulmuşumdur. Yine de ben bir programcıyım, tasarımcı değil ama cihazı hediye olarak yaparken onu olabildiğince güzel ve kullanışlı hale getirmek istedim. Dahası, başkalarına sanat eserinizi bir şekilde göstermenin neredeyse tek yolu budur: fotoğraflar ve videolar aynı değildir, yalnızca birkaçı bu tür şeyleri hazır şemalara ve 3B modellere göre yeniden yaratır, seri üretimi kurmak zordur, ancak bir hediye bundan ibaret.

    Bu nedenle, görünüm gereksinimleri şuydu: Dandy'den standart DB-15 denetleyicileri için dört bağlantı noktası, bunları seçmek ve yapılandırmak için dört düğme, bir "mod" düğmesi, bir "ayarlar" düğmesi, Arkanoid için uygun bir tutamaç ve bir düğme Yeterince rahat olmalı ve yolunuza çıkmamalıdır. Ek olarak, LED'lerle aydınlatılan ve bir şekilde sezgisel olarak karşılık gelen düğmelerle ilişkilendirilen aktif bağlantı noktaları yapmak istedim, konektörleri arka arkaya düzenlemek en mantıklısı, ancak bu aptal DB-15'ler bunun için çok büyük. Ek olarak, cihaz kendi içinde Arkanoid için bir oyun kumandası olduğu için ellerde rahat olmalıdır. Sonunda, şöyle bir şeyle bitirdim:

    Düğmeler üst üste, portlar üst üste, yanda tutma kolu, sol arkada Arkanoid düğmesi.

    İçeride çok fazla alan olduğu ortaya çıktı. Bu nedenle, FPGA'yı kablolar ve soketler için konektörlerle bir karta, mikrodenetleyiciyi ekran ve düğmelerle diğer karta koymaya karar verdim. En basit seri arayüz ile bağlanırlar.

    FPGA kartı (ilk sürüm):

    İkinci tahta:

    Verilog'da FPGA kodunu yazdım. Her mod için oldukça basit olduğu ortaya çıkıyor. Her şeyden önce, birçoğu için, her bir bağlantı noktasına yapılan aramaları saymamız gerekir, yani. saat telindeki darbeler:

    kayıt sayacı1; kayıt sayacı2; her zaman @ (pozlama strobe_in, pozlama saati1_in) başlarsa (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
    (üzgünüm, habr Verilog'u vurgulayamıyor)

    Nerede flaş_in bir flaştır (her iki bağlantı noktası için bir tane) ve saat1_in Ve saat2_in- bu sırasıyla her bağlantı noktasının saatidir. Konsolun içinde bir mantık vardır: saat = R/W nand (adres == $4016/$4017), yani saat, konsol ilgili adresteki verileri okuduğunda mantıksal bir sıfırdır.

    Dört oyunculu Amerikan ayırıcı simülasyon modu şöyle görünür:
    her zaman @ (*) başla // Strobe doğrudan bağlanır - girişler çıkışlara atanır strobe_out = strobe_in; ata strobe_out = strobe_in; ata strobe_out = strobe_in; ata strobe_out = strobe_in; // Konsolun veriyi kaç kez okuduğuna bağlı olarak her bir gamepad için saati çekin clock_out<= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 >8 && sayaç1<= 16) ? clock1_in: 1; clock_out <= (counter2 >8 && sayaç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

    Dört kişilik Japon ayırıcı modunda, girişleri doğrudan çıkışlara bağlamanız yeterlidir:
    her zaman @ (*) saat çıkışını başlat<= 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

    En zor şey, sırayla okundukları için A ve B düğmelerini değiştirmeyi mümkün kılmaktı, yani. konsol A istediğinde B'nin değerini önceden bilmeniz gerekir, ancak A'dan hemen sonra verilir. İlk başta bir tür harici saat üreteci kullanarak denetleyiciden veri okumayı bir şekilde hızlandırmayı düşündüm, ama sonunda Sadece önceki okumadan değeri almaya karar verdim. Bu bir gecikme sağlar, ancak kesinlikle algılanamaz. Üstelik oyunlar genellikle arka arkaya birkaç kez düğmelerin durumunu okur.

    Elbette tüm bu modların ve ayarların bir şekilde yapılması gerekiyor. Bunun için 12 bitlik bir kayıt tanımladım. kontrol, eşlik için ek bir bit ile seri bağlantı yoluyla yazılan veriler:
    kayıt kontrolü; kayıt kontrol_paritesi; kayıt kontrol_alıcı; regcontrol_counter; her zaman @ (kontrol_strobe pozu, kontrol_saati pozu) başlarsa (kontrol_strobe) başlar control_counter = 0; kontrol_eşliği = 0; biterse başlarsa (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

    Buna göre, mikrodenetleyici tarafından kod (çok kirli) şöyle görünür:
    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 = 0; for (b = 0) B< 11; b++) { if (data & (1<

    Aksi takdirde, mikrodenetleyici kodunda özel bir şey yoktur: HD44780 denetleyicideki ekran, düğmeler, LED'ler, basit bir menü ile çalışmak ve düğmenin dönüş açısını belirlemek için bir analogdan dijitale dönüştürücü ile çalışmak.

    Her şeyin hatalarını ayıkladım, çalıştığından emin oldum ve şimdiden bileşenleri kasaya itmeye başladım ...

    Ancak kapağı kapatmadan önce orijinal Famicom'da kontrol etmeye karar verdim çünkü cihaz onunla birlikte kullanılacak. Ne yazık ki, saat darbelerini saymanın gerekli olduğu modlar düzgün çalışmadı. Bir mantık analizörü yardımıyla, veri hattından saat hattına giden alımlar olduğu ortaya çıktı:

    Bu, her şeyi bozan, yalnızca birkaç on nanosaniyelik bir süreye sahip bir girişimdir. Basit osiloskopumla Dandy'deki saat hattında neler olduğunu görmeye karar verdim:

    Ve işte Famikom'un aynı yerde sahip olduğu şey:

    Dendy için çok güçlü ve orijinal Famikom için çok zayıf olan bu hattın VCC'ye kadar çekildiği görülebilir. Vücut kiti ile deneyler yapmaya başladım. Kısa süre sonra sonuca bir mantık analizcisi ile değil, konsolun kendisiyle bakmanın daha iyi olduğu anlaşıldı. 6502 işlemci için montajcıyı hatırlamam, test için basit bir program yazmam ve kartuşa yazmam gerekiyordu:

    Üzerinde her şey anında net bir şekilde görünür hale geldi ve aynı zamanda oyunu değiştirmeden tüm modları aynı anda test etmek mümkün oldu. ROM indirilebilir

  • Oyunlar ve oyun konsolları,
  • Yeni başlayanlar için elektronik
    • öğretici

    Öncelikle onunla etkileşimin nasıl gerçekleştiğini okuyoruz. Ve belirli adreslerde kayıt yoluyla olur, 8 grup vardır: 8000$-9$FFE(eşit), $8001-$9FFF(garip), $A000-$BFFE(eşit), $A001-$BFFF(garip), $C000-$DFFE(eşit), $C001-$DFFF(garip), $E000-$FFFE(çift) ve $E001-$FFFF(garip). Grup içindeki herhangi bir adrese yazmak eşdeğerdir. Deseni görüyor musun? Kayıt, üç adres biti kullanılarak seçilir: A0, A13 Ve A14, gerisi alakasız.

    FPGA kullanarak eşleyicinin çalışmasını simüle etmeye çalışalım. Kodu Verilog dilinde yazıyorum. Burada vurgulanmamıştır, bunun için özür dilerim.
    İlk olarak, mevcut durumu saklayan kayıtlarımızı tanımlıyoruz:
    kayıt bank_select; kayıt prg_modu; kayıt chr_mode; kayıt; kayıt yansıtma; kayıt ram_protect; kayıt irq_latch; kayıt irq_counter; kayıt a12_low_time; kayıt irq_reload; kayıt irq_reload_clear; kayıt irq_enabled;

    Kayda verilen tepkiyi ilgili adreslerde açıklıyoruz. yükselen sinyal /ROMSEL kartuşun hafızasına bir itiraz olduğu gerçeğinden bahsediyoruz, yani. adreslere göre $8000-$FFFF Tam da bu anda tepki vermemiz gerekiyor.
    her zaman @ (posedge romsel) başlar // Ancak yalnızca bir yazma ise if (cpu_rw_in == 0) başlar // A14, A13 ve A0'ın durumunu göz önünde bulundurun, karşılık gelen kayıt durumunu güncelleyin ((cpu_addr_in, cpu_addr_in)) 3" b000: başla / / 8000$-9FFE, hatta 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

    Şimdi hafızamızın ilgili kısmına erişirken hangi bankanın seçilmesi gerektiğini kayıtlarımıza bağlı olarak açıklayalım.
    Aşağıdaki tabloya göre değişirler:

    Nerede $8000 & #$40 - bu bizim prg_mode'umuzdur ve sırasıyla -2 ve -1 sondan bir önceki ve son sıradır. Bu kodu çıkıyor:
    // PRG bankacılığı her zaman @ (*) başlangıç ​​durumu ((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

    Şimdi CHR. Böyle bir şema var:

    Nerede $8000 & #$40 chr_mode'dur. Şöyle çıkıyor:
    // CHR bankacılığı her zaman @ (*) başlarsa (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

    Yansıtma modu yalnızca bir satırda açıklanmıştır. Buna bağlı olarak kartuşun çıkışını kapatıyoruz ÇIRAM A10 her ikisinde de A10, her ikisinde de A11:
    ppu_ciram_a10 = yansıtma ata? ppu_addr_in : ppu_addr_in;

    Daha da zor. MMC3, ekranda belirli bir çizgi çizildiğinde kesintiler oluşturabilir. Bu oldukça kullanışlıdır ve oyunlar bunu sıklıkla kullanır. Ekrandaki hatlar, çağrılar kullanılarak sayılır. A12 PPU'da. Tipik ayarlarla, sinyal açık A12 0'a kısa geçişler dışında, mantıksal 0'dan mantıksal 1'e her satırda tam olarak bir kez gider. Ve sayılmamaları gerekir, bu işleri biraz karmaşıklaştırır:

    // Yalnızca A12 düşük olduğunda kesmeleri etkinleştir her zaman @ (*) eğer (!irq_enabled) başlarsa başlar irq_ready = 0; ırk<= 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

    Ah evet, MMC3 aynı zamanda ek RAM bağlantısını da destekler. 6000$-7FFF$! Bunu açıklamayı unutmamalıyız:
    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);

    Hepsi bu kadar, MMC3'ümüz hazır! Kodun tamamı burada görüntülenebilir.

    1.3. devre şeması


    Bu bölüm, işlemci modülünün ve konsolların ayrıntılı şematik diyagramlarını sağlar ve ayrıca 8-bit DENDY oyun konsolları için yazılım içeren bir kartuş oluşturma seçeneğini de ele alır.

    1.3.1. işlemci modülü


    DENDY oyun konsolunda genellikle üç tahta bulunur:
    * merkezi işlemci;
    * çıkış konektörleri;
    * RF modülatör ve dengeleyici.
    Panolar esnek düz (şerit) kablolarla birbirine bağlanır. Bazen bir veya iki baskılı devre kartı üzerinde yapılan seçenekler vardır, ancak bu set üstü kutu devresini etkilemez.
    Başlangıçta, oyun konsolları, ana olanlar merkezi işlemci ve video işlemcisinin yongaları olmak üzere, çeşitli entegrasyon derecelerine sahip birkaç yonga içeriyordu.
    Mikroelektronik alanındaki gelişmeler, oyun konsollarının artık yalnızca UM6561 tipi veya eşdeğeri LSI içermesine yol açmıştır. Bu mikro devrede, merkezi ve grafik işlemciler, bellek ve G / Ç kayıtları tek bir çip üzerinde bulunur.
    Birçok Kore yapımı video set üstü kutusu, bir UM6561 yerine birkaç yonga (genellikle iki veya üç) kullanır. Ancak set üstü kutunun çalışma prensibi ve bu durumda çıkış konektörlerindeki sinyaller değişmediğinden bu devre seçenekleri burada dikkate alınmayacaktır.

    Çok çipli varyant
    Çeşitli entegrasyon derecelerine sahip birkaç mikro devre kullanılarak yapılan DENDY oyun konsolunun ilk versiyonunun şematik bir diyagramı, Şek. 1.12.
    Yani oyun konsolunun temeli, merkezi işlemci çipidir (IC1). İşlemcinin çalışması, frekansı X1 kuvars (21.251465 MHz) ile stabilize edilen Q1 ve Q2 transistörleri üzerinde yapılan harici bir saat darbe üreteci tarafından senkronize edilir.
    Oyun konsolunun tüm dahili veri yollarının (A0 - A15 adresleri, DO - D7 verileri ve kontrol) sinyalleri, kartuşun bağlı olduğu XS1 konektörüne gönderilir. Veri yolu (pinler IC1/21-28), adres (pinler IC1/4-19) ve kontrol (pinler IC1/31,34), CPU'yu (IC1) RAM çipine (IC3) ve video işlemciye (IC2) bağlar. ).
    74LS139 yongası (IC8) üzerindeki adres kod çözücü, diğer yongaların merkezi işlemci ile iletişim kurmasını sağlayan sinyaller üretir. A13 - A15 adres yolunun en önemli üç biti (pinler IC8 / 2,3,13) ve M2 sinyali (pinler IC8 / 14) dekoder girişlerine beslenir. İşlemci, kartuşa takılı bellekle çalışıyorsa, IC8/9 pinindeki OT sinyali düşüktür. Set üstü kutunun (IC3) yerleşik RAM'i ile veri alışverişi yapıldığında, IC8/4 pinindeki AO sinyali tarafından düşük bir seviye alınır. IC8/5 pinindeki düşük seviyeli bir sinyal, CPU'nun video işlemci çipi IC2'yi kullandığını gösterir.
    Merkezi işlemci ile aynı çip üzerinde ayrıca oyun konsolu ses işlemcisi ve I/O port adres çözücü devresi de bulunuyor.


    Birinci ve ikinci ses kanallarının çıkış sinyalleri karıştırılır ve AU1 çıkışına (IC1 / 1 çıkışı) ve kalan kanalların sinyalleri - AU2 çıkışına (IC1 / 2 çıkışı) beslenir. Tam ses sinyali, R8 - R12 dirençleri ve C7 kondansatörü üzerinde yapılan bir devrede karıştırılarak oluşturulur ve ardından oyun konsolunun çıkış konektörüne ve RF sinyalini üreten modülatörün girişine beslenir.
    Port 4016h'ye yazılan sayının üç hanesi (D0, D1 ve D2) IC1 / 39-37 çıkışlarına iletilir.

    İşlemci, 4016h bağlantı noktası adresinden her okuduğunda, CK1 çıkışında (pin IC1 / 36) düşük seviyeli bir darbe belirir. İşlemci 4017h adresli bağlantı noktasından okursa, CK2'nin çıkışında (pin IC1 / 35) benzer bir darbe üretilir.
    Oyun konsollarının ve hafif silahın çıkış sinyalleri, iki arabellek kaydı IC6 ve IC7 (tip 74HC368) aracılığıyla veri yoluna iletilir.
    Video işlemci çipi IC2, video bellek çipi IC4 ile birlikte tam bir


    video sinyali. IC2 ve IC4 adres, veri ve kontrol veri yolları ile birbirine bağlıdır. IC4 video bellek yongası, ana RAM yongasına benzer.
    Lütfen IC2 video işlemcisinde veri yolu ve adres yolu olarak aynı pinlerin (IC2/31-37) kullanıldığını unutmayın. İlk olarak, video bellek hücresinin adresinin alt sekiz biti buraya gelir. ALE çıkışında (pin IC2 / 39) düşük seviyeli bir sinyal göründüğünde, bu veri IC5 tampon kaydında (74LS373) depolanır. ALE çıkışı daha sonra yüksek olarak ayarlanır, IC2/26-30 pinleri adresin MSB'leri ile bırakılır ve IC2/31-37 pinleri veri yolu olarak kullanılır.
    Video işlemci veri yolu sinyalleri de XS1 kartuş konektörüne yönlendirilir.
    Video işlemcisinin VIDEO OUT çıkışından (pim IC2 / 21) gelen tam video sinyali, Q3 transistöründe yapılan emitör takipçisinden VIDEO OUT çıkış konektörüne ve modülatöre gider.
    Bazı modellerde video sinyali yükseltme aşaması olmayabilir.

    Şimdi, diğer modellerde bulunan temel şemadan temel farklılıklar hakkında kısaca konuşacağız. Hepsi kullanılan konektörler ve bireysel pimlerin amacı ile ilgilidir.
    Ele alınan oyun sistemi için iki ana tasarım seçeneği vardır. NES, oyun konsollarını bağlamak için 72 pimli kartuş konektörü, 48 pimli genişletme konektörü ve 7 pimli konektörlerle donatılmıştır. FAMICOM (DENDY) oyun konsolu, NES ile tamamen yazılım uyumludur, ancak oyun konsolları için 60 pimli kartuş konektörü, 15 pimli genişletme konektörü ve 9 pimli konektörler kullanır.
    DENDY oyun konsolunun tüm konektörlerinin düzeni, Şek. 1.13a-c ve NES konsolları - şek. 1.13g-e.

    Tek çip seçeneği
    DENDY oyun konsolunun tek çipli versiyonunun şematik bir diyagramı, Şek. 1.14.
    Burada, merkezi işlemci, video işlemci ve belleğin işlevleri, UM6561 tipi bir LSI tarafından gerçekleştirilir. Dahili saat üretecinin frekansı, bir XI kuvars rezonatörü (26.601712 MHz) ile dengelenir. Bazen saat üreteci devresi ayrıca bir transistör içerir.
    Çıkış sinyallerinin çoğu doğrudan XS4 kartuş konektörüne gider. Sinyallerin bir kısmı, XS1, XS2 oyun konsollarını bağlamak için kullanılan konektörlere ve XS3 genişletme konektörüne gider.
    Video ve ses sinyalleri, oyun konsolunun çıkış konektörlerine ve modülatörün girişine, bazen transistörlü amplifikatörler aracılığıyla gönderilir.

    Çıkış konektörleri
    DENDY konsolunda uzaktan kumandaları, bir hafif tabancayı ve diğer çevre birimlerini bağlamak için iki veya üç konektör bulunur. Konnektörler üç tipte olabilir: 7-, 9- ve 15-pin.
    Oyun konsolları 7-1 veya 9 pimli konsol konektörüne veya 15 pimli konsol genişletme konektörüne bağlanabilir, hafif tabanca yalnızca 7 veya 15 pimli konektöre, diğer cihazlar 15 pimli konektöre bağlanabilir konektör.
    Konsolları bağlamak için iki adet 9 pimli konektör ve bir adet 15 pimli genişletme konektörü kullanılır. DENDY kartuşu, üstte 60 pimli bir konektör kullanır.
    NES, oyun denetleyicileri için iki adet 7 pimli konektöre ve bir adet 48 pimli genişletme konektörüne sahiptir.
    Kartuşu NES'e bağlamak için, genişletme konektörüne bağlı ek devrelerin varlığında 60 pimli konektörden farklı olan 72 pimli bir konektör kullanılır. Video işlemcisi ve CPU veri yolu sinyalleri bu konektöre gönderilir.
    DENDY oyun konsolunun konektörlerinin görünümü ve bireysel temasların amacı, Şek. 1.13. Genişletme konektörü (Şekil 1.136), en çok o olduğu için aşağıda tartışılmaktadır.

    Çeşitli ek cihazları bağlamak için uygundur.
    Pim 2 (AUDIO IN), ses işlemcisinin çıkış sinyalleriyle karıştırılan ses sinyalini alır.
    Kontaklar 4-8 (J2 DO - J2 D4), ikinci joystick portunun karşılık gelen bitlerinin girişleridir. Bu girişlerden gelen sinyal kodları, LDA $4017 komutuyla 4017h bağlantı noktasından alınabilir.
    J1 D1 girişi (pim 13), 4016h bağlantı noktasının D1 bitine bağlanır.
    CPU, 4016h ve 4017h adreslerine sahip bağlantı noktalarına eriştiğinde, CLK1 (pin 14) ve CLK2 (pin 9) çıkışlarında kısa süreli düşük seviye darbeleri üretilir. OUT0 -OUT2 çıkışları (pim 10-12), port 4 016h'ye yazılan word'ün DO -D2 bitlerini alır.
    IRQ girişi (pin 3) bir kesme isteği sinyali alır.

    1.3.2. kartuş


    DENDY oyun konsolunun değiştirilebilir modülü - bir kartuş - genellikle iki ROM veya RAM yongası içerir.
    Bir ROM yongası, video işlemciye bağlanır ve karakter oluşturucu bilgilerini depolar. Karakter oluşturucu ROM'u yerine, bazı kartuşlar statik bir RAM yongası kullanır. Yazılım içeren başka bir ROM çipi, merkezi işlem birimine bağlanır. Bazen kartuş kartında oyun durumunu kurtarmak için tasarlanmış ek bir lityum pille çalışan RAM bulunur.
    En basitleri dışında hemen hemen tüm kartuşlarda, programlanabilir bir adres kod çözücü görevi gören bir bellek sayfası denetleyici yongası bulunur.
    Yapısal olarak, DENDY önek kartuşu, uygun kurulum için iki şev şeklinde bir anahtarı olan 105x90x20 mm boyutlarında koruyucu plastik bir kasadır. 60 pimli konektöre ve kurulu paketlenmemiş mikro devrelere sahip bir baskılı devre kartı barındırır: ROM, RAM ve bir sayfa denetleyicisi.
    MBC1 sayfa denetleyicisi ile ek RAM içermeyen bir oyun kartuşunun şematik bir diyagramı, Şek. 1.15.
    Kartuş, iki ROM yongasından (IC1 ve IC2) ve bir bellek sayfası denetleyicisi IC3'ten oluşur. Chip IC1 (27С128), video işlemcisinin ROM'udur! içinde yazılı karakter üreteçleri ile.
    Video işlemcisinin adres alanında, ROM'un ayrı sayfaları 0000h - 1FFFh adreslerine yerleştirilir. Adresin en önemsiz bitleri, doğrudan XS1 konektörünün karşılık gelen pimlerinden IC1 yongasına beslenir. kıdemli rütbeler


    Pirinç. 1.15. DENDY Oyun Konsolu Kartuş Şeması

    VA12 ve VA13 adresleri, bellek sayfası denetleyici yongası IC3 tarafından üretilir.
    Video işlemci adres veri yolunun VA13 hattına bağlı CS girişinde (pin IC1 / 20) düşük seviyeli bir sinyal olduğunda ROM yongası seçilir. Veriler, ROM çıkışlarından XS1 konnektörünün pinlerine aktarılır.
    Chip IC2 (KONAMI ROM 1Mbit), içinde 1 Mbit (128 Kb) kapasiteli program kayıtlı maskeli bir ROM'dur. A0 - A13 adresinin düşük bitleri, kartuşun karşılık gelen kontaklarından gelir ve A14 - A16 adresinin yüksek bitleri, bellek sayfa denetleyicisi IC3 tarafından üretilir. ROM IC2'nin çalışmasını sağlayan CS sinyali de IC3'ten iletilir.
    IC3, ROM yongaları IC1 ve IC2 için adresin MSB'lerini üreten programlanabilir bir adres kod çözücüsüdür. Ayrıca, seviyesi ekran görüntüleme modunun seçimini belirleyen bir VA10" sinyali üretir.
    Söz konusu kartuşta, bazı çıkışlar bağlı değildir, bu nedenle mikro devrenin yetenekleri tam olarak kullanılmaz.

    1.3.3. Modülatör


    DENDY oyun konsolu modülatörü, IC2 video işlemci çipinden bir görüntü sinyali ve IC1 merkezi işlemci çipinden bir ses sinyali alır ve sayaç aralıklarından birinde tam bir TV RF sinyali üretir. Modülatör devresi standardize edilmemiştir ve genellikle üretici tarafından belirlenir. Ancak ana bileşenlerin çalışma prensibi ve bileşimi her zaman aynıdır, bu nedenle devredeki değişiklikler onarım sırasında zorluklara neden olmamalıdır.
    RF modülatörünün olası varyantlarından birinin şematik bir diyagramı, Şek. 1.16.
    Ana RF osilatörü, yüksek frekanslı bir Q2 transistörü üzerinde yapılır (transistöre benzer
    KT368A). Televizyon kanallarından birinin taşıyıcı frekansını oluşturur. Tipik olarak, set üstü kutu jeneratörünün çalışma frekansı 170-230 MHz aralığındadır ve L1, C8 - C11 1, R9 - R11 elemanları tarafından belirlenir. Frekans, L1 bobininin endüktansı değiştirilerek ayarlanır.
    Transistör Q1 (transistör KT3102'ye benzer) üzerinde uygulanan jeneratör, tam televizyon sinyali için ses alt taşıyıcısını oluşturur. Jeneratörün çıkış sinyali, AUDIO IN girişinden (CN1 konnektörünün 4 numaralı pimi) R4, C1 devresinden gelen bir ses sinyali ile modüle edilir.
    Alıcı kutusunun üreticisine bağlı olarak jeneratör frekansı 5,5 veya 6,5 ​​MHz'dir. Sinyal frekansının ince ayarı, T1 transformatörünün çekirdeği döndürülerek gerçekleştirilir.
    D1, D2 diyotları (KD503A diyotuna benzer), trafo T2 ve transistör Q3 üzerinde yapılan karıştırıcı, tam bir HF televizyon sinyali oluşturur. Mikser girişi, CN1 konnektörünün 3. piminden bir ana osilatör sinyali ve düşük frekanslı bir video sinyali alır. Karıştırıcının çıkışından RF sinyali, eşleştirme devresi C15, L3 aracılığıyla işlemci modülünün RF OUT çıkış konektörüne iletilir.

    1.3.4. Oyun konsolları


    DENDY oyun konsolu için yaklaşık on farklı oyun konsolu türü vardır. Bununla birlikte, en yaygın olarak kullanılan, teslimat setinde bulunan standart oyun konsolu, ek düğmelere sahip turbo uzaktan kumanda ve hafif tabancadır.
    Aşağıda, bu cihazların şematik diyagramlarının yanı sıra dört konsolun aynı anda bağlanması için adaptör şeması bulunmaktadır.

    Standart oyun tablası
    DENDY konsolu için standart oyun konsolu, hareketli bir haç ve dört parçadan oluşur.

    bireysel düğmeler. Uzaktan kumandanın içinde, HEF4021B mikro devresinin bir analogu olan paketlenmemiş bir kaydırma yazmaç mikro devresi vardır. Orijinal mikro devrenin yokluğunda, hemen hemen her 8 bitlik kaydırma yazmacı kullanılabilir.
    Standart bir konsolun şematik bir diyagramı, Şek. 1.17.


    Pirinç. 1.17. DENDY konsolu için standart bir oyun konsolunun şematik diyagramı
    Oynatma sırasında bir düğmeye basıldığında, kaydırma yazmacının ilgili girişi düşük sürülür. Butonlar açıkken yüksek seviye, yazmacın giriş hatlarını 10-68 kOhm dirençli dirençler aracılığıyla +5 V güç barasına bağlayarak sağlanır.
    IC1 kaydındaki girişlerin durumları, mikro devrenin PE girişine yüksek seviyeli bir darbe geldiğinde saklanır. Bundan sonra, CLK girişindeki (çıkış IC1 / 10) sinyalin negatif kenarında, yazmacın içeriği kaydırılır ve en önemli bit D0 veriyolunda çıkar.
    Alıcı kutusuyla birlikte verilen ikinci oyun konsolunda BAŞLAT ve SEÇ düğmeleri olmayabilir, ancak bu, konsolun düzenini ve çalışma prensibini etkilemez.

    Turbo Uzaktan Kumanda
    DENDY oyun konsolu için turbo uzaktan kumandanın şematik diyagramı Şek. 1.18.
    Turbo uzaktan kumanda ile standart olan arasındaki tek fark, kaydırma yazmacı mikro devresinde ek bir T6 Hz çıkışının ve bu çıkışa bağlı iki ek düğme TURBO A ve TURBO B'nin bulunmasıdır.
    Uzaktan kumanda çipinin dahili üreteci, T çıkışında 6-10 Hz frekanslı bir dizi darbe üretir. Bu nedenle, TURBO düğmesine A basıp basılı tutmak, A düğmesine saniyede 6 kez bir yoğunlukta basıp bırakmakla aynıdır. A ve B düğmeleri genellikle oyunda ateş ederken kullanıldığından, bu düğmelerin kullanılması uzaktan kumanda tuşlarındaki aşınmayı azaltır.


    Pirinç. 1.18. DENDY oyun konsolu için turbo uzaktan kumandanın şematik diyagramı

    Dört uzaktan kumanda bağlamak için adaptör
    Bazı oyunlarda en fazla dört oyuncu olabilir. Bu durumda, dört oyun konsolu, özel bir adaptör aracılığıyla oyun konsolunun konektörlerine paralel olarak bağlanır.
    Adaptörün şematik diyagramı Şek. 1.19.
    Şematik diyagramdan görülebileceği gibi, adaptörün ana görevi, ilk sekiz saat darbesi sırasında konsol 1 ve 3'ten ve sonraki sekiz ile konsol 2 ve 4'ten bilgilerin okunmasını sağlamaktır.
    STRB hattına uygulanan senkronizasyon sinyali, konsolların durumunu iç kayıtlarında sabitler ve adaptör devrelerinin ilk ayarını gerçekleştirir.
    İlk sekiz saat darbesi sırasında, IC1 ve IC2 sayaçlarının Q8 çıkışları düşük sürülür, bu da saat darbelerinin konsol 1 ve 3'e gönderilmesini ve ayrıca bu konsollardan gelen bilgilerin oyun konsolunun girişlerine iletilmesini sağlar.
    G / Ç bağlantı noktasından okurken oyun konsolundan gönderilen sekizinci saatten sonra, karşılık gelen çipin (IC1 veya IC2) Q8 çıkışı yükselir (log. 1), bu da IC3 veya IC4 anahtarının geçiş yapmasına ve bağlanmasına neden olur. konsol konektörleri sırasıyla konsol 2 veya 4'tür.

    hafif silah
    Şek. 1.20, DENDY oyun konsolunun hafif tabancasının devre şeması için olası seçenekleri gösterir.
    Burada ışığa duyarlı bir eleman olarak bir fototransistör kullanılır. En ucuz set üstü kutularda bazen cihazın hassasiyetinde bozulmaya yol açan bir fotodiyot ile değiştirilir.
    Fotodiyotun çıkışından dekuplaj kondansatörü C1 yoluyla gelen sinyal, Q1 transistörü üzerinde yapılan bir amplifikatöre beslenir. Bu transistörün toplayıcısından ters çevrilmiş sinyal, D4 devresi boyunca pin 5 üzerinden oyun konsolunun işlemci modülüne iletilir.

    Tabanca televizyon ekranına doğrultulursa, D4 çıkışında çerçeve tarama süresine eşit frekansta bir darbe sinyali üretilir.
    Hafif tabancanın tetiği, normalde kapalı kontaklara sahip bir düğmeye bağlanır. Tetik bırakıldığında, D3 konektör pimi toprağa bağlanır. Tetiğe basıldığında kontaklar açılır ve oyun konsolu içindeki bu devrenin 10-51 kΩ'luk bir direnç üzerinden +5 V veriyoluna bağlanmasıyla sağlanan D3 girişinde yüksek mantık seviyeli bir sinyal belirir.

    1.3.5. güç ünitesi


    DENDY oyun konsolu güç kaynağı, harici bir AC adaptörü ve dahili bir dengeleyiciden oluşur.

    Harici ağ adaptörünün görevi, ~ 220 V şebeke voltajını oyun konsolunun dahili dengeleyicisine iletilen 9-12 V sabit voltaja dönüştürmektir.
    DENDY ağ bağdaştırıcısının şematik diyagramı Şek. 1.21.
    Üniteyi tamir ederken, çıkış konnektöründeki merkezi kontağın ortak bir kabloya bağlı olduğunu unutmayın.

    Adaptörden gelen dengesiz voltaj, AN7805 yongası veya bir transistör üzerinde yapılan ve işlemci modülünde bulunan oyun konsolunun dahili dengeleyicisine beslenir. Stabilizatörün çıkışında +5 V'luk sabit bir voltaj oluşur.
    DENDY oyun konsolu besleme voltajı dengeleyicisinin iki varyantının şematik diyagramları, şekil 2'de gösterilmektedir. 1.22 ve ek açıklamaya gerek yoktur.


    Pirinç. 1.22. DENDY oyun konsolu için voltaj regülatörünün şematik diyagramları

    1.4. Tipik arızalar


    Ek açılmıyor
    Olası nedenler: ağ bağdaştırıcısının veya dahili dengeleyicinin arızalanması; kısa devre veya açık besleme devreleri; kartuş arızası; işlemci modülü hatası
    1. Ağ adaptörünün çıkış voltajını ölçün. 9-12 V'u aşarsa, şebekeyi değiştirin
    adaptör. Uygulama, çoğu zaman arızaların doğrultucu köprü diyotlarından kaynaklandığını göstermektedir. Transformatör arızalanırsa, çıkış voltajı 9-12 V ve izin verilen yük akımı 500 mA olan herhangi bir güç kaynağı iş görecektir.
    2. Uzaktan kumandaları, kartuşu ve modülatörü işlemci modülünden ayırın ve ardından oyun konsolu birimlerinde kısa devre olup olmadığını kontrol edin. Bir kısa devre tespit edilirse, ortadan kaldırdıktan sonra dengeleyiciyi ve içine takılı olan düşük dirençli direnci kontrol edin. Aşırı yük oluştuğunda, genellikle güç devresindeki baskılı iletkenlerden biri kırılır, bu nedenle iletkenlerin sağlam olduğundan emin olmak için panoları dikkatlice incelemeniz gerekir.
    H. Kısa devre yoksa oyun konsolunun dahili dengeleyicisini kontrol edin. Stabilizatörün çıkışındaki voltaj 5 ± 0,1 V aralığında olmalıdır; aksi takdirde AN7805 yongasında yapılan dengeleyicide IC1 yongasını (KR142E-H5A'ya benzer) değiştirmeli ve C1 - C4 kapasitörlerini kontrol etmelisiniz. Bir transistör üzerine uygulanan bir dengeleyicide, transistör Q1'i (olası değiştirme - KT815), zener diyot D1'i (olası değiştirme - KS156A) ve R1 direncini kontrol edin. Direnç yerine, dengeleyiciyi kısa devreden koruyacak bir sigorta takılmasına izin verilir.
    4. Set üstü kutuyu uzaktan kumanda, modülatör ve kartuş olmadan açın. VIDEO OUT jakında bir video sinyali bulunmalıdır. Bu sinyal TV'nin LF girişine uygulandığında ekranda renkli nokta ve karelerden oluşan kaotik bir görüntü belirecektir. Bir çıkış sinyalinin varlığı, konsollarda veya modülatörde bir arıza olduğunu gösterir.
    5. Çıkış sinyali yoksa, kristal osilatörü ve transistör video amplifikasyon aşamasını kontrol edin. Kuvars rezonatör X1'in ve Q1 - Q3 transistörlerinin servis kolaylığı, tüm işlemci modülünü değiştirmenin gerekli olduğu sonucuna varmamızı sağlar.

    Cihaz kararsız
    Olası nedenler: harici ağ bağdaştırıcısının veya dahili dengeleyicinin arızalanması; kartuş bağlantı konnektörünün kontaklarının kirlenmesi.

    1. AC adaptörünün çıkış voltajını kontrol edin. Genellikle, oyun konsoluyla birlikte verilen adaptörün düşük yük kapasitesi nedeniyle bir arıza meydana gelir. Daha güçlü bir adaptör bağlayarak sorun çözülür.
    2. Alıcı kutusunun konektörlerindeki kontak bağlantılarının güvenilirliğini kontrol edin. Kartuş bağlantı konnektörü özellikle dikkatle incelenmelidir. Temas noktalarını alkolle silin.
    3. Oyun konsolunun dahili dengeleyicisini kontrol edin. Yeterli bir dağıtım alanına (yaklaşık 10 cm2) sahip bir radyatör üzerine bir mikro devre veya stabilizatörün güç transistörünü takmak faydalıdır.
    4. Güç devresine, örneğin ön ek kartlarının her birine ve kartuşa 100,0 uF x 16 V ve 0,01 uF nominal değere sahip ek kapasitörler takın.

    Hafif silah çalışmıyor
    Muhtemel sebepler: bağlantı kablosunda bir kopukluk veya konektörde kötü kontaklar; hafif silahın fotodiyotunun veya transistörünün arızalanması; hafif tabancadaki tetik kontaklarının arızası.
    Sorun giderme algoritması:
    2. Hafif tabancadaki transistörü ve tetiğin altındaki kontakları kontrol edin. Tetiğe basıldığında bir temas kapağı olduğundan emin olun, çünkü kural olarak tabancanın mekanik kısmında arıza meydana gelir.
    3. Tabancanın düşük hassasiyeti genellikle namluya takılı odaklama merceğinin yer değiştirmesinden kaynaklanır. Bu durumda, merceği yerine takmanız ve sabitlemeniz gerekir. Mercek yuvasını ayarlamak, çalışan bir hafif tabancanın bile performansını artırmanıza olanak tanır.
    4. Hafif tabancanın dahili devreleri düzgün çalışıyorsa, oyun konsolunun tüm işlemci modülünün değiştirilmesi gerekir.

    Uzaktan kumanda çalışmıyor
    Olası nedenler: bağlantı kablosunda kopukluk veya konektörde zayıf temas; düğmeler kirli; uzaktan kumanda çipi hatası.
    Sorun giderme algoritması:
    1. Bağlantı kablosunun bütünlüğünü ve konektördeki bağlantının güvenilirliğini kontrol edin. Konektörün arızalanması durumunda, eşleşen parça ile birlikte mevcut herhangi bir 7 pimli konektörle değiştirin.
    2. PE ve STROBE giriş sinyallerini kontrol edin. Sinyallerin olmaması, merkezi işlemcinin değiştirilmesi gerektiğini gösterir.
    3. Uzaktan kumandaya takılı mikro devrenin çıkış sinyalini kontrol edin. Sinyal yoksa, uzaktan kumandayı değiştirin.

    Uzaktan kumandadaki bazı düğmeler çalışmıyor

    Olası nedenler: uzaktan kumandanın kirlenmesi veya mikro devrenin arızalanması.
    Sorun giderme algoritması:
    1. Uzaktan kumanda kartını ve iletken pedli lastik contayı alkolle silin.
    2. Lastik conta üzerindeki iletken tamponlar arızalıysa folyo parçalarını yapıştırarak onarın. Sigara paketlerinden folyo kullanmak daha uygundur: kauçuğa daha iyi yapışma sağlayan kağıt bir tabana sahiptir.
    3. Kart üzerindeki iletken kaplamanın hasar görmesi durumunda, baskılı devre kartının izlerine lehimlenmiş temiz bir montaj teli kullanarak eski haline getirin.
    4. Tüm temas yüzeyleri iyi durumdaysa, uzaktan kumandaya takılı mikro devreyi veya tüm uzaktan kumandayı değiştirmek gerekir.

    Modülatör çıkışında RF sinyali yok
    Olası nedenler: jeneratör ayarlarının ihlali, ana osilatörün veya karıştırıcının arızası.
    Sorun giderme algoritması:
    1. LF çıkışında video ses sinyallerini kontrol ederek arızalı elemanın RF modülatör devresinde olduğunu doğrulayın. Bu sinyallerden herhangi birinin olmaması, işlemci modülünün arızalandığını gösterir.
    2. Ses veya görüntü yoksa osilatör büyük olasılıkla arızalıdır. Jeneratörü kontrol etmek için çıkış sinyalinin frekansını ölçmelisiniz: 170-230 MHz aralığında olmalıdır. Bir sinyalin olmaması, Q2 transistörünün değiştirilmesi gerektiği sonucuna götürür. Jeneratör frekansı belirtilen limitlerin üzerine çıkarsa LI, C8 -C11, R10, R11 elemanlarının kontrol edilmesi gerekir.
    3. Ana osilatörün çalıştığından emin olduktan sonra, karıştırıcıyı (diyot D1, D2 ve trafo T2) ve L2 eşleştirme devresini kontrol edin. C13, C14.
    4. Normal bir resim ile bir ses sinyalinin olmaması, ses alt taşıyıcı üretecinin arızalandığını gösterir. Bu durumda, IF ses üretecinin frekansının televizyon standardına (5,5 veya 6,5 ​​MHz) uyup uymadığını kontrol edin ve gerekirse, T1 transformatörünün çekirdeğini döndürerek üreteci ayarlayın. Jeneratörün çıkışında sinyal yoksa Q1 transistörünü değiştirin.

    Kendi elinizle bir oyun konsolu nasıl yapılır aslan 8 Kasım 2017'de yazıldı

    Genel olarak, bunu oldukça uzun zaman önce yapma fikrim vardı, ancak ancak şimdi bu tür el sanatları için yazılım az çok iyi bir duruma geldi.
    Bunu bir x86 nettoptan yapmaya çalışmadan önce, ama iş oldukça hantal ve kaprisli çıktı. Sonra nettopu sattı ve kullanılmış bir Android TV Kutusu satın aldı. Çok daha kompakt ve daha hafif, ancak RetroArch emülatörünün Android'de düzgün çalışmasını sağlayamadım, montaj nasıl olursa olsun, sağlam hatalar var.

    Bu nedenle, Raspberry Pi 3'e dayalı bir set üstü kutu monte etmeye karar verildi, çünkü bu amaçlar için zaten hazır sistem görüntüleri var ve yapılandırma esnekliği tek kelimeyle muhteşem.


    Yani, ihtiyacimiz var:
    - Ahududu Pi (herhangi biri yapacak, en güçlüsünü bir farkla aldım);
    - Güç kaynağı 5V 3A;
    - İki USB oyun çubuğu;
    - Gövde (her şey kullanılabilir);
    - Çeşitli konektörler ve bağlantı elemanları (tatmak için);
    - Tutkal (tatmak için iki bileşenli epoksiyi severim).

    Kasayı ölü bir konsoldan kullanmaya karar verdim ve bir bit pazarında birkaç dolara SEGA Genesis 3'ün böyle bir 16-bit Çince kopyasını buldum.

    Beceriksiz yazıtları temizlemek için çok zaman, çaba ve izopropil harcandı. Ama böylesi daha iyi. Maalesef kasada birkaç etkileyici çizik var ama şimdilik olduğu gibi bıraktım.

    Kasanın içindeki elemanların yerini buldum. Gördüğünüz gibi, bir RCA konektör bloğu ve günlük hayatta en işe yaramaz, ancak ihtiyaçlarım için vazgeçilmez olan bir HDMI anne-baba adaptörü satın aldım. Tahtayı kasanın kenarından uzaklaştırmak gerekir. Ve sonra bir dizi çeşitli pirinç raf içeren bir paket geldi (yerel pazarda bir şekilde gerçekçi olmayan bir şekilde pahalılar).

    HDMI adaptörünün yumuşak kasasını birkaç milimetre kestim ve kasanın her iki yarısında dikdörtgen bir delik açtım. Yapıştırma yerlerini ince zımpara ile temizlemeyi unutmadan, rafları tahtanın altına yerleştirip içini epoksi ile doldurdum.

    Aynı şekilde laleler için yuvarlak delikler açtım ve rafları yapıştırdım. Kesmek korkutucuydu, tam olarak yapmak o kadar kolay değil.

    Ama her şey neredeyse mükemmel çıktı! Fazlasıyla memnunum.

    Hadi devam edelim! Breadboard'dan bir parça kestim ve elektrik prizini üzerine sabitledim. Mikro-usb çıktısı almak mümkün olabilir, ancak daha kanoniktir. Tabii ki aynı raflara monte edilecek.

    Sabit. Harika. Güç kaynağının yanındaki büyük yuvarlak deliği nereye sığdıracağımı bulamadım, başlangıçta oraya bir analog sinyal vermek istedim, ancak lalelerin daha evrensel olduğuna karar verdim. Bu nedenle plastik bir kapakla kapatacağım.

    Kartı hazırladım ve joystickler için iki adet USB soketi lehimledim.

    Kasanın doğru yerindeki raflara sabitledim. Ama tabii ki konektörler şekil olarak Segov'lara uymuyor ve bundan gerçekten hoşlanmadım.

    Bu nedenle, jumper'ı doğal delikler arasında gördüm ve içine kesilmiş plastik bir sahte panel yapıştırdım. Renk biraz soluk ama belli olmuyor.

    Gücü, USB soketlerini ve analog çıkışları kablolarla lehimledim. Bu arada yazılım çipi mi donanım mı bilmiyorum ama Raspberry Pi 3'te çıkış tespiti (analog/dijital) otomatik ama bilgisayarın ilk versiyonunda manuel geçiş yapmak zorunda kaldım.

    Güç ve sıfırlama düğmelerini yapma zamanı. Raspberry Pi'de bu konular için normal düğmeler olmadığından ve onu kapatmak, gücü zor bir şekilde kesmek istemediğimden, düğmeleri GPIO kontaklarına bağlamaya ve kapatmak için komut dosyaları yazmaya karar verdim. ve otomatik yüklemeye yeniden başlatma. Güç düğmesi kesin olarak tanımlanmış GPIO'lara asılmalıdır, böylece düğmeye basıldığında set üstü kutumuz yalnızca kapanmaz, aynı zamanda açılır.
    Ve betikleri internette bulmak kolaydır. Burada tatsız bir sürprizle karşılaştım. Açmak / kapatmak için, sabitlemeden bir düğmeye ihtiyacınız var ve konsoldaki yerel anahtar basit bir kaydırıcıydı. Bir geri dönüş mekanizması yapmak zorunda kaldım ve sürgüyü silikon gresi ile yağladım.

    Ve işte ikinci sürpriz: hangi anahtarı koymalı? Sonunda, ayak anahtarını ölü yazıcıdan çıkardım ve ayağı büktüm. Şimdi kaydırıcıya bastığınızda, ayak anahtara basar. Harika. Tahta üzerine lehimlenir ve raflara sabitlenir.

    Sıfırlama düğmesi aynı yazıcıdan çıkarıldı ve karta sabitlendi. Bununla birlikte, düğmenin kendisi (kasa üzerinde) güç düğmesi konektörüne dayanıyordu ve kesinlikle 5 ve 6 GPIO'da olmalıdır. Fişi kesmek zorunda kaldım. Doğrudan lehimlemek mümkündü ama ben istemedim.

    Kartuş yuvası ağla kaplıydı, bit pazarından satın alındı ​​ve beyaza spreyle boyandı. Vücudu içeriden kesmek zorunda kaldım ama bu zor değil.
    Ve sonra Sega Saturn tarzı oyun çubukları geldi. Neden onlar? 6 düğme ve üstte iki düğme olduğundan, yani işlevsellik NES, SNES ve Sega Mega Drive'ı sorunsuz bir şekilde kapsar. Joystick'i ilk açtığınızda ayarlamanız ve ardından her emülatör için yapılandırmaları düzeltmeniz ve klasörlere dağıtmanız yeterlidir.

    Joysticklerin kalitesi 5 üzerinden 3'tür, montaj mükemmeldir, ancak çarpılar belirsiz bir şekilde bastırılır. Bu benim Retrolink ile ilgili. Lisanslı Sega USB oyun çubukları bulabilirsiniz, ancak fiyatlar ÇOK ısırıyor.

    Aslında hazır! Açmak, oyun çubuklarını yapılandırmak ve Wi-Fi'yi bağlamak (bir klavyeye ihtiyacınız olacak) ve ardından Total Commander aracılığıyla cihazın paylaşılan klasörlerine gitmek ve en sevdiğiniz oyunları oraya bırakmak kalır.

    İşte RCA ile bağlandığında bir resim. Fikir hemen yazı tiplerini büyütmeyi öneriyor.

    HDMI'yı bağlarsanız, işte böyle ortaya çıkıyor. Çok daha iyi. Ancak analog çıkışlar, ülkedeki arkadaşlarla bir bira ile oynamak için kullanışlı olacaktır.

    Feragatname: hafif bir giriş gecikmesi var (Giriş Gecikmesi), sadece benim tarafımdan fark edilmedi ve TV'nin bununla hiçbir ilgisi yok. İnternet, gecikmeyi azaltmanın yollarını açıklar, ancak bu başka bir hikaye.

    Ve hoş olmayan bir eksi daha - güç bağlandığında, set üstü kutu hemen açılır ve düğmeye basılmasını beklemez. Nasıl kazanacağımı henüz çözemedim.
    Planlar, çizici kesim üzerine kasa üzerine film yazıtları sipariş etmektir. Ve geri kalanı ben mutluyum ve arkadaşlarım da.

    İlk başta bu konu hakkında bir makale yazmayı düşünmedim, ancak görünüşe göre bu zaten Dandy konuları üzerine bir dizi makalenin parçası. Ve evet, bu sefer konu orijinal konsollar olan Famicom veya NES değil, öncelikle yerli Dandy ile ilgili. Cihazı, Dandy hakkında çok ilginç videolar çeken bir kişiye hediye olarak yaptım ve bu özel klonla uyumluluğa odaklandım.

    Gerçek şu ki, hem Famicom hem de NES için çeşitli aksesuarlar çıktı: 3D gözlükler, klavyeler, robotlar, barkod okuyucular, her türlü oyun kumandası ve çok daha fazlası. Bize sadece hafif tabanca geldi. Görevim, dört oyuncu için bir ayırıcıyı (evet, böyle oyunlar vardı) ve bir Arkanoid denetleyiciyi birleştirecek bir cihaz monte etmekti.

    G/Ç bağlantı noktaları

    Öncelikle Famicom, NES ve Dendy oyun kumandalarının joysticklerle nasıl çalıştığını ve bu konuda nasıl farklılaştıklarını anlatmakta fayda var.

    Oyunlar açısından, G / Ç bağlantı noktaları, adresleri olan iki kayıttır. $4016 Ve $4017 , sırasıyla her şeyin bağlı olduğu iki bağlantı noktasıyla ilişkilendirilir. Ancak standart denetleyicilerde, verileri okumak için yalnızca bir kablo kullanılır - D0, kayıtların her birindeki en önemsiz (sıfır) bit aracılığıyla sırasıyla mevcut olan veriler: $4016.0 Ve $4017.0 . Benzer şekilde, kayıt başına bir tel kullanılır, buna genellikle çakar(veya MANDALLI), gamepad içindeki sayacı sıfırlar ve şuraya yazarak kullanılabilir: $4016.0 (evet, her iki denetleyici için ortaktır).

    Basitçe söylemek gerekirse, ilk denetleyicideki düğmelerin durumunu almak için önce 1'e yazmanız gerekir. $4016.0 , hemen oraya 0 yazın, böylece sayacı sıfırlayın ve ardından okuyun $4016 Ve $4017 sekiz kez (düğmelerin her biri için), düğme verilerini en önemsiz bitten almak. Peki bu registerlardaki diğer bitler ne işe yarıyor, bu satırlar nereye gidiyor? NES denetleyici bağlantı noktasını göz önünde bulundurun:

    Evet, gerçekten bunun için gidiyorlar D3 Ve D4! aracılığıyla kullanılabilirler $4016.3 , $4016.4 ilk limanda ve $4017.3 , $4017.4 ikincisi ve standart olmayan kontrolörler için kullanılırlar.

    Japon muadili Famicom'a gelince, bu bağlantı noktaları yoktur ve oyun denetleyicilerinin kendileri konsoldan ayrılmamıştır, ancak DB-15 konektörü olan bir genişletme bağlantı noktasına sahiptir.

    Tanıdık geliyor, değil mi? Evet, Çinliler Dandy'mizi tasarladığında (biz tasarladığımızdan şüpheliyim) ve çıkarılabilir denetleyiciler yapmaları gerektiğinde, ikinci denetleyici için bağlantı noktalarına sahip olduğu ve bulunduğu için genişletme bağlantı noktasını temel almaya karar verdiler. merkezin sağındaki Famicom'da biraz. Pinout'u değiştirmek zorunda bile kalmadılar. İlk kontrolöre gelince, aynı DB-15'i alıp sola yerleştirdiler ve ilk kontrolörün bağlanabilmesi için pin çıkışını değiştirdiler. Ve sadece o.

    Famicom'un ve bizim Dandy'nin ön bağlantı noktalarını karşılaştırın:

    İşte ülkemizde kullanılan gamepad'lerdeki bu on beş pimli konektörlerin çok garip bir hikayesi.

    Ama bakalım bu Famicom genişletme bağlantı noktasının çıktısı ne?


    (wiki.nesdev.com'dan ekran görüntüsü)

    evet devamı geliyor $4016.1 (giriş için), $4017.0-4 (giriş için), $4017.0-2 (çıkışta), harici kesinti ve hatta ses! Dendy'yi parçalara ayırıp tüm bunların orada olduğunu gördüğümde çok hoş bir şekilde şaşırdım:

    Doğru, daha sonra ortaya çıktığı gibi tüm modellerde değil. Ancak öyleyse, Famicom aksesuarlarıyla da tam uyumluluk vardır ve bunlar ilgili Japon oyunları tarafından kullanılabilir. Ama size Dandy'nin NES ile Famicom, PAL ve NTSC'nin çok garip bir karışımı olduğunu hatırlatmama izin verin. Korsanlar, bu aksesuarları ve farklı kartuş formatlarını hesaba katmazsanız, esasen% 100 uyumlu olan hem Japon hem de Amerikan oyunlarını piyasaya sürdü.

    Toplam: bazı Dandies, NES'te mevcut olan bazı kesintileri içerirken, Famicom'daki ile aynı kesintilere sahiptir. erişim yok $4016.3 Ve $4016.4 ancak nadiren kullanılırlar. Açıklık için bir tablo şeklinde:

    Aksesuarlar nasıl çalışır?

    NES için bir Amerikan dört oyunculu splitter denir Dört Skor basit bir kaydırma yazmacı kümesidir. Onlar. ilk sekiz okuma $4016.0 ilk denetleyiciden ve ikinci sekizden - üçüncüden veri verin. benzer şekilde $4017.0 ikinci ve dördüncü kontrolörler hakkında veri verir. Ayrıca okumaya devam ettiğinizde cihaz, oyunun bağlı olduğunu belirlediği kendi imzasını verir. Dört Skor, başka bir şey değil. Böyle bir cihazın altı vardiya kaydından (4021 veya 74165) monte edilebileceği ve ek veri hatları gerektirmediği için herhangi bir Dandy üzerinde çalışacağı ortaya çıktı. Tabii sadece NES için çıkan Amerikan oyunlarıyla.

    Famicom'un Japon muadili çok daha basittir. Üçüncü ve dördüncü denetleyiciler, doğrudan genişletme bağlantı noktasına takılır ve şu adresten erişilebilir: $4016.1 Ve $4017.1 . Buna göre, böyle bir adaptör için, Dendy için zaten tam teşekküllü bir genişletme bağlantı noktasına ihtiyacımız var, aksi takdirde dördümüzün Japon oyunları oynaması işe yaramayacaktır.

    Arkanoid denetleyici, adından da anlaşılacağı gibi, Arkanoid oynamak için kullanılır ve bir döner düğme ile bir düğmeden oluşur. İçeride, bu bir analogdan dijitale dönüştürücü ve aynı zamanda düğmenin konumunu tutarlı bir şekilde veren bir kaydırma yazmacıdır. Japon ve Amerikan sürümleri arasındaki fark yalnızca bağlantı yöntemindedir. Oyunun Japonca versiyonu, tutamacın konumunu ve düğmenin durumunu okur. $4016.1 Ve $4017.1 ve Amerikan versiyonu $4016.3 Ve $4016.4 sırasıyla. Görünüşe göre Japon Arkanoid için tam teşekküllü bir genişleme bağlantı noktasına ihtiyacınız var ve Amerikalı için hafif silahın çalıştığı herhangi bir züppe yapacak (aynı sonuçları kullanıyor).

    Kendi aksesuarını yarat

    Yukarıdaki cihazların kendileri basit bir devreye sahip olmalarına ve en basit mantık bileşenlerinden monte edilmelerine rağmen, hepsi bir arada cihazın kalbi için bir FPGA kullanmaya karar verdim. Üstelik orada basit bir switch-switch yapmam istendi ama ben A ve B butonlarının yer değiştirmesini mümkün kılmak istedim.Önce Altera'yı seçtim. EPM3064ATC100, ancak kısa süre sonra 64 makro hücrenin benim için yeterli olmadığı anlaşıldı ve seçim bana düştü EPM3128ATC100, zaten 128 makro hücrenin olduğu yer.

    O noktaya gelirse, hiç önemsememeye ve cihaza mevcut modu ve ayarlar menüsünü gösterecek bir tür ekran koymaya karar verdim, ayrıca uzun süre boşta duran 16x2 işaret sentezleyen bir ekranım vardı. . Onunla çalışmak için zaten bir mikrodenetleyiciye ihtiyacınız var ve ben seçtim ATMEGA16.

    Bir cihazın iyi görünmesini sağlamayı her zaman zor bulmuşumdur. Yine de ben bir programcıyım, tasarımcı değil ama cihazı hediye olarak yaparken onu olabildiğince güzel ve kullanışlı hale getirmek istedim. Dahası, başkalarına sanat eserinizi bir şekilde göstermenin neredeyse tek yolu budur: fotoğraflar ve videolar aynı değildir, yalnızca birkaçı bu tür şeyleri hazır şemalara ve 3B modellere göre yeniden yaratır, seri üretimi kurmak zordur, ancak bir hediye bundan ibaret.

    Bu nedenle, görünüm gereksinimleri şuydu: Dandy'den standart DB-15 denetleyicileri için dört bağlantı noktası, bunları seçmek ve yapılandırmak için dört düğme, bir "mod" düğmesi, bir "ayarlar" düğmesi, Arkanoid için uygun bir tutamaç ve bir düğme Yeterince rahat olmalı ve yolunuza çıkmamalıdır. Ek olarak, LED'lerle aydınlatılan ve bir şekilde sezgisel olarak karşılık gelen düğmelerle ilişkilendirilen aktif bağlantı noktaları yapmak istedim, konektörleri arka arkaya düzenlemek en mantıklısı, ancak bu aptal DB-15'ler bunun için çok büyük. Ek olarak, cihaz kendi içinde Arkanoid için bir oyun kumandası olduğu için ellerde rahat olmalıdır. Sonunda, şöyle bir şeyle bitirdim:

    Düğmeler üst üste, portlar üst üste, yanda tutma kolu, sol arkada Arkanoid düğmesi.

    İçeride çok fazla alan olduğu ortaya çıktı. Bu nedenle, FPGA'yı kablolar ve soketler için konektörlerle bir karta, mikrodenetleyiciyi ekran ve düğmelerle diğer karta koymaya karar verdim. En basit seri arayüz ile bağlanırlar.

    FPGA kartı (ilk sürüm):

    İkinci tahta:

    Verilog'da FPGA kodunu yazdım. Her mod için oldukça basit olduğu ortaya çıkıyor. Her şeyden önce, birçoğu için, her bir bağlantı noktasına yapılan aramaları saymamız gerekir, yani. saat telindeki darbeler:

    kayıt sayacı1; kayıt sayacı2; her zaman @ (pozlama strobe_in, pozlama saati1_in) başlarsa (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
    (üzgünüm, habr Verilog'u vurgulayamıyor)

    Nerede flaş_in bir flaştır (her iki bağlantı noktası için bir tane) ve saat1_in Ve saat2_in- bu sırasıyla her bağlantı noktasının saatidir. Konsolun içinde bir mantık vardır: saat = R/W nand (adres == $4016/$4017), yani saat, konsol ilgili adresteki verileri okuduğunda mantıksal bir sıfırdır.

    Dört oyunculu Amerikan ayırıcı simülasyon modu şöyle görünür:
    her zaman @ (*) başla // Strobe doğrudan bağlanır - girişler çıkışlara atanır strobe_out = strobe_in; ata strobe_out = strobe_in; ata strobe_out = strobe_in; ata strobe_out = strobe_in; // Konsolun veriyi kaç kez okuduğuna bağlı olarak her bir gamepad için saati çekin clock_out<= (counter1 <= 8) ? clock1_in: 1; clock_out <= (counter2 <= 8) ? clock2_in: 1; clock_out <= (counter1 >8 && sayaç1<= 16) ? clock1_in: 1; clock_out <= (counter2 >8 && sayaç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

    Dört kişilik Japon ayırıcı modunda, girişleri doğrudan çıkışlara bağlamanız yeterlidir:
    her zaman @ (*) saat çıkışını başlat<= 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

    En zor şey, sırayla okundukları için A ve B düğmelerini değiştirmeyi mümkün kılmaktı, yani. konsol A istediğinde B'nin değerini önceden bilmeniz gerekir, ancak A'dan hemen sonra verilir. İlk başta bir tür harici saat üreteci kullanarak denetleyiciden veri okumayı bir şekilde hızlandırmayı düşündüm, ama sonunda Sadece önceki okumadan değeri almaya karar verdim. Bu bir gecikme sağlar, ancak kesinlikle algılanamaz. Üstelik oyunlar genellikle arka arkaya birkaç kez düğmelerin durumunu okur.

    Elbette tüm bu modların ve ayarların bir şekilde yapılması gerekiyor. Bunun için 12 bitlik bir kayıt tanımladım. kontrol, eşlik için ek bir bit ile seri bağlantı yoluyla yazılan veriler:
    kayıt kontrolü; kayıt kontrol_paritesi; kayıt kontrol_alıcı; regcontrol_counter; her zaman @ (kontrol_strobe pozu, kontrol_saati pozu) başlarsa (kontrol_strobe) başlar control_counter = 0; kontrol_eşliği = 0; biterse başlarsa (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

    Buna göre, mikrodenetleyici tarafından kod (çok kirli) şöyle görünür:
    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 = 0; for (b = 0) B< 11; b++) { if (data & (1<

    Aksi takdirde, mikrodenetleyici kodunda özel bir şey yoktur: HD44780 denetleyicideki ekran, düğmeler, LED'ler, basit bir menü ile çalışmak ve düğmenin dönüş açısını belirlemek için bir analogdan dijitale dönüştürücü ile çalışmak.

    Her şeyin hatalarını ayıkladım, çalıştığından emin oldum ve şimdiden bileşenleri kasaya itmeye başladım ...

    Ancak kapağı kapatmadan önce orijinal Famicom'da kontrol etmeye karar verdim çünkü cihaz onunla birlikte kullanılacak. Ne yazık ki, saat darbelerini saymanın gerekli olduğu modlar düzgün çalışmadı. Bir mantık analizörü yardımıyla, veri hattından saat hattına giden alımlar olduğu ortaya çıktı:

    Bu, her şeyi bozan, yalnızca birkaç on nanosaniyelik bir süreye sahip bir girişimdir. Basit osiloskopumla Dandy'deki saat hattında neler olduğunu görmeye karar verdim:

    Ve işte Famikom'un aynı yerde sahip olduğu şey:

    Dendy için çok güçlü ve orijinal Famikom için çok zayıf olan bu hattın VCC'ye kadar çekildiği görülebilir. Vücut kiti ile deneyler yapmaya başladım. Kısa süre sonra sonuca bir mantık analizcisi ile değil, konsolun kendisiyle bakmanın daha iyi olduğu anlaşıldı. 6502 işlemci için montajcıyı hatırlamam, test için basit bir program yazmam ve kartuşa yazmam gerekiyordu:

    Üzerinde her şey anında net bir şekilde görünür hale geldi ve aynı zamanda oyunu değiştirmeden tüm modları aynı anda test etmek mümkün oldu. ROM indirilebilir