mirror of
https://github.com/libretro/parallel-ps2.git
synced 2026-11-09 17:28:25 -10:00
Gif_Unit.c is the GIF unit -- the three paths' packet buffers, GIF tag parsing, the A+D writes the GIF acts on, path arbitration, the VU1 thread's path 1 queue and the savestate handler -- in C89. Gif_Path and Gif_Unit are plain structs with the saved state's layout; the methods are gif_path_* and gif_unit_* functions, the GS thread is reached through mtgs_wait_gs and Gif_AddCompletedGSPacket, and the path buffers are allocated with the VM (gif_unit_init, gif_unit_shutdown) instead of by a static constructor at load. The MTGS, MTVU, GS, FIFO, VU interpreter and both VU recompilers' XGKICKs call the C entry points. tests/eegifunit feeds all three paths seeded GIF packets as DMA, DIRECT, DIRECTHL, XGKICK and FIFO data, with the VU1 thread on and off, through arbitration, PATH3 masking, SIGNALs, resets, savestates and packets that outgrow their buffer, and checks it against the previous C++. tests/ee/hwgslabel scores the C unit's SIGNAL and LABEL merges.