Zitat von daniel_k im Beitrag #2150@Mov AX, 0xDEAD Apart from QwordConst which you guided me to add, there are only 2 that need to be added to original XP's ACPI.SYS 5512: CreateQwordField and ToInteger.
copy pointer CreateDwordField to CreateQwordField struct. Creating real 64 bit adressing will be more harder.
ZitatXP works just fine, but as soon as I change the DSDT to enable processing of ToInteger, it crashes.
Zitatafter i discovered "vista beta acpi.sys" anyone can add new opcode handlers to classic winxp acpi.sys, but only 32 bit integers betas is compatible with winxp. 1) copy bytes from existing acpi.sys 2) add relocs 3) create missing structs 4) add missing import or replace with internal impelemtation
that's how I made my acpi.sys but took the code from win7 x32 (converted back 64-int logic to 32-int)
If (LGreaterEqual (OSYS, 0x07D6)) { And (PDBM, 0xFFFFFFFFFFFFFFF9, PDBM) /* \_SB_.PCI0.XHC_.PDBM */ }
Instead of skipping the code, what do you think of changing the 64-bit value to a 32-bit one as the higher order part is ignored anyway in this operation?
I played little with length IO range of IOTR at H110 MB (starting adress is always 0xFF00): 0 - OK, device disapear in DevManager 1<->0xA0 - OK 0xA0-0xE0 - Not tested 0xE0-0xFF - Conflict
so hooking of BufferOp is possible, after movsd & movsb we have at EDI struct of bytes: 11 0D 0A 0A 47 01 00 00 00 00 01 FF 79 00
1 2 3 4 5 6 7 8 9 10 11 12 13
pseudo-code: sub edi, 0xe ; back edi to start of buffer cmpl [edi], 0x11 0D 0A 0A jnz nopatch cmpl [edi+4], 0x47 01 00 00 jnz nopatch cmpl [edi+8], 0x00 00 01 FF jnz nopatch cmpw [edi+c], 0x79 00 jnz nopatch patch: moveb [edi+b], 0x00 ; edi+b=length nopatch: jmp _back
im not sure about full bufer, maybe in edi will be only 0A 0A 47 01 00 00 00 00 01 FF 79 00
Zitat von daniel_k im Beitrag #2059@Mov AX, 0xDEAD This is the original untouched ACPI.SYS 5048.
I've checked adresses, you using "strange" disasm, it ignores Origin adress and virtual adresses of sections (wtf ?) Now I realized that first column is not adress, it is offset in file
Zitat von daniel_k im Beitrag #2033@Mov AX, 0xDEAD Interesting that the ACPI.SYS 5048 does an additional check in CreateByteField which leads to a BSOD. VISTA 5048
This is _ValidateArgTypes, not CreateByteField. I dont see this bytes at 15ED4 in 5048
1 2 3 4
15F07: 4A dec edx 15F08: 4A dec edx 15F09: 7567 jnz 000015F72 15F0B: 6683390F cmp w,[ecx],00F
at ip=15F0B EDX was decremented to 41+1+1+1+2+2=48h="H" so _ValidateArgTypes was called with 2nd arg = pointer to string with "H" char inside
at winxp_5512 exist C, I, O, A, B, D, .. but not "H" at vosta_5048 i see two calls with H "LoadTable" & "Unload" opcode, but we dont see this in dsdt, do double check about place of BSOD
Zitat von daniel_k im Beitrag #2023 Are there any utilities to edit x64 relocation table or we need to change it manually? Something like Relocation Section Editor which I use for 32-bit?
Zitat von daniel_k im Beitrag #2020@Mov AX, 0xDEAD, wouldn't it be possible to add a string check to Store function in ACPI.SYS so that during processing it would ignore ITA0 and don't do anything? This would solve the PCI bridge conflict.
if someone want to patch acpi.sys to zero resources of iotr welcome ) i prefer to investigate pci.sys or some else to find source of conflict
Zitat von daniel_k im Beitrag #2010@Mov AX, 0xDEAD 2) Sorry, don't understand. You mean pop stack back in the original function itself or in the code after the call?
in original HalConvertIdtToIrql, if it return with "ret 4" it's ms cdecl convection if "pop/add esp" somewhere after 3A129 it's stdcall
trying to decode what _crs return: 47 - Small resource item , 4=io port type, 7 - lengh 01 - 16-bit adressing 00 FF - Min posible adress 00 FF - Max posible adress 01 - Aligment is 1 byte FF - Numbers of adresses 79 - End Tag 41 - Checksum
Aida browser was wrong, device claimed 255 adresses
1) "e8 xx" is relative adressing, its OK. At adress HalConvertIdtToIrql is some like "jmp dword [_imp_HalConvertIdtToIrql]" ? 2) retn 4 - depends on original HalConvertIdtToIrql, if it pop stack back, then this OK
Zitat von daniel_k im Beitrag #2004@Mov AX, 0xDEAD, what does this mean (on XP)?
this mean device has no resources (_crs failed), but no way to know how it was failed as you can see in aml code, _crs return ResourceTemplate filled by "start" and "end" ranges
Zitat von diderius6 im Beitrag #1994 I tried to disable ACPI\PNP0C02\IOTRAPS in registry of XP and also in devicemanager (motherboard resources) but without success. May be, that can be done without modding DSDT
before patching dsdt i too tried to disable in devmanager with no sucess seems no way to disable acpi device, windows think that these devices are not PnP, if this device have _DIS method it maybe possible (imho)