Jump to content

Chameleon RC4 is out!


Poco
 Share

1,054 posts in this topic

Recommended Posts

OK, I imported missing fixes from pcEFI10.5 and also found a bug and fixed it in nvidia code

 

Here the experimental code for the GE fix:

GEfix.tar.gz

 

(Other users not affected by this bug, please don't use this fix yet, there is debug code displayed)

 

Please smith@@ and others affected, tell me if it works for you know ...

 

 

Hi rekur, i have try now, but nothing, the 9800gt is unknown, minimum resolution, 32 MB, don't qe/ci, the problem is the same ;)

 

i have try also with original dsdt, nothing like always. I have try again with pc efi and it works, it's really a strange problem

 

;)

 

I stay tuned;)

Link to comment
Share on other sites

Hi rekur, i have try now, but nothing, the 9800gt is unknown, minimum resolution, 32 MB, don't qe/ci, the problem is the same :)

 

i have try also with original dsdt, nothing like always. I have try again with pc efi and it works, it's really a strange problem)

Does this work with my old rek v2 patch on rc4 ?

This is important to know for me, thanks

Link to comment
Share on other sites

Done.

Have you tested the installer yet?

Also do you have any solution for the MBR. Linux users have a utility called ms-sys which writes a windows compatible MBR. I wish we had something like that too.

Hi Dr. Hurt / Rekursor

 

I have been working with r0m30 at the voodooproject's forums on a revised boot0 file which will run Chameleon from a non-active partition, allowing Windows7 to remain on the active partition with the result of Windows7 happily booting and sleeping when loaded through Chameleon. It works, though the changes need checking and verifying to make sure what has been done is safe/sensible for all setups etc.

 

If this sounds like something to help with your issue then I will point you to the link when the voodooproject's forum is back up from it's current maintenance session.

Link to comment
Share on other sites

 

 

Same problem rek;)

 

It is as if unable to load "the bios of the vga integrated in the boot", in fact if I force with an external bios, as I wrote, does not work the same :)

 

:)

 

Hi Dr. Hurt / Rekursor

 

I have been working with r0m30 at the voodooproject's forums on a revised boot0 file which will run Chameleon from a non-active partition, allowing Windows7 to remain on the active partition with the result of Windows7 happily booting and sleeping when loaded through Chameleon. It works, though the changes need checking and verifying to make sure what has been done is safe/sensible for all setups etc.

 

If this sounds like something to help with your issue then I will point you to the link when the voodooproject's forum is back up from it's current maintenance session.

 

Is it possible try this boot0 already now?;)

Link to comment
Share on other sites

Hi Dr. Hurt / Rekursor

 

I have been working with r0m30 at the voodooproject's forums on a revised boot0 file which will run Chameleon from a non-active partition, allowing Windows7 to remain on the active partition with the result of Windows7 happily booting and ...

If this sounds like something to help with your issue then I will point you to the link when the voodooproject's forum is back up from it's current maintenance session.

Yes please send us a patch, it comes at the good time, i.e before we issue an RC5 release, I'll apply it and test it asap so that we can figure out how good that works

Thanks ;)

 

 

Same problem rek;)

 

It is as if unable to load "the bios of the vga integrated in the boot", in fact if I force with an external bios, as I wrote, does not work the same :)

Now lets go further, please tell if you read any of those msgs:

printf("ERROR: nVidia ROM Patching Failed!\n");

printf("nVidia incorrect PCI ROM signature: 0x%x\n", rom_pci_header->signature);

or if you get any otehr msg please write it down, I have to understand what piece of code fails for you :)

Link to comment
Share on other sites

Yes please send us a patch, it comes at the good time, i.e before we issue an RC5 release, I'll apply it and test it asap so that we can figure out how good that works

Thanks :)

Okay, but like I said, it needs an expert eye to make sure this is a good thing and has no bad side-affects.

Link to the Post on VoodooProject's

I have attached a DIFF file for boot0 and it needs to be written in to the first 440 bytes of the MBR.

 

So I installed it using the following command:

sudo dd if=boot0 of=/dev/disk0 bs=440 count=1

 

It's something I tried earlier today which works now, and if deemed sensible to use it, I am sure it can be coded in a cleaner way.

Link to comment
Share on other sites

Okay, but like I said, it needs an expert eye to make sure this is a good thing and has no bad side-affects.

I have attached a DIFF file for boot0 and it needs to be written in to the first 440 bytes of the MBR.

 

So I installed it using the following command:

sudo dd if=boot0 of=/dev/disk0 bs=440 count=1

The code looks really ok as you just commented the part where it checks the partition is active so that it can do the trick,

but my concern would be about how to install that (bs=440) for it to work,

classical command like:

sudo fdisk -f boot0 -u -y /dev/rdisk0

would not work anymore ?

Link to comment
Share on other sites

but my concern would be about how to install that (bs=440) for it to work,

classical command like:

sudo fdisk -f boot0 -u -y /dev/rdisk0

would not work anymore ?

No, as fdisk will overwrite the complete MBR and destroy the code that Windows has there. Manually installing it won't be a problem as most people by now should be comfortable with that, but if not, I don't know if Dr. Hurt can automate that or not.

Link to comment
Share on other sites

No, as fdisk will overwrite the complete MBR and destroy the code that Windows has there. Manually installing it won't be a problem as most people by now should be comfortable with that, but if not, I don't know if Dr. Hurt can automate that or not.

 

Well, I read more the ASM source code and I am wondering why in the following

.Pass1:
;	cmp	 BYTE [si + part.bootid], kPartActive; In pass 1 we are walking on the standard path
;	jne	 .continue				; by trying to hop on the active partition.
;	xor		dh, dh			; Argument for loadBootSector to skip HFS+ partition
						; Signature check.
jmp	.tryToBoot

why dh is unset ?

It seems to me that dh should set to 1 (signature check) if we don't test that the partition is active,

we want to boot the first hfs+ partition that we find no ?

So instead of commenting out xor dh,dh

I would see:

mov dh,1 instead

 

(feels good to read some assembly code again, it's been a while :) )

 

EDIT: and I would add:

we should not comment pass2, because we should in pass 2 check for any active partition,

in other words i would suggest to swap pass1 and pass2

first we check any hfs+ part active or not,

second (not found) we check for any active partition.

Link to comment
Share on other sites

Well, I read more the ASM source code and I am wondering why in the following

.Pass1:
;	cmp	 BYTE [si + part.bootid], kPartActive; In pass 1 we are walking on the standard path
;	jne	 .continue			; by trying to hop on the active partition.
;	xor		dh, dh		; Argument for loadBootSector to skip HFS+ partition
					; Signature check.
jmp	.tryToBoot

why dh is unset ?

It seems to me that dh should set to 1 (signature check) if we don't test that the partition is active,

we want to boot the first hfs+ partition that we find no ?

So instead of commenting out xor dh,dh

I would see:

mov dh,1 instead

 

(feels good to read some assembly code again, it's been a while :) )

You're the guru Rekursor, Lol.

My knowledge of assembler is limited and I used the human readable comments already present in the code to guess my way to this. I mean as r0m30 said in the voodooprojects' post, that code was already there, I just commented out the first pass. If you can make sense of it, improve it and make it workable then I look forward to seeing the results. I'm just sorry I don't have the skills to help your further with this.

 

EDIT: and I would add:

we should not comment pass2, because we should in pass 2 check for any active partition,

in other words i would suggest to swap pass1 and pass2

first we check any hfs+ part active or not,

second (not found) we check for any active partition.

That makes sense, but we will still have to install the modified boot0 to the first 440 bytes of the MBR though.

I will test your recommendation on my system as it's already setup for this.

Link to comment
Share on other sites

IntelCPUPowerManagement loading but SpeedStep not work :( Patch in this thread (#147).

Offset 000284D1 - cpu model for 64 bit kernel (current 0x0F),

Offset 005E6817 - cpu model for 32 bit kernel (current 0x0F). Other CPU models you can grab from cpuid.h. May be need patch not only model type... i don't know.

 

No. I use prepatched kernel.

 

Thanks for the info tea.

 

 

18seven patch is currently integrated in prasys branch, I'll help to make it event more interesting, because we add some other useful shortcuts but basically it's 18seven patch ;)

 

Cool, glad to contribute.

Link to comment
Share on other sites

You're the guru Rekursor, Lol.

My knowledge of assembler is limited and I used the human readable comments already present in the code to guess my way to this. I mean as r0m30 said in the voodooprojects' post, that code was already there, I just commented out the first pass. If you can make sense of it, improve it and make it workable then I look forward to seeing the results. I'm just sorry I don't have the skills to help your further with this.

 

 

That makes sense, but we will still have to install the modified boot0 to the first 440 bytes of the MBR though.

I will test your recommendation on my system as it's already setup for this.

ok try this:

replace only the following and tell me if it works for you:

 

.Pass1:
cmp		BYTE [si + part.type], kPartTypeHFS	; In pass 2 we're going to find a HFS+ partition
jne	 .continue							; equipped with boot1h in its boot record
								; regardless if it's active or not.
mov		dh, 1								; Argument for loadBootSector to check HFS+ partition signature.

jmp	.tryToBoot

.Pass2:	
cmp	 BYTE [si + part.bootid], kPartActive; In pass 1 we are walking on the standard path
jne	 .continue							; by trying to hop on the active partition.
xor		dh, dh								; Argument for loadBootSector to skip HFS+ partition
											; Signature check.

DebugChar('*')

Link to comment
Share on other sites

Yes please send us a patch, it comes at the good time, i.e before we issue an RC5 release, I'll apply it and test it asap so that we can figure out how good that works

Thanks :)

 

 

 

Now lets go further, please tell if you read any of those msgs:

printf("ERROR: nVidia ROM Patching Failed!\n");

printf("nVidia incorrect PCI ROM signature: 0x%x\n", rom_pci_header->signature);

or if you get any otehr msg please write it down, I have to understand what piece of code fails for you :(

 

 

Rek, you think that the problem can be resolved? ;)

Link to comment
Share on other sites

ok try this:

replace only the following and tell me if it works for you:

 

.Pass1:
cmp		BYTE [si + part.type], kPartTypeHFS; In pass 2 we're going to find a HFS+ partition
jne	 .continue	; equipped with boot1h in its boot record
		; regardless if it's active or not.
mov		dh, 1		; Argument for loadBootSector to check HFS+ partition signature.

jmp	.tryToBoot

.Pass2:	
cmp	 BYTE [si + part.bootid], kPartActive; In pass 1 we are walking on the standard path
jne	 .continue	; by trying to hop on the active partition.
xor		dh, dh		; Argument for loadBootSector to skip HFS+ partition
					; Signature check.

DebugChar('*')

Already done exactly that and yes, it works great :(

Windows7 still boots and sleeps just fine.

The only question I have is what made Zef comment this out in the first place?

Link to comment
Share on other sites

Already done exactly that and yes, it works great :)

Windows7 still boots and sleeps just fine.

The only question I have is what made Zef comment this out in the first place?

Maybe because if you don't install this in the first 440 sectors, it would have no effect anyway ?

 

Rek, you think that the problem can be resolved? :(

I won't resign so easily ;)

but we need more info here's a version with nvidia debug info, please report what it says:

GEdebug.tar.gz

Don't forget to boot with Wait=y

Link to comment
Share on other sites

Maybe because if you don't install this in the first 440 sectors, it would have no effect anyway ?

 

 

I won't resign so easily :(

but we need more info here's a version with nvidia debug info, please report what it says:

GEdebug.tar.gz

Don't forget to boot with Wait=y

 

 

Ok:

 

LOADED HFS+file

...............

 

nvidia GeForce 9800 GT 512MB NV92 [10de:0614] :: PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)

PROM Address 0xfd300000 Sinature 0x55aa

 

Using PCI-Root-UID value:0

Found SMBIOS ....

Customing SystemID ....

Patched DMI table

Loaded HFS+ file:DSDT.aml

FADT changing PM profile from 0x01 to 0x03

FADT Restart fix applied

FADT changing PM profile from 0x01 to 0x03

FADT Restart fix applied

Patched ACPI version 2 DSDT

Starting Darwing x86_64

.........

 

;)

 

Edit: rek and if we inject directly in the booter this code (this is what i use):

 

Method (_DSM, 4, NotSerialized)
                   {
                       Store (Package (0x16)
                           {
                               "@0,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@0,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@0,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-A"
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@1,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@1,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-B"
                               }, 

                               "NVCAP", 
                               Buffer (0x18)
                               {
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04)
                               {
                                   0x00, 0x00, 0x00, 0x20
                               }, 

                               "device_type", 
                               Buffer (0x0D)
                               {
                                   "NVDA,GeForce"
                               }, 

                               "model", 
                               Buffer (0x1D)
                               {
                                   "Nvidia GeForce 9800 GT [G92]"
                               }, 

                               "rom-revision", 
                               Buffer (0x31)
                               {
                                   "Nvidia GeForce 9800 GT [G92] OpenGL Engine [EFI]"
                               }
                           }, Local0)
                       MCDP (Arg2, RefOf (Local0))
                       Return (Local0)
                   }

 

It's possible? Then click in com.apple with a type argument: Graphics Enabler --> 9800GT512 and vary from card to card..

 

I go to sleep, night;)

Link to comment
Share on other sites

Edit: rek and if we inject directly in the booter this code (this is what i use):

 

Method (_DSM, 4, NotSerialized)
                   {
                       Store (Package (0x16)
                           {
                               "@0,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@0,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@0,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-A"
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@1,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@1,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-B"
                               }, 

                               "NVCAP", 
                               Buffer (0x18)
                               {
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04)
                               {
                                   0x00, 0x00, 0x00, 0x20
                               }, 

                               "device_type", 
                               Buffer (0x0D)
                               {
                                   "NVDA,GeForce"
                               }, 

                               "model", 
                               Buffer (0x1D)
                               {
                                   "Nvidia GeForce 9800 GT [G92]"
                               }, 

                               "rom-revision", 
                               Buffer (0x31)
                               {
                                   "Nvidia GeForce 9800 GT [G92] OpenGL Engine [EFI]"
                               }
                           }, Local0)
                       MCDP (Arg2, RefOf (Local0))
                       Return (Local0)
                   }

 

It's possible? Then click in com.apple with a type argument: Graphics Enabler --> 9800GT512 and vary from card to card..

 

I go to sleep, night;)

 

Ok smith@@ here's another fix attemp for your GE mode, my only ambition is to make it works as good as in PCEFI10.5 no better, hopefully no worse:

GEfix2.tar.gz

Link to comment
Share on other sites

Nothing. I go really now to sleep;)

Oh My!

there was a problem with the make and the bin file was obsolete,

 

anyway here's the RC5pre7 that fixes many pbs with the nvidia GE and pciroot detection.

Hope it fixes your problem, but it should fix other problems for everyone on the nv GE.

 

Here:

 

 

Here:

RC5pre7.tar.gz

 

Gosh, I'm so tired too, worked my all week end on these bug fixes, time to make a (little) break :ninja:

Link to comment
Share on other sites

Most probably, yes.

The installer use this code for boot1h:

dd if="${resourcesPath}/boot/boot1h" of="$rdev" bs=512 count=2

 

i think that we need just to change it to:

dd if="${resourcesPath}/boot/boot0" of="$disk" bs=440 count=1

 

i'm tring to make the package for it but i don't have the boot0 file modded, can you post it?

Link to comment
Share on other sites

The installer use this code for boot1h:

dd if="${resourcesPath}/boot/boot1h" of="$rdev" bs=512 count=2

 

i think that we need just to change it to:

dd if="${resourcesPath}/boot/boot0" of="$disk" bs=440 count=1

 

i'm tring to make the package for it but i don't have the boot0 file modded, can you post it?

If you think it will work then great. I have posted the boot0 file that I am currently using to here on voodooproject's forum. Note: you need to be logged in to get it.

 

If anybody wants to try it before a revised proven installer has been released then make sure you only write it to the first 440 bytes of the MBR. It works for me and should work for everyone but if more people with Windows7 installed on a different partition of the same HDD can test it to see if it works for them then good.

Link to comment
Share on other sites

 Share

×
×
  • Create New...