diff --git a/kernel/trunk/const.inc b/kernel/trunk/const.inc index f54aa9e44c..29b5d7dc9f 100644 --- a/kernel/trunk/const.inc +++ b/kernel/trunk/const.inc @@ -189,6 +189,7 @@ TASK_BASE equ (OS_BASE+0x0003010) TASK_DATA equ (OS_BASE+0x0003020) TASK_EVENT equ (OS_BASE+0x0003020) +d_width_calc_area equ (OS_BASE+0x0005000) mouseunder equ (OS_BASE+0x0006900) CDDataBuf equ (OS_BASE+0x0007000) FLOPPY_BUFF equ (OS_BASE+0x0008000) diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index d842df51a6..412b3ebcf2 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -402,6 +402,8 @@ high_code: mul [_display.height] mov [_WinMapSize], eax + call calculate_fast_getting_offset_for_WinMapAddress + mov esi, BOOT_VAR+0x9080 movzx ecx, byte [esi-1] mov [NumBiosDisks], ecx @@ -4793,7 +4795,22 @@ read_from_hd: ; Read from hd - fn not in use paleholder: ret - +;------------------------------------------------------------------------------ +align 4 +calculate_fast_getting_offset_for_WinMapAddress: +; calculate data area for fast getting offset to _WinMapAddress + mov eax, [_display.width] + mov ecx, [_display.height] + inc ecx + mov edi, d_width_calc_area + cld +@@: + stosd + add eax, [_display.width] + dec ecx + jnz @r + ret +;------------------------------------------------------------------------------ align 4 set_screen: cmp eax, [Screen_Max_X] @@ -4830,6 +4847,8 @@ set_screen: test eax, eax jz .epic_fail + call calculate_fast_getting_offset_for_WinMapAddress + popad call repos_windows diff --git a/kernel/trunk/memmap.inc b/kernel/trunk/memmap.inc index 84fd8b1d6e..a0308ebf83 100644 --- a/kernel/trunk/memmap.inc +++ b/kernel/trunk/memmap.inc @@ -62,7 +62,7 @@ ; 3c dword cpu usage in cpu timer tics ; ; -; 5000 -> 68FF free (6k6) +; 5000 -> 68FF display width fast calc area (6k6) ; 6900 -> 6EFF saved picture under mouse pointer (1k5) ; ; 6F00 -> 6FFF free (256) diff --git a/kernel/trunk/video/vesa20.inc b/kernel/trunk/video/vesa20.inc index 4ef34a4b39..78d8718606 100644 --- a/kernel/trunk/video/vesa20.inc +++ b/kernel/trunk/video/vesa20.inc @@ -556,14 +556,10 @@ __sys_putpixel: jnz .forced ; not forced: - - push eax - mov edx, [_display.width]; screen x size - imul edx, ebx - add eax, [_WinMapAddress] + mov edx, [d_width_calc_area + ebx*4] + add edx, [_WinMapAddress] movzx edx, byte [eax+edx] cmp edx, [CURRENT_TASK] - pop eax jne .exit ;-------------------------------------- align 4