diff --git a/build/win32/CxbxKrnl.vcxproj b/build/win32/CxbxKrnl.vcxproj
index cb8f9bf1c..fa26a1f90 100644
--- a/build/win32/CxbxKrnl.vcxproj
+++ b/build/win32/CxbxKrnl.vcxproj
@@ -165,6 +165,7 @@
+
@@ -178,6 +179,7 @@
+
@@ -483,6 +485,7 @@
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
+
diff --git a/src/Common/Win32/EmuShared.cpp b/src/Common/Win32/EmuShared.cpp
index e0fc03170..9a7d8ccf7 100644
--- a/src/Common/Win32/EmuShared.cpp
+++ b/src/Common/Win32/EmuShared.cpp
@@ -136,8 +136,8 @@ CXBXKRNL_API void EmuShared::Cleanup()
// ******************************************************************
CXBXKRNL_API EmuShared::EmuShared()
{
- m_XBController.Load("Software\\Cxbx\\XBController");
- m_XBVideo.Load("Software\\Cxbx\\XBVideo");
+ m_XBController.Load("Software\\Cxbx-Reloaded\\XBController");
+ m_XBVideo.Load("Software\\Cxbx-Reloaded\\XBVideo");
}
// ******************************************************************
@@ -145,6 +145,6 @@ CXBXKRNL_API EmuShared::EmuShared()
// ******************************************************************
CXBXKRNL_API EmuShared::~EmuShared()
{
- m_XBController.Save("Software\\Cxbx\\XBController");
- m_XBVideo.Save("Software\\Cxbx\\XBVideo");
+ m_XBController.Save("Software\\Cxbx-Reloaded\\XBController");
+ m_XBVideo.Save("Software\\Cxbx-Reloaded\\XBVideo");
}
\ No newline at end of file
diff --git a/src/Common/Win32/XBController.cpp b/src/Common/Win32/XBController.cpp
index fc6913781..5ae33e584 100644
--- a/src/Common/Win32/XBController.cpp
+++ b/src/Common/Win32/XBController.cpp
@@ -371,7 +371,7 @@ bool XBController::ConfigPoll(char *szStatus)
Map(CurConfigObject, DeviceInstance.tszInstanceName, dwHow, dwFlags);
- printf("Cxbx: Detected %s%s on %s%lu\n", szDirection, ObjectInstance.tszName, DeviceInstance.tszInstanceName, ObjectInstance.dwType);
+ printf("Cxbx-Reloaded: Detected %s%s on %s%lu\n", szDirection, ObjectInstance.tszName, DeviceInstance.tszInstanceName, ObjectInstance.dwType);
sprintf(szStatus, "Success: %s Mapped to '%s%s' on '%s'!", m_DeviceNameLookup[CurConfigObject], szDirection, ObjectInstance.tszName, DeviceInstance.tszInstanceName);
@@ -408,7 +408,7 @@ bool XBController::ConfigPoll(char *szStatus)
{
Map(CurConfigObject, "SysKeyboard", dwHow, dwFlags);
- printf("Cxbx: Detected Key %d on SysKeyboard\n", dwHow);
+ printf("Cxbx-Reloaded: Detected Key %d on SysKeyboard\n", dwHow);
sprintf(szStatus, "Success: %s Mapped to Key %d on SysKeyboard", m_DeviceNameLookup[CurConfigObject], dwHow);
@@ -446,7 +446,7 @@ bool XBController::ConfigPoll(char *szStatus)
{
Map(CurConfigObject, "SysMouse", dwHow, dwFlags);
- printf("Cxbx: Detected Button %d on SysMouse\n", dwHow);
+ printf("Cxbx-Reloaded: Detected Button %d on SysMouse\n", dwHow);
sprintf(szStatus, "Success: %s Mapped to Button %d on SysMouse", m_DeviceNameLookup[CurConfigObject], dwHow);
@@ -518,7 +518,7 @@ bool XBController::ConfigPoll(char *szStatus)
Map(CurConfigObject, "SysMouse", dwHow, dwFlags);
- printf("Cxbx: Detected Movement on the %s%s on SysMouse\n", szDirection, szObjName);
+ printf("Cxbx-Reloaded: Detected Movement on the %s%s on SysMouse\n", szDirection, szObjName);
sprintf(szStatus, "Success: %s Mapped to %s%s on SysMouse", m_DeviceNameLookup[CurConfigObject], szDirection, szObjName);
@@ -1064,7 +1064,7 @@ int XBController::Insert(const char *szDeviceName)
}
}
- MessageBox(NULL, "Unexpected Circumstance (Too Many Controller Devices)! Please contact caustik!", "Cxbx", MB_OK | MB_ICONEXCLAMATION);
+ MessageBox(NULL, "Unexpected Circumstance (Too Many Controller Devices)! Please contact caustik!", "Cxbx-Reloaded", MB_OK | MB_ICONEXCLAMATION);
ExitProcess(1);
diff --git a/src/Common/Xbe.cpp b/src/Common/Xbe.cpp
index d7b3460cf..c3605c479 100644
--- a/src/Common/Xbe.cpp
+++ b/src/Common/Xbe.cpp
@@ -1027,7 +1027,7 @@ void Xbe::DumpInformation(FILE *x_file)
if(GetError() != 0)
return;
- fprintf(x_file, "XBE information generated by CXBX (Version " _CXBX_VERSION ")\n");
+ fprintf(x_file, "XBE information generated by Cxbx-Reloaded (Version " _CXBX_VERSION ")\n");
fprintf(x_file, "\n");
fprintf(x_file, "Title identified as \"%s\"\n", m_szAsciiTitle);
fprintf(x_file, "\n");
diff --git a/src/Core/Xbe.cpp b/src/Core/Xbe.cpp
index 808d1bc55..4f800a9fa 100644
--- a/src/Core/Xbe.cpp
+++ b/src/Core/Xbe.cpp
@@ -1023,7 +1023,7 @@ void Xbe::DumpInformation(FILE *x_file)
if(GetError() != 0)
return;
- fprintf(x_file, "XBE information generated by CXBX (Version " _CXBX_VERSION ")\n");
+ fprintf(x_file, "XBE information generated by Cxbx-Reloaded (Version " _CXBX_VERSION ")\n");
fprintf(x_file, "\n");
fprintf(x_file, "Title identified as \"%s\"\n", m_szAsciiTitle);
fprintf(x_file, "\n");
diff --git a/src/Cxbx.h b/src/Cxbx.h
index f23db8763..a9fba48c4 100644
--- a/src/Cxbx.h
+++ b/src/Cxbx.h
@@ -84,9 +84,9 @@ typedef signed long sint32;
/*! version string dependent on trace flag */
#ifndef _DEBUG_TRACE
-#define _CXBX_VERSION "0.8.1-Pre3"
+#define _CXBX_VERSION "0.0.1-POC"
#else
-#define _CXBX_VERSION "0.8.1-Pre3-Trace"
+#define _CXBX_VERSION "0.0.1-POC-Trace"
#endif
/*! debug mode choices */
diff --git a/src/Cxbx/DlgControllerConfig.cpp b/src/Cxbx/DlgControllerConfig.cpp
index 74d30c466..9ef068f32 100644
--- a/src/Cxbx/DlgControllerConfig.cpp
+++ b/src/Cxbx/DlgControllerConfig.cpp
@@ -83,7 +83,7 @@ INT_PTR CALLBACK DlgControllerConfigProc(HWND hWndDlg, UINT uMsg, WPARAM wParam,
/*! if changes have been made, check if the user wants to save them */
if(g_bHasChanges)
{
- int ret = MessageBox(hWndDlg, "Do you wish to apply your changes?", "Cxbx", MB_ICONQUESTION | MB_YESNOCANCEL);
+ int ret = MessageBox(hWndDlg, "Do you wish to apply your changes?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNOCANCEL);
switch(ret)
{
diff --git a/src/Cxbx/DlgVideoConfig.cpp b/src/Cxbx/DlgVideoConfig.cpp
index de151a605..13b5b36bc 100644
--- a/src/Cxbx/DlgVideoConfig.cpp
+++ b/src/Cxbx/DlgVideoConfig.cpp
@@ -149,7 +149,7 @@ INT_PTR CALLBACK DlgVideoConfigProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPAR
/*! if changes have been made, check if the user wants to save them */
if(g_bHasChanges)
{
- int ret = MessageBox(hWndDlg, "Do you wish to apply your changes?", "Cxbx", MB_ICONQUESTION | MB_YESNOCANCEL);
+ int ret = MessageBox(hWndDlg, "Do you wish to apply your changes?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNOCANCEL);
switch(ret)
{
diff --git a/src/Cxbx/WinMain.cpp b/src/Cxbx/WinMain.cpp
index b12128ccc..a43bfb671 100644
--- a/src/Cxbx/WinMain.cpp
+++ b/src/Cxbx/WinMain.cpp
@@ -48,7 +48,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
/*! verify CxbxKrnl.dll is the same version as Cxbx.exe */
if(!CxbxKrnlVerifyVersion(_CXBX_VERSION))
{
- MessageBox(NULL, "CxbxKrnl.dll is the incorrect version", "Cxbx", MB_OK);
+ MessageBox(NULL, "CxbxKrnl.dll is the incorrect version", "Cxbx-Reloaded", MB_OK);
return 1;
}
@@ -85,7 +85,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
/*! if an error occurred, notify user */
if(MainWindow->GetError() != 0)
{
- MessageBox(NULL, MainWindow->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(NULL, MainWindow->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
}
delete MainWindow;
diff --git a/src/Cxbx/WndAbout.cpp b/src/Cxbx/WndAbout.cpp
index 74a02c359..adc47438c 100644
--- a/src/Cxbx/WndAbout.cpp
+++ b/src/Cxbx/WndAbout.cpp
@@ -40,7 +40,7 @@
WndAbout::WndAbout(HINSTANCE x_hInstance, HWND x_parent) : Wnd(x_hInstance)
{
m_classname = "WndAbout";
- m_wndname = "Cxbx : About";
+ m_wndname = "Cxbx-Reloaded : About";
m_w = 400;
m_h = 300;
diff --git a/src/Cxbx/WndMain.cpp b/src/Cxbx/WndMain.cpp
index 9c35da976..e0caf38e6 100644
--- a/src/Cxbx/WndMain.cpp
+++ b/src/Cxbx/WndMain.cpp
@@ -53,7 +53,7 @@ WndMain::WndMain(HINSTANCE x_hInstance) : Wnd(x_hInstance), m_bCreated(false), m
// initialize members
{
m_classname = "WndMain";
- m_wndname = "Cxbx " _CXBX_VERSION;
+ m_wndname = "Cxbx-Reloaded " _CXBX_VERSION;
m_w = 640;
m_h = 480;
@@ -315,7 +315,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
char AsciiTitle[255];
- sprintf(AsciiTitle, "Cxbx : Emulating %s...", m_Xbe->m_szAsciiTitle);
+ sprintf(AsciiTitle, "Cxbx-Reloaded : Emulating %s...", m_Xbe->m_szAsciiTitle);
SetWindowText(m_hwnd, AsciiTitle);
@@ -326,7 +326,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
case WM_DESTROY:
{
m_hwndChild = NULL;
- SetWindowText(m_hwnd, "Cxbx " _CXBX_VERSION);
+ SetWindowText(m_hwnd, "Cxbx-Reloaded " _CXBX_VERSION);
RefreshMenus();
}
break;
@@ -386,7 +386,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
if(m_Xbe != 0 && m_Xbe->GetError() == 0)
sprintf(buffer, "%s Loaded!", m_Xbe->m_szAsciiTitle);
else
- sprintf(buffer, "%s", "Disclaimer: Cxbx has no affiliation with Microsoft");
+ sprintf(buffer, "%s", "Disclaimer: Cxbx-Reloaded has no affiliation with Microsoft");
RECT rect = {0, 480-15-5, 640-100-4-69, 480-5};
@@ -615,7 +615,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
// ask permission to overwrite if file already exists
if(_access(ofn.lpstrFile, 0) != -1)
{
- if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx", MB_ICONQUESTION | MB_YESNO) != IDYES)
+ if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
return TRUE;
}
@@ -686,14 +686,14 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
}
if(m_Xbe->GetError() != 0)
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
else
{
char buffer[255];
sprintf(buffer, "%s's logo bitmap was successfully exported.", m_Xbe->m_szAsciiTitle);
- MessageBox(m_hwnd, buffer, "Cxbx", MB_ICONINFORMATION | MB_OK);
+ MessageBox(m_hwnd, buffer, "Cxbx-Reloaded", MB_ICONINFORMATION | MB_OK);
printf("WndMain: %s\n", buffer);
}
@@ -772,7 +772,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
if(bmp_err != 0)
{
- MessageBox(m_hwnd, bmp_err, "Cxbx", MB_OK | MB_ICONEXCLAMATION);
+ MessageBox(m_hwnd, bmp_err, "Cxbx-Reloaded", MB_OK | MB_ICONEXCLAMATION);
break;
}
}
@@ -781,7 +781,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
if(m_Xbe->GetError() != 0)
{
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
if(m_Xbe->IsFatal())
CloseXbe();
@@ -801,7 +801,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
printf("WndMain: %s\n", buffer);
- MessageBox(m_hwnd, buffer, "Cxbx", MB_ICONINFORMATION | MB_OK);
+ MessageBox(m_hwnd, buffer, "Cxbx-Reloaded", MB_ICONINFORMATION | MB_OK);
}
}
}
@@ -883,7 +883,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
// ask permission to overwrite if file exists
if(_access(ofn.lpstrFile, 0) != -1)
{
- if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx", MB_ICONQUESTION | MB_YESNO) != IDYES)
+ if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
return TRUE;
}
@@ -893,7 +893,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
// verify file was opened
if(TxtFile == 0)
- MessageBox(m_hwnd, "Could not open text file.", "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, "Could not open text file.", "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
else
{
m_Xbe->DumpInformation(TxtFile);
@@ -902,7 +902,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
if(m_Xbe->GetError())
{
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
}
else
{
@@ -912,7 +912,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
printf("WndMain: %s\n", buffer);
- MessageBox(m_hwnd, buffer, "Cxbx", MB_ICONINFORMATION | MB_OK);
+ MessageBox(m_hwnd, buffer, "Cxbx-Reloaded", MB_ICONINFORMATION | MB_OK);
}
}
}
@@ -927,7 +927,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
if(m_Xbe->GetError())
{
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
}
else
{
@@ -955,7 +955,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
else
m_KrnlDebug = DM_NONE;
- MessageBox(m_hwnd, "This will not take effect until the next time emulation is started.\n", "Cxbx", MB_OK);
+ MessageBox(m_hwnd, "This will not take effect until the next time emulation is started.\n", "Cxbx-Reloaded", MB_OK);
m_bExeChanged = true;
@@ -995,7 +995,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
if(GetSaveFileName(&ofn) != FALSE)
{
- MessageBox(m_hwnd, "This will not take effect until emulation is (re)started.\n", "Cxbx", MB_OK);
+ MessageBox(m_hwnd, "This will not take effect until emulation is (re)started.\n", "Cxbx-Reloaded", MB_OK);
strncpy(m_KrnlDebugFilename, ofn.lpstrFile, 259);
@@ -1107,7 +1107,7 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
Sleep(10);
if(AboutWnd->GetError() != 0)
- MessageBox(m_hwnd, AboutWnd->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, AboutWnd->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
delete AboutWnd;
}
@@ -1219,7 +1219,7 @@ void WndMain::LoadLogo()
if(m_Xbe->GetError() != 0)
{
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONEXCLAMATION | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONEXCLAMATION | MB_OK);
if(m_Xbe->IsFatal())
CloseXbe();
@@ -1405,7 +1405,7 @@ void WndMain::UpdateDebugConsoles()
{
freopen("CONOUT$", "wt", stdout);
- SetConsoleTitle("Cxbx : Debug Console");
+ SetConsoleTitle("Cxbx-Reloaded : Debug Console");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
@@ -1510,7 +1510,7 @@ void WndMain::OpenXbe(const char *x_filename)
if(m_Xbe->GetError() != 0)
{
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
delete m_Xbe; m_Xbe = 0;
@@ -1588,7 +1588,7 @@ void WndMain::CloseXbe()
if(m_bXbeChanged)
{
- int ret = MessageBox(m_hwnd, "Changes have been made, do you wish to save?", "Cxbx", MB_ICONQUESTION | MB_YESNOCANCEL);
+ int ret = MessageBox(m_hwnd, "Changes have been made, do you wish to save?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNOCANCEL);
if(ret == IDYES)
SaveXbeAs();
@@ -1626,7 +1626,7 @@ void WndMain::SaveXbe(const char *x_filename)
// ask permission to overwrite if the file already exists
if(_access(x_filename, 0) != -1)
{
- if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx", MB_ICONQUESTION | MB_YESNO) != IDYES)
+ if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
return;
}
@@ -1635,7 +1635,7 @@ void WndMain::SaveXbe(const char *x_filename)
m_Xbe->Export(x_filename);
if(m_Xbe->GetError() != 0)
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
else
{
char buffer[255];
@@ -1644,7 +1644,7 @@ void WndMain::SaveXbe(const char *x_filename)
printf("WndMain: %s was successfully saved.\n", m_Xbe->m_szAsciiTitle);
- MessageBox(m_hwnd, buffer, "Cxbx", MB_ICONINFORMATION | MB_OK);
+ MessageBox(m_hwnd, buffer, "Cxbx-Reloaded", MB_ICONINFORMATION | MB_OK);
m_bXbeChanged = false;
}
@@ -1685,7 +1685,7 @@ void WndMain::ImportExe(const char *x_filename)
if(i_exe->GetError() != 0)
{
- MessageBox(m_hwnd, i_exe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, i_exe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
delete i_exe;
@@ -1696,7 +1696,7 @@ void WndMain::ImportExe(const char *x_filename)
if(m_Xbe->GetError() != 0)
{
- MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, m_Xbe->GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
delete m_Xbe; m_Xbe = 0;
@@ -1799,7 +1799,7 @@ bool WndMain::ConvertToExe(const char *x_filename, bool x_bVerifyIfExists, HWND
{
if(_access(filename, 0) != -1)
{
- if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx", MB_ICONQUESTION | MB_YESNO) != IDYES)
+ if(MessageBox(m_hwnd, "Overwrite existing file?", "Cxbx-Reloaded", MB_ICONQUESTION | MB_YESNO) != IDYES)
return false;
}
}
@@ -1812,7 +1812,7 @@ bool WndMain::ConvertToExe(const char *x_filename, bool x_bVerifyIfExists, HWND
if(i_EmuExe.GetError() != 0)
{
- MessageBox(m_hwnd, i_EmuExe.GetError(), "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, i_EmuExe.GetError(), "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
return false;
}
else
@@ -1861,7 +1861,7 @@ void WndMain::StartEmulation(EnumAutoConvert x_AutoConvert, HWND hwndParent)
if((int)ShellExecute(NULL, "open", szExeFileName, szArgsBuffer, szBuffer, SW_SHOWDEFAULT) <= 32)
{
m_bCanStart = true;
- MessageBox(m_hwnd, "Emulation failed.\n\n If this message repeats, the Xbe is not supported.", "Cxbx", MB_ICONSTOP | MB_OK);
+ MessageBox(m_hwnd, "Emulation failed.\n\n If this message repeats, the Xbe is not supported.", "Cxbx-Reloaded", MB_ICONSTOP | MB_OK);
printf("WndMain: %s shell failed.\n", m_Xbe->m_szAsciiTitle);
}
@@ -1878,7 +1878,7 @@ void WndMain::StopEmulation()
if(!IsWindow(m_hwndChild))
{
m_hwndChild = NULL;
- SetWindowText(m_hwnd, "Cxbx " _CXBX_VERSION);
+ SetWindowText(m_hwnd, "Cxbx-Reloaded " _CXBX_VERSION);
RefreshMenus();
}
diff --git a/src/CxbxKrnl/CxbxKrnl.cpp b/src/CxbxKrnl/CxbxKrnl.cpp
index 9e0aa95ee..d1a817a34 100644
--- a/src/CxbxKrnl/CxbxKrnl.cpp
+++ b/src/CxbxKrnl/CxbxKrnl.cpp
@@ -372,7 +372,7 @@ extern "C" CXBXKRNL_API void CxbxKrnlInit
freopen("CONOUT$", "wt", stdout);
freopen("CONIN$", "rt", stdin);
- SetConsoleTitle("Cxbx : Kernel Debug Console");
+ SetConsoleTitle("Cxbx-Reloaded : Kernel Debug Console");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
@@ -457,7 +457,7 @@ extern "C" CXBXKRNL_API void CxbxKrnlInit
// Initialize devices :
char szBuffer[260];
SHGetSpecialFolderPath(NULL, szBuffer, CSIDL_APPDATA, TRUE);
- strcat(szBuffer, "\\Cxbx\\");
+ strcat(szBuffer, "\\Cxbx-Reloaded\\");
std::string basePath(szBuffer);
CxbxBasePath = basePath + "\\EmuDisk\\";
diff --git a/src/CxbxKrnl/Emu.cpp b/src/CxbxKrnl/Emu.cpp
index 1a5f60593..e4e255c30 100644
--- a/src/CxbxKrnl/Emu.cpp
+++ b/src/CxbxKrnl/Emu.cpp
@@ -184,7 +184,7 @@ extern int EmuException(LPEXCEPTION_POINTERS e)
e->ContextRecord->Eip += 1;
- int ret = MessageBox(g_hEmuWindow, buffer, "Cxbx", MB_ICONSTOP | MB_ABORTRETRYIGNORE);
+ int ret = MessageBox(g_hEmuWindow, buffer, "Cxbx-Reloaded", MB_ICONSTOP | MB_ABORTRETRYIGNORE);
if(ret == IDABORT)
{
@@ -245,7 +245,7 @@ extern int EmuException(LPEXCEPTION_POINTERS e)
" Press \"Cancel\" to debug.",
e->ExceptionRecord->ExceptionCode, e->ContextRecord->Eip);
- if(MessageBox(g_hEmuWindow, buffer, "Cxbx", MB_ICONSTOP | MB_OKCANCEL) == IDOK)
+ if(MessageBox(g_hEmuWindow, buffer, "Cxbx-Reloaded", MB_ICONSTOP | MB_OKCANCEL) == IDOK)
{
printf("EmuMain (0x%X): Aborting Emulation\n", GetCurrentThreadId());
fflush(stdout);
@@ -300,13 +300,13 @@ int ExitException(LPEXCEPTION_POINTERS e)
fflush(stdout);
- MessageBox(g_hEmuWindow, "Warning: Could not safely terminate process!", "Cxbx", MB_OK);
+ MessageBox(g_hEmuWindow, "Warning: Could not safely terminate process!", "Cxbx-Reloaded", MB_OK);
count++;
if(count > 1)
{
- MessageBox(g_hEmuWindow, "Warning: Multiple Problems!", "Cxbx", MB_OK);
+ MessageBox(g_hEmuWindow, "Warning: Multiple Problems!", "Cxbx-Reloaded", MB_OK);
return EXCEPTION_CONTINUE_SEARCH;
}
diff --git a/src/CxbxKrnl/EmuD3D8.cpp b/src/CxbxKrnl/EmuD3D8.cpp
index f6bcbbee1..a020485f0 100644
--- a/src/CxbxKrnl/EmuD3D8.cpp
+++ b/src/CxbxKrnl/EmuD3D8.cpp
@@ -364,7 +364,7 @@ static DWORD WINAPI EmuRenderWindow(LPVOID lpVoid)
wcstombs(tAsciiTitle, XbeCert->wszTitleName, 40);
}
- sprintf(AsciiTitle, "Cxbx : Emulating %s", tAsciiTitle);
+ sprintf(AsciiTitle, "Cxbx-Reloaded : Emulating %s", tAsciiTitle);
}
// create the window
diff --git a/src/CxbxKrnl/EmuNV2A.cpp b/src/CxbxKrnl/EmuNV2A.cpp
new file mode 100644
index 000000000..0fad844f7
--- /dev/null
+++ b/src/CxbxKrnl/EmuNV2A.cpp
@@ -0,0 +1,349 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->EmuNV2A.cpp
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2002-2003 Aaron Robinson
+// * (c) 2016 Luke Usher
+// * All rights reserved
+// *
+// ******************************************************************
+#define _CXBXKRNL_INTERNAL
+#define _XBOXKRNL_DEFEXTRN_
+
+#include
+
+#include "CxbxKrnl.h"
+#include "Emu.h"
+#include "EmuNV2A.h"
+#include "nv2a_int.h" // from https://github.com/espes/xqemu/tree/xbox/hw/xbox
+
+uint32_t EmuNV2A_PMC_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PMC_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PBUS_Read32(uint32_t addr)
+{
+ switch (addr) {
+ case NV_PBUS_PCI_NV_0:
+ return 0x10de; // PCI_VENDOR_ID_NVIDIA
+ case NV_PBUS_PCI_NV_2:
+ return 0x0; // NV_PBUS_PCI_NV_2_REVISION_ID ??
+ default:
+ EmuWarning("EmuNV2A_PBUS_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PFIFO_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PFIFO_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PFIFO_CACHE_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PFIFO_CACHE_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRMA_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRMA_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PVIDEO_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PVIDEO_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PTIMER_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PTIMER_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PCOUNTER_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PCOUNTER_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PTIMER_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PTIMER_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PVPE_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PVPE_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PTV_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PTV_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRMFB_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRMFB_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRMVIO_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRMVIO_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PFB_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PFB_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PSTRAPS_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PSTRAPS_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PGRAPH_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PGRAPH_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PCRTC_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PCRTC_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRMCIO_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRMCIO_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRAMDAC_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRAMDAC_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRMDIO_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRMDIO_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_PRAMIN_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_PRAMIN_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_USER_Read32(uint32_t addr)
+{
+ switch (addr) {
+ default:
+ EmuWarning("EmuNV2A_USER_Read32: Unknown Read Address %08X", addr);
+ }
+
+ return 0;
+}
+
+uint32_t EmuNV2A_Read32(uint32_t addr)
+{
+ switch ((addr >> 12) & 31) {
+ case NV_PMC : /* card master control */
+ return EmuNV2A_PMC_Read32(addr & 0x0FFF);
+ case NV_PBUS : /* bus control */
+ return EmuNV2A_PBUS_Read32(addr & 0x0FFF);
+ case NV_PFIFO : /* MMIO and DMA FIFO submission to PGRAPH and VPE */
+ return EmuNV2A_PFIFO_Read32(addr & 0x0FFF);
+ case NV_PFIFO_CACHE :
+ return EmuNV2A_PFIFO_CACHE_Read32(addr & 0x0FFF);
+ case NV_PRMA : /* access to BAR0/BAR1 from real mode */
+ return EmuNV2A_PRMA_Read32(addr & 0x0FFF);
+ case NV_PVIDEO : /* video overlay */
+ return EmuNV2A_PVIDEO_Read32(addr & 0x0FFF);
+ case NV_PTIMER : /* time measurement and time-based alarms */
+ return EmuNV2A_PTIMER_Read32(addr & 0x0FFF);
+ case NV_PCOUNTER : /* performance monitoring counters */
+ return EmuNV2A_PCOUNTER_Read32(addr & 0x0FFF);
+ case NV_PVPE : /* MPEG2 decoding engine */
+ return EmuNV2A_PVPE_Read32(addr & 0x0FFF);
+ case NV_PTV : /* TV encoder */
+ return EmuNV2A_PTV_Read32(addr & 0x0FFF);
+ case NV_PRMFB : /* aliases VGA memory window */
+ return EmuNV2A_PRMFB_Read32(addr & 0x0FFF);
+ case NV_PRMVIO : /* aliases VGA sequencer and graphics controller registers */
+ return EmuNV2A_PRMVIO_Read32(addr & 0x0FFF);
+ case NV_PFB : /* memory interface */
+ return EmuNV2A_PFB_Read32(addr & 0x0FFF);
+ case NV_PSTRAPS : /* straps readout / override */
+ return EmuNV2A_PSTRAPS_Read32(addr & 0x0FFF);
+ case NV_PGRAPH : /* accelerated 2d/3d drawing engine */
+ return EmuNV2A_PGRAPH_Read32(addr & 0x0FFF);
+ case NV_PCRTC : /* more CRTC controls */
+ return EmuNV2A_PCRTC_Read32(addr & 0x0FFF);
+ case NV_PRMCIO : /* aliases VGA CRTC and attribute controller registers */
+ return EmuNV2A_PRMCIO_Read32(addr & 0x0FFF);
+ case NV_PRAMDAC : /* RAMDAC, cursor, and PLL control */
+ return EmuNV2A_PRAMDAC_Read32(addr & 0x0FFF);
+ case NV_PRMDIO : /* aliases VGA palette registers */
+ return EmuNV2A_PRMDIO_Read32(addr & 0x0FFF);
+ case NV_PRAMIN : /* RAMIN access */
+ return EmuNV2A_PRAMIN_Read32(addr & 0x0FFF);
+ case NV_USER : /* PFIFO MMIO and DMA submission area */
+ return EmuNV2A_USER_Read32(addr & 0x0FFF);
+ default:
+ EmuWarning("EmuNV2A_Read32: Unknown Read Address %08X", addr);
+ }
+ return 0;
+}
+
+void EmuNV2A_Write32(uint32_t addr, uint32_t value)
+{
+ switch ((addr >> 12) & 31) {
+// case NV_PMC : /* card master control */
+// return EmuNV2A_PMC_Read32(addr & 0x0FFF);
+// case NV_PBUS : /* bus control */
+// return EmuNV2A_PBUS_Read32(addr & 0x0FFF);
+
+// case NV_PFIFO : /* MMIO and DMA FIFO submission to PGRAPH and VPE */
+// case NV_PFIFO_CACHE :
+// case NV_PRMA : /* access to BAR0/BAR1 from real mode */
+// case NV_PVIDEO : /* video overlay */
+// case NV_PTIMER : /* time measurement and time-based alarms */
+// case NV_PCOUNTER : /* performance monitoring counters */
+// case NV_PVPE : /* MPEG2 decoding engine */
+// case NV_PTV : /* TV encoder */
+// case NV_PRMFB : /* aliases VGA memory window */
+// case NV_PRMVIO : /* aliases VGA sequencer and graphics controller registers */
+// case NV_PFB : /* memory interface */
+// case NV_PSTRAPS : /* straps readout / override */
+// case NV_PGRAPH : /* accelerated 2d/3d drawing engine */
+// case NV_PCRTC : /* more CRTC controls */
+// case NV_PRMCIO : /* aliases VGA CRTC and attribute controller registers */
+// case NV_PRAMDAC : /* RAMDAC, cursor, and PLL control */
+// case NV_PRMDIO : /* aliases VGA palette registers */
+// case NV_PRAMIN : /* RAMIN access */
+// case NV_USER : /* PFIFO MMIO and DMA submission area */
+ default:
+ EmuWarning("EmuNV2A_Write32: Unknown Write Address %08X (value %08X)", addr, value);
+ }
+}
diff --git a/src/CxbxKrnl/EmuNV2A.h b/src/CxbxKrnl/EmuNV2A.h
new file mode 100644
index 000000000..f286ae168
--- /dev/null
+++ b/src/CxbxKrnl/EmuNV2A.h
@@ -0,0 +1,40 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->EmuX86.h
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2002-2003 Aaron Robinson
+// * (c) 2016 Luke Usher
+// * All rights reserved
+// *
+// ******************************************************************
+#ifndef EMUNV2A_H
+#define EMUNV2A_H
+
+uint32_t EmuNV2A_Read32(uint32_t addr);
+void EmuNV2A_Write32(uint32_t addr, uint32_t value);
+
+#endif
diff --git a/src/CxbxKrnl/EmuX86.cpp b/src/CxbxKrnl/EmuX86.cpp
index a227cea98..99a167ebc 100644
--- a/src/CxbxKrnl/EmuX86.cpp
+++ b/src/CxbxKrnl/EmuX86.cpp
@@ -39,6 +39,161 @@
#include "CxbxKrnl.h"
#include "Emu.h"
#include "EmuX86.h"
+#include "EmuNV2A.h"
+
+uint32_t EmuX86_Read32(uint32_t addr)
+{
+ if (addr >= 0xFD000000 && addr <= 0xFE000000) {
+ return EmuNV2A_Read32(addr & 0x00FFFFFF);
+ }
+
+ EmuWarning("EmuX86_Read32: Unknown Read Address %08X", addr);
+ return 0;
+}
+
+void EmuX86_Write32(uint32_t addr, uint32_t value)
+{
+ if (addr >= 0xFD000000 && addr <= 0xFE000000) {
+ EmuNV2A_Write32(addr & 0x00FFFFFF, value);
+ return;
+ }
+
+ EmuWarning("EmuX86_Write32: Unknown Write Address %08X (value %08X)", addr, value);
+}
+
+DWORD* EmuX86_GetRegisterPointer(LPEXCEPTION_POINTERS e, Zydis::Register reg)
+{
+ switch (reg) {
+ case Zydis::Register::EAX:
+ return &e->ContextRecord->Eax;
+ case Zydis::Register::EBX:
+ return &e->ContextRecord->Ebx;
+ case Zydis::Register::ECX:
+ return &e->ContextRecord->Ecx;
+ case Zydis::Register::EDX:
+ return &e->ContextRecord->Edx;
+ case Zydis::Register::EDI:
+ return &e->ContextRecord->Edi;
+ case Zydis::Register::ESI:
+ return &e->ContextRecord->Esi;
+ }
+
+ return nullptr;
+}
+
+bool EmuX86_GetRegisterValue(uint32_t* output, LPEXCEPTION_POINTERS e, Zydis::Register reg)
+{
+ uint32_t value = 0;
+
+ if (reg != Zydis::Register::NONE)
+ {
+ DWORD* regptr = EmuX86_GetRegisterPointer(e, reg);
+ if (regptr == nullptr)
+ return false;
+
+ value = *regptr;
+ }
+
+ *output = value;
+ return true;
+}
+
+bool EmuX86_DecodeMemoryOperand(uint32_t* output, LPEXCEPTION_POINTERS e, Zydis::OperandInfo& operand)
+{
+ uint32_t base = 0;
+ uint32_t index = 0;
+
+ if (!EmuX86_GetRegisterValue(&base, e, operand.base) || !EmuX86_GetRegisterValue(&index, e, operand.base)) {
+ return false;
+ }
+
+ *output = base + (index * operand.scale) + operand.lval.udword;
+ return true;
+}
+
+bool EmuX86_MOV(LPEXCEPTION_POINTERS e, Zydis::InstructionInfo& info)
+{
+ if (info.operand[0].type == Zydis::OperandType::REGISTER && info.operand[1].type == Zydis::OperandType::MEMORY)
+ {
+ DWORD* pDstReg = nullptr;
+ uint32_t srcAddr = 0;
+
+ pDstReg = EmuX86_GetRegisterPointer(e, info.operand[0].base);
+ if (pDstReg == nullptr) {
+ return false;
+ }
+
+ if (!EmuX86_DecodeMemoryOperand(&srcAddr, e, info.operand[1])) {
+ return false;
+ }
+ *pDstReg = EmuX86_Read32(srcAddr);
+ return true;
+ }
+ else if (info.operand[0].type == Zydis::OperandType::MEMORY && info.operand[1].type == Zydis::OperandType::REGISTER)
+ {
+ uint32_t addr = 0;
+ uint32_t value = 0;
+
+ if (!EmuX86_DecodeMemoryOperand(&addr, e, info.operand[0])) {
+ return false;
+ }
+
+ if (!EmuX86_GetRegisterValue(&value, e, info.operand[1].base)) {
+ return false;
+ }
+
+ EmuX86_Write32(addr, value);
+ return true;
+ }
+ else if (info.operand[0].type == Zydis::OperandType::MEMORY && info.operand[1].type == Zydis::OperandType::IMMEDIATE)
+ {
+ uint32_t addr = 0;
+
+ if (!EmuX86_DecodeMemoryOperand(&addr, e, info.operand[0])) {
+ return false;
+ }
+
+ EmuX86_Write32(addr, info.operand[1].lval.udword);
+ return true;
+ }
+
+ return false;
+}
+
+void EmuX86_SetFlag(LPEXCEPTION_POINTERS e, int flag, int value)
+{
+ e->ContextRecord->EFlags ^= (-value ^ e->ContextRecord->EFlags) & (1 << flag);
+}
+
+bool EmuX86_TEST(LPEXCEPTION_POINTERS e, Zydis::InstructionInfo& info)
+{
+ if (info.operand[0].type == Zydis::OperandType::MEMORY && info.operand[1].type == Zydis::OperandType::IMMEDIATE)
+ {
+ uint32_t addr = 0;
+
+ if (!EmuX86_DecodeMemoryOperand(&addr, e, info.operand[0])) {
+ return false;
+ }
+
+ uint32_t value = EmuX86_Read32(addr);
+
+ // Perform bitwise AND
+ uint32_t result = value & info.operand[1].lval.udword;
+
+ // Set CF/OF to 0
+ EmuX86_SetFlag(e, EMUX86_EFLAG_CF, 0);
+ EmuX86_SetFlag(e, EMUX86_EFLAG_OF, 0);
+
+ EmuX86_SetFlag(e, EMUX86_EFLAG_SF, result >> 31);
+ EmuX86_SetFlag(e, EMUX86_EFLAG_ZF, result == 0 ? 1 : 0);
+
+ // TODO: Parity Flag
+
+ return true;
+ }
+
+ return false;
+}
bool EmuX86_DecodeException(LPEXCEPTION_POINTERS e)
{
@@ -64,9 +219,32 @@ bool EmuX86_DecodeException(LPEXCEPTION_POINTERS e)
}
else
{
- EmuWarning("EmuX86: 0x%08X: %s Ignored\n", e->ContextRecord->Eip, formatter.formatInstruction(info));
+ switch (info.mnemonic)
+ {
+ case Zydis::InstructionMnemonic::MOV:
+ if (EmuX86_MOV(e, info)) {
+ break;
+ }
+
+ goto unimplemented_opcode;
+ case Zydis::InstructionMnemonic::TEST:
+ if (EmuX86_TEST(e, info)) {
+ break;
+ }
+
+ goto unimplemented_opcode;
+ case Zydis::InstructionMnemonic::WBINVD:
+ // We can safely ignore this
+ break;
+ }
+
e->ContextRecord->Eip += info.length;
return true;
+
+unimplemented_opcode:
+ EmuWarning("EmuX86: 0x%08X: %s Not Implemented\n", e->ContextRecord->Eip, formatter.formatInstruction(info));
+ e->ContextRecord->Eip += info.length;
+ return false;
}
return false;
diff --git a/src/CxbxKrnl/EmuX86.h b/src/CxbxKrnl/EmuX86.h
index 95ce1615a..9d30da906 100644
--- a/src/CxbxKrnl/EmuX86.h
+++ b/src/CxbxKrnl/EmuX86.h
@@ -34,6 +34,25 @@
#ifndef EMUX86_H
#define EMUX86_H
+#define EMUX86_EFLAG_CF 0
+#define EMUX86_EFLAG_PF 2
+#define EMUX86_EFLAG_AF 4
+#define EMUX86_EFLAG_ZF 6
+#define EMUX86_EFLAG_SF 7
+#define EMUX86_EFLAG_TF 8
+#define EMUX86_EFLAG_IF 9
+#define EMUX86_EFLAG_DF 10
+#define EMUX86_EFLAG_OF 11
+#define EMUX86_EFLAG_IOPL1 12
+#define EMUX86_EFLAG_IOPL2 13
+#define EMUX86_EFLAG_NT 14
+#define EMUX86_EFLAG_RF 16
+#define EMUX86_EFLAG_VM 17
+#define EMUX86_EFLAG_AC 18
+#define EMUX86_EFLAG_VIF 19
+#define EMUX86_EFLAG_VIP 20
+#define EMUX86_EFLAG_ID 21
+
bool EmuX86_DecodeException(LPEXCEPTION_POINTERS e);
#endif
diff --git a/src/CxbxKrnl/EmuXapi.cpp b/src/CxbxKrnl/EmuXapi.cpp
index f06cd6823..13f3c7111 100644
--- a/src/CxbxKrnl/EmuXapi.cpp
+++ b/src/CxbxKrnl/EmuXapi.cpp
@@ -984,7 +984,7 @@ DWORD WINAPI XTL::EmuXLaunchNewImage
sprintf(szDashboardPath, "%s\\xboxdash.xbe", symbolicLinkObject->NativePath.c_str());
if (PathFileExists(szDashboardPath)) {
- MessageBox(CxbxKrnl_hEmuParent, "The title is rebooting to dashboard", "Cxbx", 0);
+ MessageBox(CxbxKrnl_hEmuParent, "The title is rebooting to dashboard", "Cxbx-Reloaded", 0);
char szXboxDashboardPath[MAX_PATH];
sprintf(szXboxDashboardPath, "%c:\\xboxdash.xbe", symbolicLinkObject->DriveLetter);
EmuXLaunchNewImage(szXboxDashboardPath, pLaunchData);
diff --git a/src/CxbxKrnl/HLEDataBase.cpp b/src/CxbxKrnl/HLEDataBase.cpp
index 2eb7716c7..05227d2f1 100644
--- a/src/CxbxKrnl/HLEDataBase.cpp
+++ b/src/CxbxKrnl/HLEDataBase.cpp
@@ -154,76 +154,6 @@ HLEData HLEDataBase[] =
XAPI_1_0_5849,
XAPI_1_0_5849_SIZE
},
- // D3D8 Version 1.0.3925
- {
- "D3D8",
- 1, 0, 3925,
- D3D8_1_0_3925,
- D3D8_1_0_3925_SIZE
- },
- // D3D8 Version 1.0.4034
- {
- "D3D8",
- 1, 0, 4034,
- D3D8_1_0_4034,
- D3D8_1_0_4034_SIZE
- },
- // D3D8 Version 1.0.4134
- {
- "D3D8",
- 1, 0, 4134,
- D3D8_1_0_4134,
- D3D8_1_0_4134_SIZE
- },
- // D3D8 Version 1.0.4361
- {
- "D3D8",
- 1, 0, 4361,
- D3D8_1_0_4361,
- D3D8_1_0_4361_SIZE
- },
- // D3D8 Version 1.0.4432
- {
- "D3D8",
- 1, 0, 4432,
- D3D8_1_0_4432,
- D3D8_1_0_4432_SIZE
- },
- // D3D8 Version 1.0.4627
- {
- "D3D8",
- 1, 0, 4627,
- D3D8_1_0_4627,
- D3D8_1_0_4627_SIZE
- },
- // D3D8 Version 1.0.5233
- {
- "D3D8",
- 1, 0, 5233,
- D3D8_1_0_5233,
- D3D8_1_0_5233_SIZE
- },
- // D3D8 Version 1.0.5558
- {
- "D3D8",
- 1, 0, 5558,
- D3D8_1_0_5558,
- D3D8_1_0_5558_SIZE
- },
- // D3D8 Version 1.0.5849
- {
- "D3D8",
- 1, 0, 5849,
- D3D8_1_0_5849,
- D3D8_1_0_5849_SIZE
- },
- // D3D8LTCG Version 1.0.5849
- {
- "D3D8LTCG",
- 1, 0, 5849,
- D3D8LTCG_1_0_5849,
- D3D8LTCG_1_0_5849_SIZE
- },
// DSound Version 1.0.3936
{
"DSOUND",
@@ -279,62 +209,6 @@ HLEData HLEDataBase[] =
1, 0, 5849,
DSound_1_0_5849,
DSound_1_0_5849_SIZE
- },
- // XG Version 1.0.3911
- {
- "XGRAPHC",
- 1, 0, 3911,
- XG_1_0_3911,
- XG_1_0_3911_SIZE
- },
- // XG Version 1.0.4034
- {
- "XGRAPHC",
- 1, 0, 4034,
- XG_1_0_4034,
- XG_1_0_4034_SIZE
- },
- // XG Version 1.0.4361
- {
- "XGRAPHC",
- 1, 0, 4361,
- XG_1_0_4361,
- XG_1_0_4361_SIZE
- },
- // XG Version 1.0.4432
- {
- "XGRAPHC",
- 1, 0, 4432,
- XG_1_0_4432,
- XG_1_0_4432_SIZE
- },
- // XG Version 1.0.4627
- {
- "XGRAPHC",
- 1, 0, 4627,
- XG_1_0_4627,
- XG_1_0_4627_SIZE
- },
- // XG Version 1.0.5233
- {
- "XGRAPHC",
- 1, 0, 5233,
- XG_1_0_5233,
- XG_1_0_5233_SIZE
- },
- // XG Version 1.0.5558
- {
- "XGRAPHC",
- 1, 0, 5558,
- XG_1_0_5558,
- XG_1_0_5558_SIZE
- },
- // XG Version 1.0.5849
- {
- "XGRAPHC",
- 1, 0, 5849,
- XG_1_0_5849,
- XG_1_0_5849_SIZE
},
// XNet Version 1.0.3911
{
diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp
index 761e7bab5..96be48980 100644
--- a/src/CxbxKrnl/HLEIntercept.cpp
+++ b/src/CxbxKrnl/HLEIntercept.cpp
@@ -80,7 +80,7 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
{
SHGetSpecialFolderPath(NULL, szCacheFileName, CSIDL_APPDATA, TRUE);
- strcat(szCacheFileName, "\\Cxbx\\");
+ strcat(szCacheFileName, "\\Cxbx-Reloaded\\");
CreateDirectory(szCacheFileName, NULL);
@@ -265,18 +265,6 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
BuildVersion = 4627;
}
- // Some 3911 titles have different D3D8 builds
- if(strcmp(szLibraryName, "D3D8") == 0)
- {
- if(BuildVersion <= 3948)
- BuildVersion = 3925;
-
- // Testing... don't release with this code in it!
- // TODO: 5233 and 5558
- // if(BuildVersion == 4134)
- // BuildVersion = 4627;
- }
-
// Change a few XAPILIB versions to similar counterparts
if(strcmp(szLibraryName, "XAPILIB") == 0)
{
@@ -288,29 +276,6 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
BuildVersion = 4627;
}
- // Test (do not release uncommented!)
- /*if(strcmp(szLibraryName, "D3D8LTCG") == 0)
- {
- strcpy(szLibraryName, "D3D8");
- }*/
-
- // TODO: HACK: These libraries are packed into one database
- if(strcmp(szLibraryName, "D3DX8") == 0)
- {
- strcpy(szLibraryName, "D3D8");
- }
-
- if(strcmp(szLibraryName, "D3D8") == 0)
- {
- if(bFoundD3D)
- {
- //DbgPrintf("Redundant\n");
- continue;
- }
-
- bFoundD3D = true;
- }
-
if(bXRefFirstPass)
{
if(strcmp("XAPILIB", szLibraryName) == 0 && MajorVersion == 1 && MinorVersion == 0 &&
@@ -321,202 +286,6 @@ void EmuHLEIntercept(Xbe::LibraryVersion *pLibraryVersion, Xbe::Header *pXbeHead
uint32 lower = pXbeHeader->dwBaseAddr;
uint32 upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
}
- else if(strcmp("D3D8", szLibraryName) == 0 /*&& strcmp("D3D8LTCG", szOrigLibraryName)*/ &&
- MajorVersion == 1 && MinorVersion == 0 &&
- (BuildVersion == 3925 || BuildVersion == 4134 || BuildVersion == 4361 || BuildVersion == 4432
- || BuildVersion == 4627 || BuildVersion == 5233 || BuildVersion == 5558 || BuildVersion == 5849))
- {
- // Save D3D8 build version
- g_BuildVersion = BuildVersion;
- g_OrigBuildVersion = OrigBuildVersion;
-
- uint32 lower = pXbeHeader->dwBaseAddr;
- uint32 upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
-
- void *pFunc = 0;
-
- if(BuildVersion == 3925)
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_3925, lower, upper);
- else if(BuildVersion < 5233)
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_4034, lower, upper);
- else
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_5233, lower, upper);
-
- // locate D3DDeferredRenderState
- if(pFunc != 0)
- {
- // offset for stencil cull enable render state in the deferred render state buffer
- int patchOffset = 0;
-
- if(BuildVersion == 3925)
- {
- XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x25) - 0x1FC + 82*4); // TODO: Clean up (?)
- patchOffset = 142*4 - 82*4; // TODO: Verify
-
- //XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x25) - 0x19F + 72*4); // TODO: Clean up (?)
- //patchOffset = 142*4 - 72*4; // TODO: Verify
- }
- else if(BuildVersion == 4034 || BuildVersion == 4134)
- {
- XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x248 + 82*4); // TODO: Verify
- patchOffset = 142*4 - 82*4;
- }
- else if(BuildVersion == 4361)
- {
- XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x200 + 82*4);
- patchOffset = 142*4 - 82*4;
- }
- else if(BuildVersion == 4432)
- {
- XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x204 + 83*4);
- patchOffset = 143*4 - 83*4;
- }
- else if(BuildVersion == 4627 || BuildVersion == 5233 || BuildVersion == 5558 || BuildVersion == 5849)
- {
- // WARNING: Not thoroughly tested (just seemed very correct right away)
- XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x24C + 92*4);
- patchOffset = 162*4 - 92*4;
- }
-
- XRefDataBase[XREF_D3DDEVICE] = *(DWORD*)((DWORD)pFunc + 0x03);
- XRefDataBase[XREF_D3DRS_MULTISAMPLEMODE] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset - 8*4;
- XRefDataBase[XREF_D3DRS_MULTISAMPLERENDERTARGETMODE] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset - 7*4;
- XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 0*4;
- XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 1*4;
- XRefDataBase[XREF_D3DRS_ROPZREAD] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 2*4;
- XRefDataBase[XREF_D3DRS_DONOTCULLUNCOMPRESSED] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 3*4;
-
- for(int v=0;v<44;v++)
- {
- XTL::EmuD3DDeferredRenderState[v] = X_D3DRS_UNK;
- }
-
- DbgPrintf("HLE: 0x%.08X -> EmuD3DDeferredRenderState\n", XTL::EmuD3DDeferredRenderState);
- //DbgPrintf("HLE: 0x%.08X -> XREF_D3DRS_ROPZCMPALWAYSREAD\n", XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] );
- }
- else
- {
- XTL::EmuD3DDeferredRenderState = 0;
- CxbxKrnlCleanup("EmuD3DDeferredRenderState was not found!");
- }
-
- // locate D3DDeferredTextureState
- {
- pFunc = 0;
-
- if(BuildVersion == 3925)
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_3925, lower, upper);
- else if(BuildVersion == 4134)
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4134, lower, upper);
- else if(BuildVersion == 4361 || BuildVersion == 4432)
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4361, lower, upper);
- else if(BuildVersion == 4627 || BuildVersion == 5233 || BuildVersion == 5558 || BuildVersion == 5849)
- pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4627, lower, upper);
-
- if(pFunc != 0)
- {
- if(BuildVersion == 3925) // 0x18F180
- XTL::EmuD3DDeferredTextureState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x11) - 0x70); // TODO: Verify
- else if(BuildVersion == 4134)
- XTL::EmuD3DDeferredTextureState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x18) - 0x70); // TODO: Verify
- else
- XTL::EmuD3DDeferredTextureState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x19) - 0x70);
-
- for(int s=0;s<4;s++)
- {
- for(int v=0;v<32;v++)
- XTL::EmuD3DDeferredTextureState[v+s*32] = X_D3DTSS_UNK;
- }
-
- DbgPrintf("HLE: 0x%.08X -> EmuD3DDeferredTextureState\n", XTL::EmuD3DDeferredTextureState);
- }
- else
- {
- XTL::EmuD3DDeferredTextureState = 0;
- CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!");
- }
- }
- }
- //else if(strcmp("D3D8LTCG", szLibraryName) == 0 && MajorVersion == 1 && MinorVersion == 0 &&
- // (BuildVersion == 5849)) // 5849 only so far...
- // {
- // // Save D3D8 build version
- // g_BuildVersion = BuildVersion;
- // g_OrigBuildVersion = OrigBuildVersion;
-
- // uint32 lower = pXbeHeader->dwBaseAddr;
- // uint32 upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage;
-
- // void *pFunc = 0;
-
- // if(BuildVersion == 5849)
- // pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetRenderState_CullMode_1_0_5849_LTCG, lower, upper);
-
- // // locate D3DDeferredRenderState
- // if(pFunc != 0)
- // {
- // // offset for stencil cull enable render state in the deferred render state buffer
- // int patchOffset = 0;
-
- // if(BuildVersion == 5849)
- // {
- // // WARNING: Not thoroughly tested (just seemed very correct right away)
- // XTL::EmuD3DDeferredRenderState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x2B) - 0x24C + 92*4);
- // patchOffset = 162*4 - 92*4;
- // }
-
- // XRefDataBase[XREF_D3DDEVICE] = *(DWORD*)((DWORD)pFunc + 0x03);
- // XRefDataBase[XREF_D3DRS_MULTISAMPLEMODE] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset - 8*4;
- // XRefDataBase[XREF_D3DRS_MULTISAMPLERENDERTARGETMODE] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset - 7*4;
- // XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 0*4;
- // XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 1*4;
- // XRefDataBase[XREF_D3DRS_ROPZREAD] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 2*4;
- // XRefDataBase[XREF_D3DRS_DONOTCULLUNCOMPRESSED] = (uint32)XTL::EmuD3DDeferredRenderState + patchOffset + 3*4;
-
- // for(int v=0;v<44;v++)
- // {
- // XTL::EmuD3DDeferredRenderState[v] = X_D3DRS_UNK;
- // }
-
- // DbgPrintf("HLE: 0x%.08X -> EmuD3DDeferredRenderState\n", XTL::EmuD3DDeferredRenderState);
- // }
- // else
- // {
- // XTL::EmuD3DDeferredRenderState = 0;
- // CxbxKrnlCleanup("EmuD3DDeferredRenderState was not found!");
- // }
-
- // // locate D3DDeferredTextureState
- // {
- // pFunc = 0;
-
- // if(BuildVersion == 3925)
- // pFunc = EmuLocateFunction((OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_5849_LTCG, lower, upper);
-
- // if(pFunc != 0)
- // {
- // if(BuildVersion == 3925) // 0x18F180
- // XTL::EmuD3DDeferredTextureState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x11) - 0x70); // TODO: Verify
- // else if(BuildVersion == 4134)
- // XTL::EmuD3DDeferredTextureState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x18) - 0x70); // TODO: Verify
- // else
- // XTL::EmuD3DDeferredTextureState = (DWORD*)(*(DWORD*)((uint32)pFunc + 0x19) - 0x70);
-
- // for(int s=0;s<4;s++)
- // {
- // for(int v=0;v<32;v++)
- // XTL::EmuD3DDeferredTextureState[v+s*32] = X_D3DTSS_UNK;
- // }
-
- // DbgPrintf("HLE: 0x%.08X -> EmuD3DDeferredTextureState\n", XTL::EmuD3DDeferredTextureState);
- // }
- // else
- // {
- // XTL::EmuD3DDeferredTextureState = 0;
- // CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!");
- // }
- // }
- // }
}
DbgPrintf("HLE: * Searching HLE database for %s %d.%d.%d...", szLibraryName, MajorVersion, MinorVersion, BuildVersion);
diff --git a/src/CxbxKrnl/nv2a_int.h b/src/CxbxKrnl/nv2a_int.h
new file mode 100644
index 000000000..6814a3c49
--- /dev/null
+++ b/src/CxbxKrnl/nv2a_int.h
@@ -0,0 +1,1252 @@
+/*
+ * QEMU Geforce NV2A internal definitions
+ *
+ * Copyright (c) 2012 espes
+ * Copyright (c) 2015 Jannik Vogel
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 or
+ * (at your option) version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see .
+ */
+
+#define NV_NUM_BLOCKS 21
+#define NV_PMC 0 /* card master control */
+#define NV_PBUS 1 /* bus control */
+#define NV_PFIFO 2 /* MMIO and DMA FIFO submission to PGRAPH and VPE */
+#define NV_PFIFO_CACHE 3
+#define NV_PRMA 4 /* access to BAR0/BAR1 from real mode */
+#define NV_PVIDEO 5 /* video overlay */
+#define NV_PTIMER 6 /* time measurement and time-based alarms */
+#define NV_PCOUNTER 7 /* performance monitoring counters */
+#define NV_PVPE 8 /* MPEG2 decoding engine */
+#define NV_PTV 9 /* TV encoder */
+#define NV_PRMFB 10 /* aliases VGA memory window */
+#define NV_PRMVIO 11 /* aliases VGA sequencer and graphics controller registers */
+#define NV_PFB 12 /* memory interface */
+#define NV_PSTRAPS 13 /* straps readout / override */
+#define NV_PGRAPH 14 /* accelerated 2d/3d drawing engine */
+#define NV_PCRTC 15 /* more CRTC controls */
+#define NV_PRMCIO 16 /* aliases VGA CRTC and attribute controller registers */
+#define NV_PRAMDAC 17 /* RAMDAC, cursor, and PLL control */
+#define NV_PRMDIO 18 /* aliases VGA palette registers */
+#define NV_PRAMIN 19 /* RAMIN access */
+#define NV_USER 20 /* PFIFO MMIO and DMA submission area */
+
+#define NV_PMC_BOOT_0 0x00000000
+#define NV_PMC_INTR_0 0x00000100
+# define NV_PMC_INTR_0_PFIFO (1 << 8)
+# define NV_PMC_INTR_0_PGRAPH (1 << 12)
+# define NV_PMC_INTR_0_PCRTC (1 << 24)
+# define NV_PMC_INTR_0_PBUS (1 << 28)
+# define NV_PMC_INTR_0_SOFTWARE (1 << 31)
+#define NV_PMC_INTR_EN_0 0x00000140
+# define NV_PMC_INTR_EN_0_HARDWARE 1
+# define NV_PMC_INTR_EN_0_SOFTWARE 2
+#define NV_PMC_ENABLE 0x00000200
+# define NV_PMC_ENABLE_PFIFO (1 << 8)
+# define NV_PMC_ENABLE_PGRAPH (1 << 12)
+
+
+/* These map approximately to the pci registers */
+#define NV_PBUS_PCI_NV_0 0x00000800
+# define NV_PBUS_PCI_NV_0_VENDOR_ID 0x0000FFFF
+# define NV_CONFIG_PCI_NV_0_DEVICE_ID 0xFFFF0000
+#define NV_PBUS_PCI_NV_1 0x00000804
+#define NV_PBUS_PCI_NV_2 0x00000808
+# define NV_PBUS_PCI_NV_2_REVISION_ID 0x000000FF
+# define NV_PBUS_PCI_NV_2_CLASS_CODE 0xFFFFFF00
+
+
+#define NV_PFIFO_INTR_0 0x00000100
+# define NV_PFIFO_INTR_0_CACHE_ERROR (1 << 0)
+# define NV_PFIFO_INTR_0_RUNOUT (1 << 4)
+# define NV_PFIFO_INTR_0_RUNOUT_OVERFLOW (1 << 8)
+# define NV_PFIFO_INTR_0_DMA_PUSHER (1 << 12)
+# define NV_PFIFO_INTR_0_DMA_PT (1 << 16)
+# define NV_PFIFO_INTR_0_SEMAPHORE (1 << 20)
+# define NV_PFIFO_INTR_0_ACQUIRE_TIMEOUT (1 << 24)
+#define NV_PFIFO_INTR_EN_0 0x00000140
+# define NV_PFIFO_INTR_EN_0_CACHE_ERROR (1 << 0)
+# define NV_PFIFO_INTR_EN_0_RUNOUT (1 << 4)
+# define NV_PFIFO_INTR_EN_0_RUNOUT_OVERFLOW (1 << 8)
+# define NV_PFIFO_INTR_EN_0_DMA_PUSHER (1 << 12)
+# define NV_PFIFO_INTR_EN_0_DMA_PT (1 << 16)
+# define NV_PFIFO_INTR_EN_0_SEMAPHORE (1 << 20)
+# define NV_PFIFO_INTR_EN_0_ACQUIRE_TIMEOUT (1 << 24)
+#define NV_PFIFO_RAMHT 0x00000210
+# define NV_PFIFO_RAMHT_BASE_ADDRESS 0x000001F0
+# define NV_PFIFO_RAMHT_SIZE 0x00030000
+# define NV_PFIFO_RAMHT_SIZE_4K 0
+# define NV_PFIFO_RAMHT_SIZE_8K 1
+# define NV_PFIFO_RAMHT_SIZE_16K 2
+# define NV_PFIFO_RAMHT_SIZE_32K 3
+# define NV_PFIFO_RAMHT_SEARCH 0x03000000
+# define NV_PFIFO_RAMHT_SEARCH_16 0
+# define NV_PFIFO_RAMHT_SEARCH_32 1
+# define NV_PFIFO_RAMHT_SEARCH_64 2
+# define NV_PFIFO_RAMHT_SEARCH_128 3
+#define NV_PFIFO_RAMFC 0x00000214
+# define NV_PFIFO_RAMFC_BASE_ADDRESS1 0x000001FC
+# define NV_PFIFO_RAMFC_SIZE 0x00010000
+# define NV_PFIFO_RAMFC_BASE_ADDRESS2 0x00FE0000
+#define NV_PFIFO_RAMRO 0x00000218
+# define NV_PFIFO_RAMRO_BASE_ADDRESS 0x000001FE
+# define NV_PFIFO_RAMRO_SIZE 0x00010000
+#define NV_PFIFO_RUNOUT_STATUS 0x00000400
+# define NV_PFIFO_RUNOUT_STATUS_RANOUT (1 << 0)
+# define NV_PFIFO_RUNOUT_STATUS_LOW_MARK (1 << 4)
+# define NV_PFIFO_RUNOUT_STATUS_HIGH_MARK (1 << 8)
+#define NV_PFIFO_MODE 0x00000504
+#define NV_PFIFO_DMA 0x00000508
+#define NV_PFIFO_CACHE1_PUSH0 0x00001200
+# define NV_PFIFO_CACHE1_PUSH0_ACCESS (1 << 0)
+#define NV_PFIFO_CACHE1_PUSH1 0x00001204
+# define NV_PFIFO_CACHE1_PUSH1_CHID 0x0000001F
+# define NV_PFIFO_CACHE1_PUSH1_MODE 0x00000100
+#define NV_PFIFO_CACHE1_STATUS 0x00001214
+# define NV_PFIFO_CACHE1_STATUS_LOW_MARK (1 << 4)
+# define NV_PFIFO_CACHE1_STATUS_HIGH_MARK (1 << 8)
+#define NV_PFIFO_CACHE1_DMA_PUSH 0x00001220
+# define NV_PFIFO_CACHE1_DMA_PUSH_ACCESS (1 << 0)
+# define NV_PFIFO_CACHE1_DMA_PUSH_STATE (1 << 4)
+# define NV_PFIFO_CACHE1_DMA_PUSH_BUFFER (1 << 8)
+# define NV_PFIFO_CACHE1_DMA_PUSH_STATUS (1 << 12)
+# define NV_PFIFO_CACHE1_DMA_PUSH_ACQUIRE (1 << 16)
+#define NV_PFIFO_CACHE1_DMA_FETCH 0x00001224
+# define NV_PFIFO_CACHE1_DMA_FETCH_TRIG 0x000000F8
+# define NV_PFIFO_CACHE1_DMA_FETCH_SIZE 0x0000E000
+# define NV_PFIFO_CACHE1_DMA_FETCH_MAX_REQS 0x001F0000
+#define NV_PFIFO_CACHE1_DMA_STATE 0x00001228
+# define NV_PFIFO_CACHE1_DMA_STATE_METHOD_TYPE (1 << 0)
+# define NV_PFIFO_CACHE1_DMA_STATE_METHOD 0x00001FFC
+# define NV_PFIFO_CACHE1_DMA_STATE_SUBCHANNEL 0x0000E000
+# define NV_PFIFO_CACHE1_DMA_STATE_METHOD_COUNT 0x1FFC0000
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR 0xE0000000
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR_NONE 0
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR_CALL 1
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR_NON_CACHE 2
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR_RETURN 3
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR_RESERVED_CMD 4
+# define NV_PFIFO_CACHE1_DMA_STATE_ERROR_PROTECTION 6
+#define NV_PFIFO_CACHE1_DMA_INSTANCE 0x0000122C
+# define NV_PFIFO_CACHE1_DMA_INSTANCE_ADDRESS 0x0000FFFF
+#define NV_PFIFO_CACHE1_DMA_PUT 0x00001240
+#define NV_PFIFO_CACHE1_DMA_GET 0x00001244
+#define NV_PFIFO_CACHE1_DMA_SUBROUTINE 0x0000124C
+# define NV_PFIFO_CACHE1_DMA_SUBROUTINE_RETURN_OFFSET 0x1FFFFFFC
+# define NV_PFIFO_CACHE1_DMA_SUBROUTINE_STATE (1 << 0)
+#define NV_PFIFO_CACHE1_PULL0 0x00001250
+# define NV_PFIFO_CACHE1_PULL0_ACCESS (1 << 0)
+#define NV_PFIFO_CACHE1_ENGINE 0x00001280
+#define NV_PFIFO_CACHE1_DMA_DCOUNT 0x000012A0
+# define NV_PFIFO_CACHE1_DMA_DCOUNT_VALUE 0x00001FFC
+#define NV_PFIFO_CACHE1_DMA_GET_JMP_SHADOW 0x000012A4
+# define NV_PFIFO_CACHE1_DMA_GET_JMP_SHADOW_OFFSET 0x1FFFFFFC
+#define NV_PFIFO_CACHE1_DMA_RSVD_SHADOW 0x000012A8
+#define NV_PFIFO_CACHE1_DMA_DATA_SHADOW 0x000012AC
+
+
+#define NV_PGRAPH_INTR 0x00000100
+# define NV_PGRAPH_INTR_NOTIFY (1 << 0)
+# define NV_PGRAPH_INTR_MISSING_HW (1 << 4)
+# define NV_PGRAPH_INTR_TLB_PRESENT_DMA_R (1 << 6)
+# define NV_PGRAPH_INTR_TLB_PRESENT_DMA_W (1 << 7)
+# define NV_PGRAPH_INTR_TLB_PRESENT_TEX_A (1 << 8)
+# define NV_PGRAPH_INTR_TLB_PRESENT_TEX_B (1 << 9)
+# define NV_PGRAPH_INTR_TLB_PRESENT_VTX (1 << 10)
+# define NV_PGRAPH_INTR_CONTEXT_SWITCH (1 << 12)
+# define NV_PGRAPH_INTR_STATE3D (1 << 13)
+# define NV_PGRAPH_INTR_BUFFER_NOTIFY (1 << 16)
+# define NV_PGRAPH_INTR_ERROR (1 << 20)
+# define NV_PGRAPH_INTR_SINGLE_STEP (1 << 24)
+#define NV_PGRAPH_NSOURCE 0x00000108
+# define NV_PGRAPH_NSOURCE_NOTIFICATION (1 << 0)
+#define NV_PGRAPH_INTR_EN 0x00000140
+# define NV_PGRAPH_INTR_EN_NOTIFY (1 << 0)
+# define NV_PGRAPH_INTR_EN_MISSING_HW (1 << 4)
+# define NV_PGRAPH_INTR_EN_TLB_PRESENT_DMA_R (1 << 6)
+# define NV_PGRAPH_INTR_EN_TLB_PRESENT_DMA_W (1 << 7)
+# define NV_PGRAPH_INTR_EN_TLB_PRESENT_TEX_A (1 << 8)
+# define NV_PGRAPH_INTR_EN_TLB_PRESENT_TEX_B (1 << 9)
+# define NV_PGRAPH_INTR_EN_TLB_PRESENT_VTX (1 << 10)
+# define NV_PGRAPH_INTR_EN_CONTEXT_SWITCH (1 << 12)
+# define NV_PGRAPH_INTR_EN_STATE3D (1 << 13)
+# define NV_PGRAPH_INTR_EN_BUFFER_NOTIFY (1 << 16)
+# define NV_PGRAPH_INTR_EN_ERROR (1 << 20)
+# define NV_PGRAPH_INTR_EN_SINGLE_STEP (1 << 24)
+#define NV_PGRAPH_CTX_CONTROL 0x00000144
+# define NV_PGRAPH_CTX_CONTROL_MINIMUM_TIME 0x00000003
+# define NV_PGRAPH_CTX_CONTROL_TIME (1 << 8)
+# define NV_PGRAPH_CTX_CONTROL_CHID (1 << 16)
+# define NV_PGRAPH_CTX_CONTROL_CHANGE (1 << 20)
+# define NV_PGRAPH_CTX_CONTROL_SWITCHING (1 << 24)
+# define NV_PGRAPH_CTX_CONTROL_DEVICE (1 << 28)
+#define NV_PGRAPH_CTX_USER 0x00000148
+# define NV_PGRAPH_CTX_USER_CHANNEL_3D (1 << 0)
+# define NV_PGRAPH_CTX_USER_CHANNEL_3D_VALID (1 << 4)
+# define NV_PGRAPH_CTX_USER_SUBCH 0x0000E000
+# define NV_PGRAPH_CTX_USER_CHID 0x1F000000
+# define NV_PGRAPH_CTX_USER_SINGLE_STEP (1 << 31)
+#define NV_PGRAPH_CTX_SWITCH1 0x0000014C
+# define NV_PGRAPH_CTX_SWITCH1_GRCLASS 0x000000FF
+# define NV_PGRAPH_CTX_SWITCH1_CHROMA_KEY (1 << 12)
+# define NV_PGRAPH_CTX_SWITCH1_SWIZZLE (1 << 14)
+# define NV_PGRAPH_CTX_SWITCH1_PATCH_CONFIG 0x00038000
+# define NV_PGRAPH_CTX_SWITCH1_SYNCHRONIZE (1 << 18)
+# define NV_PGRAPH_CTX_SWITCH1_ENDIAN_MODE (1 << 19)
+# define NV_PGRAPH_CTX_SWITCH1_CLASS_TYPE (1 << 22)
+# define NV_PGRAPH_CTX_SWITCH1_SINGLE_STEP (1 << 23)
+# define NV_PGRAPH_CTX_SWITCH1_PATCH_STATUS (1 << 24)
+# define NV_PGRAPH_CTX_SWITCH1_CONTEXT_SURFACE0 (1 << 25)
+# define NV_PGRAPH_CTX_SWITCH1_CONTEXT_SURFACE1 (1 << 26)
+# define NV_PGRAPH_CTX_SWITCH1_CONTEXT_PATTERN (1 << 27)
+# define NV_PGRAPH_CTX_SWITCH1_CONTEXT_ROP (1 << 28)
+# define NV_PGRAPH_CTX_SWITCH1_CONTEXT_BETA1 (1 << 29)
+# define NV_PGRAPH_CTX_SWITCH1_CONTEXT_BETA4 (1 << 30)
+# define NV_PGRAPH_CTX_SWITCH1_VOLATILE_RESET (1 << 31)
+#define NV_PGRAPH_TRAPPED_ADDR 0x00000704
+# define NV_PGRAPH_TRAPPED_ADDR_MTHD 0x00001FFF
+# define NV_PGRAPH_TRAPPED_ADDR_SUBCH 0x00070000
+# define NV_PGRAPH_TRAPPED_ADDR_CHID 0x01F00000
+# define NV_PGRAPH_TRAPPED_ADDR_DHV 0x10000000
+#define NV_PGRAPH_TRAPPED_DATA_LOW 0x00000708
+#define NV_PGRAPH_SURFACE 0x00000710
+# define NV_PGRAPH_SURFACE_WRITE_3D 0x00700000
+# define NV_PGRAPH_SURFACE_READ_3D 0x07000000
+# define NV_PGRAPH_SURFACE_MODULO_3D 0x70000000
+#define NV_PGRAPH_INCREMENT 0x0000071C
+# define NV_PGRAPH_INCREMENT_READ_BLIT (1 << 0)
+# define NV_PGRAPH_INCREMENT_READ_3D (1 << 1)
+#define NV_PGRAPH_FIFO 0x00000720
+# define NV_PGRAPH_FIFO_ACCESS (1 << 0)
+#define NV_PGRAPH_CHANNEL_CTX_TABLE 0x00000780
+# define NV_PGRAPH_CHANNEL_CTX_TABLE_INST 0x0000FFFF
+#define NV_PGRAPH_CHANNEL_CTX_POINTER 0x00000784
+# define NV_PGRAPH_CHANNEL_CTX_POINTER_INST 0x0000FFFF
+#define NV_PGRAPH_CHANNEL_CTX_TRIGGER 0x00000788
+# define NV_PGRAPH_CHANNEL_CTX_TRIGGER_READ_IN (1 << 0)
+# define NV_PGRAPH_CHANNEL_CTX_TRIGGER_WRITE_OUT (1 << 1)
+#define NV_PGRAPH_CSV0_D 0x00000FB4
+# define NV_PGRAPH_CSV0_D_LIGHTS 0x0000FFFF
+# define NV_PGRAPH_CSV0_D_LIGHT0 0x00000003
+# define NV_PGRAPH_CSV0_D_LIGHT0_OFF 0
+# define NV_PGRAPH_CSV0_D_LIGHT0_INFINITE 1
+# define NV_PGRAPH_CSV0_D_LIGHT0_LOCAL 2
+# define NV_PGRAPH_CSV0_D_LIGHT0_SPOT 3
+# define NV_PGRAPH_CSV0_D_RANGE_MODE (1 << 18)
+# define NV_PGRAPH_CSV0_D_FOGENABLE (1 << 19)
+# define NV_PGRAPH_CSV0_D_TEXGEN_REF (1 << 20)
+# define NV_PGRAPH_CSV0_D_TEXGEN_REF_LOCAL_VIEWER 0
+# define NV_PGRAPH_CSV0_D_TEXGEN_REF_INFINITE_VIEWER 1
+# define NV_PGRAPH_CSV0_D_FOG_MODE (1 << 21)
+# define NV_PGRAPH_CSV0_D_FOG_MODE_LINEAR 0
+# define NV_PGRAPH_CSV0_D_FOG_MODE_EXP 1
+# define NV_PGRAPH_CSV0_D_FOGGENMODE 0x01C00000
+# define NV_PGRAPH_CSV0_D_FOGGENMODE_SPEC_ALPHA 0
+# define NV_PGRAPH_CSV0_D_FOGGENMODE_RADIAL 1
+# define NV_PGRAPH_CSV0_D_FOGGENMODE_PLANAR 2
+# define NV_PGRAPH_CSV0_D_FOGGENMODE_ABS_PLANAR 3
+# define NV_PGRAPH_CSV0_D_FOGGENMODE_FOG_X 4
+# define NV_PGRAPH_CSV0_D_MODE 0xC0000000
+# define NV_PGRAPH_CSV0_D_SKIN 0x1C000000
+# define NV_PGRAPH_CSV0_D_SKIN_OFF 0
+# define NV_PGRAPH_CSV0_D_SKIN_2G 1
+# define NV_PGRAPH_CSV0_D_SKIN_2 2
+# define NV_PGRAPH_CSV0_D_SKIN_3G 3
+# define NV_PGRAPH_CSV0_D_SKIN_3 4
+# define NV_PGRAPH_CSV0_D_SKIN_4G 5
+# define NV_PGRAPH_CSV0_D_SKIN_4 6
+#define NV_PGRAPH_CSV0_C 0x00000FB8
+# define NV_PGRAPH_CSV0_C_CHEOPS_PROGRAM_START 0x0000FF00
+# define NV_PGRAPH_CSV0_C_NORMALIZATION_ENABLE (1 << 27)
+# define NV_PGRAPH_CSV0_C_LIGHTING (1 << 31)
+#define NV_PGRAPH_CSV1_B 0x00000FBC
+#define NV_PGRAPH_CSV1_A 0x00000FC0
+# define NV_PGRAPH_CSV1_A_T0_ENABLE (1 << 0)
+# define NV_PGRAPH_CSV1_A_T0_MODE (1 << 1)
+# define NV_PGRAPH_CSV1_A_T0_TEXTURE (1 << 2)
+# define NV_PGRAPH_CSV1_A_T0_TEXTURE_2D 0
+# define NV_PGRAPH_CSV1_A_T0_TEXTURE_3D 1
+# define NV_PGRAPH_CSV1_A_T0_S 0x00000070
+# define NV_PGRAPH_CSV1_A_T0_S_DISABLE 0
+# define NV_PGRAPH_CSV1_A_T0_S_NORMAL_MAP 4
+# define NV_PGRAPH_CSV1_A_T0_S_REFLECTION_MAP 5
+# define NV_PGRAPH_CSV1_A_T0_S_EYE_LINEAR 1
+# define NV_PGRAPH_CSV1_A_T0_S_OBJECT_LINEAR 2
+# define NV_PGRAPH_CSV1_A_T0_S_SPHERE_MAP 3
+# define NV_PGRAPH_CSV1_A_T0_T 0x00000380
+# define NV_PGRAPH_CSV1_A_T0_R 0x00001C00
+# define NV_PGRAPH_CSV1_A_T0_Q 0x0000E000
+# define NV_PGRAPH_CSV1_A_T1_ENABLE (1 << 16)
+# define NV_PGRAPH_CSV1_A_T1_MODE (1 << 17)
+# define NV_PGRAPH_CSV1_A_T1_TEXTURE (1 << 18)
+# define NV_PGRAPH_CSV1_A_T1_S 0x00700000
+# define NV_PGRAPH_CSV1_A_T1_T 0x03800000
+# define NV_PGRAPH_CSV1_A_T1_R 0x1C000000
+# define NV_PGRAPH_CSV1_A_T1_Q 0xE0000000
+#define NV_PGRAPH_CHEOPS_OFFSET 0x00000FC4
+# define NV_PGRAPH_CHEOPS_OFFSET_PROG_LD_PTR 0x000000FF
+# define NV_PGRAPH_CHEOPS_OFFSET_CONST_LD_PTR 0x0000FF00
+#define NV_PGRAPH_BLEND 0x00001804
+# define NV_PGRAPH_BLEND_EQN 0x00000007
+# define NV_PGRAPH_BLEND_EN (1 << 3)
+# define NV_PGRAPH_BLEND_SFACTOR 0x000000F0
+# define NV_PGRAPH_BLEND_SFACTOR_ZERO 0
+# define NV_PGRAPH_BLEND_SFACTOR_ONE 1
+# define NV_PGRAPH_BLEND_SFACTOR_SRC_COLOR 2
+# define NV_PGRAPH_BLEND_SFACTOR_ONE_MINUS_SRC_COLOR 3
+# define NV_PGRAPH_BLEND_SFACTOR_SRC_ALPHA 4
+# define NV_PGRAPH_BLEND_SFACTOR_ONE_MINUS_SRC_ALPHA 5
+# define NV_PGRAPH_BLEND_SFACTOR_DST_ALPHA 6
+# define NV_PGRAPH_BLEND_SFACTOR_ONE_MINUS_DST_ALPHA 7
+# define NV_PGRAPH_BLEND_SFACTOR_DST_COLOR 8
+# define NV_PGRAPH_BLEND_SFACTOR_ONE_MINUS_DST_COLOR 9
+# define NV_PGRAPH_BLEND_SFACTOR_SRC_ALPHA_SATURATE 10
+# define NV_PGRAPH_BLEND_SFACTOR_CONSTANT_COLOR 12
+# define NV_PGRAPH_BLEND_SFACTOR_ONE_MINUS_CONSTANT_COLOR 13
+# define NV_PGRAPH_BLEND_SFACTOR_CONSTANT_ALPHA 14
+# define NV_PGRAPH_BLEND_SFACTOR_ONE_MINUS_CONSTANT_ALPHA 15
+# define NV_PGRAPH_BLEND_DFACTOR 0x00000F00
+# define NV_PGRAPH_BLEND_DFACTOR_ZERO 0
+# define NV_PGRAPH_BLEND_DFACTOR_ONE 1
+# define NV_PGRAPH_BLEND_DFACTOR_SRC_COLOR 2
+# define NV_PGRAPH_BLEND_DFACTOR_ONE_MINUS_SRC_COLOR 3
+# define NV_PGRAPH_BLEND_DFACTOR_SRC_ALPHA 4
+# define NV_PGRAPH_BLEND_DFACTOR_ONE_MINUS_SRC_ALPHA 5
+# define NV_PGRAPH_BLEND_DFACTOR_DST_ALPHA 6
+# define NV_PGRAPH_BLEND_DFACTOR_ONE_MINUS_DST_ALPHA 7
+# define NV_PGRAPH_BLEND_DFACTOR_DST_COLOR 8
+# define NV_PGRAPH_BLEND_DFACTOR_ONE_MINUS_DST_COLOR 9
+# define NV_PGRAPH_BLEND_DFACTOR_SRC_ALPHA_SATURATE 10
+# define NV_PGRAPH_BLEND_DFACTOR_CONSTANT_COLOR 12
+# define NV_PGRAPH_BLEND_DFACTOR_ONE_MINUS_CONSTANT_COLOR 13
+# define NV_PGRAPH_BLEND_DFACTOR_CONSTANT_ALPHA 14
+# define NV_PGRAPH_BLEND_DFACTOR_ONE_MINUS_CONSTANT_ALPHA 15
+# define NV_PGRAPH_BLEND_LOGICOP_ENABLE (1 << 16)
+# define NV_PGRAPH_BLEND_LOGICOP 0x0000F000
+#define NV_PGRAPH_BLENDCOLOR 0x00001808
+#define NV_PGRAPH_BORDERCOLOR0 0x0000180C
+#define NV_PGRAPH_BORDERCOLOR1 0x00001810
+#define NV_PGRAPH_BORDERCOLOR2 0x00001814
+#define NV_PGRAPH_BORDERCOLOR3 0x00001818
+#define NV_PGRAPH_BUMPOFFSET1 0x0000184C
+#define NV_PGRAPH_BUMPSCALE1 0x00001858
+#define NV_PGRAPH_CLEARRECTX 0x00001864
+# define NV_PGRAPH_CLEARRECTX_XMIN 0x00000FFF
+# define NV_PGRAPH_CLEARRECTX_XMAX 0x0FFF0000
+#define NV_PGRAPH_CLEARRECTY 0x00001868
+# define NV_PGRAPH_CLEARRECTY_YMIN 0x00000FFF
+# define NV_PGRAPH_CLEARRECTY_YMAX 0x0FFF0000
+#define NV_PGRAPH_COLORCLEARVALUE 0x0000186C
+#define NV_PGRAPH_COMBINEFACTOR0 0x00001880
+#define NV_PGRAPH_COMBINEFACTOR1 0x000018A0
+#define NV_PGRAPH_COMBINEALPHAI0 0x000018C0
+#define NV_PGRAPH_COMBINEALPHAO0 0x000018E0
+#define NV_PGRAPH_COMBINECOLORI0 0x00001900
+#define NV_PGRAPH_COMBINECOLORO0 0x00001920
+#define NV_PGRAPH_COMBINECTL 0x00001940
+#define NV_PGRAPH_COMBINESPECFOG0 0x00001944
+#define NV_PGRAPH_COMBINESPECFOG1 0x00001948
+#define NV_PGRAPH_CONTROL_0 0x0000194C
+# define NV_PGRAPH_CONTROL_0_ALPHAREF 0x000000FF
+# define NV_PGRAPH_CONTROL_0_ALPHAFUNC 0x00000F00
+# define NV_PGRAPH_CONTROL_0_ALPHATESTENABLE (1 << 12)
+# define NV_PGRAPH_CONTROL_0_ZENABLE (1 << 14)
+# define NV_PGRAPH_CONTROL_0_ZFUNC 0x000F0000
+# define NV_PGRAPH_CONTROL_0_ZFUNC_NEVER 0
+# define NV_PGRAPH_CONTROL_0_ZFUNC_LESS 1
+# define NV_PGRAPH_CONTROL_0_ZFUNC_EQUAL 2
+# define NV_PGRAPH_CONTROL_0_ZFUNC_LEQUAL 3
+# define NV_PGRAPH_CONTROL_0_ZFUNC_GREATER 4
+# define NV_PGRAPH_CONTROL_0_ZFUNC_NOTEQUAL 5
+# define NV_PGRAPH_CONTROL_0_ZFUNC_GEQUAL 6
+# define NV_PGRAPH_CONTROL_0_ZFUNC_ALWAYS 7
+# define NV_PGRAPH_CONTROL_0_DITHERENABLE (1 << 22)
+# define NV_PGRAPH_CONTROL_0_Z_PERSPECTIVE_ENABLE (1 << 23)
+# define NV_PGRAPH_CONTROL_0_ZWRITEENABLE (1 << 24)
+# define NV_PGRAPH_CONTROL_0_STENCIL_WRITE_ENABLE (1 << 25)
+# define NV_PGRAPH_CONTROL_0_ALPHA_WRITE_ENABLE (1 << 26)
+# define NV_PGRAPH_CONTROL_0_RED_WRITE_ENABLE (1 << 27)
+# define NV_PGRAPH_CONTROL_0_GREEN_WRITE_ENABLE (1 << 28)
+# define NV_PGRAPH_CONTROL_0_BLUE_WRITE_ENABLE (1 << 29)
+#define NV_PGRAPH_CONTROL_1 0x00001950
+# define NV_PGRAPH_CONTROL_1_STENCIL_TEST_ENABLE (1 << 0)
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC 0x000000F0
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_NEVER 0
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_LESS 1
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_EQUAL 2
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_LEQUAL 3
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_GREATER 4
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_NOTEQUAL 5
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_GEQUAL 6
+# define NV_PGRAPH_CONTROL_1_STENCIL_FUNC_ALWAYS 7
+# define NV_PGRAPH_CONTROL_1_STENCIL_REF 0x0000FF00
+# define NV_PGRAPH_CONTROL_1_STENCIL_MASK_READ 0x00FF0000
+# define NV_PGRAPH_CONTROL_1_STENCIL_MASK_WRITE 0xFF000000
+#define NV_PGRAPH_CONTROL_2 0x00001954
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_FAIL 0x0000000F
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_ZFAIL 0x000000F0
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_ZPASS 0x00000F00
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_KEEP 1
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_ZERO 2
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_REPLACE 3
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_INCRSAT 4
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_DECRSAT 5
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_INVERT 6
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_INCR 7
+# define NV_PGRAPH_CONTROL_2_STENCIL_OP_V_DECR 8
+#define NV_PGRAPH_CONTROL_3 0x00001958
+# define NV_PGRAPH_CONTROL_3_FOGENABLE (1 << 8)
+# define NV_PGRAPH_CONTROL_3_FOG_MODE 0x00070000
+# define NV_PGRAPH_CONTROL_3_FOG_MODE_LINEAR 0
+# define NV_PGRAPH_CONTROL_3_FOG_MODE_EXP 1
+# define NV_PGRAPH_CONTROL_3_FOG_MODE_EXP2 3
+# define NV_PGRAPH_CONTROL_3_FOG_MODE_EXP_ABS 5
+# define NV_PGRAPH_CONTROL_3_FOG_MODE_EXP2_ABS 7
+# define NV_PGRAPH_CONTROL_3_FOG_MODE_LINEAR_ABS 4
+#define NV_PGRAPH_FOGCOLOR 0x00001980
+# define NV_PGRAPH_FOGCOLOR_RED 0x00FF0000
+# define NV_PGRAPH_FOGCOLOR_GREEN 0x0000FF00
+# define NV_PGRAPH_FOGCOLOR_BLUE 0x000000FF
+# define NV_PGRAPH_FOGCOLOR_ALPHA 0xFF000000
+#define NV_PGRAPH_FOGPARAM0 0x00001984
+#define NV_PGRAPH_FOGPARAM1 0x00001988
+#define NV_PGRAPH_SETUPRASTER 0x00001990
+# define NV_PGRAPH_SETUPRASTER_FRONTFACEMODE 0x00000003
+# define NV_PGRAPH_SETUPRASTER_FRONTFACEMODE_FILL 0
+# define NV_PGRAPH_SETUPRASTER_FRONTFACEMODE_POINT 1
+# define NV_PGRAPH_SETUPRASTER_FRONTFACEMODE_LINE 2
+# define NV_PGRAPH_SETUPRASTER_BACKFACEMODE 0x0000000C
+# define NV_PGRAPH_SETUPRASTER_POFFSETPOINTENABLE (1 << 6)
+# define NV_PGRAPH_SETUPRASTER_POFFSETLINEENABLE (1 << 7)
+# define NV_PGRAPH_SETUPRASTER_POFFSETFILLENABLE (1 << 8)
+# define NV_PGRAPH_SETUPRASTER_CULLCTRL 0x00600000
+# define NV_PGRAPH_SETUPRASTER_CULLCTRL_FRONT 1
+# define NV_PGRAPH_SETUPRASTER_CULLCTRL_BACK 2
+# define NV_PGRAPH_SETUPRASTER_CULLCTRL_FRONT_AND_BACK 3
+# define NV_PGRAPH_SETUPRASTER_FRONTFACE (1 << 23)
+# define NV_PGRAPH_SETUPRASTER_CULLENABLE (1 << 28)
+# define NV_PGRAPH_SETUPRASTER_Z_FORMAT (1 << 29)
+#define NV_PGRAPH_SHADERCLIPMODE 0x00001994
+#define NV_PGRAPH_SHADERCTL 0x00001998
+#define NV_PGRAPH_SHADERPROG 0x0000199C
+#define NV_PGRAPH_SHADOWZSLOPETHRESHOLD 0x000019A8
+#define NV_PGRAPH_SPECFOGFACTOR0 0x000019AC
+#define NV_PGRAPH_SPECFOGFACTOR1 0x000019B0
+#define NV_PGRAPH_TEXADDRESS0 0x000019BC
+# define NV_PGRAPH_TEXADDRESS0_ADDRU 0x00000007
+# define NV_PGRAPH_TEXADDRESS0_ADDRU_WRAP 1
+# define NV_PGRAPH_TEXADDRESS0_ADDRU_MIRROR 2
+# define NV_PGRAPH_TEXADDRESS0_ADDRU_CLAMP_TO_EDGE 3
+# define NV_PGRAPH_TEXADDRESS0_ADDRU_BORDER 4
+# define NV_PGRAPH_TEXADDRESS0_ADDRU_CLAMP_OGL 5
+# define NV_PGRAPH_TEXADDRESS0_WRAP_U (1 << 4)
+# define NV_PGRAPH_TEXADDRESS0_ADDRV 0x00000700
+# define NV_PGRAPH_TEXADDRESS0_WRAP_V (1 << 12)
+# define NV_PGRAPH_TEXADDRESS0_ADDRP 0x00070000
+# define NV_PGRAPH_TEXADDRESS0_WRAP_P (1 << 20)
+# define NV_PGRAPH_TEXADDRESS0_WRAP_Q (1 << 24)
+#define NV_PGRAPH_TEXADDRESS1 0x000019C0
+#define NV_PGRAPH_TEXADDRESS2 0x000019C4
+#define NV_PGRAPH_TEXADDRESS3 0x000019C8
+#define NV_PGRAPH_TEXCTL0_0 0x000019CC
+# define NV_PGRAPH_TEXCTL0_0_ALPHAKILLEN (1 << 2)
+# define NV_PGRAPH_TEXCTL0_0_MAX_LOD_CLAMP 0x0003FFC0
+# define NV_PGRAPH_TEXCTL0_0_MIN_LOD_CLAMP 0x3FFC0000
+# define NV_PGRAPH_TEXCTL0_0_ENABLE (1 << 30)
+#define NV_PGRAPH_TEXCTL0_1 0x000019D0
+#define NV_PGRAPH_TEXCTL0_2 0x000019D4
+#define NV_PGRAPH_TEXCTL0_3 0x000019D8
+#define NV_PGRAPH_TEXCTL1_0 0x000019DC
+# define NV_PGRAPH_TEXCTL1_0_IMAGE_PITCH 0xFFFF0000
+#define NV_PGRAPH_TEXCTL1_1 0x000019E0
+#define NV_PGRAPH_TEXCTL1_2 0x000019E4
+#define NV_PGRAPH_TEXCTL1_3 0x000019E8
+#define NV_PGRAPH_TEXCTL2_0 0x000019EC
+#define NV_PGRAPH_TEXCTL2_1 0x000019F0
+#define NV_PGRAPH_TEXFILTER0 0x000019F4
+# define NV_PGRAPH_TEXFILTER0_MIPMAP_LOD_BIAS 0x00001FFF
+# define NV_PGRAPH_TEXFILTER0_MIN 0x003F0000
+# define NV_PGRAPH_TEXFILTER0_MIN_BOX_LOD0 1
+# define NV_PGRAPH_TEXFILTER0_MIN_TENT_LOD0 2
+# define NV_PGRAPH_TEXFILTER0_MIN_BOX_NEARESTLOD 3
+# define NV_PGRAPH_TEXFILTER0_MIN_TENT_NEARESTLOD 4
+# define NV_PGRAPH_TEXFILTER0_MIN_BOX_TENT_LOD 5
+# define NV_PGRAPH_TEXFILTER0_MIN_TENT_TENT_LOD 6
+# define NV_PGRAPH_TEXFILTER0_MIN_CONVOLUTION_2D_LOD0 7
+# define NV_PGRAPH_TEXFILTER0_MAG 0x0F000000
+# define NV_PGRAPH_TEXFILTER0_ASIGNED (1 << 28)
+# define NV_PGRAPH_TEXFILTER0_RSIGNED (1 << 29)
+# define NV_PGRAPH_TEXFILTER0_GSIGNED (1 << 30)
+# define NV_PGRAPH_TEXFILTER0_BSIGNED (1 << 31)
+#define NV_PGRAPH_TEXFILTER1 0x000019F8
+#define NV_PGRAPH_TEXFILTER2 0x000019FC
+#define NV_PGRAPH_TEXFILTER3 0x00001A00
+#define NV_PGRAPH_TEXFMT0 0x00001A04
+# define NV_PGRAPH_TEXFMT0_CONTEXT_DMA (1 << 1)
+# define NV_PGRAPH_TEXFMT0_CUBEMAPENABLE (1 << 2)
+# define NV_PGRAPH_TEXFMT0_BORDER_SOURCE (1 << 3)
+# define NV_PGRAPH_TEXFMT0_BORDER_SOURCE_TEXTURE 0
+# define NV_PGRAPH_TEXFMT0_BORDER_SOURCE_COLOR 1
+# define NV_PGRAPH_TEXFMT0_DIMENSIONALITY 0x000000C0
+# define NV_PGRAPH_TEXFMT0_COLOR 0x00007F00
+# define NV_PGRAPH_TEXFMT0_MIPMAP_LEVELS 0x000F0000
+# define NV_PGRAPH_TEXFMT0_BASE_SIZE_U 0x00F00000
+# define NV_PGRAPH_TEXFMT0_BASE_SIZE_V 0x0F000000
+# define NV_PGRAPH_TEXFMT0_BASE_SIZE_P 0xF0000000
+#define NV_PGRAPH_TEXFMT1 0x00001A08
+#define NV_PGRAPH_TEXFMT2 0x00001A0C
+#define NV_PGRAPH_TEXFMT3 0x00001A10
+#define NV_PGRAPH_TEXIMAGERECT0 0x00001A14
+# define NV_PGRAPH_TEXIMAGERECT0_WIDTH 0x1FFF0000
+# define NV_PGRAPH_TEXIMAGERECT0_HEIGHT 0x00001FFF
+#define NV_PGRAPH_TEXIMAGERECT1 0x00001A18
+#define NV_PGRAPH_TEXIMAGERECT2 0x00001A1C
+#define NV_PGRAPH_TEXIMAGERECT3 0x00001A20
+#define NV_PGRAPH_TEXOFFSET0 0x00001A24
+#define NV_PGRAPH_TEXOFFSET1 0x00001A28
+#define NV_PGRAPH_TEXOFFSET2 0x00001A2C
+#define NV_PGRAPH_TEXOFFSET3 0x00001A30
+#define NV_PGRAPH_TEXPALETTE0 0x00001A34
+# define NV_PGRAPH_TEXPALETTE0_CONTEXT_DMA (1 << 0)
+# define NV_PGRAPH_TEXPALETTE0_LENGTH 0x0000000C
+# define NV_PGRAPH_TEXPALETTE0_LENGTH_256 0
+# define NV_PGRAPH_TEXPALETTE0_LENGTH_128 1
+# define NV_PGRAPH_TEXPALETTE0_LENGTH_64 2
+# define NV_PGRAPH_TEXPALETTE0_LENGTH_32 3
+# define NV_PGRAPH_TEXPALETTE0_OFFSET 0xFFFFFFC0
+#define NV_PGRAPH_TEXPALETTE1 0x00001A38
+#define NV_PGRAPH_TEXPALETTE2 0x00001A3C
+#define NV_PGRAPH_TEXPALETTE3 0x00001A40
+#define NV_PGRAPH_ZSTENCILCLEARVALUE 0x00001A88
+#define NV_PGRAPH_ZCLIPMIN 0x00001A90
+#define NV_PGRAPH_ZOFFSETBIAS 0x00001AA4
+#define NV_PGRAPH_ZOFFSETFACTOR 0x00001AA8
+#define NV_PGRAPH_EYEVEC0 0x00001AAC
+#define NV_PGRAPH_EYEVEC1 0x00001AB0
+#define NV_PGRAPH_EYEVEC2 0x00001AB4
+#define NV_PGRAPH_ZCLIPMAX 0x00001ABC
+
+
+#define NV_PCRTC_INTR_0 0x00000100
+# define NV_PCRTC_INTR_0_VBLANK (1 << 0)
+#define NV_PCRTC_INTR_EN_0 0x00000140
+# define NV_PCRTC_INTR_EN_0_VBLANK (1 << 0)
+#define NV_PCRTC_START 0x00000800
+#define NV_PCRTC_CONFIG 0x00000804
+
+
+#define NV_PVIDEO_INTR 0x00000100
+# define NV_PVIDEO_INTR_BUFFER_0 (1 << 0)
+# define NV_PVIDEO_INTR_BUFFER_1 (1 << 4)
+#define NV_PVIDEO_INTR_EN 0x00000140
+# define NV_PVIDEO_INTR_EN_BUFFER_0 (1 << 0)
+# define NV_PVIDEO_INTR_EN_BUFFER_1 (1 << 4)
+#define NV_PVIDEO_BUFFER 0x00000700
+# define NV_PVIDEO_BUFFER_0_USE (1 << 0)
+# define NV_PVIDEO_BUFFER_1_USE (1 << 4)
+#define NV_PVIDEO_STOP 0x00000704
+#define NV_PVIDEO_BASE 0x00000900
+#define NV_PVIDEO_LIMIT 0x00000908
+#define NV_PVIDEO_LUMINANCE 0x00000910
+#define NV_PVIDEO_CHROMINANCE 0x00000918
+#define NV_PVIDEO_OFFSET 0x00000920
+#define NV_PVIDEO_SIZE_IN 0x00000928
+# define NV_PVIDEO_SIZE_IN_WIDTH 0x000007FF
+# define NV_PVIDEO_SIZE_IN_HEIGHT 0x07FF0000
+#define NV_PVIDEO_POINT_IN 0x00000930
+# define NV_PVIDEO_POINT_IN_S 0x00007FFF
+# define NV_PVIDEO_POINT_IN_T 0xFFFE0000
+#define NV_PVIDEO_DS_DX 0x00000938
+#define NV_PVIDEO_DT_DY 0x00000940
+#define NV_PVIDEO_POINT_OUT 0x00000948
+# define NV_PVIDEO_POINT_OUT_X 0x00000FFF
+# define NV_PVIDEO_POINT_OUT_Y 0x0FFF0000
+#define NV_PVIDEO_SIZE_OUT 0x00000950
+# define NV_PVIDEO_SIZE_OUT_WIDTH 0x00000FFF
+# define NV_PVIDEO_SIZE_OUT_HEIGHT 0x0FFF0000
+#define NV_PVIDEO_FORMAT 0x00000958
+# define NV_PVIDEO_FORMAT_PITCH 0x00001FFF
+# define NV_PVIDEO_FORMAT_COLOR 0x00030000
+# define NV_PVIDEO_FORMAT_COLOR_LE_CR8YB8CB8YA8 1
+# define NV_PVIDEO_FORMAT_DISPLAY (1 << 20)
+
+
+#define NV_PTIMER_INTR_0 0x00000100
+# define NV_PTIMER_INTR_0_ALARM (1 << 0)
+#define NV_PTIMER_INTR_EN_0 0x00000140
+# define NV_PTIMER_INTR_EN_0_ALARM (1 << 0)
+#define NV_PTIMER_NUMERATOR 0x00000200
+#define NV_PTIMER_DENOMINATOR 0x00000210
+#define NV_PTIMER_TIME_0 0x00000400
+#define NV_PTIMER_TIME_1 0x00000410
+#define NV_PTIMER_ALARM_0 0x00000420
+
+
+#define NV_PFB_CFG0 0x00000200
+# define NV_PFB_CFG0_PART 0x00000003
+#define NV_PFB_CSTATUS 0x0000020C
+#define NV_PFB_WBC 0x00000410
+# define NV_PFB_WBC_FLUSH (1 << 16)
+
+
+#define NV_PRAMDAC_NVPLL_COEFF 0x00000500
+# define NV_PRAMDAC_NVPLL_COEFF_MDIV 0x000000FF
+# define NV_PRAMDAC_NVPLL_COEFF_NDIV 0x0000FF00
+# define NV_PRAMDAC_NVPLL_COEFF_PDIV 0x00070000
+#define NV_PRAMDAC_MPLL_COEFF 0x00000504
+# define NV_PRAMDAC_MPLL_COEFF_MDIV 0x000000FF
+# define NV_PRAMDAC_MPLL_COEFF_NDIV 0x0000FF00
+# define NV_PRAMDAC_MPLL_COEFF_PDIV 0x00070000
+#define NV_PRAMDAC_VPLL_COEFF 0x00000508
+# define NV_PRAMDAC_VPLL_COEFF_MDIV 0x000000FF
+# define NV_PRAMDAC_VPLL_COEFF_NDIV 0x0000FF00
+# define NV_PRAMDAC_VPLL_COEFF_PDIV 0x00070000
+#define NV_PRAMDAC_PLL_TEST_COUNTER 0x00000514
+# define NV_PRAMDAC_PLL_TEST_COUNTER_NOOFIPCLKS 0x000003FF
+# define NV_PRAMDAC_PLL_TEST_COUNTER_VALUE 0x0000FFFF
+# define NV_PRAMDAC_PLL_TEST_COUNTER_ENABLE (1 << 16)
+# define NV_PRAMDAC_PLL_TEST_COUNTER_RESET (1 << 20)
+# define NV_PRAMDAC_PLL_TEST_COUNTER_SOURCE 0x03000000
+# define NV_PRAMDAC_PLL_TEST_COUNTER_VPLL2_LOCK (1 << 27)
+# define NV_PRAMDAC_PLL_TEST_COUNTER_PDIV_RST (1 << 28)
+# define NV_PRAMDAC_PLL_TEST_COUNTER_NVPLL_LOCK (1 << 29)
+# define NV_PRAMDAC_PLL_TEST_COUNTER_MPLL_LOCK (1 << 30)
+# define NV_PRAMDAC_PLL_TEST_COUNTER_VPLL_LOCK (1 << 31)
+
+
+#define NV_USER_DMA_PUT 0x40
+#define NV_USER_DMA_GET 0x44
+#define NV_USER_REF 0x48
+
+
+
+/* DMA objects */
+#define NV_DMA_FROM_MEMORY_CLASS 0x02
+#define NV_DMA_TO_MEMORY_CLASS 0x03
+#define NV_DMA_IN_MEMORY_CLASS 0x3d
+
+#define NV_DMA_CLASS 0x00000FFF
+#define NV_DMA_PAGE_TABLE (1 << 12)
+#define NV_DMA_PAGE_ENTRY (1 << 13)
+#define NV_DMA_FLAGS_ACCESS (1 << 14)
+#define NV_DMA_FLAGS_MAPPING_COHERENCY (1 << 15)
+#define NV_DMA_TARGET 0x00030000
+# define NV_DMA_TARGET_NVM 0x00000000
+# define NV_DMA_TARGET_NVM_TILED 0x00010000
+# define NV_DMA_TARGET_PCI 0x00020000
+# define NV_DMA_TARGET_AGP 0x00030000
+#define NV_DMA_ADJUST 0xFFF00000
+
+#define NV_DMA_ADDRESS 0xFFFFF000
+
+
+#define NV_RAMHT_HANDLE 0xFFFFFFFF
+#define NV_RAMHT_INSTANCE 0x0000FFFF
+#define NV_RAMHT_ENGINE 0x00030000
+# define NV_RAMHT_ENGINE_SW 0x00000000
+# define NV_RAMHT_ENGINE_GRAPHICS 0x00010000
+# define NV_RAMHT_ENGINE_DVD 0x00020000
+#define NV_RAMHT_CHID 0x1F000000
+#define NV_RAMHT_STATUS 0x80000000
+
+
+
+/* graphic classes and methods */
+#define NV_SET_OBJECT 0x00000000
+
+
+#define NV_CONTEXT_SURFACES_2D 0x0062
+# define NV062_SET_CONTEXT_DMA_IMAGE_SOURCE 0x00000184
+# define NV062_SET_CONTEXT_DMA_IMAGE_DESTIN 0x00000188
+# define NV062_SET_COLOR_FORMAT 0x00000300
+# define NV062_SET_COLOR_FORMAT_LE_Y8 0x01
+# define NV062_SET_COLOR_FORMAT_LE_A8R8G8B8 0x0A
+# define NV062_SET_PITCH 0x00000304
+# define NV062_SET_OFFSET_SOURCE 0x00000308
+# define NV062_SET_OFFSET_DESTIN 0x0000030C
+
+#define NV_IMAGE_BLIT 0x009F
+# define NV09F_SET_CONTEXT_SURFACES 0x0000019C
+# define NV09F_SET_OPERATION 0x000002FC
+# define NV09F_SET_OPERATION_SRCCOPY 3
+# define NV09F_CONTROL_POINT_IN 0x00000300
+# define NV09F_CONTROL_POINT_OUT 0x00000304
+# define NV09F_SIZE 0x00000308
+
+
+#define NV_KELVIN_PRIMITIVE 0x0097
+# define NV097_NO_OPERATION 0x00000100
+# define NV097_WAIT_FOR_IDLE 0x00000110
+# define NV097_SET_FLIP_READ 0x00000120
+# define NV097_SET_FLIP_WRITE 0x00000124
+# define NV097_SET_FLIP_MODULO 0x00000128
+# define NV097_FLIP_INCREMENT_WRITE 0x0000012C
+# define NV097_FLIP_STALL 0x00000130
+# define NV097_SET_CONTEXT_DMA_NOTIFIES 0x00000180
+# define NV097_SET_CONTEXT_DMA_A 0x00000184
+# define NV097_SET_CONTEXT_DMA_B 0x00000188
+# define NV097_SET_CONTEXT_DMA_STATE 0x00000190
+# define NV097_SET_CONTEXT_DMA_COLOR 0x00000194
+# define NV097_SET_CONTEXT_DMA_ZETA 0x00000198
+# define NV097_SET_CONTEXT_DMA_VERTEX_A 0x0000019C
+# define NV097_SET_CONTEXT_DMA_VERTEX_B 0x000001A0
+# define NV097_SET_CONTEXT_DMA_SEMAPHORE 0x000001A4
+# define NV097_SET_CONTEXT_DMA_REPORT 0x000001A8
+# define NV097_SET_SURFACE_CLIP_HORIZONTAL 0x00000200
+# define NV097_SET_SURFACE_CLIP_HORIZONTAL_X 0x0000FFFF
+# define NV097_SET_SURFACE_CLIP_HORIZONTAL_WIDTH 0xFFFF0000
+# define NV097_SET_SURFACE_CLIP_VERTICAL 0x00000204
+# define NV097_SET_SURFACE_CLIP_VERTICAL_Y 0x0000FFFF
+# define NV097_SET_SURFACE_CLIP_VERTICAL_HEIGHT 0xFFFF0000
+# define NV097_SET_SURFACE_FORMAT 0x00000208
+# define NV097_SET_SURFACE_FORMAT_COLOR 0x0000000F
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_X1R5G5B5_Z1R5G5B5 0x01
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_X1R5G5B5_O1R5G5B5 0x02
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_R5G6B5 0x03
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_X8R8G8B8_Z8R8G8B8 0x04
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_X8R8G8B8_O8R8G8B8 0x05
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_X1A7R8G8B8_Z1A7R8G8B8 0x06
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_X1A7R8G8B8_O1A7R8G8B8 0x07
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_A8R8G8B8 0x08
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_B8 0x09
+# define NV097_SET_SURFACE_FORMAT_COLOR_LE_G8B8 0x0A
+# define NV097_SET_SURFACE_FORMAT_ZETA 0x000000F0
+# define NV097_SET_SURFACE_FORMAT_ZETA_Z16 1
+# define NV097_SET_SURFACE_FORMAT_ZETA_Z24S8 2
+# define NV097_SET_SURFACE_FORMAT_TYPE 0x00000F00
+# define NV097_SET_SURFACE_FORMAT_TYPE_PITCH 0x1
+# define NV097_SET_SURFACE_FORMAT_TYPE_SWIZZLE 0x2
+# define NV097_SET_SURFACE_FORMAT_ANTI_ALIASING 0x0000F000
+# define NV097_SET_SURFACE_FORMAT_ANTI_ALIASING_CENTER_1 0
+# define NV097_SET_SURFACE_FORMAT_ANTI_ALIASING_CENTER_CORNER_2 1
+# define NV097_SET_SURFACE_FORMAT_ANTI_ALIASING_SQUARE_OFFSET_4 2
+# define NV097_SET_SURFACE_FORMAT_WIDTH 0x00FF0000
+# define NV097_SET_SURFACE_FORMAT_HEIGHT 0xFF000000
+# define NV097_SET_SURFACE_PITCH 0x0000020C
+# define NV097_SET_SURFACE_PITCH_COLOR 0x0000FFFF
+# define NV097_SET_SURFACE_PITCH_ZETA 0xFFFF0000
+# define NV097_SET_SURFACE_COLOR_OFFSET 0x00000210
+# define NV097_SET_SURFACE_ZETA_OFFSET 0x00000214
+# define NV097_SET_COMBINER_ALPHA_ICW 0x00000260
+# define NV097_SET_COMBINER_SPECULAR_FOG_CW0 0x00000288
+# define NV097_SET_COMBINER_SPECULAR_FOG_CW1 0x0000028C
+# define NV097_SET_CONTROL0 0x00000290
+# define NV097_SET_CONTROL0_STENCIL_WRITE_ENABLE (1 << 0)
+# define NV097_SET_CONTROL0_Z_FORMAT (1 << 12)
+# define NV097_SET_CONTROL0_Z_PERSPECTIVE_ENABLE (1 << 16)
+# define NV097_SET_FOG_MODE 0x0000029C
+# define NV097_SET_FOG_MODE_V_LINEAR 0x2601
+# define NV097_SET_FOG_MODE_V_EXP 0x800
+# define NV097_SET_FOG_MODE_V_EXP2 0x801
+# define NV097_SET_FOG_MODE_V_EXP_ABS 0x802
+# define NV097_SET_FOG_MODE_V_EXP2_ABS 0x803
+# define NV097_SET_FOG_MODE_V_LINEAR_ABS 0x804
+# define NV097_SET_FOG_GEN_MODE 0x000002A0
+# define NV097_SET_FOG_GEN_MODE_V_SPEC_ALPHA 0
+# define NV097_SET_FOG_GEN_MODE_V_RADIAL 1
+# define NV097_SET_FOG_GEN_MODE_V_PLANAR 2
+# define NV097_SET_FOG_GEN_MODE_V_ABS_PLANAR 3
+# define NV097_SET_FOG_GEN_MODE_V_FOG_X 6
+# define NV097_SET_FOG_ENABLE 0x000002A4
+# define NV097_SET_FOG_COLOR 0x000002A8
+# define NV097_SET_FOG_COLOR_RED 0x000000FF
+# define NV097_SET_FOG_COLOR_GREEN 0x0000FF00
+# define NV097_SET_FOG_COLOR_BLUE 0x00FF0000
+# define NV097_SET_FOG_COLOR_ALPHA 0xFF000000
+# define NV097_SET_ALPHA_TEST_ENABLE 0x00000300
+# define NV097_SET_BLEND_ENABLE 0x00000304
+# define NV097_SET_CULL_FACE_ENABLE 0x00000308
+# define NV097_SET_DEPTH_TEST_ENABLE 0x0000030C
+# define NV097_SET_DITHER_ENABLE 0x00000310
+# define NV097_SET_LIGHTING_ENABLE 0x00000314
+# define NV097_SET_SKIN_MODE 0x00000328
+# define NV097_SET_SKIN_MODE_OFF 0
+# define NV097_SET_SKIN_MODE_2G 1
+# define NV097_SET_SKIN_MODE_2 2
+# define NV097_SET_SKIN_MODE_3G 3
+# define NV097_SET_SKIN_MODE_3 4
+# define NV097_SET_SKIN_MODE_4G 5
+# define NV097_SET_SKIN_MODE_4 6
+# define NV097_SET_STENCIL_TEST_ENABLE 0x0000032C
+# define NV097_SET_POLY_OFFSET_POINT_ENABLE 0x00000330
+# define NV097_SET_POLY_OFFSET_LINE_ENABLE 0x00000334
+# define NV097_SET_POLY_OFFSET_FILL_ENABLE 0x00000338
+# define NV097_SET_ALPHA_FUNC 0x0000033C
+# define NV097_SET_ALPHA_REF 0x00000340
+# define NV097_SET_BLEND_FUNC_SFACTOR 0x00000344
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ZERO 0x0000
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE 0x0001
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_SRC_COLOR 0x0300
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE_MINUS_SRC_COLOR 0x0301
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_SRC_ALPHA 0x0302
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE_MINUS_SRC_ALPHA 0x0303
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_DST_ALPHA 0x0304
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE_MINUS_DST_ALPHA 0x0305
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_DST_COLOR 0x0306
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE_MINUS_DST_COLOR 0x0307
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_SRC_ALPHA_SATURATE 0x0308
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_CONSTANT_COLOR 0x8001
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE_MINUS_CONSTANT_COLOR 0x8002
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_CONSTANT_ALPHA 0x8003
+# define NV097_SET_BLEND_FUNC_SFACTOR_V_ONE_MINUS_CONSTANT_ALPHA 0x8004
+# define NV097_SET_BLEND_FUNC_DFACTOR 0x00000348
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ZERO 0x0000
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE 0x0001
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_SRC_COLOR 0x0300
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE_MINUS_SRC_COLOR 0x0301
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_SRC_ALPHA 0x0302
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE_MINUS_SRC_ALPHA 0x0303
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_DST_ALPHA 0x0304
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE_MINUS_DST_ALPHA 0x0305
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_DST_COLOR 0x0306
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE_MINUS_DST_COLOR 0x0307
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_SRC_ALPHA_SATURATE 0x0308
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_CONSTANT_COLOR 0x8001
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE_MINUS_CONSTANT_COLOR 0x8002
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_CONSTANT_ALPHA 0x8003
+# define NV097_SET_BLEND_FUNC_DFACTOR_V_ONE_MINUS_CONSTANT_ALPHA 0x8004
+# define NV097_SET_BLEND_COLOR 0x0000034C
+# define NV097_SET_BLEND_EQUATION 0x00000350
+# define NV097_SET_BLEND_EQUATION_V_FUNC_SUBTRACT 0x800A
+# define NV097_SET_BLEND_EQUATION_V_FUNC_REVERSE_SUBTRACT 0x800B
+# define NV097_SET_BLEND_EQUATION_V_FUNC_ADD 0x8006
+# define NV097_SET_BLEND_EQUATION_V_MIN 0x8007
+# define NV097_SET_BLEND_EQUATION_V_MAX 0x8008
+# define NV097_SET_BLEND_EQUATION_V_FUNC_REVERSE_SUBTRACT_SIGNED 0xF005
+# define NV097_SET_BLEND_EQUATION_V_FUNC_ADD_SIGNED 0xF006
+# define NV097_SET_DEPTH_FUNC 0x00000354
+# define NV097_SET_COLOR_MASK 0x00000358
+# define NV097_SET_COLOR_MASK_BLUE_WRITE_ENABLE (1 << 0)
+# define NV097_SET_COLOR_MASK_GREEN_WRITE_ENABLE (1 << 8)
+# define NV097_SET_COLOR_MASK_RED_WRITE_ENABLE (1 << 16)
+# define NV097_SET_COLOR_MASK_ALPHA_WRITE_ENABLE (1 << 24)
+# define NV097_SET_DEPTH_MASK 0x0000035C
+# define NV097_SET_STENCIL_MASK 0x00000360
+# define NV097_SET_STENCIL_FUNC 0x00000364
+# define NV097_SET_STENCIL_FUNC_REF 0x00000368
+# define NV097_SET_STENCIL_FUNC_MASK 0x0000036C
+# define NV097_SET_STENCIL_OP_FAIL 0x00000370
+# define NV097_SET_STENCIL_OP_ZFAIL 0x00000374
+# define NV097_SET_STENCIL_OP_ZPASS 0x00000378
+# define NV097_SET_STENCIL_OP_V_KEEP 0x1E00
+# define NV097_SET_STENCIL_OP_V_ZERO 0x0000
+# define NV097_SET_STENCIL_OP_V_REPLACE 0x1E01
+# define NV097_SET_STENCIL_OP_V_INCRSAT 0x1E02
+# define NV097_SET_STENCIL_OP_V_DECRSAT 0x1E03
+# define NV097_SET_STENCIL_OP_V_INVERT 0x150A
+# define NV097_SET_STENCIL_OP_V_INCR 0x8507
+# define NV097_SET_STENCIL_OP_V_DECR 0x8508
+# define NV097_SET_POLYGON_OFFSET_SCALE_FACTOR 0x00000384
+# define NV097_SET_POLYGON_OFFSET_BIAS 0x00000388
+# define NV097_SET_FRONT_POLYGON_MODE 0x0000038C
+# define NV097_SET_FRONT_POLYGON_MODE_V_POINT 0x1B00
+# define NV097_SET_FRONT_POLYGON_MODE_V_LINE 0x1B01
+# define NV097_SET_FRONT_POLYGON_MODE_V_FILL 0x1B02
+# define NV097_SET_BACK_POLYGON_MODE 0x00000390
+# define NV097_SET_CLIP_MIN 0x00000394
+# define NV097_SET_CLIP_MAX 0x00000398
+# define NV097_SET_CULL_FACE 0x0000039C
+# define NV097_SET_CULL_FACE_V_FRONT 0x404
+# define NV097_SET_CULL_FACE_V_BACK 0x405
+# define NV097_SET_CULL_FACE_V_FRONT_AND_BACK 0x408
+# define NV097_SET_FRONT_FACE 0x000003A0
+# define NV097_SET_FRONT_FACE_V_CW 0x900
+# define NV097_SET_FRONT_FACE_V_CCW 0x901
+# define NV097_SET_NORMALIZATION_ENABLE 0x000003A4
+# define NV097_SET_LIGHT_ENABLE_MASK 0x000003BC
+# define NV097_SET_LIGHT_ENABLE_MASK_LIGHT0_OFF 0
+# define NV097_SET_LIGHT_ENABLE_MASK_LIGHT0_INFINITE 1
+# define NV097_SET_LIGHT_ENABLE_MASK_LIGHT0_LOCAL 2
+# define NV097_SET_LIGHT_ENABLE_MASK_LIGHT0_SPOT 3
+# define NV097_SET_TEXGEN_S 0x000003C0
+# define NV097_SET_TEXGEN_S_DISABLE 0x0000
+# define NV097_SET_TEXGEN_S_EYE_LINEAR 0x2400
+# define NV097_SET_TEXGEN_S_OBJECT_LINEAR 0x2401
+# define NV097_SET_TEXGEN_S_SPHERE_MAP 0x2402
+# define NV097_SET_TEXGEN_S_REFLECTION_MAP 0x8512
+# define NV097_SET_TEXGEN_S_NORMAL_MAP 0x8511
+# define NV097_SET_TEXGEN_T 0x000003C4
+# define NV097_SET_TEXGEN_R 0x000003C8
+# define NV097_SET_TEXGEN_Q 0x000003CC
+# define NV097_SET_TEXTURE_MATRIX_ENABLE 0x00000420
+# define NV097_SET_PROJECTION_MATRIX 0x00000440
+# define NV097_SET_MODEL_VIEW_MATRIX 0x00000480
+# define NV097_SET_INVERSE_MODEL_VIEW_MATRIX 0x00000580
+# define NV097_SET_COMPOSITE_MATRIX 0x00000680
+# define NV097_SET_TEXTURE_MATRIX 0x000006C0
+# define NV097_SET_FOG_PARAMS 0x000009C0
+# define NV097_SET_TEXGEN_PLANE_S 0x00000840
+# define NV097_SET_TEXGEN_PLANE_T 0x00000850
+# define NV097_SET_TEXGEN_PLANE_R 0x00000860
+# define NV097_SET_TEXGEN_PLANE_Q 0x00000870
+# define NV097_SET_TEXGEN_VIEW_MODEL 0x000009CC
+# define NV097_SET_TEXGEN_VIEW_MODEL_LOCAL_VIEWER 0
+# define NV097_SET_TEXGEN_VIEW_MODEL_INFINITE_VIEWER 1
+# define NV097_SET_FOG_PLANE 0x000009D0
+# define NV097_SET_SCENE_AMBIENT_COLOR 0x00000A10
+# define NV097_SET_VIEWPORT_OFFSET 0x00000A20
+# define NV097_SET_EYE_POSITION 0x00000A50
+# define NV097_SET_COMBINER_FACTOR0 0x00000A60
+# define NV097_SET_COMBINER_FACTOR1 0x00000A80
+# define NV097_SET_COMBINER_ALPHA_OCW 0x00000AA0
+# define NV097_SET_COMBINER_COLOR_ICW 0x00000AC0
+# define NV097_SET_VIEWPORT_SCALE 0x00000AF0
+# define NV097_SET_TRANSFORM_PROGRAM 0x00000B00
+# define NV097_SET_TRANSFORM_CONSTANT 0x00000B80
+# define NV097_SET_VERTEX3F 0x00001500
+# define NV097_SET_BACK_LIGHT_AMBIENT_COLOR 0x00000C00
+# define NV097_SET_BACK_LIGHT_DIFFUSE_COLOR 0x00000C0C
+# define NV097_SET_BACK_LIGHT_SPECULAR_COLOR 0x00000C18
+# define NV097_SET_LIGHT_AMBIENT_COLOR 0x00001000
+# define NV097_SET_LIGHT_DIFFUSE_COLOR 0x0000100C
+# define NV097_SET_LIGHT_SPECULAR_COLOR 0x00001018
+# define NV097_SET_LIGHT_LOCAL_RANGE 0x00001024
+# define NV097_SET_LIGHT_INFINITE_HALF_VECTOR 0x00001028
+# define NV097_SET_LIGHT_INFINITE_DIRECTION 0x00001034
+# define NV097_SET_LIGHT_SPOT_FALLOFF 0x00001040
+# define NV097_SET_LIGHT_SPOT_DIRECTION 0x0000104C
+# define NV097_SET_LIGHT_LOCAL_POSITION 0x0000105C
+# define NV097_SET_LIGHT_LOCAL_ATTENUATION 0x00001068
+# define NV097_SET_VERTEX4F 0x00001518
+# define NV097_SET_VERTEX_DATA_ARRAY_OFFSET 0x00001720
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT 0x00001760
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE 0x0000000F
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE_UB_D3D 0
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE_S1 1
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE_F 2
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE_UB_OGL 4
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE_S32K 5
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_TYPE_CMP 6
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_SIZE 0x000000F0
+# define NV097_SET_VERTEX_DATA_ARRAY_FORMAT_STRIDE 0xFFFFFF00
+# define NV097_SET_LOGIC_OP_ENABLE 0x000017BC
+# define NV097_SET_LOGIC_OP 0x000017C0
+# define NV097_CLEAR_REPORT_VALUE 0x000017C8
+# define NV097_CLEAR_REPORT_VALUE_TYPE 0xFFFFFFFF
+# define NV097_CLEAR_REPORT_VALUE_TYPE_ZPASS_PIXEL_CNT 1
+# define NV097_SET_ZPASS_PIXEL_COUNT_ENABLE 0x000017CC
+# define NV097_GET_REPORT 0x000017D0
+# define NV097_GET_REPORT_OFFSET 0x00FFFFFF
+# define NV097_GET_REPORT_TYPE 0xFF000000
+# define NV097_GET_REPORT_TYPE_ZPASS_PIXEL_CNT 1
+# define NV097_SET_EYE_DIRECTION 0x000017E0
+# define NV097_SET_SHADER_CLIP_PLANE_MODE 0x000017F8
+# define NV097_SET_BEGIN_END 0x000017FC
+# define NV097_SET_BEGIN_END_OP_END 0x00
+# define NV097_SET_BEGIN_END_OP_POINTS 0x01
+# define NV097_SET_BEGIN_END_OP_LINES 0x02
+# define NV097_SET_BEGIN_END_OP_LINE_LOOP 0x03
+# define NV097_SET_BEGIN_END_OP_LINE_STRIP 0x04
+# define NV097_SET_BEGIN_END_OP_TRIANGLES 0x05
+# define NV097_SET_BEGIN_END_OP_TRIANGLE_STRIP 0x06
+# define NV097_SET_BEGIN_END_OP_TRIANGLE_FAN 0x07
+# define NV097_SET_BEGIN_END_OP_QUADS 0x08
+# define NV097_SET_BEGIN_END_OP_QUAD_STRIP 0x09
+# define NV097_SET_BEGIN_END_OP_POLYGON 0x0A
+# define NV097_ARRAY_ELEMENT16 0x00001800
+# define NV097_ARRAY_ELEMENT32 0x00001808
+# define NV097_DRAW_ARRAYS 0x00001810
+# define NV097_DRAW_ARRAYS_COUNT 0xFF000000
+# define NV097_DRAW_ARRAYS_START_INDEX 0x00FFFFFF
+# define NV097_INLINE_ARRAY 0x00001818
+# define NV097_SET_EYE_VECTOR 0x0000181C
+# define NV097_SET_VERTEX_DATA2F_M 0x00001880
+# define NV097_SET_VERTEX_DATA4F_M 0x00001A00
+# define NV097_SET_VERTEX_DATA2S 0x00001900
+# define NV097_SET_VERTEX_DATA4UB 0x00001940
+# define NV097_SET_VERTEX_DATA4S_M 0x00001980
+# define NV097_SET_TEXTURE_OFFSET 0x00001B00
+# define NV097_SET_TEXTURE_FORMAT 0x00001B04
+# define NV097_SET_TEXTURE_FORMAT_CONTEXT_DMA 0x00000003
+# define NV097_SET_TEXTURE_FORMAT_CUBEMAP_ENABLE (1 << 2)
+# define NV097_SET_TEXTURE_FORMAT_BORDER_SOURCE (1 << 3)
+# define NV097_SET_TEXTURE_FORMAT_BORDER_SOURCE_TEXTURE 0
+# define NV097_SET_TEXTURE_FORMAT_BORDER_SOURCE_COLOR 1
+# define NV097_SET_TEXTURE_FORMAT_DIMENSIONALITY 0x000000F0
+# define NV097_SET_TEXTURE_FORMAT_COLOR 0x0000FF00
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_Y8 0x00
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_AY8 0x01
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A1R5G5B5 0x02
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_X1R5G5B5 0x03
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A4R4G4B4 0x04
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_R5G6B5 0x05
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8R8G8B8 0x06
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_X8R8G8B8 0x07
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_I8_A8R8G8B8 0x0B
+# define NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT1_A1R5G5B5 0x0C
+# define NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT23_A8R8G8B8 0x0E
+# define NV097_SET_TEXTURE_FORMAT_COLOR_L_DXT45_A8R8G8B8 0x0F
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A1R5G5B5 0x10
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_R5G6B5 0x11
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8R8G8B8 0x12
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_Y8 0x13
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8 0x19
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8Y8 0x1A
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_AY8 0x1B
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_X1R5G5B5 0x1C
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A4R4G4B4 0x1D
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_X8R8G8B8 0x1E
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8 0x1F
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8Y8 0x20
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LC_IMAGE_CR8YB8CB8YA8 0x24
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_R6G5B5 0x27
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_G8B8 0x28
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_R8B8 0x29
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_X8_Y24_FIXED 0x2E
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_DEPTH_Y16_FIXED 0x30
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_Y16 0x35
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_A8B8G8R8 0x3A
+# define NV097_SET_TEXTURE_FORMAT_COLOR_SZ_R8G8B8A8 0x3C
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_A8B8G8R8 0x3F
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_B8G8R8A8 0x40
+# define NV097_SET_TEXTURE_FORMAT_COLOR_LU_IMAGE_R8G8B8A8 0x41
+# define NV097_SET_TEXTURE_FORMAT_MIPMAP_LEVELS 0x000F0000
+# define NV097_SET_TEXTURE_FORMAT_BASE_SIZE_U 0x00F00000
+# define NV097_SET_TEXTURE_FORMAT_BASE_SIZE_V 0x0F000000
+# define NV097_SET_TEXTURE_FORMAT_BASE_SIZE_P 0xF0000000
+# define NV097_SET_TEXTURE_ADDRESS 0x00001B08
+# define NV097_SET_TEXTURE_CONTROL0 0x00001B0C
+# define NV097_SET_TEXTURE_CONTROL0_ENABLE (1 << 30)
+# define NV097_SET_TEXTURE_CONTROL0_MIN_LOD_CLAMP 0x3FFC0000
+# define NV097_SET_TEXTURE_CONTROL0_MAX_LOD_CLAMP 0x0003FFC0
+# define NV097_SET_TEXTURE_CONTROL1 0x00001B10
+# define NV097_SET_TEXTURE_CONTROL1_IMAGE_PITCH 0xFFFF0000
+# define NV097_SET_TEXTURE_FILTER 0x00001B14
+# define NV097_SET_TEXTURE_FILTER_MIPMAP_LOD_BIAS 0x00001FFF
+# define NV097_SET_TEXTURE_FILTER_MIN 0x00FF0000
+# define NV097_SET_TEXTURE_FILTER_MAG 0x0F000000
+# define NV097_SET_TEXTURE_FILTER_ASIGNED (1 << 28)
+# define NV097_SET_TEXTURE_FILTER_RSIGNED (1 << 29)
+# define NV097_SET_TEXTURE_FILTER_GSIGNED (1 << 30)
+# define NV097_SET_TEXTURE_FILTER_BSIGNED (1 << 31)
+# define NV097_SET_TEXTURE_IMAGE_RECT 0x00001B1C
+# define NV097_SET_TEXTURE_IMAGE_RECT_WIDTH 0xFFFF0000
+# define NV097_SET_TEXTURE_IMAGE_RECT_HEIGHT 0x0000FFFF
+# define NV097_SET_TEXTURE_PALETTE 0x00001B20
+# define NV097_SET_TEXTURE_PALETTE_CONTEXT_DMA (1 << 0)
+# define NV097_SET_TEXTURE_PALETTE_LENGTH 0x0000000C
+# define NV097_SET_TEXTURE_PALETTE_LENGTH_256 0
+# define NV097_SET_TEXTURE_PALETTE_LENGTH_128 1
+# define NV097_SET_TEXTURE_PALETTE_LENGTH_64 2
+# define NV097_SET_TEXTURE_PALETTE_LENGTH_32 3
+# define NV097_SET_TEXTURE_PALETTE_OFFSET 0xFFFFFFC0
+# define NV097_SET_TEXTURE_BORDER_COLOR 0x00001B24
+# define NV097_SET_TEXTURE_SET_BUMP_ENV_MAT 0x00001B28
+# define NV097_SET_TEXTURE_SET_BUMP_ENV_SCALE 0x00001B38
+# define NV097_SET_TEXTURE_SET_BUMP_ENV_OFFSET 0x00001B3C
+# define NV097_SET_SEMAPHORE_OFFSET 0x00001D6C
+# define NV097_BACK_END_WRITE_SEMAPHORE_RELEASE 0x00001D70
+# define NV097_SET_ZSTENCIL_CLEAR_VALUE 0x00001D8C
+# define NV097_SET_COLOR_CLEAR_VALUE 0x00001D90
+# define NV097_CLEAR_SURFACE 0x00001D94
+# define NV097_CLEAR_SURFACE_Z (1 << 0)
+# define NV097_CLEAR_SURFACE_STENCIL (1 << 1)
+# define NV097_CLEAR_SURFACE_COLOR 0x000000F0
+# define NV097_CLEAR_SURFACE_R (1 << 4)
+# define NV097_CLEAR_SURFACE_G (1 << 5)
+# define NV097_CLEAR_SURFACE_B (1 << 6)
+# define NV097_CLEAR_SURFACE_A (1 << 7)
+# define NV097_SET_CLEAR_RECT_HORIZONTAL 0x00001D98
+# define NV097_SET_CLEAR_RECT_VERTICAL 0x00001D9C
+# define NV097_SET_SPECULAR_FOG_FACTOR 0x00001E20
+# define NV097_SET_COMBINER_COLOR_OCW 0x00001E40
+# define NV097_SET_COMBINER_CONTROL 0x00001E60
+# define NV097_SET_SHADOW_ZSLOPE_THRESHOLD 0x00001E68
+# define NV097_SET_SHADER_STAGE_PROGRAM 0x00001E70
+# define NV097_SET_SHADER_OTHER_STAGE_INPUT 0x00001E78
+# define NV097_SET_TRANSFORM_EXECUTION_MODE 0x00001E94
+# define NV097_SET_TRANSFORM_EXECUTION_MODE_MODE 0x00000003
+# define NV097_SET_TRANSFORM_EXECUTION_MODE_RANGE_MODE 0xFFFFFFFC
+# define NV097_SET_TRANSFORM_PROGRAM_CXT_WRITE_EN 0x00001E98
+# define NV097_SET_TRANSFORM_PROGRAM_LOAD 0x00001E9C
+# define NV097_SET_TRANSFORM_PROGRAM_START 0x00001EA0
+# define NV097_SET_TRANSFORM_CONSTANT_LOAD 0x00001EA4
+
+/* vertex processing (cheops) context layout */
+#define NV_IGRAPH_XF_XFCTX_CMAT0 0x00
+#define NV_IGRAPH_XF_XFCTX_PMAT0 0x04
+#define NV_IGRAPH_XF_XFCTX_MMAT0 0x08
+#define NV_IGRAPH_XF_XFCTX_IMMAT0 0x0c
+#define NV_IGRAPH_XF_XFCTX_MMAT1 0x10
+#define NV_IGRAPH_XF_XFCTX_IMMAT1 0x14
+#define NV_IGRAPH_XF_XFCTX_MMAT2 0x18
+#define NV_IGRAPH_XF_XFCTX_IMMAT2 0x1c
+#define NV_IGRAPH_XF_XFCTX_MMAT3 0x20
+#define NV_IGRAPH_XF_XFCTX_IMMAT3 0x24
+#define NV_IGRAPH_XF_XFCTX_LIT0 0x28
+#define NV_IGRAPH_XF_XFCTX_LIT1 0x29
+#define NV_IGRAPH_XF_XFCTX_LIT2 0x2a
+#define NV_IGRAPH_XF_XFCTX_LIT3 0x2b
+#define NV_IGRAPH_XF_XFCTX_LIT4 0x2c
+#define NV_IGRAPH_XF_XFCTX_LIT5 0x2d
+#define NV_IGRAPH_XF_XFCTX_LIT6 0x2e
+#define NV_IGRAPH_XF_XFCTX_LIT7 0x2f
+#define NV_IGRAPH_XF_XFCTX_SPOT0 0x30
+#define NV_IGRAPH_XF_XFCTX_SPOT1 0x31
+#define NV_IGRAPH_XF_XFCTX_SPOT2 0x32
+#define NV_IGRAPH_XF_XFCTX_SPOT3 0x33
+#define NV_IGRAPH_XF_XFCTX_SPOT4 0x34
+#define NV_IGRAPH_XF_XFCTX_SPOT5 0x35
+#define NV_IGRAPH_XF_XFCTX_SPOT6 0x36
+#define NV_IGRAPH_XF_XFCTX_SPOT7 0x37
+#define NV_IGRAPH_XF_XFCTX_EYEP 0x38
+#define NV_IGRAPH_XF_XFCTX_FOG 0x39
+#define NV_IGRAPH_XF_XFCTX_VPSCL 0x3a
+#define NV_IGRAPH_XF_XFCTX_VPOFF 0x3b
+#define NV_IGRAPH_XF_XFCTX_CONS0 0x3c
+#define NV_IGRAPH_XF_XFCTX_CONS1 0x3d
+#define NV_IGRAPH_XF_XFCTX_CONS2 0x3e
+#define NV_IGRAPH_XF_XFCTX_CONS3 0x3f
+#define NV_IGRAPH_XF_XFCTX_TG0MAT 0x40
+#define NV_IGRAPH_XF_XFCTX_T0MAT 0x44
+#define NV_IGRAPH_XF_XFCTX_TG1MAT 0x48
+#define NV_IGRAPH_XF_XFCTX_T1MAT 0x4c
+#define NV_IGRAPH_XF_XFCTX_TG2MAT 0x50
+#define NV_IGRAPH_XF_XFCTX_T2MAT 0x54
+#define NV_IGRAPH_XF_XFCTX_TG3MAT 0x58
+#define NV_IGRAPH_XF_XFCTX_T3MAT 0x5c
+#define NV_IGRAPH_XF_XFCTX_PRSPACE 0x60
+
+/* lighting (zoser) context layout */
+#define NV_IGRAPH_XF_LTCTXA_L0_K 0x00
+#define NV_IGRAPH_XF_LTCTXA_L0_SPT 0x01
+#define NV_IGRAPH_XF_LTCTXA_L1_K 0x02
+#define NV_IGRAPH_XF_LTCTXA_L1_SPT 0x03
+#define NV_IGRAPH_XF_LTCTXA_L2_K 0x04
+#define NV_IGRAPH_XF_LTCTXA_L2_SPT 0x05
+#define NV_IGRAPH_XF_LTCTXA_L3_K 0x06
+#define NV_IGRAPH_XF_LTCTXA_L3_SPT 0x07
+#define NV_IGRAPH_XF_LTCTXA_L4_K 0x08
+#define NV_IGRAPH_XF_LTCTXA_L4_SPT 0x09
+#define NV_IGRAPH_XF_LTCTXA_L5_K 0x0a
+#define NV_IGRAPH_XF_LTCTXA_L5_SPT 0x0b
+#define NV_IGRAPH_XF_LTCTXA_L6_K 0x0c
+#define NV_IGRAPH_XF_LTCTXA_L6_SPT 0x0d
+#define NV_IGRAPH_XF_LTCTXA_L7_K 0x0e
+#define NV_IGRAPH_XF_LTCTXA_L7_SPT 0x0f
+#define NV_IGRAPH_XF_LTCTXA_EYED 0x10
+#define NV_IGRAPH_XF_LTCTXA_FR_AMB 0x11
+#define NV_IGRAPH_XF_LTCTXA_BR_AMB 0x12
+#define NV_IGRAPH_XF_LTCTXA_CM_COL 0x13
+#define NV_IGRAPH_XF_LTCTXA_BCM_COL 0x14
+#define NV_IGRAPH_XF_LTCTXA_FOG_K 0x15
+#define NV_IGRAPH_XF_LTCTXA_ZERO 0x16
+#define NV_IGRAPH_XF_LTCTXA_PT0 0x17
+#define NV_IGRAPH_XF_LTCTXA_FOGLIN 0x18
+
+#define NV_IGRAPH_XF_LTCTXB_L0_AMB 0x00
+#define NV_IGRAPH_XF_LTCTXB_L0_DIF 0x01
+#define NV_IGRAPH_XF_LTCTXB_L0_SPC 0x02
+#define NV_IGRAPH_XF_LTCTXB_L0_BAMB 0x03
+#define NV_IGRAPH_XF_LTCTXB_L0_BDIF 0x04
+#define NV_IGRAPH_XF_LTCTXB_L0_BSPC 0x05
+#define NV_IGRAPH_XF_LTCTXB_L1_AMB 0x06
+#define NV_IGRAPH_XF_LTCTXB_L1_DIF 0x07
+#define NV_IGRAPH_XF_LTCTXB_L1_SPC 0x08
+#define NV_IGRAPH_XF_LTCTXB_L1_BAMB 0x09
+#define NV_IGRAPH_XF_LTCTXB_L1_BDIF 0x0a
+#define NV_IGRAPH_XF_LTCTXB_L1_BSPC 0x0b
+#define NV_IGRAPH_XF_LTCTXB_L2_AMB 0x0c
+#define NV_IGRAPH_XF_LTCTXB_L2_DIF 0x0d
+#define NV_IGRAPH_XF_LTCTXB_L2_SPC 0x0e
+#define NV_IGRAPH_XF_LTCTXB_L2_BAMB 0x0f
+#define NV_IGRAPH_XF_LTCTXB_L2_BDIF 0x10
+#define NV_IGRAPH_XF_LTCTXB_L2_BSPC 0x11
+#define NV_IGRAPH_XF_LTCTXB_L3_AMB 0x12
+#define NV_IGRAPH_XF_LTCTXB_L3_DIF 0x13
+#define NV_IGRAPH_XF_LTCTXB_L3_SPC 0x14
+#define NV_IGRAPH_XF_LTCTXB_L3_BAMB 0x15
+#define NV_IGRAPH_XF_LTCTXB_L3_BDIF 0x16
+#define NV_IGRAPH_XF_LTCTXB_L3_BSPC 0x17
+#define NV_IGRAPH_XF_LTCTXB_L4_AMB 0x18
+#define NV_IGRAPH_XF_LTCTXB_L4_DIF 0x19
+#define NV_IGRAPH_XF_LTCTXB_L4_SPC 0x1a
+#define NV_IGRAPH_XF_LTCTXB_L4_BAMB 0x1b
+#define NV_IGRAPH_XF_LTCTXB_L4_BDIF 0x1c
+#define NV_IGRAPH_XF_LTCTXB_L4_BSPC 0x1d
+#define NV_IGRAPH_XF_LTCTXB_L5_AMB 0x1e
+#define NV_IGRAPH_XF_LTCTXB_L5_DIF 0x1f
+#define NV_IGRAPH_XF_LTCTXB_L5_SPC 0x20
+#define NV_IGRAPH_XF_LTCTXB_L5_BAMB 0x21
+#define NV_IGRAPH_XF_LTCTXB_L5_BDIF 0x22
+#define NV_IGRAPH_XF_LTCTXB_L5_BSPC 0x23
+#define NV_IGRAPH_XF_LTCTXB_L6_AMB 0x24
+#define NV_IGRAPH_XF_LTCTXB_L6_DIF 0x25
+#define NV_IGRAPH_XF_LTCTXB_L6_SPC 0x26
+#define NV_IGRAPH_XF_LTCTXB_L6_BAMB 0x27
+#define NV_IGRAPH_XF_LTCTXB_L6_BDIF 0x28
+#define NV_IGRAPH_XF_LTCTXB_L6_BSPC 0x29
+#define NV_IGRAPH_XF_LTCTXB_L7_AMB 0x2a
+#define NV_IGRAPH_XF_LTCTXB_L7_DIF 0x2b
+#define NV_IGRAPH_XF_LTCTXB_L7_SPC 0x2c
+#define NV_IGRAPH_XF_LTCTXB_L7_BAMB 0x2d
+#define NV_IGRAPH_XF_LTCTXB_L7_BDIF 0x2e
+#define NV_IGRAPH_XF_LTCTXB_L7_BSPC 0x2f
+#define NV_IGRAPH_XF_LTCTXB_PT1 0x30
+#define NV_IGRAPH_XF_LTCTXB_ONE 0x31
+#define NV_IGRAPH_XF_LTCTXB_VPOFFSET 0x32
+
+#define NV_IGRAPH_XF_LTC1_ZERO1 0x00
+#define NV_IGRAPH_XF_LTC1_l0 0x01
+#define NV_IGRAPH_XF_LTC1_Bl0 0x02
+#define NV_IGRAPH_XF_LTC1_PP 0x03
+#define NV_IGRAPH_XF_LTC1_r0 0x04
+#define NV_IGRAPH_XF_LTC1_r1 0x05
+#define NV_IGRAPH_XF_LTC1_r2 0x06
+#define NV_IGRAPH_XF_LTC1_r3 0x07
+#define NV_IGRAPH_XF_LTC1_r4 0x08
+#define NV_IGRAPH_XF_LTC1_r5 0x09
+#define NV_IGRAPH_XF_LTC1_r6 0x0a
+#define NV_IGRAPH_XF_LTC1_r7 0x0b
+#define NV_IGRAPH_XF_LTC1_L0 0x0c
+#define NV_IGRAPH_XF_LTC1_L1 0x0d
+#define NV_IGRAPH_XF_LTC1_L2 0x0e
+#define NV_IGRAPH_XF_LTC1_L3 0x0f
+#define NV_IGRAPH_XF_LTC1_L4 0x10
+#define NV_IGRAPH_XF_LTC1_L5 0x11
+#define NV_IGRAPH_XF_LTC1_L6 0x12
+#define NV_IGRAPH_XF_LTC1_L7 0x13
+
+
+#define NV2A_VERTEX_ATTR_POSITION 0
+#define NV2A_VERTEX_ATTR_WEIGHT 1
+#define NV2A_VERTEX_ATTR_NORMAL 2
+#define NV2A_VERTEX_ATTR_DIFFUSE 3
+#define NV2A_VERTEX_ATTR_SPECULAR 4
+#define NV2A_VERTEX_ATTR_FOG 5
+#define NV2A_VERTEX_ATTR_POINT_SIZE 6
+#define NV2A_VERTEX_ATTR_BACK_DIFFUSE 7
+#define NV2A_VERTEX_ATTR_BACK_SPECULAR 8
+#define NV2A_VERTEX_ATTR_TEXTURE0 9
+#define NV2A_VERTEX_ATTR_TEXTURE1 10
+#define NV2A_VERTEX_ATTR_TEXTURE2 11
+#define NV2A_VERTEX_ATTR_TEXTURE3 12
+#define NV2A_VERTEX_ATTR_RESERVED1 13
+#define NV2A_VERTEX_ATTR_RESERVED2 14
+#define NV2A_VERTEX_ATTR_RESERVED3 15
+
+#define NV2A_CRYSTAL_FREQ 13500000
+#define NV2A_NUM_CHANNELS 32
+#define NV2A_NUM_SUBCHANNELS 8
+
+#define NV2A_MAX_BATCH_LENGTH 0x1FFFF
+#define NV2A_VERTEXSHADER_ATTRIBUTES 16
+#define NV2A_MAX_TEXTURES 4
+
+#define NV2A_MAX_TRANSFORM_PROGRAM_LENGTH 136
+#define NV2A_VERTEXSHADER_CONSTANTS 192
+#define NV2A_MAX_LIGHTS 8
+
+#define NV2A_LTCTXA_COUNT 26
+#define NV2A_LTCTXB_COUNT 52
+#define NV2A_LTC1_COUNT 20