Kartrid Raspberry Pi NES


Halo Ini adalah konsol game retro yang berbasis pada Raspberry Pi. Dalam kartrid dari konsol game NES. Layar terintegrasi dapat digunakan untuk game. Saat mengeluarkan video melalui HDMI, itu menunjukkan gambar sampul game, serta suhu inti, lihat foto. Saya menyarankan sedikit nastalgit dan membaca tentang perakitan dan konfigurasi perangkat semacam itu. Perhatian, lalu banyak lalu lintas dan foto.

Nostalgia


Di masa kecil, kami, yang sekarang berusia lebih dari 25-35 tahun, senang bermain konsol. Lalu tidak ada kata baru untuk konsol, jadi saya akan memanggil mereka begitu. Kenalan saya dengan konsol dimulai dengan Dandy (klon NES). Super Mario Bros, Contra, Ducktales, Battletoads hanyalah beberapa hits saat itu. Kemudian seluruh halaman akan bermain dengan teman saya Sega (Sega Mega Drive), dalam hits seperti Sonic, Ultimate Mortal Combat 3, Contra Hard Corps dan banyak lagi . Dan ketika Play Station keluar, saya harus mengatakan, itu tidak mencapai kita segera, seri Resident Evil menyebabkan kegembiraan yang benar-benar menakutkan.


Gambar ini membantu saya menyapu air mata nostalgia. Saya harus mengatakan, saya bukan orang pertama yang membuat Raspberry Pi dalam kartrid NES. Ya, ini bukan perangkat saya. Dan kartrid ini hampir ideal untuk keperluan ini, kecil dan indah. Dan di dalam ada banyak ruang. Nilailah sendiri.


Di dalam Raspberry Pi Zero, hub USB, dan sepasang kabel ekstensi. Semua tongkat diatur pada lem panas meleleh.

Majelis


Saya ingin mengumpulkan sesuatu yang sama atau serupa. Kartrid yang sama dari NES dipilih. Pilihan lain sangat kecil atau tidak terlihat sangat bagus. Raspberry Pi 3B adalah jantung mobil retro yang berapi-api. Konektor USB dengan pin solder yang nyaman juga dibeli di Ali. Itu saja.


Oh ya, Anda akan mengulangi proyek ini, jangan mengambil kartrid hit. Jumlah mereka sangat sedikit. Ambil sesuatu yang lebih umum atau kurang dikenal. Ada juga opsi untuk mengambil cartridge dengan Ali, tetapi yang asli, itu menghangatkan jiwa. Rilis tahun 1986 saya.

Anda juga akan memerlukan obeng nes khusus jika kartrij terpasang pada tiga sekrup. Ada juga opsi kartrid awal dengan lima sekrup, mereka dibuka dengan obeng pipih biasa. Saya hanya punya satu.

Semua bagian yang mengganggu dipotong dan digergaji dari kartrid dengan pisau kantor dan pisau gergaji besi.


Konektor yang menonjol disolder ke Raspberry Pi. Para ahli mengatakan bahwa Anda dapat melakukannya tanpa stasiun solder, jika Anda terlebih dahulu membongkar konektor dengan hati-hati dengan pemotong kawat, dan kemudian menyolder satu kaki pada satu waktu. Semua direkatkan ke panas meleleh. Antara konektor USB dan raspberry meletakkan insulator yang terbuat dari plastik yang tidak dapat dikonsumsi. Jangan lupa untuk menghubungkan GND Raspberry Pi dan badan konektor USB (tidak ditunjukkan pada gambar di atas). Jika tidak, beberapa joystick tidak akan berfungsi.


Retropie terakhir dipasang di raspberry . Pada awalnya ada Recalbox , tapi saya menolaknya, karena itu tidak mendukung getaran joystick di Playstation 1. Tetapi saya harus mengatakan, Recalbox sedikit lebih nyaman dalam hal apa yang berhasil di luar kotak dan Anda tidak perlu mengkonfigurasi apa pun. Di Retropie banyak pengaturan, Anda dapat menyesuaikan tanpa henti. Inilah yang saya sukai.
Inilah yang terjadi. Semua joystick dengan xinput terhubung.



Layar


Nafsu makan datang dengan makan. Bagaimana dengan menempelkan layar ke dalam kartrid? Untuk memainkan atau menampilkan gambar sampul game. Layar seperti itu dipesan. Ini adalah layar DPI paralel 800 * 480 3,5 inci yang menggunakan hampir semua GPIO Raspberry Pi. Ini berfungsi untuk saya dalam mode 120 Hz (tetapi rendernya masih pada 60 Hz), responsnya instan. Satu-satunya negatif adalah matriks 6-bit. Hanya 262.144 warna. Meskipun, secara umum, ini tidak terlalu terlihat, menilai sendiri.

Cuplikan layar dari game Comix Zone (Dapat Diklik)

Semua kaki dari layar dan Raspberry Pi disolder. Layar disolder oleh dua kabel dari kabel IDE tua yang compang-camping. 5mm hipotek dipasang di bawah layar, tidak menyentuh dinding bagian bawah kartrid. Pita isolasi dilekatkan di sekeliling tampilan sehingga tidak ada sisi yang berkedip. Semuanya direkatkan ke lem panas. Di penutup atas, saya memotong jendela dan menempelkan kaca setebal 2 mm.


Untuk mulai menampilkan gambar pada layar ini, Anda perlu memperbaiki konfigurasi /boot/config.txt . Saya merekomendasikan WinSCP untuk pemilik Windows, yang, saat menghubungkan ke Raspberry Pi melalui SSH, memberikan presentasi file seperti dalam Total commander. Sangat nyaman Terutama jika Anda menjalankannya dalam mode shell sudo su - , yang memberikan akses ke semua file.

Sayangnya, ketika layar DPI dihidupkan, output video HDMI tidak berfungsi. Oleh karena itu, saya membuat dua file config di folder / boot / , satu config_hdmi.txt , dan config_dpi.txt kedua. Konfigurasi config_hdmi.txt mengatur resolusi ke 1080p60Hz dan menghapus overscan. config_dpi.txt berisi pengaturan DPI layar.

config_dpi.txt
# uncomment if you get no picture on HDMI for a default "safe" mode #hdmi_safe=1 disable_overscan=1 # uncomment to force a specific HDMI mode (this will force VGA) #hdmi_group=1 #hdmi_mode=1 # Sound output. Set to 0 or comment for autodetect, 1 for DVI, 2 to force HDMI. #hdmi_drive=2 # Using /etc/modules is deprecated and no longer supported on 4.4 kernel # So manually enable audio dtparam=audio=on config_hdmi_boost=0 # force hdmi while the tv can take time before sending the signal on the hdmi output hdmi_force_hotplug=1 # uncomment for composite PAL #sdtv_mode=2 # uncomment for lirc-rpi #dtoverlay=lirc-rpi #3.5 HD tft screen 800x480 dtoverlay=dpi24 overscan_left=0 overscan_right=0 overscan_top=0 overscan_bottom=0 #Banggood framebuffer_width=800 framebuffer_height=480 dtparam=spi=off dtparam=i2c_arm=off enable_dpi_lcd=1 display_default_lcd=1 dpi_output_format=0x6f015 dpi_group=2 dpi_mode=87 hdmi_timings=480 0 16 16 24 800 0 4 2 2 0 0 0 120 0 46080000 6 display_rotate=3 # if you plug your tv at the same time as your rpi and that the rpi switches from the hdmi or give a low resolution because tv had no enough time to initialize it boot_delay=3 # uncomment if you don't want the rainbow at startup #disable_splash=1 # default CEC name #cec_osd_name=recalbox dtparam=spi=off # Overclock gpu_mem_256=128 gpu_mem_512=256 gpu_mem_1024=256 overscan_scale=1 gpu_mem=256 start_x=0 enable_uart=0 avoid_safe_mode=1 kernel=zImage 

config_hdmi.txt
 # For more options and information see # http://rpf.io/configtxt # Some settings may impact device functionality. See link above for details # uncomment if you get no picture on HDMI for a default "safe" mode #hdmi_safe=1 # uncomment this if your display has a black border of unused pixels visible # and your display can output without overscan disable_overscan=1 # uncomment the following to adjust overscan. Use positive numbers if console # goes off screen, and negative if there is too much border #overscan_left=16 #overscan_right=16 #overscan_top=16 #overscan_bottom=16 # uncomment to force a console size. By default it will be display's size minus # overscan. #framebuffer_width=1280 #framebuffer_height=720 # uncomment if hdmi display is not detected and composite is being output hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=1 #1080p60fps hdmi_mode=16 # uncomment to force a HDMI mode rather than DVI. This can make audio work in # DMT (computer monitor) modes #hdmi_drive=2 # uncomment to increase signal to HDMI, if you have interference, blanking, or # no display #config_hdmi_boost=4 # uncomment for composite PAL #sdtv_mode=2 #uncomment to overclock the arm. 700 MHz is the default. #arm_freq=800 # Uncomment some or all of these to enable the optional hardware interfaces #dtparam=i2c_arm=on #dtparam=i2s=on dtparam=spi=off # Uncomment this to enable the lirc-rpi module #dtoverlay=lirc-rpi # Additional overlays and parameters are documented /boot/overlays/README # Enable audio (loads snd_bcm2835) dtparam=audio=on gpu_mem_256=128 gpu_mem_512=256 gpu_mem_1024=256 overscan_scale=1 gpu_mem=256 start_x=0 enable_uart=0 


Ganti konfigurasi akan menjadi naskah otomatis kami yang tersedia di jaringan
\\ 192.168.x.xxx \ configs \ all \ autostart.sh atau dalam folder di perangkat /opt/retropie/configs/all/autostart.sh

autostart.sh
 # Check to see if display is not connected _NOHDMI=$(tvservice -n ) || true # Check to make sure it's not already in LCD mode _ISLCD=$(tvservice -s | grep "LCD") || true # HDMI is connected - turn off backlight LCD _HDMI=$(tvservice -s | grep "0x12000a") || true if [ -z "$_NOHDMI" ]; then if [ "$_ISLCD" ]; then printf "NO HDMI connected, LCD DPI display config already active\n" #do nothing else printf "NO HDMI connected, Switching to LCD DPI display\n" #change config to Hyperpixel and reboot since no display detected sudo cp /boot/config_dpi.txt /boot/config.txt sudo reboot now fi elif [ "$_NOHDMI" ]; then if [ "$_ISLCD" ]; then printf "HDMI is connected, but LCD DPI config is being used\n" #we need to switch to HDMI display config and reboot sudo cp /boot/config_hdmi.txt /boot/config.txt sudo reboot now elif [ "$_HDMI" ]; then printf "HDMI is connected, HDMI config detected, so turning off LCD BL\n" #we need to shut off the backlight on the Hyperpixel display since we aren't using it #don't panic, a reboot automatically resets this - it isn't a persistent value #also to do this the config.txt file needs to load the backlight module on startup #to control it even if you aren't loading the overlay driver for the display # this comment #echo 1 | sudo tee /sys/class/backlight/rpi_backlight/bl_power else #debugging catchall - shouldn't happen since we expect 0x12000a - but you never know... printf "HDMI is connected, HDMI config detected, your tv might not like 1920x1080 resolution\n" fi else #do nothing - based on previous if statements - you either have HDMI or you don't have it... printf "Debug catchall point - sorry I can't help you out - I haven't run into the error state yet!\n" fi emulationstation #auto 


Script switchscreen.sh juga ditulis, yang harus diletakkan di / home / pi / RetroPie / retropiemenu / . Script ini secara manual beralih konfigurasi dan dapat diakses dari menu pengaturan Retropie utama. Setelah memulainya, Anda perlu mencabut kabel HDMI, jika tidak setelah reboot semua akan kembali secara otomatis. Jangan lupa mendaftarkan skrip

 chmod +x /home/pi/RetroPie/retropiemenu/switchscreen.sh 

switchscreen.sh
 #!/bin/bash # Check to see if display is dpi _DPI=$(grep dpi /boot/config.txt) || true if [ "$_DPI" ]; then printf "Switch to HDMI\n" sudo cp /boot/config_hdmi.txt /boot/config.txt sudo reboot now else printf "Switch to DPI LCD\n" sudo cp /boot/config_dpi.txt /boot/config.txt sudo reboot now fi exit 0 


Autostart.sh menunjukkan jejak kode yang menonaktifkan DPI layar ketika HDMI dihidupkan. Saya menyalin skrip ini di Internet, sehingga tidak berfungsi di layar kami. Kita mungkin bingung dengan transistor untuk mematikan kekuatan layar, tetapi mengapa, jika kita perlu menampilkan gambar sampul dari game yang sedang berjalan. Anda hanya perlu mencari tahu apa itu DPI.

Parallel Display Interface (DPI)


DPI, seperti yang telah dikatakan, adalah antarmuka paralel untuk layar. Informasi tentang antarmuka ini satu kali , dua kali dan salah perhitungan . Nah, sekarang akan ada di sini, dalam bahasa Rusia.

Semua upaya untuk mengaktifkan DPI dengan perintah konsol selama operasi HDMI gagal. Mungkin dia melakukan sesuatu yang salah. Plan B diadopsi untuk implementasi: menampilkan gambar pada layar kecil, menarik kaki GPIO secara terprogram.

DPI dicirikan oleh fakta bahwa satu piksel ditransmisikan ke tampilan per siklus clock dari sinyal clock. Karena kita memiliki matriks 6-bit, ini adalah 18 pin untuk tiga warna, dan ada juga tampilan yang diaktifkan (menunjukkan tanggal yang valid), h_sync (setel alamat garis horizontal ke nol pada pengontrol tampilan), v_sync (atur alamat garis vertikal ke nol pada pengontrol layar) ) Gertakan data terjadi pada tepi jatuh sinyal jam. Ini diketahui jika kita mendekripsi baris "dpi_output_format = 0x6f015" dari config_dpi.txt kami sesuai dengan terminologi ini.

dpi_output_format
 output_format = (dpi_output_format >> 0) & 0xf; rgb_order = (dpi_output_format >> 4) & 0xf; output_enable_mode = (dpi_output_format >> 8) & 0x1; invert_pixel_clock = (dpi_output_format >> 9) & 0x1; hsync_disable = (dpi_output_format >> 12) & 0x1; vsync_disable = (dpi_output_format >> 13) & 0x1; output_enable_disable = (dpi_output_format >> 14) & 0x1; hsync_polarity = (dpi_output_format >> 16) & 0x1; vsync_polarity = (dpi_output_format >> 17) & 0x1; output_enable_polarity = (dpi_output_format >> 18) & 0x1; hsync_phase = (dpi_output_format >> 20) & 0x1; vsync_phase = (dpi_output_format >> 21) & 0x1; output_enable_phase = (dpi_output_format >> 22) & 0x1; output_format: 1: DPI_OUTPUT_FORMAT_9BIT_666 2: DPI_OUTPUT_FORMAT_16BIT_565_CFG1 3: DPI_OUTPUT_FORMAT_16BIT_565_CFG2 4: DPI_OUTPUT_FORMAT_16BIT_565_CFG3 5: DPI_OUTPUT_FORMAT_18BIT_666_CFG1 6: DPI_OUTPUT_FORMAT_18BIT_666_CFG2 7: DPI_OUTPUT_FORMAT_24BIT_888 rgb_order: 1: DPI_RGB_ORDER_RGB 2: DPI_RGB_ORDER_BGR 3: DPI_RGB_ORDER_GRB 4: DPI_RGB_ORDER_BRG output_enable_mode: 0: DPI_OUTPUT_ENABLE_MODE_DATA_VALID 1: DPI_OUTPUT_ENABLE_MODE_COMBINED_SYNCS invert_pixel_clock: 0: RGB Data changes on rising edge and is stable at falling edge 1: RGB Data changes on falling edge and is stable at rising edge. hsync/vsync/output_enable_polarity: 0: default for HDMI mode 1: inverted hsync/vsync/oe phases: 0: DPI_PHASE_POSEDGE 1: DPI_PHASE_NEGEDGE 




Urutan bit ditunjukkan pada gambar di atas. Untuk setiap baris yang dimulai dengan VSYNC, ada siklus penuh langkah-langkah dari garis HSYNC. Ini adalah satu bingkai. Teras Belakang dan Depan adalah inden tampilan yang ada dalam memori pengontrol, tetapi tidak ada di layar.

Sekarang decode baris "hdmi_timings = 480 0 16 16 24 800 0 4 2 2 0 0 120 0 46080000 6" dari config_dpi.txt kami. Tidak ada yang rumit di sini, cukup tulis parameternya secara berurutan.


Kaki GPIO mana yang digunakan untuk rendering warna ditunjukkan pada gambar ini. Kami memiliki Mode 5. Perhatian, ini bukan urutan, yaitu notasi GPIO! Sinyal lain Jam - GPIO 0, DE - GPIO 1, VSYNC - GPIO 2, HSYNC - GPIO 3.


Python dipasang dengan cepat, perpustakaan GPIO yang diperlukan, dan skrip halo ditulis, setidaknya mewarnai layar dengan warna biru. Dan saya juga memiliki disonansi kognitif ketika Notepad ++ pada Windows tidak menunjukkan lekukan di mana mereka berada di nano, saat melakukan jeda baris saya melakukan tab, bukan spasi. By the way, VSCode berdosa dengan cara yang sama, cara memperbaikinya, tidak menemukannya.

Skrip python
 from gpiozero import LED from time import sleep sleep_time = 0.0 clock = LED(0) de = LED(1) vsync = LED(2) hsync = LED(3) red2 = LED(16) red3 = LED(17) red4 = LED(18) red5 = LED(19) red6 = LED(20) red7 = LED(21) green2 = LED(10) green3 = LED(11) green4 = LED(12) green5 = LED(13) green6 = LED(14) green7 = LED(15) blue2 = LED(4) blue3 = LED(5) blue4 = LED(6) blue5 = LED(7) blue6 = LED(8) blue7 = LED(9) def v_sync(frame): vsync.on() for n in range(frame): clock.on() #sleep(sleep_time) clock.off() #sleep(sleep_time) #print("vsync") vsync.off() pass def h_sync(frame): hsync.on() for n in range(frame): clock.on() #sleep(sleep_time) clock.off() #sleep(sleep_time) #print("hsync") hsync.off() pass def clc(frame): for n in range(frame): clock.on() #sleep(sleep_time) clock.off() #sleep(sleep_time) pass red2.off() red3.off() red4.off() red5.off() red6.off() red7.off() green2.off() green3.off() green4.off() green5.off() green6.off() green7.off() blue2.on() blue3.on() blue4.on() blue5.on() blue6.on() blue7.on() clock.off() de.off() #de.on() sleep(sleep_time) v_sync(2) clc(2) for row in range(5): v_sync(2) # v_back_porch(2) clc(2) for column in range(800): h_sync(16) # h_back_porch(16) clc(16) # LCD column de.on() clc(480) de.off() # h_front_porch(24) clc(24) # v_front_porch(4) clc(4) de.off() red2.off() red3.off() red4.off() red5.off() red6.off() red7.off() green2.off() green3.off() green4.off() green5.off() green6.off() green7.off() blue2.off() blue3.off() blue4.off() blue5.off() blue6.off() blue7.off() 




Terlalu lambat, Python. Merupakan kejutan bagi saya bahwa piksel yang sudah dirender menghilang. Meskipun apa yang kuharapkan sudah jelas.

Diputuskan untuk menulis ulang semuanya dalam C. Ia bekerja lebih cepat, sekitar beberapa frame per detik. Layar beriak seperti pada monitor CRT lama atau radar. Apa yang kamu butuhkan Retro! Kode diposting di GitHub .


GPIO diakses langsung melalui register SoC BCM2837. Saya mengambil contoh kode di sini .

Semuanya dimulai dengan program yang sangat kecil, tetapi sekarang prosesor dan memori memuat dalam bentuk scroll bar kecil juga ditampilkan. Suhu prosesor digambar sedemikian rupa.


Untuk menjalankan kode, Anda perlu menyalin isi repositori ke folder / home / pi / lcd_screen / (Siapa yang tahu cara menulis path relatif ke biner dan bukan folder yang berfungsi di C di bawah nix? Oleh karena itu, sejauh ini hanya ke folder ini) dan jalankan perintah berikut.

 gcc ./lcd_screen/lcd.c -o ./lcd_screen/lcd chmod +x ./lcd_screen/lcd 

Atau segera unduh biner dari rilis. Untuk memulai, Anda perlu mengetik berikut ini. SUDO diperlukan untuk mengakses GPIO.

 sudo ./lcd_screen/lcd path/file.bmp usec_per_frame 

Di mana "path / file.bmp" adalah path ke file gambar, itu hanya bekerja dengan format BMP, "usec_per_frame" adalah penundaan antara frame dalam mikrodetik, sehingga tidak memuat prosesor dengan sia-sia.

Kami mengotomatiskan peluncuran program lcd kami sehingga menampilkan sampul yang diinginkan saat game berjalan. Tentu saja, Retropie menggunakan pengikis bawaan untuk memuat penutup.
Pasang konverter gambar. Ini akan mengubah semua format menjadi bmp yang didukung oleh program. Pada saat yang sama, dan mengubah ukuran, sehingga gambar layar penuh.

 sudo apt-get install imagemagick 

Dalam direktori / opt / retropie / configs / all / , buat dua file: runcommand-onstart.sh dan runcommand-onend.sh . Retropie secara otomatis menjalankan skrip ini saat memuat / mengakhiri game apa pun. Ingatlah untuk menetapkan chmod + x untuk setiap file.

runcommand-onstart.sh
 #!/bin/sh system="$1" emulator="$2" romname="$3" #with path #echo $system # LCD programm here: #find current config: dpi or hdmi _DPI=$(grep dpi /boot/config.txt) || true if ! [ "$_DPI" ]; #if hdmi then sudo killall lcd # remove path filename=$(basename "$romname") # remove extension filename="${filename%.*}" # add image path file_png="/home/pi/.emulationstation/downloaded_images/$system/$filename-image.png" file_jpg="/home/pi/.emulationstation/downloaded_images/$system/$filename-image.jpg" #if system snes and n64 then rotate image 270 degree if [ "$system" = "snes" ] || [ "$system" = "n64" ] then if test -f "$file_png"; #fing file then convert "$file_png" -resize '800x480' -type TrueColor -alpha Remove -rotate 270 /home/pi/lcd_screen/work.bmp elif test -f "$file_jpg"; then convert "$file_jpg" -resize '800x480' -type TrueColor -alpha Remove -rotate 270 /home/pi/lcd_screen/work.bmp else convert "/opt/retropie/configs/$system/launching.png" -resize '480x800' -type TrueColor -alpha Remove -rotate 180 /home/pi/lcd_screen/work.bmp fi else if test -f "$file_png"; then convert "$file_png" -resize '480x800' -type TrueColor -alpha Remove -rotate 180 /home/pi/lcd_screen/work.bmp elif test -f "$file_jpg"; then convert "$file_jpg" -resize '480x800' -type TrueColor -alpha Remove -rotate 180 /home/pi/lcd_screen/work.bmp else convert "/opt/retropie/configs/$system/launching.png" -resize '480x800' -type TrueColor -alpha Remove -rotate 180 /home/pi/lcd_screen/work.bmp fi fi #launch my lcd project sudo /home/pi/lcd_screen/lcd /home/pi/lcd_screen/work.bmp 400000 & fi 

runcommand-onend.sh
 #!/bin/sh _DPI=$(sudo grep dpi /boot/config.txt) || true if ! [ "$_DPI" ]; then sudo killall lcd sudo /home/pi/lcd_screen/lcd /home/pi/lcd_screen/retropie.bmp 50000 & # cp /home/pi/lcd_screen/retropie.bmp /home/pi/lcd_screen/work.bmp fi 


Dalam skrip awal, keberadaan koneksi DPI pertama kali diperiksa, kemudian gambar dengan format jpeg atau png dicari, diputar ke sudut yang diinginkan, ukurannya diubah dan dikonversi ke format bmp, kemudian program saya mulai dengan parameter yang diperlukan.

Pendinginan


Raspberry Pi 3B lebih kuat daripada Zero, dan membutuhkan pendinginan yang baik. Terutama dalam kasus tertutup. Dengan heatsink kecil terlihat di foto, setelah setengah jam bermain pada emulator apa pun, suhu inti mencapai 80 derajat dan mulai berlari.


Sebuah kipas sentrifugal 40 * 30 * 10 mm dipesan, tetapi sampai tiba, saya hanya mencoba memotong piring kecil berukuran 80 * 30 mm dari aluminium 3 mm. Pada saat itu, saya telah melepas semua pin GPIO, sehingga tidak lagi mengganggu pemasangan plat. Selain itu, saya juga memotong sepotong 20 * 10mm untuk kontak dengan chip dan membuat sandwich dari piring. Ini melebihi semua harapan saya, dengan maksimum 65 derajat pada intinya.


Jadi itu terlihat di dalam.



Pada akhirnya apa


Bagaimana ini dimainkan? Hebat! Dengan teriakan, mengalahkan gamepad, saling mencela. Seperti sekali saja.

Tidak ada penundaan atau keterlambatan yang terlihat.

Layarnya, tentu saja, kecil, hanya tiga setengah inci. Smartphone lima inci memanjakan kami, tetapi Anda bisa bermain. Teksnya dapat dibaca, bahkan kecil. Saya lebih suka HDMI.

Anda dapat datang ke teman, bermain, memungkinkan portabilitas. Aksesori terkait: kabel, kabel, joystick, pengisian daya memakan lebih banyak ruang daripada konsol itu sendiri.

Suara


Sayangnya, suara standar Raspberry Pi meninggalkan banyak yang harus diinginkan. Modulasi PWM dengan penyaringan pasif digunakan sebagai sistem suara. Oleh karena itu, DAC USB dibeli pada PCM2704. Terutama karena ukurannya.

Benar-benar tidak ada output suara yang cukup ketika bermain pada layar LCD kecil, jadi saya juga membeli penguat mikro 3W pada NS8002 dan mengambil speaker dari tablet 8 Ohm.

USB DAC dan NS8002



Semua ini pas di bawah layar LCD. Akan datang, saya akan menempatkan.

Retropie File


Majelis selesai. Berikut ini adalah beberapa pengaturan Retropie yang kurang menarik untuk hiburan membaca.

Shader
Sebagian besar konsol yang mampu meniru Raspberry Pi, memberikan resolusi 320x240 piksel. Menurut standar saat ini, ini sangat kecil. Semua game memperoleh pixelation yang diucapkan di layar modern.


Pembuat Retroarch, yang merupakan bagian dari Retropie, mengurus masalah ini dan menambahkan dukungan untuk shader. Sebagai contoh, saya sangat suka xbr-lv1-noblend.glslp yang sudah diinstal sebelumnya. Dia benar-benar menarik detail dari gambar. Lihat di bawah.

Tangkapan layar dari game Castlevania: Symphony of the Night, saya menyarankan Anda untuk memainkannya

Untuk menginstal shader, buka menu Retropie -> Editor konfigurasi . Pilih Konfigurasi opsi emulator libretro dasar , lalu pilih Konfigurasi opsi default untuk semua emulator libretro . Kemudian atur Video Shader Enable menjadi "true" dan File Video Shader ke shader yang diinginkan. Atur Video Smoth ke "false" juga, karena itu hanya mengotori gambar. Anda bahkan dapat memilih sesuatu seperti shader garis pemindaian yang memancarkan karya televisi CRT. Tapi ini bukan untuk semua orang.


Rendering shaders adalah operasi yang agak mahal. Dengan resolusi yang sama dengan dan lebih tinggi dari 720p, kemacetan yang cukup mencolok muncul di RPi 3B. Oleh karena itu, dalam menu yang sama, pilih Resolusi render "800x600". Jangan khawatir, jika Anda membuat perubahan pada file / boot / config.txt sebelumnya , seperti dalam artikel ini sedikit lebih tinggi, resolusi layar pada kabel HDMI akan 1080p, tetapi emulator akan membuat gambar pada 800x600 dan meregangkannya ke layar penuh. Dan dia melakukannya dengan tidak buruk. Setidaknya dengan shader lebih baik daripada tanpa shader, dan render dalam 1080p tidak berguna, karena data video dari gim ini masih diambil dengan resolusi 320x240.

Pengaturan Joystick
Jika Anda memiliki xinput gamepad (standar Micro $ oft), itu akan berhasil. Ini dikonfigurasi pada awal pertama Retropie, atau melalui tombol mulai - Mengkonfigurasi Input. Tapi ada sakit kepala. Orang-orang luar negeri yang licik, agar tidak jatuh ke tuntutan hukum paten, bertukar tombol dengan A dan B, X dan Y.


Jika Anda memiliki gamepad dari xbox atau sejenisnya, maka Anda perlu mengkonfigurasinya dengan tombol terbalik, seperti pada NES. Kemudian pergi ke Retropie -> Retropie Setup , pilih Configuration / tools , kemudian emulationstation , masukkan "Swapped" di Swap A / B Buttons di ES . Kemudian konfigurasikan ulang joystick.

Juga, saya tidak suka bagaimana pengembang Retropie mengelola dana tombol. Di mana kombinasi tombol untuk mengambil tangkapan layar? Mengapa saya perlu tombol reset jika saya menekannya setiap waktu? Di mana tombol akselerasi mundur dan waktu?

Untuk memperbaiki ini, Anda perlu mengedit file dengan nama joystick Anda di / opt / retropie / configs / all / retroarch-joypads / . Ini juga tersedia di \\ 192.168.x.xxx \ configs \ all \ retroarch-joypads \ network. Setelah setiap pembaruan Retropie melalui updater, penomoran lalat yang mengikat, jadi saya tidak akan mengunggah seluruh konfigurasi. Saya akan menulis bahwa saya hanya mengubah tombol-tombol ini. Mereka dieksekusi ketika ditekan bersamaan dengan Hotkey, biasanya tombol dengan logo di tengah joystick.

Konfigurasi tombol
 input_screenshot_btn = "0" input_rewind_btn = "h0left" input_hold_fast_forward_btn = "h0right" input_state_slot_increase_btn = "h0up" input_state_slot_decrease_btn = "h0down" 


Di sini tombol tangkapan layar diberikan alih-alih diatur ulang. Fast forvard dan rewind (mundur) dikonfigurasi pada tombol silang: maju dan mundur. Tombol silang naik dan turun mengubah slot penyimpanan.

Rewind harus diaktifkan di konfigurasi /opt/retropie/configs/all/retroarch.cfg . Hanya saja, jangan aktifkan Rewind pada emulator psx, semuanya mulai melambat liar. Rewind dinonaktifkan secara default di konfigurasi psx.

Saya juga ingin menambahkan tentang Bluetooth. Saya sendiri tidak suka joystick nirkabel dan selalu bermain dengan kabel. Sekolah lama Untuk pecinta joystick nirkabel, Anda perlu membeli dongle Bluetooth dan memasukkannya ke port USB. Akan lebih baik dan tidak akan ada masalah. Saya sendiri tidak memeriksa, tetapi orang-orang yang berpengetahuan menulis.

Xboxdrv


Tapi itu belum semuanya. Di Retropie Setup di manajer paket, Anda dapat meletakkan berbagai port, misalnya, Openttd, Doom, atau bahkan emulator DOS Dosbox. Tetapi mengendalikan joystick di dalamnya tidak akan berhasil. Hanya keyboard dan mouse. Untuk memperbaiki ini, Anda perlu menginstal driver xboxdrv di manajer paket, yang dapat meniru penekanan tombol. Masukkan saja dari sumbernya, tidak perlu melakukan autorun, tidak cocok untuk semua joystick.

Kami akan menulis skrip peluncuran untuk gamepad kami. Tambahkan baris berikut di akhir file di /opt/retropie/configs/all/runcommand-onstart.sh .

runcommand-onstart.sh
 # xboxdrv sudo killall > /dev/null 2>&1 xboxdrv if [ "$1" = "pc" ] || [ "$1" = "openttd" ] || [ "$1" = "doom" ] || [ "$1" = "kodi" ]; then sudo /opt/retropie/supplementary/xboxdrv/bin/xboxdrv > /dev/shm/runcommand.log 2>&1 \ --evdev /dev/input/event0 \ --silent \ --detach-kernel-driver \ --force-feedback \ --mimic-xpad \ --trigger-as-button \ --evdev-no-grab \ --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RX=x2,ABS_RY=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \ --evdev-keymap KEY_#304=a,KEY_#305=b,KEY_#307=x,KEY_#308=y,KEY_#312=lt,KEY_#313=rt,KEY_#310=lb,KEY_#311=rb,KEY_#317=tl,KEY_#318=tr,KEY_#314=back,KEY_#315=start,KEY_#316=guide \ --axismap -Y1^deadzone:3000=Y1,-Y2^deadzone:3000=Y2 \ --ui-axismap x2^deadzone:3000=KEY_LEFT:KEY_RIGHT,y2=KEY_UP:KEY_DOWN \ --ui-axismap x1^deadzone:3000=REL_X:06,y1=REL_Y:06 \ --ui-axismap dpad_x^deadzone:0=KEY_LEFT:KEY_RIGHT,dpad_y^deadzone:0=KEY_UP:KEY_DOWN \ --ui-buttonmap rt=BTN_LEFT,lt=BTN_RIGHT,start=KEY_ENTER,back=KEY_ESC,tl=KEY_4,tr=KEY_5,lb=KEY_2,rb=KEY_3,a=KEY_SPACE,b=KEY_M,x=KEY_3,y=KEY_LEFTCTRL,guide=KEY_Y \ & fi 


Di sini $ 1 adalah sistem target kami di mana xboxdrv dimulai. Anda dapat menambahkan dengan analogi. Baris --evdev-absmap --evdev-keymap bertanggung jawab untuk mengikat sumbu dan tombol ke joystick Anda. Skrip di atas diberikan untuk pengontrol Xbox One S. Untuk mengetahui sumbu dan tombol mana yang sesuai dengan nomor atau nama joystick Anda, Anda perlu mengetikkan perintah evtest di konsol. Pada saat yang sama, Anda dapat melihat acara mana yang sesuai dengan joystick kami. Saya punya / dev / input / event0 ini yang ada di parameter --evdev.

Opsi --ui-axismap mengemulasi sumbu mouse, dan tombol keyboard --ui-buttonmap. Dalam contoh ini, pemicunya adalah tombol mouse, tongkat kiri adalah mouse, tongkat kanan adalah tombol kursor. Mulai, pilih - masuk dan kirim, masing-masing. Digit keypad terpasang ke tombol yang tersisa. Sayangnya, tidak mungkin menggunakan tanda silang di bawah tombol keyboard. Untuk beberapa alasan, joystick Xbox One S menolak untuk bekerja.

Strategi seperti Theme Hospital, OpenTTD, dll dimainkan dengan konfigurasi seperti itu. Sedikit lebih buruk dimainkan dalam penembak, tetapi Anda dapat membuat skrip startup yang sama untuk penembak dalam file yang sama dengan mengubah parameter $ 1 di sana.

Untuk memastikan operasi normal joystick di emulationstation, Anda perlu menyelesaikan xboxdrv setelah keluar dari gim. Untuk melakukan ini, tambahkan berikut ini di akhir file /opt/retropie/configs/all/runcommand-onend.sh .

runcommand-onend.sh
 sudo killall > /dev/null 2>&1 xboxdrv 



Jika terjadi kesalahan saat memperbarui Retropie
Suatu kali, saya meluncurkan pembaruan Retropie dan ketika membongkar kernel, Wi-Fi bawaan jatuh. Perangkat mem-boot, tetapi tidak menanggapi tombol apa pun, termasuk keyboard yang terhubung. Tidak ada SSH, karena tidak ada Wi-Fi, itu tidak menanggapi keyboard, dan Anda tidak bisa mendapatkan kartu SD ...

Saya perhatikan bahwa keyboard berfungsi saat boot. Saya menekan ctrl + c berkali-kali dan, oh, konsolnya! Tetapi bagaimana cara mengembalikan Wi-Fi sekarang? Antarmuka wlan0 tidak ada sama sekali. Menjalankan updater tidak membantu, karena menarik file dari Internet.

Hal pertama di /opt/retropie/configs/all/autostart.sh mengomentari peluncuran emulationstation dan reboot. , . , wlan . . .

 sudo dpkg --configure -a 


Agar Retropie tidak terlihat seperti stasiun Linux
Linux. .

Linux
Linux, /boot/cmdline.txt . .

cmdline.txt
 dwc_otg.lpm_enable=0 console=tty3 root=PARTUUID=f2d3cb4f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait loglevel=3 consoleblank=0 plymouth.enable=0 quiet vt.global_cursor_default=0 plymouth.enable=0 plymouth.ignore-serial-consoles splash 


, , , .
motd.

 nano /etc/motd 

.

 sudo nano /etc/systemd/system/autologin@.service 



 ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM 



 ExecStart=-/sbin/agetty --skip-login --noclear --noissue --login-options "-f pi" %I $TERM 

.

, — splashscreen. , . \\192.168.x.xxx\splashscreens, Retropie -> SPLASH SCREEN -> Append Splashscreen to list .

, , .


Retropie runcommand, . .


, , .

Apa lagi yang bisa dilakukan


Anda dapat meningkatkan tanpa henti. Saya akan memberi Anda beberapa tautan yang dapat dilakukan. Tulis lebih banyak hal menarik yang bisa Anda tambahkan. Terima kasih atas perhatian anda


Dia layak.

Source: https://habr.com/ru/post/id422005/


All Articles