2

Possible duplicate: Software initialization code at 0xFFFFFFF0H

When the system boots up (Intel), reset vector is at address 0xFFFFFFF0 (16 bytes less than 4G) (as mentioned in above link). That address contains FAR JUMP to where the BIOS is. I read the answer, comments and referenced link, also did some searching, but still cannot understand how 32-bit address can be map to 16-bit (Real Mode)?

My confusion is that in this link: http://www.starman.vertcomp.com/asm/bios/index.html, author mentioned that address F000:FFF0 (16 bytes less than 1MB) contains JUMP to where the BIOS is.

  1. How 0xFFFFFFF0 gets mapped to F000:FFF0? Does it even gets mapped?
  2. If the computer doesn't have physical 4G of memory, let say it has only 1G, where is the 0xFFFFFFF0 address?

Thanks in advance for help.

Community
  • 1
  • 1
Orion
  • 544
  • 5
  • 15

1 Answers1

4

When I have a chance I will edit this with references.

The 386 manual states that the address lines 31-20 are high on reset until a JMP is encountered, then they are low again. The mapping isn't really there its more of a hack.

The top if the address space where there is no RAM (in a system with say 1GB of RAM) the chipset will map ROM code rather than RAM to that address. It doesn't make sense to have RAM there since on first power on there would be no code there to execute, so it must be non volatile.

Dougvj
  • 6,409
  • 2
  • 23
  • 18
  • 1
    If it helps, it is the motherboard logic or 'chipset' who ensures that the instruction at the reset vector (0xFFFFFFF0h) is a far jump to the memory location mapped to the system BIOS entry point (0x0000: 0x000F0000h). In summary, every 'motherboard' has implemented this 'jump hack'. [Thanx Gustavo Duarte for this explanation. Check his smart blog: http://duartes.org/gustavo/blog/post/how-computers-boot-up/] – fante Oct 20 '15 at 16:04
  • So, if you have 4 GB installed in your 32bits system, the 'chipset' logic will overlap the last 16 bytes of your installed RAM with a 'jump 0x0000:0x000F0000h' instruction code. – fante Oct 20 '15 at 16:07
  • @fante So 0xffffff0h is going to jump to probably spi flash? and 0x000F0000h will be in flash? Can you link something where this would be on relative to the flash device? – marshal craft Dec 14 '16 at 23:07