Commit Graph

289 Commits

Author SHA1 Message Date
da3ab3d56e Merge branch 'master' into feature/savestates-2 2020-03-07 21:23:08 +00:00
5b54a99f96 Merge pull request #5088 from zhaowenlan1779/layered-fs
core/file_sys: LayeredFS support
2020-02-25 07:48:10 +08:00
Ben
e3dbdcbdff HTTP_C::Implement Context::MakeRequest (#4754)
* HTTP_C::Implement Context::MakeRequest

* httplib: Add add_client_cert_ASN1 and set_verify

* HTTP_C: Fix request methode strings case in MakeRequest

* HTTP_C: clang-format and cleanups

* HTTP_C: Add comment about async in BeginRequest and BeginRequestAsync

* Update httplib to contain all the changes we need; adapt http_c and web_services to the changes in httplib; addressed minor review comments

* Add android-ifaddrs
2020-02-21 19:04:04 +01:00
a487016cb4 core, citra_qt: Implement a save states file format and slot UI
10 slots are offered along with 'Save to Oldest Slot' and 'Load from Newest Slot'.

The savestate format is similar to the movie file format. It is called CST (Citra SavesTate), and is basically a 0x100 byte header (consisting of magic, revision, creation time and title ID) followed by Zstd compressed raw savestate data.

The savestate files are saved to the `states` folder in Citra's user folder. The files are named like `<Title ID>.<Slot ID>.cst`.
2020-02-18 13:19:52 +08:00
9877bf7d48 Change how the boost target works; disable external warnings in MSVC 2020-02-13 17:41:20 +08:00
06891d9454 Added client/server objects 2020-02-13 17:38:16 +08:00
6940c99ed6 Added boost serialization 2020-02-13 17:27:50 +08:00
890405bb7c core/file_sys: LayeredFS implementation
This implementation is different from Luma3DS's which directly hooks the SDK functions. Instead, we read the RomFS's metadata and figure out the directory and file structure. Then, relocations (i.e. replacements/deletions/patches) are applied. Afterwards, we rebuild the metadata, and assign 'fake' data offsets to the files. When we want to read file data from this rebuilt RomFS, we use binary search to find the last data offset smaller or equal to the given offset and read from that file  (either from the original RomFS, or from replacement files, or from buffered data with patches applied) and any later files when length is not enough.

The code that rebuilds the metadata is pretty complex and uses quite a few variables to keep track of necessary information like metadata offsets. According to my tests, it is able to build RomFS-es identical to the original (but without trailing garbage data) when no relocations are applied.
2020-02-07 15:19:57 +08:00
1377be9902 file_sys: Move IPS patching code into separate source file
In anticipation of a new BPS patcher.
2019-12-22 10:46:47 +01:00
db7a627a2e Add scope acquire context to simplify MakeCurrent and DoneCurrent calls 2019-11-09 13:10:17 -07:00
b81c15941e add image interface, remove lodepng from video_core/core, address more comments, fix comments
remove unnecessary conversion
2019-11-09 12:56:21 -07:00
59b475a4b9 implement custom texture preload 2019-11-09 12:56:17 -07:00
6d90c42a79 fix crashes, add custom texture cache, load textures from load directory 2019-11-09 12:54:40 -07:00
223bfc9a2a Merge pull request #4847 from zhaowenlan1779/ipc-debugger
core, citra_qt: IPC Recorder
2019-09-21 00:04:07 -06:00
ce3459192e fixup! CMake: separate options for FFmpeg decoder/dumper 2019-08-20 14:58:43 +08:00
f8b3950829 CMake: separate options for FFmpeg decoder/dumper
Separate options are now provided for FFmpeg AAC audio decoder and FFmpeg video dumper. This allows users to configure Citra with greater freedom.

Also, previously for Linux builds, AAC decoder is accidentally enabled along with the dumper, which could potentially cause patent issues (?). This commit fixes it by only enabling video dumper.
2019-08-20 14:45:39 +08:00
a3057c968b kernel: Add IPC Recorder class
This class resides in Kernel mainly because that, it's hard for kernel objects to get references to the System (and therefore to the Recorder), while much easier for KernelSystem. If this is to be moved to System the code will likely get much more complex with System (or Recorder) references passed everywhere.
2019-08-20 03:07:25 +08:00
6c8faaf2c2 HLE: Remove BaseInterface and add ns.cpp back 2019-08-14 21:23:06 -06:00
b62ca12e88 HLE: Move NS:S into APT and remove NS 2019-08-14 21:21:33 -06:00
399a660faa core/dumping: Add FFmpeg implementation
Sorry for the large diff, the implementation is quite long, and I can't really find a good way to split it into commits.
2019-08-14 09:27:04 +08:00
3f64aaabbd core: Add video dumper interface
The VideoFrame is rotated while copying, to put the pixels in their correct positions (OpenGL seems to return the image in reverted order by default)
2019-08-13 19:28:02 +08:00
041638ea4d applets: implement HLE mii selector applet 2019-04-07 15:35:29 +02:00
7fccc995ce Initial Mic setup 2019-03-04 23:06:42 -07:00
008197a569 Remove scripting switch in cmake 2019-02-02 15:25:23 -05:00
6347b5cbb4 Remove libzmq submodule 2019-02-02 15:25:23 -05:00
d765a73a53 Scripting: reimplement protocol over plan UDP using boost::asio 2019-02-02 15:25:23 -05:00
643b7d4dcb Memory: move memory setup into MemorySystem 2018-12-10 22:01:09 -05:00
Ben
b90ff739a0 Add CheatEngine and support for Gateway cheats (#4406)
* Add CheatEngine; Add support for Gateway cheats; Add Cheat UI

* fix a potential crash on some systems

* fix substr with negative length

* Add Joker to the NonOp comp handling

* Fixup JokerOp

* minor fixup in patchop; add todo for nested loops

* Add comment for PadState member variable in HID

* fix: stol to stoul in parsing cheat file

* fix misplaced parsing of values; fix patchop code

* add missing break

* Make read_func and write_func a template parameter
2018-11-16 18:01:10 -07:00
560df843b1 Merge pull request #4405 from wwylele/svc-global
SVC: new wrapper template & pass system reference across the SVC barrier
2018-11-16 00:07:50 -05:00
aec8b1e375 SVC: use context and generic templates 2018-11-12 13:59:34 -05:00
d373a6430d SVC: move function_wrappers.h into kernel
It is only used by kernel/SVC
2018-11-12 13:59:34 -05:00
3db8915356 ldr_ro: properly map CRS/CRO buffer 2018-11-11 12:39:05 -05:00
263290d48c HLE: move SharedPage into Kernel
similar to config_mem, kernel is responsible for setting up this
2018-11-01 12:56:40 -04:00
95790218f2 HLE: move config_mem to kernel
ConfigMem is initialized in kernel and only used by kernel. It is also likely how it works on real 3DS
2018-11-01 11:21:34 -04:00
5b7d21c3cd FileSys/DelayGenerator: add missing #include and virtual dtor (#4363)
* FileSys/DelayGenerator: add missing #include and virtual dtor

Added the needed include so that it won't cause error if another file includes this without including the depended files

Deleting a virtual class via base type without virtual dtor is UB, which happens inFileBackend.

* FileSys/DelayGenerator: move function definition into cpp file/n/nTo avoid generating vtable in all units that includes the header file

* filesys/delay_generator: rearrange #include
2018-10-27 12:46:03 +08:00
6fb6737642 core/CMakeLists: Make all web_service-related libraries private
Now that all external dependencies are hidden, we can remove
json-headers from the publically linked libraries, as the use of this
library is now completely hidden from external users of the web_service
library. We can also make the web_services library private as well,
considering it's not a requirement. If a library needs to link in
web_service, it should be done explicitly -- not via indirect linking.
2018-10-23 15:43:40 +02:00
65ec8de31e web_service: hide dependencies to private 2018-10-20 10:47:17 -04:00
9901b289b6 Review comments -part 4 2018-10-20 10:35:55 -04:00
0962ab8da9 Merge pull request #4305 from wwylele/fs-global
FS/archive: wrap states into ArchiveManager class
2018-10-11 13:04:02 -04:00
7678327bf2 fs/archive: move file and directory classes to their own files 2018-10-06 01:23:03 -04:00
b067b5aa5a Implement SeedDB & Seed Crypto 2018-10-02 10:12:40 -05:00
5fb3137bdc Merge pull request #4181 from wwylele/cia-crypto
Add encrypted CIA support
2018-10-01 14:23:35 -04:00
15d44f0450 Review changes for enable/disable scripting 2018-09-23 20:13:28 -04:00
fce7afb8dc Added CMake option to enable/disable scripting support 2018-09-23 19:16:18 -04:00
df77491938 FileSys/cia: add ticket parsing 2018-09-23 13:05:55 -04:00
04dd91be82 Initial support for scripting (#4016)
* Add ZeroMQ external submodule

* ZeroMQ libzmq building on macOS

* Added RPC namespace, settings and logging

* Added request queue handling and new classes

* Add C++ interface to ZeroMQ

* Added start of ZeroMQ RPC Server implementation.

* Request construction and callback request handling

* Read and write memory implementation

* Add ID to request format and send reply

* Add RPC setting to macOS UI

* Fixed initialization order bug and added exception handling

* Working read-write through Python

* Update CMakeLists for libzmq to resolve target name conflict on Windows

* Platform-specific CMake definitions for Windows/non-Windows

* Add comments

* Revert "Add RPC setting to macOS UI"

* Always run RPC server instead of configurable

* Add Python scripting example. Updated .gitignore

* Rename member variables to remove trailing underscore

* Finally got libzmq external project building on macOS

* Add missing dependency during libzmq build

* Adding more missing dependencies [skip ci]

* Only build what is required from libzmq

* Extra length checks on client input

* Call InvalidateCacheRange after memory write

* Revert MinGW change. Fix clang-format. Improve error handling in request/reply. Allow any length of data read/write in Python.

* Re-organized RPC static global state into a proper class. [skip ci]

* Make sure libzmq always builds in Release mode

* Renamed Request to Packet since Request and Reply are the same thing

* Moved request fulfillment out of Packet and into RPCServer

* Change request thread from sleep to condition variable

* Remove non-blocking polling from ZMQ server code. Receive now blocks and terminates properly without sleeping. This change significantly improves script speed.

* Move scripting files to dist/ instead of src/

* C++ code review changes for jroweboy [skip ci]

* Python code review changes for jroweboy [skip ci]

* Add docstrings and tests to citra.py [skip ci]

* Add host OS check for libzmq build

* Revert "Add host OS check for libzmq build"

* Fixed a hang when emulation is stopped and restarted due to improper destruction order of ZMQ objects [skip ci]

* Add scripting directory to archive packaging [skip ci]

* Specify C/CXX compiler variables on MinGW build

* Only specify compiler on Linux mingw

* Use gcc and g++ on Windows mingw

* Specify generator for mingw

* Don't specify toolchain on windows mingw

* Changed citra.py to support Python 3 instead of Python 2

* Fix bug where RPC wouldn't restart after Stop/Start emulation

* Added copyright to headers and reorganized includes and forward declarations
2018-09-11 22:00:12 +02:00
63c7b44ba8 kernel: Move object class to its own source files
General moving to keep kernel object types separate from the direct
kernel code. Also essentially a preliminary cleanup before eliminating
global kernel state in the kernel code.
2018-08-23 17:31:59 +02:00
d4a808c885 ncch_container: support encrypted games 2018-08-07 18:53:06 +03:00
5a4ed10982 service/csnd: Moved into csnd folder and stubbed a few functions (#4006)
* service/csnd: Moved into csnd folder and stubbed a few functions

* service/csnd: Addresed comment about missing rb.Skip
2018-07-27 11:25:20 +03:00
081becc9f5 service/ps: Boilerplate to register service, no functions implemented 2018-07-25 02:25:51 -04:00