diff --git a/Assets/dll/faust.wbx.gz b/Assets/dll/faust.wbx.gz index fe61d2b6e7..6f2496c383 100644 Binary files a/Assets/dll/faust.wbx.gz and b/Assets/dll/faust.wbx.gz differ diff --git a/Assets/dll/hyper.wbx.gz b/Assets/dll/hyper.wbx.gz index 3c14c40d17..ad9d45d862 100644 Binary files a/Assets/dll/hyper.wbx.gz and b/Assets/dll/hyper.wbx.gz differ diff --git a/Assets/dll/ngp.wbx.gz b/Assets/dll/ngp.wbx.gz index 5de6395454..90c6a6011a 100644 Binary files a/Assets/dll/ngp.wbx.gz and b/Assets/dll/ngp.wbx.gz differ diff --git a/Assets/dll/pcfx.wbx.gz b/Assets/dll/pcfx.wbx.gz index 18c1b16452..b6944703a0 100644 Binary files a/Assets/dll/pcfx.wbx.gz and b/Assets/dll/pcfx.wbx.gz differ diff --git a/Assets/dll/shock.wbx.gz b/Assets/dll/shock.wbx.gz index 044be8c178..ac041176ae 100644 Binary files a/Assets/dll/shock.wbx.gz and b/Assets/dll/shock.wbx.gz differ diff --git a/Assets/dll/ss.wbx.gz b/Assets/dll/ss.wbx.gz index 889d236736..8a46448637 100644 Binary files a/Assets/dll/ss.wbx.gz and b/Assets/dll/ss.wbx.gz differ diff --git a/Assets/dll/turbo.wbx.gz b/Assets/dll/turbo.wbx.gz index 8dbbd0ef80..08a4c112db 100644 Binary files a/Assets/dll/turbo.wbx.gz and b/Assets/dll/turbo.wbx.gz differ diff --git a/Assets/dll/vb.wbx.gz b/Assets/dll/vb.wbx.gz index fe2ec33b44..3a59b8ebc1 100644 Binary files a/Assets/dll/vb.wbx.gz and b/Assets/dll/vb.wbx.gz differ diff --git a/waterbox/nyma/NymaCore.cpp b/waterbox/nyma/NymaCore.cpp index 9b268a5782..6c11995196 100644 --- a/waterbox/nyma/NymaCore.cpp +++ b/waterbox/nyma/NymaCore.cpp @@ -104,10 +104,10 @@ enum BizhawkFlags SkipSoundening = 2, // render at LCM * LCM instead of raw RenderConstantSize = 4, - // switch to the previous disk, if possible - PreviousDisk = 8, - // switch to the next disk, if possible - NextDisk = 16 + // open disk tray, if possible + OpenTray = 8, + // close disk tray, if possible + CloseTray = 16 }; struct MyFrameInfo: public FrameInfo @@ -118,6 +118,7 @@ struct MyFrameInfo: public FrameInfo // raw data for each input port, assumed to be MAX_PORTS * MAX_PORT_DATA long uint8_t* InputPortData; int64_t FrontendTime; + uint8_t DiscIndex; // used on close tray }; ECL_EXPORT void FrameAdvance(MyFrameInfo& frame) @@ -127,10 +128,10 @@ ECL_EXPORT void FrameAdvance(MyFrameInfo& frame) EES->skip = !!(frame.BizhawkFlags & BizhawkFlags::SkipRendering); { - auto prev = !!(frame.BizhawkFlags & BizhawkFlags::PreviousDisk); - auto next = !!(frame.BizhawkFlags & BizhawkFlags::NextDisk); - if (prev || next) - SwitchCds(prev, next); + auto open = !!(frame.BizhawkFlags & BizhawkFlags::OpenTray); + auto close = !!(frame.BizhawkFlags & BizhawkFlags::CloseTray); + if (open || close) + SwitchCds(open, close, frame.DiscIndex); } if (frame.Command) diff --git a/waterbox/nyma/cdrom.cpp b/waterbox/nyma/cdrom.cpp index 408c312228..b242fbda6b 100644 --- a/waterbox/nyma/cdrom.cpp +++ b/waterbox/nyma/cdrom.cpp @@ -117,38 +117,34 @@ void StartGameWithCds(int numdisks) 0 // orientation: flip sides on NES FDS. not used elsewhere? ); } -static bool wasPrev; -static bool wasNext; -static int cd; -void SwitchCds(bool prev, bool next) +static bool trayOpen = false; +static int curCd = 0; // -1 means no media present +void SwitchCds(bool open, bool close, int cd) { - auto newCd = cd; - if (prev && !wasPrev) - { - newCd = std::max(newCd - 1, -1); - } - if (next && !wasNext) - { - newCd = std::min(newCd + 1, (int)(CDInterfaces->size() - 1)); - } - if (newCd != cd) + if (open && !trayOpen) { Mednafen::MDFNGameInfo->SetMedia( 0, // drive: 0 unless there's more than one drive 0, // state: 0 = open, 1 = closed (media absent), 2 = closed (media present) + std::max(curCd, 0), // media: index into the disk list + 0 // orientation: flip sides on NES FDS. not used elsewhere? + ); + + trayOpen = true; + } + + if (close && trayOpen) + { + Mednafen::MDFNGameInfo->SetMedia( + 0, // drive: 0 unless there's more than one drive + cd == -1 ? 1 : 2, // state: 0 = open, 1 = closed (media absent), 2 = closed (media present) std::max(cd, 0), // media: index into the disk list 0 // orientation: flip sides on NES FDS. not used elsewhere? ); - Mednafen::MDFNGameInfo->SetMedia( - 0, // drive: 0 unless there's more than one drive - newCd == -1 ? 0 : 2, // state: 0 = open, 1 = closed (media absent), 2 = closed (media present) - std::max(newCd, 0), // media: index into the disk list - 0 // orientation: flip sides on NES FDS. not used elsewhere? - ); + + trayOpen = false; + curCd = cd; } - cd = newCd; - wasPrev = prev; - wasNext = next; } // CDInterface::Load pulls in a bunch of things that we do not want, stub them out here diff --git a/waterbox/nyma/cdrom_dummy.cpp b/waterbox/nyma/cdrom_dummy.cpp index 013d4b1b46..31463c3062 100644 --- a/waterbox/nyma/cdrom_dummy.cpp +++ b/waterbox/nyma/cdrom_dummy.cpp @@ -11,7 +11,7 @@ ECL_EXPORT void SetCDCallbacks() { abort(); } -void SwitchCds(bool prev, bool next) +void SwitchCds(bool open, bool close, int cd) { abort(); } diff --git a/waterbox/nyma/common/nyma.h b/waterbox/nyma/common/nyma.h index f1e9010c98..967758eb54 100644 --- a/waterbox/nyma/common/nyma.h +++ b/waterbox/nyma/common/nyma.h @@ -27,4 +27,4 @@ typedef void (*FrameCallback)(); void RegisterFrameThreadProc(FrameCallback threadproc); void StartGameWithCds(int numdisks); -void SwitchCds(bool prev, bool next); +void SwitchCds(bool open, bool close, int cd); diff --git a/waterbox/nyma/make-all-released-cores.sh b/waterbox/nyma/make-all-released-cores.sh index de328e99fe..a560b2875f 100755 --- a/waterbox/nyma/make-all-released-cores.sh +++ b/waterbox/nyma/make-all-released-cores.sh @@ -1,13 +1,13 @@ #!/bin/sh set -e -make -f turbo.mak $1 -j -make -f hyper.mak $1 -j -make -f ngp.mak $1 -j -make -f faust.mak $1 -j -make -f pcfx.mak $1 -j -make -f ss.mak $1 -j -make -f shock.mak $1 -j -# make -f lynx.mak $1 -j -make -f vb.mak $1 -j -# make -f wswan.mak $1 -j +make -f turbo.mak $1 -j install +make -f hyper.mak $1 -j install +make -f ngp.mak $1 -j install +make -f faust.mak $1 -j install +make -f pcfx.mak $1 -j install +make -f ss.mak $1 -j install +make -f shock.mak $1 -j install +# make -f lynx.mak $1 -j install +make -f vb.mak $1 -j install +# make -f wswan.mak $1 -j install