136e2ff05c64001544df6c9bc2c8c2d4f527e396
6
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4e04fd1fb2 |
Displays: -tident identify mode, panel re-entry fix, desktop-order log
Follow-up to the gos-displays.txt enumeration trace. The expanded log arrived from the Intel tester and settled the failure - and disproved the hypothesis it was written to test. What the log showed ------------------- The consistency check printed "No duplicate device assignments", so the suspected -tmon clash was NOT the cause. The actual evidence was that HSH_EnterFullScreen2 runs TWICE: the first entry brings every panel up DD_OK, the second fails on the same device with DDERR_EXCLUSIVEMODEALREADYSET and then DDERR_NOCOOPERATIVELEVELSET. Two independent causes, one operational and one a real defect. Cause 1 - Windows Display Settings numbers are not DirectDraw indices -------------------------------------------------------------------- The operator set -tmon by reading the numbers off the Display Settings arrangement diagram. On that machine all three numbering systems differ: Settings 3 -> \\.\DISPLAY1 -> device 0 (primary, 800x600, main) Settings 4 -> \\.\DISPLAY4 -> device 3 (USB adapter, radar) Settings 2 -> \\.\DISPLAY2 -> device 1 (mfd1) Settings 1 -> \\.\DISPLAY3 -> device 2 (mfd2) A permutation with two accidental fixed points - no derivable rule, and the Settings ordinal is not exposed by any documented API, so it cannot be translated in code. -tmon 1,4,2,3 worked first try (user-confirmed). This is why Windows ships an Identify button rather than publishing the mapping. Cause 2 - panels re-opened without being released (REAL BUG, all machines) ------------------------------------------------------------------------- EnterFullScreenMode() calls HSH_EnterFullScreen2() on every mode change and every lost-front-buffer recovery, but the teardown HSH_DirectDrawRelease2() was only wired to DirectDrawRelease(), i.e. full shutdown. CHSH_Device::InitFirst() therefore overwrote pDD with a fresh IDirectDraw7 while the previous one still held exclusive fullscreen, leaking it and its exclusive claim for the life of the process. It only bites when a panel sits on the Windows primary: secondary outputs grant exclusive mode again, the primary does not. Every working pod happens to have the main display on the primary, so no panel is ever there - which is the whole reason this looked hardware-specific. FIX: HSH_EnterFullScreen2() now releases first when hsh_initialized || hsh_mrdev_initialized. Tagged [panelreinit]. Reuses the existing teardown, which already restores the display mode, drops the coop level and clears the flags for both the MFD/radar and cameraship paths. New: -tident, the game's own Identify ------------------------------------- MW4.exe -tident [3..120, default 20] fills every display with a distinct colour and prints, huge, the number to type into -tmon, plus its device index and the role currently assigned to it. Then exits. Deliberately uses DDSCL_NORMAL and paints via GDI on the primary surface: no exclusive mode, no display mode change. Taking exclusive fullscreen on several devices at once is the very failure being diagnosed, and a diagnostic that trips over that fault is worthless - this works even on a pod where the MFD modes are broken. It opens the real DirectDraw devices rather than positioning GDI windows by HMONITOR, so it proves the device-index -> physical-output association through the same path the panels use. Positioning by DirectDraw's own reported HMONITOR would be circular. Implemented as IdentifyDisplays() in VideoCard.cpp, called at the end of FindVideoCards() followed by ExitProcess(0). Everything it paints is also written to gos-displays.txt, so the mapping survives even if a monitor is dead. Also added: desktop-order block ------------------------------- gos-displays.txt now prints the monitors sorted left-to-right by desktop position with their device indices, which maps directly onto the picture in Display Settings. For the reporting machine it reads out as -tmon 1,4,2,3 with no derivation required. Documentation ------------- * -help: new -tident entry. The -tmon text now states outright that these are NOT Display Settings numbers and points at -tident. Its old "-tmon 1,2,3,4" example was actively inviting the mistake that caused this report, so that section was rewritten rather than appended to. * Release notes (md + html, both hand-maintained): -tident section with sample output and the reason it has to exist; -tmon warning; new sections for the CLASH report and the re-entry fix in operator terms; switch-table row; expanded log description with the copy-before-relaunch warning; upgrade-checklist step to run -tident once after upgrading. * CLAUDE.md: STEP 12 with the full engineering record, including the three-way numbering table and both causes. * OPTIONS-INI.md: videodriverindex note now points at -tident. Cost ---- -tident is opt-in and exits immediately after. The desktop-order block is a handful of extra startup writes. Nothing added is reachable from the frame loop. Testing ------- -tmon 1,4,2,3 confirmed working on the reporting machine, which validates the diagnosis. The -tident and re-entry changes are NOT yet built or run; both need a rebuild of MW4.exe (Release + Profile) as they touch CoreTech GameOS. Worth checking on the W4100 bench first that CreateSurface(PRIMARYSURFACE) under DDSCL_NORMAL succeeds on secondary devices through dgVoodoo2 - if a panel comes up blank the log names the failing call. Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com> Co-authored-by: GitHub Copilot <copilot@github.com> |
||
|
|
0f901f71d5 |
Release notes: document which -tmon positions apply in each MFD mode
-tmon has four positions (main, radar, MFD1, MFD2) but only the first two do anything in the spanned modes. Positions 3 and 4 write to the mode 4 MFD device slots, which -tmfds 1 and -tmfds 3 never read -- they drive both MFDs from one wide display instead. The switch accepts them either way, so an operator could reasonably assume they had taken effect. Also states what was previously undocumented: the spanned MFD display itself cannot be assigned with -tmon at all. It is chosen automatically as the first display advertising a 1280x480 mode, which is a distinctive enough signature that it normally lands correctly. Noted that it can be added if anyone needs to force it. Adds a per-mode table, a pointer to gos-displays.txt for diagnosing a display that lands in the wrong place, and a qualifier on the -tmon row of the switch summary. No code changes -- documentation only. Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com> Co-authored-by: GitHub Copilot <copilot@github.com> |
||
|
|
7fc9089aad |
Clarify dgVoodoo2 scope: any second display, cameraship included
The dgVoodoo2 requirement was written as an MFD-mode problem. It is not. The limitation is per SECONDARY DISPLAY, not per feature, so it applies to every mode that lights up a second monitor -- including cameraship mode, which uses two displays and no MFDs at all. Console mode is the only configuration that does not need dgVoodoo2, because it is single-display. This matches the code: IsMultimonitorAvaliable() returns false for _ECTCL_CameraShip, so cameraship falls through to IsSecondaryMonitorAvaliable() and the single-secondary mr_device path -- which is still a second exclusive IDirectDraw7, and therefore still refused by modern Windows for exactly the same reason as the MFD panels. Release notes updated in all three places it appears -- section heading and opening, the known-issues entry, and upgrade checklist step 4 -- so an owner running cameraship pods cannot read the requirement as "only applies to MFD setups" and skip it. CLAUDE.md STEP 10 and repo memory corrected likewise, since both stated the narrower "-tmfds 1/3/4" scope. Both release-notes formats regenerated; still plain ASCII with CRLF. Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com> Co-authored-by: GitHub Copilot <copilot@github.com> |
||
|
|
7f7f98d992 |
Release notes: soften dgVoodoo2 wording, note -tbaud is hardware-limited
Two wording corrections from the project owner, plus repair of three characters left mangled by the earlier CP949 encoding problem. 1. dgVoodoo2 known-issue entry. "This is a Windows limitation, not a bug we can fix" overstated it -- it reads as permanent. Replaced with a statement of what dgVoodoo2 actually does (works around a limitation on exclusive full-screen use of multiple displays on platforms after Windows XP) and that a future release may address it. The borderless-windowed design assessed in CLAUDE.md STEP 10 is exactly such a route, so leaving the door open is the accurate framing. 2. -tbaud. The notes implied any rate in the 9600-921600 range simply works. The software will set any of them, but the achievable rate is bounded by hardware at both ends: the serial UART in the pod PC and the RIO or replica RIO board. Added that, with the symptoms of an unsupported rate (garbled input, dropped buttons, no response) and the advice to step down. Without it an owner could conclude a high rate is broken in the game when it is the UART or board refusing it. Also repaired three leftovers from the CP949 encoding issue: two em dashes at ends of lines that the earlier pass missed because it only matched dashes surrounded by spaces, and the warning glyph on the MySQL export note, which had become a literal "??" and is now a WARNING: label. It renders as a styled warning callout in the HTML alongside the XP one, so both hazards look like hazards. Both formats regenerated and verified: 0 non-ASCII bytes, 0 remaining artefacts, 2 warning and 5 note callouts in the HTML. Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com> Co-authored-by: GitHub Copilot <copilot@github.com> |
||
|
|
1b931d5fb8 |
Correct dgVoodoo2 guidance: never ship it, XP pods must not have it
Two corrections from the project owner.
1. dgVoodoo2 must NEVER be added to the repo or the deploy script.
The pod fleet is mixed. XP pods use native DirectDraw and need nothing extra --
installing dgVoodoo2 on them BREAKS them. Only Windows 10/11 pods need it, and
only for the MFD modes. It is therefore an installed-per-machine, OS-dependent
prerequisite that the pod owner sets up, not a build artifact.
This reverses the recommendation added in the previous commit, which suggested
versioning the working dgVoodoo.conf and having deploy-mw4.ps1 place it. That
advice was wrong: it would have pushed a Win10-only dependency onto every XP
machine. dgVoodoo.conf and dgVoodooCpl.exe were removed in
|
||
|
|
10dab8f2d5 |
Add V5.1.0b_RC1 end-user release notes (markdown + HTML)
Release notes covering the 58 commits since
|