From: Terence on
That's Intel. That's because the Intel EPROM boot code is switched in
first, before being switched out again.
There was a time before EPROMS.

I used Nixie tubes and double triodes before there was even ferrite
core memory.
I used to walk into a Mercury Star holding boxes of replacement valves
("tubes") before a run in the fifties.

I am a long way pre-Intel, worked on building an early UK computer in
1952-53, worked for IBM UK at Hursley and La Goude Labs 1961-64, and
had my own hand-built computer using discrete chips, before the
Lancaster TV monitor hack.
I also know some control cpu chips quite well, such as used in a Fax
machine, because I rewrote the on-board code.
I'm the "UK Hacker" of the book "The Hackers"; three actually
mentioned by name were Bill and the two Steves..
From: H. Peter Anvin on
Phil Carmody wrote:
>>
>> Some processors, e.g. the Zilog Z80, *do* start at address 0, but that
>> was a choice the designer of that particular architecture made.
>
> Absolutely, and some processors start by jumping to the address read
> from location 0. There must be other behaviours out there too.
>

Some CPUs boot by sucking in a chunk of data into its caches (the
address of which is determined in any of a number of ways) and start up
as if the cache was local RAM. This often means the load address and
the execution address are totally different.

-hpa
From: Terence on
CPU chips always reset to start at memory address 0000.
This is the no-power memory pointer contents.
This is what happens on power-loss.

The computer board electronic design can manipulate where memory
(actual chips) are physically mapped on start-up by controlling the
memory address lines. So a read-only memory chip (sometimes re-
writablea0 with a boot program pre-loaded, is usually what the cpu
address pointer address lines are pointing to initially; then a final
signal turns off the special connection (inhibits one or more upper
memory address lines), and allows processing to continue from
writeable memory.

This is why there are conflicts of opinion expressed here.
From: Bill Leary on
"Wolfgang Kern" <nowhere(a)never.at> wrote in message
news:fk6our$l8p$1(a)newsreader2.utanet.at...
> Bill Leary answered:
> ((..omitting much of your response, we're largely in agreement so I have
> no reply..))

>> I *DID* see the ROM repeated at the top of memory DURING reset, but on
>> the PC machines, it disappeared when the main-board was released from
>> reset. I guess I'd assumed that was normal, for a PC, but now you've
>> got me wondering.
>
> What you see 'during reset' will never reach the CPU ;)

Of course. My point was that it appeared that the BIOS was echo'd to the
top of the address space until the hardware came out of reset, at which
point the echo disappeared.

> The interesting point would be after the raising edge of the RESET-line,
> IOW: what are the contents of AD0..32(..52) when the CPU becomes
> active ?

I don't recall ever noticing that, and I no longer have the means to look.

My background at that time for system programming had been PCs, so I
expected the BIOS to be at the top of the first meg. On this machine, a
non-PC but with some PC compatibility, it was there, but when I set the ICE
trap at 0x000FFFF0 the machine just booted right up. I think this was an
80386, maybe a 80486. Anyway, I looked up the reset state in the book
(which I still have) and under 10.2.3 it says "After RESET, address lines
A31-20 are automatically asserted for instruction fetches. This fact,
together with the initial values of CS:IP, causes instruction execution to
begin at physical address FFFFFFF0H." I set the ICE for that, and got a
trap.

This piqued my curiosity, so I put the ICE on the PC I was using for
development and watched what happened. With RESET held active, the BIOS
appeared at the expected location at the end of 1M (128K of it, as I recall)
and again at the end of the overall memory space. As soon as RESET was
released, the one at the end of memory disappeared.

> btw: x86 CPUs idle for a few hundred cycles after RESET is released.

I believe you, and won't bother to look it up. I may even have known it
then, because I remember there was some setting I had to make in the ICE so
it would handle trapping the first instruction after a reset correctly. But
it slowed the instruction stepping down something awful, so you'd usually
turn it on, do the reset, then stop the thing and turn it off again. Or
you'd set the trap for the second instruction after reset.

> Where could you connect your ICE ?

This has been an awfully long time now, but as I recall, you pulled the CPU,
put the "head" in it's place, and plugged the CPU into the head. Then there
was a smaller cable that went to somewhere else on the target. If memory
serves it was to drive reset. There was some logic on the "head," then a
cable (a couple of 50 conductor ribbon cables) went to a box about three or
four feet away then that connected to a PC via a parallel port.

One thing I was always surprised about was that I could see memory with the
machine in reset. From what I was reading about the chipset, especially the
memory controller, I'd expected that I wouldn't be able to see anything
until I let the chipset out of reset. But I could read memory. ROMS
anyway, RAM returned all ones.

> my old workstation got a CPU-socket-link-cable.

Sounds like that might be what I was using. This was back in the 386/486
days. All of the newer ones I've used connected via JTAG.

> Or are you talking about a BUS-scanner connected to a PCI-slot ?

I'm not aware of having used anything like a BUS scanner. I know it didn't
connect to a PCI slot.

- Bill

From: H. Peter Anvin on
Bill Leary wrote:
>
> I don't recall ever noticing that, and I no longer have the means to look.
>
> My background at that time for system programming had been PCs, so I
> expected the BIOS to be at the top of the first meg. On this machine, a
> non-PC but with some PC compatibility, it was there, but when I set the
> ICE trap at 0x000FFFF0 the machine just booted right up. I think this
> was an 80386, maybe a 80486. Anyway, I looked up the reset state in the
> book (which I still have) and under 10.2.3 it says "After RESET, address
> lines A31-20 are automatically asserted for instruction fetches. This
> fact, together with the initial values of CS:IP, causes instruction
> execution to begin at physical address FFFFFFF0H." I set the ICE for
> that, and got a trap.
>
> This piqued my curiosity, so I put the ICE on the PC I was using for
> development and watched what happened. With RESET held active, the BIOS
> appeared at the expected location at the end of 1M (128K of it, as I
> recall) and again at the end of the overall memory space. As soon as
> RESET was released, the one at the end of memory disappeared.
>

It's actually rather simple: on RESET, CS.base = 0xffff0000 even though
CS = 0xf000; however, the CPU is still in real mode. When the first CS
load (i.e. far jump) happens, CS.base <- CS << 4, which drops the high bits.

If the firmware doesn't want to run in low memory, it can do a near jump
which doesn't reload CS, and enter protected mode directly(*).

-hpa


(*) Note that the LGDT instruction requires a pointer in memory. Since
all the segments have limit = 0xffff at this stage, CS is the only
segment that can access the ROM area in high memory. Thus, the LGDT
instruction will need a CS override.