/kernel/trunk/boot/bootvesa.inc |
---|
789,7 → 789,7 |
; add eax, ebx |
; push 0x0000 |
; pop es |
; mov [es:0x9014], eax |
; mov [es:BOOT_BANK_SW], eax |
.exit: |
ret |
/kernel/trunk/bus/pci/pci16.inc |
---|
24,15 → 24,15 |
xor ax, ax |
mov es, ax |
mov byte [es:0x9020], 1;default mechanism:1 |
mov byte [es:BOOT_PCI_DATA], 1;default mechanism:1 |
mov ax, 0xb101 |
int 0x1a |
or ah, ah |
jnz pci16skip |
mov [es:0x9021], cl;last PCI bus in system |
mov [es:0x9022], bx |
mov [es:0x9024], edi |
mov [es:BOOT_PCI_DATA+1], cl;last PCI bus in system |
mov [es:BOOT_PCI_DATA+2], bx |
mov [es:BOOT_PCI_DATA+4], edi |
; we have a PCI BIOS, so check which configuration mechanism(s) |
; it supports |
41,7 → 41,7 |
jnz pci16skip |
test al, 2 |
jz pci16skip |
mov byte [es:0x9020], 2; if (al&3)==2 => mechanism 2 |
mov byte [es:BOOT_PCI_DATA], 2; if (al&3)==2 => mechanism 2 |
pci16skip: |
/kernel/trunk/bus/pci/pci32.inc |
---|
101,17 → 101,17 |
pci_fn_0: |
; PCI function 0: get pci version (AH.AL) |
movzx eax, word [BOOT_VARS+0x9022] |
movzx eax, word [BOOT_VARS+BOOT_PCI_DATA+2] |
ret |
pci_fn_1: |
; PCI function 1: get last bus in AL |
mov al, [BOOT_VARS+0x9021] |
mov al, [BOOT_VARS+BOOT_PCI_DATA+1] |
ret |
pci_fn_2: |
; PCI function 2: get pci access mechanism |
mov al, [BOOT_VARS+0x9020] |
mov al, [BOOT_VARS+BOOT_PCI_DATA] |
ret |
pci_service_not_supported: |
156,7 → 156,7 |
pci_read_reg: |
push ebx esi |
cmp byte [BOOT_VARS+0x9020], 2;what mechanism will we use? |
cmp byte [BOOT_VARS+BOOT_PCI_DATA], 2;what mechanism will we use? |
je pci_read_reg_2 |
; mechanism 1 |
260,7 → 260,7 |
pci_write_reg: |
push esi ebx |
cmp byte [BOOT_VARS+0x9020], 2;what mechanism will we use? |
cmp byte [BOOT_VARS+BOOT_PCI_DATA], 2;what mechanism will we use? |
je pci_write_reg_2 |
; mechanism 1 |
519,9 → 519,9 |
cmp ebp, 1 ; PCI_FUNCTION_ID |
jnz .not_PCI_BIOS_PRESENT |
mov edx, 'PCI ' |
mov al, [BOOT_VARS + 0x9020] |
mov bx, [BOOT_VARS + 0x9022] |
mov cl, [BOOT_VARS + 0x9021] |
mov al, [BOOT_VARS + BOOT_PCI_DATA] |
mov bx, [BOOT_VARS + BOOT_PCI_DATA + 2] |
mov cl, [BOOT_VARS + BOOT_PCI_DATA + 1] |
xor ah, ah |
jmp .return_abcd |
665,7 → 665,7 |
.next_func: |
inc dword [.devfn] |
mov ah, [.bus] |
cmp ah, [BOOT_VARS+0x9021] |
cmp ah, [BOOT_VARS+BOOT_PCI_DATA+1] |
jbe .loop |
.nomemory: |
leave |
/kernel/trunk/const.inc |
---|
313,29 → 313,26 |
BOOT_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch |
BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address |
BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration |
;BOOT_LOG equ 0x901D ;byte not used anymore (0 or 1 : enable system log display) |
BOOT_LAUNCHER_START equ 0x901D ;byte (0 or 1) start the first app (right now it's LAUNCHER) after kernel is loaded? |
;BOOT_DIRECT_LFB equ 0x901E ;byte 0 or 1 : enable direct lfb write, paging disabled |
BOOT_DEBUG_PRINT equ 0x901E ;byte If nonzero, duplicates debug output to the screen. |
BOOT_DMA equ 0x901F ; |
BOOT_DMA equ 0x901F ;byte DMA write : 1=yes, 2=no |
BOOT_PCI_DATA equ 0x9020 ;8bytes pci data |
BOOT_SHUTDOWN_TYPE equ 0x9030 ;byte shutdown type (see sysfn 18.9) |
;BOOT_IDE_BASE_ADDR equ 0x9031 ;word IDEContrRegsBaseAddr ; now free and is not used |
BOOT_MEM_AMOUNT equ 0x9034 ;dword memory amount |
BOOT_APM_ENTRY equ 0x9040 |
BOOT_APM_VERSION equ 0x9044 |
BOOT_APM_FLAGS equ 0x9046 ;unused |
BOOT_APM_FLAGS equ 0x9046 |
BOOT_APM_CODE_32 equ 0x9050 |
BOOT_APM_CODE_16 equ 0x9052 |
BOOT_APM_DATA_16 equ 0x9054 |
;BOOT_IDE_BAR0_16 equ 0x9056 ; now free and is not used |
;BOOT_IDE_BAR1_16 equ 0x9058 ; now free and is not used |
;BOOT_IDE_BAR2_16 equ 0x905A ; now free and is not used |
;BOOT_IDE_BAR3_16 equ 0x905C ; now free and is not used |
;BOOT_IDE_PI_16 equ 0x905E ; now free and is not used |
;BOOT_IDE_INTERR_16 equ 0x9060 ; now free and is not used |
BOOT_BIOS_HD_CNT equ 0x907F ; byte number of BIOS hard disks |
BOOT_BIOS_HD equ 0x9080 ; Nbytes BIOS hard disks |
BOOT_MEMMAP_BLOCK_CNT equ 0x9100 ; word available physical memory map: number of blocks |
BOOT_MEMMAP_BLOCKS equ 0x9104 ; available physical memory map: blocks, i.e. e820entry structs |
MAX_MEMMAP_BLOCKS equ 32 |
TMP_FILE_NAME equ 0 |
TMP_CMD_LINE equ 1024 |
TMP_ICON_OFFS equ 1280 |
936,3 → 933,15 |
data dd ? ;user-specific data |
num_ints dd ? ;how many times handled |
ends |
struct DQ |
lo dd ? |
hi dd ? |
ends |
struct e820entry |
addr DQ ? |
size DQ ? |
type dd ? |
ends |
/kernel/trunk/core/dll.inc |
---|
476,7 → 476,7 |
jne .cleanup |
mov eax, [file] |
cmp dword [eax], 0x4B43504B |
cmp dword [eax], 'KPCK' |
jne .exit |
mov ebx, [eax+4] |
mov [file_size], ebx |
583,7 → 583,7 |
jne .err_2 |
mov eax, [km_file] |
cmp dword [eax], 0x4B43504B ; check kpack signature |
cmp dword [eax], 'KPCK' ; check kpack signature |
jne .raw_file |
mov ebx, [eax+4] ;get real size of file |
/kernel/trunk/core/memory.inc |
---|
1336,7 → 1336,7 |
align 4 |
proc print_mem |
mov edi, BOOT_VAR + 0x9104 |
mov edi, BOOT_VAR + BOOT_MEMMAP_BLOCKS |
mov ecx, [edi-4] |
test ecx, ecx |
jz .done |
/kernel/trunk/detect/biosdisk.inc |
---|
15,7 → 15,7 |
xor cx, cx |
mov es, cx |
mov di, 0x9080 |
mov di, BOOT_BIOS_HD |
mov byte [es:di-1], cl |
cmp [preboot_biosdisk], 1 |
jnz bdde |
62,7 → 62,7 |
jb .noide |
cmp word [es:si+1Ah], 0xFFFF |
jz .noide |
inc byte [es:0x907F] |
inc byte [es:BOOT_BIOS_HD_CNT] |
mov al, dl |
stosb |
push ds |
95,7 → 95,7 |
cmp byte [es:si+2Ah], 'B' |
jz bddc2 |
.nousb: |
inc byte [es:0x907F] |
inc byte [es:BOOT_BIOS_HD_CNT] |
mov al, dl |
stosb |
xor ax, ax |
/kernel/trunk/detect/biosmem.inc |
---|
1,6 → 1,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2009-2015. All rights reserved. ;; |
;; Copyright (C) KolibriOS team 2009-2017. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
17,25 → 17,25 |
xor ebx, ebx |
mov es, bx |
mov ds, bx |
mov di, 0x9104 |
mov [di-4], ebx ; no blocks yet |
mov di, BOOT_MEMMAP_BLOCKS |
mov [BOOT_MEMMAP_BLOCK_CNT], ebx ; no blocks yet |
mov ecx, 20 |
mov edx, 0x534D4150 |
mov edx, 'PAMS' ; 'SMAP' |
int 15h |
jc no_E820 |
cmp eax, 0x534D4150 |
cmp eax, 'PAMS' |
jnz no_E820 |
e820_mem_loop: |
; cmp byte [di+16], 1 ; ignore non-free areas |
; jnz e820_mem_next |
inc byte [0x9100] |
add di, 20 |
inc byte [BOOT_MEMMAP_BLOCK_CNT] |
add di, sizeof.e820entry |
e820_mem_next: |
; consequent calls to fn E820 |
test ebx, ebx |
jz e820_test_done |
cmp byte [0x9100], 32 |
jae e820_test_done |
cmp byte [BOOT_MEMMAP_BLOCK_CNT], MAX_MEMMAP_BLOCKS |
jz e820_test_done |
mov eax, 0xE820 |
int 15h |
jc e820_test_done |
/kernel/trunk/detect/vortex86.inc |
---|
12,7 → 12,7 |
$Revision$ |
VORTEX86DEBUG = 0 ; For testing in emulators and in non-Vortex86 CPU computers, set this to 1 |
VORTEX86DEBUGVALUE = 0x35504d44 ; FAKE port output = used for testing |
VORTEX86DEBUGVALUE = 'DMP5' ; FAKE port output = used for testing |
NORTH_BRIDGE = 0x80000000 ; Base address of Vortex86 PCI North Bridge |
SOUTH_BRIDGE = 0x80003800 ; Base address of Vortex86 PCI South Bridge |
/kernel/trunk/init.inc |
---|
15,7 → 15,7 |
align 4 |
proc mem_test |
; if we have BIOS with fn E820, skip the test |
cmp dword [BOOT_VARS-OS_BASE + 0x9100], 0 |
cmp dword [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCK_CNT], 0 |
jnz .ret |
mov eax, cr0 |
35,14 → 35,14 |
and eax, not (CR0_CD+CR0_NW) ;enable caching |
mov cr0, eax |
inc dword [BOOT_VARS-OS_BASE + 0x9100] |
inc dword [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCK_CNT] |
xor eax, eax |
mov [BOOT_VARS-OS_BASE + 0x9104], eax |
mov [BOOT_VARS-OS_BASE + 0x9108], eax |
mov [BOOT_VARS-OS_BASE + 0x910C], edi |
mov [BOOT_VARS-OS_BASE + 0x9110], eax |
mov [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS + e820entry.addr.lo], eax |
mov [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS + e820entry.addr.hi], eax |
mov [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS + e820entry.size.lo], edi |
mov [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS + e820entry.size.hi], eax |
inc eax |
mov [BOOT_VARS-OS_BASE + 0x9114], eax |
mov [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS + e820entry.type], eax |
.ret: |
ret |
endp |
50,7 → 50,7 |
align 4 |
proc init_mem |
; calculate maximum allocatable address and number of allocatable pages |
mov edi, BOOT_VARS-OS_BASE + 0x9104 |
mov edi, BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS |
mov ecx, [edi-4] |
xor esi, esi; esi will hold total amount of memory |
xor edx, edx; edx will hold maximum allocatable address |
197,7 → 197,7 |
rep stosd |
; scan through memory map and mark free areas as available |
mov ebx, BOOT_VARS-OS_BASE + 0x9104 |
mov ebx, BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS |
mov edx, [ebx-4] |
.scanmap: |
cmp [ebx+16], byte 1 |
448,9 → 448,9 |
ACPI_HI_RSDP_WINDOW_END equ 0x00100000 |
ACPI_RSDP_CHECKSUM_LENGTH equ 20 |
ACPI_HPET_SIGN equ 0x54455048 |
ACPI_MADT_SIGN equ 0x43495041 |
ACPI_FADT_SIGN equ 0x50434146 |
ACPI_HPET_SIGN equ 'HPET' |
ACPI_MADT_SIGN equ 'APIC' |
ACPI_FADT_SIGN equ 'FACP' |
acpi_locate: |
477,9 → 477,9 |
ret |
.check: |
cmp [ebx], dword 0x20445352 |
cmp [ebx], dword 'RSD ' |
jne .next |
cmp [ebx+4], dword 0x20525450 |
cmp [ebx+4], dword 'PTR ' |
jne .next |
mov edx, ebx |
/kernel/trunk/kernel.asm |
---|
447,7 → 447,7 |
mov al, [BOOT_VARS+BOOT_LAUNCHER_START] ; Start the first app (LAUNCHER) after kernel is loaded? |
mov [launcher_start], al |
mov esi, BOOT_VARS+0x9080 |
mov esi, BOOT_VARS+BOOT_BIOS_HD |
movzx ecx, byte [esi-1] |
mov [NumBiosDisks], ecx |
mov edi, BiosDisksData |
2188,9 → 2188,9 |
ret |
;------------------------------------------------------------------------------ |
sysfn_shutdown: ; 18.9 = system shutdown |
cmp ecx, 1 |
cmp ecx, SYSTEM_SHUTDOWN |
jl exit_for_anyone |
cmp ecx, 4 |
cmp ecx, SYSTEM_RESTART |
jg exit_for_anyone |
mov [BOOT_VARS+BOOT_SHUTDOWN_TYPE], cl |
/kernel/trunk/memmap.inc |
---|
14,19 → 14,20 |
; 0:9008 word vesa video mode |
; 0:900A word X res |
; 0:900C word Y res |
; 0:9010 byte mouse port - not used |
; 0:9014 dword Vesa 1.2 pm bank switch |
; 0:9018 dword Vesa 2.0 LFB address |
; 0:901C byte 0 or 1 : enable MTRR graphics acceleration |
; 0:901D byte not used anymore (0 or 1 : enable system log display) |
; 0:901E byte 0 or 1 : enable direct lfb write, paging disabled |
; 0:901D byte (0 or 1) start the first app (right now it's LAUNCHER) after kernel is loaded? |
; 0:901E byte If nonzero, duplicates debug output to the screen. |
; 0:901F byte DMA write : 1=yes, 2=no |
; 0:9020 8bytes pci data |
; 0:9030 byte shutdown type (see sysfn 18.9) |
; 0:9031 word IDEContrRegsBaseAddr |
; 0x9040 - dword - entry point of APM BIOS |
; 0x9044 - word - version (BCD) |
; 0x9046 - word - flags |
; 0:9040 dword entry point of APM BIOS |
; 0:9044 word version (BCD) |
; 0:9046 word flags |
; 0:9050 word APM_CODE_32 |
; 0:9052 word APM_CODE_16 |
; 0:9054 word APM_DATA_16 |
; 0:907F byte number of BIOS hard disks |
; 0:9080 Nbytes BIOS hard disks |
; 0:9100 word available physical memory map: number of blocks |