0,0 → 1,82 |
include 'cfg_bios.inc' |
use16 |
;org 0 |
|
rom_header: |
; PnP Option ROM header |
rom_signature dw 0xAA55 ; +0 : magic |
rom_length db BIOS_BOOT_BLOCK_SIZE ; +2 : number of 512byte blocks |
rom_entry: |
jmp init_entry ; +3 : initialization entry point |
db 'AZ' |
rom_reserved rb 0x11 ; +7 : reserved (17 bytes) |
rom_pci_struc dw pci_header ; +18h : offset to PCI data structure |
rom_expansion dw pnp_header ; +1Ah : offset to expansion header structure |
|
align 16 |
pnp_header: |
; PnP Expansion Header |
pnp_signature db '$PnP' ; +0 : magic |
pnp_revision db 1 ; +4 : revision |
pnp_length db 2 ; +5 : length (in 16byte paragraphs) |
pnp_next dw 0 ; +6 : offset of the next header (0 if none) |
pnp_reserv1 db 0 ; +8 |
pnp_checksum db 0 ; +9 : checksum |
pnp_devid dd 0x0 ; +A : device identifier |
pnp_manstr dw manstr ; +E : pointer to manufacturer string |
pnp_prodstr dw prodstr ; +10 : pointer to product name string |
pnp_devtype1 db 2 ; +12 : device type code |
pnp_devtype2 dw 0x000 |
pnp_devind db 0x14 ; +15 : device indicators |
pnp_bcv dw 0 ; +16 : boot connection vector (must be 0) |
pnp_discv dw 0 ; +18 : disconnect vector |
pnp_bev dw boot_entry ; +1A : boot entry vector |
pnp_reserv2 dw 0 ; +1C |
pnp_info dw 0 ; +1E : static resource information vector |
|
align 16 |
pci_header: |
; PCI Data Structure |
pci_magic db 'PCIR' ; +0 : magic |
pci_vendor dw BIOS_PCI_VENDOR ; +4 : |
pci_device dw BIOS_PCI_DEVICE ; +6 : sb700 PCI bridge |
pci_vdata dw 0 ; +8 : vital product data offset |
pci_length dw 0x18 ; +A : PCI data structure length |
pci_classrev dd BIOS_PCI_CLASS ; +C : rev.00 + class 04.00.00 |
pci_size dw BIOS_BOOT_BLOCK_SIZE ; +10 : image length (512byte blocks) |
pci_rev dw 0 ; +12 |
pci_codetype db 0 ; +14 : x86 |
pci_indicator db 0x80 ; +15 : last image |
pci_reserved dw 0 |
|
align 4 |
manstr: |
db 'Kolibri-A Operation System',0 |
prodstr: |
db 'ver.ROM-0.1',0 |
|
align 4 |
boot_entry: |
@@: |
|
|
boot_failure: |
int 18h ; return to BIOS Boot sequence |
|
align 4 |
init_entry: |
xor ax, ax |
mov [cs:rom_length], al |
mov al, 0x20 |
retf |
|
|
check = 0 |
repeat $-$$ |
load a byte from $$+%-1 |
check = a + check |
end repeat |
|
check_byte db 0x100 - (check mod 256) |
|
times (512-$) db 0 |