Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 928 → Rev 996

/kernel/branches/kolibri_pe/blkdev/cd_drv.inc
14,7 → 14,7
; Àâòîð ÷àñòè èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷
; Àäàïòàöèÿ, äîðàáîòêà è ðàçðàáîòêà Mario79
 
; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ
; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíè
MaxRetr equ 10
; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû
; (â òèêàõ)
38,7 → 38,7
mov [CDBlockSize],2048 ;2352
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû
call clear_packet_buffer
; Ñôîðìèðîâàòü ïàêåòíóþ êîìàíäó äëÿ ñ÷èòûâàíèÿ
; Ñôîðìèðîâàòü ïàêåòíóþ êîìàíäó äëÿ ñ÷èòûâàíè
; ñåêòîðà äàííûõ
; Çàäàòü êîä êîìàíäû Read CD
mov [PacketCommand],byte 0x28 ;0xBE
168,7 → 168,6
; Îáëàñòü ïàìÿòè äëÿ ôîðìèðîâàíèÿ ïàêåòíîé êîìàíäû
PacketCommand: rb 12 ;DB 12 DUP (?)
; Îáëàñòü ïàìÿòè äëÿ ïðèåìà äàííûõ îò äèñêîâîäà
;CDDataBuf DB 4096 DUP (0)
; Ðàçìåð ïðèíèìàåìîãî áëîêà äàííûõ â áàéòàõ
CDBlockSize DW ?
; Àäðåñ ñ÷èòûâàåìîãî ñåêòîðà äàííûõ
177,7 → 176,7
TickCounter_1 DD 0
; Âðåìÿ íà÷àëà îæèäàíèÿ ãîòîâíîñòè óñòðîéñòâà
WURStartTime DD 0
; óêàçàòåëü áóôåðà äëÿ ñ÷èòûâàíèÿ
; óêàçàòåëü áóôåðà äëÿ ñ÷èòûâàíè
CDDataBuf_pointer dd 0
 
;****************************************************
342,7 → 341,7
add DX,7 ;ïîðò 1õ7h
@@WaitDevice0_1:
call change_task
; Ïðîâåðèòü âðåìÿ îæèäàíèÿ
; Ïðîâåðèòü âðåìÿ îæèäàíè
mov EAX,[timer_ticks]
sub EAX,[TickCounter_1]
cmp EAX,BSYWaitTime
464,12 → 463,12
jmp .test
@@:
call change_task
; Ïðîâåðèòü âðåìÿ îæèäàíèÿ
; Ïðîâåðèòü âðåìÿ îæèäàíè
mov eax,[timer_ticks]
sub eax,[TickCounter_1]
cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê.
ja @@Err1_4 ;îøèáêà òàéì-àóòà
; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ
; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíè
.test:
in AL,DX
; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY
645,7 → 644,7
; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT
; Çàäàòü êîä êîìàíäû
mov [PacketCommand],word 1Bh
; Çàäàòü îïåðàöèþ çàãðóçêè íîñèòåëÿ
; Çàäàòü îïåðàöèþ çàãðóçêè íîñèòåë
mov [PacketCommand+4],word 00000011b
; Ïîäàòü êîìàíäó
call SendPacketNoDatCommand
666,7 → 665,7
; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT
; Çàäàòü êîä êîìàíäû
mov [PacketCommand],word 1Bh
; Çàäàòü îïåðàöèþ èçâëå÷åíèÿ íîñèòåëÿ
; Çàäàòü îïåðàöèþ èçâëå÷åíèÿ íîñèòåë
mov [PacketCommand+4],word 00000010b
; Ïîäàòü êîìàíäó
call SendPacketNoDatCommand
/kernel/branches/kolibri_pe/blkdev/hd_drv.inc
478,10 → 478,10
ret
 
iglobal
align 4
align 8
; note that IDE descriptor table must be 4-byte aligned and do not cross 4K boundary
IDE_descriptor_table:
dd IDE_DMA
dd IDE_DMA+(0x100000000-OS_BASE)
dw 0x2000
dw 0x8000
 
579,7 → 579,7
mov eax, [esp+4]
sub eax, [dma_cur_sector]
shl eax, 9
add eax, (OS_BASE+IDE_DMA)
add eax, IDE_DMA
push ecx esi edi
mov esi, eax
shl edi, 9
598,7 → 598,7
ret
.notread:
mov eax, IDE_descriptor_table
mov dword [eax], IDE_DMA
mov dword [eax], IDE_DMA+(0x100000000-OS_BASE)
mov word [eax+4], 0x2000
sub eax, OS_BASE
mov dx, [IDEContrRegsBaseAddr]
694,8 → 694,8
shl esi, 9
call calculate_cache_2
add esi,eax
mov edi, (OS_BASE+IDE_DMA)
mov dword [edx], IDE_DMA
mov edi, IDE_DMA
mov dword [edx], IDE_DMA+(0x100000000-OS_BASE)
movzx ecx, [cache_chain_size]
shl ecx, 9
mov word [edx+4], cx
/kernel/branches/kolibri_pe/const.inc
208,68 → 208,35
OS_BASE equ 0xE0000000
IMAGE_BASE equ (OS_BASE+LOAD_BASE)
 
window_data equ OS_BASE
BOOT_VAR equ OS_BASE
 
CURRENT_TASK equ (OS_BASE+0x0003000)
TASK_COUNT equ (OS_BASE+0x0003004)
TASK_BASE equ (OS_BASE+0x0003010)
TASK_DATA equ (OS_BASE+0x0003020)
TASK_EVENT equ (OS_BASE+0x0003020)
SB16Buffer equ (OS_BASE+0x10000)
 
mouseunder equ (OS_BASE+0x0006900)
CDDataBuf equ (OS_BASE+0x0007000)
FLOPPY_BUFF equ (OS_BASE+0x0008000)
ACTIVE_PROC_STACK equ (OS_BASE+0x000A400) ;unused
TASK_COUNT equ (CURRENT_TASK+0x04)
TASK_BASE equ (CURRENT_TASK+0x10)
TASK_DATA equ (CURRENT_TASK+0x20)
TASK_EVENT equ (CURRENT_TASK+0x20)
 
WIN_STACK equ (OS_BASE+0x000C000)
WIN_POS equ (OS_BASE+0x000C400)
FDD_BUFF equ (OS_BASE+0x000D000)
 
DRIVE_DATA equ (OS_BASE+0x0070000)
 
SLOT_BASE equ (OS_BASE+0x0080000)
 
VGABasePtr equ (OS_BASE+0x00A0000)
 
RAMDISK_FAT equ (OS_BASE+0x0180000)
FLOPPY_FAT equ (OS_BASE+0x0182000)
IRQ_SAVE equ (OS_BASE+0x0190000)
 
IDE_DMA equ 0x184000
stack_data_start equ (OS_BASE+0x01A0000)
eth_data_start equ (OS_BASE+0x01A0000)
stack_data equ (OS_BASE+0x01A4000)
stack_data_end equ (OS_BASE+0x01Bffff)
resendQ equ (OS_BASE+0x01C0000)
 
BgrAuxTable equ (OS_BASE+0x0198000)
; unused?
SB16Buffer equ (OS_BASE+0x01A0000)
SB16_Status equ (OS_BASE+0x01B0000)
 
BUTTON_INFO equ (OS_BASE+0x01C0000)
RESERVED_PORTS equ (OS_BASE+0x01D0000)
IRQ_SAVE equ (OS_BASE+0x01E0000)
BOOT_VAR equ (OS_BASE+0x01f0000)
 
stack_data_start equ (OS_BASE+0x0200000)
eth_data_start equ (OS_BASE+0x0200000)
stack_data equ (OS_BASE+0x0204000)
stack_data_end equ (OS_BASE+0x021ffff)
resendQ equ (OS_BASE+0x0220000)
VMODE_BASE equ (OS_BASE+0x0228000)
skin_data equ (OS_BASE+0x0230000)
draw_data equ (OS_BASE+0x0238000);
 
BgrDrawMode equ (OS_BASE+0x023BFF4)
BgrDataWidth equ (OS_BASE+0x023BFF8)
BgrDataHeight equ (OS_BASE+0x023BFFC)
 
virtual at (OS_BASE+0x023CF80)
virtual at (OS_BASE+0x01C8F80)
tss TSS
end virtual
 
LAST_PAGE equ 0x0240000
LAST_PAGE equ 0x01CB000
 
;sys_pgmap equ (OS_BASE+LAST_PAGE)
twdw equ (CURRENT_TASK-window_data)
 
twdw equ 0x3000 ;(CURRENT_TASK-window_data)
 
std_application_base_address equ new_app_base
RING0_STACK_SIZE equ (0x2000 - 512) ;512 áàéò äëÿ êîíòåêñòà FPU
 
REG_SS equ (RING0_STACK_SIZE-4)
303,6 → 270,8
PG_LARGE equ 0x080
PG_GLOBAL equ 0x100
 
PG_SHARED equ 0x200
 
;;;;;;;;;;;boot time variables
 
;BOOT_BPP equ 0x9000 ;byte bits per pixel
487,14 → 456,6
.pg_mutex dd ?
}
 
;struc LIB
;{ .lib_name rb 16
; .lib_base dd ?
; .lib_start dd ?
; .export dd ?
; .import dd ?
;}
 
struc SRV
{ .srv_name rb 16 ;ASCIIZ string
.magic dd ? ;+0x10 ;'SRV '
/kernel/branches/kolibri_pe/core/dll.c
454,10 → 454,10
thr_stack->ecx = 0;
thr_stack->eax = 0;
thr_stack->eip = entry;
thr_stack->cs = 0x1b;
thr_stack->cs = sel_app_code;
thr_stack->eflags = EFL_IOPL3 | EFL_IF;
thr_stack->pe_sp = 0x7FFFF000 + ((u32_t)ex_stack & 0xFFF);
thr_stack->pe_ss = 0x23;
thr_stack->pe_ss = sel_app_data;
 
};
 
585,13 → 585,12
 
DBG("import from %s\n",libname);
 
exp_dll = find_dll(&core_dll.link, libname);
if(exp_dll == NULL)
{
exp_dll = find_dll(&current_slot->dll_list, libname);
if(exp_dll != NULL)
if(exp_dll == NULL)
{
DBG("find %s\n", exp_dll->img_name);
}
else
{
int len = strlen(libname)+1;
 
memcpy(path, "/sys/lib/",9);
604,6 → 603,8
return false;
};
}
};
DBG("find %s\n", exp_dll->img_name);
 
exp = exp_dll->img_exp;
 
/kernel/branches/kolibri_pe/core/init.asm
218,26 → 218,9
 
; SAVE & CLEAR 0-0xffff
 
cld
xor esi, esi
mov edi,BOOT_VAR
mov ecx,0x10000 / 4
rep movsd
 
xor edi, edi
xor eax, eax
mov ecx,0x10000 / 4
rep stosd
 
mov edi, 0x40000
mov ecx, (0x90000-0x40000)/4
rep stosd
 
mov dword [_sys_pdbr], eax
mov dword [_sys_pdbr+4], eax
 
xchg bx, bx
 
movzx eax,word [BOOT_VAR+0x9008] ; screen mode
mov [scr_mode],eax
 
256,8 → 239,6
 
mov [_current_thread], eax
 
xchg bx, bx
 
mov ebx, [eax+THR.pdir]
mov ecx, cr3
cmp ebx, ecx
/kernel/branches/kolibri_pe/core/sys32.inc
592,26 → 592,25
pusha ; save window coordinates for window restoring
cld
shl esi,5
add esi,window_data
mov eax,[esi+WDATA.box.left]
mov eax,[window_data+esi+WDATA.box.left]
mov [dlx],eax
add eax,[esi+WDATA.box.width]
add eax,[window_data+esi+WDATA.box.width]
mov [dlxe],eax
mov eax,[esi+WDATA.box.top]
mov eax,[window_data+esi+WDATA.box.top]
mov [dly],eax
add eax,[esi+WDATA.box.height]
add eax,[window_data+esi+WDATA.box.height]
mov [dlye],eax
 
xor eax, eax
mov [esi+WDATA.box.left],eax
mov [esi+WDATA.box.width],eax
mov [esi+WDATA.box.top],eax
mov [esi+WDATA.box.height],eax
mov [esi+WDATA.cl_workarea],eax
mov [esi+WDATA.cl_titlebar],eax
mov [esi+WDATA.cl_frames],eax
mov dword [esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn
lea edi, [esi-window_data+draw_data]
mov [window_data+esi+WDATA.box.left],eax
mov [window_data+esi+WDATA.box.width],eax
mov [window_data+esi+WDATA.box.top],eax
mov [window_data+esi+WDATA.box.height],eax
mov [window_data+esi+WDATA.cl_workarea],eax
mov [window_data+esi+WDATA.cl_titlebar],eax
mov [window_data+esi+WDATA.cl_frames],eax
mov dword [window_data+esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn
lea edi, [esi+draw_data]
mov ecx,32/4
rep stosd
popa
812,9 → 811,6
xor esi, esi
call redrawscreen
 
mov [mouse_background], 0 ; no mouse background
mov [dont_draw_mouse], 0 ; draw mouse
 
mov [application_table_status],0
;mov esi,process_terminated
;call sys_msg_board_str
/kernel/branches/kolibri_pe/core/taskman.inc
432,7 → 432,7
mov [ecx*8+SLOT_BASE+APPDATA.saved_esp], ebx
mov [CURRENT_TASK+ecx+TASKDATA.state], 0
 
DEBUGF 1,"%s",new_process_running
; DEBUGF 1,"%s",new_process_running
.err:
mov eax,[process_number] ;set result
mov [application_table_status], 0 ;unlock application_table_status mutex
446,7 → 446,6
 
align 4
_pe_restart:
xchg bx, bx
add esp, 12
popad
iretd
/kernel/branches/kolibri_pe/core/v86.inc
94,9 → 94,9
pop eax
; first page - BIOS data (shared between all machines!)
; physical address = 0x1f0000
; linear address = BOOT_VAR = OS_BASE + 0x1f0000
mov dword [eax], (BOOT_VAR - OS_BASE) or 111b
mov dword [eax+800h], BOOT_VAR
; linear address = 0
mov dword [eax], 111b
mov dword [eax+800h], OS_BASE
; page before 0xA0000 - Extended BIOS Data Area (shared between all machines!)
; physical address = 0x9C000
; linear address = 0x8009C000
/kernel/branches/kolibri_pe/data32.inc
282,13 → 282,49
 
align 4096
 
_sys_pdbr rd 1024
SLOT_BASE:
rb 64*1024
DRIVE_DATA:
rb 64*1024
RESERVED_PORTS:
rb 64*1024
FLOPPY_BUFF:
rb 16*1024
 
BUTTON_INFO:
rb 16*1024
BgrAuxTable:
rb 32*1024
skin_data:
rb 32*1024
 
IDE_DMA: rb 32*1024
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
window_data:
rb 8192
 
CURRENT_TASK:
_current_task:
rb 8192
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
draw_data:
rb 4096
CDDataBuf:
rb 4096
 
cur_saved_data rb 4096
 
fpu_data: rb 512
_sys_pdbr rd 1024
 
 
fpu_data:
rb 512
 
WIN_STACK:
rb 0x400
WIN_POS:
rb 0x800
 
idts rq 0x42
 
; device irq owners
318,6 → 354,9
FONT_I rb 2304 ;16*144
FONT_II rb 2560 ;16*160
 
RAMDISK_FAT: rb 2856*2 +16 ;16*357
FLOPPY_FAT: rb 2856*2 +16
 
_z_core rd 52
 
mem_block_map rb 512
357,9 → 396,6
srv.fd rd 1
srv.bk rd 1
 
scr_width rd 1
scr_height rd 1
 
_HwCursorCreate:
create_cursor rd 1
 
375,12 → 411,16
def_cursor rd 1
current_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
 
cur.lock rd 1 ;1 - lock update, 2- hide
cur.left rd 1 ;cursor clip box
cur.top rd 1
cur.right rd 1
cur.bottom rd 1
cur.w rd 1
cur.h rd 1
 
ipc_tmp rd 1
ipc_pdir rd 1
ipc_ptab rd 1
417,6 → 457,9
put_pixel rd 1
get_pixel rd 1
 
_screen_width rd 1
_screen_height rd 1
 
Screen_Max_X rd 1
Screen_Max_Y rd 1
 
423,8 → 466,9
btn_addr rd 1
 
redraw_background rd 1
mouse_background rd 1
dont_draw_mouse rd 1
BgrDrawMode rd 1
BgrDataWidth rd 1
BgrDataHeight rd 1
 
MOUSE_VISIBLE rd 1
WIN_TEMP_XY rd 1
439,9 → 483,6
KEY_COUNT rd 1
KEY_BUFF rb 128
 
 
mouse_color_mem rd 1
color_temp rd 1
btn_down rd 1
x_under rd 1
y_under rd 1
/kernel/branches/kolibri_pe/drivers/sb16/CONFIG.INC
6,10 → 6,8
API_VERSION equ 0 ;debug
 
OS_BASE equ 0xE0000000
new_app_base equ 0x0
PROC_BASE equ (OS_BASE+0x080000)
SB16Buffer equ (OS_BASE+0x1A0000)
SB16_Status equ (OS_BASE+0x1B0000)
;PROC_BASE equ (OS_BASE+0x080000)
SB16Buffer equ (OS_BASE+0x10000)
DMAPage equ ((SB16Buffer-OS_BASE) shr 16)
 
SB16Buffer0 equ SB16Buffer
/kernel/branches/kolibri_pe/gui/button.inc
584,8 → 584,6
popad
 
call negativebutton
mov [mouse_background], 0 ; no mouse background
mov [dont_draw_mouse], 0 ; draw mouse
;..................................... start 5/5 : modified by vhanla .............................
; check coordinates
iglobal
/kernel/branches/kolibri_pe/gui/skincode.inc
10,8 → 10,6
 
include "skindata.inc"
 
;skin_data = 0x00778000
 
read_skin_file:
stdcall load_file, ebx
test eax, eax
213,7 → 211,7
ret
 
sys_putimage_with_check:
or ebx,ebx
test ebx,ebx
jz @f
call sys_putimage.forced
@@: ret
/kernel/branches/kolibri_pe/gui/skindata.inc
54,6 → 54,8
skin_btn_close SKIN_BUTTON
skin_btn_minimize SKIN_BUTTON
 
public _skin_active
_skin_active:
skin_active SKIN_DATA
skin_inactive SKIN_DATA
 
<
/kernel/branches/kolibri_pe/gui/window.inc
498,7 → 498,7
 
repos_windows:
mov ecx,[TASK_COUNT]
mov edi, OS_BASE+0x20*2
mov edi, window_data+0x20*2
call force_redraw_background
dec ecx
jge @f
616,33 → 616,6
ret
 
 
uglobal
new_window_starting dd 0
endg
 
 
sys_window_mouse:
 
push eax
 
mov eax,[timer_ticks]
cmp [new_window_starting],eax
jb swml1
 
mov [mouse_background], 0 ; no mouse background
mov [dont_draw_mouse], 0 ; draw mouse
 
mov [new_window_starting],eax
 
swml1:
 
pop eax
 
ret
 
 
 
 
drawwindow_I_caption:
 
mov ecx,[edx+WDATA.cl_titlebar] ; grab bar
1045,8 → 1018,6
ret
 
 
 
 
waredraw: ; if redraw necessary at activate
 
pushad
1088,8 → 1059,6
popad
 
call windowactivate
mov [mouse_background], 0 ; no mouse background
mov [dont_draw_mouse], 0 ; draw mouse
ret
 
 
1156,7 → 1125,6
add edx, [edi+WDATA.box.height]
call calculatescreen
.done:
mov [mouse_background], 0 ; no mouse under
.skip_redrawings:
popfd
ret
1167,6 → 1135,8
window_moved db 'K : Window - done',13,10,0
endg
 
bPressedMouseXY_W db 0x0
 
; check window touch
align 4
checkwindows:
1194,59 → 1164,34
popad
ret
.mouse_buttons_pressed:
;..................................... start 2/4 : modified by vhanla .................
jmp @f
bPressedMouseXY_W db 0x0
@@:
;..................................... end 2/4 : modified by vhanla ...................
mov esi,[TASK_COUNT]
inc esi
 
;..................................... start 3/4 : modified by vhanla .................
push eax
cmp [bPressedMouseXY_W],0
jnz @f
mov [bPressedMouseXY_W],1
mov ax,[MOUSE_X]
mov [mx],ax
mov ax,[MOUSE_Y]
mov [my],ax
@@:
pop eax
;..................................... end 3/4 : modified by vhanla ...................
 
movzx eax,word [MOUSE_Y]
movzx ebx,word [MOUSE_X]
mov ecx, [Screen_Max_X]
add ebx, [_display_data]
inc ecx
mul ecx
movzx edi, byte [ebx+eax]
 
cwloop:
cmp esi,2
jb .exit
 
dec esi
movzx edi, word [WIN_POS + esi * 2] ; ebx
movzx esi, word [WIN_STACK + edi * 2]
 
shl edi, 5
add edi, window_data
; mov edi, ebx
mov ecx, [edi + WDATA.box.left]
mov edx, [edi + WDATA.box.top]
 
mov eax,ecx
mov ebx,edx
test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED
jnz cwloop
movzx eax,word [MOUSE_X]
movzx ebx,word [MOUSE_Y]
 
;..................................... start 4/4 : modified by vhanla .................
movzx eax, word [mx]; movzx eax,word[mouse_x]
movzx ebx, word [my]; movzx ebx,word[MOUSE_Y]
;..................................... endt 4/4 : modified by vhanla ..................
cmp ecx, eax
jae cwloop
cmp edx, ebx
jae cwloop
add ecx, [edi + WDATA.box.width]
add edx, [edi + WDATA.box.height]
cmp eax, ecx
jae cwloop
cmp ebx, edx
jae cwloop
 
pushad
mov eax, esi
mov ebx, [TASK_COUNT]
1371,13 → 1316,10
 
newchm:
 
mov [dont_draw_mouse], 1
 
call checkidle
 
call checkVga_N13
 
mov [mouse_background], 0
 
call [draw_pointer]
 
1480,7 → 1422,6
cmp byte [btn_down], 0
jne newchm
; new position done
mov [dont_draw_mouse], 1
mov cl,0
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
jnz @f
1507,7 → 1448,8
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP or WSTATE_MAXIMIZED
jnz @f
add ecx,2
@@: sub edi,window_data
@@:
sub edi,window_data
shr edi,5
shl edi,8
add edi,SLOT_BASE+APPDATA.saved_box
1633,9 → 1575,6
cmp [reposition],0
je retwm
 
mov [dont_draw_mouse], 1 ; no mouse
 
 
push eax ebx ecx edx
mov eax,[edi+WDATA.box.left]
mov ebx,[edi+WDATA.box.top]
1662,7 → 1601,6
 
mov ecx,100 ; wait to avoid mouse residuals
waitre2:
mov [dont_draw_mouse], 1
call checkidle