From b718363009b934982907c5f93783385d432bfad4 Mon Sep 17 00:00:00 2001 From: "Artem Jerdev (art_zh)" Date: Tue, 7 Jun 2016 15:14:38 +0000 Subject: [PATCH] VHDL code generator for PCI BIOS extension ROMs git-svn-id: svn://kolibrios.org@6442 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../trunk/bootloader/bios-bev/PCIROM.ASM | 108 ++++++++++++++++++ .../trunk/bootloader/bios-bev/STEP1.ASM | 30 +++++ .../trunk/bootloader/bios-bev/STEP2.ASM | 1 + .../trunk/bootloader/bios-bev/bev.asm | 82 ------------- .../trunk/bootloader/bios-bev/bev.bat | 12 +- .../trunk/bootloader/bios-bev/cfg_bios.inc | 2 +- 6 files changed, 151 insertions(+), 84 deletions(-) create mode 100644 kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/PCIROM.ASM create mode 100644 kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP1.ASM create mode 100644 kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP2.ASM delete mode 100644 kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/PCIROM.ASM b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/PCIROM.ASM new file mode 100644 index 0000000000..fb99a27c54 --- /dev/null +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/PCIROM.ASM @@ -0,0 +1,108 @@ +include 'cfg_bios.inc' +use16 +org 0 + +rom_header: +; PnP Option ROM header +rom_signature dw 0xAA55 ; +0 : magic +rom_length db 1 ; +2 : number of 512byte blocks +rom_entry: + jmp init_entry ; +3 : initialization entry point +; retf ; +5 +@@: + times (24-$) db 0 ; : left blank +rom_pci_struc dw pci_header ; +18h : offset to PCI data structure + + times (32-$) db 0 + +; +32 +pci_header: +; PCI Data Structure +pci_magic db 'PCIR' ; +0 : magic +pci_vendor dw BIOS_PCI_VENDOR ; +4 : 10EE +pci_device dw BIOS_PCI_DEVICE ; +6 : 0007 +pci_vdata dw 0 ; +8 : 0 = no vital product data +pci_length dw 0x18 ; +A : PCI data structure length +pci_classrev dd BIOS_PCI_CLASS ; +C : rev.00 + class 05.00.00 +pci_size dw 1 ; +10 : image length (512byte blocks) +pci_rev dw 0 ; +12 +pci_codetype db 0 ; +14 : x86 +pci_indicator db 0x80 ; +15 : last image +pci_maxlen dw 1 ; +16 : max length (512b blocks) +pci_hdrptr dw 0; manstr ; +18 : ExROM's config utility code header +pci_dmtf_entry dw 0 ; +1A : DMTP CLP entry point + + times (64-$) db 0 + +manstr: + db 1,'Kolibri-A Operating System',13,10,0 + ; utility code header size = 42 bytes + times (64+41-$) db 0 ; + db 1 ; ver.1 + +utility_entry: + jmp boot_failure + times (128-$) db 0 + +;align 128 + +boot_failure: + int 18h ; return to BIOS Boot sequence + +align 4 +init_entry: +; note x86 "unreal" mode! +; ax = b:d.f +; bx = run-time segment +; cx = PMM segment +; dx = PMM entry offset + + mov dx, 0x0cf8 ; PCI config address +; mov eax, 0x80010010 ; BAR0 + and eax, 0x0FFFF + shl eax, 8 + or eax, 0x80000010 ;BAR0 + out dx, eax + out dx, eax + add dl, 4 + in eax, dx + and eax, 0xFFFFFF00 + add eax, 0x0400 ; LPC control reg + mov dword[eax], 0x90050000 ; LED port + mov dword[eax+4], 0x055 + xor eax, eax + sub dl, 4 + out dx, eax + mov bx, ax + retf + + +; mov edx,[esp] ; get the origin +; and dl, 0xF0 +; shl ebx, 4 ; correct run-time address +; mov cx, 0 ; words counter +;@@: +; mov ax, word[edx+ecx] +; mov [ebx+ecx],ax +; inc cx +; inc cx +; test cx,0x200 +; jz @b +; xor ax, ax +; mov bx, ax +; mov al, 0x20 ; IPL device's attached + +; retd ; double ! + + + times (0xDF-$) db 0 ; checksum position + +sum = 0 +repeat $-$$ + load a byte from $$+% -1 + sum = a + sum +end repeat +check = sum mod 256 +check_byte db (0x100 - check ) mod 256 + +times (512-$) db 0 \ No newline at end of file diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP1.ASM b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP1.ASM new file mode 100644 index 0000000000..e401bfee17 --- /dev/null +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP1.ASM @@ -0,0 +1,30 @@ +; file 'pcirom.bin':0,0x49 + file 'pcirom.bin' + + + db 13,10 + line = '0' + block = 0 + repeat 7 + db 'INIT_0',line,' => X"' + repeat 32 + pos = 32-% + load a byte from pos+block + b = a mod 16 + if b<10 + c = b + '0' + else + c = b-10+'A' + end if + b = a / 16 + if b<10 + d = b + '0' + else + d = b-10+'A' + end if + db d, c + end repeat + db '",',13,10 + block = block + 32 + line = line + 1 + end repeat diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP2.ASM b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP2.ASM new file mode 100644 index 0000000000..650df438a1 --- /dev/null +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/STEP2.ASM @@ -0,0 +1 @@ +file 'step1.bin':512 \ No newline at end of file diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm deleted file mode 100644 index 0540e66b39..0000000000 --- a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm +++ /dev/null @@ -1,82 +0,0 @@ -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 \ No newline at end of file diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.bat b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.bat index 03899d5c91..d25fb9e134 100644 --- a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.bat +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.bat @@ -1 +1,11 @@ -fasm bev.asm \ No newline at end of file +fasm pcirom.asm +fasm step1.asm +fasm step2.asm +ren step2.bin pcirom.vhd +del step1.bin +del pcirom.bin +echo off +echo ******************************** +echo (C) Artem Jerdev, 2014 +echo PCI ROM VHDL Template generated +pause \ No newline at end of file diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/cfg_bios.inc b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/cfg_bios.inc index ed08e9f976..14caccf5ae 100644 --- a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/cfg_bios.inc +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/cfg_bios.inc @@ -2,4 +2,4 @@ BIOS_BOOT_BLOCK_SIZE equ 1 ; in 512-blocks BIOS_PCI_VENDOR equ 0x10EE BIOS_PCI_DEVICE equ 0x0007 -BIOS_PCI_CLASS equ 0x04000000 \ No newline at end of file +BIOS_PCI_CLASS equ 0x05000000 \ No newline at end of file