Page 1 of 1

Change disc (RETROCUBE)

Posted: Thu Jan 08, 2015 3:05 pm
by N13770.U2
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

Re: Change disc (RETROCUBE)

Posted: Thu Jan 08, 2015 6:22 pm
by Aeliss
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.

Re: Change disc (RETROCUBE)

Posted: Fri Jan 09, 2015 11:00 am
by N13770.U2
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.

Re: Change disc (RETROCUBE)

Posted: Fri Jan 09, 2015 4:19 pm
by Aeliss
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.

Re: Change disc (RETROCUBE)

Posted: Fri Jan 09, 2015 6:02 pm
by N13770.U2
Yo!!

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

N13770.U2

Re: Change disc (RETROCUBE)

Posted: Sat Jan 10, 2015 6:30 pm
by Aeliss
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

Re: Change disc (RETROCUBE)

Posted: Sun Jan 11, 2015 11:54 am
by Aeliss
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

Re: Change disc (RETROCUBE)

Posted: Sun Jan 25, 2015 3:57 pm
by Aeliss
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

Re: Change disc (RETROCUBE)

Posted: Mon Jan 26, 2015 9:24 am
by N13770.U2
Yo!!

Aeliss,

This emulator is better than the epsxe?
Runs all the games?

Re: Change disc (RETROCUBE)

Posted: Mon Jan 26, 2015 5:22 pm
by Aeliss
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.

Re: Change disc (RETROCUBE)

Posted: Sun Mar 15, 2015 10:30 am
by Dieterweireldt
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")

Re: Change disc (RETROCUBE)

Posted: Sun Mar 15, 2015 5:32 pm
by mgalaxy
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.

Re: Change disc (RETROCUBE)

Posted: Mon Mar 16, 2015 2:01 pm
by Dieterweireldt
thank you very much..