Commit Graph

598 Commits

Author SHA1 Message Date
David Korth
1f246e4ff6 rom-properties 2.5.1 2025-05-10 16:41:45 -04:00
David Korth
e804c1236f NEWS.md: Mention vWii packages. 2025-05-03 19:03:00 -04:00
David Korth
e07a45be0e NEWS.md: Mention URL colorization and "OSC 8" markup. 2025-05-03 09:45:59 -04:00
David Korth
6056d61f2c NEWS.md: Mention xattr compression algorithms.
Some checks failed
Codecov / run (push) Has been cancelled
2025-05-03 09:44:05 -04:00
David Korth
1e094fdb8e [gtk] _RpDragImageCxx ctor: Initialize pngBytes to nullptr.
When testing non-RomData files with `rp-stub -R`, I got random crashes.
gdb traced it back to an invalid g_bytes_unref() due to pngBytes not
being initialized properly.

This only affects the GTK4 version.

This fixes a regression from commit bc32b0c3a2.
([gtk] DragImage: Implement GTK4 drag & drop.)

Affects: v2.4 - v2.5
2025-05-02 21:02:59 -04:00
David Korth
fb032f03ea NEWS.md: Mention the TERM check. 2025-04-28 18:49:26 -04:00
David Korth
7d379f826d [cmake] gcc.cmake: Fix DT_RELR enablement.
Some checks are pending
Codecov / run (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
It seems this was broken since it was initially implemented in v2.0
in commit d732fbc010
([cmake] platform/gcc.cmake: Initial support for detecting DT_RELR.)
because TMP_HAVE_DT_RELR was unset too early.
2025-04-28 01:03:31 -04:00
David Korth
21e692e9cf NEWS.md: Mention rpcli colorizing more stuff. 2025-04-27 19:21:53 -04:00
David Korth
dc2649beff [libromdata] MegaDrive: Add external image URL support for the Teradrive TMSS ROM.
Some checks are pending
Codecov / run (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
2025-04-27 15:31:30 -04:00
David Korth
8d7f709f8b [libromdata] ISOPrivate::host32(): Fix a typo that broke "Volume Size" on CD-i volumes.
Some checks are pending
Codecov / run (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
Need to use be32_to_cpu() for 32-bit values, not be16_to_cpu().

This fixes a regression from commit 5cfce44312.
([libromdata] ISO: Always use host-endian except for CD-i, in which case, always use big-endian.)

Affects: v1.8 - v2.5

NOTE: v1.8 was the first version with CD-i support, so this was
effectively "always" broken.
2025-04-26 15:12:55 -04:00
David Korth
81555db6b5 NEWS.md: Mention that we fixed #154: SNES: Nintendo Power directory 2025-04-26 13:13:33 -04:00
David Korth
edd89a0b1c [libromdata] SNES: List the Nintendo Power directory for full NP cartridge dumps.
Currently shows the directory index, title (in Japanese), game code,
timestamp (directly as it's listed, no timezone adjustments), and
kiosk ID.
2025-04-26 12:35:40 -04:00
David Korth
02d7fbfdfa [kde] RomDataView: QTreeView is defaulting to sorting by column 0, descending.
Make it sort in ascending order by default instead.

NOTE: Using column -1 to suppress the sort indicator visibility.

Might want to guard this with QT_VERSION_CHECK(6, 0, 0), but it seems
to have no effect on KF5 on my system, but it might on some other
systems with weird shenanigans happening...
2025-04-26 12:33:44 -04:00
David Korth
48a98edc13 NEWS.md: The next release will be v2.5.1.
No major new features, just some bug fixes.
2025-04-26 11:29:50 -04:00
David Korth
755a28f910 NEWS.md: Mention the ISO sector mode changes.
Fixes #322: Underlying CD image type for ISO
Reported by @DankRank.
2025-04-26 11:26:54 -04:00
David Korth
5a738f8277 [libromdata] ISO: Get the sector size from the underlying disc reader classes if not reading directly from a file.
The SparseDiscReader changes in v2.3 broke this, so anything that uses
an ISO-9660 format showed 2048-byte sectors, even if this wasn't the case.

SparseDiscReader subclasses now have a set of CD-ROM specific fields to
set, e.g. CD-ROM sector size, mode, and subchannels. For multi-track
images, this should be set for the "main" data track.

Updated the following classes to set these fields:
- CdiReader (uses Track 02 for Dreamcast games)
- GdiReader (uses Track 03 for Dreamcast games)
- Cdrom2352Reader (always uses 2352-byte sectors, but gets mode from
  the first sector)
- CisoPspReader (always uses MODE1/2048)

GameCube and Wii disc reading classes don't set these, since they aren't
CD-ROM formats with multiple sector sizes.
2025-04-26 10:48:52 -04:00
David Korth
8e78811e8a NEWS.md: The EXE manifest bug only affects v2.5. 2025-04-26 09:55:14 -04:00
David Korth
2cd5fc45f4 NEWS.md: Mention UTF-8 improvements in rpcli. 2025-04-22 21:00:41 -04:00
David Korth
8e48fd28f1 [rpcli] DoScsiInquiry(): Fix an inverted condition that broke SCSI inquiry.
It was showing an error if the file specified was in fact a device file,
which prevents it from working.

This fixes a regression from commit 837315505e.
([rpcli] rpcli.cpp: Un-indent a few functions.)

Affects: v2.3 - v2.5
2025-04-22 19:51:44 -04:00
David Korth
8f23cc85d9 NEWS.md: Mention the Windows UTF-8 console output issues, and add a v2.5 entry for this. 2025-04-21 23:38:59 -04:00
David Korth
a3f4a3861d [libromdata] EXEPrivate::addFields_PE(): Don't show the "XML parsing failed" warning if the EXE doesn't actually have a manifest. 2025-04-21 20:25:40 -04:00
David Korth
36da8b7168 NEWS.md: Mention localsearch support. 2025-04-20 16:32:50 -04:00
David Korth
f5d34d97cb [libromdata] NintendoDS_BNR::imgpf(): Check for animated icons.
This was previously handled by NintendoDS before banner parsing was
split out into a separate RomData subclass.

Without IMGPF_ICON_ANIMATED, rpcli won't indicate if an animated icon
is present, but it can still be extracted with `-a`.

This fixes a regression from commit f2565965b2.
([libromdata] NintendoDS_BNR: Split icon/title data parsing out of NintendoDS.)

Affects: v2.4 - v2.5
2025-04-20 03:01:14 -04:00
David Korth
9ba1f356de NEWS.md: Add the release date.
...well, it might be a bit longer due to all the package builds...

(cherry picked from commit aa4ba0f2b7)
2025-04-20 01:09:59 -04:00
David Korth
ef415b7998 NEWS.md: Mention that the KDE monospace font changes requires Qt 5.2 or later. 2025-04-19 17:00:45 -04:00
David Korth
a0bed9d59d NEWS.md: Mention the KDE UI frontend monospace font changes. 2025-04-19 16:13:18 -04:00
David Korth
b4fe8c22e1 [libromdata] Wim_xml: Add special handling for unstaged images.
Unstaged images contain sets of components instead of a fully-installed
Windows system. These aren't as common as staged images.

The list of editions appears to be in the display description, though
I don't have an unstaged image to verify this. If the display description
contains "EDITIONS:", and the regular edition field and languages are
both empty, then it will be assumed to be unstaged. The list of editions
will be split and one image will be shown for each edition, using the
image number and a letter.

Should fix #445: [libromdata - WIM] Unstaged Windows OS installation images not properly supported
Requested by @pivotman319-owo.

NOTE: Needs to be verified!
2025-04-17 20:03:13 -04:00
David Korth
06a86667b3 [librptexture] rp_image_ops_neon.cpp: Added a NEON-optimized version of rp_image::swizzle().
Note that NEON's vtbl instructions doesn't support the bit 7 "zero it"
feature that x86's pshufb supports, so we have to use an AND mask in
addition to an OR mask.

Tested using luminance_alpha_reference_u.ktx2, which has a swizzle
value 'rrrg'. (Also used this for testing the previous commit, which
switched some mask stuff from 8-bit operations to 32-bit.)
2025-04-17 01:27:12 -04:00
David Korth
439ce8008b NEWS.md: Mention more NEON-optimized functions. 2025-04-11 19:51:02 -04:00
David Korth
3b55571bc7 NEWS.md: Mention PR #444. 2025-04-03 20:44:57 -04:00
David Korth
3ab17acba1 NEWS.md: Mention the XML parser switch. 2025-04-01 19:19:24 -04:00
David Korth
f6398a63ee [libromdata] WimPrivate::addFields_XML(): Fix copy/paste error for FILETIMEs.
Both lastmodtime_high and lastmodtime_low were being initialized to
strtoul(s_highPart, ...).

Testing Windows 10 (10.0.19041.5363) recovery image: (winre.wim)
- HIGHPART: 0x01D5ACCD
- LOWPART:  0x97A856C3
- Decimal: 132201763089962691

Timestamp conversions before and after: (using TZ=UTC)
- Before: 12/07/2019 07:07:37 AM
- After:  12/07/2019 07:11:48 AM

Manually converting it using a website:
- Saturday, December 7, 2019 7:11:48 AM

TODO: Split the XML code into a separate .cpp file and add DelayLoad checks.
2025-03-31 22:19:49 -04:00
David Korth
bafc14e792 NEWS.md: Move the rpcli text colorization note to "Other changes". 2025-03-29 22:29:04 -04:00
David Korth
5e859695d6 NEWS.md: Mention the RPF fix. 2025-03-29 21:09:35 -04:00
David Korth
7f1286a9a8 NEWS.md: Mention NEON-optimized byteswap functions. 2025-03-29 17:48:15 -04:00
David Korth
2ccba6205b Remove IFUNC support.
It's only supported by glibc on Linux (and possibly some of the BSDs),
and it adds a lot of complexity. The regular C dispatch functions only
have a few instructions of overhead in most cases.

Adding ARM NEON would have complicated things:
- 32-bit ARMv7: Needs a check on Linux and Android; on Windows, it's
  guaranteed to be present.
- 64-bit ARMv8: Always exists.
2025-03-29 16:46:51 -04:00
David Korth
9a86cb531f NEWS.md: Mention colorization. 2025-03-22 17:30:43 -04:00
David Korth
15d7ae00eb [gtk] RomDataView: Set RFT_STRING_warning_quark *before* calling set_label_format_type().
Otherwise, the description label won't get the "warning" formatting.
2025-03-22 12:38:07 -04:00
David Korth
1c2d28d876 [libromdata] Dreamcast: Fix typo that broke GDI parsing.
Both the GDI and CDI branches were attempting to create CdiReader objects.
That obviously won't work for GDI.

This fixes a regression from commit 209ea0d951.
([libromdata] MultiTrackSparseDiscReader.hpp: New interface for multi-track sparse disc reader classes.)

Affects: v2.4 - v2.4.1
2025-03-22 11:05:58 -04:00
David Korth
1cd09c3039 [librptexture] Qoi: New parser for the Quite OK Image Format.
qoi.h is used for upstream, instead of writing a custom decoder.
I may write a custom decoder later to decode the Qoi data directly
into an rp_image without having an intermediate step.
2025-03-17 18:10:03 -04:00
David Korth
be23ac0dc4 [win32] Fix handling of CD-ROM drives.
RomDataFactory::T_create(): Check if the filename is a drive letter.

IRpFile: Move IsDriveLetter*() and related from RpFile_win32.cpp to
IRpFile.hpp, #ifdef'd for Windows only.

CD-ROM drive volume roots can now be handled by rom-properties again.

This broke when support for Wii U Packages was added, since devices are
also considered root directories, so the directory check was done instead
of the device check.

Affects: v2.4 - v2.4.1
2025-03-13 19:31:24 -04:00
David Korth
78d041b0fb [libromdata] Xbox360_STFS: Fix reading large XEXes that overlap a hash block boundary.
This should fix a bunch of STFSes that previously claimed an encryption
key was missing because they were unable to decompress LZX data correctly.

TODO:
- Create a SparseDiscReader instead of reading the entire file into memory.
- Handle non-contiguous files. (Unlikely in packages; more likely in
  save files.)
2025-03-02 13:46:46 -05:00
David Korth
3d04fdee1b [libromdata] Xbox360_XEX: Fix Australian (ACB) age ratings in some XBLA titles.
Sonic the Fighters has a value '3', which isn't defined in Xenia's enum
for ACB. Rework it such that G=0,1; PG=2,3; M=4,5; MA15+=6,7.

TODO: Need to verify this with more titles.
2025-03-02 00:50:45 -05:00
David Korth
6c58b9d74b [libromdata] EXEPEMachineTypes_data.txt: Add CHPEv1 i386 and CHPEv2 ARM64X.
These are supposed to use the "hybrid metadata pointer", but some older
DLLs have a separate machine type instead.

EXE_PE.cpp: Change "CHPE" to "CHPEv1".

Fixes #439: Missing ARM64 machine type IMAGE_FILE_MACHINE_CHPE_X86
Reported by @pivotman319-owo.
2025-02-23 21:12:24 -05:00
David Korth
f28f6af6eb [libromdata] WiiUData: Fix sorting issues.
This caused asserts when using libstdc++ debug mode.

wiiu_application_types: "Game Update" should be after "Game DLC".
This broke "Super Smash Bros. for Wii U (USA) (Update)".

/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/stl_algo.h:1970:
In function:
    _FIter std::lower_bound(_FIter, _FIter, const _Tp&, _Compare) [with
    _FIter = const LibRomData::WiiUData::WiiUApplicationType*; _Tp =
    unsigned int; _Compare =
    LibRomData::WiiUData::lookup_application_type(uint32_t)::<lambda(const
    LibRomData::WiiUData::WiiUApplicationType&, uint32_t)>]

Error: elements in iterator range [first, last) are not partitioned by the
predicate __comp and value __val.

Objects involved in the operation:
    iterator "first" @ 0x7fffffffc578 {
      type = LibRomData::WiiUData::WiiUApplicationType const* (constant iterator);
    }
    iterator "last" @ 0x7fffffffc570 {
      type = LibRomData::WiiUData::WiiUApplicationType const* (constant iterator);
    }

disc_publishers_noregion: Three disc publishers were out of order.
This broke "NES REMIX (USA)" and "NES REMIX 2 (USA)".

/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/stl_algo.h:1970:
In function:
    _FIter std::lower_bound(_FIter, _FIter, const _Tp&, _Compare) [with
    _FIter = const LibRomData::WiiUData::WiiUDiscPublisher*; _Tp = unsigned
    int; _Compare = LibRomData::WiiUData::lookup_disc_publisher(const
    char*)::<lambda(const LibRomData::WiiUData::WiiUDiscPublisher&,
    uint32_t)>]

Error: elements in iterator range [first, last) are not partitioned by the
predicate __comp and value __val.

Objects involved in the operation:
    iterator "first" @ 0x7ffc13befb38 {
      type = LibRomData::WiiUData::WiiUDiscPublisher const* (constant iterator);
    }
    iterator "last" @ 0x7ffc13befb30 {
      type = LibRomData::WiiUData::WiiUDiscPublisher const* (constant iterator);
    }
2025-02-08 12:00:33 -05:00
David Korth
f2e9b43145 [kde] ImageTypesTab: Fix tab ordering for the Credits label.
Remove lblCredits from the .ui file and create it manually after creating
the QComboBoxes. This eliminates the need to use setTabOrder(), which
wasn't working properly when trying to set lblCredits to after the final
QComboBox that was created by createComboBox().

FIXME: Tab ordering still has the label itself as a tab stop, in addition
to the two links...
2025-02-08 11:43:17 -05:00
David Korth
c1e8b097da NEWS.md: Mention the PE Exports bounds checking. 2025-02-04 20:42:49 -05:00
David Korth
8e70d2bf3f NEWS.md: Mention J2ME .jad files. 2025-02-02 15:12:57 -05:00
David Korth
c7d0a0a9c5 [librptexture] PowerVR3: Check header.pvr3.version for PVR3_VERSION_SWAP, not d->pvr3Header.version.
d->pvr3Header hasn't been initialized at this point.

This broke when PowerVR3 was extended to handle PowerVR 2.0 textures.

Most PowerVR3 files are little-endian, so the usual case of x86/amd64/arm
wouldn't have caused a problem. On PowerPC, the files weren't detected.

This fixes a regression from commit f5a099d169.
([librptexture] PowerVR3: Preliminary support for PowerVR v2.0 files.)

This fixes ImageDecoderTest's PowerVR3 tests.

Affects: v2.4 - v2.4.1

Also, un-indent PowerVR3Private.
2025-02-01 23:47:51 -05:00
David Korth
53e974b237 [win32] RP_ShellPropSheetExt: Properly rescale the icon and banner sizes.
This was already done in the GTK and KDE UI frontends, but not in
Win32, which results in PSP Minis showing a gigantic banner because
they have a 310x180 background image that's used as a banner.

Also, remove RP_ShellPropSheetExt_Private::rescaleImage(). This was
copied to DragImageLabel in commit c234c6cf36
([win32] DragImageLabel: Copied image sizing, including rescaleImage(), to DragImageLabel.)
because it was still used for the banner code, but was never removed.

NOTE: Prior to DragImageLabel, the banner was unconditionally resized
to 96x32. This would have prevented the giant image issue, but it's
the wrong aspect ratio for PSP Minis. (310x180 -> 55x32)

Also, icons were previously unconditionally resized to 32x32, which
usually works, unless something has a non-square icon.

Fixes #433: [Bug Report] The ROM type is not displayed correctly for some PSP Mini ROMs
Reported by @xxmichibxx.

Affects: v1.5 - v2.4.1
2025-02-01 09:49:11 -05:00