/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc |
---|
344,6 → 344,8 |
; READ DISKETTE TO MEMORY |
if 0 |
---- |
cmp [boot_dev],0 |
jne no_sys_on_floppy |
xor ax, ax ; reset drive |
648,6 → 650,8 |
mov dx, 0x3f2 ; floppy motor off |
mov al, 0 |
out dx, al |
--- |
end if |
; SET GRAPHICS |
/kernel/branches/Kolibri-A/trunk/boot/rdload.inc |
---|
10,116 → 10,116 |
; 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: |
/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 |
/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev/bev.bat |
---|
0,0 → 1,0 |
fasm bev.asm |
/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 |
/kernel/branches/Kolibri-A/trunk/bootloader/bios-bev |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/kernel/branches/Kolibri-A/trunk/const.inc |
---|
194,74 → 194,78 |
TASK_DATA equ (OS_BASE+0x0003020) |
TASK_EVENT equ (OS_BASE+0x0003020) |
FLOPPY_BUFF equ (OS_BASE+0x0005000) |
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) |
idts equ (OS_BASE+0x0007400) ; sys32.inc |
;unused ? only one reference |
;ENABLE_TASKSWITCH equ (OS_BASE+0x000E000) |
mouseunder equ (OS_BASE+0x0007900) |
SB16_Status equ (OS_BASE+0x0007F00) ; << |
PUTPIXEL equ (OS_BASE+0x000E020) |
GETPIXEL equ (OS_BASE+0x000E024) |
RAMDISK_FAT equ (OS_BASE+0x0008000) |
FLOPPY_FAT equ (OS_BASE+0x000A000) ; fs/fat12.inc |
;unused ? only one reference |
; BANK_SWITCH equ (OS_BASE+0x000E030) ; VESA 1.2 - not used |
WIN_STACK equ (OS_BASE+0x000C000) |
WIN_POS equ (OS_BASE+0x000C400) |
FDD_BUFF equ (OS_BASE+0x000D000) |
;unused ? store mousepointer |
;MOUSE_PICTURE equ (OS_BASE+0x000F200) ; mousedrv.inc - not used |
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) |
KEY_COUNT equ (OS_BASE+0x000FA00) |
KEY_BUFF equ (OS_BASE+0x000FA01) |
BTN_COUNT equ (OS_BASE+0x000F500) |
BTN_BUFF equ (OS_BASE+0x000F501) |
BTN_COUNT equ (OS_BASE+0x000FB00) |
BTN_BUFF equ (OS_BASE+0x000FB01) |
CPU_FREQ equ (OS_BASE+0x000F600) |
;unused ? no active references |
MOUSE_PORT equ (OS_BASE+0x000F604) |
;reserved ? mouse buffer space 0xFC00-FCFF |
MOUSE_BUFF_COUNT equ (OS_BASE+0x000FCFF) |
;unused |
PS2_CHUNK equ (OS_BASE+0x000FB00) |
;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) |
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+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) |
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) |
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) |
;unused ? only one reference |
MOUSE_BUFF_COUNT equ (OS_BASE+0x000FCFF) |
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) |
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) |
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) |
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) |
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 |
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+0x02C0000) |
RESERVED_PORTS equ (OS_BASE+0x02D0000) |
IRQ_SAVE equ (OS_BASE+0x02E0000) |
;BOOT_VAR equ (OS_BASE+0x02F0000) |
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); |
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); |
BgrDrawMode equ (OS_BASE+0x033BFF4) |
BgrDataWidth equ (OS_BASE+0x033BFF8) |
BgrDataHeight equ (OS_BASE+0x033BFFC) |
BOOT_VAR equ (OS_BASE+0x0340000) |
sys_pgmap equ (OS_BASE+0x04B0000) ; << |
sys_pgmap equ (OS_BASE+0x0350000) |
;UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000) |
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000) |
virtual at (OS_BASE+0x06FFF80) |
virtual at (OS_BASE+0x05FFF80) |
tss TSS |
end virtual |
/kernel/branches/Kolibri-A/trunk/init.inc |
---|
16,9 → 16,9 |
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 |
; 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 |
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 |
/kernel/branches/Kolibri-A/trunk/kernel.asm |
---|
219,7 → 219,7 |
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 |