-
I know we can use MS dash to change HD settings. But why didn't configMagic or any other eeprom editing tool implement the necessary logic to edit the eeprom's video settings?
This is taken from ConfigMagic's code:
CODE
BYTE VideoFlags[4]; // 0x94 - 0x97 Video Settings
I also observed by changing MS dash settings and saving different copies of my eeprom through the changes that at offset 0x96, the value will change as I changed 480p,720p,1080i on and off. I also confirmed through xbox linux: http://www.xbox-linu...x_Serial_EEPROM that the offset 0x96 is correct. Anyway with widescreen, 720p, 480p and 1080i all turned on, the value is 0xF.
I don't have a modchip as backup so I can't actually hexedit the eeprom file to test my theory, anyway the checksum needs to be recalculated so you can't just hexedit and expect it to work. The configmagic code should be sufficient to extend the idea and implement it.
Will anybody take up the idea?
-
Why go through all the hassle when its so simple to buy the cables and change the settings on the MS dash?
Thats like wiping your butt with your hand, when the TP is in front of you.
-
The same reason why a homebrew dash like unleashX includes functions that msdash already have - like gamesave manager, audio manager, allow changes to network settings etc
-
I would think those thing were put into homebrew dashboards to make them more complete. to benefit the average user. Things like gamesave manager or network changes complete the dash for all people, cause all people use those.....All people do not use Hi-Def...therefore no need to add that to homebrew dashboards, when you can return to the MS dash to adjust that one setting.
It seems to me alot of work goes into writing this stuff, so why add things that are not used by most people.....seeing as how most of this was being put together waaaaaayyy before the HD craze....no need to have this on homebrew dash. Its a matter of taste now.....if someone wants to take the time to do the editing themselves, hooray.....but no real need for this to be implimented in.
-
I have no idea if this actually works but here's the code:
ConfigMagicApp.cpp
CODE
void ConfigMagicApp::SectionHandler()
{
switch(XConfSections)
{
case(STARTUP_SCREEN):
StartupScreen();
break;
case(WARNING_SCREEN):
WarningScreen();
break;
case(LOAD_XBOX_EEPROM_SCREEN):
Load_XBOX_EEPROM_Screen();
break;
case(WRITE_XBOX_EEPROM_SCREEN):
Write_XBOX_EEPROM_Screen();
break;
case(LOAD_BIN_EEPROM_SCREEN):
Load_BIN_EEPROM_Screen();
break;
case(LOAD_CFG_EEPROM_SCREEN):
Load_CFG_EEPROM_Screen();
break;
case(EDIT_EEPROM_SCREEN):
Edit_EEPROM_Screen();
break;
case(CREATE_BACKUP_SCREEN):
Create_Backup_Files_Screen();
break;
case(LOCK_HDD_SCREEN):
Lock_HDD_Screen();
break;
case(UNLOCK_HDD_SCREEN):
Unlock_HDD_Screen();
break;
case(XBOX_CONFIG_SCREEN):
XBOXConfigScreen();
break;
case (PATCH_HD):
PatchHD();
break;
case(EXIT_SCREEN):
ExitScreen();
break;
}
}
void ConfigMagicApp::PatchHD()
{
m_pXKEEPROM->PatchHD();
WaitForInput = FALSE;
}
void ConfigMagicApp::LoadMainMenuItems()
{
m_pMainMenu->AddMenuItem("A_LOADX", "Load XBOX EEPROM");
m_pMainMenu->AddMenuItem("B_LOADB", "Load EEPROM from .BIN File");
m_pMainMenu->AddMenuItem("C_LOADC", "Build EEPROM from .CFG File");
m_pMainMenu->AddMenuItem("D_EDIT", "On-The-Fly Edit EEPROM");
m_pMainMenu->AddMenuItem("E_UNLOCKHDD", "Unlock HDD");
m_pMainMenu->AddMenuItem("F_LOCKHDD", "Lock HDD");
m_pMainMenu->AddMenuItem("G_BACKUP", "Create Backup Files");
m_pMainMenu->AddMenuItem("H_WRITEX", "Update XBOX EEPROM");
m_pMainMenu->AddMenuItem("I_PATCH", "Patch HD settings");
m_pMainMenu->AddMenuItem("J_EXIT", "EXIT ConfigMagic");
m_pMainMenu->SetSelectedMenuItem("J_EXIT");
}
void ConfigMagicApp::ProcessMenuSelect(LPCSTR MenuItemSelected)
{
//Process the Menu Select Action..
if ( _stricmp(MenuItemSelected, "A_LOADX") == 0)
{
XConfSections = LOAD_XBOX_EEPROM_SCREEN;
WaitForInput = FALSE;
}
if ( _stricmp(MenuItemSelected, "B_LOADB") == 0)
{
XConfSections = LOAD_BIN_EEPROM_SCREEN;
WaitForInput = FALSE;
}
if (_stricmp(MenuItemSelected, "C_LOADC") == 0)
{
XConfSections = LOAD_CFG_EEPROM_SCREEN;
WaitForInput = FALSE;
}
if (_stricmp(MenuItemSelected, "D_EDIT") == 0)
{
XConfSections = EDIT_EEPROM_SCREEN;
WaitForInput = FALSE;
}
if ( _stricmp(MenuItemSelected, "E_UNLOCKHDD") == 0)
{
XConfSections = UNLOCK_HDD_SCREEN;
WaitForInput = FALSE;
}
if (_stricmp(MenuItemSelected, "F_LOCKHDD") == 0)
{
XConfSections = LOCK_HDD_SCREEN;
WaitForInput = FALSE;
}
if ( _stricmp(MenuItemSelected, "G_BACKUP") == 0)
{
XConfSections = CREATE_BACKUP_SCREEN;
WaitForInput = FALSE;
}
if ( _stricmp(MenuItemSelected, "H_WRITEX") == 0)
{
XConfSections = WRITE_XBOX_EEPROM_SCREEN;
WaitForInput = FALSE;
}
if ( _stricmp(MenuItemSelected, "I_PATCH") == 0)
{
XConfSections = PATCH_HD;
WaitForInput = FALSE;
}
if (_stricmp(MenuItemSelected, "J_EXIT") == 0)
{
XConfSections = EXIT_SCREEN;
WaitForInput = FALSE;
}
}
and in XKEEPROM.cpp
CODE
void XKEEPROM::PatchHD(void)
{
m_EEPROMData.VideoFlags[2] = 0xF;
CalculateChecksum3();
}
The 2 headers XKEEPROM.h and ConfigMagicApp.cpp will need the function headers added for PatchHD.
Actually the actual line of code is only 1 line but the GUI code takes more lines.
-
QUOTE(FourTwentySmiles @ May 25 2008, 01:49 AM)

Why go through all the hassle when its so simple to buy the cables and change the settings on the MS dash?
Thats like wiping your butt with your hand, when the TP is in front of you.

Ummmmm, this is a modding community. I think half the stuff we do most people would say "Why would you do that?" Like, why would you put Linux on an xbox when you have a computer sitting right there? Or why would you put a flashing light on your controllers when they already sell light up controllers, or why would you install a 12V fan when your current xbox works just fine! We do it b/c we want to see if we can, and because it's fun.
I think Idotsfan question is a good one and I personally would like to see XBMC implement it so that I do not have to reset my xbox in order to change the settings.
Keep up the good work Idotsfan and let us know how ur modding turns out!
-
I think with the trend of the times and the way the xbox has lost its luster it needs the extra options to make it more presentable compared to the next generation of consoles.Would you have a 360 or a ps3 and not take advantage of the extra ability to have more options that made your console more user friendly and gave you more choice?
Good work I think this is a good idea and I am all for anything extra that does not compromise what features we already have unless it upgrades it and if it did compromise any kind of already available option just title the app by a little different name or special features and point out the changes and effects from other versions.What would be wrong with this?
Would it be possible to implement this and just build in the option to switch between the different settings to give people like FourTwentySmiles what they are looking for out of there system at the same time?
-
QUOTE(obcd @ May 27 2008, 05:36 PM)

I fully agree. There is no need to discourage people who are trying to make things better.
Just a few thoughts:
The xbox has to be set to NTSC before you can select the HD settings. So, a program that has the options will need to check that as well.
There are a couple of signals pulled to GND in the AV pack connector to tell the xbox what kind of AV cable is connected. Those lines are read by the PIC microcontroller. I think the M$dash checks those as well before it allows to change the mode.
regards, keep the good work going...
Thanks for the encouragement.
1. Checking NTSC should be trivial. It's already in the eeprom.
2. For the AV cable, I used Nkpatcher 11_U04 code and Xbox Linux:
http://www.xbox-linu...MBus_Controller
to figure out this.
Nkpatcher tray state code:
CODE
lea eax,[tray_data1]; get tray state
push eax
push byte 0
push byte 3
push byte 20h
call dword [HalReadSMBusValue]
And Xbox Linux, http://www.xbox-linu...PIC#The_AV_Pack
the A/V pack can be read with command 0x04 (as opposed to tray state 0x03) at address 0x20 like tray state since both values come from the PIC.
So the code will look like this:
CODE
lea eax,[avpack_data1]; get AV pack status
push eax
push byte 0
push byte 4
push byte 20h
call dword [HalReadSMBusValue]
Values are
CODE
0x00 SCART
0x01 HDTV
0x02 VGA
0x03 RFU
0x04 S-Video
0x05 undefined
0x06 standard
0x07 missing/disconnected
I would like to translate this to C++ code since the earlier code chunks use ConfigMagic's code base. Using this thread as my scratchpad to record down all these before I forget.
-
The C++ code for the AVPACK first, the GUI code will come another time.
XKUtils.h
CODE
//Commands that can be sent to the PIC
enum PIC16L_CMD
{
PIC16L_CMD_POWER = 0x02,
PIC16L_CMD_AVPACK = 0x04,
PIC16L_CMD_LED_MODE = 0x07,
PIC16L_CMD_LED_REGISTER = 0x08,
PIC16L_CMD_EJECT = 0x0C,
PIC16L_CMD_INTERRUPT_REASON = 0x11,
PIC16L_CMD_RESET_ON_EJECT = 0x19,
PIC16L_CMD_SCRATCH_REGISTER = 0x1B
};
enum AVPACK
{
SCART = 0x00,
HDTV = 0x01,
VGA = 0x02,
RFU = 0x03,
SVideo = 0x04,
Standard = 0x06,
Disconnected = 0x07
};
XKUtils.cpp
CODE
void XKUtils::ReadAVPACKFromXBOX(LPBYTE AVPACKDATA)
{
OUTPUT_DEBUG_STRING( "XKUtils: Reading AVPACK from XBOX...\n" );
HalReadSMBusValue(SMBDEV_PIC16L,PIC16L_CMD_AVPACK , 0, AVPACKDATA);
Sleep(1);
}
-
http://xbmc.svn.sour...amp;view=markup
XBMC already has XKEEPROM.h and XKEEPROM.cpp so patches against these for HD settings should in theory work.
I need to figure out the GUI part as well..
-
Weird...the XBMC HD code is already there!
http://xbmc.svn.sour...amp;view=markup
http://xbmc.svn.sour...ew=log#rev13039
In revision 7929!
http://xbmc.svn.sour...p;revision=7929
-
Any ideas what does this do, especially line 387?
CODE
373 void XBVideoConfig::Save()
374 {
375 if (!NeedsSave()) return;
376 #ifdef HAS_XBOX_D3D
377 // update the EEPROM settings
378 DWORD type = REG_DWORD;
379 DWORD eepVideoFlags, size;
380
381 // Video flags do not exactly match the flags variable in the EEPROM
382 // To account for this, we get the actual value straight from the EEPROM (or shadow),
383 // and shift the flags to their proper location in the EEPROM variable.
384
385 ExQueryNonVolatileSetting(XC_VIDEO_FLAGS, &type, (PULONG)&eepVideoFlags, 4, &size);
386
387 eepVideoFlags |= ((m_dwVideoFlags & 0x5F) << 16);
388
389 ExSaveNonVolatileSetting(XC_VIDEO_FLAGS, &type, (PULONG)&eepVideoFlags, 4);
390
391 // check that we updated correctly
392 if (m_dwVideoFlags != XGetVideoFlags())
393 {
394 CLog::Log(LOGNOTICE, "Failed to save video config!");
395 }
396 #endif
397 }
Where is the log file of XBMC kept?
-
In the same folder as the XBE. It's called "xbmc.log", and whenever XBMC starts it renames the last log to "xbmc.old.log" before creating the next one.
Note that lots of details don't make it into the log unless you start in debug mode (by holding X + Y as XBMC starts up).
As I understood it, XBMC allows users to switch display modes to HD, but ONLY if that has already been done via the MS Dash. Without the gear to try for myself, I wouldn't know for sure, but I've never seen this contradicted before.
-
QUOTE(Bomb Bloke @ Jun 5 2008, 06:08 PM)

As I understood it, XBMC allows users to switch display modes to HD, but ONLY if that has already been done via the MS Dash. Without the gear to try for myself, I wouldn't know for sure, but I've never seen this contradicted before.
I've also disabled HD settings in msdash then turned it on from XBMC in my testing. Unless my understanding of the XBMC code is flawed, the use of the ExQueryNonVolatileSetting method is at a higher level than the eeprom call through HalWriteSMBusValue and hence no need to re-calculate eeprom checksum and hence it should work as described - kreet from the XBMC forum really did a great job there.