# Platform sites for ppcrecomp --platform-sites: site word kind [note].
# docs/native-time-20261005/STAGE2_VI.md (D5, section 5, decided (b)): guest code
# outside the VI library that reads or writes a VI register. The generator emits
# Cpu::platform_read16 / Cpu::platform_write16 in place of exactly these accesses,
# at the same effective address. Each site is pinned by its DOL instruction word (a
# D-form lhz or sth, checked with tools/doldis.py) and must be emitted, or generation
# is refused. The kind is the name the runtime answers for (NativeVideo,
# runtime/src/gekko/native_video.cpp), which refuses any other effective address. A
# site leaves this list when its containing function gets a native owner (fonts and
# CARD: stage 5, reset: stage 6; SISetSamplingRate's VICLK read left at stage 3).
# The kind `dead` (docs/native-time-20261005/STAGE6_PI_MI.md, D4) is a store whose
# register has no consumer on the PC: the generator emits its effective address
# and nothing else (only sth may be dead).
# docs/native-time-20261005/STAGE4_GX_SYNC.md (D6): the CP performance-select
# stores of GXInit and GXSetGPMetric, which stay game code (NativeGxSync,
# runtime/src/gekko/native_gx_sync.cpp, answers them: nothing to select).
# docs/native-time-20261005/STAGE6_PI_MI.md (D4): __OSInitMemoryProtection's
# memory-interface stores - the PC has no memory-protection hardware and no MI
# interrupt; the BAT layout, the OS masks and records it writes stay game code.
# One time base (docs/FRAME_PACING.md, B2 2026-10-27): a console constant in game
# code - li - whose register gets the native platform's value (Cpu::platform_value).
# The loading screen's draw throttle compares the microseconds since its last draw
# with the console's 59.94 Hz field (16,683 us = 675,675 ticks / 40.5); NativeVideo
# answers the current field, exactly one 1/60 s frame (16,666 us).
0x802BEA00 0x3800412B display_field_us  fn_802BE9D4 (loading screen draw): li r0,0x412B, the field it waits out between draws
