MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / SYSCALL

Function SYSCALL

pcsx2/R5900OpcodeImpl.cpp:908–1206  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

906#include "Sifcmd.h"
907
908void SYSCALL()
909{
910 u8 call;
911
912 if (cpuRegs.GPR.n.v1.SL[0] < 0)
913 call = (u8)(-cpuRegs.GPR.n.v1.SL[0]);
914 else
915 call = cpuRegs.GPR.n.v1.UC[0];
916
917 BIOS_LOG("Bios call: %s (%x)", R5900::bios[call], call);
918
919
920 switch (static_cast<Syscall>(call))
921 {
922 case Syscall::SetGsCrt:
923 {
924 //Function "SetGsCrt(Interlace, Mode, Field)"
925 //Useful for fetching information of interlace/video/field display parameters of the Graphics Synthesizer
926
927 gsIsInterlaced = cpuRegs.GPR.n.a0.UL[0] & 1;
928 bool gsIsFrameMode = cpuRegs.GPR.n.a2.UL[0] & 1;
929 const char* inter = (gsIsInterlaced) ? "Interlaced" : "Progressive";
930 const char* field = (gsIsFrameMode) ? "FRAME" : "FIELD";
931 std::string mode;
932 // Warning info might be incorrect!
933 switch (cpuRegs.GPR.n.a1.UC[0])
934 {
935 case 0x0:
936 case 0x2:
937 mode = "NTSC 640x448 @ 59.940 (59.82)"; gsSetVideoMode(GS_VideoMode::NTSC); break;
938
939 case 0x1:
940 case 0x3:
941 mode = "PAL 640x512 @ 50.000 (49.76)"; gsSetVideoMode(GS_VideoMode::PAL); break;
942
943 case 0x1A: mode = "VESA 640x480 @ 59.940"; gsSetVideoMode(GS_VideoMode::VESA); break;
944 case 0x1B: mode = "VESA 640x480 @ 72.809"; gsSetVideoMode(GS_VideoMode::VESA); break;
945 case 0x1C: mode = "VESA 640x480 @ 75.000"; gsSetVideoMode(GS_VideoMode::VESA); break;
946 case 0x1D: mode = "VESA 640x480 @ 85.008"; gsSetVideoMode(GS_VideoMode::VESA); break;
947
948 case 0x2A: mode = "VESA 800x600 @ 56.250"; gsSetVideoMode(GS_VideoMode::VESA); break;
949 case 0x2B: mode = "VESA 800x600 @ 60.317"; gsSetVideoMode(GS_VideoMode::VESA); break;
950 case 0x2C: mode = "VESA 800x600 @ 72.188"; gsSetVideoMode(GS_VideoMode::VESA); break;
951 case 0x2D: mode = "VESA 800x600 @ 75.000"; gsSetVideoMode(GS_VideoMode::VESA); break;
952 case 0x2E: mode = "VESA 800x600 @ 85.061"; gsSetVideoMode(GS_VideoMode::VESA); break;
953
954 case 0x3B: mode = "VESA 1024x768 @ 60.004"; gsSetVideoMode(GS_VideoMode::VESA); break;
955 case 0x3C: mode = "VESA 1024x768 @ 70.069"; gsSetVideoMode(GS_VideoMode::VESA); break;
956 case 0x3D: mode = "VESA 1024x768 @ 75.029"; gsSetVideoMode(GS_VideoMode::VESA); break;
957 case 0x3E: mode = "VESA 1024x768 @ 84.997"; gsSetVideoMode(GS_VideoMode::VESA); break;
958
959 case 0x4A: mode = "VESA 1280x1024 @ 63.981"; gsSetVideoMode(GS_VideoMode::VESA); break;
960 case 0x4B: mode = "VESA 1280x1024 @ 79.976"; gsSetVideoMode(GS_VideoMode::VESA); break;
961
962 case 0x50: mode = "SDTV 720x480 @ 59.94"; gsSetVideoMode(GS_VideoMode::SDTV_480P); break;
963 case 0x51: mode = "HDTV 1920x1080 @ 60.00"; gsSetVideoMode(GS_VideoMode::HDTV_1080I); break;
964 case 0x52: mode = "HDTV 1280x720 @ ??.???"; gsSetVideoMode(GS_VideoMode::HDTV_720P); break;
965 case 0x53: mode = "SDTV 768x576 @ ??.???"; gsSetVideoMode(GS_VideoMode::SDTV_576P); break;

Callers

nothing calls this directly

Calls 9

gsSetVideoModeFunction · 0.85
ReadOSDConfigParamesFunction · 0.85
ShiftJIS_ConvertStringFunction · 0.85
__Deci2CallFunction · 0.85
cpuExceptionFunction · 0.85
ErrorMethod · 0.45
WarningMethod · 0.45
c_strMethod · 0.45
WriteLnMethod · 0.45

Tested by

no test coverage detected