Change disc (RETROCUBE)

Get answers to questions about using mGalaxy.
Post Reply
User avatar
N13770.U2
Newbie
Newbie
Posts: 43
Joined: Sat Nov 22, 2014 12:39 pm
Location: BRAZIL
Contact:

Yo!!

How will I only use joysticks in RETROCUBE as you would to exchange game consoles in the case of CD that has more than one disk, such as:

- SEGA CD
- SEGA SATURN
- 3DO
- PS1

Anyone have any ideas?

N13770.U2
Marcelo Nietto
N13770 TV - Carros, Games, Cinema, Brinquedos, Rock'n'Roll e Diversos
https://www.youtube.com/user/N13770
Aeliss
Hero Member
Hero Member
Posts: 900
Joined: Thu Apr 04, 2013 5:55 pm

Nope, I had same problem with psx emulator. Long time ago I have start to search a script for epsxe, but I have give up this project because.
1 - I don't want to use Daemon
2 - With the command line -nogui, we can't acess to the menu to chnage disk
3 - Can't load iso without the command line -nogui

Perhaps I can retry with Pcx (pcxfin) but IDK if this one support the swap disk (never tried this one), if you can confirm that to me ?
I can make a script that do alt + enter then select the first menu "use iso", paste the new rom name, press enter, and alt + enter again (like for tempest emulator). But this command suite need to work in normal mode too.
User avatar
N13770.U2
Newbie
Newbie
Posts: 43
Joined: Sat Nov 22, 2014 12:39 pm
Location: BRAZIL
Contact:

Yo!!

Hello Aeliss!!!

So, the only solution for now, is to go with the keyboard + mouse set whenever you are using multi disc games. Unfortunately.
Marcelo Nietto
N13770 TV - Carros, Games, Cinema, Brinquedos, Rock'n'Roll e Diversos
https://www.youtube.com/user/N13770
Aeliss
Hero Member
Hero Member
Posts: 900
Joined: Thu Apr 04, 2013 5:55 pm

Not necessarily.

I don't have enought time to check pcxfin, but if this one support swapping disk, we can make a script, with autoit we can simulate a copy/paste from clipboard and a menu selection, wait for a message in a windows, ect ....

But for the moment I m using only epsxe, so I need to play a game up to a disk changement wanted by the game with pcxfin to check if it 's possible.

Take a look on the tempest script http://www.mgalaxy.com/forum/index.php?topic=434.0 to see an exemple of the possibility.
User avatar
N13770.U2
Newbie
Newbie
Posts: 43
Joined: Sat Nov 22, 2014 12:39 pm
Location: BRAZIL
Contact:

Yo!!

Interesting that psxfin ... but, I have no knowledge of autoit / script.
I need to learn autoit.

N13770.U2
Marcelo Nietto
N13770 TV - Carros, Games, Cinema, Brinquedos, Rock'n'Roll e Diversos
https://www.youtube.com/user/N13770
Aeliss
Hero Member
Hero Member
Posts: 900
Joined: Thu Apr 04, 2013 5:55 pm

I haven't finished yet, but this one working for pCXfin, I just need to press "F1" (with xpadder on a pad) and the script swap disk itself (cd 1 > cd 2 > cd 3 > cd 1 > cd 2 >  ....)
But to test you need to edit it, I m waiting for french title in window, like "ouvrir".

Code: Select all

#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>

Opt("WinTitleMatchMode", 1)

;Parsing
Local $count = StringInStr($CmdLineRaw, ".exe", 0 , 1, 1)
local $app = StringLeft ( $CmdLineRaw, $count + 4 )
local $command = StringTrimLeft( $CmdLineRaw, $count + 4 )
if not $command then exit 0

;Special parsing
$count = StringInStr($command, "-f", 0 , 1, 1)
local $filename = StringTrimLeft( $command, $count + 3 )
$filename = StringTrimright( $filename, 1 )
local $ext = StringTrimLeft($filename, StringInStr($filename, ".", 1, -1) - 1)
local $file = StringLeft($filename, StringInStr($filename, ".", 1, -1) - 1 )
$file = StringTrimLeft($file, StringInStr($file, "\", 1, -1) )

;check for CD
local $maxCD = 1
local $curCD = 1
if StringInStr($filename,"CD1") Then
   
   If FileExists(StringReplace($filename,'CD1','CD2')) Then
	  $maxCD = 2
   EndIf
   
   If FileExists(StringReplace($filename,'CD1','CD3')) Then
	  $maxCD = 3
   EndIf
   
endif

HotKeySet("{F1}", "CDchange")
 
local $PID = Run ( '"' & $app & '" ' & $command )
 
While ProcessExists ( $PID )
   sleep(100)
WEnd
 
Exit 0
     
;Functions
Func CDchange()
   if ($maxCD = 1) then Return
	  
   $curCD = $curCD + 1
   if ($curCD > $maxCD) then $curCD = 1
   $filename = StringTrimright($filename,7) & 'CD' & $curCD & '.cue'
   
   ;load the newCD
   Send("!{ENTER}")
   WinWaitActive ( "pSX" , "", 5 )
   Send("!{f}")
   Send("{ENTER}")
   WinwaitActive("Ouvrir","",5)
   Sleep (3000) ; bug here
   send($filename & ' ', 1)
   send("{enter}")
   WinwaitActive("pSX")
   Send("!{ENTER}")

EndFunc
Aeliss
Hero Member
Hero Member
Posts: 900
Joined: Thu Apr 04, 2013 5:55 pm

A new version.
This one work with name "iso name CDX.cue" and "iso name (Disk X).cue"
the Cd changement is invisible on my RetroCube, the display is slower than the manipulation, just some strange noise.

3 Problems left.
1 - Need to use other key than F1 because this one is used by emulator
2 - this version work only for french, need to chnage "ouvrir" by "open" this is not because of emulator but system language on windows
3 - Need to had a temporisation somewhere, you can have resize problem, sometime it's mGalaxy that have bad size after the return to front end ^^.

Code: Select all

#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>

Opt("WinTitleMatchMode", 1)

;Parsing
Local $count = StringInStr($CmdLineRaw, ".exe", 0 , 1, 1)
local $app = StringLeft ( $CmdLineRaw, $count + 4 )
local $command = StringTrimLeft( $CmdLineRaw, $count + 4 )
if not $command then exit 0

;Special parsing
$count = StringInStr($command, '"', 0 , 1, 1)
local $filename = StringTrimLeft( $command, $count )
$filename = StringTrimright( $filename, 1 )
;local $ext = StringTrimLeft($filename, StringInStr($filename, ".", 1, -1) - 1)
;local $file = StringLeft($filename, StringInStr($filename, ".", 1, -1) - 1 )
;$file = StringTrimLeft($file, StringInStr($file, "\", 1, -1) )

local $autchange = 1
local $oldCD = 1

;check if there is CD number
local $maxCD = 1
local $curCD = 1
local $type = 0
;look for CDX
local $aArray = StringRegExp ( $filename, "CD(\d)\.cue" , 1 )
if (UBound($aArray) > 0) then
   $type = 1
else
   ;look for (Disk X)
   $aArray = StringRegExp ( $filename, "\(Disk (\d)\)\.cue" , 1 )
   if (UBound($aArray) > 0) then $type = 2
Endif

if (UBound($aArray) > 0) then
   ;ok there is the tag
   
   ;active the function
   HotKeySet("{F1}", "CDchange")
   
   ;set current CD number
   $curCD = $aArray[0]
   
   ;look for max cd Number
   for $i = 2 to 10
	  If (($type = 1) AND FileExists(StringReplace($filename,'CD' & $curCD,'CD' & $i))) OR (($type = 2) AND FileExists(StringReplace($filename,'Disk ' & $curCD,'Disk ' & $i))) Then
		 $maxCD = $maxCD + 1
	  Else
		 ExitLoop
	  Endif
   next

Else
   ;only 1 CD
endif

local $PID = Run ( '"' & $app & '" ' & $command )

ProcessWaitClose($PID)

Exit 0

;***********************************************************************************
     
;Functions
Func CDchange()
   if ($maxCD = 1) then Return
	  
   if $autchange = 0 then return
   $autchange = 0
   
   $oldCD = $curCD
   $curCD = $curCD + 1
   if ($curCD > $maxCD) then $curCD = 1
   ;set new filename
   if $type = 1 then $filename = StringReplace($filename,'CD' & $oldCD,'CD' & $curCD )
   if $type = 2 then $filename = StringReplace($filename,'Disk ' & $oldCD,'Disk ' & $curCD)
   
   ;load the newCD
   Send("!{ENTER}")
   WinWaitActive ( "pSX" , "", 5 )
   Send("!{f}")
   Send("{ENTER}")
   ;Need to change here
   WinwaitActive("Ouvrir","",5)
   send($filename & ' ', 1)
   send("{enter}")
   WinwaitActive("pSX")
   Send("!{ENTER}")
   
   $autchange = 1

EndFunc
Aeliss
Hero Member
Hero Member
Posts: 900
Joined: Thu Apr 04, 2013 5:55 pm

A new version.

It works on all language
I m using the "²" key to chnage CD
Less mGalaxy bug.
It tell the swapping cd. How to use it :
Use an online Text to Speech system to make mp3 file called "CD1.mp3" "CD2.mp3" ect .... put them on a folder called "sound" at same place than the script.

Every time you press the "²" key the script play the mp3 and swap disk.

Code: Select all

#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>

Opt("WinTitleMatchMode", 1)

;Parsing
Local $count = StringInStr($CmdLineRaw, ".exe", 0 , 1, 1)
local $app = StringLeft ( $CmdLineRaw, $count + 4 )
local $command = StringTrimLeft( $CmdLineRaw, $count + 4 )
if not $command then exit 0

;Special parsing
$count = StringInStr($command, '"', 0 , 1, 1)
local $filename = StringTrimLeft( $command, $count )
$filename = StringTrimright( $filename, 1 )
;local $ext = StringTrimLeft($filename, StringInStr($filename, ".", 1, -1) - 1)
;local $file = StringLeft($filename, StringInStr($filename, ".", 1, -1) - 1 )
;$file = StringTrimLeft($file, StringInStr($file, "\", 1, -1) )

local $autchange = 1
local $oldCD = 1

;check if there is CD number
local $maxCD = 1
local $curCD = 1
local $type = 0
;look for CDX
local $aArray = StringRegExp ( $filename, "CD(\d)\.cue" , 1 )
if (UBound($aArray) > 0) then
   $type = 1
else
   ;look for (Disk X)
   $aArray = StringRegExp ( $filename, "\(Disk (\d)\)\.cue" , 1 )
   if (UBound($aArray) > 0) then $type = 2
Endif

if (UBound($aArray) > 0) then
   ;ok there is the tag
   
   ;active the function
   HotKeySet("{²}", "CDchange")
   
   ;set current CD number
   $curCD = $aArray[0]
   
   ;look for max cd Number
   for $i = 2 to 10
	  If (($type = 1) AND FileExists(StringReplace($filename,'CD' & $curCD,'CD' & $i))) OR (($type = 2) AND FileExists(StringReplace($filename,'Disk ' & $curCD,'Disk ' & $i))) Then
		 $maxCD = $maxCD + 1
	  Else
		 ExitLoop
	  Endif
   next

Else
   ;only 1 CD
endif

local $PID = Run ( '"' & $app & '" ' & $command )

ProcessWaitClose($PID)

Exit 0

;***********************************************************************************
     
;Functions
Func CDchange()
   if ($maxCD = 1) then Return
	  
   ;to prevent multiple call
   if ($autchange = 0) then return
   $autchange = 0
   
   $oldCD = $curCD
   $curCD = $curCD + 1
   if ($curCD > $maxCD) then $curCD = 1
   ;set new filename
   if $type = 1 then $filename = StringReplace($filename,'CD' & $oldCD,'CD' & $curCD )
   if $type = 2 then $filename = StringReplace($filename,'Disk ' & $oldCD,'Disk ' & $curCD)
	  
   ;say CD name
   if FileExists("sound/CD" & $curCD & ".mp3") then  SoundPlay ( "sound/CD" & $curCD & ".mp3",1 )
   
   ;load the newCD
   Send("!{ENTER}")
   WinWaitActive ( "pSX" , "", 5 )
   sleep(1000);tempo for mGalaxy
   Send("!{f}")
   Send("{ENTER}")
   ;Need to change here
   ;WinwaitActive("Ouvrir","",5)
   WinWaitActive("[CLASS:#32770]", '', 5)
   send($filename & ' ', 1)
   send("{enter}")
   WinwaitActive("pSX")
   Send("!{ENTER}")
   
   $autchange = 1

EndFunc
User avatar
N13770.U2
Newbie
Newbie
Posts: 43
Joined: Sat Nov 22, 2014 12:39 pm
Location: BRAZIL
Contact:

Yo!!

Aeliss,

This emulator is better than the epsxe?
Runs all the games?
Marcelo Nietto
N13770 TV - Carros, Games, Cinema, Brinquedos, Rock'n'Roll e Diversos
https://www.youtube.com/user/N13770
Aeliss
Hero Member
Hero Member
Posts: 900
Joined: Thu Apr 04, 2013 5:55 pm

I can't say if it's better, I haven't found comparative for compatibility.

Epsxe have more options, the picture is really better, PCX is an "accurate" emulator, so you will have same resolution than real PSX.

I have the compatibility list for PCX if you want it but for the moment I haven't see differences, I have some games that work better on one, and others better on the other one. On my Retrocube (c) I m using PCX since just 2 week, I used Epsxe before, not enought time to be sure, but I don't see how making swapping disk on epsxe.
Dieterweireldt
Newbie
Newbie
Posts: 2
Joined: Sun Mar 15, 2015 10:25 am

Hi, sorry if I'm intruding on your post but I have a question concerning Pcxfin.. I really love mGalaxy because of it's simplicity to set everything up but I can't get Pcxfin to run on it (works fine stand-alone).. (Runway only gives me the option to use Epsxe or PCSX-Reloaded) but I would really like to use your AutoIt script for changing discs.. I already changed the systems.xml file to include PCXFIN but I don't know the command lines it uses to launch a game (neither the ones from the other 2 work, the give an error "the specified executable is not a valid application for this OS platform")
User avatar
mgalaxy
Administrator
Administrator
Posts: 1192
Joined: Tue Dec 05, 2006 7:46 pm

The command line for psxfin is

Code: Select all

-f "%path\%file%ext"
This system is already planned to be added by default to the next mGalaxy version.
Last edited by mgalaxy on Mon Mar 16, 2015 2:45 pm, edited 1 time in total.
Dieterweireldt
Newbie
Newbie
Posts: 2
Joined: Sun Mar 15, 2015 10:25 am

thank you very much..
Post Reply