loopie69 wrote:So when I power on the system, cpu is gonna execute at certain memory location. So the bios program(which is a collection of instructions specific to the processors["move ax, cx;" etc kind of stuff]) must be loaded from that specific memory location? In that case, something must place BIOS program to the system memory on specific location, on startup; right am I?
Yes, but since the CPU doesn't have "direct" access to system memory, the motherboard can simply "redirect" that memory address (area) to the BIOS ROM instead of system RAM.
I mean both AMD processor and an intel one is x86-64 family, so for all of them this address is same or it varies?
I'm 99% sure that all x86 processors start with the same address, but even if they don't, it doesn't matter, because all of this happens way before the Operating System is loaded up. You can just assume that the system will boot up properly, and your boot loader will "magically" end up being loaded to either 0000:7c00, or 07c0:0000. (Both of these addresses point to the same place, but apparently the BIOS gets to choose which address format to use. The boot loader needs to handle both situations.)
I'm also 99% sure that ARM processors (and other processors) use completely different startup addresses. For instance, I know that the Raspberry Pi actually has a separate processor (other than the CPU) that is responsible for setting up the system, and then "enabling" the main CPU when it's done. But this is another situation where you are not allowed to modify the startup program, so in reality, as far as the OS is concerned, you can ignore all of this "startup" logic.
So I must contact/collaborate with AMD/intel for how CPU will interact with my chipsets? Then also I have to do this same job for memory module(system) manufacturer such as twinmos to make those memory works with my motherboard? Same applies to video card manufacturer such as nvidia? Or there is a universal API like thing which standardize things so that I dont have to work with specific company to support them? The connection between motherboard and all other components, is it open to learn? If it is, then is there any docs or sites or books where I can extract those knowledge?
If you were a motherboard manufacturer, then yes. Although a lot of components are standardized, so it's not quite as bad as you would think.
However, over the years, in order to improve performance, more and more of these motherboard components have actually been moved off of the motherboard and put inside the CPU chip, itself. This does improve performance, but it requires that the motherboard manufacturers and the CPU manufacturers work very closely in order to make these changes work, over time.
Luckily, all of this is fairly transparent to the Operating System, in order to maintain backward compatibility. (You can still run MS-DOS 5.0 on your brand new laptop.) So in most cases, you can ignore these hardware implementation changes as well.
The connection between motherboard and all other components, is it open to learn? If it is, then is there any docs or sites or books where I can extract those knowledge?
That's more of a hardware question than an OSDev question. I'm sure there are sites out there devoted to PC hardware design, though.