xenoborg/alpha/source/xbox/smbus.h
blueshogun96@gmail.com e140504ee8
2012-01-05 00:09:50 +00:00

109 lines
5.1 KiB
C

#pragma once
struct smbus_t
{
// Ports
unsigned char status; // 0xC000
unsigned char control; // 0xC002
unsigned char address; // 0xC004
unsigned char data; // 0xC006
unsigned char command; // 0xC008
};
struct pic_t
{
unsigned char pic_version[3]; // 0x01 (r)
unsigned char pic_ver_string_counter; // 0x01 (w)
unsigned char reset_and_poweroff_ctrl; // 0x02 (w)
unsigned char tray_state_r; // 0x03 (r)
unsigned char av_pack_state; // 0x04 (r)
unsigned char power_fan_mode; // 0x05 (w)
unsigned char power_fan_speed; // 0x06 (w)
unsigned char led_mode; // 0x07 (w)
unsigned char led_flash_seq; // 0x08 (w)
unsigned char cpu_temperature; // 0x09 (r)
unsigned char board_temperature; // 0x0A (r)
unsigned char tray_eject; // 0x0C (w)
unsigned char unknown_scratch_register; // 0x0E (w?)
unsigned char scratch_register; // 0x0F (r)
unsigned char fan_speed; // 0x10 (r)
unsigned char irq_reason; // 0x11 (r)
unsigned char overheat; // 0x18 (r)
unsigned char reset_on_eject; // 0x19 (w)
unsigned char irq_enable; // 0x1A (r?/w)
unsigned char krnl_scratch_reg; // 0x1B (r/w)
};
// This struct is a slightly moddified version of the one found below:
// http://www.xbox-linux.org/docs/Xbox_Serial_EEPROM.html
#pragma pack( 1 )
struct eeprom_t
{
unsigned long HMAC_SHA1_Hash : 20; // 0x00 - 0x13 HMAC_SHA1 Hash
unsigned long Confounder : 8; // 0x14 - 0x1B RC4 Encrypted Confounder ??
unsigned long HDDKkey : 16; // 0x1C - 0x2B RC4 Encrypted HDD key
unsigned long XBERegion : 4; // 0x2C - 0x2F RC4 Encrypted Region code (0x01 North America, 0x02 Japan, 0x04 Europe)
unsigned long Checksum2 : 4; // 0x30 - 0x33 Checksum of next 44 bytes
unsigned long SerialNumber : 12; // 0x34 - 0x3F Xbox serial number
unsigned long MACAddress : 6; // 0x40 - 0x45 Ethernet MAC address
unsigned long UNKNOWN2 : 2; // 0x46 - 0x47 Unknown Padding ?
unsigned long OnlineKey : 16; // 0x48 - 0x57 Online Key ?
unsigned long VideoStandard : 4; // 0x58 - 0x5B 0x00800300 = PAL, 0x00400100 = NTSC, 0x00400200=NTSC_J
unsigned long UNKNOWN3 : 4; // 0x5C - 0x5F Unknown Padding ?
//Comes configured up to here from factory.. everything after this can be zero'd out...
//To reset XBOX to Factory settings, Make checksum3 0xFFFFFFFF and zero all data below (0x64-0xFF)
//Doing this will Reset XBOX and upon startup will get Language & Setup screen...
unsigned long Checksum3 : 4; // 0x60 - 0x63 other Checksum of next
unsigned long TimeZoneBias : 4; // 0x64 - 0x67 Zone Bias?
unsigned long TimeZoneStdName : 4; // 0x68 - 0x6B Standard timezone
unsigned long TimeZoneDltName : 4; // 0x5C - 0x6F Daylight timezone
unsigned long UNKNOWN4 : 8; // 0x70 - 0x77 Unknown Padding ?
unsigned long TimeZoneStdDate : 4; // 0x78 - 0x7B 10-05-00-02 (Month-Day-DayOfWeek-Hour)
unsigned long TimeZoneDltDate : 4; // 0x7C - 0x7F 04-01-00-02 (Month-Day-DayOfWeek-Hour)
unsigned long UNKNOWN5 : 8; // 0x80 - 0x87 Unknown Padding ?
unsigned long TimeZoneStdBias : 4; // 0x88 - 0x8B Standard Bias?
unsigned long TimeZoneDltBias : 4; // 0x8C - 0x8F Daylight Bias?
unsigned long LanguageID : 4; // 0x90 - 0x93 Language ID
unsigned long VideoFlags : 4; // 0x94 - 0x97 Video Settings - 0x96 b0==widescreen 0x96 b4 == letterbox
unsigned long AudioFlags : 4; // 0x98 - 0x9B Audio Settings
unsigned long ParentalControlGames : 4; // 0x9C - 0x9F 0=MAX rating
unsigned long ParentalControlPwd : 4; // 0xA0 - 0xA3 7=X, 8=Y, B=LTrigger, C=RTrigger
unsigned long ParentalControlMovies : 4; // 0xA4 - 0xA7 0=Max rating
unsigned long XBOXLiveIPAddress : 4; // 0xA8 - 0xAB XBOX Live IP Address..
unsigned long XBOXLiveDNS : 4; // 0xAC - 0xAF XBOX Live DNS Server..
unsigned long XBOXLiveGateWay : 4; // 0xB0 - 0xB3 XBOX Live Gateway Address..
unsigned long XBOXLiveSubNetMask : 4; // 0xB4 - 0xB7 XBOX Live Subnet Mask..
unsigned long OtherSettings : 4; // 0xA8 - 0xBB Other XBLive settings ?
unsigned long DVDPlaybackKitZone : 4; // 0xBC - 0xBF DVD Playback Kit Zone
unsigned __int64 UNKNOWN6 : 64; // 0xC0 - 0xFF Unknown Codes / Memory timing table?
};
#pragma pack()
// Read/Write port mapped I/O for SMBus devices
unsigned char xinpb( unsigned short Port );
unsigned short xinpw( unsigned short Port );
unsigned long xinpdw( unsigned short Port );
void xoutpb( unsigned short Port, unsigned char Data );
void xoutpw( unsigned short Port, unsigned short Data );
void xoutpdw( unsigned short Port, unsigned long Data );
void smbus_reset( void );
/* PIC (Programmable Interrupt Controller) functions */
void pic_reset( void );
unsigned char pic_read( unsigned char Command );
void pic_write( unsigned char Command, unsigned char Data );
void pic_irq( void );