diff --git a/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc b/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc index f68b1fd372..1d4ca5bc9a 100644 --- a/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc +++ b/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc @@ -344,6 +344,8 @@ include 'detect/biosmem.inc' ; READ DISKETTE TO MEMORY +if 0 +---- cmp [boot_dev],0 jne no_sys_on_floppy xor ax, ax ; reset drive @@ -648,6 +650,8 @@ no_sys_on_floppy: mov dx, 0x3f2 ; floppy motor off mov al, 0 out dx, al +--- +end if ; SET GRAPHICS diff --git a/kernel/branches/Kolibri-A/trunk/boot/rdload.inc b/kernel/branches/Kolibri-A/trunk/boot/rdload.inc index b9c9c96561..568aa004ee 100644 --- a/kernel/branches/Kolibri-A/trunk/boot/rdload.inc +++ b/kernel/branches/Kolibri-A/trunk/boot/rdload.inc @@ -10,116 +10,116 @@ $Revision$ ; READ RAMDISK IMAGE FROM HD - cmp [boot_dev+OS_BASE+0x10000],1 - jne no_sys_on_hd + cmp [boot_dev+OS_BASE+0x10000],1 +; jne no_sys_on_hd - test [DRIVE_DATA+1],byte 0x40 - jz position_2 - mov [hdbase],0x1f0 - mov [hdid],0x0 - mov [hdpos],1 - mov [fat32part],0 + test [DRIVE_DATA+1],byte 0x40 + jz position_2 + mov [hdbase],0x1f0 + mov [hdid],0x0 + mov [hdpos],1 + mov [fat32part], 0 position_1_1: - inc [fat32part] - call search_and_read_image - cmp [image_retrieved],1 - je yes_sys_on_hd - movzx eax,byte [DRIVE_DATA+2] - cmp [fat32part],eax - jle position_1_1 + inc [fat32part] + call search_and_read_image + cmp [image_retrieved],1 + je yes_sys_on_hd + movzx eax,byte [DRIVE_DATA+2] + cmp [fat32part],eax + jle position_1_1 position_2: - test [DRIVE_DATA+1],byte 0x10 - jz position_3 - mov [hdbase],0x1f0 - mov [hdid],0x10 - mov [hdpos],2 - mov [fat32part],0 + test [DRIVE_DATA+1],byte 0x10 + jz position_3 + mov [hdbase],0x1f0 + mov [hdid],0x10 + mov [hdpos],2 + mov [fat32part],0 position_2_1: - inc [fat32part] - call search_and_read_image - cmp [image_retrieved],1 - je yes_sys_on_hd - movzx eax,byte [DRIVE_DATA+3] - cmp eax,[fat32part] - jle position_2_1 + inc [fat32part] + call search_and_read_image + cmp [image_retrieved],1 + je yes_sys_on_hd + movzx eax,byte [DRIVE_DATA+3] + cmp eax,[fat32part] + jle position_2_1 position_3: - test [DRIVE_DATA+1],byte 0x4 - jz position_4 - mov [hdbase],0x170 - mov [hdid],0x0 - mov [hdpos],3 - mov [fat32part],0 + test [DRIVE_DATA+1],byte 0x4 + jz position_4 + mov [hdbase],0x170 + mov [hdid],0x0 + mov [hdpos],3 + mov [fat32part],0 position_3_1: - inc [fat32part] - call search_and_read_image - cmp [image_retrieved],1 - je yes_sys_on_hd - movzx eax,byte [DRIVE_DATA+4] - cmp eax,[fat32part] - jle position_3_1 + inc [fat32part] + call search_and_read_image + cmp [image_retrieved],1 + je yes_sys_on_hd + movzx eax,byte [DRIVE_DATA+4] + cmp eax,[fat32part] + jle position_3_1 position_4: - test [DRIVE_DATA+1],byte 0x1 - jz no_sys_on_hd - mov [hdbase],0x170 - mov [hdid],0x10 - mov [hdpos],4 - mov [fat32part],0 + test [DRIVE_DATA+1],byte 0x1 + jz no_sys_on_hd + mov [hdbase],0x170 + mov [hdid],0x10 + mov [hdpos],4 + mov [fat32part],0 position_4_1: - inc [fat32part] - call search_and_read_image - cmp [image_retrieved],1 - je yes_sys_on_hd - movzx eax,byte [DRIVE_DATA+5] - cmp eax,[fat32part] - jle position_4_1 - jmp yes_sys_on_hd + inc [fat32part] + call search_and_read_image + cmp [image_retrieved],1 + je yes_sys_on_hd + movzx eax,byte [DRIVE_DATA+5] + cmp eax,[fat32part] + jle position_4_1 + jmp yes_sys_on_hd search_and_read_image: - call set_FAT32_variables - mov edx, bootpath - call read_image - test eax, eax - jz image_present - mov edx, bootpath2 - call read_image - test eax, eax - jz image_present - ret + call set_FAT32_variables + mov edx, bootpath + call read_image + test eax, eax + jz image_present + mov edx, bootpath2 + call read_image + test eax, eax + jz image_present + ret image_present: - mov [image_retrieved],1 - ret + mov [image_retrieved],1 + ret read_image: - mov eax, hdsysimage+OS_BASE+0x10000 - mov ebx, 1474560/512 - mov ecx, RAMDISK - mov esi, 0 - mov edi, 12 - call file_read - ret + mov eax, hdsysimage+OS_BASE+0x10000 + mov ebx, 1474560/512 + mov ecx, RAMDISK + mov esi, 0 + mov edi, 12 + call file_read + ret image_retrieved db 0 counter_of_partitions db 0 no_sys_on_hd: - ; test_to_format_ram_disk (need if not using ram disk) - cmp [boot_dev+OS_BASE+0x10000],3 - jne not_format_ram_disk - ; format_ram_disk - mov edi, RAMDISK - mov ecx, 0x1080 - xor eax,eax -@@: + ; test_to_format_ram_disk (need if not using ram disk) + cmp [boot_dev+OS_BASE+0x10000],3 + jne not_format_ram_disk + ; format_ram_disk + mov edi, RAMDISK + mov ecx, 0x1080 + xor eax,eax +@@: stosd - loop @b + loop @b - mov ecx, 0x58F7F - mov eax,0xF6F6F6F6 -@@: + mov ecx, 0x58F7F + mov eax,0xF6F6F6F6 +@@: stosd - loop @b - - mov [RAMDISK+0x200],dword 0xFFFFF0 ; fat table - mov [RAMDISK+0x4200],dword 0xFFFFF0 - + loop @b + + mov [RAMDISK+0x200],dword 0xFFFFF0 ; fat table + mov [RAMDISK+0x4200],dword 0xFFFFF0 + not_format_ram_disk: yes_sys_on_hd: diff --git a/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm new file mode 100644 index 0000000000..0540e66b39 --- /dev/null +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.asm @@ -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 \ 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 new file mode 100644 index 0000000000..03899d5c91 --- /dev/null +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.bat @@ -0,0 +1 @@ +fasm bev.asm \ 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 new file mode 100644 index 0000000000..ed08e9f976 --- /dev/null +++ b/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/cfg_bios.inc @@ -0,0 +1,5 @@ +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 diff --git a/kernel/branches/Kolibri-A/trunk/const.inc b/kernel/branches/Kolibri-A/trunk/const.inc index e4d675202a..e82ff1c337 100644 --- a/kernel/branches/Kolibri-A/trunk/const.inc +++ b/kernel/branches/Kolibri-A/trunk/const.inc @@ -194,74 +194,78 @@ TASK_BASE equ (OS_BASE+0x0003010) TASK_DATA equ (OS_BASE+0x0003020) TASK_EVENT equ (OS_BASE+0x0003020) -FLOPPY_BUFF equ (OS_BASE+0x0005000) - -idts equ (OS_BASE+0x0007400) ; sys32.inc - -mouseunder equ (OS_BASE+0x0007900) -SB16_Status equ (OS_BASE+0x0007F00) ; << - -RAMDISK_FAT equ (OS_BASE+0x0008000) -FLOPPY_FAT equ (OS_BASE+0x000A000) ; fs/fat12.inc - +mouseunder equ (OS_BASE+0x0006900) +CDDataBuf equ (OS_BASE+0x0007000) +FLOPPY_BUFF equ (OS_BASE+0x0008000) +;ACTIVE_PROC_STACK equ (OS_BASE+0x000A400) ;unused +idts equ (OS_BASE+0x000B100) WIN_STACK equ (OS_BASE+0x000C000) WIN_POS equ (OS_BASE+0x000C400) FDD_BUFF equ (OS_BASE+0x000D000) +;unused ? only one reference +;ENABLE_TASKSWITCH equ (OS_BASE+0x000E000) -KEY_COUNT equ (OS_BASE+0x000FA00) -KEY_BUFF equ (OS_BASE+0x000FA01) +PUTPIXEL equ (OS_BASE+0x000E020) +GETPIXEL equ (OS_BASE+0x000E024) -BTN_COUNT equ (OS_BASE+0x000FB00) -BTN_BUFF equ (OS_BASE+0x000FB01) +;unused ? only one reference +; BANK_SWITCH equ (OS_BASE+0x000E030) ; VESA 1.2 - not used +;unused ? store mousepointer +;MOUSE_PICTURE equ (OS_BASE+0x000F200) ; mousedrv.inc - not used -;reserved ? mouse buffer space 0xFC00-FCFF +MOUSE_VISIBLE equ (OS_BASE+0x000F204) +WIN_TEMP_XY equ (OS_BASE+0x000F300) +KEY_COUNT equ (OS_BASE+0x000F400) +KEY_BUFF equ (OS_BASE+0x000F401) + +BTN_COUNT equ (OS_BASE+0x000F500) +BTN_BUFF equ (OS_BASE+0x000F501) + +CPU_FREQ equ (OS_BASE+0x000F600) + +;unused ? no active references +MOUSE_PORT equ (OS_BASE+0x000F604) + +;unused +PS2_CHUNK equ (OS_BASE+0x000FB00) + +MOUSE_SCROLL_H equ (OS_BASE+0x000FB08) +MOUSE_X equ (OS_BASE+0x000FB0A) +MOUSE_Y equ (OS_BASE+0x000FB0C) +MOUSE_SCROLL_V equ (OS_BASE+0x000FB0E) + +MOUSE_COLOR_MEM equ (OS_BASE+0x000FB10) +COLOR_TEMP equ (OS_BASE+0x000FB30) +BTN_DOWN equ (OS_BASE+0x000FB40) +MOUSE_DOWN equ (OS_BASE+0x000FB44) +X_UNDER equ (OS_BASE+0x000FB4A) +Y_UNDER equ (OS_BASE+0x000FB4C) +ScreenBPP equ (OS_BASE+0x000FBF1) + +;unused ? only one reference MOUSE_BUFF_COUNT equ (OS_BASE+0x000FCFF) -;unused ? -PS2_CHUNK equ (OS_BASE+0x000FE00) -MOUSE_SCROLL_H equ (OS_BASE+0x000FE08) -MOUSE_X equ (OS_BASE+0x000FE0A) -MOUSE_Y equ (OS_BASE+0x000FE0C) -MOUSE_SCROLL_V equ (OS_BASE+0x000FE0E) +Screen_Max_X equ (OS_BASE+0x000FE00) +Screen_Max_Y equ (OS_BASE+0x000FE04) +BytesPerScanLine equ (OS_BASE+0x000FE08) +SCR_MODE equ (OS_BASE+0x000FE0C) -MOUSE_COLOR_MEM equ (OS_BASE+0x000FE10) -COLOR_TEMP equ (OS_BASE+0x000FE30) -BTN_DOWN equ (OS_BASE+0x000FE40) -MOUSE_DOWN equ (OS_BASE+0x000FE44) -X_UNDER equ (OS_BASE+0x000FE4A) -Y_UNDER equ (OS_BASE+0x000FE4C) +KERNEL_ALLOC_FLAG equ (OS_BASE+0x000FE70) +mmio_pcie_cfg_addr equ (OS_BASE+0x000FE74) +mmio_pcie_cfg_lim equ (OS_BASE+0x000FE78) +mmio_pcie_cfg_pdes equ (OS_BASE+0x000FE7C) +PCIe_bus_range equ (OS_BASE+0x000FE7E) -PUTPIXEL equ (OS_BASE+0x000FEB8) -GETPIXEL equ (OS_BASE+0x000FEBC) -ScreenBPP equ (OS_BASE+0x000FEC1) -MOUSE_VISIBLE equ (OS_BASE+0x000FEC4) -WIN_TEMP_XY equ (OS_BASE+0x000FEC8) -CPU_FREQ equ (OS_BASE+0x000FECC) - -Screen_Max_X equ (OS_BASE+0x000FED0) -Screen_Max_Y equ (OS_BASE+0x000FED4) -BytesPerScanLine equ (OS_BASE+0x000FED8) -SCR_MODE equ (OS_BASE+0x000FEDC) - -KERNEL_ALLOC_FLAG equ (OS_BASE+0x000FEE0) -mmio_pcie_cfg_addr equ (OS_BASE+0x000FEE4) -mmio_pcie_cfg_lim equ (OS_BASE+0x000FEE8) -mmio_pcie_cfg_pdes equ (OS_BASE+0x000FEEC) -PCIe_bus_range equ (OS_BASE+0x000FEEE) - -UserDMAaddr equ (OS_BASE+0x000FEF0) -LFBAddress equ (OS_BASE+0x000FEF4) -BTN_ADDR equ (OS_BASE+0x000FEF8) -MEM_AMOUNT equ (OS_BASE+0x000FEFC) +UserDMAaddr equ (OS_BASE+0x000FE80) +LFBAddress equ (OS_BASE+0x000FE84) +BTN_ADDR equ (OS_BASE+0x000FE88) +MEM_AMOUNT equ (OS_BASE+0x000FE8C) SYS_SHUTDOWN equ (OS_BASE+0x000FF00) TASK_ACTIVATE equ (OS_BASE+0x000FF01) -BgrDrawMode equ (OS_BASE+0x000FFE4) -BgrDataWidth equ (OS_BASE+0x000FFE8) -BgrDataHeight equ (OS_BASE+0x000FFEC) REDRAW_BACKGROUND equ (OS_BASE+0x000FFF0) BACKGROUND_CHANGED equ (OS_BASE+0x000FFF1) BANK_RW equ (OS_BASE+0x000FFF2) @@ -280,38 +284,48 @@ DRIVE_DATA equ (OS_BASE+0x0070000) SLOT_BASE equ (OS_BASE+0x0080000) -SB16Buffer equ (OS_BASE+0x0090000) ; << +;unused +TMP_BUFF equ (OS_BASE+0x0090000) VGABasePtr equ (OS_BASE+0x00A0000) RAMDISK equ (OS_BASE+0x0100000) +RAMDISK_FAT equ (OS_BASE+0x0280000) +FLOPPY_FAT equ (OS_BASE+0x0282000) -CLEAN_ZONE equ 0x3f0000 +CLEAN_ZONE equ 0x280000 +IDE_DMA equ 0x284000 -IDE_DMA equ 0x03F4000 +BgrAuxTable equ (OS_BASE+0x0298000) +; unused? +SB16Buffer equ (OS_BASE+0x2A0000) +SB16_Status equ (OS_BASE+0x02B0000) -BgrAuxTable equ (OS_BASE+0x0408000) - -BUTTON_INFO equ (OS_BASE+0x0430000) -RESERVED_PORTS equ (OS_BASE+0x0440000) -IRQ_SAVE equ (OS_BASE+0x0450000) -BOOT_VAR equ (OS_BASE+0x0460000) - -stack_data_start equ (OS_BASE+0x0470000) -eth_data_start equ (OS_BASE+0x0470000) -stack_data equ (OS_BASE+0x0474000) -stack_data_end equ (OS_BASE+0x048ffff) -resendQ equ (OS_BASE+0x0490000) -VMODE_BASE equ (OS_BASE+0x0498000) -skin_data equ (OS_BASE+0x04A0000) -draw_data equ (OS_BASE+0x04A8000); +BUTTON_INFO equ (OS_BASE+0x02C0000) +RESERVED_PORTS equ (OS_BASE+0x02D0000) +IRQ_SAVE equ (OS_BASE+0x02E0000) +;BOOT_VAR equ (OS_BASE+0x02F0000) -sys_pgmap equ (OS_BASE+0x04B0000) ; << +stack_data_start equ (OS_BASE+0x0300000) +eth_data_start equ (OS_BASE+0x0300000) +stack_data equ (OS_BASE+0x0304000) +stack_data_end equ (OS_BASE+0x031ffff) +resendQ equ (OS_BASE+0x0320000) +VMODE_BASE equ (OS_BASE+0x0328000) +skin_data equ (OS_BASE+0x0330000) +draw_data equ (OS_BASE+0x0338000); -;UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000) +BgrDrawMode equ (OS_BASE+0x033BFF4) +BgrDataWidth equ (OS_BASE+0x033BFF8) +BgrDataHeight equ (OS_BASE+0x033BFFC) +BOOT_VAR equ (OS_BASE+0x0340000) -virtual at (OS_BASE+0x06FFF80) +sys_pgmap equ (OS_BASE+0x0350000) + +UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000) + +virtual at (OS_BASE+0x05FFF80) tss TSS end virtual diff --git a/kernel/branches/Kolibri-A/trunk/init.inc b/kernel/branches/Kolibri-A/trunk/init.inc index 3b49f57cfb..8430bfd163 100644 --- a/kernel/branches/Kolibri-A/trunk/init.inc +++ b/kernel/branches/Kolibri-A/trunk/init.inc @@ -16,9 +16,9 @@ MEM_UC equ 0 ;uncached memory align 4 preinit_mem: -; clear [0x280000..HEAP_BASE] +; clear [CLEAN_ZONE..HEAP_BASE] xor eax,eax - mov edi, CLEAN_ZONE ; 0x280000 = ramdisk FAT ? + mov edi,CLEAN_ZONE ; 0x280000 = ramdisk FAT ? mov ecx,(HEAP_BASE-OS_BASE-CLEAN_ZONE) / 4 cld rep stosd @@ -35,7 +35,7 @@ preinit_mem: ; save [0..0xffff] xor esi, esi - mov edi,(BOOT_VAR-OS_BASE) ; low mem storage area + mov edi, (BOOT_VAR - OS_BASE) ; low mem storage area mov ecx, 0x10000 / 4 rep movsd ; clear [0x1000..0x0ffff] @@ -83,24 +83,20 @@ proc init_mem mov eax, PG_LARGE+PG_SW mov cr4, ebx dec [pg_data.kernel_tables-OS_BASE] - sub [pg_data.kernel_pages -OS_BASE], 1024 ; 1 large page = 1024 ordinary pages mov [edx], eax ; map first (physical) 4M bytes add edx, 4 mov edi, [tmp_page_tabs] - mov ecx, [pg_data.kernel_pages -OS_BASE] ; map the rest of kernel space - mov eax, 0x00400000+PG_SW -.map_kernel_pages: - stosd - add eax, 4096 - dec ecx - jnz .map_kernel_pages + mov ecx, [pg_data.kernel_pages -OS_BASE] ; safety cleaning of already-zeroed space + xor eax, eax + rep stosd mov ecx, [pg_data.kernel_tables-OS_BASE] ; build some PDEs to hold empty PTEs mov eax, [tmp_page_tabs] or eax, PG_SW mov edi, edx ; edi = sys_pgdir+0x804 + .map_kernel_tabs: stosd add eax, 0x1000 diff --git a/kernel/branches/Kolibri-A/trunk/kernel.asm b/kernel/branches/Kolibri-A/trunk/kernel.asm index 307936141f..9b8fc62ba4 100644 --- a/kernel/branches/Kolibri-A/trunk/kernel.asm +++ b/kernel/branches/Kolibri-A/trunk/kernel.asm @@ -219,7 +219,7 @@ diff16 "32-bit code start ",0,$ call init_BIOS32 ; (init.inc - to be removed later) ; PCIe extended config space access -; call rs7xx_pcie_init ; (bus/HT.inc) +; call rs7xx_pcie_init ; (bus/HT.inc) call fusion_pcie_init ; (bus/HT.inc) ; MEMORY MODEL