From 31a9b31bf7567de7f1440766638f96745b09f401 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 20 Jul 2026 07:18:29 -0700 Subject: [PATCH] Revert "chatgpt-cutoff" -- unreviewed direct-to-master HDD rewrite with a live drive-corruption risk This reverts commit d14f3e73 (direct push, no PR, no review), which rolled to testers on 07-18. The GOALS are good and will be re-landed properly -- APA + BDM-ATA coexistence on the shared ATA stack (R3Z-style, the audit report's xhdd/bdmfs_fatfs auto-mount theory for Vapor's APA listing bug is worth pursuing), module-state reset across sysReset, and the gDeinitAtaSelected park-suppression. But the execution ships several regressions and one unacceptable risk: 1. DRIVE-CORRUPTION RISK (the reason this cannot wait): it deleted hddDetectNonSonyFileSystem(), the upstream exFAT/MBR/GPT safety guard, and now loads the APA driver ps2hdd.irx UNCONDITIONALLY on any disk -- trusting an unverified claim that its init is read-only for non-APA disks. The guard's own comment: loading APA modules on a non-APA disk "runs the risk of corrupting the HDD as it will try to write APA partition data." This fork has a real exFAT-corruption report in its history. An unreviewed removal of an upstream data-safety guard cannot sit on the rolling build. 2. FifthFox's "401: HardDisk Drive not detected" on every boot (SCPH-700012 slim, reported 07-19 on the rolling build that contains this commit): the old loader LATCHED a failure once per session (load count stayed >= 1 -> later calls returned BUSYLOADING silently); the rewrite resets hddModulesLoading = 0 on failure so every later probe re-fires the error toast. It also removed the F-12 APA/BDM-ATA load reconcile, so a config carrying both flags now activates the APA probe where it was previously force-disabled -- new 401 exposure on HDD-less consoles. 3. HDD_APA_UNAVAILABLE is a one-way latch with NO re-probe path: one transient hddCheck() hiccup permanently hides the APA tab for the session -- a brand-new way to produce exactly the "APA games not listing" bug this commit set out to fix. 4. hddNeedsUpdate flips menuItem.visible (GUI state) from the IO thread; a hard 1-second DelayThread in every first HDD module load; a 250x10ms busy-wait; and repo pollution (a ChatGPT audit report + 11 PNGs committed to the repository root). The wins return as reviewed, build-verified PRs on top of this revert. Co-Authored-By: Claude Fable 5 --- REPORT_RIPTOPL_VCD_THEMES_IGR_AUDIT.md | 94 -------- delivered/eth.png | Bin 31924 -> 0 bytes delivered/fav.png | Bin 16718 -> 0 bytes delivered/hdd.png | Bin 20989 -> 0 bytes delivered/hdd_bd.png | Bin 40419 -> 0 bytes delivered/ilk_bd.png | Bin 15241 -> 0 bytes delivered/m4s_bd.png | Bin 15970 -> 0 bytes delivered/mmce.png | Bin 16517 -> 0 bytes delivered/udp_bd.png | Bin 32350 -> 0 bytes delivered/udp_fs.png | Bin 31431 -> 0 bytes delivered/usb.png | Bin 35580 -> 0 bytes delivered/usb_bd.png | Bin 15341 -> 0 bytes include/bdmsupport.h | 2 - include/hddsupport.h | 3 +- include/opl.h | 2 +- src/bdmsupport.c | 31 +-- src/gui.c | 21 +- src/hddsupport.c | 307 ++++++++++++------------- src/opl.c | 44 ++-- 19 files changed, 193 insertions(+), 311 deletions(-) delete mode 100644 REPORT_RIPTOPL_VCD_THEMES_IGR_AUDIT.md delete mode 100644 delivered/eth.png delete mode 100644 delivered/fav.png delete mode 100644 delivered/hdd.png delete mode 100644 delivered/hdd_bd.png delete mode 100644 delivered/ilk_bd.png delete mode 100644 delivered/m4s_bd.png delete mode 100644 delivered/mmce.png delete mode 100644 delivered/udp_bd.png delete mode 100644 delivered/udp_fs.png delete mode 100644 delivered/usb.png delete mode 100644 delivered/usb_bd.png diff --git a/REPORT_RIPTOPL_VCD_THEMES_IGR_AUDIT.md b/REPORT_RIPTOPL_VCD_THEMES_IGR_AUDIT.md deleted file mode 100644 index d63e2fce22..0000000000 --- a/REPORT_RIPTOPL_VCD_THEMES_IGR_AUDIT.md +++ /dev/null @@ -1,94 +0,0 @@ -# REPORT: Riptopl (Open-PS2-Loader) — Exhaustive Audit of VCDs, Themes, IGR, and BDM/APA HDD Conflicts -**Date**: 2026-07-13 -**Target Audience**: Claude 3.5 Sonnet / Claude 4 Opus -**Context**: Deep-dive analysis of Issue #120 (VCD Info Screens, Screenshots, Theme Freezes, and IGR pathing) along with BDM HDD vs. APA HDD conflicts. - ---- - -## 1. Executive Summary & Narrative -This audit report examines several interrelated issues in the Open-PS2-Loader (OPL) fork, focusing on the Multi-Memory Card Emulator (MMCE) environment and internal Hard Disk Drive (HDD) configurations: -1. **VCD Info Screens and Screenshots (Issue #120)**: Entering the PS1 Info screen displays a persistent spinner, fails to load the second screenshot, and eventually causes the UI to freeze or become non-interactive. -2. **Theme-Related Freezes**: High-resolution 3D themes (e.g., 1080i cover art) experience image jitter and then freeze the OPL GUI. -3. **In-Game Reset (IGR) Paths**: Custom IGR paths (like exit paths pointing to MMCE or internal HDD) fail to boot and fall back to `BOOT.ELF` on the memory card, unless the target is a real/emulated memory card. -4. **HDD Spin-Up & Concurrent Conflicts**: Enabling BDM (for USB) spins up the internal HDD and conflicts with/breaks the native APA HDD driver due to driver-level auto-mounting. - ---- - -## 2. Issues, Root Causes, and Technical Analyses - -### 2.1. PS1 Info Screen Spinner and Missing Screenshots -* **Symptom**: Opening a PS1 game's Info page shows a long loading spinner. Often, only one screenshot loads (the second only loads after exiting/re-entering). Eventually, lists go blank. -* **Root Cause**: Synchronous blocking IO operations on slow/constrained buses (Memory Card, APA HDD, and MMCE) combined with excessive/redundant file probes. -* **Mechanics**: - 1. The PS1 Info page loads screenshots and size stats. PS1 games do not have a standard ISO size, but the system still attempts to scan the device. - 2. `initGameImage()` and related prefetch functions perform synchronous `open()`, `stat()`, and `read()` commands on the UI thread. - 3. Under a flood of small file reads (such as checking multiple cover/screenshot paths), the device's driver or bus controller stalls. Because the read is synchronous on the UI thread, the entire GUI locks up, displaying the loading spinner until the driver recovers or times out. - 4. Repeated stalls/time-outs invalidate texture caches or corrupt the directory listing state, causing the game lists to disappear or show 0 games. - ---- - -### 2.2. Theme-Related Freezes (Jitter → Freeze) -* **Symptom**: Using heavy 3D coverflow themes with large 1080i assets causes jittery graphics followed by a total crash/freeze. -* **Root Cause**: High VRAM/IOP bus thrashing due to synchronous texture loads and aggressive prefetching on the UI thread. -* **Mechanics**: - 1. `prefetchGameImageTexture()` and `prefetchAdjacentGameImages()` in `src/themes.c` attempt to cache covers for adjacent games. - 2. If the theme uses massive high-resolution assets (e.g. 620x400+ PNGs), the UI thread spends too much time loading textures from the device. - 3. This saturates the IOP bus and GPU memory, causing frame rendering to drop (jitter). If the cache is cleared/swapped while the background art worker thread is loading files, pointer corruption/race conditions occur, leading to a hard freeze. - ---- - -### 2.3. PS2 IGR Path Resolution on MMCE / Internal HDD -* **Symptom**: Configuring a custom IGR (Exit) path to a folder on MMCE (`mmce0:/...`) or the internal HDD (`pfs0:/...`) fails, resetting to OSDSYS or memory card `BOOT.ELF`. -* **Root Cause**: Driver absence during the early IGR boot phase. -* **Mechanics**: - 1. During IGR, OPL's EE core handles the pad hook and executes the reset flow in [ee_core/src/padhook.c](file:///c:/Users/natha/Github/Open-PS2-Loader/ee_core/src/padhook.c#L75). - 2. At this stage, the IOP is reset. Only the BIOS `rom0:SIO2MAN` and `rom0:MCMAN` (Memory Card Manager) are loaded. - 3. If the exit path points to `mass:` (USB), `padhook.c` explicitly loads `USBD.IRX` and `USBHDFSD.IRX` from the memory card to enable USB read support. - 4. However, `padhook.c` does **not** load `mmce.irx` (for MMCE) or `ps2atad/ps2hdd/ps2fs` (for internal HDD). Hence, `LoadElf()` cannot parse paths starting with `mmce0:` or `pfs0:` / `hdd0:`, causing the boot to fail and exit to OSDSYS. -* **Resolution/Workaround**: - * **MMCE IGR**: When `gMMCEIGRSlot` is enabled, OPL loads `mmceigr.irx`. Upon IGR trigger, `mmceigr.irx` automatically switches the MMCE card slot to act as a standard memory card (`mc0:` or `mc1:`). - * Therefore, the user **must** configure the IGR path using the standard memory card prefix (e.g., `mc0:/Riptopl/BOOT.ELF` instead of `mmce0:/Riptopl/BOOT.ELF`). Because the card is emulating `mc0:`, the BIOS memory card driver can read it without any extra MMCE drivers! - ---- - -### 2.4. Concurrent Conflict Between APA HDD and BDM (exFAT BDM HDD) Drivers -* **Symptom**: Enabling BDM (for USB) and setting APA HDD to Auto causes the internal HDD to spin up and completely breaks APA HDD game scanning and launch. -* **Root Cause**: Un-arbitrated hardware access on the DEV9/ATA interface because the BDM FATFS module auto-mounts the low-level ATA helper driver. -* **Mechanics**: - 1. APA HDD mode requires `xhdd.irx` (the BDM ATA helper driver) to be loaded. OPL uses its `"xhdd0:"` devctl interface for checks (LBA48 support in `hddIs48bit()`) and settings (UDMA transfer mode in `hddSetTransferMode()`). - 2. `xhdd.irx` registers itself as a block device (`IOP_DT_BLOCK`) with `iomanX`. - 3. Because it is registered as a block device, OPL's FATFS driver (`bdmfs_fatfs.irx`) automatically detects `"xhdd0:"` and mounts it as a `mass` slot (e.g., `mass1:`). - 4. Since BDM is active (scanning for USB devices), OPL calls `fileXioDopen("mass1:/")` on every menu refresh. - 5. Since the drive is actually APA-formatted (not exFAT), the FATFS mount fails. OPL assumes the device is still connecting and retries the mount scan on *every single menu refresh or list update*. - 6. Each retry sends raw sector read commands to the drive via `xhdd_irx`. Concurrently, the APA drivers (`ps2hdd.irx` and `ps2fs_irx`) are also actively accessing the drive. - 7. These un-arbitrated command streams collide on the shared DEV9/ATA interface, causing commands to fail, drive registers to lock up, and completely breaking APA HDD browsing. - ---- - -## 3. Targeted Code-Level Fixes - -### 3.1. Mitigating the BDM / APA HDD Conflict -To prevent BDM from auto-mounting `"xhdd0:"` when BDM HDD is disabled (`gEnableBdmHDD == 0`), we must prevent it from registering as a block device: -1. **Modify `xhdd.c`**: Update the entry point `_start` in [modules/hdd/xhdd/xhdd.c](file:///c:/Users/natha/Github/Open-PS2-Loader/modules/hdd/xhdd/xhdd.c#L112) to parse a `"-nobdm"` command-line argument. -2. If `"-nobdm"` is passed, register the `"xhdd"` device as a character device (`IOP_DT_CHAR`) instead of a block device (`IOP_DT_BLOCK | IOP_DT_FSEXT`): - ```c - if (noBdm) { - xhddDevice.type = IOP_DT_CHAR; // Prevents bdmfs_fatfs from mounting it - } - ``` -3. **Modify `hddsupport.c`**: Update `hddLoadModules()` in [src/hddsupport.c](file:///c:/Users/natha/Github/Open-PS2-Loader/src/hddsupport.c#L219). If BDM HDD is disabled (`gEnableBdmHDD == 0`), pass the `"-nobdm"` argument when loading the module: - ```c - sysLoadModuleBuffer(&xhdd_irx, size_xhdd_irx, 7, "-nobdm"); - ``` - This keeps the `"xhdd0:"` devctl interface fully functional for LBA48/UDMA setting commands, but stops BDM from scanning it, resolving the conflict. - -### 3.2. Mitigating VCD Art and Theme Stalls -1. **Add Art-Loading Throttling**: Modify `src/themes.c` to enforce a conservative prefetch limit when the active device is a memory card, APA, or MMCE card (prefix check). Skip or reduce prefetching of adjacent game images. -2. **Asynchronous Art Loader**: Refactor texture loading to submit open/read jobs to OPL's background IO thread (worker queue) rather than performing them synchronously on the GUI thread. If the texture is not cached, render a placeholder image instantly and let the IO thread load the art in the background. - ---- - -## 4. Verification and Validation Plan -1. **Conflict Test**: Set BDM to Auto (USB active) and APA HDD to Auto. Verify that APA HDD game lists populate instantly and games boot without freezing. -2. **IGR Test**: Set IGR Path to `mc0:/Riptopl/BOOT.ELF` and trigger IGR from an MMCE game. Verify it successfully reboots into the Riptopl launcher. -3. **Stress Test**: Cycle through PS1 Info screens rapidly 50 times with a custom theme. Verify the GUI does not freeze and game lists remain intact. diff --git a/delivered/eth.png b/delivered/eth.png deleted file mode 100644 index a61603d13e02ca4288ed2c42041cdd170f347c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31924 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 NwWW>41@rZr{|&<}>?{BP diff --git a/delivered/hdd.png b/delivered/hdd.png deleted file mode 100644 index 91e6c6c65b20f67796e9185a8a0222787f28f19d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20989 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 Fe*ie*=gI&8 diff --git a/delivered/hdd_bd.png b/delivered/hdd_bd.png deleted file mode 100644 index 983673c5c33b67e7f5d7b2c231e4bfd655167e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40419 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 O3UFUjPoorN8~J~6kVF{( diff --git a/delivered/ilk_bd.png b/delivered/ilk_bd.png deleted file mode 100644 index 1037ead0696fc6865f00c3841f8674ea5ad213f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15241 zcmeI3Yj6|S8HQK*2Bse3nkkglMNwQXHPWtDmTWDOxL5+Ku^eC2*ya}2+O@o6Nh?b$ zBm;#~7)pR-1_mb(NMc$pHN+;Z6UM+$GNHr?G>MI8N;{c)s9RbvxP;m*q?pjNk}Ms| zHmB+2=W0gMr*q!-`*xpm(f&CvmX<8fNS~FCVOWN>$XpJ-v%x!Saw_IbGAhD(DG-azxI!M5 z2=zwA60xAX%2p~b2wR^BtdF%HHi}iN|Kv4j_Nm2xZ3#OjLIbTOnB{Vh?~GB_C##qsSp_<1GrbJ z(8tmO@3Zr~%M_Vur6UOCWWFj-KChDVFnrKI-+(9THG#>fQxaOGT5l)v zDI$*ovr-HQC`m+_ki*6^Tx}ziBVVc3*$E9r>Zm*d&H*VCbAScJ&;tEGWr4L&9>zh{ z@;)~$m^e4>WO1+=81Q%_q>N1|s*rc_K5$vANn^mrYld9mX+~K+eu4HlSgY9t8dMy| zP_$m7RTDKe%357sfl@=~>6HaE?NF*29jnpOgjP@J!VqmX*ght;nRf)lr4miee8tp| zeN5`-d>q*7Xcwdrul}o+7$?n`Qbn8}OwLAV(t@cQ-pDH0hS9Af9WE}sA$e(^pB0yz zQ8BXKVmnxDgAzUAWlPZxaVs-9#MQtu27FX&{IX)ssEzx72QZQ!vQJziSjT#vw4frX z!m5dr`1x8PNc-3&PB15s3q6u@v?npQ0T=gu7dLtoBCVqbXJopL9ZZ9`ol#&SfQzET z1E4nGW7^`CBl;?FKwW{bKA!~tgaob@KciN-JJDMGWGmdAXpK96EZ8 z9v;a^D|k!*PbqlpF=g~1$5z4D9K`SFYfcQOlZwDJkg2^UNQ8B4g3h+u()3#NgLC0s~Eut35E(?G@&E+isY zAmM^(AY%y^5)mwraKSW?v4jhW2o^}VU>e9+!i7Wx3nW}H4P-3gLL!0%5-ykqGL~>5 z5y1ip7fb^gOSq7TV1a}Srh$wlTu4N)K*9ynK*ka-BqCTK;eu%(V+j`$5iF2!!8DMu zgbRrX7D%{Y8pv3}g+v4kBwR2JWGvxAB7y}HE|>-~ej={)_`yHc15Wz|!LhzQIqnv4 zBygs9ny?~z-U3TFQTKQj zY<*VQ^v=z}H3$CIJ?HtpU5bv(1szvyDP^m62=mY0OL~y`^QkG7-xTh?-=q=-=5|^3 z?0o81H!r8PTuN)Pbr$dKZDiVZ6_;zQ@3iW@Gw!eY$K(5poS$UNKEL@<`xo_>NS%ci9^zjv>!&)Qw)#rIrcdNvN1-uPnIt5y1gJ%e*UU)`Ag!#Vp3 z7Y7cLzq^y%moe~&&I-)#IbE>Xv*nME9)8I5U_UEA(6n{U$)W7ahr0)s6|`r4IImQm zcK_E|le~XjeDArxq%;?GS07(Cqu;8}=&C#Y!Oq=Vv7%4EbJ?A|`r# z-%9If{dd=m*Ov~jJ(o-W!PRpQhfIeur$x{_aP)vi)b(Y$gX zoBM!#X^rREYsZf47;@kA9sSSc^}|BO{-ohh$M#&|hNrd&`@QeziVf$7j-KG!6-}@8 zUw@?ud%JztnXVU%Qx{;j8oG?zQird8eCE{By4=%0esF$pknX`se^9n*2}<~M(D;UV+8lS-f7ezI9smOS)EvEFs8 zZQ<$TmWB-*Dq82rQVg2%wzqC9{Kk%J|9oQ`W$8?LXXErK%O76&*5kvOAFVKMd+C>d o&-wFPIoI3Q_B9kQsh0KUUw=Ae9C8mU#gngAONqH{>Dr(E7eA2wF#rGn diff --git a/delivered/m4s_bd.png b/delivered/m4s_bd.png deleted file mode 100644 index b55586c1cf999415b8cde85ececfdac254ed50b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15970 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 eZbfbe%*7?}cOyc_lcpvwQUi)7+e|rA_ diff --git a/delivered/mmce.png b/delivered/mmce.png deleted file mode 100644 index 27b1a4a02b743310a611223863a7fe8d41a77b3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16517 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 RPRq~zyEra)IBOpi_h0slnNR=# diff --git a/delivered/udp_bd.png b/delivered/udp_bd.png deleted file mode 100644 index 1d3328e6a5b63945f0ac21dd3214e0537207e426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32350 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 LNkvXXu0mjfp4bEr diff --git a/delivered/udp_fs.png b/delivered/udp_fs.png deleted file mode 100644 index c4c0961cf3f2c585b1a77c63382ce3e152ceeda5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31431 zcmeFaby!@>(&&u_C&8WI!QCNPaCf%>2G@PDs$;P9Rut0$ldqM>yv_ z=goJ&=l+>_n3V61Sl$St3#7BgHfIyLw6jgru9({V7z`uC`%YEPx2qdOk^Z~syJG`B@_OmK@v?lMUr=RARq|~Gb1yDF*7qW z2`dMq1fvNnGmxE=lb(c?nU#Zyg_Vh!n}L;?mxGy?m4)PQFERndCy5_qV#=#5D*m@7 zpMHBwX71={&&$N*;^M;S!p3L^GGk)l;o)IoW@Tb!Wq8tH0K3^b0$dqv!Q_8A`MV!c zAlMjWVee>RXG`*jUx1OFljB=5vOgO7$Lnv$W@G=4hHSxqr!K!ZdKqh4%*v<)L3>0&IIu!E%bo7oErvD7izj*qi=D+qG z=xXs_%>JnP%k0mg@K=QRpN^IH9S8_;v;(Qy*;xzxHPRISj*x_vi;x^&cwph z?U@fQ1{O|LW;R|{PF{A7=RTfk{=1K-31k9r1pI&U@?7_s9}{C(4je%040#5~u78WMF zMnC{3fSsF-ft`hog8^v7Zo~jE;s7!L*tl7ljaiwEIM`YKgeWKX-28vI7PT{W`eUm6 z&9%w@rR!(r|HHKc$l@v00j!_t{L%aW+a~^loBz?2qy_kCaJoGkv`<6#&qSsIbokfO zzgJjW{F#vK0U$8&kLmW7?CYyg_@GyO~HKfCo0 z%fFdf{QnK$U;dw&|Mxar%z?K5+l2bd)t_4b-3i#v)X@b10t%Zwjfr1Q^uJvGtIfar z=4bjN?^|2^YZU$}{nz09eYpP5VDkTw&Ul{&!c(UJe+J-bZ2yn4f42OWzUChRwRZYb zpNsYBOvuc{^2g`jOrKZ(yQ$XyZu-3X-%bB%sb*{8D8Tx+*8Z*dnbjXT_ph9w@^py+ z6yW6GVB_Ft`uF00w@|cj1zKy0T0Bi&@E=2xmH8=~{Au*>HUH64>z|fSP@Y>ptNEMd zU%`5ID*rQp6{I%D-{_647&o-?*OB_@(?C*Dn!0 zSNM(VIgMY+zj6H%(Q}30xSrGarTiP$FA+Ug_>Jp1jbF;Yas3j}bA{iyp40fH{2SLV z5j|Jp6{I%D-{_647&o-?*OB_@(?C z*Dn!0SNM(VIgMY+zj6H%(Q}30xSrGarTiP$FA+Ug_>Jp1jbF;Yas3j}bA{iyp40fH z{2SLV5j|Jp6{I%Ks}a#D8x61KK|A z_j7sL*!MFk1L|p0AnqUg303~K;{xK}c2%*DMwvb7y!=B)17zU{1VN}c*#kjO`xyuN ztCk@kNFby{g;iY_zjs)b+blRyok#M_>APovk9e+>nnt#zd7@s=%QvNe>=!w5l=b@( zn-G;o(m>`10ZaM{eHoqdf#eL1;=wlnS<(W5)SOsk{Y`JSbNCAsQyA5B4^K9``UE<*#sGtVxr` z`h7+aRtk)!CM9WgHSnb7f8FU75!e^{$a~t!0J}?IaQ7ZPxpLik-%!et6q(jTKRD|m z_-G-x>h-%MI>Z3TYIG5!-ps~8MWuRHy_$6=R|QB-=;rIE{$zBXHdIyh9#`5=3e+<{ zxm_wp^fQF${#?EK8X_4YBJ#M!&g1*RdBR-h2!&DXo_W#i-Iu7| zOsh@n+Vz*MquOx~#K$z5OqCA0!LvNCjy{BB$IB1NFp8Wm&o+$hIxgH6a-hzk&5d(J zX>@L#eoj3=HIzRdGNa7Osgs9sprep>}l~?@I zLoG*{qgHXdj>6QrB2hz5%B}Z^2`7%RKEP(@z^`SiEI=ZA6Tv{q6tR8XJBxsM0c+F$&^~65{K{dP z@>A?9zG|qCkcvGdY<)FybFzmJ1wRYLJd$Vcsc&?sJ8D? z4J|po8qNp_Dca#J(+n=(0Yjl~5lZfpm>lY14g3H{Rz@{1x+-LdI14;7JN61`wp7=A zY%|#Vd79FrID8Rulq8bG*+do?)w(7R;}B&FJ(`u!Ma9v^%5bIfAn4os`NvDYoOUZ{ zAsTD|EmCxRFOUBLB9z68Y*XJUK;DZvizsJ{74b1)A!_Rn*&gVo0q1zH51kFaGeG5x zVu~;EQ1|=Q?qb5~?z)r1%Y#y$=q|c!I~+qcBW2@2c4F9SB96(FO$R?Zcj(`P?>`Ms zYVwW8qWDOXgRx4QGqQ6wdz*WeT~Q8TyX}l>)@Ym&wBOi}A*Oy!bA#%sh1H$fq3Ejm z*})32e;m9?5@ab{dVdE{DU|C2dShzKMWQ@Q8!B z@n<@Jp@;laDwsAYT=#y-@}3FC1U+%U>+113cn`lNLExvAuCK@S!;X~Gp1NN3I_j)u zv@)|ZjNkC_9eKIBm8RLWS$Un|u26nX1EOuHKQKHBGk$un&FQv$mWch}oX44y$OX4* zE#hKMV#TuH0GQ+_ULyKAEXF&6RtsKUo6UAion+W{#YA3Hs^w+_0Rd6gcI8^+K%A7; z-#Bb{i{DV*55Ck{wo$m?7>_f;KTVK4Dy^Pndochd%Fq_Cx3P-uee7btNy{*GY z!Do-<;A&gHX#zr`*L~W-0B=|;6xE_nPH)Q>e80m;beFC|99DnT%Q3LA2koLdw-J@I z^nQVRjE`T(zV2i0fH}VfO9%sx`g*Q?Wm-*NNj4URJHxLx#{hBY($x%H!b~TJ#fLVXk zJpmck;~d414$a#k()7)c3VLXEHB@=Za=Ysts&oajT%R?pzYn(s7Lr)Z0I=5*0d`(t zEzeNRS=i87MDq-}^J9i6U_b7IEQ|hHw$smE?t`h<7u+pixCt%pq2xixuVrS2%&oSt z6`0Oni3TmYOAprOjne6(6y$5vC7N9?iHqOh8Uw}y#&_WRynI;5nO~*F@L3U2iKx>L=9tF)^hnpg#xPRHS96h$Y z0h{FW12;cFtZowQRe8uyAAt60WTKazA*dev440xRr2uwE)|`K24hWUoAkR`rAXkm8 zO%2_Z)0VL695pYvyJk*PQS+^Xt7qak%X~XwR&m6gdC@s}EV`v-nn>1`vUy5Hm8R%~ z7qS|%nn@AB09&YIf5RKI3=;~$h(OQh!zJP;Z%yT2=YGY4Oz!-Z4%e!C!gryE z7s-m@)+@5E&1_y@4>oB8K-ic(2H`xUS-~}5Y|L$X=%N8ZLtU^o2J;Rv?E<0Dp_}=z z`Wr9Wi3%d?F0RaVrB73Av|ZD384o9QIn-{YSV;qG55%N-#K)VDn;(TZ?_~oGCd@M> zZZD{hOMD;-#8LyL2o2o0S`+9TdNxMJ2M-MolQ}bL@+8*L5%(ET%_@`o*uS&LeWW)Z zJ4N2azPrbw?#Gyo(2w9I(ITx>0tiZ$Wep?-Qp)*Z&T_8swV6b|hkAeM5N0X5@dX{5 zGGB_vOs#i_ydR4*+rPK)IOiPE6dzC_=+MQ3$YsfYWXr%gG_-fiF^}hi85I>(y=vp| za7d$mkEVWrqD~jN>>PaWg=GAO-(w%hZROzPhFSrCNEm-q&BHrbYT%2R(}Z!z?WdYV z4;Ma9YnYZINdLvIAm{B^svR$$rYS-C?&L_96jx+yCgWJAV=yMrR(Cr{$+krmN@_`j zS+6+^5>MLiwQtaL0VbpQk~O`MkL!x8e{ix09SZd^tfm>%x5BSIjrJHw8Xw!hsj-Fw zxZz~d__`u)o+)LNnI*5Y<$O`i~5x`>BUyU3=zF7 zrUobEUC$n1Ll}6M0l1C!v$+TESs%Z2Z{P3?0to7(5oe`tCY^}V>s*hQU4*1_K1);N zz;7}e5e~Wu$D>xNoEM7PE3opG#FQ6SF>zqcu!zX0m<^Gna=kH)EJ9!8eAkU|AF~FD z!y@O)n$XpBRI$B5X^>&b%?UOW)n%_E`%(^(T>Ha(S@A?gi>0(nu zg1uMJamu(udY+!>G{*X(J^2L_O5Ym~+ThKx;H6z4JXI{>Sb+vkJ`x$RK*%2}Yhz-r9n3(Pr~W0pRWNqQKzGU`fUw z!NA$bj!qeE?}%Q>lTlCKTf+Pd)$dc)qNfo}F|{J))ZN0w_d^R@+y$8mhwN&h6JwuB z08wO27=^xn5^psrxOZ!~gluxcfao>#gz}Skm!OO{q7H?xv_8$Mj1WPF<`559ArhRZUXYJhRZ7!kFd4Xz?2j$(c`Z-V*D(-#|5ZCaRz;fwpdRQ(Pgn~q}*fqtgYIex^WNM z9Bz=br{;3RnM*G;)eU_APLebZ)ey^|VTv?So#O+!QL2#Tk7ROEGTG0>6S(Hzd(tfM zMOLiTRatjpq{(be#1@Yshj1@-s0*g{SLn2Qtm4uPVp0PYV1A&BCnoZ>Bp7CGA^`$J zbi5n^>+!oPq>=-&0`d>9{ zHGz+Lm7VCVu*G2hK3Ob#WwF|=6Pl)^P;+LNQI9Xh7d!0@*cYbvvtLzOkN2WarJ{Q8 zM#2aL$|z0cY7a15q8{^;fb%lG{LRm#7dgjV)q}lwaUexGoM=BMlZ{M>`+EUVm7ZbWr zrCjDaAcvT1%%Mm{Zr|9TiOoW{@%(IVXEke;-Z?O5R;prSK)*~lF04b8oE1`HB@Z>l z@X}=(roirwDgLXli-aqVx^|SO{2G0^+l0;R>{o}Hp)JN~+q&H!!npLMULV#~g|vdO;eho~ZhA=2se5P!$dJ7H zB+}nK+G0=SAl}}Z?e%&yViKUN=;#$t06XF|@5l#Y)bl5=+pk@@xmZ;x=^Ri8T^(GwKa3V48I>Y){7`XSBI+ zWK-1VO>a}aKNNhnh*DOsmr}qL38fUy<90sG>uLNhw=-ISk`E`)xE`Au3_pGOu0&$k zA&{z4O(A?2@0_W+b3^t;=x}R52G1c#yO(swOuD z-SNd~^?sBPN;&fD`Z8A$EmWXJ7-lpL*sm#)!dAUrUH%+S4mq<#x8s9zpH9{xv@KxG zh`hd^7oF(56!ib`9V-aX{njN=P+7yi)gN5wcaZQcn+%SnUp-|;6jh@sSz;1nDXAr4 z8{#$TTx@b{kBzdM9wZwG+d6;NOj1~g6x~#QAxWzL4ca(0k6eKrF;|nx-L22`xPWy` zM69pr#Ll=eM#{-Z6ax+E(!|0T0fWRxY4|!kS5Ra~!j-PWC}NV5$SPxYkPKm6u}#@e z8<~7zA!L(ZqPPl<$dBjnm`9mZBynqq<0Hj=|b3FABE@;#Ps$ z^wP8#?-y8FO!1|72Ss!Z1~}vdQk(6>1bnF>eMIL-rG>qNd=lDOu_t}wtMF(O-mFf| zy)l^U*F{>YiXixT`Dy4xk98i!9oaM$62}UV-q)6=VDdPZHo5WAS>dGW^gy7pAVtd0 z?{INU3abE4DwGy>UT3Us%pnx@K@e#ldruQhUuI@!lpCy?Pal%Xkm%iwcT2v1+AB7K z+q#rp6LR}vbXJGXGHn%|Bzl$-{8jPI94%LUcB9OwhUF#wWwv-!$W%Z9ZgPz`j@{Y)fR5*}Q#gV5Z?o_g9^Ze;SM#=PSjFKAlWO~Rmi)V{6F zEEZRm4&^<^;HGiZJaD$dhmy~G>i0&6+&CG^#C7$!Ym<0&x^(oJSYssHJI#E)-8BKp zyAjl;?<4F4gkU|m+JtC6GH6wslPGOm!CZ{^a3E&omO4{VUL$68Ug+=NH8S74(=Cr3 zil5PjZ=ybUMZOWw+Ua1w@411W9O7MN&OUBp><=V?G1#FQAw;Et`1~>^9eyuaqnXEF zq{`iqnc23#ukFg=_#C;9d*l8`k?Z4zmZau{?UHtt;Rf6G6ntQG?HTK-PEBjyq7-oJ zIx$cz<_uw&KD#sntkB%AOVA5L|7t~f9gTa={3Dl;dKy{g61wH)N4I@=DmEh@0&j<9(>P-a>|?o%c=Q zv@SAq-vOqmSSvkcIu&!(eIaH$h%b*6Bjlq5FdQcoAJy0Lb*W#!SYTJ@Zq>la& zG(l<+nv2}nkYZv~o8OXTJAtkkT~3rU?o*K3K7UqFcTLIyRKw~U!;ZJIq9_k`#G!O# zFivh}wD3ffmRCFItfwLS%zv&%UhvNC^ru3ot8z)JO83kqI^FU*MwJ(#;}v_)gf>mN zW3X+*;N8|q;c}nsJ8%_u3KM#8(v$~!acobdP9r@HIP(ycol=dQ$+PK_V*x)YyTd z{YTO79w{cHMM|vL?#H14Te>$(cpzpOwn%QnEea?JA_+I($8~lfw`Y7X;;Z zSn8xy3$ibEts!9f4I9eGcs?k};47=OW?)9VXY_5+$_(8730I*0@rO4dcyE4>b_3u@ zp7<)C-bzpTGtxH^@uFSiTPD`+K(%Z_b^4t7X>Cd2lBd75E3=pBy~&|uhu@8w-$#TA zs_%eubEB!#mtZRTO}6zDct}bKxZ>UN%Oh@6O&ZY0&-2$5F)<-5A$ih*ATfNFtNWT) zp*!Zj>NSZJVaCty-4Q3*yN*WAU+F;?RQ%9)7%#6=YjGIXHf($ivpnFd1?fvpQTJW< z8ksA{?BfQZ)T{E^m0s9VcF!+Cz6ety4bpR^W40PcsN1`YQmzG*!zrEVz$F=F1JTY} z*{(hNL`X>8HW$`Y_1PZoEeGv|klgwcU@%U~ZcO|Yx_$E8O3&cL+cK1+%;k4Y+JO1v z)5HC|lmiLG3Hd!tQxTKXMN~dro2L15f|D5Gu7jua%3Ht;HSb?@0RPnj2A~P^LFzY00B;-uG^(jxG^6Ji4V$ihD}hh#02*QueG-x=HSZU6d~DZX?tY zI#5US(-buUBip_%m)EGPS+2&4GKX=f5bz7Z4wYb;V@>Im|3zY@^$&hlCfie}6k-HV` z^asY}_nr~9Gr@OtxR-Z<%SK8(9C^oZv#Xxe@RitI!3>M)zi4rgzee7}pR zpo^haApev+`C&L`PknOr+)GK|Rh4&B8|Hy7buzpM+FW`K1kupdJGgH*b?eEio$ntP zBP}yv6`%`~?I5#h9GguPcBML?dg)08PZpiXU^q4=Uw>?aK*Y`4qYq><{Nk-iKv+r7LHv4u^gBu3dZ;6o91IfPguzfv=2<%>0zjW*UJo4lyPN!x|Dq* zrel=p1Z;bilIn~#26b`~7#$&uSyBe~1Iz8X@wa~|W{f5|je!tKv_`1}k54p44 zZ>zLN2LoT6{0c%vQ-B5dl%m{7Pau^7WU*J1EeDSE7qadS-Lz;BT z2m;ld>BV&7RfO1$;~{R1Pgbw?SXox6M=>kY^p~WCm%MxoqNuua+6N(fjg;`Xk(6;) zX!#1mQ7HKE8|kHjCa@U0l|6qh&Bg`tT=waXhH6aP6c6HKLJ_usd565F6wu%jPPHdQ z;13k7Z`G~22!!<<^>S!KQ=B3lIIN6f#@BYDB5Sj45%|p!0A**jGmbyW>!H#}{X-!Q za|wf@{9SYs3lk#Vn%MkoSV#-{&ecRu|Me8f3G~`(mx7&7v2@@5Ul`1KCdo zk4f1Zb0FH&Iu5lx&k5~-Lw%}$2c>NUN#EK8D^n$GkARQbQxBfXnCL)cH)_fquok

294dfYq=sTQP4!V>e^M5g__z)ihJAH%?2oySO~Sq^(d1 zDtWghsTvp>#_o=+lD3vCJd%)3O;9e5 z$zvLsn0|`p{2uMrD`Px{$!sLaJ8sv!BT7EX!NCjF4Ec+6-tmX(73|mSmo!agYlGydU10iO{fHPNU zi_WZMTqQo}=bmE{?4Z?b6OJy<(iA$P61&72&zwCGY2`9mLk7v%ny8Y}-tn+V392^Q z(+z&AIt54r{Yw5e0T`?$y7g(3=vO^F{uevcz3(9%bO5*>4O!FgYZ{9(FbluwiVBoX zOyuZPcqSIY1KB?Nyy3@MmfM}}VECx{;z7opx^-`&k`OJsIon=XKWmhF$vi0J0*j;xb17X?-bMyo zUfA{0W-)cJRz{D^@O8q7;7}Y$1~+1Vdd!O`-E5LgZN@?*-neti6N2J{HWtTa^IZs3 zZ@u9t6u>-7rsqO4bbW|mtJLc9UN*J1*`PJRpr(0?>9w;r7DrvtV@}0=FlX*lwiOd= z@V*Ylgib$Is@$VZ@BCh*#WYfK5I}25URrKLeqt2^JsJb5xQ($y_Rk-}93E8GX$@K^ zV9u+i$BMf5-TWyMwpl#zcA)Df7>x>%8cH__C}!LO+Qv3tmL)8;uXLl5Hvb|-`+A?u z2eIJ(l`2`n1T@M z8zV=6xmi(<e$^lJUpu1vs&!XYVFx|ML0HKGB8Up`y=XZw)3Fzifb@7`>YBO1o{c8O;?DaVi z1|x7Ds4r%__gS;6HqCGhW|J_zK@*bO<%N!>9dw_$xVK%Y+r%^$T_D%!Xn*>;O)G%5 zu{Na*or|=Wm1d@VQ%HU_35+!=LVME@Vm&ap`YK>TRas~Ln<=QOT11+roQvSl`Nc#O zg4#&7oK`LYMxty&_n18!pkt+5(;v|62adSdfq(O+h&isz=%vfJb$_uM+pNdlaO0|N z%~ylm19i=c4W7a+ukBT=Dc7B@xb)i?Ka1`+0>SshckAe3=ZE-Q)D#S^msCHP4Rnc$ zvLYLj3(*qsFnmVUgED9$t(lB-($eiL#P_~aQqsu5aqIR3r%tNPgiMLNWLnB5LjU%l zEhmiW&MqCiI@SPD5Db;hop=xC77-)fvrIycp=#qQn|MYy#SMO{9*k!IvE7Ti9 zV_$dWxH~jW!|?tkIBNn;FfICZg)-MIRkVtwCRuZ(f5YdV^6Q-I>IlJx*_pzqc4p!$ z+#wcH00yoCFT{>1wZ=_nKvmL6SPpJ~6JDK9K#M-EgHLOd9i0k8s8>yvic0ZRlwG3v z={RTgbOXA-6j(d7ulmYgL`vx!6J;5$j^eGdA4{ft`XvPSXwuft6qK+|CbwkWYrR#!ccS=6}{G~TbF%sn86q1S9Z{+Eww@c7Hdhbh$DJK|O z&FEfvZ4M~B7hX7K!GGx|I`_zuQW%auy0m=}PtKp3kaK1RmA?J8fga3MP8r!R7Yo43 zvR}4lqM{jPUB<>^orwUW@a!r|CZT~$$2t-SERo%!NzsAtBaQ<(wVxpUTP$t3hNk=0sNTc^ilARls|$_hvx zDI4UgYgjNYH{mx4%?TZbu|FINfN_9628i9UNX@EOx!E3@U@HNLRvD=<3VLUguFCay zp|0a1!V88Q$a-{ND_UFaG?pu-)D}f=%fdyZ>$$J=XA9jccBT!fY-MHiYwNXUOb}#W zO_R*kR(7UG(__@pkQP&0(KLvfzTFZ}u&RZ@NvgIVMP#h;RZt7o(2$_fubJr83eUuR z=no_emyG>pbbUygDl;law>c%b+p>S~BCEc$O+tzzx}#Z|GzZ!mV(a|gqYo6uu_2eh zBE2MpM>NP0bfTCUpp6I>cVdsS$A%TE#uBYoGT{<@{9X{6r9x4-L@Q)y#A>{A$mvIf zI$W|WZurfyLq_eOPo!T7rEAl`mW|EB!5JYXK#2DxtwgsG zG|Cq!QOgwb<^anCxq}e_s95t>%rz#ha)o{J^D@*;lj_&O^!je2k&v93%hh3xUxfO; z_!UG$deeq`P0U4xb?K%O@O{(92C=E_1!y(3OcyC~JWe#RSV0t^r&4zC#b8JdnN zo6I3KKu33^qOP0>-Y?^3@EA%)drBMJo#2ggoCRL(uAlQvI));%c*6)RHs4rZAkx6-!I zf&d>?M2#R z_<0MkiM!Nwq?p-v*4?0}LUSF?KaQF1mgO zb15@DX_K3S&%Sl+1`6rzhx3IuTs705chzG`!g2?T~5+{pQe}f8&n2RUi9)Ez$2*U3aEDcWd`p-mUM3p7&P$ z#x&M5XWoie;Rlje<7GRAg8mqXRqd+^G(;iyVyZc*5p-vpnS@Dtn9^5;=)gF+TZ)oT z$p~%Bs1w@EJdS!F^5Tqj_4IpW$;*w~AFuUr`NjjJD&0%a(8|*c$xqQUWnNrsg;}Gh zx}>vy6NQi57WKEiERI3v5aT>4UU2o&CS>I}MhUjSFQsw}=C%ZVCMxIE{g$q*S!6yO zC3)uxE6J#7LM&_Op`+l_vCwH^WX{3%vCdbaz+K!8e|@$EK%8-6ni>8Hd?S8!)W?m= ztWt?}d%^N_^dUjDb{Z)KNhe^QfMP=TBx&fd(vE4T(xn%|?ey-9N!%WUsaxqiGczh# zK#hR#@He<3U1fl!o8+kW1nR(Q8nMG?|VNhmEgp%n4O3f8yp*oj%US^H(Gh&7Wwh8b70chGJ)Ze z`A7)U;sb%pIKY@K$CiDH46LFvgJpk2n+%HWj7=GN9TZzPe;eeue$ zQBzkf-!C?oyo2cll`j%$VU5--?_eNKM#{4KhXhY8&eO;vgb(CDKfx`!jyv{3y1PeR z#4EowuDZ~MmW^p59p~gyX>2KteDec8GE)zh3**-59eP zGc1)7VqtDo1$lMf3_Yug%Li)|pIs*WF*X|6vMIwJwzfnJ_4xu_8|2Yu-| zMNRubHz+&9%M{MB5+C8eR=n={Ily$!cKuO8zlXri14m)SmB{q0^KO5+4Z;WRrC^xE zhm~ITL*b_f=5vPgg{DbveznV%;f>0JRKULWR%j%%&N35>`0qz9CvxybV>7AD4r7%o}2Kn32o39{M6`oQQvjMXg2W zu8+9flfs7NnV^%-td%V)mRpg4#}NRebeI zQG3(%yTyZD=P7RxAQ7rI^7#T(|&#Gc-<$B`6Uh>l>(`SCQWgzqX9EQV&M zYk^6pYwHpxw=SKq1(>%N_Sr2)L2)Szvt;FPd7M z-@~(U-5ALre4$SclEM2?%O`u_ehRMe8rEu?4z@~MOV!gFPJjPD-A8Z zqUCB3m)7teG z?qufeeBrUWp&6i}!m`_VDQ19D73n+K7cF(;T-^TQ?>F>H%$u_D?NdZ*o8M#g^f*aA zm?-Qo)|ot6ZGhqZbOu+vIb7yq8dvep6r+(Ua%08dQf}RCM(emUoUB zg9A5pU+_ngYoyRXmx*m{`41iRjY+9DVuPB<{#R^y@m-I5XjFV_Ti3`g6Hm)3HRkng z;_OOVpVGV$ev)ULu}5?efx~z01R@Dml*#YnTfvKz!`7CNH-cyZ|`fbE| zcYQf7#nLoLg4P0kPK5BM8o}j~ZSre)aoqWXN(iw`&AXxur|VH>hzSa!^3we!4uStL z{!(4U>Ml`d-&biCx&lCkSQTHyrVpSiSQ$}o4nX*#{qdoV#Qf>u$$(bKhsmtB?{IYc z>ru6D`Ta+>>l^LgYX;P6J27P%oa)?VG>;#Z+C5MTr)c+W#OouM0UsCm~Jd zXj0kGi$O2X*RWxQNvW|Qd6#N8cK6eAsg$B_D)vvPiW49hc~dt`ExpcuBG1tKgY$f> zRr3&IH8uBm?cto2brs|3;lkZsE0(;%@%qF*5w3AfN9)+cs?*yDJjh^Ez43}xz$+~q zsr(4nhdQ$#A$3C^R)UNN_ZQwSwRykPD|%YahZn(;Q&HlVQaF`YRt2@iDiGS^g%M^G z;s5a!gGe1V&_WtCQW38bUV=hFk+Wu%I>`~xK`F{GXiFzN|9)!QMaOzg-2)5{Vg&OB z!&nU?N(6>`Xbh+>g5HdW(9Znt&0E__>s9s%CPL$N}+Y_Z!1VMfX6+ciBi^Ze2d7iaB1@zHX^Eos%2V19c=)sWUVP+t_@hJTpd;;xl1MEFX{y>}Y>uI*1tX^xvg& z;(IY;qd%1r>I^>iYq+Y&eUGBc&ra}jz*fj=KVZA+LoJ(OIa=xZFm4+8eTFj<%_Zv7 z)!TIN{IN5hcCgU~n-lFtWoJRM*bGKIypQqI{l1`kO5(0ND)~v`je;bD(~7`Gou}o+ zg(k`r7vEiUA~s

h~mq=&L6=q2^Ft)%Io>;g+OJ&-j5=0E;N1%Dce+6-PT!kguWcprQmKqrUhe<%fp-x4i!@B1zE_9zC6{tt#T^- z@^e)+t2Qi=e399N#CmTG#W`9U@3-iu)f#a&M+pdSQLb7@qHXTVIdV!#Y{Eo&| z8vqe>zF~&1G2c}OQalOb(Pf2;%P`cO_<<@}+&+vo*K3k zh=r;Z@s4FKhpeoCaFS`!*kk>HP7#nVR!<92Z5G@mwJR{E?ueGYnJ|^sbMwh3pI7#C z$m{m|7qbV(<+o03CQpkAWj{xg8qF9|J2!njXa*%n*OIxXd(PPP7G5r>8>pa3w6KgF z;YENuaqL(Qi$NG+z9O+ZnJu#QYan}pD0y_OQLn*;>d(3LSJ90Eq6jpbA@8(3Eu8PC zPiYUFA*2N;m}M%La+(ib;Z(G=I0hRGyd|viA0jnMfD1ZpI^^l}|9qHfHotLZUVf^q-c0H`zSt1NOYAgJMqY#RdOZ}~3KF6@% zt)Ht5$r>jE5?>st=x{?0FNQwn?2Gu~q{|EJnZdktzbSmx)PM%~iO=uI1XVf@Yt&58 z=t8bvxi@Yn86<^ApC40(Tuud9N9NjEc)CTf1~oIvYZ=io$zd^Ca0bU_oZ(7HuX7!F zq90t~PrMKY1l0`cV7Wv+A|-Vqx(vf&lqYfS$3qsp>)JU%o{8PCg1@zyTYJYIt%K~< z6HZuim=n@2S;ixZokx-dn`NQ=#U==JkZ872cCdNbomYV3PVMDNOzkr46uxSKutT+I|q~H+#a!cm$*azaariR=|kgan=%&Q#ab?fvh zC$Ch^%&tMKzdOxHJV{B%_U`Ol*LFTKHkQ(ztCgj;vwh4sp4oVIBm@k~ttVS}VUDT5 z!=j)RwVZfFgfo82s)6k0pk~E?p0jwKc2YKy?MmZJ)1nuwn@O3wnWJ7hx9yWSKgs~m z-KeJ&F66c)a8-M~p0(_N3i8E@J+3HP*4O0d5sM*Af@Wv~@N;C>6$g;y{ z(jEGsy%^0koV3KA*otu02y@5SV(buwGG&O>?W@PA__(pJu({p#k_8`{U~OYqcAoj< zW7KulDGXR zu)dJn{mj666Z+7xjoYM(h9~e@`mmw?%qjIJ6{MRK7LV$#1NEEFyb5)b3v$A;J5-Tg z!>#qRRMQD2iGr;LAcjtlb9AqZejTg>`iQ#W(xry(0S} zEf6?bd@doVYq`?)+6M?g6mHz47m_F7MW&#&8kP|;7MXR;oatmwqRec{|B@ufFw%Oj zKKmG5U~O@jXiqe4!VuEPgRv!aXutPfn`KbW6(B=k6xY9}sBE7guE?OOr|`HXq^3kbzlYUvWO!SAu^U8rGtwfMEC7joH} zS|m=(JXP-1ye9P-U^)GTp2UW^W{}fY%}VwgyUg~m$t$zr(umI?fb#)ev%&Q)ywx5a z2AzbxVRi581Xx)1&?r~dWma- zlDVMaikB;kVDXs7*{pjiD`HnD>#1!=DCcZwnv^)J+H4a)Dua(^JDTPpWMDof2A0!H z73!LVIx*Tmo}bEGClPz$Ytuvw8sY}2vi{uIJ26NZx>n~Rs;8ZXOV!?Y4%{2zF6{GY<-7GRIQ@rH2b@EKI380Wx1J$M%11%cgST?-e=tEwyR>_|C zp)f1c6)f6PTyrlz7?z7p+l3^o98EURU{awe8niEJ{EE$m4-_F+N(?R?GH|;w`*eVH zx#?qpU-R;jvoBz7Ipk4E5M?GWxI#LD;W{|^X8ue$eG{4bqYT^hECB-Ug2tl)O37A1 z^1ut>8fgnIrc~XvwPUP^rSb{?V*ENimoE|m{Az=gqF4ikpeFpE74L+buV{DWQ$hR# zAL3h3jgQeU(iT1H6a7LrZ;T?u#RgkUyICTYY`2CU=C`^%fN7z0Wdbxekv)S-}M6;n!9$?GE}+ z)2HHT^`-k_Z60$Y6J1>2^Jj1p=rBn8?4~fpv%fHtTr8KM_|cphB4!8`@5n}@U@9$q zkxr2h@GJPL$kXg3@UB{{&_Qnffj{ zfY0I+>INS<3nV+o#K2Y9_a?{y3&WAQVab|^f8%a@{`;GwJO56%Of1ZzDb_4~*Ac$7x{H7Nqdx}# zmHYL;F#fi?#NX&Ip{dLEkGwCfG_>lVROcI>kS?<9L9s5Zkz)(!xpG(DTY0bYcVY$I zXcdQk&#Jf5M@ZUXo@2$so`r}^$fU9ZWZI1374f`unN^ioA ztZ|F4=OOd`|KW9A;_&~Ab3e~_uUqdW;N(;N>FVEq>GKb@R!6)2F1cUBIHaD%e@#7l z=VBZO=gb*^jo**dMIo`)?1+>Zr(ug}n7VE?UI%hq*SlaTj}?wP1dnO&Kj*&B%zp>K zrT4*j7c9#d1SCyo{mN@!xC>#ztP zzWx-wI->4B{^>9M+ADYN9c_0zT7Zr`>lL^f>?@1#ln0 zD(q%Mq;^Vm?^|o$B*J^lyoH^vCT8;iUG@ZE7xwlQfTx6+p0)yAPTAVLu*U9nC? z87_Pv3d?1Hmd^m35^%zPtW_Bh4QPf?AHIH4U;p_FU-)M~cjv*&+uaW5+be8$TkQ9H z4AX#DMu-2wJpSe-wtq-OpCF=RW;y|QqjlF=YYc$NnCY2P>V1IU)4(GGTpH%_gD}8F z@O~BcuMU6Qtw84!_#*r*3X~}$a2c~uIKWtJdKsz+E@7-U;8>57du85Ed1OBf#?cB`Oppf$$sg-@lX8f zZ~W{FAN?!)VV?vgB45YWfyeP5|7G{b|2ly00r)b2hj;qpk6wzv0Dca@M*w_m@61a8?i(|9-l9y~JN@yuF30Wv3E&SI_y+*q32}n^fNzBlxMsHa f3?rwxWUv1R`sx%&Q4v(D00000NkvXXu0mjfj!4%G diff --git a/delivered/usb.png b/delivered/usb.png deleted file mode 100644 index f3e309e11649cbc65a73adc5bd43b3ac99727f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35580 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 == BDM_TYPE_UDPBD; } -int bdmSupportIsATA(item_list_t *support) -{ - if (support == NULL || support->priv == NULL) - return 0; - if (support->mode < BDM_MODE || support->mode > BDM_MODE_LAST) - return 0; - return ((bdm_device_data_t *)support->priv)->bdmDeviceType == BDM_TYPE_ATA; -} - static void bdmEventHandler(void *packet, void *opt) { BdmGeneration++; @@ -418,20 +409,6 @@ void bdmLoadModules(void) LOG("BDMSUPPORT Modules loaded\n"); } -// The optional transport flags describe IOP residency. An in-process sysReset removes those IRXs -// while the EE process and these statics survive, so clear them only at that explicit reset boundary. -void bdmResetModuleState(void) -{ - iUSBModLoaded = 0; - iLinkModLoaded = 0; - iLinkManModLoaded = 0; - ieee1394ModLoaded = 0; - mx4sioModLoaded = 0; - hddModLoaded = 0; - udpbdModLoaded = 0; - bdmDeviceModeStarted = 0; -} - static void bdmInit(item_list_t *itemList) { LOG("BDMSUPPORT Init\n"); @@ -1357,17 +1334,11 @@ static void bdmShutdown(item_list_t *itemList) bdm_device_data_t *pDeviceData = (bdm_device_data_t *)itemList->priv; snprintf(path, sizeof(path), "mass%d:", itemList->mode); - const char *devicePath = (pDeviceData != NULL && pDeviceData->bdmDeviceRoot[0] != '\0') ? pDeviceData->bdmDeviceRoot : path; - int deviceType = (pDeviceData != NULL) ? pDeviceData->bdmDeviceType : BDM_TYPE_UNKNOWN; // As required by some (typically 2.5") HDDs, issue the SCSI STOP UNIT command to avoid causing an emergency park. // pDeviceData may be NULL here (shutdown without init, or a second deinit pass after priv was freed below), // so guard the dereference and fall back to the constructed mass%d: path. - // ATA_BD and APA share the internal drive. Suppress STOP only when the selected launch backend - // actually needs ATA; unrelated USB/MMCE/network launches retain the orderly park behavior. - // Use the identity already cached by enumeration -- never add blocking mount probes to teardown. - if (!gDeinitAtaSelected || deviceType != BDM_TYPE_ATA) - fileXioDevctl(devicePath, USBMASS_DEVCTL_STOP_ALL, NULL, 0, NULL, 0); + fileXioDevctl((pDeviceData != NULL && pDeviceData->bdmDeviceRoot[0] != '\0') ? pDeviceData->bdmDeviceRoot : path, USBMASS_DEVCTL_STOP_ALL, NULL, 0, NULL, 0); if (itemList->enabled && pDeviceData != NULL) { LOG("BDMSUPPORT Shutdown free data\n"); diff --git a/src/gui.c b/src/gui.c index 1c08d184d0..e2c94cfbfa 100644 --- a/src/gui.c +++ b/src/gui.c @@ -302,7 +302,7 @@ static void guiShowNotifications(void) int y = 10; int yadd = 35; - if (showPartPopup || showThmPopup || showLngPopup || showCfgPopup || showNetDhcpPopup) { + if (showPartPopup || showThmPopup || showLngPopup || showCfgPopup || showNetDhcpPopup || showHddReconcilePopup) { if (!popupTimer) { popupTimer = clock() + 5000 * (CLOCKS_PER_SEC / 1000); sfxPlay(SFX_MESSAGE); @@ -351,11 +351,18 @@ static void guiShowNotifications(void) y += yadd; } + // One-time notice set at config load (#154): APA + exFAT(BDM) internal HDD were both + // enabled and one was auto-disabled. Rendered here (not toasted from _loadConfig) so _l() + // resolves AFTER the language pack loads -- Gemini review of #167. + if (showHddReconcilePopup) + guiRenderNotifications(_l(_STR_HDD_BACKEND_RECONCILED), y); + if (clock() >= popupTimer) { guiResetNotifications(); showPartPopup = 0; showCfgPopup = 0; showNetDhcpPopup = 0; + showHddReconcilePopup = 0; } } } @@ -1224,6 +1231,14 @@ void guiShowNetConfig(void) static int guiDeviceUpdater(int modified) { if (modified) { + int hddMode, bdmHdd; + diaGetInt(diaDeviceConfig, CFG_HDDMODE, &hddMode); + diaGetInt(diaDeviceConfig, CFG_ENABLEBDMHDD, &bdmHdd); + // BDM HDD (GPT/MBR) and the APA HDD mode are mutually exclusive; keep the + // two interlocked live now that both live on the same page. + diaSetEnabled(diaDeviceConfig, CFG_HDDMODE, !bdmHdd); + diaSetEnabled(diaDeviceConfig, CFG_ENABLEBDMHDD, hddMode == 0); + // Network 3-row live logic. Row 1 Start (Off/Manual/Auto), Row 2 Protocol (SMB/UDPFS/UDPBD), // Row 3 Access (Files/IMG). While Start=Off, grey Protocol + Access. Lock Access to Files for // SMB and to IMG for UDPBD (only UDPFS offers the free toggle) -- snap the value so a stale IMG @@ -1271,11 +1286,13 @@ void guiShowDeviceConfig(void) diaSetInt(diaDeviceConfig, CFG_APPMODE, gAPPStartMode); diaSetInt(diaDeviceConfig, CFG_FAVMODE, gFAVStartMode); - // Block devices. ATA-BDM and APA/PFS intentionally coexist on the shared ATA stack. + // Block devices (inlined; interlocked with the APA HDD mode) diaSetInt(diaDeviceConfig, CFG_ENABLEUSB, gEnableUSB); diaSetInt(diaDeviceConfig, CFG_ENABLEILK, gEnableILK); diaSetInt(diaDeviceConfig, CFG_ENABLEMX4SIO, gEnableMX4SIO); diaSetInt(diaDeviceConfig, CFG_ENABLEBDMHDD, gEnableBdmHDD); + diaSetEnabled(diaDeviceConfig, CFG_ENABLEBDMHDD, !gHDDStartMode); + diaSetEnabled(diaDeviceConfig, CFG_HDDMODE, !gEnableBdmHDD); // Network: 3 orthogonal rows seeded from the authoritative gNetworkProtocol + gNetStartMode. // Row 1 Start: Off/Manual/Auto == gNetStartMode (START_MODE_*) // Row 2 Protocol: SMB(0)/UDPFS(1)/UDPBD(2) -- OFF and UDPFSBD both collapse to their protocol diff --git a/src/hddsupport.c b/src/hddsupport.c index 9d0346f039..f93a59bf38 100644 --- a/src/hddsupport.c +++ b/src/hddsupport.c @@ -19,7 +19,6 @@ #define NEWLIB_PORT_AWARE #include // fileXioFormat, fileXioMount, fileXioUmount, fileXioDevctl #include // FIO_MT_RDWR -#include // DelayThread -- R3Z ATA_BD settle before APA/PFS starts #include @@ -33,18 +32,9 @@ extern u8 IOBuffer[2048]; static unsigned char hddForceUpdate = 0; static unsigned char hddHDProKitDetected = 0; -static volatile unsigned char hddModulesLoading = 0; +static unsigned char hddModulesLoadCount = 0; static unsigned char hddModulesLoaded = 0; -static unsigned char hddApaModuleLoaded = 0; static unsigned char hddSupportModulesLoaded = 0; -static unsigned char hddDev9RefHeld = 0; - -enum hdd_apa_state { - HDD_APA_PROBING = 0, - HDD_APA_READY, - HDD_APA_UNAVAILABLE, -}; -static volatile unsigned char hddApaState = HDD_APA_PROBING; static char *hddPrefix = "pfs0:"; static hdl_games_list_t hddGames; @@ -62,27 +52,10 @@ static item_list_t hddGameList; static int hddLoadGameListCache(hdl_games_list_t *cache); static int hddUpdateGameListCache(hdl_games_list_t *cache, hdl_games_list_t *game_list); -// EE-side residency bookkeeping must be cleared whenever the IOP is rebooted in-process. Ordinary -// menu cleanup deliberately keeps these flags because the IRXs are still resident; sysReset is the -// point where that physical state actually disappears. -void hddResetModuleState(void) -{ - hddModulesLoading = 0; - hddModulesLoaded = 0; - hddApaModuleLoaded = 0; - hddSupportModulesLoaded = 0; - hddDev9RefHeld = 0; - hddApaState = HDD_APA_PROBING; -} - static void hddInitModules(void) { - if (hddLoadModules() < 0) { - hddApaState = HDD_APA_UNAVAILABLE; - return; - } - if (!hddLoadSupportModules()) - return; + hddLoadModules(); + hddLoadSupportModules(); // update Themes char path[256]; @@ -215,78 +188,104 @@ static int hddCreateOPLPartition(const char *name) int hddLoadModules(void) { int retLoadModule; - int wait; + int retStatus = HDD_LOADMODULES_STATUS_UNK; -retry: - LOG("HDDSUPPORT LoadModules loaded=%d loading=%d\n", hddModulesLoaded, hddModulesLoading); + LOG("HDDSUPPORT LoadModules %d\n", hddModulesLoadCount); - // R3Z-style physical residency: loading the shared ATA stack is idempotent. Logical APA and - // ATA-BDM users do not each take a fake reference to the same resident IRXs. if (hddModulesLoaded) - return HDD_LOADMODULES_STATUS_ALREADYLOADED; - if (hddModulesLoading) { - // Another caller is loading the one shared physical stack. R3Z makes its loaders - // idempotent; wait for that result instead of letting a logical backend run ahead of it. - for (wait = 0; wait < 250 && hddModulesLoading; wait++) - DelayThread(10 * 1000); - if (hddModulesLoaded) - return HDD_LOADMODULES_STATUS_ALREADYLOADED; - if (hddModulesLoading) - return HDD_LOADMODULES_STATUS_ERROR; - goto retry; // the other attempt failed cleanly; this caller gets one fresh attempt - } - hddModulesLoading = 1; + retStatus = HDD_LOADMODULES_STATUS_ALREADYLOADED; - // DEV9 must be loaded, as HDD.IRX depends on it. Keep this support's one ownership reference - // across retryable ATAD failures: DDIOC_OFF cannot be re-armed within the same IOP session. - if (!hddDev9RefHeld) { + if (hddModulesLoadCount == 0) { + // Increment the load count as soon as possible to prevent thread scheduling from allowing another thread to + // call into here and try to double load modules. + hddModulesLoadCount = 1; + + // DEV9 must be loaded, as HDD.IRX depends on it. Even if not required by the I/F (i.e. HDPro) sysInitDev9(); - hddDev9RefHeld = 1; - } - // try to detect HD Pro Kit (not the connected HDD), - // if detected it loads the specific ATAD module - hddHDProKitDetected = hddCheckHDProKit(); - if (hddHDProKitDetected) { - LOG("[ATAD_HDPRO]:\n"); - retLoadModule = sysLoadModuleBuffer(&hdpro_atad_irx, size_hdpro_atad_irx, 0, NULL); - LOG("[XHDD]:\n"); - sysLoadModuleBuffer(&xhdd_irx, size_xhdd_irx, 6, "-hdpro"); + // try to detect HD Pro Kit (not the connected HDD), + // if detected it loads the specific ATAD module + hddHDProKitDetected = hddCheckHDProKit(); + if (hddHDProKitDetected) { + LOG("[ATAD_HDPRO]:\n"); + retLoadModule = sysLoadModuleBuffer(&hdpro_atad_irx, size_hdpro_atad_irx, 0, NULL); + LOG("[XHDD]:\n"); + sysLoadModuleBuffer(&xhdd_irx, size_xhdd_irx, 6, "-hdpro"); + } else { + LOG("[BDM]:\n"); + sysLoadModuleBuffer(&bdm_irx, size_bdm_irx, 0, NULL); + LOG("[ATAD]:\n"); + retLoadModule = sysLoadModuleBuffer(&ps2atad_irx, size_ps2atad_irx, 0, NULL); + LOG("[XHDD]:\n"); + sysLoadModuleBuffer(&xhdd_irx, size_xhdd_irx, 0, NULL); + } + + if (retLoadModule < 0) { + LOG("HDD: No HardDisk Drive detected.\n"); + setErrorMessageWithCode(_STR_HDD_NOT_CONNECTED_ERROR, ERROR_HDD_IF_NOT_DETECTED); + retStatus = HDD_LOADMODULES_STATUS_ERROR; + } else { + retStatus = HDD_LOADMODULES_STATUS_NOERROR; + hddModulesLoaded = 1; + } } else { - LOG("[BDM]:\n"); - sysLoadModuleBuffer(&bdm_irx, size_bdm_irx, 0, NULL); - LOG("[ATAD]:\n"); - retLoadModule = sysLoadModuleBuffer(&ps2atad_irx, size_ps2atad_irx, 0, NULL); - // wLaunchELF-R3Z deliberately leaves a one-second settle window after ATA_BD - // becomes resident and before the APA stack touches it. Both BDM-ATA and APA - // share this same physical driver, so do this once at its first load. - if (retLoadModule >= 0) - DelayThread(1000 * 1000); - LOG("[XHDD]:\n"); - sysLoadModuleBuffer(&xhdd_irx, size_xhdd_irx, 0, NULL); + hddModulesLoadCount++; + if (!hddModulesLoaded) + retStatus = HDD_LOADMODULES_STATUS_BUSYLOADING; } - if (retLoadModule < 0) { - // Leave the attempt retryable without powering DEV9 down. sysShutdownDev9's DDIOC_OFF is a - // terminal hardware stop, not a reversible reference release within the current IOP session. - hddModulesLoading = 0; - LOG("HDD: No HardDisk Drive detected.\n"); - setErrorMessageWithCode(_STR_HDD_NOT_CONNECTED_ERROR, ERROR_HDD_IF_NOT_DETECTED); - return HDD_LOADMODULES_STATUS_ERROR; + LOG("HDDSUPPORT LoadModules done\n"); + return retStatus; +} + +// Returns 1 for MBR/GPT, 0 for APA, and -1 if an error occured +int hddDetectNonSonyFileSystem() +{ + int result = -1; + // Allocate memory for storing data for the first two sectors. + u8 *pSectorData = (u8 *)malloc(512 * 2); + if (pSectorData == NULL) { + LOG("hddDetectNonSonyFileSystem: failed to allocate scratch memory\n"); + return -1; } - // Publish success before clearing the in-progress flag. A waiter that observes loading == 0 - // must also observe the resident state, or it could race into a second module load. - hddModulesLoaded = 1; - hddModulesLoading = 0; + // Trying to load the APA/PFS irx modules when a non-sony formatted HDD is connected (ie: MBR/GPT w/ exFAT) runs + // the risk of corrupting the HDD. To avoid that get the first two sectors and perform some sanity checks. If + // we reasonably suspect the disk is not APA formatted bail out from loading the sony fs irx modules. + result = fileXioDevctl("xhdd0:", ATA_DEVCTL_READ_PARTITION_SECTOR, NULL, 0, pSectorData, 512 * 2); + if (result < 0) { + LOG("hddDetectNonSonyFileSystem: failed to read data from hdd %d\n", result); + free(pSectorData); + return -1; + } - LOG("HDDSUPPORT LoadModules done\n"); - return HDD_LOADMODULES_STATUS_NOERROR; + // Check for MBR signature. + if (pSectorData[0x1FE] == 0x55 && pSectorData[0x1FF] == 0xAA) { + // Found MBR partition type. + LOG("hddDetectNonSonyFileSystem: found MBR partition data\n"); + result = 1; + } else if (strncmp((const char *)&pSectorData[0x200], "EFI PART", 8) == 0) { + // Found GPT partition type. + LOG("hddDetectNonSonyFileSystem: found GPT partition data\n"); + result = 1; + } else if (strncmp((const char *)&pSectorData[4], "APA", 3) == 0) { + // Found APA partition type. + LOG("hddDetectNonSonyFileSystem: found APA partition data\n"); + result = 0; + } else { + // Even though we didn't find evidence of non-APA partition data, if we load the APA irx module + // it will write to the drive and potentially corrupt any data that might be there. + LOG("hddDetectNonSonyFileSystem: partition data not recognized\n"); + result = -1; + } + + // Cleanup and return. + free(pSectorData); + return result; } -int hddLoadSupportModules(void) +void hddLoadSupportModules(void) { - int ret; static char hddarg[] = "-o" "\0" "4" @@ -312,83 +311,64 @@ int hddLoadSupportModules(void) LOG("HDDSUPPORT LoadSupportModules\n"); + // Check if the drive contains MBR/GPT partition data before we load the APA/PFS modules. If the drive is not + // APA then loading the APA irx modules can corrupt the drive as it will try to write APA partition data. + if (hddDetectNonSonyFileSystem() != 0) { + // Drive is MBR/GPT style, or unknown, bail out or risk corrupting the drive. + LOG("HDDSUPPORT LoadSupportModules bailing out early...\n"); + return; + } + if (!hddSupportModulesLoaded) { - // ps2hdd-osd remains resident even when it classifies the connected disk as non-APA. - // Track that IRX independently from the complete APA+PFS stack so a later probe never - // attempts to load the same module twice. - if (!hddApaModuleLoaded) { - LOG("[HDD]:\n"); - ret = sysLoadModuleBuffer(&ps2hdd_irx, size_ps2hdd_irx, sizeof(hddarg), hddarg); - if (ret < 0) { - hddApaState = HDD_APA_UNAVAILABLE; - LOG("HDD: No HardDisk Drive detected.\n"); - setErrorMessageWithCode(_STR_HDD_NOT_CONNECTED_ERROR, ERROR_HDD_MODULE_HDD_FAILURE); - return 0; - } - hddApaModuleLoaded = 1; + LOG("[HDD]:\n"); + int ret = sysLoadModuleBuffer(&ps2hdd_irx, size_ps2hdd_irx, sizeof(hddarg), hddarg); + if (ret < 0) { + LOG("HDD: No HardDisk Drive detected.\n"); + setErrorMessageWithCode(_STR_HDD_NOT_CONNECTED_ERROR, ERROR_HDD_MODULE_HDD_FAILURE); + return; } - // R3Z coexistence model: ATA_BD remains resident for FAT/exFAT while the direct-ATAD - // ps2hdd-osd driver independently validates APA. Its init is read-only when the disk is - // not APA; require the authoritative formatted status before PS2FS is loaded or any PFS - // partition can be mounted/created. Do not second-guess it with generic MBR/GPT bytes. - int hddStatus = hddCheck(); - if (hddStatus != 0) { - hddApaState = HDD_APA_UNAVAILABLE; - if (hddStatus == 1) { - LOG("HDD: HardDisk Drive is not APA formatted.\n"); - // Expected when both logical backends are enabled on an exFAT disk: BDM-ATA owns - // the page, while APA simply stays unpublished. Only report an error when APA was - // the sole internal-HDD backend requested. - if (!gEnableBdmHDD) - setErrorMessageWithCode(_STR_HDD_NOT_FORMATTED_ERROR, ERROR_HDD_NOT_DETECTED); - } else { - LOG("HDD: No usable APA HardDisk Drive detected.\n"); - setErrorMessageWithCode(_STR_HDD_NOT_CONNECTED_ERROR, ERROR_HDD_NOT_DETECTED); - } - return 0; + // Check if a HDD unit is connected + if (hddCheck() < 0) { + LOG("HDD: No HardDisk Drive detected.\n"); + setErrorMessageWithCode(_STR_HDD_NOT_CONNECTED_ERROR, ERROR_HDD_NOT_DETECTED); + return; } LOG("[PS2FS]:\n"); ret = sysLoadModuleBuffer(&ps2fs_irx, size_ps2fs_irx, sizeof(pfsarg), pfsarg); if (ret < 0) { - hddApaState = HDD_APA_UNAVAILABLE; LOG("HDD: HardDisk Drive not formatted (PFS).\n"); setErrorMessageWithCode(_STR_HDD_NOT_FORMATTED_ERROR, ERROR_HDD_MODULE_PFS_FAILURE); - return 0; + return; } hddSupportModulesLoaded = 1; LOG("HDDSUPPORT modules loaded\n"); - } - - hddApaState = HDD_APA_READY; - if (gOPLPart[0] == '\0') - hddFindOPLPartition(); + if (gOPLPart[0] == '\0') + hddFindOPLPartition(); - fileXioUmount(hddPrefix); + fileXioUmount(hddPrefix); - ret = fileXioMount(hddPrefix, gOPLPart, FIO_MT_RDWR); - if (ret == -ENOENT) { - // Attempt to create the partition. - if ((hddCreateOPLPartition(gOPLPart)) >= 0) - fileXioMount(hddPrefix, gOPLPart, FIO_MT_RDWR); - } + ret = fileXioMount(hddPrefix, gOPLPart, FIO_MT_RDWR); + if (ret == -ENOENT) { + // Attempt to create the partition. + if ((hddCreateOPLPartition(gOPLPart)) >= 0) + fileXioMount(hddPrefix, gOPLPart, FIO_MT_RDWR); + } - if (gOPLPart[5] != '+') { - hddCheckOPLFolder(hddPrefix); - gHDDPrefix = "pfs0:OPL/"; + if (gOPLPart[5] != '+') { + hddCheckOPLFolder(hddPrefix); + gHDDPrefix = "pfs0:OPL/"; + } } - - return 1; } void hddInit(item_list_t *itemList) { LOG("HDDSUPPORT Init\n"); hddForceUpdate = 0; // Use cache at initial startup. - hddApaState = hddSupportModulesLoaded ? HDD_APA_READY : HDD_APA_PROBING; configGetInt(configGetByType(CONFIG_OPL), "hdd_frames_delay", &hddGameList.delay); ioPutRequest(IO_CUSTOM_SIMPLEACTION, &hddInitModules); hddGameList.enabled = 1; @@ -560,17 +540,6 @@ static int hddBuildVcdGameList(void) static int hddNeedsUpdate(item_list_t *itemList) { /* Auto refresh is disabled by setting HDD_MODE_UPDATE_DELAY to MENU_UPD_DELAY_NOUPDATE, within hddsupport.h. Hence any update request would be issued by the user, which should be taken as an explicit request to re-scan the HDD. */ - // Module initialization and this menu update share the IO FIFO, so the authoritative APA result - // is ready before the first scan. A non-APA disk belongs to ATA-BDM: withhold this page instead - // of publishing the same empty ghost tab that caused the original regression report. - if (hddApaState != HDD_APA_READY) { - if (hddApaState == HDD_APA_UNAVAILABLE && itemList->owner != NULL) - ((opl_io_module_t *)itemList->owner)->menuItem.visible = 0; - return 0; - } - if (itemList->owner != NULL) - ((opl_io_module_t *)itemList->owner)->menuItem.visible = 1; - if (vcdConsumeDirty(itemList->mode)) return 1; // L3 toggle / default-view change -> rebuild the submenu (the ARRAY may be cached) if (vcdViewActive(itemList->mode)) @@ -580,9 +549,6 @@ static int hddNeedsUpdate(item_list_t *itemList) static int hddUpdateGameList(item_list_t *itemList) { - if (hddApaState != HDD_APA_READY) - return 0; - if (vcdViewActive(itemList->mode)) // Reuse the session's built list on view flips; hddBuildVcdGameList runs only when never // built, invalidated (first-disc-only change), or freed by teardown (hddFreeVcdGameList). @@ -1170,10 +1136,11 @@ static void hddCleanUp(item_list_t *itemList, int exception) fileXioUmount(hddPrefix); } - // Close logical PFS state, but keep the physical IRX residency flag. IOP modules cannot be - // unloaded here; a later settings re-init reuses them and remounts below, matching R3Z. + // UI may have loaded modules outside of HDD mode, so deinitialize regardless of the enabled status. if (hddSupportModulesLoaded) { fileXioDevctl("pfs:", PDIOC_CLOSEALL, NULL, 0, NULL, 0); + + hddSupportModulesLoaded = 0; } } @@ -1194,24 +1161,32 @@ static void hddShutdown(item_list_t *itemList) fileXioUmount(hddPrefix); } - // Close logical PFS state. Physical IRXs stay resident until the launch/exit IOP reset. + // UI may have loaded modules outside of HDD mode, so deinitialize regardless of the enabled status. if (hddSupportModulesLoaded) { /* Close all files */ fileXioDevctl("pfs:", PDIOC_CLOSEALL, NULL, 0, NULL, 0); + + hddSupportModulesLoaded = 0; } - if (hddModulesLoaded) { - // Park the internal drive when the selected launch does not use it. Keep it live only for - // APA or ATA-BDM handoff; their loaders still need the shared ATA stack after menu teardown. - if (!gDeinitAtaSelected) + if (hddModulesLoadCount > 0) { + hddModulesLoadCount -= 1; + if (hddModulesLoadCount == 0) { + // DEV9 will remain active if ETH is in use, so put the HDD in IDLE state. + // The HDD should still enter standby state after 21 minutes & 15 seconds, as per the ATAD defaults. hddSetIdleImmediate(); - } + } - // Release this support's single physical DEV9 ownership on terminal exit/poweroff even if ATAD - // never became resident. Game/app handoffs reset the IOP themselves after reading launch assets. - if (gDeinitTerminal && hddDev9RefHeld) { - sysShutdownDev9(); - hddDev9RefHeld = 0; + // Only shut down dev9 from here, if it was initialized from here before -- and only on a + // TERMINAL teardown (exit/poweroff). On the launch path this shutdown runs for every + // non-selected page, and powering DEV9 off here kills the ATA bus BEFORE bdmLaunchVcd's + // post-deinit POPSTARTER.ELF read from the ATA-backed massN: mount -- the elf-loader then + // returns into deinit'd OPL: the 4236edf6-class black-screen freeze (PCSX2 masks it; its + // emulated DEV9 power-off is inert). ee_core/POPSTARTER reset the IOP right after, so the + // launch path needs no power-off. Note the refcount asymmetry this also softens: N + // hddLoadModules calls take ONE dev9 reference, but every hddShutdown used to drop it. + if (gDeinitTerminal) + sysShutdownDev9(); } } diff --git a/src/opl.c b/src/opl.c index 7c8276e44f..18b9efc2f7 100644 --- a/src/opl.c +++ b/src/opl.c @@ -195,7 +195,8 @@ int gFadeDelay; int toggleSfx; int showCfgPopup; // Boot toast (rendered by guiShowNotifications alongside showCfgPopup): -int showNetDhcpPopup; // a UDP transport is selected but IP Type is DHCP -- ministack needs a static IP +int showNetDhcpPopup; // a UDP transport is selected but IP Type is DHCP -- ministack needs a static IP +int showHddReconcilePopup; // APA + exFAT(BDM) HDD were both enabled -- one was auto-disabled at load (#154) #ifdef PADEMU int gEnablePadEmu; int gPadEmuSettings; @@ -1333,8 +1334,8 @@ static int checkLoadConfigHDD(int types) int value; char path[64]; - if (hddLoadModules() < 0 || !hddLoadSupportModules()) - return 0; + hddLoadModules(); + hddLoadSupportModules(); snprintf(path, sizeof(path), "%s%s", gHDDPrefix, CONFIG_OPL_FILENAME); value = open(path, O_RDONLY); @@ -1687,6 +1688,26 @@ static void _loadConfig() configGetInt(configOPL, CONFIG_OPL_ENABLE_ILINK, &gEnableILK); configGetInt(configOPL, CONFIG_OPL_ENABLE_MX4SIO, &gEnableMX4SIO); configGetInt(configOPL, CONFIG_OPL_ENABLE_BDMHDD, &gEnableBdmHDD); + // #120 audit F-12: APA (gHDDStartMode) and BDM-ATA (gEnableBdmHDD) are mutually exclusive by + // design, but the Device-Settings interlock only guards values changed THROUGH the dialog. A + // legacy, hand-edited or cross-version config can load both, and then BOTH internal-HDD + // stacks initialize against the one drive. Normalize at load: the backend matching the boot + // device wins; otherwise the APA start mode (the older, more deliberate setting) is kept. + // configSetInt the loser so the next save persists the reconciled pair. + if (gEnableBdmHDD && gHDDStartMode != START_MODE_DISABLED) { + if (gBootDirBdmType == BDM_TYPE_ATA) + gHDDStartMode = START_MODE_DISABLED; + else + gEnableBdmHDD = 0; + configSetInt(configOPL, CONFIG_OPL_HDD_MODE, gHDDStartMode); + configSetInt(configOPL, CONFIG_OPL_ENABLE_BDMHDD, gEnableBdmHDD); + // #154 forensics: this reconciliation was SILENT -- a user whose internal-exFAT (or + // APA) page vanished after a hand-edit/cross-version config had no clue why. Flag it + // for the notification popup (same pattern as showNetDhcpPopup): the render site + // resolves _l() per frame, so the message localizes correctly even though the + // language pack loads AFTER this point (applyConfig at the end of _loadConfig). + showHddReconcilePopup = 1; + } int udpbdKeyPresent = configGetInt(configOPL, CONFIG_OPL_ENABLE_UDPBD, &gEnableUDPBD); configGetInt(configOPL, CONFIG_OPL_NET_BOOT_PROTOCOL, &gNetBootProtocol); // Unified network-protocol selector (single SMAP NIC -> at most one transport per session). @@ -1778,6 +1799,12 @@ static void _loadConfig() if (gBootDirBdmType == BDM_TYPE_ATA && !gEnableBdmHDD) { gEnableBdmHDD = 1; configSetInt(configGetByType(CONFIG_OPL), CONFIG_OPL_ENABLE_BDMHDD, gEnableBdmHDD); + // #120 audit F-12: don't leave a loaded APA start mode fighting the just-enabled BDM-ATA + // backend (the drive we booted from is exFAT, so APA is definitionally wrong for it). + if (gHDDStartMode != START_MODE_DISABLED) { + gHDDStartMode = START_MODE_DISABLED; + configSetInt(configGetByType(CONFIG_OPL), CONFIG_OPL_HDD_MODE, gHDDStartMode); + } } } @@ -2625,8 +2652,6 @@ void handleLwnbdSrv() static void reset(void) { sysReset(); - hddResetModuleState(); - bdmResetModuleState(); mcInit(MC_TYPE_XMC); } @@ -2661,14 +2686,6 @@ static void moduleCleanup(opl_io_module_t *mod, int exception, int modeSelected, // POPSTARTER.ELF read from the ATA-backed massN: mount still works; ee_core/POPSTARTER reset the IOP // themselves, so skipping the power-off on launches leaks nothing). int gDeinitTerminal = 0; -int gDeinitAtaSelected = 0; - -static int deinitModeUsesAta(int mode) -{ - if (mode == HDD_MODE) - return 1; - return mode >= 0 && mode < MODE_COUNT && bdmSupportIsATA(list_support[mode].support); -} void deinit(int exception, int modeSelected) { @@ -2678,7 +2695,6 @@ void deinit(int exception, int modeSelected) void deinitEx(int exception, int modeSelected, int modeSelected2) { gDeinitTerminal = (modeSelected == IO_MODE_SELECTED_ALL || modeSelected == IO_MODE_SELECTED_NONE); - gDeinitAtaSelected = deinitModeUsesAta(modeSelected) || deinitModeUsesAta(modeSelected2); /* Menu rumble (#172): kill the actuators FIRST, before anything below can block. Every launch and * exit path funnels through here, and closing the pad ports later does NOT clear the motors -- so a