/kernel/trunk/boot/bootcode.inc |
---|
282,18 → 282,18 |
jnz @f |
mov word [cs:cfgmanager.loader_block], si |
mov word [cs:cfgmanager.loader_block+2], ds |
mov word [es:BOOT_KERNEL_RESTART], kernel_restart_bootblock |
mov word [es:BOOT_LO.kernel_restart], kernel_restart_bootblock |
@@: |
; \end{diamond}[02.12.2005] |
; if bootloader sets cx = 'HA' and dx = 'RD', then bx contains identifier of source disk |
; (see comment to BOOT_BX_FROM_LOAD and loader_doc.txt) |
mov word [es:BOOT_BX_FROM_LOAD], 'r1' ; default value: /rd/1 |
; (see comment to BOOT_LO.bx_from_load and loader_doc.txt) |
mov word [es:BOOT_LO.bx_from_load], 'r1' ; default value: /rd/1 |
cmp cx, 'HA' |
jnz no_hd_load |
cmp dx, 'RD' |
jnz no_hd_load |
mov [es:BOOT_BX_FROM_LOAD], bx |
mov [es:BOOT_LO.bx_from_load], bx |
no_hd_load: |
; set up stack |
441,7 → 441,7 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
sti |
; --------------- APM --------------------- |
and word [es:BOOT_APM_VERSION], 0 ; ver = 0.0 (APM not found) |
and word [es:BOOT_LO.apm_version], 0 ; ver = 0.0 (APM not found) |
mov ax, 0x5300 |
xor bx, bx |
int 0x15 |
448,8 → 448,8 |
jc apm_end ; APM not found |
test cx, 2 |
jz apm_end ; APM 32-bit protected-mode interface not supported |
mov [es:BOOT_APM_VERSION], ax ; Save APM Version |
mov [es:BOOT_APM_FLAGS], cx ; Save APM flags |
mov [es:BOOT_LO.apm_version], ax ; Save APM Version |
mov [es:BOOT_LO.apm_flags], cx ; Save APM flags |
; Write APM ver ---- |
and ax, 0xf0f |
468,10 → 468,10 |
xor bx, bx |
int 0x15 |
mov [es:BOOT_APM_ENTRY], ebx |
mov [es:BOOT_APM_CODE_32], ax |
mov [es:BOOT_APM_CODE_16], cx |
mov [es:BOOT_APM_DATA_16], dx |
mov [es:BOOT_LO.apm_entry], ebx |
mov [es:BOOT_LO.apm_code_32], ax |
mov [es:BOOT_LO.apm_code_16], cx |
mov [es:BOOT_LO.apm_data_16], dx |
apm_end: |
_setcursor d80x25_top_num, 0 |
951,26 → 951,26 |
; GRAPHICS ACCELERATION |
; force yes |
mov [es:BOOT_MTRR], byte 1 |
mov [es:BOOT_LO.mtrr], byte 1 |
; DMA ACCESS TO HD |
mov al, [preboot_dma] |
mov [es:BOOT_DMA], al |
mov [es:BOOT_LO.dma], al |
; Set kernel DEBUG mode - if nonzero, duplicates debug output to the screen. |
mov al, [preboot_debug] |
mov [es:BOOT_DEBUG_PRINT], al ;// 0x901E |
mov [es:BOOT_LO.debug_print], al ;// 0x901E |
; Start the first app (right now it's LAUNCHER) after kernel is loaded? |
mov al, [preboot_launcher] |
mov [es:BOOT_LAUNCHER_START], al ;// 0x901D |
mov [es:BOOT_LO.launcher_start], al ;// 0x901D |
; BOOT DEVICE |
mov al, [preboot_device] |
dec al |
mov [es:BOOT_DEV], al |
mov [es:BOOT_LO.dev], al |
; GET MEMORY MAP |
include '../detect/biosmem.inc' |
977,7 → 977,7 |
; READ DISKETTE TO MEMORY |
cmp byte [es:BOOT_DEV], 0 |
cmp byte [es:BOOT_LO.dev], 0 |
jne no_sys_on_floppy |
mov si, diskload |
call print |
1304,7 → 1304,7 |
out dx, al |
if defined extended_primary_loader |
cmp [es:BOOT_DEV], 1 |
cmp [es:BOOT_LO.dev], 1 |
jne no_sys_from_primary |
; load kolibri.img using callback from primary loader |
and word [movedesc + 24 + 2], 0 |
1343,7 → 1343,7 |
xor ax, ax |
mov es, ax |
mov ax, [es:BOOT_VESA_MODE] ; vga & 320x200 |
mov ax, [es:BOOT_LO.vesa_mode] ; vga & 320x200 |
mov bx, ax |
cmp ax, 0x13 |
je setgr |
/kernel/trunk/boot/bootvesa.inc |
---|
731,9 → 731,9 |
mov bx, word [es:si+2] ; resolution Y |
mov word [es:BOOT_X_RES], ax ; resolution X |
mov word [es:BOOT_Y_RES], bx ; resolution Y |
mov word [es:BOOT_VESA_MODE], cx ; number of mode |
mov word [es:BOOT_LO.x_res], ax ; resolution X |
mov word [es:BOOT_LO.y_res], bx ; resolution Y |
mov word [es:BOOT_LO.vesa_mode], cx ; number of mode |
cmp cx, 0x12 |
je .mode0x12_0x13 |
752,11 → 752,11 |
int 0x10 |
; LFB |
mov eax, [es:mi.PhysBasePtr];di+0x28] |
mov [es:BOOT_LFB], eax |
mov [es:BOOT_LO.lfb], eax |
; ---- vbe voodoo |
BytesPerLine equ 0x10 |
mov ax, [es:di+BytesPerLine] |
mov [es:BOOT_PITCH], ax |
mov [es:BOOT_LO.pitch], ax |
; BPP |
cmp [es:mi.BitsPerPixel], 16 |
jne .l0 |
765,12 → 765,12 |
mov [es:mi.BitsPerPixel], 15 |
.l0: |
mov al, byte [es:di+0x19] |
mov [es:BOOT_BPP], al |
mov [es:BOOT_LO.bpp], al |
jmp .exit |
.mode0x12_0x13: |
mov byte [es:BOOT_BPP], 32 |
or dword [es:BOOT_LFB], 0xFFFFFFFF; 0x800000 |
mov byte [es:BOOT_LO.bpp], 32 |
or dword [es:BOOT_LO.lfb], 0xFFFFFFFF; 0x800000 |
; VESA 1.2 PM BANK SWITCH ADDRESS |
789,7 → 789,7 |
; add eax, ebx |
; push 0x0000 |
; pop es |
; mov [es:BOOT_BANK_SW], eax |
; mov [es:BOOT_LO.bank_sw], eax |
.exit: |
ret |
/kernel/trunk/boot/rdload.inc |
---|
11,7 → 11,7 |
read_ramdisk: |
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3) |
cmp byte [BOOT_DEV+OS_BASE+0x10000], 1 |
cmp byte [BOOT.dev+0x10000], 1 |
jne no_sys_on_hd.1 |
xor ebp, ebp |
112,7 → 112,7 |
DEBUGF 1, "K : RD not found\n" |
.1: |
; test_to_format_ram_disk (need if not using ram disk) |
cmp byte [BOOT_DEV+OS_BASE+0x10000], 3 |
cmp byte [BOOT.dev+0x10000], 3 |
jne not_format_ram_disk |
; format_ram_disk |
mov edi, RAMDISK |
/kernel/trunk/boot/shutdown.inc |
---|
16,9 → 16,9 |
align 4 |
system_shutdown: ; shut down the system |
cmp byte [BOOT_VARS+BOOT_SHUTDOWN_TYPE], SYSTEM_SHUTDOWN |
cmp byte [BOOT.shutdown_type], SYSTEM_SHUTDOWN |
jb @F |
cmp byte [BOOT_VARS+BOOT_SHUTDOWN_TYPE], SYSTEM_RESTART |
cmp byte [BOOT.shutdown_type], SYSTEM_RESTART |
jbe .valid |
@@: |
ret |
62,7 → 62,7 |
cli |
call IRQ_mask_all |
mov eax, [OS_BASE + BOOT_SHUTDOWN_TYPE] |
mov eax, dword[BOOT.shutdown_type] |
cmp al, SYSTEM_RESTART |
jne @F |
91,7 → 91,7 |
mov eax, cr3 |
mov cr3, eax |
cmp byte [BOOT_SHUTDOWN_TYPE], SYSTEM_SHUTDOWN |
cmp byte [BOOT_LO.shutdown_type], SYSTEM_SHUTDOWN |
jne no_acpi_power_off |
; system_power_off |
179,7 → 179,7 |
restart_code_start: |
org 0x50000 |
cmp byte [BOOT_SHUTDOWN_TYPE], SYSTEM_RESTART |
cmp byte [BOOT_LO.shutdown_type], SYSTEM_RESTART |
jne @F |
mov esi, _CLEAN_ZONE-OS_BASE |
277,7 → 277,7 |
xor ax, ax |
mov ds, ax |
mov al, [BOOT_SHUTDOWN_TYPE] |
mov al, [BOOT_LO.shutdown_type] |
cmp al, SYSTEM_RESTART |
je .restart |
350,7 → 350,7 |
pop ds |
push 0 |
pop es |
mov si, [es:BOOT_KERNEL_RESTART] |
mov si, [es:BOOT_LO.kernel_restart] |
mov ax, 'KL' |
jmp 0x1000:0000 |
/kernel/trunk/boot/uefi4kos.asm |
---|
70,7 → 70,7 |
cmp [rdi + 8], rdx |
jnz .not_acpi20 |
mov rax, [rdi + 16] |
mov rdx, BOOT_ACPI_RSDP |
mov rdx, BOOT_LO.acpi_rsdp |
mov [rdx], eax |
;jmp $ |
jmp .all_tables_done |
157,18 → 157,18 |
mov rcx, [gop_info] |
mov eax, [rcx + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION.HorizontalResolution] |
xor rdx, rdx |
mov word [rdx + BOOT_X_RES], ax |
mov word [rdx + BOOT_LO.x_res], ax |
mov eax, [rcx + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION.VerticalResolution] |
mov word [rdx + BOOT_Y_RES], ax |
mov word [rdx + BOOT_LO.y_res], ax |
mov eax, [rcx + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION.PixelsPerScanLine] |
shl eax, 2 |
mov word [rdx + BOOT_PITCH], ax |
mov word [rdx + BOOT_LO.pitch], ax |
mov byte [rdx + BOOT_PCI_DATA + 0], 1 |
mov byte [rdx + BOOT_PCI_DATA + 1], 0 |
mov byte [rdx + BOOT_PCI_DATA + 2], 0x10 |
mov byte [rdx + BOOT_PCI_DATA + 3], 0x02 |
mov dword [rdx + BOOT_PCI_DATA + 4], 0xe3 |
mov byte [rdx + BOOT_LO.pci_data + 0], 1 |
mov byte [rdx + BOOT_LO.pci_data + 1], 0 |
mov byte [rdx + BOOT_LO.pci_data + 2], 0x10 |
mov byte [rdx + BOOT_LO.pci_data + 3], 0x02 |
mov dword [rdx + BOOT_LO.pci_data + 4], 0xe3 |
uefi_call_wrapper BootServices, GetMemoryMap, memory_map_size, memory_map, memory_map_key, descriptor_size, descriptor_ver |
175,9 → 175,9 |
cmp eax, EFI_SUCCESS |
jnz .error |
mov rdi, BOOT_MEMMAP_BLOCK_CNT |
mov rdi, BOOT_LO.memmap_block_cnt |
mov dword[rdi], 0 |
mov rdi, BOOT_MEMMAP_BLOCKS |
mov rdi, BOOT_LO.memmap_blocks |
mov rax, [memory_map_size] |
xor edx, edx |
mov rcx, [descriptor_size] |
215,24 → 215,24 |
rep movsq |
xor esi, esi |
mov byte[esi + BOOT_BPP], 32 |
mov word[esi + BOOT_VESA_MODE], 0 |
mov dword[esi + BOOT_BANK_SW], 0 |
mov byte[esi + BOOT_LO.bpp], 32 |
mov word[esi + BOOT_LO.vesa_mode], 0 |
mov dword[esi + BOOT_LO.bank_switch], 0 |
mov rdi, [fb_base] |
mov dword[esi + BOOT_LFB], edi |
mov byte[esi + BOOT_MTRR], 1 |
mov byte[esi + BOOT_LAUNCHER_START], 1 |
mov byte[esi + BOOT_DEBUG_PRINT], 1 |
mov byte[esi + BOOT_DMA], 0 |
; mov qword[esi + BOOT_PCI_DATA], 0 |
mov dword[esi + BOOT_APM_ENTRY], 0 |
mov word[esi + BOOT_APM_VERSION], 0 |
mov dword[esi + BOOT_APM_FLAGS], 0 |
mov word[esi + BOOT_APM_CODE_32], 0 |
mov word[esi + BOOT_APM_CODE_16], 0 |
mov word[esi + BOOT_APM_DATA_16], 0 |
mov byte[esi + BOOT_BIOS_HD_CNT], 0 |
mov word[esi + BOOT_BX_FROM_LOAD], 'r1' ; boot from /rd/1 |
mov dword[esi + BOOT_LO.lfb], edi |
mov byte[esi + BOOT_LO.mtrr], 1 |
mov byte[esi + BOOT_LO.launcher_start], 1 |
mov byte[esi + BOOT_LO.debug_print], 1 |
mov byte[esi + BOOT_LO.dma], 0 |
; mov qword[esi + BOOT_LO.pci_data], 0 |
mov dword[esi + BOOT_LO.apm_entry], 0 |
mov word[esi + BOOT_LO.apm_version], 0 |
mov dword[esi + BOOT_LO.apm_flags], 0 |
mov word[esi + BOOT_LO.apm_code_32], 0 |
mov word[esi + BOOT_LO.apm_code_16], 0 |
mov word[esi + BOOT_LO.apm_data_16], 0 |
mov byte[esi + BOOT_LO.bios_hd_cnt], 0 |
mov word[esi + BOOT_LO.bx_from_load], 'r1' ; boot from /rd/1 |
lgdt [cs:GDTR] |
341,7 → 341,7 |
.done: |
mov [rdi + e820entry.type], eax |
mov rax, BOOT_MEMMAP_BLOCK_CNT |
mov rax, BOOT_LO.memmap_block_cnt |
inc word[rax] |
pop rdi rsi rdx rcx rbx rax |
/kernel/trunk/bus/pci/pci16.inc |
---|
24,15 → 24,15 |
xor ax, ax |
mov es, ax |
mov byte [es:BOOT_PCI_DATA], 1;default mechanism:1 |
mov byte [es:BOOT_LO.pci_data], 1;default mechanism:1 |
mov ax, 0xb101 |
int 0x1a |
or ah, ah |
jnz pci16skip |
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 |
mov [es:BOOT_LO.pci_data+1], cl;last PCI bus in system |
mov word[es:BOOT_LO.pci_data+2], bx |
mov dword[es:BOOT_LO.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:BOOT_PCI_DATA], 2; if (al&3)==2 => mechanism 2 |
mov byte [es:BOOT_LO.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+BOOT_PCI_DATA+2] |
movzx eax, word [BOOT.pci_data+2] |
ret |
pci_fn_1: |
; PCI function 1: get last bus in AL |
mov al, [BOOT_VARS+BOOT_PCI_DATA+1] |
mov al, [BOOT.pci_data+1] |
ret |
pci_fn_2: |
; PCI function 2: get pci access mechanism |
mov al, [BOOT_VARS+BOOT_PCI_DATA] |
mov al, [BOOT.pci_data] |
ret |
pci_service_not_supported: |
156,7 → 156,7 |
pci_read_reg: |
push ebx esi |
cmp byte [BOOT_VARS+BOOT_PCI_DATA], 2;what mechanism will we use? |
cmp byte [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+BOOT_PCI_DATA], 2;what mechanism will we use? |
cmp byte [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 + BOOT_PCI_DATA] |
mov bx, [BOOT_VARS + BOOT_PCI_DATA + 2] |
mov cl, [BOOT_VARS + BOOT_PCI_DATA + 1] |
mov al, [BOOT.pci_data] |
mov bx, word[BOOT.pci_data + 2] |
mov cl, [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+BOOT_PCI_DATA+1] |
cmp ah, [BOOT.pci_data+1] |
jbe .loop |
.nomemory: |
leave |
/kernel/trunk/const.inc |
---|
1,6 → 1,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; |
;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
229,7 → 229,7 |
;unused 0x6000 - 0x8fff |
BOOT_VARS equ (OS_BASE) ;0x9000 |
BOOT_VARS equ 0x9000 |
idts equ (OS_BASE+0x000B100) |
WIN_STACK equ (OS_BASE+0x000C000) |
334,41 → 334,6 |
PAT_VALUE equ 0x00070106; (UC<<24)|(UCM<<16)|(WC<<8)|WB |
;;;;;;;;;;;boot time variables |
BOOT_BPP equ 0x9000 ;byte bits per pixel |
BOOT_PITCH equ 0x9001 ;word scanline length |
BOOT_VESA_MODE equ 0x9008 ;word vesa video mode |
BOOT_X_RES equ 0x900A ;word X res |
BOOT_Y_RES equ 0x900C ;word Y res |
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_LAUNCHER_START equ 0x901D ;byte (0 or 1) start the first app (right now it's LAUNCHER) after kernel is loaded? |
BOOT_DEBUG_PRINT equ 0x901E ;byte If nonzero, duplicates debug output to the screen. |
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_MEM_AMOUNT equ 0x9034 ;dword memory amount |
BOOT_APM_ENTRY equ 0x9040 |
BOOT_APM_VERSION equ 0x9044 |
BOOT_APM_FLAGS equ 0x9046 |
BOOT_APM_CODE_32 equ 0x9050 |
BOOT_APM_CODE_16 equ 0x9052 |
BOOT_APM_DATA_16 equ 0x9054 |
BOOT_DEV equ 0x9056 ; byte |
BOOT_KERNEL_RESTART equ 0x9058 ; word |
BOOT_BX_FROM_LOAD equ 0x905A ; word |
; low byte: a,b,c,d -- hdX, r -- rdX |
; high byte: symbol 'X' as in the line above, e.g. '1', not 1 |
; see loader_doc.txt for details |
BOOT_ACPI_RSDP equ 0x905C ; dword |
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 |
705,39 → 670,67 |
parent dd ? ;DLLDESCR |
ends |
struct DQ |
lo dd ? |
hi dd ? |
ends |
struct BOOT_DATA |
bpp dd ? |
scanline dd ? |
vesa_mode dd ? |
x_res dd ? |
y_res dd ? |
mouse_port dd ? |
bank_switch dd ? |
lfb dd ? |
vesa_mem dd ? |
log dd ? |
direct_lfb dd ? |
pci_data dd ? |
dd ? |
ide_base dd ? |
mem_amount dd ? |
pages_count dd ? |
pagemap_size dd ? |
kernel_max dd ? |
kernel_pages dd ? |
kernel_tables dd ? |
struct e820entry |
addr DQ ? |
size DQ ? |
type dd ? |
ends |
cpu_vendor dd ? |
struct boot_data |
bpp db ? ; bits per pixel |
pitch dw ? ; scanline length |
db ? |
dd ? |
vesa_mode dw ? |
x_res dw ? |
y_res dw ? |
dw ? |
dd ? |
cpu_sign dd ? |
cpu_info dd ? |
cpu_caps dd ? |
dd ? |
dd ? |
bank_switch dd ? ; Vesa 1.2 pm bank switch |
lfb dd ? ; Vesa 2.0 LFB address |
mtrr db ? ; 0 or 1: enable MTRR graphics acceleration |
launcher_start db ? ; 0 or 1: start the first app (right now it's LAUNCHER) after kernel is loaded |
debug_print db ? ; if nonzero, duplicates debug output to the screen |
dma db ? ; DMA write: 1=yes, 2=no |
pci_data rb 8 |
rb 8 |
shutdown_type db ? ; see sysfn 18.9 |
rb 15 |
apm_entry dd ? ; entry point of APM BIOS |
apm_version dw ? ; BCD |
apm_flags dw ? |
rb 8 |
apm_code_32 dw ? |
apm_code_16 dw ? |
apm_data_16 dw ? |
dev db ? |
db ? |
kernel_restart dw ? |
bx_from_load dw ? |
; low byte: a,b,c,d -- hdX, r -- rdX |
; high byte: symbol 'X' as in the line above, e.g. '1', not 1 |
; see loader_doc.txt for details |
acpi_rsdp dd ? |
rb 0x1f |
bios_hd_cnt db ? ; number of BIOS hard disks |
bios_hd rb 0x80 ; BIOS hard disks |
memmap_block_cnt dd ? ; available physical memory map: number of blocks |
memmap_blocks e820entry |
rb sizeof.e820entry * (MAX_MEMMAP_BLOCKS - 1) |
ends |
virtual at BOOT_VARS |
BOOT_LO boot_data |
end virtual |
virtual at OS_BASE + BOOT_VARS |
BOOT boot_data |
end virtual |
struct display_t |
x dd ? |
y dd ? |
972,14 → 965,3 |
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/memory.inc |
---|
1336,7 → 1336,7 |
align 4 |
proc print_mem |
mov edi, BOOT_VAR + BOOT_MEMMAP_BLOCKS |
mov edi, BOOT.memmap_blocks |
mov ecx, [edi-4] |
test ecx, ecx |
jz .done |
/kernel/trunk/core/mtrr.inc |
---|
10,7 → 10,7 |
; Initializes MTRRs. |
proc init_mtrr |
cmp [BOOT_VARS+BOOT_MTRR], byte 2 |
cmp [BOOT.mtrr], byte 2 |
je .exit |
bt [cpu_caps], CAPS_MTRR |
/kernel/trunk/core/mtrrtest.asm |
---|
112,6 → 112,11 |
include '../kglobals.inc' |
CAPS_MTRR equ 12 |
MSR_MTRR_DEF_TYPE equ 0x2FF |
CAPS_PGE equ 13 |
CAPS_PAT equ 16 |
MSR_CR_PAT equ 0x277 |
PAT_VALUE equ 0x00070106 ; (UC<<24)|(UCM<<16)|(WC<<8)|WB |
MEM_WB equ 6 ;write-back memory |
MEM_WC equ 1 ;write combined memory |
MEM_UC equ 0 ;uncached memory |
118,7 → 123,7 |
include 'mtrr.inc' |
BOOT_VARS = 0 |
BOOT_MTRR db 1 |
BOOT.mtrr db 1 |
align 4 |
cpu_caps dd 1 shl CAPS_MTRR |
LFBAddress dd 0xE0000000 |
/kernel/trunk/detect/biosdisk.inc |
---|
15,7 → 15,7 |
xor cx, cx |
mov es, cx |
mov di, BOOT_BIOS_HD |
mov di, BOOT_LO.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:BOOT_BIOS_HD_CNT] |
inc byte [es:BOOT_LO.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:BOOT_BIOS_HD_CNT] |
inc byte [es:BOOT_LO.bios_hd_cnt] |
mov al, dl |
stosb |
xor ax, ax |
/kernel/trunk/detect/biosmem.inc |
---|
17,8 → 17,8 |
xor ebx, ebx |
mov es, bx |
mov ds, bx |
mov di, BOOT_MEMMAP_BLOCKS |
mov [BOOT_MEMMAP_BLOCK_CNT], ebx ; no blocks yet |
mov di, BOOT_LO.memmap_blocks |
mov [BOOT_LO.memmap_block_cnt], ebx ; no blocks yet |
mov ecx, 20 |
mov edx, 'PAMS' ; 'SMAP' |
int 15h |
28,13 → 28,13 |
e820_mem_loop: |
; cmp byte [di+16], 1 ; ignore non-free areas |
; jnz e820_mem_next |
inc byte [BOOT_MEMMAP_BLOCK_CNT] |
inc byte [BOOT_LO.memmap_block_cnt] |
add di, sizeof.e820entry |
e820_mem_next: |
; consequent calls to fn E820 |
test ebx, ebx |
jz e820_test_done |
cmp byte [BOOT_MEMMAP_BLOCK_CNT], MAX_MEMMAP_BLOCKS |
cmp byte [BOOT_LO.memmap_block_cnt], MAX_MEMMAP_BLOCKS |
jz e820_test_done |
mov eax, 0xE820 |
int 15h |
/kernel/trunk/fs/parse_fn.inc |
---|
28,7 → 28,7 |
locals |
buff rb 4 ; for test cd |
endl |
mov ax, [OS_BASE+BOOT_BX_FROM_LOAD] |
mov ax, [BOOT.bx_from_load] |
mov ecx, sysdir_path |
mov [ecx-64], dword 'sys' |
mov [ecx-2], byte 3 |
/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 + BOOT_MEMMAP_BLOCK_CNT], 0 |
cmp dword [BOOT_LO.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 + BOOT_MEMMAP_BLOCK_CNT] |
inc dword [BOOT_LO.memmap_block_cnt] |
xor eax, 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 |
mov [BOOT_LO.memmap_blocks + e820entry.addr.lo], eax |
mov [BOOT_LO.memmap_blocks + e820entry.addr.hi], eax |
mov [BOOT_LO.memmap_blocks + e820entry.size.lo], edi |
mov [BOOT_LO.memmap_blocks + e820entry.size.hi], eax |
inc eax |
mov [BOOT_VARS-OS_BASE + BOOT_MEMMAP_BLOCKS + e820entry.type], eax |
mov [BOOT_LO.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 + BOOT_MEMMAP_BLOCKS |
mov edi, BOOT_LO.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 + BOOT_MEMMAP_BLOCKS |
mov ebx, BOOT_LO.memmap_blocks |
mov edx, [ebx-4] |
.scanmap: |
cmp [ebx+16], byte 1 |
459,7 → 459,7 |
if defined UEFI |
; UEFI loader knows where RSDP is |
mov ebx, [BOOT_ACPI_RSDP] |
mov ebx, [BOOT_LO.acpi_rsdp] |
test ebx, ebx |
jz .done |
call .check |
/kernel/trunk/kernel.asm |
---|
333,12 → 333,12 |
; --------------- APM --------------------- |
; init selectors |
mov ebx, [BOOT_VARS+BOOT_APM_ENTRY] ; offset of APM entry point |
movzx eax, word [BOOT_VARS+BOOT_APM_CODE_32] ; real-mode segment base address of |
mov ebx, [BOOT.apm_entry] ; offset of APM entry point |
movzx eax, word [BOOT.apm_code_32] ; real-mode segment base address of |
; protected-mode 32-bit code segment |
movzx ecx, word [BOOT_VARS+BOOT_APM_CODE_16]; real-mode segment base address of |
movzx ecx, word [BOOT.apm_code_16] ; real-mode segment base address of |
; protected-mode 16-bit code segment |
movzx edx, word [BOOT_VARS+BOOT_APM_DATA_16]; real-mode segment base address of |
movzx edx, word [BOOT.apm_data_16] ; real-mode segment base address of |
; protected-mode 16-bit data segment |
shl eax, 4 |
359,19 → 359,19 |
mov dword[apm_entry], ebx |
mov word [apm_entry + 4], apm_code_32 - gdts |
mov eax, [BOOT_VARS + BOOT_APM_VERSION] ; version & flags |
mov eax, dword[BOOT.apm_version] ; version & flags |
mov [apm_vf], eax |
; ----------------------------------------- |
mov al, [BOOT_VARS+BOOT_DMA] ; DMA access |
mov al, [BOOT.dma] ; DMA access |
mov [allow_dma_access], al |
mov al, [BOOT_VARS+BOOT_DEBUG_PRINT] ; If nonzero, duplicates debug output to the screen |
mov al, [BOOT.debug_print] ; If nonzero, duplicates debug output to the screen |
mov [debug_direct_print], al |
mov al, [BOOT_VARS+BOOT_LAUNCHER_START] ; Start the first app (LAUNCHER) after kernel is loaded? |
mov al, [BOOT.launcher_start] ; Start the first app (LAUNCHER) after kernel is loaded? |
mov [launcher_start], al |
mov esi, BOOT_VARS+BOOT_BIOS_HD |
mov esi, BOOT.bios_hd |
movzx ecx, byte [esi-1] |
mov [NumBiosDisks], ecx |
mov edi, BiosDisksData |
694,7 → 694,7 |
call PIT_init |
; Register ramdisk file system |
cmp byte [BOOT_DEV+OS_BASE+0x10000], 1 |
cmp byte [BOOT.dev+0x10000], 1 |
je @f |
call register_ramdisk |
785,7 → 785,7 |
include 'detect/init_ata.inc' |
;----------------------------------------------------------------------------- |
if 0 |
mov ax, [OS_BASE+BOOT_BX_FROM_LOAD] |
mov ax, [BOOT.bx_from_load] |
cmp ax, 'r1'; if using not ram disk, then load librares and parameters {SPraid.simba} |
je no_lib_load |
1294,10 → 1294,10 |
loop .fl60 |
push eax |
mov ax, [BOOT_VARS+BOOT_Y_RES] |
mov ax, [BOOT.y_res] |
shr ax, 1 |
shl eax, 16 |
mov ax, [BOOT_VARS+BOOT_X_RES] |
mov ax, [BOOT.x_res] |
shr ax, 1 |
mov [MOUSE_X], eax |
call wakeup_osloop |
2117,7 → 2117,7 |
jl exit_for_anyone |
cmp ecx, SYSTEM_RESTART |
jg exit_for_anyone |
mov [BOOT_VARS+BOOT_SHUTDOWN_TYPE], cl |
mov [BOOT.shutdown_type], cl |
mov eax, [TASK_COUNT] |
mov [SYS_SHUTDOWN], al |
/kernel/trunk/memmap.inc |
---|
9,6 → 9,7 |
; |
; Boot: |
; |
; BOOT_LO / boot_data structure |
; 0:9000 byte bits per pixel |
; 0:9001 word scanline length |
; 0:9008 word vesa video mode |
/kernel/trunk/video/framebuffer.inc |
---|
40,11 → 40,11 |
init_video: |
mov ebp, bios_fb |
movzx eax, byte [BOOT_VARS+BOOT_BPP] ; bpp |
movzx eax, byte [BOOT.bpp] ; bpp |
mov [_display.bits_per_pixel], eax |
mov [_display.vrefresh], 60 |
movzx eax, word [BOOT_VARS+BOOT_X_RES]; X max |
movzx eax, word [BOOT.x_res]; X max |
mov [_display.width], eax |
mov [ebp+FRB.width], eax |
mov [display_width_standard], eax |
51,7 → 51,7 |
dec eax |
mov [screen_workarea.right], eax |
movzx eax, word [BOOT_VARS+BOOT_Y_RES]; Y max |
movzx eax, word [BOOT.y_res]; Y max |
mov [_display.height], eax |
mov [ebp+FRB.height], eax |
mov [display_height_standard], eax |
58,7 → 58,7 |
dec eax |
mov [screen_workarea.bottom], eax |
movzx eax, word [BOOT_VARS+BOOT_VESA_MODE] ; screen mode |
movzx eax, word [BOOT.vesa_mode] ; screen mode |
mov dword [SCR_MODE], eax |
mov eax, 640 *4 ; Bytes PerScanLine |
cmp [SCR_MODE], word 0x13 ; 320x200 |
65,12 → 65,12 |
je @f |
cmp [SCR_MODE], word 0x12 ; VGA 640x480 |
je @f |
movzx eax, word[BOOT_VARS+BOOT_PITCH] ; for other modes |
movzx eax, word[BOOT.pitch] ; for other modes |
@@: |
mov [_display.lfb_pitch], eax |
mov [ebp+FRB.pitch], eax |
mov eax, [BOOT_VARS+BOOT_LFB] |
mov eax, [BOOT.lfb] |
mov [LFBAddress], eax |
mov eax, [_display.width] |
179,7 → 179,7 |
jmp .ok |
.fake: |
mov [BOOT_VARS+BOOT_MTRR], byte 2 |
mov [BOOT.mtrr], byte 2 |
stdcall alloc_kernel_space, 0x1000 |
push eax ;store in stack for subsequent |