home | list info | list archive | date index | thread index

Re: [OCLUG-Tech] Re: 1. One last Power on Question. (William Case)

Thanks Gordon;

Wow!  I am impressed.  Right to the point.

On Sat, 2007-09-08 at 14:44 -0400, Gordon Dey wrote:
> As I understand it, the legacy x86 processor can only indicate IO accesses or 
> MEMORY accesses. Of and by itself, it has no idea where, why, and how data goes 
> during the access, just that the access completes. So, the power-on default 
> programmed counter value loaded, is 0xffff00. Written as 16B page style: 
> ffff:0000. Manufacturers make every x86 compatible chip power-on reset to the 
> same location and in a known state.
> 
> But the 'PC' architecture usually has a special chip, often known as the "north 
> bridge" connected directly to the x86. "North" refers to how the north-up way 
> most x86 pictures are drawn. The north bridge catches the x86's access, and 
> then compares it's Address Registers for a matching address and type of access. 
> A match turns into a bus cycle: commands, addresses, chip-selects, Read/Write 
> strobes, whatever it takes, to complete the access. But at power-on reset time, 
> none of this is enabled.
> 
> Instead, the north bridge has a power-on default. One such default is a global 
> match on every memory access to a specific chip-select ("boot select"), with 
> defaulted access timing to match very slow a very simple memory part. The 
> selected part, usually ROM, ignores all but the least significant part of the 
> address that's presented to it, and responds with whatever was programmed into 
> that location, 0x3ff00 or something like it.
> 
> Why the leading '3'? In the PC world, often the ROM only uses the least 16 or 
> so address bits, and often they even ignore the very least two address bits. 
> Doing this, they always return 4 bytes (32b) per access, because the x86 cpu 
> usually wants data in 32b chunks. Sometimes the bytes are in separate 
> byte-lanes, sometimes aggregated into one big bus. But because of the upper 
> addresses are ignored, the x86 can always get the ROM to respond, and the '3' 
> in this example, is all of subset of the 0xffff00 that the ROM uses.
> 
> Why ROM? All it requires is a chip-select, output-enable and address signals 
> (and power) to produce data for the x86 to consume. Very simple. Almost every 
> other memory type requires more signals, like a read/write signal, probably 
> clocks, specific timeing, and some programming of the north bridge or more to 
> make it work. That's the work of a BIOS--to do that programming, find and turn 
> on all of the registers and other memory types.
> 
> Why is the first thing usually a JUMP of some kind? First of all, with no 
> writeable memory type configured yet, there is no place for the x86 to store 
> information about where it is and what it is doing. The only way to get to the 
> place where a code to configure memory, is to overwrite the program counter 
> with that place's address. A JUMP instruction does this. Secondly, the 
> FFFF:0000 address is only 256B from the end of memory. Too small a space to put 
> kind of initialization program like the BIOS. So it makes sense to JUMP to 
> someplace where there's space for more code.
> 
> _______________________________________________
> Linux mailing list
> Linux [ at ] lists [ dot ] oclug [ dot ] on [ dot ] ca
> http://oclug.on.ca/mailman/listinfo/linux
-- 
Regards Bill