mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-26 00:26:52 +03:00
not flat yet
git-svn-id: svn://kolibrios.org@388 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f591baba3e
commit
9140ef0cce
@ -9,7 +9,7 @@ uglobal
|
||||
endg
|
||||
|
||||
fdc_init: ;start with clean tracks.
|
||||
mov edi,0xD201
|
||||
mov edi,OS_BASE+0xD201
|
||||
mov al,0
|
||||
mov ecx,160
|
||||
rep stosb
|
||||
@ -22,7 +22,7 @@ fdc_filesave: ;ebx: cluster to be saved.
|
||||
mov bl,18
|
||||
div bl
|
||||
mov ah,0
|
||||
add eax,0xD201
|
||||
add eax,OS_BASE+0xD201
|
||||
mov [eax],byte 1 ;This track is now dirty.
|
||||
popa
|
||||
ret
|
||||
|
@ -25,7 +25,7 @@ hd_read:
|
||||
push ecx esi edi ; scan cache
|
||||
|
||||
mov ecx,cache_max ; entries in cache
|
||||
mov esi,0x600000+8
|
||||
mov esi,OS_BASE+0x600000+8
|
||||
mov edi,1
|
||||
|
||||
hdreadcache:
|
||||
@ -54,7 +54,7 @@ hd_read:
|
||||
call hd_read_pio
|
||||
@@:
|
||||
|
||||
lea esi,[edi*8+0x600000]
|
||||
lea esi,[edi*8+OS_BASE+0x600000]
|
||||
mov [esi],eax ; sector number
|
||||
mov dword [esi+4],1 ; hd read - mark as same as in hd
|
||||
|
||||
@ -62,7 +62,7 @@ hd_read:
|
||||
|
||||
mov esi,edi
|
||||
shl esi,9
|
||||
add esi,0x600000+65536
|
||||
add esi,OS_BASE+0x600000+65536
|
||||
mov edi,ebx
|
||||
mov ecx,512/4
|
||||
cld
|
||||
@ -77,7 +77,7 @@ hd_read_pio:
|
||||
|
||||
call wait_for_hd_idle
|
||||
cmp [hd_error],0
|
||||
jne hd_read_error
|
||||
jne hd_read_error
|
||||
|
||||
cli
|
||||
xor eax,eax
|
||||
@ -115,7 +115,7 @@ hd_read_pio:
|
||||
cli
|
||||
push edi
|
||||
shl edi,9
|
||||
add edi,0x600000+65536
|
||||
add edi,OS_BASE+0x600000+65536
|
||||
mov ecx,256
|
||||
mov edx,[hdbase]
|
||||
cld
|
||||
@ -126,7 +126,7 @@ hd_read_pio:
|
||||
pop edx eax
|
||||
ret
|
||||
|
||||
disable_ide_int:
|
||||
disable_ide_int:
|
||||
; mov edx,[hdbase]
|
||||
; add edx,0x206
|
||||
; mov al,2
|
||||
@ -153,7 +153,7 @@ hd_write:
|
||||
; check if the cache already has the sector and overwrite it
|
||||
|
||||
mov ecx,cache_max
|
||||
mov esi,0x600000+8
|
||||
mov esi,OS_BASE+0x600000+8
|
||||
mov edi,1
|
||||
|
||||
hdwritecache:
|
||||
@ -178,7 +178,7 @@ hd_write:
|
||||
cmp [hd_error],0
|
||||
jne hd_write_access_denied
|
||||
|
||||
lea esi,[edi*8+0x600000]
|
||||
lea esi,[edi*8+OS_BASE+0x600000]
|
||||
mov [esi],eax ; sector number
|
||||
|
||||
yes_in_cache_write:
|
||||
@ -186,7 +186,7 @@ hd_write:
|
||||
mov dword [esi+4],2 ; write - differs from hd
|
||||
|
||||
shl edi,9
|
||||
add edi,0x600000+65536
|
||||
add edi,OS_BASE+0x600000+65536
|
||||
mov esi,ebx
|
||||
mov ecx,512/4
|
||||
cld
|
||||
@ -205,7 +205,7 @@ write_cache:
|
||||
; write difference ( 2 ) from cache to hd
|
||||
|
||||
mov ecx,cache_max
|
||||
mov esi,0x600000+8
|
||||
mov esi,OS_BASE+0x600000+8
|
||||
mov edi,1
|
||||
|
||||
write_cache_more:
|
||||
@ -323,7 +323,7 @@ cache_write_pio:
|
||||
; cli
|
||||
mov esi,edi
|
||||
shl esi,9
|
||||
add esi,0x600000+65536 ; esi = from memory position
|
||||
add esi,OS_BASE+0x600000+65536 ; esi = from memory position
|
||||
mov ecx,256
|
||||
mov edx,[hdbase]
|
||||
cld
|
||||
@ -357,7 +357,7 @@ find_empty_slot:
|
||||
|
||||
inside_cache:
|
||||
|
||||
cmp dword [edi*8+0x600000+4],2 ; get cache slot info
|
||||
cmp dword [edi*8+OS_BASE+0x600000+4],2 ; get cache slot info
|
||||
jb found_slot ; it's empty or read
|
||||
dec ecx
|
||||
jnz search_for_empty
|
||||
@ -378,7 +378,7 @@ align 4
|
||||
clear_hd_cache:
|
||||
|
||||
push eax ecx edi
|
||||
mov edi,0x600000
|
||||
mov edi,OS_BASE+0x600000
|
||||
mov ecx,16384
|
||||
xor eax,eax
|
||||
cld
|
||||
@ -484,7 +484,7 @@ wait_for_hd_idle:
|
||||
in al,dx
|
||||
test al,128
|
||||
jnz wfhil1
|
||||
|
||||
|
||||
@@:
|
||||
|
||||
pop edx eax
|
||||
@ -574,7 +574,7 @@ iglobal
|
||||
align 4
|
||||
; note that IDE descriptor table must be 4-byte aligned and do not cross 4K boundary
|
||||
IDE_descriptor_table:
|
||||
dd 284000h
|
||||
dd OS_BASE+284000h
|
||||
dw 2000h
|
||||
dw 8000h
|
||||
|
||||
@ -607,16 +607,16 @@ hdd_irq14:
|
||||
out dx, al
|
||||
call update_counters
|
||||
mov ebx, [dma_process]
|
||||
cmp [0x3000], ebx
|
||||
cmp [CURRENT_TASK], ebx
|
||||
jz .noswitch
|
||||
mov [dma_task_switched], 1
|
||||
mov edi, [dma_slot_ptr]
|
||||
mov eax, [0x3000]
|
||||
mov eax, [CURRENT_TASK]
|
||||
mov [dma_process], eax
|
||||
mov eax, [0x3010]
|
||||
mov eax, [TASK_BASE]
|
||||
mov [dma_slot_ptr], eax
|
||||
mov [0x3000], ebx
|
||||
mov [0x3010], edi
|
||||
mov [CURRENT_TASK], ebx
|
||||
mov [TASK_BASE], edi
|
||||
mov byte [0xFFFF], 1
|
||||
call do_change_task
|
||||
.noswitch:
|
||||
@ -638,16 +638,16 @@ hdd_irq15:
|
||||
out dx, al
|
||||
call update_counters
|
||||
mov ebx, [dma_process]
|
||||
cmp [0x3000], ebx
|
||||
cmp [CURRENT_TASK], ebx
|
||||
jz .noswitch
|
||||
mov [dma_task_switched], 1
|
||||
mov edi, [dma_slot_ptr]
|
||||
mov eax, [0x3000]
|
||||
mov eax, [CURRENT_TASK]
|
||||
mov [dma_process], eax
|
||||
mov eax, [0x3010]
|
||||
mov eax, [TASK_BASE]
|
||||
mov [dma_slot_ptr], eax
|
||||
mov [0x3000], ebx
|
||||
mov [0x3010], edi
|
||||
mov [CURRENT_TASK], ebx
|
||||
mov [TASK_BASE], edi
|
||||
mov byte [0xFFFF], 1
|
||||
call do_change_task
|
||||
.noswitch:
|
||||
@ -668,11 +668,11 @@ hd_read_dma:
|
||||
mov eax, [esp+4]
|
||||
sub eax, [dma_cur_sector]
|
||||
shl eax, 9
|
||||
add eax, 0x284000
|
||||
add eax, OS_BASE+0x284000
|
||||
push ecx esi edi
|
||||
mov esi, eax
|
||||
shl edi, 9
|
||||
add edi, 0x610000
|
||||
add edi, OS_BASE+0x610000
|
||||
mov ecx, 512/4
|
||||
cld
|
||||
rep movsd
|
||||
@ -681,9 +681,9 @@ hd_read_dma:
|
||||
pop eax
|
||||
ret
|
||||
.notread:
|
||||
mov eax, IDE_descriptor_table
|
||||
mov dword [eax], 0x284000
|
||||
mov word [eax+4], 0x2000
|
||||
mov eax, IDE_descriptor_table-OS_BASE
|
||||
mov dword [eax+OS_BASE], 0x284000
|
||||
mov word [eax+4+OS_BASE], 0x2000
|
||||
mov dx, [IDEContrRegsBaseAddr]
|
||||
cmp [hdbase], 0x1F0
|
||||
jz @f
|
||||
@ -734,9 +734,9 @@ hd_read_dma:
|
||||
@@:
|
||||
mov al, 9
|
||||
out dx, al
|
||||
mov eax, [0x3000]
|
||||
mov eax, [CURRENT_TASK]
|
||||
mov [dma_process], eax
|
||||
mov eax, [0x3010]
|
||||
mov eax, [TASK_BASE]
|
||||
mov [dma_slot_ptr], eax
|
||||
cmp [hdbase], 0x1F0
|
||||
jnz .ide1
|
||||
@ -766,7 +766,7 @@ write_cache_chain:
|
||||
mov eax, IDE_descriptor_table
|
||||
mov edx, [cache_chain_pos]
|
||||
shl edx, 9
|
||||
add edx, 0x610000
|
||||
add edx, OS_BASE+0x610000
|
||||
mov [eax], edx
|
||||
movzx edx, [cache_chain_size]
|
||||
shl edx, 9
|
||||
@ -777,7 +777,7 @@ write_cache_sector:
|
||||
mov eax, IDE_descriptor_table
|
||||
mov edx, edi
|
||||
shl edx, 9
|
||||
add edx, 0x610000
|
||||
add edx, OS_BASE+0x610000
|
||||
mov [eax], edx
|
||||
mov word [eax+4], 0x200
|
||||
do_write_dma:
|
||||
@ -832,9 +832,9 @@ do_write_dma:
|
||||
@@:
|
||||
mov al, 1
|
||||
out dx, al
|
||||
mov eax, [0x3000]
|
||||
mov eax, [CURRENT_TASK]
|
||||
mov [dma_process], eax
|
||||
mov eax, [0x3010]
|
||||
mov eax, [TASK_BASE]
|
||||
mov [dma_slot_ptr], eax
|
||||
cmp [hdbase], 0x1F0
|
||||
jnz .ide1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -112,7 +112,7 @@ mode1 db "640x480",0
|
||||
mode2 db "800x600",0
|
||||
mode3 db "1024x768",0
|
||||
mode4 db "1280x1024",0
|
||||
modes_msg dw mode4-0x10000,mode1-0x10000,mode2-0x10000,mode3-0x10000
|
||||
modes_msg dw mode4,mode1,mode2,mode3
|
||||
modevesa20 db " á LFB",0
|
||||
modevesa12 db ", VESA 1.2 Bnk",0
|
||||
mode9 db "320x200, EGA/CGA 256 梥⮢",0
|
||||
@ -124,7 +124,7 @@ on_msg db "
|
||||
off_msg db " ¢ëª«",13,10,0
|
||||
vrrm_msg db " [c] ˆá¯®«ì§®¢ ¨¥ VRR:",0
|
||||
preboot_device_msg db " [d] Ž¡à § ¤¨áª¥âë: ",0
|
||||
preboot_device_msgs dw 0,pdm1-0x10000,pdm2-0x10000,pdm3-0x10000
|
||||
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
||||
pdm1 db " áâ®ïé ï ¤¨áª¥â ",13,10,0
|
||||
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||
pdm3 db "¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §",13,10,0
|
||||
|
@ -16,7 +16,7 @@ preboot_device db 0 ; boot device
|
||||
;!!!! 0 - autodetect !!!!
|
||||
preboot_blogesc db 1 ; start immediately after bootlog
|
||||
|
||||
if $>10200h
|
||||
if $>0x200
|
||||
ERROR: prebooting parameters must fit in first sector!!!
|
||||
end if
|
||||
hdsysimage db 'KOLIBRI IMG' ; load from
|
||||
|
@ -1,9 +1,9 @@
|
||||
; READ RAMDISK IMAGE FROM HD
|
||||
|
||||
cmp [boot_dev],1
|
||||
cmp [boot_dev+OS_BASE+0x10000],1
|
||||
jne no_sys_on_hd
|
||||
|
||||
test [0x40001],byte 0x40
|
||||
test [DRIVE_DATA+1],byte 0x40
|
||||
jz position_2
|
||||
mov [hdbase],0x1f0
|
||||
mov [hdid],0x0
|
||||
@ -14,11 +14,11 @@
|
||||
call search_and_read_image
|
||||
cmp [image_retrieved],1
|
||||
je yes_sys_on_hd
|
||||
movzx eax,byte [0x40002]
|
||||
movzx eax,byte [DRIVE_DATA+2]
|
||||
cmp [fat32part],eax
|
||||
jle position_1_1
|
||||
position_2:
|
||||
test [0x40001],byte 0x10
|
||||
test [DRIVE_DATA+1],byte 0x10
|
||||
jz position_3
|
||||
mov [hdbase],0x1f0
|
||||
mov [hdid],0x10
|
||||
@ -29,11 +29,11 @@
|
||||
call search_and_read_image
|
||||
cmp [image_retrieved],1
|
||||
je yes_sys_on_hd
|
||||
movzx eax,byte [0x40003]
|
||||
movzx eax,byte [DRIVE_DATA+3]
|
||||
cmp eax,[fat32part]
|
||||
jle position_2_1
|
||||
position_3:
|
||||
test [0x40001],byte 0x4
|
||||
test [DRIVE_DATA+1],byte 0x4
|
||||
jz position_4
|
||||
mov [hdbase],0x170
|
||||
mov [hdid],0x0
|
||||
@ -44,11 +44,11 @@
|
||||
call search_and_read_image
|
||||
cmp [image_retrieved],1
|
||||
je yes_sys_on_hd
|
||||
movzx eax,byte [0x40004]
|
||||
movzx eax,byte [DRIVE_DATA+4]
|
||||
cmp eax,[fat32part]
|
||||
jle position_3_1
|
||||
position_4:
|
||||
test [0x40001],byte 0x1
|
||||
test [DRIVE_DATA+1],byte 0x1
|
||||
jz no_sys_on_hd
|
||||
mov [hdbase],0x170
|
||||
mov [hdid],0x10
|
||||
@ -59,7 +59,7 @@
|
||||
call search_and_read_image
|
||||
cmp [image_retrieved],1
|
||||
je yes_sys_on_hd
|
||||
movzx eax,byte [0x40005]
|
||||
movzx eax,byte [DRIVE_DATA+5]
|
||||
cmp eax,[fat32part]
|
||||
jle position_4_1
|
||||
jmp yes_sys_on_hd
|
||||
@ -80,7 +80,7 @@
|
||||
ret
|
||||
|
||||
read_image:
|
||||
mov eax, hdsysimage
|
||||
mov eax, hdsysimage+OS_BASE+0x10000
|
||||
mov ebx, 1474560/512
|
||||
mov ecx, RAMDISK
|
||||
mov esi, 0
|
||||
|
@ -16,15 +16,15 @@ system_shutdown: ; shut down the system
|
||||
call sys_cd_audio
|
||||
cld
|
||||
|
||||
mov al,[0x2f0000+0x9030]
|
||||
mov al,[BOOT_VAR+0x9030]
|
||||
cmp al,1
|
||||
jl no_shutdown_parameter
|
||||
cmp al,4
|
||||
jle yes_shutdown_param
|
||||
no_shutdown_parameter:
|
||||
|
||||
; movzx ecx,word [0x2f0000+0x900A]
|
||||
; movzx esi,word [0x2f0000+0x900C]
|
||||
; movzx ecx,word [BOOT_VAR+0x900A]
|
||||
; movzx esi,word [BOOT_VAR+0x900C]
|
||||
; imul ecx,esi ;[0xfe04]
|
||||
;; mov ecx,0x500000/4 ;3fff00/4 ; darken screen
|
||||
; push ecx
|
||||
@ -378,7 +378,7 @@ restart_kernel_4000:
|
||||
; bootloader interface
|
||||
push 0x1000
|
||||
pop ds
|
||||
mov si, kernel_restart_bootblock-0x10000
|
||||
mov si, kernel_restart_bootblock
|
||||
mov ax, 'KL'
|
||||
jmp 0x1000:0000
|
||||
|
||||
|
@ -134,9 +134,9 @@ SSE_FZ equ 0x8000
|
||||
|
||||
SSE_INIT equ (SSE_IM+SSE_DM+SSE_ZM+SSE_OM+SSE_UM+SSE_PM)
|
||||
|
||||
OS_BASE equ 0
|
||||
OS_BASE equ 0x01000000
|
||||
|
||||
window_data equ (OS_BASE+0x0000000)
|
||||
window_data equ OS_BASE
|
||||
|
||||
CURRENT_TASK equ (OS_BASE+0x0003000)
|
||||
TASK_COUNT equ (OS_BASE+0x0003004)
|
||||
@ -196,7 +196,6 @@ MOUSE_BUFF_COUNT equ (OS_BASE+0x000FCFF)
|
||||
|
||||
LFBAddress equ (OS_BASE+0x000FE80)
|
||||
MEM_AMOUNT equ (OS_BASE+0x000FE8C)
|
||||
;LFBSize equ (OS_BASE+0x02f9050)
|
||||
|
||||
ScreenWidth equ (OS_BASE+0x000FE00)
|
||||
ScreenHeight equ (OS_BASE+0x000FE04)
|
||||
@ -235,7 +234,7 @@ SB16_Status equ (OS_BASE+0x02B0000)
|
||||
BUTTON_INFO equ (OS_BASE+0x02C0000)
|
||||
RESERVED_PORTS equ (OS_BASE+0x02D0000)
|
||||
IRQ_SAVE equ (OS_BASE+0x02E0000)
|
||||
SYS_VAR equ (OS_BASE+0x02f0000)
|
||||
BOOT_VAR equ (OS_BASE+0x02f0000)
|
||||
IMG_BACKGROUND equ (OS_BASE+0x0300000)
|
||||
WinMapAddress equ (OS_BASE+0x0460000)
|
||||
display_data equ (OS_BASE+0x0460000)
|
||||
@ -256,7 +255,7 @@ skin_data equ (OS_BASE+0x0778000)
|
||||
tss_data equ (OS_BASE+0x780000)
|
||||
draw_data equ (OS_BASE+0x988000)
|
||||
|
||||
HEAP_BASE equ (OS_BASE+0x98B000)
|
||||
HEAP_BASE equ (OS_BASE+0x01000000)
|
||||
|
||||
LFB_BASE equ 0x7DC00000
|
||||
|
||||
@ -264,10 +263,8 @@ page_tabs equ 0x7FC00000
|
||||
master_tab equ 0x7FDFF000
|
||||
app_page_tabs equ 0x7FE00000
|
||||
|
||||
sys_pgdir equ OS_BASE+0x00050000
|
||||
sys_master_tab equ OS_BASE+0x00051000
|
||||
sys_pgmap equ OS_BASE+0x00052000
|
||||
|
||||
sys_pgdir equ (OS_BASE+0x00050000)
|
||||
sys_pgmap equ (OS_BASE+0x00052000)
|
||||
|
||||
|
||||
new_app_base equ 0x80000000
|
||||
@ -330,10 +327,6 @@ struc SYS_VARS
|
||||
.vesa_mode dd ?
|
||||
.x_res dd ?
|
||||
.y_res dd ?
|
||||
.cpu_caps dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
}
|
||||
|
||||
struc APPOBJ ;common object header
|
||||
|
@ -1038,21 +1038,3 @@ destroy_kernel_object:
|
||||
ret
|
||||
|
||||
|
||||
;szSound db 'SOUND',0
|
||||
;szInfinity db 'INFINITY',0
|
||||
szHwMouse db 'ATI2D',0
|
||||
|
||||
szSTART db 'START',0
|
||||
szEXPORTS db 'EXPORTS',0
|
||||
szIMPORTS db 'IMPORTS',0
|
||||
|
||||
msg_unresolved db 'unresolved ',0
|
||||
msg_module db 'in module ',0
|
||||
msg_version db 'incompatible driver version',13,10,0
|
||||
msg_www db 'please visit www.kolibrios.org',13,10,0
|
||||
msg_CR db 13,10,0
|
||||
|
||||
align 4
|
||||
create_cursor dd 0
|
||||
set_hw_cursor dd 0
|
||||
hw_restore dd 0
|
||||
|
@ -1,160 +1,4 @@
|
||||
|
||||
tmp_page_tab equ HEAP_BASE
|
||||
|
||||
align 4
|
||||
proc mem_test
|
||||
|
||||
mov eax, cr0
|
||||
and eax, not (CR0_CD+CR0_NW)
|
||||
or eax, CR0_CD ;disable caching
|
||||
mov cr0, eax
|
||||
wbinvd ;invalidate cache
|
||||
|
||||
xor edi, edi
|
||||
mov ebx, 'TEST'
|
||||
@@:
|
||||
add edi, 0x400000
|
||||
xchg ebx, dword [edi]
|
||||
cmp dword [edi], 'TEST'
|
||||
xchg ebx, dword [edi]
|
||||
je @b
|
||||
mov [MEM_AMOUNT], edi
|
||||
|
||||
and eax, not (CR0_CD+CR0_NW) ;enable caching
|
||||
mov cr0, eax
|
||||
mov eax, edi
|
||||
mov [LFBSize], 0x00800000
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc init_mem
|
||||
|
||||
mov eax, [MEM_AMOUNT]
|
||||
|
||||
mov [pg_data.mem_amount], eax
|
||||
mov [pg_data.kernel_max], eax
|
||||
|
||||
shr eax, 12
|
||||
mov edx, eax
|
||||
mov [pg_data.pages_count], eax
|
||||
mov [pg_data.kernel_pages], eax
|
||||
|
||||
shr eax, 3
|
||||
mov [pg_data.pagemap_size], eax
|
||||
|
||||
shr edx, 10
|
||||
cmp edx, 3
|
||||
ja @f
|
||||
inc edx ;at least 4Mb for kernel heap
|
||||
@@:
|
||||
mov [pg_data.kernel_tables], edx
|
||||
|
||||
xor eax, eax
|
||||
mov edi, sys_pgdir
|
||||
mov ecx, 2048
|
||||
cld
|
||||
rep stosd
|
||||
|
||||
mov edx, sys_pgdir
|
||||
bt [cpu_caps], CAPS_PSE
|
||||
jnc .no_PSE
|
||||
|
||||
mov ebx, cr4
|
||||
or ebx, CR4_PSE
|
||||
mov eax, PG_LARGE+PG_SW
|
||||
bt [cpu_caps], CAPS_PGE
|
||||
jnc @F
|
||||
or eax, PG_GLOBAL
|
||||
or ebx, CR4_PGE
|
||||
@@:
|
||||
mov cr4, ebx
|
||||
sub [pg_data.kernel_tables], 2
|
||||
|
||||
mov [edx], eax
|
||||
add eax, 0x00400000
|
||||
mov [edx+4], eax
|
||||
add edx, 8
|
||||
|
||||
mov eax, 0x800000+PG_SW
|
||||
mov ecx, (HEAP_BASE-0x800000)/4096
|
||||
jmp .map_low
|
||||
.no_PSE:
|
||||
mov eax, PG_SW
|
||||
mov ecx, HEAP_BASE/4096
|
||||
.map_low:
|
||||
mov edi, tmp_page_tab
|
||||
@@: ;
|
||||
stosd
|
||||
add eax, 0x1000
|
||||
dec ecx
|
||||
jnz @B
|
||||
|
||||
mov ecx, [pg_data.kernel_tables]
|
||||
shl ecx, 10
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
|
||||
mov ecx, [pg_data.kernel_tables]
|
||||
mov eax, tmp_page_tab+PG_SW
|
||||
mov edi, edx
|
||||
|
||||
.map_kernel_tabs:
|
||||
|
||||
stosd
|
||||
add eax, 0x1000
|
||||
dec ecx
|
||||
jnz .map_kernel_tabs
|
||||
|
||||
mov dword [sys_pgdir+(page_tabs shr 20)], sys_pgdir+PG_SW
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc init_page_map
|
||||
|
||||
mov edi, sys_pgmap
|
||||
mov ecx, (HEAP_BASE/4096)/32 ;384/4
|
||||
mov ebx, ecx
|
||||
xor eax,eax
|
||||
cld
|
||||
rep stosd
|
||||
|
||||
not eax
|
||||
mov ecx, [pg_data.pagemap_size]
|
||||
sub ecx, ebx
|
||||
shr ecx, 2
|
||||
rep stosd
|
||||
|
||||
lea edi, [sys_pgmap+ebx*4] ;+384
|
||||
mov edx, [pg_data.pages_count]
|
||||
mov ecx, [pg_data.kernel_tables]
|
||||
add ecx, (HEAP_BASE/4096) and 31
|
||||
sub edx, HEAP_BASE/4096
|
||||
sub edx, ecx
|
||||
mov [pg_data.pages_free], edx
|
||||
|
||||
xor eax, eax
|
||||
mov ebx, ecx
|
||||
shr ecx, 5
|
||||
rep stosd
|
||||
|
||||
not eax
|
||||
mov ecx, ebx
|
||||
and ecx, 31
|
||||
shl eax, cl
|
||||
mov [page_start], edi; sys_pgmap+384
|
||||
stosd
|
||||
|
||||
mov ebx, sys_pgmap
|
||||
add ebx, [pg_data.pagemap_size]
|
||||
mov [page_end], ebx
|
||||
|
||||
mov [pg_data.pg_mutex], 0
|
||||
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc alloc_page
|
||||
|
||||
@ -382,21 +226,29 @@ proc init_LFB
|
||||
|
||||
cmp dword [LFBAddress], -1
|
||||
jne @f
|
||||
mov [0x2f0000+0x901c],byte 2
|
||||
mov [BOOT_VAR+0x901c],byte 2
|
||||
stdcall kernel_alloc, 0x280000
|
||||
mov [LFBAddress], eax
|
||||
ret
|
||||
@@:
|
||||
test [SCR_MODE],word 0100000000000000b
|
||||
jnz @f
|
||||
mov [0x2f0000+0x901c],byte 2
|
||||
mov [BOOT_VAR+0x901c],byte 2
|
||||
ret
|
||||
@@:
|
||||
mov edx, LFB_BASE
|
||||
mov esi, [LFBAddress]
|
||||
mov edi, [LFBSize]
|
||||
mov edi, 0x00800000
|
||||
mov dword [exp_lfb+4], edx
|
||||
|
||||
push eax
|
||||
push edx
|
||||
mov edx, 0x400 ;bocsh
|
||||
mov al,0xff ;bocsh
|
||||
out dx, al ;bocsh
|
||||
pop edx
|
||||
pop eax
|
||||
|
||||
shr edi, 12
|
||||
mov [pg_count], edi
|
||||
shr edi, 10
|
||||
@ -427,7 +279,7 @@ proc init_LFB
|
||||
@@:
|
||||
call alloc_page
|
||||
stdcall map_page_table, edx, eax
|
||||
add esi, 0x00400000
|
||||
add edx, 0x00400000
|
||||
dec edi
|
||||
jnz @B
|
||||
|
||||
@ -436,7 +288,11 @@ proc init_LFB
|
||||
or eax, PG_UW
|
||||
mov ecx, [pg_count]
|
||||
cld
|
||||
rep stosd
|
||||
@@:
|
||||
stosd
|
||||
add eax, 0x1000
|
||||
dec ecx
|
||||
jnz @B
|
||||
|
||||
mov dword [LFBAddress], LFB_BASE
|
||||
mov eax, cr3 ;flush TLB
|
||||
@ -605,6 +461,14 @@ align 4
|
||||
proc page_fault_handler
|
||||
pushad
|
||||
|
||||
push eax
|
||||
push edx
|
||||
mov edx, 0x400 ;bocsh
|
||||
mov al,0xff ;bocsh
|
||||
out dx, al ;bocsh
|
||||
pop edx
|
||||
pop eax
|
||||
|
||||
mov ebp, esp
|
||||
mov eax, cr2
|
||||
push eax
|
||||
@ -670,6 +534,7 @@ proc page_fault_handler
|
||||
mov esp, ebp
|
||||
popad
|
||||
add esp, 4
|
||||
iretd
|
||||
|
||||
save_ring3_context ;debugger support
|
||||
|
||||
@ -1085,148 +950,10 @@ new_services:
|
||||
mov [esp+36], eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
proc strncmp stdcall, str1:dword, str2:dword, count:dword
|
||||
|
||||
mov ecx,[count]
|
||||
jecxz .end
|
||||
|
||||
mov ebx,ecx
|
||||
|
||||
mov edi,[str1]
|
||||
mov esi,edi
|
||||
xor eax,eax
|
||||
repne scasb
|
||||
neg ecx ; cx = count - strlen
|
||||
add ecx,ebx ; strlen + count - strlen
|
||||
|
||||
.okay:
|
||||
mov edi,esi
|
||||
mov esi,[str2]
|
||||
repe cmpsb
|
||||
mov al,[esi-1]
|
||||
xor ecx,ecx
|
||||
|
||||
cmp al,[edi-1]
|
||||
ja .str2_big
|
||||
je .end
|
||||
|
||||
.str1_big:
|
||||
sub ecx,2
|
||||
|
||||
.str2_big:
|
||||
not ecx
|
||||
.end:
|
||||
mov eax,ecx
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc test_cpu
|
||||
locals
|
||||
cpu_type dd ?
|
||||
cpu_id dd ?
|
||||
cpu_Intel dd ?
|
||||
cpu_AMD dd ?
|
||||
endl
|
||||
|
||||
mov [cpu_type], 0
|
||||
xor eax, eax
|
||||
mov [cpu_caps], eax
|
||||
mov [cpu_caps+4], eax
|
||||
|
||||
pushfd
|
||||
pop eax
|
||||
mov ecx, eax
|
||||
xor eax, 0x40000
|
||||
push eax
|
||||
popfd
|
||||
pushfd
|
||||
pop eax
|
||||
xor eax, ecx
|
||||
mov [cpu_type], CPU_386
|
||||
jz .end_cpuid
|
||||
push ecx
|
||||
popfd
|
||||
|
||||
mov [cpu_type], CPU_486
|
||||
mov eax, ecx
|
||||
xor eax, 0x200000
|
||||
push eax
|
||||
popfd
|
||||
pushfd
|
||||
pop eax
|
||||
xor eax, ecx
|
||||
je .end_cpuid
|
||||
mov [cpu_id], 1
|
||||
|
||||
xor eax, eax
|
||||
cpuid
|
||||
mov [cpu_vendor], ebx
|
||||
mov [cpu_vendor+4], edx
|
||||
mov [cpu_vendor+8], ecx
|
||||
cmp ebx, dword [intel_str]
|
||||
jne .check_AMD
|
||||
cmp edx, dword [intel_str+4]
|
||||
jne .check_AMD
|
||||
cmp ecx, dword [intel_str+8]
|
||||
jne .check_AMD
|
||||
mov [cpu_Intel], 1
|
||||
cmp eax, 1
|
||||
jl .end_cpuid
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [cpu_sign], eax
|
||||
mov [cpu_info], ebx
|
||||
mov [cpu_caps], edx
|
||||
mov [cpu_caps+4],ecx
|
||||
|
||||
shr eax, 8
|
||||
and eax, 0x0f
|
||||
ret
|
||||
.end_cpuid:
|
||||
mov eax, [cpu_type]
|
||||
ret
|
||||
|
||||
.check_AMD:
|
||||
cmp ebx, dword [AMD_str]
|
||||
jne .unknown
|
||||
cmp edx, dword [AMD_str+4]
|
||||
jne .unknown
|
||||
cmp ecx, dword [AMD_str+8]
|
||||
jne .unknown
|
||||
mov [cpu_AMD], 1
|
||||
cmp eax, 1
|
||||
jl .unknown
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [cpu_sign], eax
|
||||
mov [cpu_info], ebx
|
||||
mov [cpu_caps], edx
|
||||
mov [cpu_caps+4],ecx
|
||||
shr eax, 8
|
||||
and eax, 0x0f
|
||||
ret
|
||||
.unknown:
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [cpu_sign], eax
|
||||
mov [cpu_info], ebx
|
||||
mov [cpu_caps], edx
|
||||
mov [cpu_caps+4],ecx
|
||||
shr eax, 8
|
||||
and eax, 0x0f
|
||||
ret
|
||||
endp
|
||||
|
||||
MEM_WB equ 6 ;write-back memory
|
||||
MEM_WC equ 1 ;write combined memory
|
||||
MEM_UC equ 0 ;uncached memory
|
||||
|
||||
align 4
|
||||
proc init_mtrr
|
||||
|
||||
cmp [0x2f0000+0x901c],byte 2
|
||||
cmp [BOOT_VAR+0x901c],byte 2
|
||||
je .exit
|
||||
|
||||
bt [cpu_caps], CAPS_MTRR
|
||||
@ -1297,6 +1024,43 @@ proc set_mtrr stdcall, reg:dword,base:dword,size:dword,mem_type:dword
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
align 4
|
||||
proc strncmp stdcall, str1:dword, str2:dword, count:dword
|
||||
|
||||
mov ecx,[count]
|
||||
jecxz .end
|
||||
|
||||
mov ebx,ecx
|
||||
|
||||
mov edi,[str1]
|
||||
mov esi,edi
|
||||
xor eax,eax
|
||||
repne scasb
|
||||
neg ecx ; cx = count - strlen
|
||||
add ecx,ebx ; strlen + count - strlen
|
||||
|
||||
.okay:
|
||||
mov edi,esi
|
||||
mov esi,[str2]
|
||||
repe cmpsb
|
||||
mov al,[esi-1]
|
||||
xor ecx,ecx
|
||||
|
||||
cmp al,[edi-1]
|
||||
ja .str2_big
|
||||
je .end
|
||||
|
||||
.str1_big:
|
||||
sub ecx,2
|
||||
|
||||
.str2_big:
|
||||
not ecx
|
||||
.end:
|
||||
mov eax,ecx
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc stall stdcall, delay:dword
|
||||
push ecx
|
||||
@ -1324,106 +1088,6 @@ proc stall stdcall, delay:dword
|
||||
ret
|
||||
endp
|
||||
|
||||
iglobal
|
||||
align 4
|
||||
intel_str db "GenuineIntel",0
|
||||
AMD_str db "AuthenticAMD",0
|
||||
endg
|
||||
|
||||
uglobal
|
||||
align 16
|
||||
irq_tab rd 16
|
||||
|
||||
MEM_FreeSpace rd 1
|
||||
|
||||
ipc_tmp rd 1
|
||||
ipc_pdir rd 1
|
||||
ipc_ptab rd 1
|
||||
|
||||
proc_mem_map rd 1
|
||||
proc_mem_pdir rd 1
|
||||
proc_mem_tab rd 1
|
||||
|
||||
tmp_task_pdir rd 1
|
||||
tmp_task_ptab rd 1
|
||||
|
||||
fdd_buff rd 1
|
||||
LFBSize rd 1
|
||||
|
||||
stall_mcs rd 1
|
||||
;;CPUID information
|
||||
|
||||
cpu_vendor rd 3
|
||||
cpu_sign rd 1
|
||||
cpu_info rd 1
|
||||
|
||||
;;;;; cursors data
|
||||
|
||||
align 16
|
||||
cur_saved_data rb 4096
|
||||
|
||||
def_cursor rd 1
|
||||
hw_cursor rd 1
|
||||
|
||||
scr_width rd 1
|
||||
scr_height rd 1
|
||||
|
||||
cur_def_interl rd 1
|
||||
cur_saved_base rd 1
|
||||
cur_saved_interl rd 1
|
||||
cur_saved_w rd 1
|
||||
cur_saved_h rd 1
|
||||
|
||||
endg
|
||||
|
||||
uglobal
|
||||
align 16
|
||||
fpu_data:
|
||||
rb 512
|
||||
|
||||
mst MEM_STATE
|
||||
|
||||
mem_block_map rb 512
|
||||
event_map rb 64
|
||||
mem_block_list rd 64
|
||||
mem_block_mask rd 2
|
||||
|
||||
srv.fd rd 1
|
||||
srv.bk rd 1
|
||||
|
||||
mem_used.fd rd 1
|
||||
mem_used.bk rd 1
|
||||
|
||||
mem_block_arr rd 1
|
||||
mem_block_start rd 1
|
||||
mem_block_end rd 1
|
||||
|
||||
heap_mutex rd 1
|
||||
heap_size rd 1
|
||||
heap_free rd 1
|
||||
heap_blocks rd 1
|
||||
free_blocks rd 1
|
||||
|
||||
page_start rd 1
|
||||
page_end rd 1
|
||||
events rd 1
|
||||
event_start rd 1
|
||||
event_end rd 1
|
||||
event_uid rd 1
|
||||
sys_page_map rd 1
|
||||
os_stack rd 1
|
||||
endg
|
||||
|
||||
if 0
|
||||
push eax
|
||||
push edx
|
||||
mov edx, 0x400 ;bocsh
|
||||
mov al,0xff ;bocsh
|
||||
out dx, al ;bocsh
|
||||
pop edx
|
||||
pop eax
|
||||
end if
|
||||
|
||||
align 4
|
||||
k_strrchr:
|
||||
push eax
|
||||
@ -1643,3 +1307,15 @@ k_strlen:
|
||||
ret
|
||||
|
||||
end if
|
||||
|
||||
if 0
|
||||
push eax
|
||||
push edx
|
||||
mov edx, 0x400 ;bocsh
|
||||
mov al,0xff ;bocsh
|
||||
out dx, al ;bocsh
|
||||
pop edx
|
||||
pop eax
|
||||
end if
|
||||
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
align 4
|
||||
idtreg:
|
||||
dw 8*0x41-1
|
||||
dd idts+8
|
||||
|
@ -1119,13 +1119,5 @@ proc set_app_params stdcall,slot:dword, params:dword,\
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
|
||||
include "debug.inc"
|
||||
|
||||
iglobal
|
||||
new_process_loading db 'K : New Process - loading',13,10,0
|
||||
new_process_running db 'K : New Process - done',13,10,0
|
||||
start_not_enough_memory db 'K : New Process - not enough memory',13,10,0
|
||||
endg
|
||||
|
||||
|
41
kernel/branches/flat_kernel/data16.inc
Normal file
41
kernel/branches/flat_kernel/data16.inc
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
preboot_lfb db 0
|
||||
preboot_bootlog db 0
|
||||
|
||||
old_ints_h:
|
||||
dw 0x400
|
||||
dd 0
|
||||
dw 0
|
||||
|
||||
kernel_restart_bootblock:
|
||||
db 1 ; version
|
||||
dw 1 ; floppy image is in memory
|
||||
dd 0 ; cannot save parameters
|
||||
|
||||
align 4
|
||||
; videomodes table
|
||||
gr_table:
|
||||
dw 0x112+0100000000000000b , 640 , 480 ; 1
|
||||
dw 0x115+0100000000000000b , 800 , 600 ; 2
|
||||
dw 0x118+0100000000000000b , 1024 , 768 ; 3
|
||||
dw 0x11B+0100000000000000b , 1280 , 1024 ; 4
|
||||
dw 0x112 , 640 , 480 ; 5
|
||||
dw 0x115 , 800 , 600 ; 6
|
||||
dw 0x118 , 1024 , 768 ; 7
|
||||
dw 0x11B , 1280 ,1024 ; 8
|
||||
dw 0x13, 640, 480 ; 9
|
||||
dw 0x12, 640, 480 ; 0
|
||||
|
||||
; table for move to extended memory (int 15h, ah=87h)
|
||||
align 8
|
||||
movedesc:
|
||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||
|
||||
db 0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0
|
||||
db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0
|
||||
|
||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
329
kernel/branches/flat_kernel/data32.inc
Normal file
329
kernel/branches/flat_kernel/data32.inc
Normal file
@ -0,0 +1,329 @@
|
||||
|
||||
keymap:
|
||||
|
||||
db '6',27
|
||||
db '1234567890-=',8,9
|
||||
db 'qwertyuiop[]',13
|
||||
db '~asdfghjkl;',39,96,0,'\zxcvbnm,./',0,'45 '
|
||||
db '@234567890123',180,178,184,'6',176,'7'
|
||||
db 179,'8',181,177,183,185,182
|
||||
db 'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
keymap_shift:
|
||||
db '6',27
|
||||
db '!@#$%^&*()_+',8,9
|
||||
db 'QWERTYUIOP{}',13
|
||||
db '~ASDFGHJKL:"~',0,'|ZXCVBNM<>?',0,'45 '
|
||||
db '@234567890123',180,178,184,'6',176,'7'
|
||||
db 179,'8',181,177,183,185,182
|
||||
db 'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
keymap_alt:
|
||||
db ' ',27
|
||||
db ' @ $ {[]}\ ',8,9
|
||||
db ' ',13
|
||||
db ' ',0,' ',0,'4',0,' '
|
||||
db ' ',180,178,184,'6',176,'7'
|
||||
db 179,'8',181,177,183,185,182
|
||||
db 'ABCD',255,'FGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
|
||||
boot_memdetect db 'Determining amount of memory',0
|
||||
boot_fonts db 'Fonts loaded',0
|
||||
boot_tss db 'Setting TSSs',0
|
||||
boot_cpuid db 'Reading CPUIDs',0
|
||||
boot_devices db 'Detecting devices',0
|
||||
boot_timer db 'Setting timer',0
|
||||
boot_irqs db 'Reprogramming IRQs',0
|
||||
boot_setmouse db 'Setting mouse',0
|
||||
boot_windefs db 'Setting window defaults',0
|
||||
boot_bgr db 'Calculating background',0
|
||||
boot_resirqports db 'Reserving IRQs & ports',0
|
||||
boot_setrports db 'Setting addresses for IRQs',0
|
||||
boot_setostask db 'Setting OS task',0
|
||||
boot_allirqs db 'Unmasking all IRQs',0
|
||||
boot_tsc db 'Reading TSC',0
|
||||
boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0
|
||||
boot_pal_vga db 'Setting VGA 640x480 palette',0
|
||||
boot_mtrr db 'Setting MTRR',0
|
||||
boot_tasking db 'All set - press ESC to start',0
|
||||
|
||||
new_process_loading db 'K : New Process - loading',13,10,0
|
||||
new_process_running db 'K : New Process - done',13,10,0
|
||||
start_not_enough_memory db 'K : New Process - not enough memory',13,10,0
|
||||
|
||||
msg_unresolved db 'unresolved ',0
|
||||
msg_module db 'in module ',0
|
||||
msg_version db 'incompatible driver version',13,10,0
|
||||
msg_www db 'please visit www.kolibrios.org',13,10,0
|
||||
msg_CR db 13,10,0
|
||||
|
||||
intel_str db "GenuineIntel",0
|
||||
AMD_str db "AuthenticAMD",0
|
||||
|
||||
;szSound db 'SOUND',0
|
||||
;szInfinity db 'INFINITY',0
|
||||
szHwMouse db 'ATI2D',0
|
||||
|
||||
szSTART db 'START',0
|
||||
szEXPORTS db 'EXPORTS',0
|
||||
szIMPORTS db 'IMPORTS',0
|
||||
|
||||
firstapp db '/rd/1/LAUNCHER',0
|
||||
char db 'FONTS/CHAR.MT',0
|
||||
char2 db 'FONTS/CHAR2.MT',0
|
||||
bootpath db '/KOLIBRI '
|
||||
bootpath2 db 0
|
||||
vmode db 'drivers/VMODE.MDR',0
|
||||
vrr_m db '/rd/1/VRR_M',0
|
||||
|
||||
|
||||
; mike.dld {
|
||||
db 0
|
||||
dd servetable-0x10000
|
||||
draw_line dd __sys_draw_line
|
||||
disable_mouse dd __sys_disable_mouse
|
||||
draw_pointer dd __sys_draw_pointer
|
||||
;//mike.dld, 2006-08-02 [
|
||||
;drawbar dd __sys_drawbar
|
||||
drawbar dd __sys_drawbar.forced
|
||||
;//mike.dld, 2006-08-02 ]
|
||||
putpixel dd __sys_putpixel
|
||||
; } mike.dld
|
||||
|
||||
|
||||
align 4
|
||||
keyboard dd 1
|
||||
sound_dma dd 1
|
||||
syslang dd 1
|
||||
|
||||
boot_y dd 10
|
||||
|
||||
|
||||
if __DEBUG__ eq 1
|
||||
include_debug_strings
|
||||
end if
|
||||
|
||||
IncludeIGlobals
|
||||
|
||||
align 16
|
||||
gdts:
|
||||
|
||||
dw gdte-$-1
|
||||
dd gdts
|
||||
dw 0
|
||||
|
||||
; Attention! The order first four selectors not to change, is used in Fast System Call
|
||||
; must be : os_code, os_data, app_code, app_data, ....
|
||||
|
||||
int_code_l:
|
||||
os_code_l:
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10011010b
|
||||
db 0x00
|
||||
|
||||
int_data_l:
|
||||
os_data_l:
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10010010b
|
||||
db 0x00
|
||||
|
||||
app_code_l:
|
||||
dw 0xFFFF
|
||||
dw 0
|
||||
db 0
|
||||
db cpl3
|
||||
dw G32+D32+0x8000+0x7;
|
||||
|
||||
app_data_l:
|
||||
dw 0xFFFF
|
||||
dw 0
|
||||
db 0
|
||||
db drw3
|
||||
dw G32+D32+0x8000+0x7;
|
||||
|
||||
; --------------- APM ---------------------
|
||||
apm_code_32:
|
||||
dw 0x0f ; limit 64kb
|
||||
db 0, 0, 0
|
||||
dw 11010000b *256 +10011010b
|
||||
db 0x00
|
||||
apm_code_16:
|
||||
dw 0x0f
|
||||
db 0, 0, 0
|
||||
dw 10010000b *256 +10011010b
|
||||
db 0x00
|
||||
apm_data_16:
|
||||
dw 0x0f
|
||||
db 0, 0, 0
|
||||
dw 10010000b *256 +10010010b
|
||||
db 0x00
|
||||
; -----------------------------------------
|
||||
|
||||
graph_data_l:
|
||||
|
||||
dw 0x7ff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11010000b *256 +11110010b
|
||||
db 0x00
|
||||
|
||||
endofcode:
|
||||
tss0_l:
|
||||
rq (max_processes+10)
|
||||
|
||||
gdte:
|
||||
|
||||
align 16
|
||||
cur_saved_data rb 4096
|
||||
fpu_data: rb 512
|
||||
|
||||
; device irq owners
|
||||
irq_owner rd 16 ; process id
|
||||
|
||||
; on irq read ports
|
||||
|
||||
irq00read rd 16
|
||||
irq01read rd 16
|
||||
irq02read rd 16
|
||||
irq03read rd 16
|
||||
irq04read rd 16
|
||||
irq05read rd 16
|
||||
irq06read rd 16
|
||||
irq07read rd 16
|
||||
irq08read rd 16
|
||||
irq09read rd 16
|
||||
irq10read rd 16
|
||||
irq11read rd 16
|
||||
irq12read rd 16
|
||||
irq13read rd 16
|
||||
irq14read rd 16
|
||||
irq15read rd 16
|
||||
|
||||
irq_tab rd 16
|
||||
|
||||
mem_block_map rb 512
|
||||
event_map rb 64
|
||||
mem_block_list rd 64
|
||||
mem_block_mask rd 2
|
||||
|
||||
mem_used.fd rd 1
|
||||
mem_used.bk rd 1
|
||||
|
||||
mem_block_arr rd 1
|
||||
mem_block_start rd 1
|
||||
mem_block_end rd 1
|
||||
|
||||
heap_mutex rd 1
|
||||
heap_size rd 1
|
||||
heap_free rd 1
|
||||
heap_blocks rd 1
|
||||
free_blocks rd 1
|
||||
|
||||
mst MEM_STATE
|
||||
|
||||
page_start rd 1
|
||||
page_end rd 1
|
||||
events rd 1
|
||||
event_start rd 1
|
||||
event_end rd 1
|
||||
event_uid rd 1
|
||||
sys_page_map rd 1
|
||||
os_stack rd 1
|
||||
|
||||
srv.fd rd 1
|
||||
srv.bk rd 1
|
||||
|
||||
scr_width rd 1
|
||||
scr_height rd 1
|
||||
|
||||
create_cursor rd 1
|
||||
set_hw_cursor rd 1
|
||||
hw_restore rd 1
|
||||
|
||||
def_cursor rd 1
|
||||
hw_cursor rd 1
|
||||
cur_def_interl rd 1
|
||||
cur_saved_base rd 1
|
||||
cur_saved_interl rd 1
|
||||
cur_saved_w rd 1
|
||||
cur_saved_h rd 1
|
||||
|
||||
ipc_tmp rd 1
|
||||
ipc_pdir rd 1
|
||||
ipc_ptab rd 1
|
||||
|
||||
proc_mem_map rd 1
|
||||
proc_mem_pdir rd 1
|
||||
proc_mem_tab rd 1
|
||||
|
||||
tmp_task_pdir rd 1
|
||||
tmp_task_ptab rd 1
|
||||
|
||||
LFBSize rd 1
|
||||
|
||||
stall_mcs rd 1
|
||||
|
||||
; status
|
||||
hd1_status rd 1 ; 0 - free : other - pid
|
||||
application_table_status rd 1 ; 0 - free : other - pid
|
||||
|
||||
; device addresses
|
||||
mididp rd 1
|
||||
midisp rd 1
|
||||
|
||||
cdbase rd 1
|
||||
cdid rd 1
|
||||
|
||||
hdbase rd 1 ; for boot 0x1f0
|
||||
hdid rd 1
|
||||
hdpos rd 1 ; for boot 0x1
|
||||
fat32part rd 1 ; for boot 0x1
|
||||
|
||||
sb16 rd 1
|
||||
|
||||
;CPUID information
|
||||
cpu_vendor rd 3
|
||||
cpu_sign rd 1
|
||||
cpu_info rd 1
|
||||
cpu_caps rd 4
|
||||
|
||||
|
||||
pg_data PG_DATA
|
||||
heap_test rd 1
|
||||
|
||||
buttontype rd 1
|
||||
windowtypechanged rd 1
|
||||
|
||||
hd_entries rd 1 ;unused ? 0xfe10
|
||||
|
||||
;* start code - Mario79
|
||||
mouse_pause rd 1
|
||||
MouseTickCounter rd 1
|
||||
ps2_mouse_detected rb 1
|
||||
com1_mouse_detected rb 1
|
||||
com2_mouse_detected rb 1
|
||||
;* end code - Mario79
|
||||
|
||||
wraw_bacground_select rb 1
|
||||
|
||||
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||
|
||||
IncludeUGlobals
|
||||
|
@ -17,7 +17,7 @@ Detect_COM_Mouse:
|
||||
|
||||
mov eax,4
|
||||
shl eax,2
|
||||
mov [irq_owner+eax],byte 1
|
||||
mov [irq_owner+eax], 1
|
||||
|
||||
inc dword [RESERVED_PORTS]
|
||||
mov edi,[RESERVED_PORTS]
|
||||
@ -39,7 +39,7 @@ Detect_COM_Mouse:
|
||||
|
||||
mov eax,3
|
||||
shl eax,2
|
||||
mov [irq_owner+eax],byte 1
|
||||
mov [irq_owner+eax], 1
|
||||
|
||||
inc dword [RESERVED_PORTS]
|
||||
mov edi,[RESERVED_PORTS]
|
||||
|
@ -12,25 +12,25 @@ FindHDD:
|
||||
mov [DiskNumber],0
|
||||
call FindHDD_3
|
||||
; mov ax,[Sector512+176]
|
||||
; mov [0x40006],ax
|
||||
; mov [DRIVE_DATA+6],ax
|
||||
; mov ax,[Sector512+126]
|
||||
; mov [0x40008],ax
|
||||
; mov [DRIVE_DATA+8],ax
|
||||
; mov ax,[Sector512+128]
|
||||
; mov [0x40008],ax
|
||||
; mov [DRIVE_DATA+8],ax
|
||||
mov [DiskNumber],1
|
||||
call FindHDD_3
|
||||
; mov al,[Sector512+176]
|
||||
; mov [0x40007],al
|
||||
; mov [DRIVE_DATA+7],al
|
||||
inc [ChannelNumber]
|
||||
mov [DiskNumber],0
|
||||
call FindHDD_3
|
||||
; mov al,[Sector512+176]
|
||||
; mov [0x40008],al
|
||||
; mov [DRIVE_DATA+8],al
|
||||
mov [DiskNumber],1
|
||||
call FindHDD_1
|
||||
; mov al,[Sector512+176]
|
||||
; mov [0x40009],al
|
||||
|
||||
; mov [DRIVE_DATA+9],al
|
||||
|
||||
jmp EndFindHDD
|
||||
|
||||
FindHDD_1:
|
||||
@ -41,7 +41,7 @@ FindHDD_1:
|
||||
ja FindHDD_2
|
||||
cmp [Sector512+12],word 255
|
||||
ja FindHDD_2
|
||||
inc byte [0x40001]
|
||||
inc byte [DRIVE_DATA+1]
|
||||
jmp FindHDD_2_2
|
||||
FindHDD_2:
|
||||
call DeviceReset
|
||||
@ -50,14 +50,14 @@ FindHDD_1:
|
||||
call ReadCD_ID
|
||||
cmp [DevErrorCode],0
|
||||
jne FindHDD_2_2
|
||||
inc byte [0x40001]
|
||||
inc byte [0x40001]
|
||||
inc byte [DRIVE_DATA+1]
|
||||
inc byte [DRIVE_DATA+1]
|
||||
FindHDD_2_2:
|
||||
ret
|
||||
|
||||
FindHDD_3:
|
||||
call FindHDD_1
|
||||
shl byte [0x40001],2
|
||||
shl byte [DRIVE_DATA+1],2
|
||||
ret
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ ReadHDD_ID:
|
||||
cmp [DevErrorCode],0 ;ïðîâåðèòü êîä îøèáêè
|
||||
jne @@End ;çàêîí÷èòü, ñîõðàíèâ êîä îøèáêè
|
||||
mov DX,[ATABasePortAddr]
|
||||
add DX,7 ;адрес регистра состояния
|
||||
add DX,7 ;àäðåñ ðåãèñòðà ñîñòîÿíè
|
||||
mov ecx,0xffff
|
||||
@@WaitCompleet:
|
||||
; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû
|
||||
@ -191,15 +191,15 @@ SendCommandToHDD:
|
||||
; mov eax,[timer_ticks]
|
||||
; mov [TickCounter_1],eax
|
||||
@@WaitHDReady:
|
||||
; Проверить время ожидания
|
||||
; Ïðîâåðèòü âðåìÿ îæèäàíè
|
||||
dec ecx
|
||||
cmp ecx,0
|
||||
je @@Err1
|
||||
; mov eax,[timer_ticks]
|
||||
; sub eax,[TickCounter_1]
|
||||
; cmp eax,300 ;ожидать 300 тиков
|
||||
; cmp eax,300 ;îæèäàòü 300 òèêîâ
|
||||
; ja @@Err1 ;îøèáêà òàéì-àóòà
|
||||
; Прочитать регистр состояния
|
||||
; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíè
|
||||
in AL,DX
|
||||
; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY
|
||||
test AL,80h
|
||||
@ -255,7 +255,7 @@ SendCommandToHDD:
|
||||
jmp @@End_2
|
||||
@@Err5: mov [DevErrorCode],5
|
||||
; Çàâåðøåíèå ðàáîòû ïðîãðàììû
|
||||
@@End_2:
|
||||
@@End_2:
|
||||
ret
|
||||
|
||||
;*************************************************
|
||||
@ -285,7 +285,7 @@ ReadCD_ID:
|
||||
add DX,7 ;ïîðò 1õ7h
|
||||
mov ecx,0xffff
|
||||
@@WaitCompleet_1:
|
||||
; Проверить время
|
||||
; Ïðîâåðèòü âðåì
|
||||
dec ecx
|
||||
cmp ecx,0
|
||||
je @@Error1_1 ;îøèáêà òàéì-àóòà
|
||||
@ -348,11 +348,11 @@ DeviceReset:
|
||||
out DX,AL
|
||||
mov ecx,0x80000
|
||||
@@WaitHDReady_1:
|
||||
; Проверить время ожидания
|
||||
; Ïðîâåðèòü âðåìÿ îæèäàíè
|
||||
dec ecx
|
||||
cmp ecx,0
|
||||
je @@Err1_2 ;îøèáêà òàéì-àóòà
|
||||
; Прочитать регистр состояния
|
||||
; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíè
|
||||
in AL,DX
|
||||
; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY
|
||||
test AL,80h
|
||||
|
@ -3,9 +3,9 @@
|
||||
; è çàíåñåíèå äàííûõ â îáëàñòü òàáëèöû
|
||||
; àâòîð Mario79
|
||||
;****************************************************
|
||||
mov [transfer_adress],0x4000a
|
||||
mov [transfer_adress],DRIVE_DATA+0xa
|
||||
search_partitions_ide0:
|
||||
test [0x40001],byte 0x40
|
||||
test [DRIVE_DATA+1],byte 0x40
|
||||
jz search_partitions_ide1
|
||||
mov [hdbase],0x1f0
|
||||
mov [hdid],0x0
|
||||
@ -15,14 +15,14 @@
|
||||
call set_FAT32_variables
|
||||
cmp [problem_partition],0
|
||||
jne search_partitions_ide1
|
||||
inc byte [0x40002]
|
||||
inc byte [DRIVE_DATA+2]
|
||||
call partition_data_transfer
|
||||
add [transfer_adress],100
|
||||
inc [fat32part]
|
||||
jmp search_partitions_ide0_1
|
||||
|
||||
search_partitions_ide1:
|
||||
test [0x40001],byte 0x10
|
||||
test [DRIVE_DATA+1],byte 0x10
|
||||
jz search_partitions_ide2
|
||||
mov [hdbase],0x1f0
|
||||
mov [hdid],0x10
|
||||
@ -32,14 +32,14 @@
|
||||
call set_FAT32_variables
|
||||
cmp [problem_partition],0
|
||||
jne search_partitions_ide2
|
||||
inc byte [0x40003]
|
||||
inc byte [DRIVE_DATA+3]
|
||||
call partition_data_transfer
|
||||
add [transfer_adress],100
|
||||
inc [fat32part]
|
||||
jmp search_partitions_ide1_1
|
||||
|
||||
search_partitions_ide2:
|
||||
test [0x40001],byte 0x4
|
||||
test [DRIVE_DATA+1],byte 0x4
|
||||
jz search_partitions_ide3
|
||||
mov [hdbase],0x170
|
||||
mov [hdid],0x0
|
||||
@ -49,14 +49,14 @@
|
||||
call set_FAT32_variables
|
||||
cmp [problem_partition],0
|
||||
jne search_partitions_ide3
|
||||
inc byte [0x40004]
|
||||
inc byte [DRIVE_DATA+4]
|
||||
call partition_data_transfer
|
||||
add [transfer_adress],100
|
||||
inc [fat32part]
|
||||
jmp search_partitions_ide2_1
|
||||
|
||||
search_partitions_ide3:
|
||||
test [0x40001],byte 0x1
|
||||
test [DRIVE_DATA+1],byte 0x1
|
||||
jz end_search_partitions_ide
|
||||
mov [hdbase],0x170
|
||||
mov [hdid],0x10
|
||||
@ -66,14 +66,14 @@
|
||||
call set_FAT32_variables
|
||||
cmp [problem_partition],0
|
||||
jne end_search_partitions_ide
|
||||
inc byte [0x40005]
|
||||
inc byte [DRIVE_DATA+5]
|
||||
call partition_data_transfer
|
||||
add [transfer_adress],100
|
||||
inc [fat32part]
|
||||
jmp search_partitions_ide3_1
|
||||
|
||||
|
||||
partition_data_transfer:
|
||||
|
||||
partition_data_transfer:
|
||||
mov edi,[transfer_adress]
|
||||
mov esi,PARTITION_START
|
||||
mov ecx,(file_system_data_size+3)/4
|
||||
|
@ -389,8 +389,8 @@ choice_necessity_partition:
|
||||
choice_necessity_partition_1:
|
||||
mov ecx,[hdpos]
|
||||
xor eax,eax
|
||||
mov [0xfe10], eax ; entries in hd cache
|
||||
mov edx,0x40002
|
||||
mov [hd_entries], eax ; entries in hd cache
|
||||
mov edx,DRIVE_DATA+2
|
||||
search_partition_array:
|
||||
mov bl,[edx]
|
||||
movzx ebx,bl
|
||||
@ -402,7 +402,7 @@ choice_necessity_partition_1:
|
||||
dec eax
|
||||
xor edx,edx
|
||||
imul eax,100
|
||||
add eax,0x4000a
|
||||
add eax,DRIVE_DATA+0xa
|
||||
mov [transfer_adress],eax
|
||||
call partition_data_transfer_1
|
||||
ret
|
||||
|
@ -427,7 +427,7 @@ fs_OnHd:
|
||||
mov [hdpos], eax
|
||||
cmp ecx, 0x100
|
||||
jae .nf
|
||||
cmp cl, [0x40001+eax]
|
||||
cmp cl, [DRIVE_DATA+eax]
|
||||
jbe @f
|
||||
.nf:
|
||||
call free_hd_channel
|
||||
@ -503,7 +503,7 @@ fs_OnCd:
|
||||
jae .nf
|
||||
push ecx ebx
|
||||
mov cl,al
|
||||
mov bl,[0x40001]
|
||||
mov bl,[DRIVE_DATA+1]
|
||||
shr bl,cl
|
||||
test bl,2
|
||||
pop ebx ecx
|
||||
|
@ -10,8 +10,8 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
|
||||
; edi 1 force
|
||||
|
||||
pushad
|
||||
call [disable_mouse]
|
||||
|
||||
call [disable_mouse]
|
||||
mov ebp, ecx ; ebp=pointer to text
|
||||
mov ecx, ebx ; ecx=color
|
||||
movsx ebx, ax ; ebx=y
|
||||
|
@ -516,7 +516,7 @@ display_settings:
|
||||
|
||||
repos_windows:
|
||||
mov ecx,[TASK_COUNT]
|
||||
mov edi,0x20*2
|
||||
mov edi, OS_BASE+0x20*2
|
||||
mov byte[REDRAW_BACKGROUND],1
|
||||
dec ecx
|
||||
jge @f
|
||||
@ -537,6 +537,7 @@ repos_windows:
|
||||
neg eax
|
||||
mov [edi+WDATA.box.height],eax
|
||||
.lp1:
|
||||
|
||||
call set_window_clientbox
|
||||
add edi,0x20
|
||||
loop @b
|
||||
|
@ -100,6 +100,7 @@ save_draw_mouse:
|
||||
mov ecx, [ScreenWidth]
|
||||
inc ecx
|
||||
mul ecx
|
||||
|
||||
movzx edx, byte [display_data+ebx+eax]
|
||||
shl edx, 8
|
||||
mov ecx, [edx+SLOT_BASE+APPDATA.cursor]
|
||||
@ -320,9 +321,10 @@ yes_mouse_disable:
|
||||
disable_m:
|
||||
cmp dword [MOUSE_VISIBLE],dword 0
|
||||
jne no_mouse_disable
|
||||
pushf
|
||||
cli
|
||||
call draw_mouse_under
|
||||
sti
|
||||
popf
|
||||
mov [MOUSE_VISIBLE],dword 1
|
||||
no_mouse_disable:
|
||||
popad
|
||||
@ -350,9 +352,10 @@ __sys_draw_pointer:
|
||||
mov [MOUSE_VISIBLE], dword 0
|
||||
movzx ebx,word [MOUSE_Y]
|
||||
movzx eax,word [MOUSE_X]
|
||||
pushfd
|
||||
cli
|
||||
call save_draw_mouse
|
||||
sti
|
||||
popfd
|
||||
nodmu2:
|
||||
popad
|
||||
ret
|
||||
@ -367,10 +370,11 @@ chms00:
|
||||
jne redrawmouse
|
||||
jmp nodmp
|
||||
redrawmouse:
|
||||
pushfd
|
||||
cli
|
||||
call draw_mouse_under
|
||||
call save_draw_mouse
|
||||
sti
|
||||
popfd
|
||||
nodmp:
|
||||
popad
|
||||
ret
|
||||
|
271
kernel/branches/flat_kernel/init.inc
Normal file
271
kernel/branches/flat_kernel/init.inc
Normal file
@ -0,0 +1,271 @@
|
||||
|
||||
MEM_WB equ 6 ;write-back memory
|
||||
MEM_WC equ 1 ;write combined memory
|
||||
MEM_UC equ 0 ;uncached memory
|
||||
|
||||
tmp_page_tab equ 0x1000000 ; HEAP_BASE
|
||||
|
||||
align 4
|
||||
proc mem_test
|
||||
|
||||
mov eax, cr0
|
||||
and eax, not (CR0_CD+CR0_NW)
|
||||
or eax, CR0_CD ;disable caching
|
||||
mov cr0, eax
|
||||
wbinvd ;invalidate cache
|
||||
|
||||
xor edi, edi
|
||||
mov ebx, 'TEST'
|
||||
@@:
|
||||
add edi, 0x400000
|
||||
xchg ebx, dword [edi]
|
||||
cmp dword [edi], 'TEST'
|
||||
xchg ebx, dword [edi]
|
||||
je @b
|
||||
mov [MEM_AMOUNT-OS_BASE], edi
|
||||
|
||||
and eax, not (CR0_CD+CR0_NW) ;enable caching
|
||||
mov cr0, eax
|
||||
mov eax, edi
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc init_mem
|
||||
|
||||
mov eax, [MEM_AMOUNT-OS_BASE]
|
||||
mov [pg_data.mem_amount-OS_BASE], eax
|
||||
mov [pg_data.kernel_max-OS_BASE], eax
|
||||
|
||||
shr eax, 12
|
||||
mov edx, eax
|
||||
mov [pg_data.pages_count-OS_BASE], eax
|
||||
mov [pg_data.kernel_pages-OS_BASE], eax
|
||||
|
||||
shr eax, 3
|
||||
mov [pg_data.pagemap_size-OS_BASE], eax
|
||||
|
||||
shr edx, 10
|
||||
cmp edx, 3
|
||||
ja @f
|
||||
inc edx ;at least 4Mb for kernel heap
|
||||
@@:
|
||||
mov [pg_data.kernel_tables-OS_BASE], edx
|
||||
|
||||
xor eax, eax
|
||||
mov edi, sys_pgdir-OS_BASE
|
||||
mov ecx, 2048
|
||||
cld
|
||||
rep stosd
|
||||
|
||||
mov edx, sys_pgdir-OS_BASE
|
||||
; bt [cpu_caps], CAPS_PSE
|
||||
; jnc .no_PSE
|
||||
|
||||
mov ebx, cr4
|
||||
or ebx, CR4_PSE
|
||||
mov eax, PG_LARGE+PG_SW
|
||||
bt [cpu_caps-OS_BASE], CAPS_PGE
|
||||
jnc @F
|
||||
or eax, PG_GLOBAL
|
||||
or ebx, CR4_PGE
|
||||
@@:
|
||||
mov cr4, ebx
|
||||
sub [pg_data.kernel_tables-OS_BASE], 2
|
||||
|
||||
mov [edx], eax
|
||||
mov [edx+16], eax
|
||||
add eax, 0x00400000
|
||||
|
||||
mov [edx+4], eax
|
||||
mov [edx+20], eax
|
||||
add eax, 0x00400000
|
||||
|
||||
mov [edx+8], eax
|
||||
mov [edx+24], eax
|
||||
add eax, 0x00400000
|
||||
|
||||
mov [edx+12], eax
|
||||
mov [edx+28], eax
|
||||
add edx, 32
|
||||
add eax, 0x00400000
|
||||
|
||||
; mov eax, 0x800000+PG_SW
|
||||
; mov ecx, (HEAP_BASE-0x800000)/4096
|
||||
; jmp .map_low
|
||||
;.no_PSE:
|
||||
; mov eax, PG_SW
|
||||
; mov ecx, HEAP_BASE/4096
|
||||
;.map_low:
|
||||
mov edi, tmp_page_tab
|
||||
;@@: ;
|
||||
; stosd
|
||||
; add eax, 0x1000
|
||||
; dec ecx
|
||||
; jnz @B
|
||||
|
||||
mov ecx, [pg_data.kernel_tables-OS_BASE]
|
||||
shl ecx, 10
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
|
||||
mov ecx, [pg_data.kernel_tables-OS_BASE]
|
||||
mov eax, tmp_page_tab+PG_SW
|
||||
mov edi, edx
|
||||
|
||||
.map_kernel_tabs:
|
||||
|
||||
stosd
|
||||
add eax, 0x1000
|
||||
dec ecx
|
||||
jnz .map_kernel_tabs
|
||||
|
||||
mov dword [sys_pgdir-OS_BASE+(page_tabs shr 20)], sys_pgdir+PG_SW-OS_BASE
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc init_page_map
|
||||
|
||||
mov edi, sys_pgmap-OS_BASE
|
||||
mov ecx, (HEAP_BASE/4096)/32 ;384/4
|
||||
mov ebx, ecx
|
||||
xor eax,eax
|
||||
cld
|
||||
rep stosd
|
||||
|
||||
not eax
|
||||
mov ecx, [pg_data.pagemap_size-OS_BASE]
|
||||
sub ecx, ebx
|
||||
shr ecx, 2
|
||||
rep stosd
|
||||
|
||||
lea edi, [sys_pgmap-OS_BASE+ebx*4] ;+384
|
||||
mov edx, [pg_data.pages_count-OS_BASE]
|
||||
mov ecx, [pg_data.kernel_tables-OS_BASE]
|
||||
add ecx, (HEAP_BASE/4096) and 31
|
||||
sub edx, HEAP_BASE/4096
|
||||
sub edx, ecx
|
||||
mov [pg_data.pages_free-OS_BASE], edx
|
||||
|
||||
xor eax, eax
|
||||
mov ebx, ecx
|
||||
shr ecx, 5
|
||||
rep stosd
|
||||
|
||||
not eax
|
||||
mov ecx, ebx
|
||||
and ecx, 31
|
||||
shl eax, cl
|
||||
add edi, OS_BASE
|
||||
mov [page_start-OS_BASE], edi; sys_pgmap+384
|
||||
stosd
|
||||
|
||||
mov ebx, sys_pgmap
|
||||
add ebx, [pg_data.pagemap_size-OS_BASE]
|
||||
mov [page_end-OS_BASE], ebx
|
||||
|
||||
mov [pg_data.pg_mutex-OS_BASE], 0
|
||||
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc test_cpu
|
||||
locals
|
||||
cpu_type dd ?
|
||||
cpu_id dd ?
|
||||
cpu_Intel dd ?
|
||||
cpu_AMD dd ?
|
||||
endl
|
||||
|
||||
mov [cpu_type], 0
|
||||
xor eax, eax
|
||||
mov [cpu_caps-OS_BASE], eax
|
||||
mov [cpu_caps+4-OS_BASE], eax
|
||||
|
||||
pushfd
|
||||
pop eax
|
||||
mov ecx, eax
|
||||
xor eax, 0x40000
|
||||
push eax
|
||||
popfd
|
||||
pushfd
|
||||
pop eax
|
||||
xor eax, ecx
|
||||
mov [cpu_type], CPU_386
|
||||
jz .end_cpuid
|
||||
push ecx
|
||||
popfd
|
||||
|
||||
mov [cpu_type], CPU_486
|
||||
mov eax, ecx
|
||||
xor eax, 0x200000
|
||||
push eax
|
||||
popfd
|
||||
pushfd
|
||||
pop eax
|
||||
xor eax, ecx
|
||||
je .end_cpuid
|
||||
mov [cpu_id], 1
|
||||
|
||||
xor eax, eax
|
||||
cpuid
|
||||
|
||||
mov [cpu_vendor-OS_BASE], ebx
|
||||
mov [cpu_vendor+4-OS_BASE], edx
|
||||
mov [cpu_vendor+8-OS_BASE], ecx
|
||||
cmp ebx, dword [intel_str-OS_BASE]
|
||||
jne .check_AMD
|
||||
cmp edx, dword [intel_str+4-OS_BASE]
|
||||
jne .check_AMD
|
||||
cmp ecx, dword [intel_str+8-OS_BASE]
|
||||
jne .check_AMD
|
||||
mov [cpu_Intel], 1
|
||||
cmp eax, 1
|
||||
jl .end_cpuid
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [cpu_sign-OS_BASE], eax
|
||||
mov [cpu_info-OS_BASE], ebx
|
||||
mov [cpu_caps-OS_BASE], edx
|
||||
mov [cpu_caps+4-OS_BASE],ecx
|
||||
|
||||
shr eax, 8
|
||||
and eax, 0x0f
|
||||
ret
|
||||
.end_cpuid:
|
||||
mov eax, [cpu_type]
|
||||
ret
|
||||
|
||||
.check_AMD:
|
||||
cmp ebx, dword [AMD_str-OS_BASE]
|
||||
jne .unknown
|
||||
cmp edx, dword [AMD_str+4-OS_BASE]
|
||||
jne .unknown
|
||||
cmp ecx, dword [AMD_str+8-OS_BASE]
|
||||
jne .unknown
|
||||
mov [cpu_AMD], 1
|
||||
cmp eax, 1
|
||||
jl .unknown
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [cpu_sign-OS_BASE], eax
|
||||
mov [cpu_info-OS_BASE], ebx
|
||||
mov [cpu_caps-OS_BASE], edx
|
||||
mov [cpu_caps+4-OS_BASE],ecx
|
||||
shr eax, 8
|
||||
and eax, 0x0f
|
||||
ret
|
||||
.unknown:
|
||||
mov eax, 1
|
||||
cpuid
|
||||
mov [cpu_sign-OS_BASE], eax
|
||||
mov [cpu_info-OS_BASE], ebx
|
||||
mov [cpu_caps-OS_BASE], edx
|
||||
mov [cpu_caps+4-OS_BASE],ecx
|
||||
shr eax, 8
|
||||
and eax, 0x0f
|
||||
ret
|
||||
endp
|
||||
|
@ -15,19 +15,17 @@ include "kglobals.inc"
|
||||
include "lang.inc"
|
||||
|
||||
include "const.inc"
|
||||
max_processes equ 255
|
||||
tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
|
||||
|
||||
;WinMapAddress equ 0x460000
|
||||
;display_data = 0x460000
|
||||
|
||||
max_processes equ 255
|
||||
os_data equ os_data_l-gdts ; GDTs
|
||||
os_code equ os_code_l-gdts
|
||||
graph_data equ 3+graph_data_l-gdts
|
||||
tss0 equ tss0_l-gdts
|
||||
app_code equ 3+app_code_l-gdts
|
||||
app_data equ 3+app_data_l-gdts
|
||||
|
||||
;window_data equ 0x0000
|
||||
;tss_data equ 0xD20000
|
||||
tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
|
||||
;draw_data equ 0xC00000
|
||||
;sysint_stack_data equ 0xC03000
|
||||
|
||||
;twdw equ (0x3000-window_data)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
@ -63,39 +61,24 @@ use16
|
||||
org 0x0
|
||||
jmp start_of_code
|
||||
|
||||
; mike.dld {
|
||||
org $+0x10000
|
||||
db 0
|
||||
dd servetable-0x10000
|
||||
draw_line dd __sys_draw_line
|
||||
disable_mouse dd __sys_disable_mouse
|
||||
draw_pointer dd __sys_draw_pointer
|
||||
;//mike.dld, 2006-08-02 [
|
||||
;drawbar dd __sys_drawbar
|
||||
drawbar dd __sys_drawbar.forced
|
||||
;//mike.dld, 2006-08-02 ]
|
||||
putpixel dd __sys_putpixel
|
||||
; } mike.dld
|
||||
version db 'Kolibri OS version 0.6.5.0 ',13,10,13,10,0
|
||||
|
||||
version db 'Kolibri OS version 0.6.5.0 ',13,10,13,10,0
|
||||
;dd endofcode-0x10000
|
||||
|
||||
;db 'Boot02'
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
include "boot/preboot.inc"
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
preboot_lfb db 0
|
||||
preboot_bootlog db 0
|
||||
if lang eq en
|
||||
include "boot/booteng.inc" ; english system boot messages
|
||||
else if lang eq ru
|
||||
include "boot/bootru.inc" ; russian system boot messages
|
||||
include "boot/ru.inc" ; Russian font
|
||||
else if lang eq et
|
||||
include "boot/bootet.inc" ; estonian system boot messages
|
||||
include "boot/et.inc" ; Estonian font
|
||||
else
|
||||
include "boot/bootge.inc" ; german system boot messages
|
||||
end if
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 16 BIT INCLUDED FILES ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
include "kernel16.inc"
|
||||
include "boot/bootcode.inc" ; 16 bit system boot code
|
||||
include "bus/pci/pci16.inc"
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
@ -103,17 +86,6 @@ include "kernel16.inc"
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
os_data = os_data_l-gdts ; GDTs
|
||||
os_code = os_code_l-gdts
|
||||
int_code equ int_code_l-gdts
|
||||
int_data equ int_data_l-gdts
|
||||
tss0sys equ tss0sys_l-gdts
|
||||
graph_data equ 3+graph_data_l-gdts
|
||||
tss0 equ tss0_l-gdts
|
||||
app_code equ 3+app_code_l-gdts
|
||||
app_data equ 3+app_data_l-gdts
|
||||
|
||||
|
||||
|
||||
; CR0 Flags - Protected mode and Paging
|
||||
|
||||
@ -121,7 +93,7 @@ app_data equ 3+app_data_l-gdts
|
||||
|
||||
; Enabling 32 bit protected mode
|
||||
|
||||
sidt [cs:old_ints_h-0x10000]
|
||||
; sidt [cs:old_ints_h-0x10000]
|
||||
|
||||
cli ; disable all irqs
|
||||
cld
|
||||
@ -143,195 +115,162 @@ app_data equ 3+app_data_l-gdts
|
||||
jnz l.7
|
||||
mov al, 0xFF
|
||||
out 0x64, al
|
||||
lgdt [cs:gdts-0x10000] ; Load GDT
|
||||
mov eax, cr0 ; Turn on paging // protected mode
|
||||
|
||||
lgdt [cs:tmp_gdt] ; Load GDT
|
||||
mov eax, cr0 ; protected mode
|
||||
or eax, ecx
|
||||
and eax, 10011111b *65536*256 + 0xffffff ; caching enabled
|
||||
mov cr0, eax
|
||||
jmp $+2
|
||||
org $+0x10000
|
||||
mov ax,os_data ; Selector for os
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov gs,ax
|
||||
mov ss,ax
|
||||
mov esp,0x3ec00 ; Set stack
|
||||
jmp pword os_code:B32 ; jmp to enable 32 bit mode
|
||||
|
||||
if gdte >= $
|
||||
error 'GDT overlaps with used code!'
|
||||
end if
|
||||
align 8
|
||||
tmp_gdt:
|
||||
|
||||
dw 23
|
||||
dd tmp_gdt+0x10000
|
||||
dw 0
|
||||
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10011010b
|
||||
db 0x00
|
||||
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10010010b
|
||||
db 0x00
|
||||
|
||||
include "data16.inc"
|
||||
|
||||
use32
|
||||
org $+0x10000
|
||||
|
||||
include 'unpacker.inc'
|
||||
align 4
|
||||
B32:
|
||||
mov ax,os_data ; Selector for os
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov gs,ax
|
||||
mov ss,ax
|
||||
mov esp,0x3ec00 ; Set stack
|
||||
|
||||
; CLEAR 0x280000 - HEAP_BASE
|
||||
|
||||
xor eax,eax
|
||||
mov edi,0x280000
|
||||
mov ecx,(HEAP_BASE-0x280000) / 4
|
||||
cld
|
||||
rep stosd
|
||||
|
||||
mov edi,0x40000
|
||||
mov ecx,(0x90000-0x40000)/4
|
||||
rep stosd
|
||||
|
||||
; CLEAR KERNEL UNDEFINED GLOBALS
|
||||
mov edi, endofcode-OS_BASE
|
||||
mov ecx, (uglobals_size/4)+4
|
||||
rep stosd
|
||||
|
||||
; SAVE & CLEAR 0-0xffff
|
||||
|
||||
xor esi, esi
|
||||
mov edi,0x2F0000
|
||||
mov ecx,0x10000 / 4
|
||||
rep movsd
|
||||
xor edi, edi
|
||||
mov ecx,0x10000 / 4
|
||||
rep stosd
|
||||
|
||||
call test_cpu
|
||||
bts [cpu_caps-OS_BASE], CAPS_TSC ;force use rdtsc
|
||||
|
||||
; MEMORY MODEL
|
||||
call mem_test
|
||||
call init_mem
|
||||
call init_page_map
|
||||
|
||||
; ENABLE PAGING
|
||||
|
||||
mov eax, sys_pgdir-OS_BASE
|
||||
mov cr3, eax
|
||||
|
||||
mov eax,cr0
|
||||
or eax,CR0_PG
|
||||
mov cr0,eax
|
||||
lgdt [gdts]
|
||||
jmp pword os_code:high_code
|
||||
|
||||
__DEBUG__ fix 1
|
||||
__DEBUG_LEVEL__ fix 1
|
||||
include 'fdo.inc'
|
||||
|
||||
iglobal
|
||||
boot_memdetect db 'Determining amount of memory',0
|
||||
boot_fonts db 'Fonts loaded',0
|
||||
boot_tss db 'Setting TSSs',0
|
||||
boot_cpuid db 'Reading CPUIDs',0
|
||||
boot_devices db 'Detecting devices',0
|
||||
boot_timer db 'Setting timer',0
|
||||
boot_irqs db 'Reprogramming IRQs',0
|
||||
boot_setmouse db 'Setting mouse',0
|
||||
boot_windefs db 'Setting window defaults',0
|
||||
boot_bgr db 'Calculating background',0
|
||||
boot_resirqports db 'Reserving IRQs & ports',0
|
||||
boot_setrports db 'Setting addresses for IRQs',0
|
||||
boot_setostask db 'Setting OS task',0
|
||||
boot_allirqs db 'Unmasking all IRQs',0
|
||||
boot_tsc db 'Reading TSC',0
|
||||
boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0
|
||||
boot_pal_vga db 'Setting VGA 640x480 palette',0
|
||||
boot_mtrr db 'Setting MTRR',0
|
||||
boot_tasking db 'All set - press ESC to start',0
|
||||
endg
|
||||
|
||||
iglobal
|
||||
boot_y dd 10
|
||||
endg
|
||||
|
||||
boot_log:
|
||||
pushad
|
||||
|
||||
mov eax,10*65536
|
||||
mov ax,word [boot_y]
|
||||
add [boot_y],dword 10
|
||||
mov ebx,0x80ffffff ; ASCIIZ string with white color
|
||||
mov ecx,esi
|
||||
mov edi,1
|
||||
call dtext
|
||||
|
||||
mov [novesachecksum],1000
|
||||
call checkVga_N13
|
||||
|
||||
cmp [preboot_blogesc],byte 1
|
||||
je .bll2
|
||||
|
||||
cmp esi,boot_tasking
|
||||
jne .bll2
|
||||
; begin ealex 04.08.05
|
||||
; in al,0x61
|
||||
; and al,01111111b
|
||||
; out 0x61,al
|
||||
; end ealex 04.08.05
|
||||
.bll1: in al,0x60 ; wait for ESC key press
|
||||
cmp al,129
|
||||
jne .bll1
|
||||
|
||||
.bll2: popad
|
||||
|
||||
ret
|
||||
|
||||
iglobal
|
||||
firstapp db '/rd/1/LAUNCHER',0
|
||||
char db 'FONTS/CHAR.MT',0
|
||||
char2 db 'FONTS/CHAR2.MT',0
|
||||
bootpath db '/KOLIBRI '
|
||||
bootpath2 db 0
|
||||
vmode db 'drivers/VMODE.MDR',0
|
||||
vrr_m db '/rd/1/VRR_M',0
|
||||
endg
|
||||
include 'init.inc'
|
||||
include "boot/shutdown.inc" ; shutdown or restart
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 32 BIT ENTRY ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
org OS_BASE+$
|
||||
align 4
|
||||
high_code:
|
||||
mov ax,os_data
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov gs,ax
|
||||
mov ss,ax
|
||||
add esp, OS_BASE
|
||||
|
||||
B32:
|
||||
; CLEAR 0x280000-0xF00000
|
||||
mov dword [sys_pgdir], 0
|
||||
mov dword [sys_pgdir+4], 0
|
||||
mov dword [sys_pgdir+8], 0
|
||||
mov dword [sys_pgdir+12], 0
|
||||
|
||||
xor eax,eax
|
||||
mov edi,0x280000
|
||||
mov ecx,(0x100000*0xF-0x280000) / 4
|
||||
cld
|
||||
rep stosd
|
||||
; CLEAR 0x80000-0x90000
|
||||
; xor eax,eax
|
||||
|
||||
mov edi,0x80000
|
||||
mov ecx,(0x90000-0x80000)/4
|
||||
; cld
|
||||
rep stosd
|
||||
|
||||
; CLEAR KERNEL UNDEFINED GLOBALS
|
||||
mov edi, endofcode
|
||||
mov ecx, (uglobals_size/4)+4
|
||||
rep stosd
|
||||
|
||||
; SAVE & CLEAR 0-0xffff
|
||||
|
||||
mov esi,0x0000
|
||||
mov edi,0x2F0000
|
||||
mov ecx,0x10000 / 4
|
||||
cld
|
||||
rep movsd
|
||||
xor eax,eax
|
||||
mov edi,0
|
||||
mov ecx,0x10000 / 4
|
||||
cld
|
||||
rep stosd
|
||||
mov eax, sys_pgdir-OS_BASE
|
||||
mov cr3, eax
|
||||
|
||||
; SAVE REAL MODE VARIABLES
|
||||
mov ax, [0x2f0000 + 0x9031]
|
||||
mov ax, [BOOT_VAR + 0x9031]
|
||||
mov [IDEContrRegsBaseAddr], ax
|
||||
; --------------- APM ---------------------
|
||||
mov eax, [0x2f0000 + 0x9040] ; entry point
|
||||
mov dword[apm_entry], eax
|
||||
mov word [apm_entry + 4], apm_code_32 - gdts
|
||||
; mov eax, [BOOT_VAR + 0x9040] ; entry point
|
||||
; mov dword[apm_entry], eax
|
||||
; mov word [apm_entry + 4], apm_code_32 - gdts
|
||||
|
||||
mov eax, [0x2f0000 + 0x9044] ; version & flags
|
||||
mov eax, [BOOT_VAR + 0x9044] ; version & flags
|
||||
mov [apm_vf], eax
|
||||
; -----------------------------------------
|
||||
; movzx eax,byte [0x2f0000+0x9010] ; mouse port
|
||||
; movzx eax,byte [BOOT_VAR+0x9010] ; mouse port
|
||||
; mov [0xF604],byte 1 ;al
|
||||
mov al, [0x2F0000+0x901F] ; DMA writing
|
||||
mov al, [BOOT_VAR+0x901F] ; DMA writing
|
||||
mov [allow_dma_write], al
|
||||
mov al,[0x2f0000+0x9000] ; bpp
|
||||
mov al,[BOOT_VAR+0x9000] ; bpp
|
||||
mov [ScreenBPP],al
|
||||
movzx eax,word [0x2f0000+0x900A] ; X max
|
||||
movzx eax,word [BOOT_VAR+0x900A] ; X max
|
||||
dec eax
|
||||
mov [ScreenWidth],eax
|
||||
mov [screen_workarea.right],eax
|
||||
movzx eax,word [0x2f0000+0x900C] ; Y max
|
||||
movzx eax,word [BOOT_VAR+0x900C] ; Y max
|
||||
dec eax
|
||||
mov [ScreenHeight],eax
|
||||
mov [screen_workarea.bottom],eax
|
||||
movzx eax,word [0x2f0000+0x9008] ; screen mode
|
||||
movzx eax,word [BOOT_VAR+0x9008] ; screen mode
|
||||
mov [SCR_MODE],eax
|
||||
mov eax,[0x2f0000+0x9014] ; Vesa 1.2 bnk sw add
|
||||
mov eax,[BOOT_VAR+0x9014] ; Vesa 1.2 bnk sw add
|
||||
mov [BANK_SWITCH],eax
|
||||
mov [BytesPerScanLine],word 640*4 ; Bytes PerScanLine
|
||||
cmp [SCR_MODE],word 0x13 ; 320x200
|
||||
je @f
|
||||
cmp [SCR_MODE],word 0x12 ; VGA 640x480
|
||||
je @f
|
||||
mov ax,[0x2f0000+0x9001] ; for other modes
|
||||
mov ax,[BOOT_VAR+0x9001] ; for other modes
|
||||
mov [BytesPerScanLine],ax
|
||||
@@:
|
||||
|
||||
; GRAPHICS ADDRESSES
|
||||
|
||||
;mov eax,0x100000*8 ; LFB address
|
||||
;cmp [0xfe0c],word 0x13
|
||||
;je no_d_lfb
|
||||
;cmp [0xfe0c],word 0x12
|
||||
;je no_d_lfb
|
||||
;cmp [0x2f0000+0x901e],byte 1
|
||||
;jne no_d_lfb
|
||||
mov byte [0x2f0000+0x901e],0x0
|
||||
mov eax,[0x2f0000+0x9018]
|
||||
;no_d_lfb:
|
||||
mov byte [BOOT_VAR+0x901e],0x0
|
||||
mov eax,[BOOT_VAR+0x9018]
|
||||
mov [LFBAddress],eax
|
||||
|
||||
cmp [SCR_MODE],word 0100000000000000b
|
||||
@ -339,39 +278,28 @@ B32:
|
||||
cmp [SCR_MODE],word 0x13
|
||||
je v20ga32
|
||||
mov [PUTPIXEL],dword Vesa12_putpixel24 ; Vesa 1.2
|
||||
mov [0xe024],dword Vesa12_getpixel24
|
||||
mov [GETPIXEL],dword Vesa12_getpixel24
|
||||
cmp [ScreenBPP],byte 24
|
||||
jz ga24
|
||||
mov [PUTPIXEL],dword Vesa12_putpixel32
|
||||
mov [0xe024],dword Vesa12_getpixel32
|
||||
mov [GETPIXEL],dword Vesa12_getpixel32
|
||||
ga24:
|
||||
jmp v20ga24
|
||||
setvesa20:
|
||||
mov [PUTPIXEL],dword Vesa20_putpixel24 ; Vesa 2.0
|
||||
mov [0xe024],dword Vesa20_getpixel24
|
||||
mov [GETPIXEL],dword Vesa20_getpixel24
|
||||
cmp [ScreenBPP],byte 24
|
||||
jz v20ga24
|
||||
v20ga32:
|
||||
mov [PUTPIXEL],dword Vesa20_putpixel32
|
||||
mov [0xe024],dword Vesa20_getpixel32
|
||||
mov [GETPIXEL],dword Vesa20_getpixel32
|
||||
v20ga24:
|
||||
cmp [SCR_MODE],word 0x12 ; 16 C VGA 640x480
|
||||
jne no_mode_0x12
|
||||
mov [PUTPIXEL],dword VGA_putpixel
|
||||
mov [0xe024],dword Vesa20_getpixel32
|
||||
mov [GETPIXEL],dword Vesa20_getpixel32
|
||||
no_mode_0x12:
|
||||
|
||||
call test_cpu
|
||||
; btr [cpu_caps], CAPS_SSE ;test: dont't use sse code
|
||||
; btr [cpu_caps], CAPS_SSE2 ;test: don't use sse2
|
||||
|
||||
; btr [cpu_caps], CAPS_FXSR ;test: disable sse support
|
||||
;all sse commands rise #UD exption
|
||||
; btr [cpu_caps], CAPS_PSE ;test: don't use large pages
|
||||
; btr [cpu_caps], CAPS_PGE ;test: don't use global pages
|
||||
; btr [cpu_caps], CAPS_MTRR ;test: don't use MTRR
|
||||
bts [cpu_caps], CAPS_TSC ;force use rdtsc
|
||||
|
||||
; -------- Fast System Call init ----------
|
||||
; Intel SYSENTER/SYSEXIT (AMD CPU support it too)
|
||||
bt [cpu_caps], CAPS_SEP
|
||||
@ -415,26 +343,13 @@ B32:
|
||||
.noSYSCALL:
|
||||
; -----------------------------------------
|
||||
|
||||
|
||||
|
||||
; MEMORY MODEL
|
||||
call mem_test
|
||||
call init_mtrr
|
||||
call init_mem
|
||||
call init_page_map
|
||||
|
||||
; ENABLE PAGING
|
||||
mov eax, sys_pgdir
|
||||
mov cr3, eax
|
||||
|
||||
mov eax,cr0
|
||||
or eax,CR0_PG
|
||||
mov cr0,eax
|
||||
|
||||
call init_kernel_heap
|
||||
stdcall kernel_alloc, 0x2000
|
||||
mov [os_stack], eax
|
||||
|
||||
mov [LFBSize], 0x800000
|
||||
call init_mtrr
|
||||
|
||||
call init_LFB
|
||||
call init_fpu
|
||||
|
||||
@ -511,7 +426,7 @@ include 'vmodeld.inc'
|
||||
|
||||
mov esi,char
|
||||
xor ebx,ebx
|
||||
mov ecx,2560;26000
|
||||
mov ecx,2560
|
||||
mov edx,FONT_I
|
||||
call fs_RamdiskRead
|
||||
|
||||
@ -552,14 +467,13 @@ include 'vmodeld.inc'
|
||||
call build_scheduler ; sys32.inc
|
||||
|
||||
; LOAD IDT
|
||||
lidt [cs:idtreg]
|
||||
cli
|
||||
lidt [idtreg]
|
||||
|
||||
mov esi,boot_devices
|
||||
call boot_log
|
||||
call detect_devices
|
||||
|
||||
; TIMER SET TO 1/100 S
|
||||
; TIMER SET TO 1/100 S
|
||||
|
||||
mov esi,boot_timer
|
||||
call boot_log
|
||||
@ -628,8 +542,6 @@ include 'vmodeld.inc'
|
||||
|
||||
mov dword [SLOT_BASE+256+APPDATA.fpu_handler], 0
|
||||
mov dword [SLOT_BASE+256+APPDATA.sse_handler], 0
|
||||
|
||||
mov ebx, [def_cursor]
|
||||
mov dword [SLOT_BASE+256+APPDATA.cursor], ebx
|
||||
|
||||
mov ebx, SLOT_BASE+256+APP_OBJ_OFFSET
|
||||
@ -637,6 +549,8 @@ include 'vmodeld.inc'
|
||||
mov dword [SLOT_BASE+256+APPDATA.bk_obj], ebx
|
||||
|
||||
; task list
|
||||
mov [CURRENT_TASK],dword 1
|
||||
mov [TASK_COUNT],dword 1
|
||||
mov [TASK_DATA+TASKDATA.wnd_number], 1 ; on screen number
|
||||
mov [TASK_DATA+TASKDATA.pid], 1 ; process id number
|
||||
mov [TASK_DATA+TASKDATA.mem_start], 0 ; process base address
|
||||
@ -667,9 +581,11 @@ include 'vmodeld.inc'
|
||||
ltr ax
|
||||
|
||||
call init_cursors
|
||||
mov eax, [def_cursor]
|
||||
mov [SLOT_BASE+APPDATA.cursor],eax
|
||||
mov [SLOT_BASE+APPDATA.cursor+256],eax
|
||||
|
||||
|
||||
; READ TSC / SECOND
|
||||
; READ TSC / SECOND
|
||||
|
||||
mov esi,boot_tsc
|
||||
call boot_log
|
||||
@ -720,10 +636,8 @@ include 'vmodeld.inc'
|
||||
call load_skin
|
||||
|
||||
; LOAD FIRST APPLICATION
|
||||
mov [CURRENT_TASK],dword 1
|
||||
mov [TASK_COUNT],dword 1
|
||||
cli
|
||||
cmp byte [0x2f0000+0x9030],1
|
||||
cmp byte [BOOT_VAR+0x9030],1
|
||||
jne no_load_vrr_m
|
||||
|
||||
mov ebp, vrr_m
|
||||
@ -748,7 +662,6 @@ first_app_found:
|
||||
;mov [TASK_COUNT],dword 2
|
||||
mov [CURRENT_TASK],dword 1 ; set OS task fisrt
|
||||
|
||||
|
||||
; SET KEYBOARD PARAMETERS
|
||||
mov al, 0xf6 ; reset keyboard, scan enabled
|
||||
call kb_write
|
||||
@ -815,6 +728,43 @@ first_app_found:
|
||||
|
||||
; Fly :)
|
||||
|
||||
|
||||
include 'unpacker.inc'
|
||||
|
||||
align 4
|
||||
boot_log:
|
||||
pushad
|
||||
|
||||
mov eax,10*65536
|
||||
mov ax,word [boot_y]
|
||||
add [boot_y],dword 10
|
||||
mov ebx,0x80ffffff ; ASCIIZ string with white color
|
||||
mov ecx,esi
|
||||
mov edi,1
|
||||
call dtext
|
||||
|
||||
mov [novesachecksum],1000
|
||||
call checkVga_N13
|
||||
|
||||
cmp [preboot_blogesc+OS_BASE+0x10000],byte 1
|
||||
je .bll2
|
||||
|
||||
cmp esi,boot_tasking
|
||||
jne .bll2
|
||||
; begin ealex 04.08.05
|
||||
; in al,0x61
|
||||
; and al,01111111b
|
||||
; out 0x61,al
|
||||
; end ealex 04.08.05
|
||||
.bll1: in al,0x60 ; wait for ESC key press
|
||||
cmp al,129
|
||||
jne .bll1
|
||||
|
||||
.bll2: popad
|
||||
|
||||
ret
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; ;
|
||||
; MAIN OS LOOP START ;
|
||||
@ -918,13 +868,14 @@ reserve_irqs_ports:
|
||||
|
||||
pushad
|
||||
|
||||
mov [irq_owner+4*0],byte 1 ; timer
|
||||
mov [irq_owner+4*1],byte 1 ; keyboard
|
||||
mov [irq_owner+4*5],byte 1 ; sound blaster
|
||||
mov [irq_owner+4*6],byte 1 ; floppy diskette
|
||||
mov [irq_owner+4*13],byte 1 ; math co-pros
|
||||
mov [irq_owner+4*14],byte 1 ; ide I
|
||||
mov [irq_owner+4*15],byte 1 ; ide II
|
||||
mov [irq_owner+4*0], 1 ; timer
|
||||
mov [irq_owner+4*1], 1 ; keyboard
|
||||
mov [irq_owner+4*5], 1 ; sound blaster
|
||||
mov [irq_owner+4*6], 1 ; floppy diskette
|
||||
mov [irq_owner+4*13], 1 ; math co-pros
|
||||
mov [irq_owner+4*14], 1 ; ide I
|
||||
mov [irq_owner+4*15], 1 ; ide II
|
||||
|
||||
; movzx eax,byte [0xf604] ; mouse irq
|
||||
; dec eax
|
||||
; add eax,mouseirqtable
|
||||
@ -1017,10 +968,10 @@ set_variables:
|
||||
; mov [MOUSE_X],dword 100*65536+100 ; mouse x/y
|
||||
|
||||
push eax
|
||||
mov ax,[0x2f0000+0x900c]
|
||||
mov ax,[BOOT_VAR+0x900c]
|
||||
shr ax,1
|
||||
shl eax,16
|
||||
mov ax,[0x2f0000+0x900A]
|
||||
mov ax,[BOOT_VAR+0x900A]
|
||||
shr ax,1
|
||||
mov [MOUSE_X],eax
|
||||
pop eax
|
||||
@ -1031,7 +982,7 @@ set_variables:
|
||||
|
||||
;!! IP 04.02.2005:
|
||||
mov [next_usage_update], 100
|
||||
mov byte [0xFFFF], 0 ; change task if possible
|
||||
mov byte [DONT_SWITCH], 0 ; change task if possible
|
||||
|
||||
ret
|
||||
|
||||
@ -1929,7 +1880,7 @@ sys_system:
|
||||
ret
|
||||
|
||||
sysfn_shutdown: ; 18.1 = BOOT
|
||||
mov [0x2f0000+0x9030],byte 0
|
||||
mov [BOOT_VAR+0x9030],byte 0
|
||||
for_shutdown_parameter:
|
||||
|
||||
mov eax,[TASK_COUNT]
|
||||
@ -2053,7 +2004,7 @@ sysfn_shutdown_param: ; 18.9 = system shutdown with param
|
||||
jl exit_for_anyone
|
||||
cmp ebx,4
|
||||
jg exit_for_anyone
|
||||
mov [0x2f0000+0x9030],bl
|
||||
mov [BOOT_VAR+0x9030],bl
|
||||
jmp for_shutdown_parameter
|
||||
|
||||
sysfn_minimize: ; 18.10 = minimize window
|
||||
@ -2798,7 +2749,7 @@ draw_window_caption:
|
||||
mov ecx,[edi*8+SLOT_BASE+APPDATA.wnd_caption]
|
||||
or ecx,ecx
|
||||
jz @f
|
||||
add ecx,[edi+twdw+TASKDATA.mem_start]
|
||||
add ecx,[edi+CURRENT_TASK+TASKDATA.mem_start]
|
||||
|
||||
movzx eax,[edi+window_data+WDATA.fl_wstyle]
|
||||
and al,0x0F
|
||||
@ -4755,7 +4706,7 @@ syscall_getpixel: ; GetPixel
|
||||
div ecx
|
||||
mov ebx,edx
|
||||
xchg eax,ebx
|
||||
call dword [0xe024]
|
||||
call dword [GETPIXEL]
|
||||
mov [esp+36],ecx
|
||||
ret
|
||||
|
||||
@ -4920,162 +4871,8 @@ undefined_syscall: ; Undefined system call
|
||||
mov [esp+36],dword -1
|
||||
ret
|
||||
|
||||
include "data32.inc"
|
||||
|
||||
;clear_busy_flag_at_caller:
|
||||
|
||||
; push edi
|
||||
|
||||
; mov edi,[CURRENT_TASK] ; restore processes tss pointer in gdt, busyfl?
|
||||
; imul edi,8
|
||||
; mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
|
||||
|
||||
; pop edi
|
||||
|
||||
; ret
|
||||
|
||||
|
||||
keymap:
|
||||
|
||||
db '6',27
|
||||
db '1234567890-=',8,9
|
||||
db 'qwertyuiop[]',13
|
||||
db '~asdfghjkl;',39,96,0,'\zxcvbnm,./',0,'45 '
|
||||
db '@234567890123',180,178,184,'6',176,'7'
|
||||
db 179,'8',181,177,183,185,182
|
||||
db 'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
keymap_shift:
|
||||
|
||||
db '6',27
|
||||
db '!@#$%^&*()_+',8,9
|
||||
db 'QWERTYUIOP{}',13
|
||||
db '~ASDFGHJKL:"~',0,'|ZXCVBNM<>?',0,'45 '
|
||||
db '@234567890123',180,178,184,'6',176,'7'
|
||||
db 179,'8',181,177,183,185,182
|
||||
db 'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
keymap_alt:
|
||||
|
||||
db ' ',27
|
||||
db ' @ $ {[]}\ ',8,9
|
||||
db ' ',13
|
||||
db ' ',0,' ',0,'4',0,' '
|
||||
db ' ',180,178,184,'6',176,'7'
|
||||
db 179,'8',181,177,183,185,182
|
||||
db 'ABCD',255,'FGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
; device irq owners
|
||||
uglobal
|
||||
irq_owner: ; process id
|
||||
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
endg
|
||||
|
||||
|
||||
; on irq read ports
|
||||
uglobal
|
||||
irq00read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq01read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq02read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq03read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq04read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq05read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq06read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq07read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq08read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq09read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq10read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq11read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq12read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq13read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq14read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
irq15read dd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
endg
|
||||
|
||||
; status
|
||||
uglobal
|
||||
hd1_status dd 0x0 ; 0 - free : other - pid
|
||||
application_table_status dd 0x0 ; 0 - free : other - pid
|
||||
endg
|
||||
|
||||
; device addresses
|
||||
uglobal
|
||||
mididp dd 0x0
|
||||
midisp dd 0x0
|
||||
|
||||
cdbase dd 0x0
|
||||
cdid dd 0x0
|
||||
|
||||
hdbase dd 0x0 ; for boot 0x1f0
|
||||
hdid dd 0x0
|
||||
hdpos dd 0x0 ; for boot 0x1
|
||||
fat32part dd 0x0 ; for boot 0x1
|
||||
|
||||
;part2_ld dd 0x0
|
||||
|
||||
;* start code - Mario79
|
||||
mouse_pause dd 0
|
||||
MouseTickCounter dd 0
|
||||
ps2_mouse_detected db 0
|
||||
com1_mouse_detected db 0
|
||||
com2_mouse_detected db 0
|
||||
;* end code - Mario79
|
||||
|
||||
wraw_bacground_select db 0
|
||||
lba_read_enabled dd 0x0 ; 0 = disabled , 1 = enabled
|
||||
pci_access_enabled dd 0x0 ; 0 = disabled , 1 = enabled
|
||||
|
||||
sb16 dd 0x0
|
||||
|
||||
buttontype dd 0x0
|
||||
windowtypechanged dd 0x0
|
||||
|
||||
align 4
|
||||
cpu_caps dd 4 dup(0)
|
||||
pg_data PG_DATA
|
||||
heap_test dd ?
|
||||
endg
|
||||
|
||||
iglobal
|
||||
keyboard dd 0x1
|
||||
sound_dma dd 0x1
|
||||
syslang dd 0x1
|
||||
endg
|
||||
|
||||
if __DEBUG__ eq 1
|
||||
include_debug_strings
|
||||
end if
|
||||
|
||||
IncludeIGlobals
|
||||
endofcode:
|
||||
IncludeUGlobals
|
||||
uglobals_size = $ - endofcode
|
||||
diff16 "end of kernel code",0,$
|
||||
|
||||
|
@ -238,8 +238,6 @@ include "gui/button.inc"
|
||||
|
||||
; shutdown
|
||||
|
||||
include "boot/shutdown.inc" ; shutdown or restart
|
||||
|
||||
; file system
|
||||
|
||||
include "fs/fs.inc" ; syscall
|
||||
|
@ -72,10 +72,10 @@ SOCKET_INTERFACE equ 53
|
||||
|
||||
; 128KB allocated for the stack and network driver buffers and other
|
||||
; data requirements
|
||||
stack_data_start equ 0x700000
|
||||
eth_data_start equ 0x700000
|
||||
stack_data equ 0x704000
|
||||
stack_data_end equ 0x71ffff
|
||||
;stack_data_start equ 0x700000
|
||||
;eth_data_start equ 0x700000
|
||||
;stack_data equ 0x704000
|
||||
;stack_data_end equ 0x71ffff
|
||||
|
||||
; 32 bit word
|
||||
stack_config equ stack_data
|
||||
@ -123,7 +123,7 @@ last_1hsTick equ queueList + ( 2 * NUMQUEUEENTRIES )
|
||||
|
||||
|
||||
|
||||
resendQ equ 0x770000
|
||||
;resendQ equ 0x770000
|
||||
resendBuffer equ resendQ + ( 4 * NUMRESENDENTRIES ) ; for TCP
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@ SB16_play_music equ 0xc0000001
|
||||
DMAPage equ 0x2A
|
||||
Rate equ 44100
|
||||
SB16Buffer equ 0x2A0000
|
||||
SB16_Status equ SB16Buffer+65536
|
||||
;SB16_Status equ SB16Buffer+65536
|
||||
|
||||
iglobal
|
||||
sound_data_format dd 0x1
|
||||
|
@ -444,6 +444,7 @@ proc init_cursors
|
||||
|
||||
stdcall load_driver, szHwMouse
|
||||
mov [hw_cursor], eax
|
||||
|
||||
test eax, eax
|
||||
jz .sw_mouse
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
getpixel:
|
||||
push eax ebx edx edi
|
||||
call dword [0xe024]
|
||||
call dword [GETPIXEL]
|
||||
pop edi edx ebx eax
|
||||
ret
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
;
|
||||
; Load of videomode driver in memory
|
||||
;
|
||||
;
|
||||
; (driver is located at 0x760000-0x768000 - 32kb) // if this area not occuped anything
|
||||
;
|
||||
; Author: Trans
|
||||
@ -13,11 +13,11 @@
|
||||
; LOAD VIDEOMODE DRIVER
|
||||
; If vmode.mdr file not found
|
||||
or eax,-1 ; Driver ID = -1 (not present in system)
|
||||
mov [0x760000],eax ;
|
||||
mov [0x760100],byte 0xC3 ; Instruction RETN - driver loop
|
||||
mov [OS_BASE+0x760000],eax ;
|
||||
mov [OS_BASE+0x760100],byte 0xC3 ; Instruction RETN - driver loop
|
||||
|
||||
mov esi, vmode
|
||||
xor ebx, ebx
|
||||
mov ecx, 0x8000 ; size of memory area for driver
|
||||
mov edx, 0x760000 ; Memory position of driver
|
||||
call fs_RamdiskRead
|
||||
mov edx, OS_BASE+0x760000 ; Memory position of driver
|
||||
call fs_RamdiskRead
|
||||
|
Loading…
Reference in New Issue
Block a user