diff -r -u nkpatcher10/readme.txt nkpatcher10-vga10/readme.txt --- nkpatcher10/readme.txt 2004-12-23 00:00:00.000000000 +0200 +++ nkpatcher10-vga10/readme.txt 2006-08-19 15:26:22.000000000 +0300 @@ -1,4 +1,4 @@ -Nkpatcher version 10 +Nkpatcher version 10-vga10 -------------------- Installation @@ -59,6 +59,29 @@ Changes ------- +From version 10 to version 10-vga10: + * Added force RGB video feature. This will patch kernel system call + AvSetDisplayMode to configure GPU for RGB signal. It will also patch + Conexant and Focus registers to configure video encoder to send + bi-level sync with correct colors. Xcalibur video encoder is not + supported. + Intended for connecting the Xbox to VGA monitor. Connect AV pack Y + output to monitor green input, Pr to monitor red input and Pb to + monitor blue input. The monitor must support sync on green. Special + sync separator circuit is required if the monitor does not support + sync on green signal. + + * Added feature to convert 480i video modes to 480p. This will patch + kernel system call AvSetDisplayMode so that it sets video mode 480p, + if mode 480i is requested. + Enhances graphics quality for applications that run in 480i video + mode only. Note that this feature will be active even if 480p video + mode is disabled in msdash. + + Video patching will be done only if HDTV AV pack is detected. + + Author: Krists Krilovs + From version 9 to version 10: * Added virtual EEPROM feature. This will patch kernel system calls HalReadSMBusValue and HalWriteSMBusValue such that EEPROM reads and writes diff -r -u nkpatcher10/src/config.inc nkpatcher10-vga10/src/config.inc --- nkpatcher10/src/config.inc 2004-12-23 00:00:00.000000000 +0200 +++ nkpatcher10-vga10/src/config.inc 2006-08-19 15:21:49.000000000 +0300 @@ -194,6 +194,24 @@ ; %define NORMAL_BOOT_ALWAYS +;;; VIDEO patches: +;;; +;;; VIDEO_FORCE_RGB = Patches kernel to output RGsB video signal (RGB with +;;; sync on green) if HDTV AV pack is detected. Intended for +;;; connecting the Xbox to VGA monitor. Connect AV pack Y output +;;; to monitor green input, Pr to monitor red input and Pb to +;;; monitor blue input. The monitor must support sync on green. +;;; +;;; VIDEO_FORCE_PROGRESSIVE = Patches kernel to convert 480i video modes to +;;; 480p if HDTV AV pack is detected. Note that this feature will +;;; be active even if 480p video mode is disabled in msdash. +;;; +;;; Not enabled by default. + +; %define VIDEO_FORCE_RGB +; %define VIDEO_FORCE_PROGRESSIVE + + ;;; Patches inside INIT section (boot unlocked HDs etc.) ;;; ;;; INIT_SEC_PATCHES = enable diff -r -u nkpatcher10/src/nkpatcher.asm nkpatcher10-vga10/src/nkpatcher.asm --- nkpatcher10/src/nkpatcher.asm 2004-12-23 00:00:00.000000000 +0200 +++ nkpatcher10-vga10/src/nkpatcher.asm 2006-08-19 14:57:52.000000000 +0300 @@ -1066,6 +1066,207 @@ ;;; -------------------------------------------------------------------------- +;;; VIDEO patching +;;; +;;; Author: Krists Krilovs +;;; -------------------------------------------------------------------------- + +%macro videorgb 2 +%ifdef VIDEO_FORCE_RGB + mov eax,%1 + mov ebp,%2 + call installvideorgb +%endif +%endmacro + + +%ifdef VIDEO_FORCE_RGB + +%define VIDEO_FORCE_RGB_SIZE (patchvideorgb.end-patchvideorgb) +%define VIDEO_CONEXANT_SIZE (conexantregs.end-conexantregs) +%define VIDEO_FOCUS_SIZE (focusregs.end-focusregs) + + + CODE_SECTION + +installvideorgb: + mov edi,[mvis_space] + mov edx,[memdiff] + mov esi,[kexports] + + mov ebx,[esi+edx+KERNEL_EXPORTS.HalBootSMCVideoMode] + cmp byte [ebx+edx+80010000h],01h + jnz .done ; not using hdtv cable + + mov ebx,[esi+edx+KERNEL_EXPORTS.XboxHardwareInfo] + mov bl,[ebx+edx+80010000h] + test bl,20h + mov esi,focusregs + mov ecx,VIDEO_FOCUS_SIZE / 4 + jnz .encoderregs + test bl,04h + mov esi,conexantregs + mov ecx,VIDEO_CONEXANT_SIZE / 4 + jnz .hook ; no support for xcalibur + +.encoderregs: + cmp byte [eax+edx],0D6h + jz .overwrite +.substitute: + ; substitute the table for kernels 4817, 5101, 5530, 5713 and 5838 + mov byte [eax+edx],0B8h + add edi,edx + mov [eax+edx+1],edi + rep movsd + sub edi,edx + jmp short .hook +.overwrite: + ; overwrite the table for kernels 3944 and 4044 + push edi + lea edi,[eax+edx] + rep movsd + pop edi + +.hook: + mov eax,ebp + mov byte [eax+edx],0E9h + push edi + setcalljmptarget edi, eax, edx + pop edi + + mov esi,patchvideorgb + mov ecx,VIDEO_FORCE_RGB_SIZE + add edi,edx + rep movsb + sub edi,edx + + mov [mvis_space],edi +.done: ret + + + + DATA_SECTION + +patchvideorgb: + xor eax,eax + mov [esi+680630h],eax ; change gpu output to rgb + mov [esi+6808C4h],eax + mov [esi+68084Ch],eax + pop esi + pop ebx + leave + retn 18h +.end: + +conexantregs: + db 0xD6, 0x2E, 0x32, 0x3C, 0x3E, 0x40, 0xC4, 0xC6, 0xCE, 0xA0, 0x9E, 0x9C, 0x6C ; register + db 0x0C, 0x00, 0x48, 0x80, 0x80, 0x80, 0x01, 0x98, 0xE1, 0x8C, 0x00, 0x00, 0x46 ; 480p + db 0x0C, 0x00, 0x48, 0x80, 0x80, 0x80, 0x01, 0x98, 0xE1, 0x21, 0x00, 0x00, 0x46 ; 720p + db 0x0C, 0x00, 0x48, 0x80, 0x80, 0x80, 0x01, 0x98, 0xE1, 0x21, 0x00, 0x00, 0x46 ; 1080i +.end + +focusregs: + db 0x0C, 0x0D, 0x0E, 0x0F, 0x0A, 0x0B, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xB2, 0xB3, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x0C, 0x0D, 0x0E, 0x0F, 0x0C, 0x0D ; register + db 0x01, 0x20, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x1A, 0x00, 0x0A, 0x0A, 0x3E, 0x08, 0x3F, 0x3F, 0x3B, 0x00, 0x1B, 0x03, 0x00, 0x40, 0xE4, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xB7, 0x00, 0xD0, 0x02, 0x23, 0x00, 0xE0, 0x01, 0x03, 0x20, 0x15, 0x04, 0x00, 0x20 ; 480p + db 0x01, 0x20, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x1A, 0x00, 0x03, 0x03, 0x3E, 0x18, 0x28, 0x46, 0xDC, 0x00, 0x2C, 0x06, 0x00, 0x40, 0xE4, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x72, 0x01, 0x00, 0x05, 0x18, 0x00, 0xD0, 0x02, 0x03, 0x20, 0x15, 0x04, 0x00, 0x20 ; 720p + db 0x01, 0x20, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x1A, 0x00, 0x03, 0x03, 0xBE, 0x18, 0x2C, 0x2C, 0x58, 0x00, 0x6C, 0x08, 0x01, 0x00, 0xE4, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x8A, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xE5, 0x00, 0x80, 0x07, 0x14, 0x00, 0x1C, 0x02, 0x03, 0x20, 0x15, 0x04, 0x00, 0x20 ; 1080i +.end: + + +%else ; !VIDEO_FORCE_RGB + +%define VIDEO_FORCE_RGB_SIZE 0 +%define VIDEO_CONEXANT_SIZE 0 +%define VIDEO_FOCUS_SIZE 0 + +%endif ; !VIDEO_FORCE_RGB + + + +%macro videoprogr 0 +%ifdef VIDEO_FORCE_PROGRESSIVE + call installvideoprogr +%endif +%endmacro + + +%ifdef VIDEO_FORCE_PROGRESSIVE + +%define VIDEO_FORCE_PROGRESSIVE_SIZE (patchvideoprogr.end-patchvideoprogr) + + + CODE_SECTION + +installvideoprogr: + mov edi,[mvis_space] + mov edx,[memdiff] + mov ebx,[kexports] + + mov eax,[ebx+edx+KERNEL_EXPORTS.HalBootSMCVideoMode] + cmp byte [eax+edx+80010000h],01h + jnz .done ; not using hdtv cable + + mov eax,[ebx+edx+KERNEL_EXPORTS.AvSetDisplayMode] + add eax,80010000h + + mov byte [eax+edx],0E9h + push edi + setcalljmptarget edi, eax, edx + pop edi + + add eax,5 + mov cl,[eax+edx] ; frame size + mov [patchvideoprogr.frame+2],cl + mov byte [eax+edx],90h ; nop + setcalljmptarget eax, patchvideoprogr, patchvideoprogr.var_jback, edi + + mov esi,patchvideoprogr + mov ecx,VIDEO_FORCE_PROGRESSIVE_SIZE + add edi,edx + rep movsb + sub edi,edx + + mov [mvis_space],edi +.done: ret + + + + DATA_SECTION + +patchvideoprogr: + push ebp + mov ebp,esp + push eax + mov eax,[ebp+16] + or eax,eax + js .cont ; hdtv mode + jz .640 ; default mode (?) + test ah,01h + mov eax,88080801h ; 720x480p + jz .chng +.640: mov eax,88070701h ; 640x480p +.chng: mov [ebp+16],eax +.cont: pop eax +.frame: sub esp,1Ch + VJMP jback +.end: + + +%else ; !VIDEO_FORCE_PROGRESSIVE + +%define VIDEO_FORCE_PROGRESSIVE_SIZE 0 + +%endif ; !VIDEO_FORCE_PROGRESSIVE + + +;;; -------------------------------------------------------------------------- +;;; VIDEO end +;;; -------------------------------------------------------------------------- + + + + +;;; -------------------------------------------------------------------------- ;;; EvoX M7 leftover patches ;;; -------------------------------------------------------------------------- @@ -1240,13 +1441,13 @@ %define USEDSPACE_SIGN_5713 USEDSPACE_SIGN_USUAL %define USEDSPACE_SIGN_5838 USEDSPACE_SIGN_5713 -%define USEDSPACE_MVIS_USUAL (XBL_BLOCK_SIZE) +%define USEDSPACE_MVIS_USUAL (XBL_BLOCK_SIZE + VIDEO_FORCE_RGB_SIZE + VIDEO_FORCE_PROGRESSIVE_SIZE) %define USEDSPACE_MVIS_3944 USEDSPACE_MVIS_USUAL %define USEDSPACE_MVIS_4034 USEDSPACE_MVIS_USUAL -%define USEDSPACE_MVIS_4817 USEDSPACE_MVIS_USUAL -%define USEDSPACE_MVIS_5101 USEDSPACE_MVIS_USUAL -%define USEDSPACE_MVIS_5530 USEDSPACE_MVIS_USUAL -%define USEDSPACE_MVIS_5713 USEDSPACE_MVIS_USUAL +%define USEDSPACE_MVIS_4817 (USEDSPACE_MVIS_USUAL + VIDEO_FOCUS_SIZE) +%define USEDSPACE_MVIS_5101 (USEDSPACE_MVIS_USUAL + VIDEO_FOCUS_SIZE) +%define USEDSPACE_MVIS_5530 (USEDSPACE_MVIS_USUAL + VIDEO_FOCUS_SIZE) +%define USEDSPACE_MVIS_5713 (USEDSPACE_MVIS_USUAL + VIDEO_FOCUS_SIZE) %define USEDSPACE_MVIS_5838 USEDSPACE_MVIS_5713 %define USEDSPACE_EXPD_USUAL (DISK_IMAGE_PATCH_SIZE \ @@ -1518,6 +1719,8 @@ lba48 80025985h,80025A5Bh,800259D1h,8003BFF8h, \ 80025605h,8002564Eh,8002547Bh,800254AFh,80025837h,80025892h virteeprom 8003BC00h,80016B91h + videorgb 8001364Ch,8003118Ah + videoprogr patcherfinish @@ -1536,6 +1739,8 @@ lba48 800259A5h,80025A7Bh,800259F1h,8003C0B8h, \ 80025625h,8002566Eh,8002549Bh,800254CFh,80025857h,800258B2h virteeprom 8003BCC0h,80016B82h + videorgb 80013654h,800317A1h + videoprogr patcherfinish @@ -1554,6 +1759,8 @@ lba48 800246D5h,800247ABh,80024721h,8003B338h, \ 80024355h,8002439Eh,800241CBh,800241FFh,80024587h,800245E2h virteeprom 8003AF40h,80015842h + videorgb 8003064Eh,80030996h + videoprogr patcherfinish @@ -1572,6 +1779,8 @@ lba48 800246E5h,800247BBh,80024731h,8003B438h, \ 80024365h,800243AEh,800241DBh,8002420Fh,80024597h,800245F2h virteeprom 8003B040h,80015852h + videorgb 8003074Dh,80030A95h + videoprogr patcherfinish @@ -1590,6 +1799,8 @@ lba48 800248B1h,80024987h,800248FDh,8003C2D0h, \ 80024534h,8002457Dh,800243AAh,800243DEh,80024766h,800247C1h virteeprom 8003BEC0h,800159D2h + videorgb 800311D2h,800315B2h + videoprogr patcherfinish @@ -1610,4 +1821,6 @@ lba48 800248B1h,80024987h,800248FDh,8003C2F0h, \ 80024534h,8002457Dh,800243AAh,800243DEh,80024766h,800247C1h virteeprom 8003BEE0h,800159D2h + videorgb 800311ECh,800315CCh + videoprogr patcherfinish