Bartop multiemulador 2 jugadors

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Configuració botons

Per configurar 2 jugadors i tots els emuladors, necessito 24 botons:

  • joystick*2 = 8 botons
  • 6 botons bàsics*2 = 12 botons. Més aviat serien 6 botons per a P1 i 4 botons per a P2.
  • player 1 select
  • player 2 select
  • coin
  • ESC

Total 24 botons. Amb els pins GPIO bàsics no en tinc prou. Tinc dues solucions.

1) utilitzar un I-PAC. És una solució zero-time delay. Es connecta el I-PAC per USB, i els emuladors el reconeixen com un game-pad. Per ex:

2) continuar utilitzar pikeyd, però expandint el número de pins amb un MCP23017. El dimoni pikeyd ja ho té previst. És un dimoni que en teoria introdueix un petit delay en l'escombrat, però en teoria no s'hauria de notar.

NOTA: un nou projecte similar al pikeyd que demostra que puc utilitzar fins a 24 botons amb la RPi B+. https://github.com/digitalLumberjack/mk_arcade_joystick_rpi

3) Mirant bé la configuració del pinout de la RPi B+, és possible utilitzar 24 pins GPIO. Si no utilitzem els pins GPIO2 i 3 del I2C, i utilitzant els pins GPIO14 i 15 de Tx-Rx, de fet tenim 24 pins. Però seria qüestió de fer la prova i anar un per un.

Per utilitzar els pins GPIO que fan referència a Tx i Rx:

By default the Pi uses the last 2 GPIOs as a serial output - when using it for other stuff you should turn off what the Pi/Linux is using it for. So edit the bits out of /boot/cmdline.txt and edit the line out of /etc/inittab that refers to /dev/ttyAMA0. Otherwise it's conceviable that the Pi will write something to the serial port which may affect what you're written...

En aquest enllaç es veu el pinout del model B+ amb tots els seus pins GPIO i els usos alternatius:

I en principi en aquest article i en el video es comenta que es poden utilitzar els 26 pins com a E/S:

Solució amb GPIO (Pikeyd)

Implemento 4 emuladors (mame4all, Neo-Geo, MegaDrive i GBA), però també valdria per a SNES. Els emuladors que soporten dos jugadors són mame4all i Neo-Geo. Megadrive i GBA són de 1 sol jugador.

Resumint, la configuració del CPO seria:

  • botons de servei: ESC, COIN-Select (2 botons)
  • P1 Start, X, Y, Z-D, A-Cat, B-Fav, C-Emu (7 botons)
  • P2 Start, A, B, C, D (5 botons)
  • 2 joysticks (8 botons)

Són 22 botons.

En principi volia utilitzar un IPAC2, per ex:

El problema està en què el I-PAC2 original de Ultimarc és car, i els compatibles com el de dalt dubto que funcioni el software de configuració (https://github.com/katie-snow/Ultimarc-linux). El problema està en què aquests I-PAC simulen que són un GamePad i no pas un teclat. I tots els emuladors poden funcionar, però el meu front-end s'hauria de reprogramar per tal de respondre a events de gamepas més que de teclat (que es podria fer).

Per sort, la RPi B+ suporta fins a 24 entrades (https://github.com/digitalLumberjack/mk_arcade_joystick_rpi, projecte similar a pikeyd), i per tant s'han de poder utilitzar tots els pins GPIO. Ara bé, recordo haver tingut problemes amb alguns pins GPIO (TX, RX). S'ha de veure com es soluciona. El millor eś agafar la RPi B+ i anar pin per pin per comprovar que efectivament tinc tots els pins GPIO disponibles. Per utilitzar els pins GPIO que fan referència a Tx i Rx, llegir el que s'explica més amunt.

He fet la prova, i efectivament disposo de 24 pinos GPIO disponibles. Els únics que no funcionen són els dos primers (GPIO2 i GPIO3), que es corresponen al protocol I2C i que precisament s'han de fer servir en cas de què vulgui expandir el número de pins de I/O. He desactivat els pins de comunicació sèrie (GPIO14 i GPIO15, TXD i RXD) editant el fitxer /boot/cmdline.txt i eliminar la referència a tty.

Evidentment, s'ha d'editar el fitxer /etc/pikeyd.conf (i reiniciar el servei).

CPO, configuració

Cpo 2 players b.png nota: aquesta imatge ja està malament, canviar-la.

NOTA: aquesta disposició és perque encara no implemento SNES. Si s'implementa SNES amb dos jugadors, el segon jugador ha de tenir també 6 botons (X Y A B L R), i aleshores ja és totalment simètric.

NOTA: ara ja implemento SNES (canviar la imatge)

Resum dels botons que necessita cada emulador:

Front-End: CAT, FAV, EMU, SEL
MAME (2 players): COIN, P1 Start, P2 Start, A, B, C, PAUSE
Neo-Geo (2 players): COIN, P1 Start, P2 Start, A, B, C, D, PAUSE
GBA (1 player): Start, Select, A, B, L, R, PAUSE
MegaDrive (1 player): Start, X, Y, Z, A, B, C

ShutDown: X+A

NOTA: en el minibartop no podia implementar el L, R de GBA NOTA: puc implementar el PAUSE en tots menys Megadrive, en el botó Y

Hem de buscar la compatibilitat amb la CPO de la mini-bartop de Metal Slug, que va ser la primera multi-emulador. Un petit canvi que s'ha fet: ara primer va CAT i després va FAV.

I el fitxer pikeyd.conf quedaria de la següent manera:

#joy.cfg
#format:
# [keycode from /usr/include/linux/input.h] [whitespace] [GPIO pin no]
# Not limited to a single key. A GPIO press will emit all defined keys in order.

#joystick1
KEY_LEFT 4
KEY_RIGHT 17
KEY_UP 27
KEY_DOWN 22

#joystick1
KEY_J 14
KEY_L 15
KEY_I 18
KEY_K 23

#esc, P1 start, coin/sel, P2 Start
KEY_0 24
KEY_1 25
KEY_2 8
KEY_9 7

#jugador 1
KEY_3 10
KEY_4 9
KEY_5 11
KEY_6 5
KEY_7 6
KEY_8 13

#jugador 2
KEY_A 12
KEY_B 16
KEY_C 20
KEY_D 21
KEY_E 19
KEY_F 26

I el pinout de la RPi B+:

pinheader BCM GPIO
		*--*
		*--*
		*--*
left-GPIO4	*--*	GPIO14-J
		*--*	GPIO15-L
right-GPIO17	*--*	GPIO18-I
up-GPIO27	*--* 
down-GPIO22	*--*	GPIO23-K
		*--*	GPIO24-0
3-GPIO10	*--*
4-GPIO9		*--*	GPIO25-1
5-GPIO11	*--*	GPIO8-2		
		*--*	GPIO7-9
		*--*
6-GPIO5		*--*
7-GPIO6		*--*	GPIO12-A 
8-GPIO13	*--*
E-GPIO19	*--*	GPIO16-B
F-GPIO26	*--*	GPIO20-C
		*--*	GPIO21-D

Aquests de dalt són els pins que faré servir. Recordem però els pins GPIO disponibles: (GPIO2 i GPIO3 no es fan servir perquè són I2C, i es farien servir precisament si encara necessités més entrades I/O):

pinheader BCM GPIO
	*--*
	*--*
	*--*
GPIO4	*--*	GPIO14
	*--*	GPIO15
GPIO17	*--*	GPIO18
GPIO27	*--* 
GPIO22	*--*	GPIO23
	*--*	GPIO24
GPIO10	*--*
GPIO9	*--*	GPIO25
GPIO11	*--*	GPIO8		
	*--*	GPIO7
	*--*
GPIO5	*--*
GPIO6	*--*	GPIO12 
GPIO13	*--*
GPIO19	*--*	GPIO16
GPIO26	*--*	GPIO20
	*--*	GPIO21

Resum layout per imprimir:

2 PLAYER 16 BOTONS

ESC			P1ST			SEL-COIN	P2ST
0		1					2			9
*		*					*			*

		X		Y		Z-R-D			X		Y		Z-R-D
		6		7		8				d		e		f
		*		*		*				*		*		*
		*		*		*				*		*		*
		A		B		C-L				A		B		C-L
		3		4		5				a		b		c

J1: left, right, up, down
J2: i, k, j, l



3.3	*--* 5V
	*--*
	*--* GND
le	*--* J
	*--* L
ri	*--* I
up	*--* 
do	*--* K
	*--* 0
 3	*--*
 4	*--* 1
 5	*--* 2		
	*--* 9
	*--*
 6	*--*
 7	*--* A 
 8	*--*
 E	*--* B
 F	*--* C
	*--* D

Configuració mame4all per a 2 jugadors

Recordar que per accedir a la configuració és TAB (des de qualsevol joc que estigui carregat), i es pot configurar el General del mame4ll, o el joc particular en el qual estic. Igual que el Neo-Geo, el truco està en assignar la mateixa tecla a COIN1 i COIN2 (la "2"). I si vull jugar amb 1P: "1"; i 2P: "9".

Hi ha vàries possibilitats a l'hora de jugar amb dos jugadors.

  • Hi ha jocs com el Aero Fighter, 1941, 1943 que són cooperatius, i que funcionen amb els dos joysticks.
  • Amidar, aurail, 1942,...: efectivament en clicar 2P és de dos jugadors, però els jugadors s'han d'anar alternant el Joystick 1 (no serveix de res el Joystick 2).
  • atetris: hi ha jocs que per entrar en el joc no és 1P, sinó el botó de foc ("3"). En aquest cas, per entrar en el mode 2 jugadors no hem d'apretar el botó 2P, sinó el foc del jugador 2: botó A.

Configuració Neo-Geo per a 2 jugadors

p1control A=K51,B=K52,C=K53,D=K54,START=K49,COIN=K50,UP=K273,DOWN=K274,LEFT=K276,RIGHT=K275,MENU=K27
p2control A=K97,B=K98,C=K99,D=K100,START=K57,COIN=K50,UP=K105,DOWN=K107,LEFT=K106,RIGHT=K108,MENU=K27

El truco està en què el COIN per a P1 i P2 està assignat a la mateixa tecla, i d'aquesta manera quan apretem el botó de COIN ja apareix Press P1 or P2, per escollir si volem jugar amb un jugador o 2. És a dir, que només ens cal una tecla per a COIN.

  • /usr/include/SDL/SDL_keysym.h
  • fitxer de configuració: .gngeo/gngeorc

Jocs cooperatius

mame4all

Agafant el que diu la gent de:

Nearly every MAME game is a co-op game, my favourites being:

M'asseguro que tinc els següents:

gradius3	Gradius 3
captcomm	Captain Commando
xmen.zip X-men
knights	Knights of the Round - Fighting
ffight	Final Fight - Fighting
simpsons	The Simpsons - Fighting
nbajam	NBA Jam	- Sports
ikari	Ikari Warriors - Shooter
ddragon	Double Dragon - Fighting
bublbobl	Bubble Booble - Undefined
aliens	Aliens - FP-Shooter
joust	Joust - Platform
contra	Contra - Platform
spacduel	Space Duel - Undefined
nstocker	Night Stocker - Shooter
silkworm	Silk Worm - Shooter
hbarrel	Heavy Barrel - Undefined
dynduke	Dynamite Duke - Undefined
dino	Cadillacs and Dinosaurs - Fighting
altbeast	Altered Beast - Fighting
gaunt2	Gauntlet II - Maze
gauntlet	Gauntlet - Maze
rampage	Rampage - Platform
wow	Wizzard of Wor - Maze
firetrk	Fire Truck - Driving
spacduel	Space Duel - Shooter
raiden	Raiden - Shooter
jackal	Jackal - Shooter
trog	Trog - Maze
blstroid	Blasteroids - Shooter
narc	Narc - Shooter

Construcció

Fusta conglomerat/DM, U-Molding, vinils. Pixartprinting.com

En aquesta ocasió no pintaré el moble, sinó que cobriré tot el moble amb vinils. L'avantatge és que puc utiltizar fusta conglomerada, que és fàcil de trobar a diferència del contraxapat. I buscant el pressupost més baix.

  • Els laterals, marquee i CPO han d'estar coberts amb dibuixos del tema en què baso la bartop. https://www.pixartprinting.es és una bona solució per Internet per tal de què et facin els vinils. La idea és cobrir tots els laterals, i amagar els cantos de l'adhesiu sota el U-molding.

Productos > Gran formato > Vinilos adhesivos > Vinilos adhesivos para superficies planas

  • Base: 60
  • Altura: 200
  • Vinilo adhesivo monomérico mate
  • sin recortar (en bobina)
  • plastificado: ninguna

Preu: 5,06 e

La resta de fusta (excepte el darrera) s'utiltiza vinil (per exemple de color negre). Provaré http://www.vinilosametros.com, que estan a Gràcia. 1,23m2 de color negre són 6,28e. Per tant, la idea és utilitzar fusta, i cobrir-la tota amb vinils llisos o decorats, i U-molding. M'evito pintar, i tinc més superfície per al disseny. A més, en el vidre també li puc aplicar un marc de vinil negre, i així evito que es vegin els cantos de la pantalla.

vinilo adhesivo opalino para retroiluminación

https://www.pixartprinting.es era correcta, però aquest adhesiu no em val per la marquesina. Per fer la marquesina retroiluminada, la comanda correcta és:

  • Vinilos para cristales: (per fer la marquesina)
  • base: 51
  • altura: 200 (amb aquesta combinació de dimensions optimitza el cost)
  • vinilo adhesivo opalino para retroiluminación
  • sin recortar (en bobina)
  • plastificado: ninguna

preu: 11,08 e

Problemes amb la sortida HDMI

La màxima compatibilitat la trobo amb la següent configuració:

#hdmi_safe=1

#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

hdmi_force_hotplug=1

#hdmi_group=2
#hdmi_mode=39

#hdmi_drive=2

#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

Però el problema eś que no accepta la resolució de la pantalla. (La resolució de la pantalla pot ser un problema per al joanillo_arcade_frontend, on vull que hi càpiga el màxim de resolució dins la pantalla, però no pas per als emuladors que igualment treballen a pantalla completa).

El meu monitor de 19 és un Samsung 920NW 1440x900 75 Hz. Com es veu a https://www.raspberrypi.org/documentation/configuration/config-txt.md, el valor ha de ser hdmi_mode=48. Però si fico aquest valor, aleshores ja no hi ha sortida de video (o a vegades arrenca el video i a vegades no), encara que posi hdmi_safe=1.

Al final la configuració que funciona és:

#hdmi_safe=1

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
#1440x900 75 Hz
hdmi_mode=48 

hdmi_drive=2

config_hdmi_boost=4

Però s'ha d'anar amb compte perquè realment hi ha combinacions que no funcionen. Si no funciona no passa res, doncs encara que no hi hagi video la màquina arrenca i em puc connectar per SSH si tinc ben configurada la wiki o tinc el cable de xarxa.

Solució: el cable HDMI a VGA ha de ser de qualitat

Els cables que vaig comprar, i que aparentment anaven bé però que m'han donat molts problemes són aquests:

Finalment he comprat aquest cable que sí ha funcionat.

Hi ha la possibilitat d'enxufari una entrada de 5V directa, la qual cosa té sentit, i funciona. Però el cas és que sense l'alimentació externa també funciona! Per tant, és un tema de la qualitat dels cables. I de fet ja es veu des del principi la diferència. Quan arrenca la màquina i el video, amb els cables problemàtics tenia alguna interferència (ratlles), atribuïble a que és un senyal analògic. Però és que amb el cable blanc no es veu cap interferència.