Close

Modificación de scripts y bat para RETROBAT añadiendo Giro Pantalla

A project log for THE ULTIMATE MINI ARCADE

Classic arcade with all the latest technological advancements, ready for the classics. Enjoy!

srrubioSrRubio 05/08/2026 at 18:050 Comments

Modificamos el bat launch_mame_direct.bat desde la carpeta plugings que ya usamos para llamar al script del giro en el restrictor. (C:\RetroBat\plugins)

@echo off

REM RESTRICTOR (4/8/0)
python "C:\RetroBat\plugins\restrictor.py" %1
REM =========================


REM Lanza directamente MAME con la ROM que le pasa RetroBat
cd /d "C:\RetroBat\emulators\mame" 
mame.exe %1

REM =========================
REM POST-LANZAMIENTO (EXIT)
REM =========================
python "C:\RetroBat\plugins\restrictor.py"

Se añade la parte el EXIT, para llamar al giro de pantalla y que vuelva al horizontal cada vez que salimos del juego.

Por supuesto, también modificamos el archivo restrictor.py (misma carpeta) en el que añadimos la parte del giro de pantalla 

import serial
import serial.tools.list_ports
import sys
import time
import os

# ================= CONFIG =================

COM_RESTRICTOR = "COM7"   # Pro Micro restrictor
COM_ORIENTACION = "COM5"  # Pro Micro giro pantalla

BAUDRATE = 115200

# -------- 4 WAY --------
lista_4 = [
    "pacman", "puckman", "galaga",
    "digdug", "donkeykong", "dkong",
    "frogger"
]

# -------- 8 WAY --------
lista_8 = [
    "sf2", "sf2ce", "sf2hf",
    "ssf2", "mk", "mk2", "mk3", "umk3",
    "kof94", "kof95", "kof96", "kof97",
    "kof98", "kof99",
    "samsho", "samsho2"
]

# -------- VERTICALES --------
lista_vertical = [
    "pacman", "galaga", "dkong", "frogger",
    "1942", "1943", "commando"
]

# ================= FUNCIONES =================

def contiene(lista, rom):
    for item in lista:
        if item in rom:   # coincidencia parcial (clones incluidos)
            return True
    return False


def puerto_disponible(nombre):
    puertos = [p.device for p in serial.tools.list_ports.comports()]
    return nombre in puertos


def enviar(puerto, mensaje):
    if not puerto_disponible(puerto):
        return  # si no está conectado, no hace nada

    try:
        with serial.Serial(puerto, BAUDRATE, timeout=1) as ser:
            time.sleep(1.2)  # necesario por reset del Pro Micro
            ser.write((mensaje + "\n").encode())
    except:
        pass


# ================= MAIN =================

if __name__ == "__main__":

    # 👉 SALIDA DEL JUEGO → HOME
    if len(sys.argv) < 2 or sys.argv[1] == "":
        enviar(COM_RESTRICTOR, "0")  # cuadrado
        enviar(COM_ORIENTACION, "H") # horizontal
        sys.exit(0)

    rom_path = sys.argv[1]
    rom = os.path.splitext(os.path.basename(rom_path))[0].lower()

    # ---------------- CONTROL (RESTRICTOR) ----------------
    if contiene(lista_4, rom):
        control = "4"
    elif contiene(lista_8, rom):
        control = "8"
    else:
        control = "0"

    # ---------------- ORIENTACIÓN ----------------
    if contiene(lista_vertical, rom):
        modo = "V"
    else:
        modo = "H"

    # ---------------- ENVÍO ----------------
    enviar(COM_RESTRICTOR, control)
    enviar(COM_ORIENTACION, modo)

El script se modifcará con los listados que añadí en anterores logs 

Discussions