From db82eb41f19531a4535a25017b30643e1f0680f4 Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Sat, 6 Jun 2009 17:25:32 +0000 Subject: [PATCH] revert to static single-color background if memory allocation failed git-svn-id: svn://kolibrios.org@1107 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/data32.inc | 2 +- kernel/trunk/kernel.asm | 63 ++++++++++++++++++++++++++++------------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/kernel/trunk/data32.inc b/kernel/trunk/data32.inc index 74059890bf..704936bc81 100644 --- a/kernel/trunk/data32.inc +++ b/kernel/trunk/data32.inc @@ -398,7 +398,7 @@ MouseTickCounter rd 1 img_background rd 1 mem_BACKGROUND rd 1 -wraw_bacground_select rb 1 +static_background_data rd 1 cache_ide0: cache_ide0_pointer rd 1 diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index d7fb18d4f8..ceac72092c 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -549,9 +549,8 @@ high_code: mov [BgrDrawMode],eax mov [BgrDataWidth],eax mov [BgrDataHeight],eax - mov [mem_BACKGROUND],4095 - stdcall kernel_alloc, [mem_BACKGROUND] - mov [img_background], eax + mov [mem_BACKGROUND], 4 + mov [img_background], static_background_data mov [SLOT_BASE + 256 + APPDATA.dir_table], sys_pgdir - OS_BASE @@ -2280,7 +2279,11 @@ sys_background: pushad ; return memory for old background - stdcall kernel_free, [img_background] + mov eax, [img_background] + cmp eax, static_background_data + jz @f + stdcall kernel_free, eax +@@: ; calculate RAW size xor eax,eax inc eax @@ -2299,9 +2302,18 @@ sys_background: ; get memory for new background stdcall kernel_alloc, eax test eax, eax - jz .exit_mem + jz .memfailed mov [img_background], eax -.exit_mem: + jmp .exit +.memfailed: +; revert to static monotone data + mov [img_background], static_background_data + xor eax, eax + inc eax + mov [BgrDataWidth], eax + mov [BgrDataHeight], eax + mov [mem_BACKGROUND], 4 +.exit: popad mov [bgrlock], 0 @@ -2313,20 +2325,25 @@ nosb1: cmp ebx,2 ; SET PIXEL jnz nosb2 + mov eax, [img_background] + test ecx, ecx + jz @f + cmp eax, static_background_data + jz .ret +@@: mov ebx, [mem_BACKGROUND] add ebx, 4095 and ebx, -4096 sub ebx, 4 cmp ecx, ebx - ja @F + ja .ret - mov eax,[img_background] mov ebx,[eax+ecx] and ebx,0xFF000000 ;255*256*256*256 and edx,0x00FFFFFF ;255*256*256+255*256+255 add edx,ebx mov [eax+ecx],edx -@@: +.ret: ret nosb2: @@ -2356,6 +2373,13 @@ draw_background_temp: cmp ebx,5 ; BLOCK MOVE TO BGR jnz nosb5 + cmp [img_background], static_background_data + jnz @f + test edx, edx + jnz .fin + cmp esi, 4 + ja .fin + @@: ; bughere mov eax, ecx mov ebx, edx @@ -2377,6 +2401,8 @@ draw_background_temp: @@: mov eax, [CURRENT_TASK] mov [bgrlockpid], eax + cmp [img_background], static_background_data + jz .nomem stdcall user_alloc, [mem_BACKGROUND] mov [esp+32], eax test eax, eax @@ -2477,19 +2503,24 @@ nogb1: cmp eax,2 ; PIXEL jnz nogb2 + mov eax, [img_background] + test ebx, ebx + jz @f + cmp eax, static_background_data + jz .ret +@@: mov ecx, [mem_BACKGROUND] add ecx, 4095 and ecx, -4096 sub ecx, 4 cmp ebx, ecx - ja @F + ja .ret - mov eax,[img_background] mov eax,[ebx+eax] and eax, 0xFFFFFF mov [esp+36],eax -@@: +.ret: ret nogb2: @@ -3641,14 +3672,6 @@ redrawscreen: calculatebackground: ; background - ; all black - - mov edi, [img_background] ;IMG_BACKGROUND ; set background to black - xor eax, eax - mov ecx, 1023 ;0x0fff00 / 4 - cld - rep stosd - mov edi,display_data ; set os to use all pixels mov eax,0x01010101 mov ecx,1280*1024 / 4