diff options
author | vruppert <vruppert> | 2008-12-23 09:20:06 +0000 |
---|---|---|
committer | vruppert <vruppert> | 2008-12-23 09:20:06 +0000 |
commit | ddfb6acefb1caf6e36f4ee486143cbebb5769e1f (patch) | |
tree | eae8463b58cec54b750498aafbdc496a1c34c4c0 /bios | |
parent | d5c5cb3efd3b416736fe7984375eba1a0a8374bf (diff) |
- added support for booting from option ROM with BCV entry (Laurent Vivier)
Diffstat (limited to 'bios')
-rw-r--r-- | bios/rombios.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/bios/rombios.c b/bios/rombios.c index f2bff806..be821315 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -10251,6 +10251,30 @@ block_count_rounded: mov ax, 2[bx] cmp ax, #0x506e jne no_bev + + mov ax, 0x16[bx] ;; 0x16 is the offset of Boot Connection Vector + cmp ax, #0x0000 + je no_bcv + + ;; Option ROM has BCV. Run it now. + push cx ;; Push seg + push ax ;; Push offset + + ;; Point ES:DI at "$PnP", which tells the ROM that we are a PnP BIOS. + mov bx, #0xf000 + mov es, bx + lea di, pnp_string + /* jump to BCV function entry pointer */ + mov bp, sp ;; Call ROM BCV routine using seg:off on stack + db 0xff ;; call_far ss:[bp+0] + db 0x5e + db 0 + cli ;; In case expansion ROM BIOS turns IF on + add sp, #2 ;; Pop offset value + pop cx ;; Pop seg value (restore CX) + jmp no_bev + +no_bcv: mov ax, 0x1a[bx] ;; 0x1A is also the offset into the expansion header of... cmp ax, #0x0000 ;; the Bootstrap Entry Vector, or zero if there is none. je no_bev |