From 7f44621f97e1e8c416a9e4c9cd70abf498f9d2c4 Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 16 Dec 2014 10:47:50 +0000 Subject: [PATCH] psx - disc swapping --- .../Consoles/Sony/PSX/Octoshock.cs | 79 +++++++++++------- output/dll/octoshock.dll | Bin 838144 -> 838144 bytes psx/octoshock/psx/psx.cpp | 41 +++------ 3 files changed, 62 insertions(+), 58 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index aa7d37a3b5..d5d8910f9b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -66,8 +66,6 @@ namespace BizHawk.Emulation.Cores.Sony.PSX static Octoshock CurrOctoshockCore; IntPtr psx; - DiscSystem.Disc disc; - DiscInterface discInterface; bool disposed = false; public void Dispose() @@ -78,6 +76,9 @@ namespace BizHawk.Emulation.Cores.Sony.PSX psx = IntPtr.Zero; disposed = true; + + //TODO - dispose disc wrappers + //TODO - dispose discs } /// @@ -85,7 +86,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX /// class DiscInterface : IDisposable { - public DiscInterface(DiscSystem.Disc disc, Action cbActivity) + public DiscInterface(DiscSystem.Disc disc, Action cbActivity) { this.Disc = disc; cbReadTOC = ShockDisc_ReadTOC; @@ -96,7 +97,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX OctoshockDll.ShockDisc_ReadTOC cbReadTOC; OctoshockDll.ShockDisc_ReadLBA cbReadLBA; - Action cbActivity; + Action cbActivity; public DiscSystem.Disc Disc; public IntPtr OctoshockHandle; @@ -145,7 +146,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX int ShockDisc_ReadLBA2448(IntPtr opaque, int lba, void* dst) { - cbActivity(); + cbActivity(this); //lets you check subcode generation by logging it and checking against the CCD subcode bool subcodeLog = false; @@ -170,6 +171,8 @@ namespace BizHawk.Emulation.Cores.Sony.PSX } } + List discInterfaces = new List(); + DiscInterface currentDiscInterface; //note: its annoying that we have to have a disc before constructing this. //might want to change that later. HOWEVER - we need to definitely have a region, at least @@ -177,10 +180,6 @@ namespace BizHawk.Emulation.Cores.Sony.PSX { //analyze our first disc from the list by default, because i dont know - DiscSystem.Disc disc = null; - if (discs != null) - disc = discs[0]; - ServiceProvider = new BasicServiceProvider(this); CoreComm = comm; @@ -191,34 +190,40 @@ namespace BizHawk.Emulation.Cores.Sony.PSX Attach(); - this.disc = disc; - string firmwareRegion = "U"; OctoshockDll.eRegion region = OctoshockDll.eRegion.NA; - if (disc != null) + if (discs != null) { - discInterface = new DiscInterface(disc, - () => - { - //if current disc this delegate disc, activity is happening - if (disc == this.disc) - DriveLightOn = true; - }); + foreach(var disc in discs) + { + var discInterface = new DiscInterface(disc, + (di) => + { + //if current disc this delegate disc, activity is happening + if (di == currentDiscInterface) + DriveLightOn = true; + }); - //determine region of the provided disc - OctoshockDll.ShockDiscInfo discInfo; - OctoshockDll.shock_AnalyzeDisc(discInterface.OctoshockHandle, out discInfo); - - //try to acquire the appropriate firmware - if (discInfo.region == OctoshockDll.eRegion.EU) firmwareRegion = "E"; - if (discInfo.region == OctoshockDll.eRegion.JP) firmwareRegion = "J"; + discInterfaces.Add(discInterface); + } } else { //assume its NA region for test programs, for now. could it be read out of the ps-exe header? } + if (discInterfaces.Count != 0) + { + //determine region of one of the discs + OctoshockDll.ShockDiscInfo discInfo; + OctoshockDll.shock_AnalyzeDisc(discInterfaces[0].OctoshockHandle, out discInfo); + + //try to acquire the appropriate firmware + if (discInfo.region == OctoshockDll.eRegion.EU) firmwareRegion = "E"; + if (discInfo.region == OctoshockDll.eRegion.JP) firmwareRegion = "J"; + } + byte[] firmware = comm.CoreFileProvider.GetFirmware("PSX", "U", true, "A PSX `" + firmwareRegion + "` region bios file is required"); //create the instance @@ -247,11 +252,9 @@ namespace BizHawk.Emulation.Cores.Sony.PSX BufferHeight = VirtualHeight; frameBuffer = new int[BufferWidth * BufferHeight]; - if (disc != null) + if (discInterfaces.Count != 0) { - OctoshockDll.shock_OpenTray(psx); - OctoshockDll.shock_SetDisc(psx, discInterface.OctoshockHandle); - OctoshockDll.shock_CloseTray(psx); + //disc will be set during first frame advance } else { @@ -334,6 +337,22 @@ namespace BizHawk.Emulation.Cores.Sony.PSX SetInput(); + if (Controller["Eject"]) OctoshockDll.shock_OpenTray(psx); + + //if requested disc is not matching current disc, set it now + int discChoice = (int)Controller.GetFloat("Disc Select") - 1; + if (discChoice >= discInterfaces.Count) + discChoice = discInterfaces.Count - 1; + if (discInterfaces[discChoice] != currentDiscInterface) + { + currentDiscInterface = discInterfaces[discChoice]; + if (!Controller["Eject"]) OctoshockDll.shock_OpenTray(psx); //open tray if needed + OctoshockDll.shock_SetDisc(psx, currentDiscInterface.OctoshockHandle); + } + + if (!Controller["Eject"]) OctoshockDll.shock_CloseTray(psx); + + OctoshockDll.shock_Step(psx, OctoshockDll.eShockStep.Frame); //what happens to sound in this case? diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 2d53cb066f50b6caaf0bb8cdd53561d0d39ad85a..4cc4ea8a1ff1e273de525b0327ee1b9adb3ca917 100644 GIT binary patch delta 59390 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

(^j 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 diff --git a/psx/octoshock/psx/psx.cpp b/psx/octoshock/psx/psx.cpp index 2dd2c195a7..20cd933ceb 100644 --- a/psx/octoshock/psx/psx.cpp +++ b/psx/octoshock/psx/psx.cpp @@ -159,7 +159,6 @@ class PSF1Loader {}; static PSF1Loader *psf_loader = NULL; static std::vector *cdifs = NULL; static std::vector cdifs_scex_ids; -static bool CD_TrayOpen; static uint64 Memcard_PrevDC[8]; static int64 Memcard_SaveDelay[8]; @@ -969,7 +968,6 @@ uint32 PSX_MemPeek32(uint32 A) return MemPeek(0, A); } -// FIXME: Add PSX_Reset() and FrontIO::Reset() so that emulated input devices don't get power-reset on reset-button reset. static void PSX_Power(bool powering_up) { PSX_PRNG.ResetState(); // Should occur first! @@ -1032,6 +1030,7 @@ struct ShockConfig struct ShockState { bool power; + bool eject; } s_ShockState; @@ -1268,9 +1267,10 @@ EW_EXPORT s32 shock_Create(void** psx, s32 region, void* firmware512k) MountCPUAddressSpace(); s_ShockState.power = false; + s_ShockState.eject = false; - //TODO - not the ideal starting condition, need to make sure its all sensible as being closed - CD_TrayOpen = true; + //set tray closed with no disc + CDC->SetDisc(false,NULL,""); return SHOCK_OK; } @@ -1849,28 +1849,6 @@ static void CloseGame(void) Cleanup(); } -static void CDInsertEject(void) -{ - CD_TrayOpen = !CD_TrayOpen; - - for(unsigned disc = 0; disc < cdifs->size(); disc++) - { - if(!(*cdifs)[disc]->Eject(CD_TrayOpen)) - { - - CD_TrayOpen = !CD_TrayOpen; - } - } - - -//DAWWWWW - //CDC->SetDisc(CD_TrayOpen, (CD_SelectedDisc >= 0 && !CD_TrayOpen) ? (*cdifs)[CD_SelectedDisc] : NULL, - //(CD_SelectedDisc >= 0 && !CD_TrayOpen) ? cdifs_scex_ids[CD_SelectedDisc] : NULL); -} - - - - EW_EXPORT s32 shock_CreateDisc(ShockDiscRef** outDisc, void *Opaque, s32 lbaCount, ShockDisc_ReadTOC ReadTOC, ShockDisc_ReadLBA ReadLBA2448, bool suppliesDeinterleavedSubcode) { *outDisc = new ShockDiscRef(Opaque, lbaCount, ReadTOC, ReadLBA2448, suppliesDeinterleavedSubcode); @@ -1880,6 +1858,7 @@ EW_EXPORT s32 shock_CreateDisc(ShockDiscRef** outDisc, void *Opaque, s32 lbaCoun ShockDiscRef* s_CurrDisc = NULL; ShockDiscInfo s_CurrDiscInfo; + //Sets the disc in the tray. Returns SHOCK_NOCANDO if it's closed. You can pass NULL to remove a disc from the tray EW_EXPORT s32 shock_SetDisc(void* psx, ShockDiscRef* disc) { @@ -1896,19 +1875,25 @@ EW_EXPORT s32 shock_SetDisc(void* psx, ShockDiscRef* disc) s_CurrDiscInfo = info; s_CurrDisc = disc; - CDC->SetDisc(true,s_CurrDisc,s_CurrDiscInfo.id); + + //set the disc to the CDC, but since its necessarily open to insert, this is false + CDC->SetDisc(false,s_CurrDisc,s_CurrDiscInfo.id); return SHOCK_OK; } EW_EXPORT s32 shock_OpenTray(void* psx) { + if(s_ShockState.eject) return SHOCK_NOCANDO; + s_ShockState.eject = true; CDC->SetDisc(true,s_CurrDisc,s_CurrDiscInfo.id); return SHOCK_OK; } EW_EXPORT s32 shock_CloseTray(void* psx) { + if(!s_ShockState.eject) return SHOCK_NOCANDO; + s_ShockState.eject = false; CDC->SetDisc(false,s_CurrDisc,s_CurrDiscInfo.id); return SHOCK_OK; } @@ -2403,7 +2388,7 @@ void IRQ_SyncState(bool isReader, EW::NewState *ns); SYNCFUNC(PSX) { - NSS(CD_TrayOpen); + NSS(s_ShockState); PSS(MainRAM.data8, 2*1024*1024); NSS(SysControl.Regs); NSS(PSX_PRNG.lcgo);