Commit Graph
67 Commits
Author SHA1 Message Date
Jonas Volman 3fe3cd2959 Match libcmt bounded wide string compare 2026-08-13 08:17:19 -07:00
Jonas Volman fe4065f6b0 Match libcmt wide character set search 2026-08-13 08:13:07 -07:00
Jonas Volman b935e2dc10 Match libcmt bounded wide string copy 2026-08-13 08:09:27 -07:00
Jonas Volman 8347d38f0b Match CRT wide character search 2026-08-13 08:09:06 -07:00
Jonas Volman f28861168d Match libcmt wcsncat object 2026-08-13 08:09:06 -07:00
Jonas Volman ce1993b789 Match libcmt wcsrchr object 2026-08-13 08:02:54 -07:00
Jonas Volman 5ed68e5c0f Match libcmt wcslen object 2026-08-13 08:00:42 -07:00
Jonas Volman 87926d0cfb Match CRT wide time conversion 2026-08-13 08:00:17 -07:00
Jonas Volman b7bde2b64d Document render sprite reconstruction frontier 2026-08-13 07:56:09 -07:00
Jonas Volman f9edce56d2 Match CRT wide string comparison 2026-08-13 07:56:09 -07:00
Jonas VolmanandClaude Opus 5 0244dd1819 Match libcmt wcscat object
Byte-exact, both symbols, whole object.  section_infos_equal passes for _wcscat
(42 bytes) and _wcscpy (28 bytes); with zero relocations in either the .text
sections are literally byte-identical.  Status MISSING -> Matching.

The unit holds two functions: the CRT keeps wcscpy in WCSCAT.C, which is why
config.json has no separate wcscpy entry.  Section order is wcscat then wcscpy,
matching source order.

Both are leaf functions with no externals and no data.  wcscat needs no code for
its return value - dst is loaded into EAX at offset 0 and never clobbered, since
the body works in EDX/ECX/ESI - so a plain "return dst" costs nothing.  The scan
loop rotation the target shows is just what while (*cp) cp++; gives at /O1.

Byte-exact on the first build; no iteration required.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 07:49:30 -07:00
Jonas Volman f1c6f1f4a3 Match antenna object 2026-08-13 07:43:18 -07:00
Jonas Volman 915c78798c Match point physics object 2026-08-13 06:03:44 -07:00
Jonas Volman 3891d13579 Document inline x87 matching controls 2026-08-13 05:57:51 -07:00
Jonas Volman 19236aca35 Match render contrails object 2026-08-13 05:54:40 -07:00
Jonas Volman cfe2aff70a Match collision features object 2026-08-13 05:54:03 -07:00
Jonas Volman 1bf72e846d Match UI widget event handler functions object 2026-08-13 05:40:42 -07:00
Jonas Volman bc6bbd3290 Match widgets object 2026-08-13 05:40:42 -07:00
Jonas Volman e30b15682e Match cheats object 2026-08-13 05:30:26 -07:00
Jonas Volman f623e0bacc Match data encoding object 2026-08-13 05:30:26 -07:00
Jonas Volman 800d746dd6 Match data packets object 2026-08-13 05:30:26 -07:00
Jonas Volman 0c2369607e Match telnet console object 2026-08-13 05:30:26 -07:00
Jonas Volman a489a6513b Match shaders object 2026-08-13 05:20:30 -07:00
Jonas Volman 738deff8c2 Document bitmap group reconstruction blockers 2026-08-13 05:14:35 -07:00
Jonas Volman 5b2fbf0ff8 Match render media object ownership 2026-08-13 05:09:17 -07:00
Jonas Volman 84f03ef19b Revalidate game state object 2026-08-13 05:05:20 -07:00
Jonas Volman 566563bac4 Match game state object 2026-08-13 05:05:20 -07:00
Jonas Volman 9b7f8c54eb Match bored camera object 2026-08-13 04:59:17 -07:00
Jonas Volman a8114eb7ea Match following camera object 2026-08-13 04:48:12 -07:00
Jonas Volman 95bd12eb6e Revalidate action search object 2026-08-13 04:48:12 -07:00
Jonas Volman 69a0bc0fba Match action search object 2026-08-13 04:48:12 -07:00
Jonas Volman ea55318e8d Document path structure BSP compiler blockers 2026-08-13 04:38:14 -07:00
Jonas VolmanandClaude Opus 5 3328df1847 Match cseries sort object
Byte-exact, all four functions, whole object.  Source was a pure skeleton with
no code; status MISSING work now NonMatching -> Matching.

An iterative quicksort for 2-byte and 4-byte elements with a 30-deep bounds
stack and a selection-sort cutoff at 8.  The two code_* symbols are the
selection sorts and take hi in EAX under VC7's custom convention for statics.
The comparator takes values, not pointers, and the zero-extension in the target
pins the 2-byte element type to word rather than short.

Five source-shape findings, each read off the disassembly:

- the swap loads both elements then stores to *best first, which is
  temp = *best; *best = *hi; *hi = temp - the mirror of the natural form.  That
  alone made both selection sorts exact.
- element_count and size are unsigned: the target uses jb, ja and shr where
  signed types give jl, jg and sar.
- the source writes lo+1 < j, not the algebraically identical lo < j-1, which
  reverses the lea and cmp operands.
- the larger-partition test compares raw byte differences.  On word pointers
  every element-count form makes MSVC emit two sars or cancel them and mask,
  costing 16 bytes; only an explicit byte-basis comparison gives the plain dec.
  j-1-lo >= hi-i, j-lo > hi-i and the byte form are integer-identical and only
  the last matches.
- depth = 0 is assigned before hi; the reverse order swaps the two stores.

Both qsort bodies went exact from the same five fixes, which is good evidence
the shapes are right rather than coincidental.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 04:33:37 -07:00
Jonas Volman 66af348945 Match texture page object 2026-07-29 22:16:04 -07:00
Jonas Volman c53047fbe3 Match Xbox vertex shader data object 2026-07-29 19:13:41 -07:00
Jonas Volman 9934cbe876 Match public key crypt object 2026-07-29 18:13:34 -07:00
Jonas Volman cc649df306 Match TIFF RGBA image conversion object 2026-07-29 16:56:51 -07:00
Jonas Volman 64f068c27c Rank strict object closeout candidates 2026-07-29 16:13:28 -07:00
Jonas Volman aaadcbe535 Document compiler provenance workflow 2026-07-29 16:01:33 -07:00
Jonas Volman 37b901a7a5 Match Xbox motion sensor rasterizer 2026-07-29 15:39:58 -07:00
Jonas Volman bca39a6231 Document hardware geometry exact foundation 2026-07-29 14:53:53 -07:00
Jonas Volman 36422bb858 Document prime numbers matching blocker 2026-07-29 14:41:48 -07:00
Jonas Volman ab4fa7c2ad Match multiplayer sound queue object 2026-07-29 14:40:54 -07:00
Jonas Volman ce213d213a Add fail-closed shape transfer candidate executor 2026-07-29 14:00:55 -07:00
Jonas Volman dbe462d56d Match orbiting camera object 2026-07-29 13:57:25 -07:00
Jonas Volman 5b61655c5e Qualify legacy object data evidence 2026-07-29 10:46:08 -07:00
Jonas Volman 6e460859b6 Codify object ledger evidence rules 2026-07-29 10:40:59 -07:00
Jonas Volman 066a910e0f Backfill legacy parked object strategy logs 2026-07-29 10:35:35 -07:00
Jonas Volman bad6101b23 docs: record game engine residual exhaustion 2026-07-29 10:19:23 -07:00
Jonas Volman 23e6f1550f Extend players fixed-point ledger 2026-07-29 10:17:33 -07:00