From bb8a7fec6e9348e170bc67f748d871edb35f7ec2 Mon Sep 17 00:00:00 2001 From: Diamond Rivero Date: Fri, 26 Jul 2024 11:38:02 +0800 Subject: [PATCH] cleanup repo --- README.md | 176 ++++-------------------------------------- _config.yml | 3 - _layouts/default.html | 36 --------- images/pspdev.ico | Bin 81262 -> 0 bytes 4 files changed, 15 insertions(+), 200 deletions(-) delete mode 100644 _config.yml delete mode 100644 _layouts/default.html delete mode 100644 images/pspdev.ico diff --git a/README.md b/README.md index 688b666..0a80004 100644 --- a/README.md +++ b/README.md @@ -1,176 +1,30 @@ -PSPLINK allows you to start and debug homebrew for the Playstation Portable through USB. This can speed up development and make finding out what is causing a crash or bug easier. This page explains how to set it up and use it. - -# Getting started - -## Install the PSPDEV toolchain - -To get PSPLINK up and running, first the PSPDEV toolchain will need to be installed. This should contain the tools for the PC. So follow the instructions [here](https://pspdev.github.io/) first! - -## Setup - -Each system involved in the use of PSPLINK requires a bit of setup for it to work. This includes both PSP and PC. Below are instructions for both. - -### PSP - -Download the latest version of PSPLINK for the PSP [here](https://github.com/pspdev/psplinkusb/releases/download/latest/psplink.zip) and extract it in ``ms0:/PSP/GAME`` on the PSP memory card. - -### PC - -Depending on the operating system used the setup on PC is different. Follow the on below which is relevant to your system. - -#### Windows - -On Windows a driver needs to be installed before PSPLINK can be used. To do this take the following steps: - -1. Make sure the programs ``usbhostfs_pc`` and ``pspsh`` are available in cmd. Otherwise download them [here](https://github.com/pspdev/psplinkusb/releases/download/latest/pspsh-windows.zip). -2. Start PSPLINK on the Playstation Portable and connect it to the computer through USB. -3. Download [Zadig](https://zadig.akeo.ie/) and start it. It will ask if you want to run it as administrator, click yes. -4. In Zadig, click on ``options`` -> ``List All Devices``. -5. Select the entry ``"PSP" type B`` from the dropdown list. -6. Left of driver, select the ``libusb-win32`` driver. Then click install. -7. Wait for the installation to finish, then disconnect the USB cable from the PSP. - -Now PSPLINK can be used with Windows. See below how to do that. - -#### Linux - -With Linux PSPLINK will work without making any changes, but it will require using sudo for the ``usbhostfs_pc`` command. To make it work without sudo, a udev rule can be added. - -To make using PSPLINK without sudo create file called ``/etc/udev/rules.d/50-psplink.rules`` (for example with ``sudo nano /etc/udev/rules.d/50-psplink.rules``) and add the following content: - -``` -SUBSYSTEM=="usb", ATTR{idVendor}=="054c", ATTR{idProduct}=="01c9", SYMLINK+="psp", MODE="0666" -``` - -Save this, in Nano this can be done with Ctrl+O and pressing enter. The run the following command: - -``` -sudo udevadm control --reload -``` - -Now PSPLINK can be used without sudo. See below how to do that. - -## Using PSPLINK - -To be able to use PSPLINK with Playstation Portable homebrew, the homebrew will need to be build into an unencrypted ``.prx`` file. This can be done by running CMake like ``psp-cmake -DBUILD_PRX=1 .`` or if you're using a Makefile by adding ``BUILD_PRX=1`` to it. Then build the homebrew. - -In the build directory, open a terminal and run the following program: - -``` -usbhostfs_pc -``` - -Keep this running! - -Then open another terminal window and run the following there: - -``` -pspsh -``` +# Introduction -Now we can simply start our homebrew on the PSP by running the following command in the pspsh window: - -``` -./myhomebrew.prx -``` - -Replace myhomebrew with the name of the ``.prx`` file which was generated. - -When you're done with the current build, just run ``reset``, rebuild the homebrew and try again. - -Options available can be found when using the ``help`` command, but here are some notable ones: - -- ``scrshot screenshotname.bmp`` for taking a screenshot. -- ``exit`` for closing PSPLINK on the PSP. -- ``poweroff`` for shutting down the PSP. - -## Debugging crashes - -When a crash happens a crash log will be shown with a hint of what might have happened at the top and some additional info. If you wish to figure out where the crash happened, only the address is needed. - -To figure out where the crash happened, open another terminal in the build directory and use the address shown by PSPLINK in the following command: - -``` -psp-addr2line -e myhomebrew address -``` - -Replace ``address`` with the actual adress and replace myhomebrew with the name of the elf file. This is **NOT** the ``.prx`` file and either has no extension or ``.elf`` depending on the build system used. - -If no result is returned, make sure to build with the ``-g`` or``-g3`` option to make sure psp-addr2line knowns the function names and locations. - -## Debugging with GDB - -Sometimes debugging with the built in instruction level debugger is not enough, this is where -PSPLINK's GDB Server can come in handy. - -Let's get started: - -### Preparation - -Prepare a separate terminal for `usbhostfs_pc`, `pspsh` and `psp-gdb`. Open all of them in the directory in which your compiled `.prx` and the `elf` (PSP binary) files are located. - -### 1. usbhostfs_pc - -Run `usbhostfs_pc` on your terminal dedicated for `usbhostfs_pc` and you will see the `waiting for device...` status. - -Now start the PSPLINK app on your PSP and connect the USB cable. You should see the `connected to device` status in the terminal, which means success. - -**Do not close this terminal after that.** - -### 2. pspsh - -Run `pspsh` on your terminal dedicated for `pspsh` and you will see the `host0:/>`. Now run `debug file.prx`, and it will display something like this: +PSPLINK allows you to start and debug homebrew for the Playstation Portable through USB. This can speed up development and make finding out what is causing a crash or bug easier. This page explains how to set it up and use it. -> You need to replace `file.prx` with the file you need to debug. PRX file not ELF. +# Usage -```sh -PSPLink USB GDBServer (c) 2k7 TyRaNiD -host0:/> Loaded host0:/ - UID 0x0408A763, Entry 0x088040AC -``` +The usage of psplinkusb was migrated, check it out [here](https://pspdev.github.io/debugging.html). -It means the debuggee is succesfully loaded. You can type `reset` if there's something wrong with your GDBServer. +## Full manual -### 3. psp-gdb +If you need any additional information, check out the [complete online manual](psplink_manual.pdf). -In a new terminal run `psp-gdb file -q` and you will see something like this: +# Building from source -> You need to replace `file` with the elf file of the program you're trying to debug. It has the same name as the file loaded in pspsh, but without the `.prx` ending. +Requirement: [PSPSDK](https://github.com/pspdev/pspsdk) -> Check if your binary has enabled the debug symbols required for debugging by using `objdump --syms` command and should produce an output but if it says `no symbols` then it is disabled(You can enable it by adding `-g` option to gcc). +Get it using git: -```sh -Reading symbols from ... -(gdb) +```bash +git clone https://github.com/pspdev/psplinkusb.git && cd psplinkusb ``` -> `` is the name of your current debuggee. -then type the `target remote :10001` to connect to your GDBServer and you will see the gdb output something like this: +Build it: -```sh -Remote debugging using :10001 -_start (args=0, argp=0x0) at crt0_prx.c:103 -103 if (&sce_newlib_nocreate_thread_in_start != NULL) { -(gdb) +```bash +make all ``` -This will display the `_start` routine, it means you succesfully connected and ready to the debug your app! - -Here are a few useful commands for getting around in psp-gdb: -- `b` or `break` - for setting breakpoints -- `c` or `continue` - for resuming program execution until the next breakpoint or program completion -- `s` or `step` - for executing the current line and, if it contains a function call, step into that function -- `n` or `next` - for executing the current line, but if it contains a function call, step over it without diving into the function -- `f` or `finish` - for executing the remaining lines of the current function and return to the caller -- `bt` or `backtrace` - for getting stacktrace -- `p $var` or `print $var` - for displaying the value of specific variable -- `i r` or `info registers` - for displaying the contents of CPU registers -- `d` or `delete` - for deleting all breakpoints -- `q` or `quit` - for exiting from psp-gdb - -You can type `help` for more information about the psp-gdb commands. - -## Full manual - -If you need any additional information, check out the [complete online manual](psplink_manual.pdf). # License @@ -180,4 +34,4 @@ If you need any additional information, check out the [complete online manual](p - (c) John_K 2005 - (c) pspdev 2010-2020 -PSPLINK is licensed under the BSD license, see LICENSE file for details. +PSPLINK is licensed under the BSD license, see [LICENSE](LICENSE) file for details. diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 6b5f897..0000000 --- a/_config.yml +++ /dev/null @@ -1,3 +0,0 @@ -theme: jekyll-theme-hacker -title: PSPLINK -description: A homebrew debugging toolkit for the Playstation Portable \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 897e0d3..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - {{ page.title | default: site.title | default: site.github.repository_name }} - - - - -
-
- -

{{ page.title | default: site.title | default: site.github.repository_name }}

-
-

{{ page.description | default: site.description | default: site.github.project_tagline }}

- -
- Download - Documentation - PSPDEV - Discord - GitHub -
-
-
- -
-
- {{ content }} -
-
- - diff --git a/images/pspdev.ico b/images/pspdev.ico deleted file mode 100644 index cfcee182fcce8231b8a2041ba78d2dc9bd7a7ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81262 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 J|37!&zX9!gOiTa(