Benvenuto Ospite,
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:
Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-
Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:
Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-
Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum
Tool per pulizia set mame
Tool per pulizia set mame
Ciao, come ho anticipato a Motoschifo, sto scrivendo a tempo perso (molto perso) un tool per generare liste per i nostri frontend, principalmente hyperspin e Feel.
Il tool si ispira a Mameshrink, di Motoschifo, prenderò la lista delle roms della versione di mame indicata ed evidezierà le roms presenti nella cartella roms di mame. si potrà quindi generare la lista per il frontend desiderato.
documenterò qui il lavoro, ed esporrò i miei dubbi.
Inzio col chiedere, come si fà a verificare che una rom effettivamente è presente nel set, vi posto questo esempio: the simpsons, in un merged set è un solo romset, come faccio a capire quali cloni del set sono presenti?
Il tool si ispira a Mameshrink, di Motoschifo, prenderò la lista delle roms della versione di mame indicata ed evidezierà le roms presenti nella cartella roms di mame. si potrà quindi generare la lista per il frontend desiderato.
documenterò qui il lavoro, ed esporrò i miei dubbi.
Inzio col chiedere, come si fà a verificare che una rom effettivamente è presente nel set, vi posto questo esempio: the simpsons, in un merged set è un solo romset, come faccio a capire quali cloni del set sono presenti?
-
motoschifo
- Progetto Arcade Database
- Messaggi: 3308
- Iscritto il: 12/07/2013, 20:29
- Medaglie: 2
- Città: Parma
- Località: Parma
- Grazie Inviati: 34 volte
- Grazie Ricevuti: 40 volte
- Contatta:
Re: Tool per pulizia set mame
Rispondo velocemente io, almeno come farei in un mio programma (e come effettivamente farò prima o poi...)
Leggi l'xml per capire se il romset (simpsons) deve contenere file (nodi "rom").
Se ne trovi significa che dovrà esiste un file simpsons.zip.
Se il gioco è parent ti fermi qui per ora.
Se è clone analizzi anche il parent ed aggiungi gli eventuali file mancanti.
Se è tutto dentro a simpsons.zip, l'unico modo che hai è quello di controllare quali file sono effettivamente dentro allo zip, e li leggi dai nodi rom (non ricordo ora se filtrato per region, comunque sicuramente filtrati).
Poi in realtà dovresti controllare se ci sono device che hanno bisogno di file (device_ref credo) e per ciascuno di essi, sempre nell'xml, verifichi se hanno nodi "rom".
Il calcolo del sito lavora in quel modo per dirti quali file sono necessari, anche se non fa distinzione tra i diversi tipi di set.
In aggiunta controllo anche i chd, i sample e i bios (identica cosa per i cloni).
Esistono poi anche attributi come romof che indicano di utilizzare un'altra rom.
Scritto (velocemente) credo sia tutto.
Visto che queste letture sono lentissime, utilizza cache ed array in memoria per fare i lavori altrimenti il programma ci metterà una vita ad analizzare il disco...
Preciso una cosa: tutto ciò che so del Mame è arrivato da esperienza diretta. Quasi mai ho avuto info dettagliate da altri programmatori, quindi parti dall'xml e analizzalo per bene leggendo la parte iniziale (dtd) per capire i legami dei nodi.
Considera anche che differenti release del Mame possono usare differenti xml o non contenere affatto alcuni nodi.
Per semplificare le cose potresti far scegliere il tipo di set (merged/splitted/non-merged) oppure proporre tu la modalità di lavoro più adatta.
Ovviamente se trovi qualcosa di interessante scrivilo così potrò farne tesoro per il prossimo shrink. Uscirà probabilmente nel periodo febbraio-aprile 2018 e farà controlli a livello di file dentro agli zip, quasi come un ClrMamePro
Leggi l'xml per capire se il romset (simpsons) deve contenere file (nodi "rom").
Se ne trovi significa che dovrà esiste un file simpsons.zip.
Se il gioco è parent ti fermi qui per ora.
Se è clone analizzi anche il parent ed aggiungi gli eventuali file mancanti.
Se è tutto dentro a simpsons.zip, l'unico modo che hai è quello di controllare quali file sono effettivamente dentro allo zip, e li leggi dai nodi rom (non ricordo ora se filtrato per region, comunque sicuramente filtrati).
Poi in realtà dovresti controllare se ci sono device che hanno bisogno di file (device_ref credo) e per ciascuno di essi, sempre nell'xml, verifichi se hanno nodi "rom".
Il calcolo del sito lavora in quel modo per dirti quali file sono necessari, anche se non fa distinzione tra i diversi tipi di set.
In aggiunta controllo anche i chd, i sample e i bios (identica cosa per i cloni).
Esistono poi anche attributi come romof che indicano di utilizzare un'altra rom.
Scritto (velocemente) credo sia tutto.
Visto che queste letture sono lentissime, utilizza cache ed array in memoria per fare i lavori altrimenti il programma ci metterà una vita ad analizzare il disco...
Preciso una cosa: tutto ciò che so del Mame è arrivato da esperienza diretta. Quasi mai ho avuto info dettagliate da altri programmatori, quindi parti dall'xml e analizzalo per bene leggendo la parte iniziale (dtd) per capire i legami dei nodi.
Considera anche che differenti release del Mame possono usare differenti xml o non contenere affatto alcuni nodi.
Per semplificare le cose potresti far scegliere il tipo di set (merged/splitted/non-merged) oppure proporre tu la modalità di lavoro più adatta.
Ovviamente se trovi qualcosa di interessante scrivilo così potrò farne tesoro per il prossimo shrink. Uscirà probabilmente nel periodo febbraio-aprile 2018 e farà controlli a livello di file dentro agli zip, quasi come un ClrMamePro

Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 Web ›ArcadeDatabase
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 Web ›ArcadeDatabase
Re: Tool per pulizia set mame
mmm grazie Motoschifo.
Penso di ignorare per ora i device, mi concentro solo sulle rom... vorrei evidenziare quelle presenti nella lista data dall'xml del mame.
Sto scrivendo in C# su WFP, quindi carico tutto in memoria con una gerarchia di oggetti contenenti array associativi, a parte la lettura iniziale del file, il calcolo diventa quindi abbastanza rapido. Intendo dire, nella peggiore delle ipotesi, penso che la complessità rimanga in ogni caso lineare. Iterare la lista di set e iterare per ogni set le rom confrontando con le rom di un altro set. Le rom per ogni set sono poche e il confronto viene fatto in modo costante con array associativi.
ti trovi su questo discorso? mi sono spiegato?
Penso di ignorare per ora i device, mi concentro solo sulle rom... vorrei evidenziare quelle presenti nella lista data dall'xml del mame.
Sto scrivendo in C# su WFP, quindi carico tutto in memoria con una gerarchia di oggetti contenenti array associativi, a parte la lettura iniziale del file, il calcolo diventa quindi abbastanza rapido. Intendo dire, nella peggiore delle ipotesi, penso che la complessità rimanga in ogni caso lineare. Iterare la lista di set e iterare per ogni set le rom confrontando con le rom di un altro set. Le rom per ogni set sono poche e il confronto viene fatto in modo costante con array associativi.
ti trovi su questo discorso? mi sono spiegato?
-
motoschifo
- Progetto Arcade Database
- Messaggi: 3308
- Iscritto il: 12/07/2013, 20:29
- Medaglie: 2
- Città: Parma
- Località: Parma
- Grazie Inviati: 34 volte
- Grazie Ricevuti: 40 volte
- Contatta:
Re: Tool per pulizia set mame
Io ho scelto Winform perchè WPF proprio non mi piace, ed alla fine la programmazione (per me) deve essere piacevole altrimenti non va bene
Nel mio piccolo tool avevo pensato di caricare tutto in una listview ma poi ho dovuto ripiegare con array in memoria, perchè altrimenti in caso di 30 mila giochi tutto diventava molto (troppo) lento.
Una volta che hai letto l'xml dovresti avere tutto il necessario.
Cercare in memoria ha tempi molto rapidi quindi non mi aspetto grandi problemi.
Se vedi che hai rallentamenti, salvati anche le info che calcoli man mano che l'utente rimuove o seleziona qualcosa.
Per es. tutto il discorso di quali file compaiono dove (quindi cosa serve ad un romset) puoi memorizzarlo nell'array e tenerlo buono se dovesse servirti ancora.
Per fare le liste Feel (formato MameWah, estensione lst) ti posto qui di seguito il codice sorgente di quello che faccio sul sito. E' abbastanza leggibile, qualche funzione e la maggior parte dei dati arriva sempre dall'xml. Considera che qui ci sono dati per qualsiasi release del Mame, quindi alcuni valori ormai non li trovi più nelle ultime release.

Nel mio piccolo tool avevo pensato di caricare tutto in una listview ma poi ho dovuto ripiegare con array in memoria, perchè altrimenti in caso di 30 mila giochi tutto diventava molto (troppo) lento.
Una volta che hai letto l'xml dovresti avere tutto il necessario.
Cercare in memoria ha tempi molto rapidi quindi non mi aspetto grandi problemi.
Se vedi che hai rallentamenti, salvati anche le info che calcoli man mano che l'utente rimuove o seleziona qualcosa.
Per es. tutto il discorso di quali file compaiono dove (quindi cosa serve ad un romset) puoi memorizzarlo nell'array e tenerlo buono se dovesse servirti ancora.
Per fare le liste Feel (formato MameWah, estensione lst) ti posto qui di seguito il codice sorgente di quello che faccio sul sito. E' abbastanza leggibile, qualche funzione e la maggior parte dei dati arriva sempre dall'xml. Considera che qui ci sono dati per qualsiasi release del Mame, quindi alcuni valori ormai non li trovi più nelle ultime release.
Codice: Seleziona tutto
case "lst":
/*
* Formato MameWah da 13 righe per ogni gioco, senza alcuna descrizione del campo:
* 1. name 3wonders
2. description Three Wonders (World 910520)
3. year 1991
4. manufacturer Capcom
5. cloneof
6. romof
7. screen raster
8. orientation Horizontal
9. input joy8way - 2P - 3Bt
10. status good
11. color good
12. sound good
13. category
*/
if ($count==1) {
$ftitle = utility::get_valid_filename($titolo.".lst");
}
// 1. name
fwrite($f, format::remove_line_breaks($mame->game_name).$EOL);
// 2. description
fwrite($f, format::remove_line_breaks($mame->game_description).$EOL);
// 3. year
fwrite($f, format::remove_line_breaks($mame->game_year).$EOL);
// 4.manufacturer
fwrite($f, format::remove_line_breaks($mame->manufacturer).$EOL);
// 5. cloneof
fwrite($f, format::remove_line_breaks($mame->game_cloneof).$EOL);
// 6. romof
fwrite($f, format::remove_line_breaks($mame->game_romof).$EOL);
// 7. screen: raster/vector/lcd/unknown
fwrite($f, $mame->display_type_desc().$EOL);
// 8. orientation: Horizontal/Vertical
fwrite($f, $mame->screen_orientation_desc().$EOL);
// 9. input: joy8way - 2P - 3Bt
fwrite($f, format::remove_line_breaks(
$mame->control_type_ways_desc_feel().
" - {$mame->input_players}P".
" - {$mame->input_buttons}Bt").
$EOL
);
// 10. status
fwrite($f, $mame->status_desc_feel($mame->driver_status,"").$EOL);
// 11. color
fwrite($f, $mame->status_desc_feel($mame->driver_color,"").$EOL);
// 12. sound
fwrite($f, $mame->status_desc_feel($mame->driver_sound,"").$EOL);
// 13. category
fwrite($f, format::remove_line_breaks($categorie->descrizione($mame->category, true)).$EOL);
break;
...
...
function control_type_ways_desc_feel() {
$ret = "";
$types = split(";",$this->control_type.";");
$ways = split(";",$this->control_ways.";");
for ($i=0; $i<count($types); $i++) {
$t = trim($types[$i]);
if ($t=="") continue;
$w = "";
if (isset($ways[$i])) $w = trim($ways[$i]);
$s = "";
if ($t==database_adb_mame::CONTROL_TYPE_JOY && $w==database_adb_mame::CONTROL_WAYS_VERTICAL_2) {
$s = "vjoy2way";
}
elseif ($t==database_adb_mame::CONTROL_TYPE_DOUBLEJOY && $w==database_adb_mame::CONTROL_WAYS_VERTICAL_2) {
$s = "vdoublejoy2way";
}
else {
switch ($t) {
case self::CONTROL_TYPE_DIAL: $s = "dial"; break;
case self::CONTROL_TYPE_DOUBLEJOY: $s = "doublejoy"; break;
case self::CONTROL_TYPE_GAMBLING: $s = "gambling"; break;
case self::CONTROL_TYPE_HANAFUDA: $s = "hanafuda"; break;
case self::CONTROL_TYPE_JOY: $s = "joy"; break;
case self::CONTROL_TYPE_KEYBOARD: $s = "keyboard"; break;
case self::CONTROL_TYPE_KEYPAD: $s = "keypad"; break;
case self::CONTROL_TYPE_KEYPAD: $s = "keypad"; break;
case self::CONTROL_TYPE_LIGHTGUN: $s = "lightgun"; break;
case self::CONTROL_TYPE_MAHJONG: $s = "mahjong"; break;
case self::CONTROL_TYPE_MOUSE: $s = "mouse"; break;
case self::CONTROL_TYPE_PADDLE: $s = "paddle"; break;
case self::CONTROL_TYPE_PEDAL: $s = "pedal"; break;
case self::CONTROL_TYPE_POSITIONAL: $s = "positional"; break;
case self::CONTROL_TYPE_STICK: $s = "stick"; break;
case self::CONTROL_TYPE_TRACKBALL: $s = "trackball"; break;
case self::CONTROL_TYPE_TRIPLEJOY: $s = "triplejoy"; break;
case self::CONTROL_TYPE_ONLY_BUTTONS: $s = "only_buttons"; break;
}
switch ($w) {
case database_adb_mame::CONTROL_WAYS_1: $s .= "1way"; break; // 1
case database_adb_mame::CONTROL_WAYS_2: $s .= "2way"; break; // 2
case database_adb_mame::CONTROL_WAYS_3_HALF_4: $s .= "3way"; break; // 3 (half4)
case database_adb_mame::CONTROL_WAYS_4: $s .= "4way"; break; // 4
case database_adb_mame::CONTROL_WAYS_5_HALF_8: $s .= "5way"; break; // 5 (half8)
case database_adb_mame::CONTROL_WAYS_8: $s .= "8way"; break; // 8
case database_adb_mame::CONTROL_WAYS_VERTICAL_2: $s .= "2way"; break; // vertical2
case database_adb_mame::CONTROL_WAYS_STRANGE2: $s .= "2way"; break; // strange2
case database_adb_mame::CONTROL_WAYS_16: $s .= "16way"; break; // 16
default:
if ($w!="" && $w!=0) $s .= "{$w}way";
break;
}
}
if ($s=="") continue;
if ($ret!="") $ret .= ",";
$ret .= $s;
}
return $ret;
}
function display_type_desc($not_found="") {
switch ($this->display_type) {
case self::DISPLAY_TYPE_RASTER: return "raster";
case self::DISPLAY_TYPE_VECTOR: return "vector";
case self::DISPLAY_TYPE_LCD: return "lcd";
case self::DISPLAY_TYPE_UNKNOWN: return "unknown";
}
return $not_found;
}
function screen_orientation_desc() {
switch ($this->screen_orientation) {
case self::SCREEN_ORIENTATION_ORIZZONTALE: return "Horizontal";
case self::SCREEN_ORIENTATION_VERTICALE: return "Vertical";
case self::SCREEN_ORIENTATION_NESSUNO: return "";
}
return "";
}
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 Web ›ArcadeDatabase
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 Web ›ArcadeDatabase
Re: Tool per pulizia set mame
quindi penso che convenga creare un modello nell'applicazione per avere la lista di oggetti che mappano i set e contengono mappe di roms in modo da fare controlli costanti per ogni rom, sei d'accordo?
-
motoschifo
- Progetto Arcade Database
- Messaggi: 3308
- Iscritto il: 12/07/2013, 20:29
- Medaglie: 2
- Città: Parma
- Località: Parma
- Grazie Inviati: 34 volte
- Grazie Ricevuti: 40 volte
- Contatta:
Re: Tool per pulizia set mame
Si dovresti creare strutture con i riferimenti e le info necessarie, così da non dover continuamente accedere all'xml.
Puoi eventualmente anche partire dai file su disco perchè se manca qualcosa di sicuro non potrai avere la lista funzionante sul front-end.
Puoi eventualmente anche partire dai file su disco perchè se manca qualcosa di sicuro non potrai avere la lista funzionante sul front-end.
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 Web ›ArcadeDatabase
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 Web ›ArcadeDatabase
-
alucard
- Affezionato
- Messaggi: 279
- Iscritto il: 02/12/2017, 16:19
- Medaglie: 1
- Città: MotherEarth
- Grazie Inviati: 5 volte
- Grazie Ricevuti: 15 volte
Re: Tool per pulizia set mame
Scusa @motoschifo,
mi sono avvicinato da poco alla gestione delle rom di Mame.
Considerando come versione di riferimento del mame la 0.200, ho scaricato le rom che mi interessavano da https://www.retroroms.info e leggendo qui e la, ho deciso di utilizzare ClrMamePro per verificarle e per gestire magari in futuro delle integrazioni.
ClrMamePro non restringe però la verifica alle rom in mio possesso, quindi il processo, oltre ad essere lungo, alla fine non mi da neanche evidenza di quello che ho e che manca. Inoltre tutti i set li considera giustamente incompleti, visto che di ogni gioco ho solo il parent e tranne eccezioni avrò solo quelli.
Se ho ben capito Mame Shrink serve proprio a questo scopo, giusto?
In tal caso, è previsto che lavori con un file .dat anziché con l'eseguibile del Mame? Io non uso il Mame classico, ma il core da Retroarch.
Grazie
mi sono avvicinato da poco alla gestione delle rom di Mame.
Considerando come versione di riferimento del mame la 0.200, ho scaricato le rom che mi interessavano da https://www.retroroms.info e leggendo qui e la, ho deciso di utilizzare ClrMamePro per verificarle e per gestire magari in futuro delle integrazioni.
ClrMamePro non restringe però la verifica alle rom in mio possesso, quindi il processo, oltre ad essere lungo, alla fine non mi da neanche evidenza di quello che ho e che manca. Inoltre tutti i set li considera giustamente incompleti, visto che di ogni gioco ho solo il parent e tranne eccezioni avrò solo quelli.
Se ho ben capito Mame Shrink serve proprio a questo scopo, giusto?
In tal caso, è previsto che lavori con un file .dat anziché con l'eseguibile del Mame? Io non uso il Mame classico, ma il core da Retroarch.
Grazie
-
Tox Nox Fox
- Moderatore
- Messaggi: 12458
- Iscritto il: 14/01/2007, 23:35
- Medaglie: 4
- Grazie Inviati: 205 volte
- Grazie Ricevuti: 324 volte
Re: Tool per pulizia set mame
No
ClrMamePro controlla e verifica le tue roms in base al dat che gli dai
MameShrink permette di eliminare e ripulire il tuo romset
Se vuoi usare ClrMamePro per il controllo con solo parent ( ad esempio ) devi crearti un dat da dargli usando ArcadeDataBase
Selezionado i criteri di ricerca puoi farti un dat per il ClrMamePro con, ad esempio, Solo Parent + Solo Funzionanti + No Videopoker + No Mechanical + No Flipper + No Trackball + ecc ecc
Oppure lo crei con tutti i parent e poi lo scremi con MameShrink
Hai letto qui -> Come crearsi un Romset Personalizzato per una versione di Mame
ClrMamePro controlla e verifica le tue roms in base al dat che gli dai
MameShrink permette di eliminare e ripulire il tuo romset
Se vuoi usare ClrMamePro per il controllo con solo parent ( ad esempio ) devi crearti un dat da dargli usando ArcadeDataBase
Selezionado i criteri di ricerca puoi farti un dat per il ClrMamePro con, ad esempio, Solo Parent + Solo Funzionanti + No Videopoker + No Mechanical + No Flipper + No Trackball + ecc ecc
Oppure lo crei con tutti i parent e poi lo scremi con MameShrink
Hai letto qui -> Come crearsi un Romset Personalizzato per una versione di Mame