mirror of
https://github.com/Ed94/pikuma_ps1.git
synced 2026-07-13 04:41:26 -07:00
95 lines
3.2 KiB
PowerShell
95 lines
3.2 KiB
PowerShell
# scripts/launch_pcsx_debug.ps1
|
|
#
|
|
# One-shot launcher for debug sessions: starts pcsx-redux with the .ps-exe
|
|
# loaded, the gdb stub enabled, AND the pcsx_debug_helper Lua plugin loaded
|
|
# so external CLI tools (gdb's `shell` command, etc.)
|
|
# can read GTE state via http://localhost:8080/api/v1/lua/gte
|
|
# (the gdb stub doesn't expose COP2 at all).
|
|
#
|
|
# usage:
|
|
# .\scripts\launch_pcsx_debug.ps1
|
|
# .\scripts\launch_pcsx_debug.ps1 -ExePath build\hello_gte.ps-exe
|
|
# .\scripts\launch_pcsx_debug.ps1 -HelperZip scripts\pcsx_debug_helper.zip
|
|
#
|
|
# After launch:
|
|
# - gdb: target remote localhost:3333
|
|
# - web: curl http://localhost:8080/api/v1/lua/gte
|
|
#
|
|
# Companion: scripts/debug_psyq.ps1 (bare launch — no .ps-exe, no helper).
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[string]$PcsxPath = (Join-Path $PSScriptRoot '..\toolchain\pcsx-redux\vsprojects\x64\Release\pcsx-redux.exe'),
|
|
[string]$ExePath = (Join-Path $PSScriptRoot '..\build\hello_gte.ps-exe'),
|
|
[string]$HelperZip = (Join-Path $PSScriptRoot 'pcsx_debug_helper.zip'),
|
|
[int] $GdbPort = 3333,
|
|
[int] $WebPort = 8080
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
# ── Pre-checks ──
|
|
foreach ($p in @($PcsxPath, $ExePath, $HelperZip)) {
|
|
if (-not (Test-Path $p)) {
|
|
Write-Error "Missing: $p"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Kill any existing pcsx-redux so the archive file isn't locked.
|
|
Get-Process pcsx-redux -ErrorAction SilentlyContinue | Stop-Process -Force
|
|
Start-Sleep -Seconds 2
|
|
|
|
# ── Launch ──
|
|
$absExe = [System.IO.Path]::GetFullPath($ExePath)
|
|
$absZip = [System.IO.Path]::GetFullPath($HelperZip)
|
|
|
|
$args = @(
|
|
'-gdb', '-run'
|
|
'-loadexe', "`"$absExe`""
|
|
'-archive', "`"$absZip`""
|
|
)
|
|
|
|
Write-Host "Launching pcsx-redux..." -ForegroundColor Cyan
|
|
Write-Host " ps-exe : $absExe"
|
|
Write-Host " helper zip: $absZip"
|
|
Write-Host " gdb : localhost:$GdbPort"
|
|
Write-Host " web : localhost:$WebPort/api/v1/lua/gte"
|
|
Write-Host ""
|
|
|
|
Start-Process -FilePath $PcsxPath -ArgumentList $args | Out-Null
|
|
|
|
# ── Wait for both endpoints to come up ──
|
|
$deadline = (Get-Date).AddSeconds(15)
|
|
while ((Get-Date) -lt $deadline) {
|
|
$gdbUp = $false
|
|
$webUp = $false
|
|
try {
|
|
$tcp = New-Object System.Net.Sockets.TcpClient
|
|
$tcp.BeginConnect('localhost', $GdbPort, $null, $null) | Out-Null
|
|
Start-Sleep -Milliseconds 100
|
|
$gdbUp = $tcp.Connected
|
|
$tcp.Close()
|
|
} catch { $gdbUp = $false }
|
|
try {
|
|
$r = Invoke-WebRequest -Uri "http://localhost:$WebPort/" -UseBasicParsing -TimeoutSec 1 -ErrorAction SilentlyContinue
|
|
$webUp = $r.StatusCode -ne 0
|
|
} catch { $webUp = $false }
|
|
if ($gdbUp -and $webUp) { break }
|
|
Start-Sleep -Milliseconds 500
|
|
}
|
|
|
|
# ── Smoke-test the gte handler ──
|
|
try {
|
|
$r = Invoke-WebRequest -Uri "http://localhost:$WebPort/api/v1/lua/gte" -UseBasicParsing -TimeoutSec 5
|
|
$firstLine = ([System.Text.Encoding]::UTF8.GetString($r.Content) -split "`n")[0]
|
|
Write-Host "GTE handler OK: $firstLine" -ForegroundColor Green
|
|
} catch {
|
|
Write-Warning "GTE handler NOT responding: $_"
|
|
Write-Host "Check the pcsx-redux Lua Console for debug cli messages." -ForegroundColor Yellow
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "pcsx-redux running. PIDs:" -ForegroundColor Cyan
|
|
Get-Process pcsx-redux | Select-Object Id, ProcessName | Format-Table
|