diff --git a/CHANGELOG b/CHANGELOG index 217755e50..84190a622 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -587,7 +587,7 @@ API Changes delay (DAC, receiver, Bluetooth, display). Press the service key on the game list; a click plays once a second and the screen flashes. Adjust with the stick until the flash and the click coincide, then - press button 1 to save. The value is kept in audio.cfg in the data + press button 1 to save. The value is kept in machine.cfg in the data root and applied to every game on the machine, from the menu or the command line, on top of any per-game AUDIO_DELAY. Scripts can read and set it with singeGetAudioCalibration() / singeSetAudioCalibration(), @@ -862,6 +862,41 @@ API Changes things that must not pass through each other -- which is what the collide calls deliberately do not do. +- The service tools. Pressing the SERVICE key on the bundled menu now + opens a list of ten screens rather than the audio delay screen alone: + Audio Delay, Input Test, System Information, Light Gun, Sound Test, + Display, Disc Test, Saved Data, MIDI Ports and Frame Statistics. + Button 2 backs out of a tool, the service key leaves. They live in + Singe/Tools.singe, which the engine extracts beside Menu.singe, and + each is a page of Singe/Menu.rml, so a cabinet builder can add one. + MenuClassic keeps the audio delay screen and nothing else. + + Four calls were added for them, and are worth having on their own: + + singeGetSystemInfo() returns everything the trace header knows in one + table -- version, operating system, processor, renderer, 3D device, + video decoders, audio formats, SoundFont, MIDI, window and canvas + sizes, this game's data directory and the data root every game writes + under -- so a bug report can be a photograph. + + vldpGetShift() and vldpSetShift(x, y) move the picture within the + window while the game runs, the running equivalent of --shiftx and + --shifty, beside vldpGetScale and vldpSetScale. + + singeSaveGeometry() keeps the scale, shift and rotation for this + machine, in the same machine.cfg the audio delay uses, and the engine + applies them to every game it starts afterwards unless the command + line names its own. A monitor is squared up once, not once per game. + The file is called machine.cfg rather than audio.cfg, because the + audio delay is no longer all it holds. + + discGetFrameCount() answers how many frames the disc has. A framefile + answers for the whole disc rather than the segment playing. + + SINGE_CONTROLLER_AXES and SINGE_CONTROLLER_BUTTONS join the input + layout globals, so a service screen can walk a pad without knowing the + numbers. + - Subtitles carried inside the video file: discGetSubtitleTracks(), discGetSubtitleLanguage(track) and srtLoadTrack(track), which reads one track out of the disc's own container and loads it exactly as diff --git a/CMakeLists.txt b/CMakeLists.txt index d0ee0e813..ee6aefcf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,6 +189,7 @@ singeEmbed(${CMAKE_SOURCE_DIR}/assets/Framework.singe ${GENERATED_DIR}/Framework singeEmbed(${CMAKE_SOURCE_DIR}/assets/controls.cfg ${GENERATED_DIR}/controls_cfg.h "") singeEmbed(${CMAKE_SOURCE_DIR}/assets/settings.cfg ${GENERATED_DIR}/settings_cfg.h "") singeEmbed(${CMAKE_SOURCE_DIR}/assets/Menu.singe ${GENERATED_DIR}/Menu_singe.h "") +singeEmbed(${CMAKE_SOURCE_DIR}/assets/Tools.singe ${GENERATED_DIR}/Tools_singe.h "") singeEmbed(${CMAKE_SOURCE_DIR}/assets/MenuClassic.singe ${GENERATED_DIR}/MenuClassic_singe.h "") singeEmbed(${CMAKE_SOURCE_DIR}/assets/Menu.rml ${GENERATED_DIR}/Menu_rml.h "") singeEmbed(${CMAKE_SOURCE_DIR}/assets/menu.rcss ${GENERATED_DIR}/menu_rcss.h "") diff --git a/assets/Menu.rml b/assets/Menu.rml index 7d82bed28..47ede87d3 100644 --- a/assets/Menu.rml +++ b/assets/Menu.rml @@ -28,17 +28,72 @@
-