Commit Graph

116 Commits

Author SHA1 Message Date
Lioncash
b676edd80c Core: include what you use
Eliminates a swath of indirectly included standard headers
2017-06-07 01:20:48 -04:00
Léo Lam
d50b4406a6 Boot: Restore symbol map loading 2017-06-06 16:40:00 +02:00
Léo Lam
d0169fe8db Boot: Re-use the disc volume
Saves some disc IO.
2017-06-06 16:31:16 +02:00
Léo Lam
6f6a18b1b0 Boot: Remove unneeded manual HLE function scan
Not needed. And the symbols would get overwritten by the symbol map
load that is just below.
2017-06-06 16:30:55 +02:00
Léo Lam
065261dbad Boot: Unify the ELF and DOL code paths
They're essentially the same. To achieve this, this commit unifies
DolReader and ElfReader into a common interface for boot executable
readers, so the only remaining difference between ELF and DOL is
how which volume is inserted.
2017-06-06 16:30:54 +02:00
Léo Lam
22992ae41e Boot: Clean up the boot code
* Move out boot parameters to a separate struct, which is not part
  of SConfig/ConfigManager because there is no reason for it to
  be there.

* Move out file name parsing and constructing the appropriate params
  from paths to a separate function that does that, and only that.

* For every different boot type we support, add a proper struct with
  only the required parameters, with descriptive names and use
  std::variant to only store what we need.

* Clean up the bHLE_BS2 stuff which made no sense sometimes. Now
  instead of using bHLE_BS2 for two different things, both for storing
  the user config setting and as a runtime boot parameter,
  we simply replace the Disc boot params with BootParameters::IPL.

* Const correctness so it's clear what can or cannot update the config.

* Drop unused parameters and unneeded checks.

* Make a few checks a lot more concise. (Looking at you, extension
  checks for disc images.)

* Remove a mildly terrible workaround where we needed to pass an empty
  string in order to boot the GC IPL without any game inserted.
  (Not required anymore thanks to std::variant and std::optional.)

The motivation for this are multiple: cleaning up and being able to add
support for booting an installed NAND title. Without this change, it'd
be pretty much impossible to implement that.

Also, using std::visit with std::variant makes the compiler do
additional type checks: now we're guaranteed that the boot code will
handle all boot types and no invalid boot type will be possible.
2017-06-06 16:27:52 +02:00
JosJuice
b2af07a7b7 DiscIO: Remove C/I/S prefixes from class names
These prefixes were inconsistent with the rest of Dolphin.

I'm also renaming VolumeWiiCrypted to VolumeWii because of 1113b13.
2017-06-06 12:31:59 +02:00
JosJuice
c3fa0d6edf DiscIO: Use std::optional in Volume and Blob 2017-06-05 13:26:51 +02:00
Leo Lam
f4190ab1c4 Merge pull request #5465 from sepalani/gc-bios
Tools: Load GameCube BIOS added
2017-05-26 10:23:03 +02:00
Markus Wick
e2d4fe6881 Merge pull request #5421 from JosJuice/load-bs2-setupbat
Use SetupBAT in Load_BS2
2017-05-23 14:40:11 +02:00
Sepalani
95ea721f06 Tools: Load GameCube BIOS added 2017-05-22 22:44:21 +01:00
JosJuice
ac5c82b36b DiscIO: Remove VolumeCreator
This file is pretty small now that it doesn't handle Wii
partitions anymore, so let's move its contents to Volume.cpp.
This is also more consistent with how blob creation works.
2017-05-19 18:33:21 +02:00
JosJuice
19b8f1c10a VolumeWiiCrypted: Replace ChangePartition with a partition parameter
By removing mutable state in VolumeWiiCrypted, this change makes
partition-related code simpler. It also gets rid of other ugly things,
like ISOProperties's "over 9000" loop that creates a list of
partitions by trying possible combinations, and DiscScrubber's
volume swapping that recreates the entire volume when it needs to
change partition.
2017-05-16 22:58:15 +02:00
JosJuice
1e56972e4f Make Load_BS2's MSR poking more readable 2017-05-14 23:56:19 +02:00
JosJuice
a6283f6eec Use SetupBAT in Load_BS2 2017-05-14 23:56:19 +02:00
JosJuice
4726c9075f Split SetupBAT into SetupMSR and SetupBAT 2017-05-14 23:56:19 +02:00
JosJuice
486de022df Don't run EmulatedBS2_Wii with VolumeDirectory
VolumeDirectory doesn't support necessities like TMDs,
so thanks to 5.0-2172 (18968ab), EmulatedBS2_Wii crashes
when the inserted disc is a VolumeDirectory.
This commit fixes that.

This commit makes our DOL booting code very similar to our
ELF booting code. One exception is that the DOL booting
code still always calls SetupBAT. (Note that EmulatedBS2_GC
calls SetupBAT even if no disc is inserted.) I'm not sure
if there's a point to the difference, but I thought I'd
better avoid changing it so that I don't break anything.
2017-05-14 22:01:36 +02:00
Leo Lam
2fca1b925f Merge pull request #4241 from JosJuice/remove-getvolume
Remove DVDInterface::GetVolume
2017-05-14 21:46:28 +02:00
JosJuice
41b3b05cfe Use SetupBAT in Boot_ELF
Sigh...
2017-05-14 15:18:58 +02:00
JosJuice
5a55957741 Boot: Pass volume as argument to functions
Avoids using DVDInterface's global state in the boot process.
2017-05-14 13:29:47 +02:00
JosJuice
807e242d05 DVDInterface: Replace SetVolume functions
It's better to just let the calling code provide a volume
object instead of needing one SetVolume for each way of
creating a volume. This simplifies InsertDiscCallback and
is needed for the following commits.
2017-05-13 22:56:11 +02:00
JosJuice
9e8293f5e3 Boot: Small simplifications and formatting cleanup 2017-05-13 12:13:33 +02:00
JosJuice
42370e4b5b Use console-appropriate SetupBAT when booting DOL files 2017-05-13 09:24:06 +02:00
JosJuice
5e1fb1a596 Boot: Deduplicate code by creating a SetupBAT function 2017-05-12 17:53:15 +02:00
Mat M
7c3905a612 Merge pull request #5140 from sepalani/signature_db
SignatureDB: Rewrite FormatHandler API
2017-05-02 19:23:46 -04:00
Léo Lam
2fc5047d26 IOS: Convert the IOS kernel HLE code to a class
This changes the main IOS code (roughly the equivalent of the kernel)
to a class instead of being a set of free functions + tons of static
variables.

The reason for this change is that keeping tons of static variables
like that prevents us from making an IOS instance and reusing IOS
code easily.

Converting the IOS code to a class also allows us to mostly decouple
IOS from the PPC emulation.

The more interesting changes are in Core/IOS/IOS. Everything else is
mostly just boring stuff required by this change...

* Because the devices themselves call back to the main IOS code
  for various things (getting the current version, replying to a
  request, and other syscall-like functions), just like processes in
  IOS call kernel syscalls, we have to pass a reference to the kernel
  to anything that uses IOS syscalls.

* Change DoState to save device names instead of device IDs to simplify
  AddDevice() and get rid of an ugly static count.

* Change ES_Launch's ack to be sent at IOS boot, now that we can do
  this properly.
2017-04-30 17:18:53 +02:00
Léo Lam
f56a9b660d Merge pull request #5077 from ds84182/volume_directory_off_by_uno
Fix VolumeDirectory for Wii games
2017-04-29 23:57:32 +02:00
Sepalani
d20a404a87 BootWiiWAD: Prevents SymbolMap loading 2017-04-29 20:00:13 +01:00
Sepalani
82afda94f4 SignatureDB: Use explicit construction 2017-04-29 19:50:20 +01:00
Dwayne Slater
ec9579ebcd Boot: When loading an FST for a Wii game, update IOS_MEM1_ARENA_END
Without doing this, Wii games loaded as an ELF will zero out the FST.
This mirrors the behavior of the actual apploader.
2017-04-15 14:03:38 -04:00
Mat M
21544f8661 Merge pull request #5228 from JosJuice/why-did-this-exist
Get rid of some nonsense related to booting DOL/ELF files
2017-04-12 08:07:54 -04:00
Sepalani
20a9c5b12d HLE: Add PatchFixedFunctions() function 2017-04-09 14:02:34 +01:00
Mat M
ab18eba9de Merge pull request #5105 from lioncash/namespace
EXI: Namespace device classes
2017-04-08 17:12:56 -04:00
JosJuice
9d73196e4f Boot: Make default ISO code for DOLs consistent with ELFs 2017-04-08 18:52:39 +02:00
JosJuice
0b78386044 Boot: Allow setting a default ISO for Wii DOLs
I have no idea why there was a special case preventing this...
2017-04-08 18:52:33 +02:00
JosJuice
6263830d6d Boot: Always emulate BS2 once when booting a DOL
The old code could do it 0, 1 or 2 times.
2017-04-08 18:52:12 +02:00
JosJuice
31eec8c75b Boot: Remove useless check
No disc is inserted at this point, so IsDiscInside is always false.
2017-04-08 18:45:01 +02:00
Sepalani
eb45ea5f7f Boot: Prevent ELF to be considered as a disc 2017-04-08 00:04:50 +01:00
JosJuice
f106ba70d4 Move DVD code to a new directory 2017-03-31 17:27:23 +02:00
Lioncash
44fb429e7e EXI: Namespace device classes 2017-03-18 21:13:12 -04:00
BhaaL
1470c346b6 change parameter names to match our coding style while we're at it 2017-03-16 18:22:51 +01:00
BhaaL
d0d91f2530 add the hash for the PAL v1.1 BIOS
reported on the forums by user hackintoshftw1
2017-03-16 18:22:51 +01:00
BhaaL
70a25bef4c put the source reference onto its own line to avoid the awkward formatting
also, make them constexpr, because i guess it makes sense...
2017-03-16 18:22:51 +01:00
JosJuice
09682cfaa4 Move LoadPatches calls
LoadPatches was apparently never being called when booting
Wii discs. Maybe this will fix the recent regression with
cheat codes not getting loaded? I don't know how this
managed to work to begin with, though...

(The call was also moved for WADs, just for consistency.)
2017-03-13 22:29:55 +01:00
JosJuice
a176bf0229 DVDInterface: Remove VolumeIsValid
It's the same as IsDiscInside.
2017-03-08 19:27:00 +01:00
JosJuice
0abf875a3f DVDInterface: Call SetDiscInside when setting volume
SetDiscInside is an implementation detail that callers shouldn't
have to call on their own.
2017-03-08 18:35:40 +01:00
Léo Lam
4d776ffa8f IOS/ES: Keep track of the active title properly
This changes ES to keep track of the active title properly,
just like IOS:

* It is NOT changed on resource manager open/close.
* It is reset on IOS reload.
* It is changed by ES_DIVerify and ES_Launch.

IOS stores the active title in a structure like this:

    struct ESTitleContext
    {
      Ticket* ticket;
      TMD* tmd;
      u32 active;
    };

With this commit, we also do keep the Ticket and TMD around. This
makes some of the DI ioctlvs (which return data about the current
active title) trivial to implement in the future.

This fixes the System Menu not being able to see update partitions
and also allows us to change Dolphin's active game info in the future.
2017-03-02 20:28:01 +01:00
Léo Lam
c1a139e8ac Use ESFormats for TMDs
We already have a TMDReader, so let's actually use it.

And move ESFormats to IOS::ES, since it's definitely part of IOS.
This adds a DiscIO dependency on Core which will be fixed in a
follow-up PR.
2017-02-26 19:46:29 +01:00
Lioncash
921ab22cb7 Boot: Remove unused game ID string 2017-02-12 07:55:49 -05:00
Léo Lam
328359118c Fix booting Wii DOLs
We did not set up any kind of constants in memory for Wii DOLs or even
initialize IOS, so a lot of homebrew would just crash when opening ES.
2017-02-10 19:14:34 +01:00