Commit Graph

56 Commits

Author SHA1 Message Date
Léo Lam
fdfe57a49b IOS: Implement MIOS functionality
This implements MIOS's PPC bootstrapping functionality, which enables
users to start a GameCube game from the Wii System Menu.

Because we aren't doing Starlet LLE (and don't have a boot1), we can
just jump to MIOS when the emulated software does an ES_LAUNCH or uses
ioctlv 0x25 to launch BC.

Note that the process is more complex on a real Wii and goes through
several more steps before getting to MIOS:

* The System Menu detects a GameCube disc and launches BC (1-100)
  instead of the game. [Dolphin does this too.]

* BC, which is reportedly very similar to boot1, lowers the Hollywood
  clock speed to the Flipper's and then launches boot2.

* boot2 sees the lowered clock speed and launches MIOS (1-101) instead
  of the System Menu.

MIOS runs instead of IOS in GC mode and has an embedded GC IPL (which
is the code actually responsible for loading the disc game) and a PPC
bootstrap code. To get things working properly, we simply need to load
both to memory, then jump to the bootstrap code at 0x3400.

Obviously, because of the way this works, a real MIOS is required.
2017-02-08 15:07:34 +01:00
Léo Lam
fd49a1b2d5 Get rid of GetUsbPointer for emulated Bluetooth
It held a raw pointer to a IOS::HLE::Device::BluetoothEmu that is not
guaranteed to exist (and of course, nothing checked that it wasn't
nullptr), but what is more, it's totally unnecessary because we have
IOS::HLE::GetDeviceByName().

Since we cannot always inform the host that Wii remotes are
disconnected from ES, that is now done in BluetoothEmu's destructor.
2017-02-08 15:07:33 +01:00
Léo Lam
5fd5eeb82a IOS/ES: Don't write anything to the request after ES_Launch
Unless IOS failed at ES_Launch, it doesn't appear to write anything
back to the request after a launch, because the request is never
actually replied to in the normal way.

So let's just drop the writes to make things less confusing.
2017-02-08 15:07:33 +01:00
Léo Lam
9e6f5b203e IOS/ES: Implement ioctlv 0x25 (ES_LaunchBC)
This ioctlv is used to launch BC. Not sure if that's useful,
since only the system menu is known to launch BC and it does that
through a regular ES_LAUNCH; but let's implement it anyway.

(Implementation based on IOS59.)
2017-02-08 15:07:32 +01:00
Léo Lam
ab38be1ee2 IOS: Clarify Init, Reinit, Reset, Shutdown
Some minor changes to make things slightly less confusing:

* Reinit doesn't actually init anything. It just adds static devices to
  the map, so let's give it an actually descriptive name. And let's not
  expose it in the header when it should not be.

* Reset's parameter name was changed from "force" -- which totally does
  not describe what it does -- to "clear_devices".

* Add a reload function which handles the reload process properly
  (reset all devices, set up memory values, re-add devices) and
  without publicly exposing implementation details.
2017-02-08 15:07:29 +01:00
JosJuice
99492c22a6 Merge pull request #4839 from leoetlino/better-warnings
Be less annoying when usbdk is not installed
2017-02-08 14:00:12 +01:00
Matthew Parlane
f838d16b0c Merge pull request #4546 from RisingFog/tas_wii_nand
Copy Wii save for current game for Netplay and TAS
2017-02-08 18:58:28 +13:00
Matthew Parlane
dac6a66252 Merge pull request #4769 from lioncash/settingshandler
SettingsHandler: Minor cleanup
2017-02-08 18:15:37 +13:00
Léo Lam
e7b6b87ffe IOS: Fix Wi-Fi scanning in system menu
The second output vector should not be written to for
IOCTLV_NCD_READCONFIG. If it is, the system menu will never attempt
to open /dev/net/wd/command and request a Wi-Fi scan.
2017-02-08 00:43:38 +01:00
Michael Maltese
58f01e60d6 ES: use PRIx64 to print m_addtitle_tmd.GetTitleId()
Fixes a warning on macOS with Clang.
2017-02-06 20:31:28 -08:00
Léo Lam
b6d526ba2e IOS: Do not init libusb unless passthrough is enabled 2017-02-07 00:47:21 +01:00
Léo Lam
f5a3aac8e1 IOS: Check if libusb can be used instead of asserting
This prevents panic alerts from showing up three times when starting
Wii emulation whenever libusb could not be initialized. The user has
already seen a warning at startup -- no need to warn them 3 more times.
2017-02-06 22:09:43 +01:00
Matthew Parlane
d244597b42 Merge pull request #4408 from leoetlino/usb
IOS: USB support (OH0, USB_VEN, USB_HID)
2017-02-07 09:17:05 +13:00
Chris Burgener
5224771dac Copy Wii save for current game for Netplay and TAS 2017-02-05 13:17:05 -05:00
Léo Lam
b63b6111b3 IOS: Implement USB_VEN (/dev/usb/ven) 2017-02-05 11:36:49 +01:00
Léo Lam
c9f4889437 IOS: Re-implement USB_HIDv4 (/dev/usb/hid)
This reimplements the USB HID v4 IOS device using the new common
USB code (to reuse more code and allow emulated HIDs to be added
more easily in the future).

The main difference is that HIDs now have to be whitelisted, like
every other USB device for OH0 and VEN.
2017-02-05 11:36:49 +01:00
Léo Lam
ee188a1d5a IOS: Implement OH0 (/dev/usb/oh0) 2017-02-05 11:36:48 +01:00
Léo Lam
c8a6dc6c23 Use a single libusb context
libusb on Windows is limited to only a single context. Trying to open
more than one can cause device enumerations to fail randomly.

libusb is thread-safe and we don't use the manual polling support (with
`poll()`) so this should be safe.
2017-02-05 11:36:48 +01:00
Léo Lam
73e55ccf44 IOS: Add base Host and USB::Device classes
The Host class will be used by the OH0, VEN and HID implementations
as the base class for the IOS HLE device. It handles scanning devices,
detecting device changes and everything that will be needed for OH0,
VEN and HID to be implemented, while mostly abstracting libusb away.

The Device class is for actual USB devices. This commit adds a
LibusbDevice which interacts with a real USB device and enables
USB passthrough.
2017-02-05 11:36:47 +01:00
Léo Lam
b8c651eac4 IOS: Store the active IOS title ID
This allows us to get back the current active IOS version and expose
only devices which exist/can be used in that version.
2017-02-05 11:36:47 +01:00
Léo Lam
e246afb049 IOS: Add UpdateWantDeterminism to devices
This will be useful for the USB devices to disconnect and hide any real
devices when Core::g_want_determinism is true.
2017-02-05 11:36:47 +01:00
JosJuice
e572fb102f Move ES_DIVerify's Movie-related code to a more logical place 2017-02-03 19:53:35 +01:00
JosJuice
6aa41ebc55 Movie: Put Wii s_bClearSave handling in a more logical place 2017-02-03 19:53:23 +01:00
JosJuice
88e0a5e418 Don't call Movie::SetTitleId from ES
Movie basically just wants to get the title ID of
the initally booted game, so let's set the title ID in
ConfigManager at boot like we do with the regular game ID.

Aside from being cleaner, this should make the approach to
title IDs compatible with booting non-disc software (WADs).
2017-02-03 19:52:25 +01:00
Mat M
6fd0e96ea3 Merge pull request #4785 from lioncash/ios-fs
IOS FS: Move behavior to separate functions
2017-01-31 22:28:42 -05:00
Sepalani
3fd08b6cee Fixes a crash when closing a socket 2017-02-01 00:11:19 +00:00
Lioncash
1801180a30 IOS STM: Get rid of forward declarations in the cpp file
Forward declaring functions from a completely different header inside a cpp
file can lead to linker errors. Forward declaring also doesn't really
provide any benefit within cpp files unless it's to bring an internally
linked function within the same file into scope.
2017-01-29 19:30:56 -05:00
Lioncash
d2da1897e7 IOS FS: Move behavior to separate functions 2017-01-29 18:32:59 -05:00
Matthew Parlane
e823a9d80c Merge pull request #4779 from lioncash/fileio
IOS FileIO: Move GetFileStats code to its own function
2017-01-29 21:53:11 +13:00
Lioncash
926c9f995a ec_wii: Amend function casing 2017-01-28 18:46:14 -05:00
Lioncash
650071c3e4 ec_wii: Make getter functions const member functions 2017-01-28 18:45:56 -05:00
Lioncash
4c31bfef76 FileIO: Correct printf specifier in GetFileStats 2017-01-28 17:43:19 -05:00
Lioncash
6f0cabb1c5 FileIO: Move GetFileStats code to its own function 2017-01-28 17:41:40 -05:00
Mat M
66160c2781 Merge pull request #4743 from lioncash/es
ES: Separate IOCtlV code out into constituent functions
2017-01-28 15:33:34 -05:00
Lioncash
98291cd843 SettingsHandler: Add Open and Save member functions 2017-01-27 10:29:49 -05:00
Matthew Parlane
64b0773fc0 Merge pull request #4651 from leoetlino/bt-pass-savestates
Fix savestates in Bluetooth passthrough mode
2017-01-27 18:07:33 +13:00
Lioncash
ac973e61bb ES: Separate behavior of IOCtlV into separate functions
This function is exceptionally large. Everything within a switch like this
also makes it quite error prone. Separating the functions out makes it
easier to change a certain request implementation as well as improving
code locality.
2017-01-25 19:39:22 -05:00
Lioncash
3c88c248dd ES: Convert typedef into a using alias 2017-01-25 19:31:13 -05:00
Lioncash
3cf3b50ab0 ES: Minor header reorganization
Places elements in the order:
- Structs/Enums definitions
- Functions
- Member variables
2017-01-25 19:31:13 -05:00
booto
c889c81d8f 58 is 0x3a in hex, not 0x31 2017-01-26 01:52:10 +08:00
Léo Lam
0df2ca702b IOS: Get rid of static state in BT passthrough 2017-01-25 15:31:28 +01:00
Léo Lam
18957bdb0a IOS: Fix savestates for Bluetooth passthrough
This fixes savestates when using Bluetooth passthrough by keeping track
of pending transfer commands and discarding them on state load, so that
the emulated software receives a reply to IOS requests as expected.

With this change, savestates in BT passthrough should work as long as
no Wiimote is connected when creating the savestate and when
restoring it. Yes, I know this is an important limitation -- but
that is probably the best we can do, and it's still better than
completely broken savestates.
2017-01-25 15:31:28 +01:00
booto
d16ca2e5c8 Load IOS from TMD when launching non-IOS title. 2017-01-25 01:11:48 -05:00
booto
3ba388138d Set up IOS RAM information area with real values. 2017-01-24 09:48:21 -05:00
Matthew Parlane
f70a1a27fa Merge pull request #4726 from ligfx/addingwindowsheaders
Fix building without PCH on Windows
2017-01-24 13:47:36 +13:00
Léo Lam
0d8ddfb7d9 TMDReader: Add a way to get the required IOS version 2017-01-23 17:44:24 +01:00
Lioncash
fd772f6726 ES: Move the key table into the cpp file
This is a static implementation detail, so there's no need to bind it to the class directly.

This also makes the tables read-only.
2017-01-23 08:16:28 -05:00
Michael Maltese
713ec5ffd5 Add includes for building on Windows without PCH 2017-01-23 01:37:41 -08:00
Léo Lam
6291cd0bce IOS: STM: Save event hook to savestates
This allows a STM event hook to be saved and restored correctly and
fixes the power/reset button after loading a state in some cases.
2017-01-22 17:29:39 +01:00
Matthew Parlane
83dc03416e Merge pull request #4690 from leoetlino/common-usb
IOS: Move out common USB structures
2017-01-21 12:33:06 +13:00