Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 114 → Rev 115

/kernel/trunk/blkdev/cdrom.inc
19,7 → 19,7
cmp eax,2
jnz nocdtl
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add ebx,[edi]
call sys_cdtracklist
ret
/kernel/trunk/blkdev/flp_drv.inc
5,8 → 5,8
; Àäàïòàöèÿ è äîðàáîòêà Mario79
 
give_back_application_data: ; ïåðåñëàòü ïðèëîæåíèþ
mov edi,[3010h]
mov edi,[edi+10h]
mov edi,[0x3010]
mov edi,[edi+TASKDATA.mem_start]
add edi,ecx
give_back_application_data_1:
mov esi,0xD000 ;FDD_DataBuffer ;0x40000
17,8 → 17,8
ret
 
take_data_from_application: ; âçÿòü èç ïðèëîæåíèÿ
mov esi,[3010h]
mov esi,[esi+10h]
mov esi,[0x3010]
mov esi,[esi+TASKDATA.mem_start]
add esi,ecx
take_data_from_application_1:
mov edi,0xD000 ;FDD_DataBuffer ;0x40000
/kernel/trunk/blkdev/rdsave.inc
11,8 → 11,8
img_save_hd_2:
cmp ebx,3
jnz exit_for_anyone
mov edx,[3010h]
mov edx,[edx+10h]
mov edx,[0x3010]
mov edx,[edx+TASKDATA.mem_start]
add edx,ecx
img_save_hd_3:
call reserve_hd1
/kernel/trunk/core/debug.inc
21,7 → 21,7
; destroys eax
mov eax, [0x3000]
shl eax, 8
mov [eax+0x80000+0xBC], ebx
mov [eax+0x80000+APPDATA.dbg_event_mem], ebx
ret
 
get_debuggee_slot:
37,7 → 37,7
shl eax, 5
push ebx
mov ebx, [0x3000]
cmp [0x80000+eax*8+0xAC], ebx
cmp [0x80000+eax*8+APPDATA.debugger_slot], ebx
pop ebx
jnz .ret_bad
; clc ; automatically
51,7 → 51,7
; destroys eax,ebx
call get_debuggee_slot
jc .ret
and dword [eax*8+0x80000+0xAC], 0
and dword [eax*8+0x80000+APPDATA.debugger_slot], 0
call do_resume
.ret:
sti
72,13 → 72,13
; destroys eax,ebx
call get_debuggee_slot
jc .ret
mov bl, [0x3000+eax+0xA] ; process state
mov bl, [0x3000+eax+TASKDATA.state] ; process state
test bl, bl
jz .1
cmp bl, 5
jnz .ret
mov bl, 2
.2: mov [0x3000+eax+0xA], bl
.2: mov [0x3000+eax+TASKDATA.state], bl
.ret:
sti
ret
87,13 → 87,13
jmp .2
 
do_resume:
mov bl, [0x3000+eax+0xA]
mov bl, [0x3000+eax+TASKDATA.state]
cmp bl, 1
jz .1
cmp bl, 2
jnz .ret
mov bl, 5
.2: mov [0x3000+eax+0xA], bl
.2: mov [0x3000+eax+TASKDATA.state], bl
.ret: ret
.1: dec ebx
jmp .2
227,7 → 227,7
call get_debuggee_slot
jc .errret
mov ebp, eax
lea eax, [eax*8+0x80000+0xC0]
lea eax, [eax*8+0x80000+APPDATA.dbg_regs]
; [eax]=dr0, [eax+4]=dr1, [eax+8]=dr2, [eax+C]=dr3
; [eax+10]=dr7
add edx, std_application_base_address
358,7 → 358,7
.1:
mov eax, ebp
shl eax, 8
mov edx, [0x80000+eax+0xBC]
mov edx, [0x80000+eax+APPDATA.dbg_event_mem]
test edx, edx
jz .ret
; read buffer header
414,7 → 414,7
; new debug event
mov eax, ebp
shl eax, 8
or byte [0x80000+eax+0xA8+1], 1 ; set flag 100h
or byte [0x80000+eax+APPDATA.event_mask+1], 1 ; set flag 100h
.ret:
ret
 
432,7 → 432,7
; set DRx registers for task and continue
mov eax, [0x3000]
shl eax, 8
add eax, 0x80000+0xC0
add eax, 0x80000+APPDATA.dbg_regs
mov ecx, [eax+0]
mov dr0, ecx
mov ecx, [eax+4]
455,7 → 455,7
cli
mov eax, [0x3000]
shl eax, 8
mov eax, [0x80000+eax+0xAC]
mov eax, [0x80000+eax+APPDATA.debugger_slot]
test eax, eax
jnz .debug
sti
464,7 → 464,7
mov [error_interrupt], 1
call show_error_parameters
mov edx, [0x3010]
mov byte [edx+0xA], 4
mov byte [edx+TASKDATA.state], 4
jmp change_task
.debug:
; we are debugged process, notify debugger and suspend ourself
484,7 → 484,7
jnz .l1
push edx ; DR6 image
mov ecx, [0x3010]
push dword [ecx+4] ; PID
push dword [ecx+TASKDATA.pid] ; PID
push 12
pop ecx
push 3 ; 3 = debug exception
493,7 → 493,7
pop ecx
pop ecx
mov edx, [0x3010]
mov byte [edx+0xA], 1 ; suspended
mov byte [edx+TASKDATA.state], 1 ; suspended
call change_task
restore_ring3_context
iretd
/kernel/trunk/core/mem.inc
188,7 → 188,7
mov eax,[general_page_table]
call simple_clone_cr3_table ;clone general page table
shl ebx,8
mov [second_base_address+0x80000+ebx+0xB8],eax ;save address of page directory
mov [second_base_address+0x80000+ebx+APPDATA.dir_table],eax ;save address of page directory
pop ebx
ret
199,7 → 199,7
;result:
; eax - physical address of page directory
shl eax,8 ;size of process extended information=256 bytes
mov eax,[second_base_address+0x80000+eax+0xB8]
mov eax,[second_base_address+0x80000+eax+APPDATA.dir_table]
ret
;-----------------------------------------------------------------------------
dispose_app_cr3_table:
213,7 → 213,7
mov ebp,eax
;ebp = process slot in the procedure.
shl eax,8
mov eax,[second_base_address+0x80000+eax+0xB8]
mov eax,[second_base_address+0x80000+eax+APPDATA.dir_table]
mov ebx,eax
;ebx = physical address of page directory
call MEM_Get_Linear_Address
234,10 → 234,10
;eax = current slot of process
mov ecx,eax
shl ecx,5
cmp byte [second_base_address+0x3000+ecx+0xa],9 ;if process running?
cmp byte [second_base_address+0x3000+ecx+TASKDATA.state],9 ;if process running?
jz .next ;skip empty slots
shl ecx,3
cmp [second_base_address+0x80000+ecx+0xB8],ebx ;compare page directory addresses
cmp [second_base_address+0x80000+ecx+APPDATA.dir_table],ebx ;compare page directory addresses
jnz .next
inc edx ;thread found
.next:
/kernel/trunk/core/newproce.inc
33,7 → 33,7
cmp eax,ebx
jz .endnewprocessplace ;empty slot after high boundary
add eax,0x20
cmp word [eax+0xa],9 ;check process state, 9 means that process slot is empty
cmp word [eax+TASKDATA.state],9 ;check process state, 9 means that process slot is empty
jnz .newprocessplace
.endnewprocessplace:
mov ebx,eax
41,7 → 41,7
shr eax,5 ;calculate slot index
cmp eax,256
jge .failed ;it should be <256
mov word [ebx+0xa],9 ;set process state to 9 (for slot after hight boundary)
mov word [ebx+TASKDATA.state],9 ;set process state to 9 (for slot after hight boundary)
mov [new_process_place],eax ;save process slot
pop ebx
ret
113,7 → 113,7
; mov eax,[esp] ;eax - pointer to file name
mov ebx,[new_process_place]
shl ebx,8
add ebx,0x80000
add ebx,0x80000 + APPDATA.app_name
mov ecx,11
call memmove
207,7 → 207,7
;so free directory entry
mov eax,[new_process_place]
shl eax,8
mov eax,[0x80000+eax+0xB8]
mov eax,[0x80000+eax+APPDATA.dir_table]
call MEM_Free_Page
.cleanfailed_mem:
;there is no mem for directory entry, display message.
219,7 → 219,7
;this avoid problems with panel application.
mov edi,[new_process_place]
shl edi,8
add edi,0x80000
add edi,0x80000 + APPDATA.app_name
mov ecx,11
mov eax,' '
cld
280,7 → 280,7
mov eax,[esp] ;eax - pointer to file name
mov ebx,[new_process_place]
shl ebx,8
add ebx,0x80000
add ebx,0x80000 + APPDATA.app_name
mov ecx,11
call memmove
371,7 → 371,7
;so free directory entry
mov eax,[new_process_place]
shl eax,8
mov eax,[0x80000+eax+0xB8]
mov eax,[0x80000+eax+APPDATA.dir_table]
call MEM_Free_Page
.cleanfailed_mem:
;there is no mem for directory entry, display message.
383,7 → 383,7
;this avoid problems with panel application.
mov edi,[new_process_place]
shl edi,8
add edi,0x80000
add edi,0x80000+APPDATA.app_name
mov ecx,11
mov eax,' '
cld
417,13 → 417,13
;(size of application memory)
shl ebx,8
mov eax,[app_mem]
mov [second_base_address+0x80000+0x8c+ebx],eax
mov [second_base_address+0x80000+APPDATA.mem_size+ebx],eax
;set 0x10 field of information about process
;(application base address)
; mov ebx,[new_process_place]
; shl ebx,5
shr ebx,3
mov dword [second_base_address+0x3000+ebx+0x10],std_application_base_address
mov dword [second_base_address+0x3000+ebx+TASKDATA.mem_start],std_application_base_address
 
;add command line parameters
.add_command_line:
466,29 → 466,29
mov eax,ebx
shl ebx,5
add ebx,0x3000 ;ebx - pointer to information about process
mov [ebx+0xe],al ;set window number on screen = process slot
mov [ebx+TASKDATA.wnd_number],al ;set window number on screen = process slot
mov [ebx],dword 1+2+4 ;set default event flags (see 40 function)
mov [ebx+TASKDATA.event_mask],dword 1+2+4 ;set default event flags (see 40 function)
inc dword [process_number]
mov eax,[process_number]
mov [ebx+4],eax ;set PID
mov [ebx+TASKDATA.pid],eax ;set PID
mov ecx,ebx
add ecx,draw_data-0x3000 ;ecx - pointer to draw data
;set draw data to full screen
mov [ecx+0],dword 0
mov [ecx+4],dword 0
mov [ecx+RECT.left],dword 0
mov [ecx+RECT.top],dword 0
mov eax,[0xfe00]
mov [ecx+8],eax
mov [ecx+RECT.right],eax
mov eax,[0xfe04]
mov [ecx+12],eax
mov [ecx+RECT.bottom],eax
;set window state to 'normal' (non-minimized/maximized/rolled-up) state
mov [ecx+WDATA.fl_wstate],WSTATE_NORMAL
;set cr3 register in TSS of application
mov ecx,[new_process_place]
shl ecx,8
mov eax,[0x800B8+ecx]
mov eax,[0x80000+APPDATA.dir_table+ecx]
add eax,8+16 ;add flags
mov [l.cr3],eax
566,12 → 566,12
; set if debuggee
test byte [esp+28], 1
jz .no_debug
mov [0x3000+ebx+0xa], byte 1 ; set process state - suspended
mov [0x3000+ebx+TASKDATA.state], 1 ; set process state - suspended
mov eax, [0x3000]
mov [0x80000+ebx*8+0xac], eax ;set debugger PID - current
mov [0x80000+ebx*8+APPDATA.debugger_slot], eax ;set debugger PID - current
jmp .debug
.no_debug:
mov [0x3000+ebx+0xa], byte 0 ; set process state - running
mov [0x3000+ebx+TASKDATA.state], 0 ; set process state - running
.debug:
mov esi,new_process_running
622,22 → 622,22
 
mov esi,[0x3000]
shl esi,8
add esi,0x80000
add esi,0x80000+APPDATA.app_name
mov ebx,esi ;ebx=esi - pointer to extended information about current thread
mov edi,[new_process_place]
shl edi,8
add edi,0x80000
mov edx,edi ;edx=edi - pointer to extended infomation about new thread
lea edx, [edi+APPDATA.app_name] ;edx=edi - pointer to extended infomation about new thread
mov ecx,256/4
rep stosd ;clean extended information about new thread
mov edi,edx
mov ecx,11
rep movsb ;copy process name
mov eax,[ebx+0x8c]
mov eax,[ebx+APPDATA.mem_size]
mov [app_mem],eax ;set memory size
mov eax,[ebx+0xb8]
mov [edx+0xb8],eax ;copy page directory
mov eax,[ebx+APPDATA.dir_table]
mov dword [edx-APPDATA.app_name+APPDATA.dir_table],eax ;copy page directory
; mov eax,[new_process_place]
; mov ebx,[0x3000]
; call addreference_app_cr3_table
669,10 → 669,10
and ebx,not (4096-1) ;round up size
mov ecx,[0x3000]
shl ecx,8
mov edx,[0x8008C+ecx]
mov edx,[0x80000 + APPDATA.mem_size +ecx]
add edx,4095
and edx,not (4096-1) ;old size
mov eax,[0x800B8+ecx]
mov eax,[0x80000 + APPDATA.dir_table+ecx]
call MEM_Get_Linear_Address
;eax - linear address of page directory
call MEM_Heap_Lock ;guarantee that two threads willn't
704,10 → 704,10
mov ebx,esi
mov eax,[0x3000]
shl eax,8
mov [eax+0x8008c],ebx ;write new memory size
mov [eax+0x80000 + APPDATA.mem_size],ebx ;write new memory size
;search threads and update
;application memory size infomation
mov ecx,[eax+0x800b8]
mov ecx,[eax+0x80000 + APPDATA.dir_table]
mov eax,2
.search_threads:
718,12 → 718,12
jg .search_threads_end
mov edx,eax
shl edx,5
cmp word [0x3000+edx+0xa],9 ;if slot empty?
cmp word [0x3000+edx+TASKDATA.state],9 ;if slot empty?
jz .search_threads_next
shl edx,3
cmp [edx+0x800b8],ecx ;if it is our thread?
cmp [edx+0x80000+APPDATA.dir_table],ecx ;if it is our thread?
jnz .search_threads_next
mov [edx+0x8008c],ebx ;update memory size
mov [edx+0x80000+APPDATA.mem_size],ebx ;update memory size
.search_threads_next:
inc eax
jmp .search_threads
753,9 → 753,9
.loop:
;ecx=offset of current process info entry
;ebx=maximum permitted offset
cmp byte [second_base_address+0x3000+ecx+0xa],9
cmp byte [second_base_address+0x3000+ecx+TASKDATA.state],9
jz .endloop ;skip empty slots
cmp [second_base_address+0x3000+ecx+0x4],eax ;check PID
cmp [second_base_address+0x3000+ecx+TASKDATA.pid],eax ;check PID
jz .pid_found
.endloop:
add ecx,32
801,7 → 801,7
; eax - number of bytes written
pushad
shl eax,8
mov eax,[0x80000+eax+0xB8]
mov eax,[0x80000+eax+APPDATA.dir_table]
call MEM_Get_Linear_Address
mov ebp,eax
;ebp=linear address of page directory of other process.
906,7 → 906,7
; eax - number of bytes read.
pushad
shl eax,8
mov eax,[0x80000+eax+0xB8]
mov eax,[0x80000+eax+APPDATA.dir_table]
call MEM_Get_Linear_Address
mov ebp,eax
add edx,std_application_base_address
1009,10 → 1009,10
test ecx,ecx
jle .ok
shl eax,5
cmp word [0x3000+eax+0xa],0
cmp word [0x3000+eax+TASKDATA.state],0
jnz .failed
shl eax,3
mov eax,[0x80000+eax+0xb8]
mov eax,[0x80000+eax+APPDATA.dir_table]
test eax,eax
jz .failed
call MEM_Get_Linear_Address
1081,8 → 1081,8
shl edi,8
add edi,0x80000
cli
mov [edi+0xA0],ebx ;set fields in extended information area
mov [edi+0xA4],ecx
mov [edi+APPDATA.ipc_start],ebx ;set fields in extended information area
mov [edi+APPDATA.ipc_size],ecx
sti
mov [esp+36],dword 0 ;success
ret
1100,10 → 1100,10
mov ebp,eax
;ebp = slot of other process
shl eax,8
mov edi,[eax+0x80000+0xa0] ;is ipc area defined?
mov edi,[eax+0x80000+APPDATA.ipc_start] ;is ipc area defined?
test edi,edi
jz .no_ipc_area
mov esi,[eax+0x80000+0xa4] ;esi - size of buffer
mov esi,[eax+0x80000+APPDATA.ipc_size] ;esi - size of buffer
push dword -1 ;temp variable for read_process_memory
mov ebx,esp
push ecx
1131,7 → 1131,7
add edx,esi
sub edx,4 ;move to beginning of place for our message
mov eax,[second_base_address+0x3010]
mov eax,[eax+0x4] ;eax - our PID
mov eax,[eax+TASKDATA.pid] ;eax - our PID
mov [esp+8],eax
mov eax,ebp
call write_process_memory ;write PID
1151,7 → 1151,7
;awake other process
shl ebp,8
mov eax,ebp
or [eax+0x800A8],dword 0x40
or [eax+0x80000+APPDATA.event_mask],dword 0x40
cmp dword [check_idle_semaphore],20
jge .ipc_no_cis
1237,7 → 1237,7
lea esi,[eax-11] ;last 11 bytes = application name
mov edi,[new_process_place]
shl edi,8
add edi,0x80000
add edi,0x80000+APPDATA.app_name
mov ecx,11
cld
rep movsb ;copy name to extended information about process
1366,7 → 1366,7
;so free directory entry
mov eax,[new_process_place]
shl eax,8
mov eax,[0x80000+eax+0xB8]
mov eax,[0x80000+eax+APPDATA.dir_table]
call MEM_Free_Page
.cleanfailed_mem:
;there is no mem for directory entry, display message.
1378,7 → 1378,7
;this avoid problems with panel application.
mov edi,[new_process_place]
shl edi,8
add edi,0x80000
add edi,0x80000+APPDATA.app_name
mov ecx,11
mov eax,' '
cld
1455,7 → 1455,7
mov ecx, 8 ; 8 chars for name
mov edi, [new_process_place]
shl edi, cl
add edi, 0x80000
add edi, 0x80000+APPDATA.app_name
.copy_process_name_loop:
lodsb
cmp al, '.'
1600,7 → 1600,7
; clean process name, this avoid problems with @panel
mov edi, [new_process_place]
shl edi, 8
add edi, 0x80000
add edi, 0x80000+APPDATA.app_name
mov ecx, 11
mov al, ' '
rep stosb
/kernel/trunk/core/physmem.inc
95,7 → 95,7
mov eax,[esi+physical_mem_block.start]
mov [esp+28],eax
mov eax,[0x3010]
mov eax,[eax+0x4]
mov eax,[eax+TASKDATA.pid]
mov [esi+physical_mem_block.flags],eax
popad
ret
105,7 → 105,7
mov eax,[esi+physical_mem_block.start]
mov [esp+28],eax
mov ecx,[0x3010]
mov ecx,[ecx+0x4]
mov ecx,[ecx+TASKDATA.pid]
mov [esi+physical_mem_block.flags],ecx
mov ecx,[esi+physical_mem_block.size]
mov [esi+physical_mem_block.size],ebx
/kernel/trunk/core/sched.inc
91,11 → 91,11
 
update_counters:
mov edi, [0x3010]
mov ebx, [edi+0x18] ; time stamp counter add
mov ebx, [edi+TASKDATA.counter_add] ; time stamp counter add
call _rdtsc
sub eax, ebx
add eax, [edi+0x14] ; counter sum
mov [edi+0x14], eax
add eax, [edi+TASKDATA.counter_sum] ; counter sum
mov [edi+TASKDATA.counter_sum], eax
ret
 
 
123,7 → 123,7
add edi,0x20
inc ebx
 
mov al, byte [edi+0xA]
mov al, byte [edi+TASKDATA.state]
test al, al
jz .found
cmp al, 1
146,13 → 146,13
test eax, eax
jz .waiting_for_event
mov [event_sched], eax
mov [edi+0xA], byte 0
mov [edi+TASKDATA.state], byte 0
.noevents:
.found:
mov [0x3000],ebx
mov [0x3010],edi
call _rdtsc
mov [edi+0x18],eax
mov [edi+TASKDATA.counter_add],eax
 
xor eax, eax
cmp ebx, [prev_slot]
181,9 → 181,9
mov ecx, [0x3004]
mov edi, 0x3020
.newupdate:
mov ebx,[edi+0x14]
mov [edi+0x1c],ebx
mov [edi+0x14],dword 0
mov ebx,[edi+TASKDATA.counter_sum]
mov [edi+TASKDATA.cpu_usage],ebx
mov [edi+TASKDATA.counter_sum],dword 0
add edi,0x20
dec ecx
jnz .newupdate
/kernel/trunk/core/sync.inc
27,7 → 27,7
ok=$
push eax
mov eax,dword [0x3010+second_base_address]
mov eax,[eax+0x4]
mov eax,[eax+TASKDATA.pid]
mov [name],eax
pop eax
sti
61,7 → 61,7
local start_wait,first_wait,inc_counter,end_wait
push eax
mov eax,[0x3010+second_base_address]
mov eax,[eax+0x4]
mov eax,[eax+TASKDATA.pid]
start_wait=$
cli
cmp [name],dword 0
93,7 → 93,7
{
local ok,try_end
mov eax,[0x3000+second_base_address]
mov eax,[eax+0x4]
mov eax,[eax+TASKDATA.pid]
cmp [name],eax
jz ok
cmp [name],0
/kernel/trunk/core/sys32.inc
228,7 → 228,7
cli
mov eax, [0x3000]
shl eax, 8
mov eax, [0x80000+eax+0xAC]
mov eax, [0x80000+eax+APPDATA.debugger_slot]
test eax, eax
jnz .debug
sti
239,7 → 239,7
call show_error_parameters
mov edx, [0x3010]
mov [edx + 0xA], byte 4
mov [edx + TASKDATA.state], byte 4
jmp change_task
 
250,7 → 250,7
movzx ecx, bl
push ecx
mov ecx, [0x3010]
push dword [ecx+4] ; PID of current process
push dword [ecx+TASKDATA.pid] ; PID of current process
push 12
pop ecx
push 1 ; 1=exception
259,7 → 259,7
pop ecx
pop ecx
mov edx, [0x3010]
mov byte [edx+0xA], 1 ; suspended
mov byte [edx+TASKDATA.state], 1 ; suspended
call change_task
restore_ring3_context
iretd
278,7 → 278,7
mov eax, [prev_user_of_fpu]
shl eax, 8
add eax, 0x80000 + 0x10
add eax, 0x80000 + APPDATA.fpu_save_area
fsave [eax]
mov eax, [0x3000]
285,11 → 285,11
mov [prev_user_of_fpu], eax
shl eax, 8
add eax, 0x80000
cmp [eax + 0x7f], byte 0
cmp [eax + APPDATA.is_fpu_saved], 0
je @f
frstor [eax+0x10]
frstor [eax+APPDATA.fpu_save_area]
@@:
mov [eax + 0x7f], byte 1
mov [eax + APPDATA.is_fpu_saved], 1
restore_ring3_context
iret
338,7 → 338,7
mov [write_error_to],process_pid+43
mov eax,[0x3000]
shl eax, 5
mov eax,[0x3000+4+eax]
mov eax,[0x3000+TASKDATA.pid+eax]
call writehex
mov [write_error_to],process_error+43
556,7 → 556,7
 
mov eax,[0x3000]
shl eax, 5
add eax,0x3000+4
add eax,0x3000+TASKDATA.pid
mov eax,[eax]
 
mov [application_table_status],eax
571,7 → 571,7
 
mov eax,[0x3000]
shl eax, 5
add eax,0x3000+4
add eax,0x3000+TASKDATA.pid
mov eax,[eax]
 
cmp eax,[application_table_status]
676,17 → 676,17
app_esp dd 0x0
app_i_param dd 0x0
app_i_icon dd 0x0
app_mem_pos dd 0x0
;app_mem_pos dd 0x0
appl_path dd 0x0
appl_path_size dd 0x0
endg
 
iglobal
hd_app_string db 'HDAPP '
process_loading db 'K : Process - loading ',13,10,0
process_running db 'K : Process - done',13,10,0
first_gdt_search dd 0x2
endg
;iglobal
;hd_app_string db 'HDAPP '
;process_loading db 'K : Process - loading ',13,10,0
;process_running db 'K : Process - done',13,10,0
;first_gdt_search dd 0x2
;endg
 
 
sys_threads:
812,10 → 812,10
mov [esi+WDATA.box.top],eax
mov [esi+WDATA.box.height], 5
xor eax, eax
mov [esi+16],eax
mov [esi+20],eax
mov [esi+24],eax
mov [esi+28],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 ecx,32/4
rep stosd
825,12 → 825,12
pushad
mov edi, esi
shl edi, 5
mov eax, [0x80000+edi*8+0xAC]
mov eax, [0x80000+edi*8+APPDATA.debugger_slot]
test eax, eax
jz .nodebug
push 8
pop ecx
push dword [0x3000+edi+0x4] ; PID
push dword [0x3000+edi+TASKDATA.pid] ; PID
push 2
call debugger_notify
pop ecx
850,7 → 850,7
pusha ; name to spaces
mov edi,esi
shl edi,8
add edi,0x80000
add edi,0x80000+APPDATA.app_name
mov ecx,11
mov eax,' '
rep stosb
869,7 → 869,7
lea esi, [0xc400+eax*2]
movzx edi, word [esi] ; edi = process
shl edi, 5
cmp [0x3000 + edi + 0xa], byte 9 ; skip dead slots
cmp [0x3000 + edi + TASKDATA.state], byte 9 ; skip dead slots
je .check_next_window
add edi, window_data
call waredraw
896,8 → 896,8
 
pusha ; remove all irq reservations
mov eax,esi
shl eax, 5 ;imul edx,0x20
mov eax,[edx+0x3000+4]
shl eax, 5
mov eax,[edx+0x3000+TASKDATA.pid]
mov edi,irq_owner
mov ecx,16
newirqfree:
911,9 → 911,9
 
pusha ; remove all port reservations
mov edx,esi
shl edx, 5 ;imul edx,0x20
shl edx, 5
add edx,0x3000
mov edx,[edx+4]
mov edx,[edx+TASKDATA.pid]
 
rmpr0:
 
956,10 → 956,10
popa
mov edi,esi ; do not run this process slot
shl edi, 5
mov [edi+0x300A],byte 9
mov [edi+0x3000 + TASKDATA.state],byte 9
; debugger test - terminate all debuggees
mov eax, 2
mov ecx, 0x80000+2*0x100+0xAC
mov ecx, 0x80000+2*0x100+APPDATA.debugger_slot
.xd0:
cmp eax, [0x3004]
ja .xd1
/kernel/trunk/core/syscall.inc
40,7 → 40,7
align 4
save_registers:
mov esi, [0x3010]
mov eax, [esi+0x4] ; load PID
mov eax, [esi+TASKDATA.pid] ; load PID
lea esi, [esp+4]
inc [save_syscall_count]
mov edi,[save_syscall_count]
/kernel/trunk/fs/fat12.inc
33,7 → 33,7
push eax
mov eax,[0x3000]
shl eax,5
mov eax,[eax+0x3000+4]
mov eax,[eax+0x3000+TASKDATA.pid]
mov [flp_status],eax
pop eax
sti
/kernel/trunk/fs/fat32.inc
124,7 → 124,7
push eax
mov eax,[0x3000]
shl eax,5
mov eax,[eax+0x3000+4]
mov eax,[eax+0x3000+TASKDATA.pid]
mov [hd1_status],eax
pop eax
sti
/kernel/trunk/fs/iso9660.inc
25,7 → 25,7
push eax
mov eax,[0x3000]
shl eax,5
mov eax,[eax+0x3000+4]
mov eax,[eax+0x3000+TASKDATA.pid]
mov [cd_status],eax
pop eax
sti
/kernel/trunk/gui/button.inc
70,8 → 70,8
shr ebx,16
mov edx,[0x3010]
 
add eax,[edx-twdw]
add ebx,[edx-twdw+4]
add eax,[edx-twdw + WDATA.box.left]
add ebx,[edx-twdw + WDATA.box.top]
mov cx,ax
mov dx,bx
shl eax,16
198,8 → 198,8
shr eax,16
shr ebx,16
mov edx,[0x3010]
mov esi,[edx-twdw]
mov edi,[edx-twdw+4]
mov esi,[edx-twdw + WDATA.box.left]
mov edi,[edx-twdw + WDATA.box.top]
add eax,esi
add ebx,edi
mov cx,ax
237,9 → 237,6
 
and ecx,0xffff
 
mov edi,[0x3010]
sub edi,twdw
 
mov edi,[0xfe88]
movzx eax,word [edi]
cmp eax,max_buttons
331,7 → 328,7
movzx ebx,word [eax+0]
shl ebx,5
add ebx,window_data
movzx ecx,word [ebx+0] ; window x start
mov ecx, [ebx+ WDATA.box.left] ; window x start
movzx edx,word [eax+4] ; button x start
add ecx,edx
push ecx
340,7 → 337,7
add cx,dx
mov esi,ecx
inc esi
mov cx,[ebx+4] ; window y start
mov ecx, [ebx+WDATA.box.top] ; window y start
mov dx,[eax+8] ; button y start
add ecx,edx
mov ebx,ecx
521,12 → 518,12
; add ebx,window_data
; mov ecx,[window_data+ebx+8] ; window end X
movzx edx,word [eax+4] ; button start X
cmp edx, [window_data+ebx+8] ;ecx
cmp edx, [window_data+ebx+WDATA.box.width] ;ecx
jge buttonnewcheck
 
; mov ecx,[window_data+ebx+12] ; window end Y
movzx edx, word [eax+8] ; button start Y
cmp edx, [window_data+ebx+12] ;ecx
cmp edx, [window_data+ebx+WDATA.box.height] ;ecx
jge buttonnewcheck
 
; check coordinates
534,7 → 531,7
movzx ebx,word [eax+0]
shl ebx,5
add ebx,window_data
movzx ecx,word [ebx+0] ; window x start
mov ecx, [ebx+WDATA.box.left] ; window x start
movzx edx,word [eax+4] ; button x start
add edx,ecx
mov cx,[0xfb0a]
550,7 → 547,7
movzx ebx,word [eax+0]
shl ebx,5
add ebx,window_data
movzx ecx,word [ebx+4] ; window y start
mov ecx, [ebx+WDATA.box.top] ; window y start
movzx edx,word [eax+8] ; button y start
add edx,ecx
mov cx,[0xfb0c]
605,7 → 602,7
movzx ebx,word [eax+0]
shl ebx,5
add ebx,window_data
movzx ecx,word [ebx+0] ; window x start
mov ecx, [ebx+WDATA.box.left] ; window x start
movzx edx,word [eax+4] ; button x start
add edx,ecx
mov cx,[0xfb0a]
621,7 → 618,7
movzx ebx,word [eax+0]
shl ebx,5
add ebx,window_data
movzx ecx,word [ebx+4] ; window y start
mov ecx, [ebx+WDATA.box.top] ; window y start
movzx edx,word [eax+8] ; button y start
add edx,ecx
mov cx,[0xfb0c]
/kernel/trunk/gui/event.inc
37,7 → 37,7
newwait:
 
mov eax, [0x3010]
mov [eax+0xA], byte 5
mov [eax+TASKDATA.state], byte 5
call change_task
 
mov eax, [event_sched]
52,10 → 52,10
pushad
 
mov edi,[0x3010] ; WINDOW REDRAW
test [edi],dword 1
test [edi+TASKDATA.event_mask],dword 1
jz no_eventoccur1
;mov edi,[0x3010]
cmp [edi-twdw+31],byte 0
cmp [edi-twdw+WDATA.fl_redraw],byte 0
je no_eventoccur1
popad
mov eax,1
63,7 → 63,7
no_eventoccur1:
 
;mov edi,[0x3010] ; KEY IN BUFFER
test [edi],dword 2
test [edi+TASKDATA.event_mask],dword 2
jz no_eventoccur2
mov ecx, [0x3000]
movzx edx,word [0xC000+ecx*2]
87,7 → 87,7
no_eventoccur2:
 
;mov edi,[0x3010] ; BUTTON IN BUFFER
test [edi],dword 4
test [edi+TASKDATA.event_mask],dword 4
jz no_eventoccur3
cmp [0xf500],byte 0
je no_eventoccur3
113,13 → 113,13
;mov edi,[0x3010] ; mouse event
test [edi],dword 00100000b
test [edi+TASKDATA.event_mask],dword 00100000b
jz no_mouse_event
mov eax,[0x3000]
shl eax,8
test [eax+0x80000+0xA8],dword 00100000b
test [eax+0x80000+APPDATA.event_mask],dword 00100000b
jz no_mouse_event
and [eax+0x80000+0xA8],dword 0xffffffff-00100000b
and [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-00100000b
popad
mov eax,6
ret
127,7 → 127,7
 
;mov edi,[0x3010] ; DESKTOP BACKGROUND REDRAW
test [edi],dword 16
test [edi+TASKDATA.event_mask],dword 16
jz no_eventoccur5
cmp [0xfff0],byte 2
jnz no_eventoccur5
137,13 → 137,13
no_eventoccur5:
 
;mov edi,[0x3010] ; IPC
test [edi],dword 01000000b
test [edi+TASKDATA.event_mask],dword 01000000b
jz no_ipc
mov eax,[0x3000]
shl eax,8
test [eax+0x80000+0xA8],dword 01000000b
test [eax+0x80000+APPDATA.event_mask],dword 01000000b
jz no_ipc
and [eax+0x80000+0xA8],dword 0xffffffff-01000000b
and [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-01000000b
popad
mov eax,7
ret
151,31 → 151,31
 
 
;mov edi,[0x3010] ; STACK
test [edi],dword 10000000b
test [edi+TASKDATA.event_mask],dword 10000000b
jz no_stack_event
mov eax,[0x3000]
shl eax,8
test [eax+0x80000+0xA8],dword 10000000b
test [eax+0x80000+APPDATA.event_mask],dword 10000000b
jz no_stack_event
and [eax+0x80000+0xA8],dword 0xffffffff-10000000b
and [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-10000000b
popad
mov eax,8
ret
no_stack_event:
 
test byte [edi+1], 1 ; DEBUG
test byte [edi+TASKDATA.event_mask+1], 1 ; DEBUG
jz no_debug_event
mov eax, [0x3000]
shl eax, 8
test [eax+0x80000+0xA8+1], byte 1
test byte [eax+0x80000+APPDATA.event_mask+1], byte 1
jz no_debug_event
and byte [eax+0x80000+0xA8+1], not 1
and byte [eax+0x80000+APPDATA.event_mask+1], not 1
popad
mov eax, 9
ret
no_debug_event:
 
cmp dword [edi], 0xFFFF
cmp dword [edi+TASKDATA.event_mask], 0xFFFF
jbe no_events
 
mov esi,0x2e0000 ; IRQ'S AND DATA
183,7 → 183,7
xor ecx, ecx
irq_event_test:
mov edi,[0x3010]
test [edi],ebx
test [edi+TASKDATA.event_mask],ebx
jz no_irq_event
mov edi,ecx
shl edi,2
190,7 → 190,7
add edi,irq_owner
mov edx,[edi]
mov eax,[0x3010]
mov eax,[eax+0x4]
mov eax,[eax+TASKDATA.pid]
cmp edx,eax
jne no_irq_event
cmp [esi],dword 0
/kernel/trunk/gui/skincode.inc
203,7 → 203,7
@@:
 
mov esi,[esp+4]
mov eax,[esi+8] ; window width
mov eax,[esi+WDATA.box.width] ; window width
mov edx,[ebp+SKIN_DATA.left.left]
shl edx,16
mov ecx,[ebp+SKIN_DATA.left.width]
214,7 → 214,7
call sys_putimage_with_check
 
mov esi,[esp+4]
mov eax,[esi+8]
mov eax,[esi+WDATA.box.width]
sub eax,[ebp+SKIN_DATA.left.width]
sub eax,[ebp+SKIN_DATA.oper.width]
cmp eax,[ebp+SKIN_DATA.base.left]
247,7 → 247,7
.non_base:
 
mov esi,[esp+4]
mov edx,[esi+8]
mov edx,[esi+WDATA.box.width]
sub edx,[ebp+SKIN_DATA.oper.width]
inc edx
shl edx,16
278,14 → 278,14
mov ebp,skin_inactive
@@:
 
mov eax,[edi+0]
mov eax,[edi+WDATA.box.left]
shl eax,16
mov ax,[edi+0]
add ax,[edi+8]
mov ebx,[edi+4]
mov ax,word [edi+WDATA.box.left]
add ax,word [edi+WDATA.box.width]
mov ebx,[edi+WDATA.box.top]
shl ebx,16
mov bx,[edi+4]
add bx,[edi+12]
mov bx,word [edi+WDATA.box.top]
add bx,word [edi+WDATA.box.height]
; mov esi,[edi+24]
; shr esi,1
; and esi,0x007f7f7f
317,7 → 317,7
xor eax,eax
xor ebx,ebx
mov esi,[esp]
mov ecx,[esi+8]
mov ecx,[esi+WDATA.box.width]
inc ecx
mov edx,[_skinh]
mov edi,[common_colours+4] ; standard grab color
332,19 → 332,19
 
mov esi,[esp]
 
mov edx,[esi+04] ; WORK AREA
mov edx,[esi+WDATA.box.top] ; WORK AREA
add edx,21+5
mov ebx,[esi+04]
add ebx,[esi+12]
mov ebx,[esi+WDATA.box.top]
add ebx,[esi+WDATA.box.height]
cmp edx,ebx
jg _noinside2
mov eax,5
mov ebx,[_skinh]
mov ecx,[esi+8]
mov edx,[esi+12]
mov ecx,[esi+WDATA.box.width]
mov edx,[esi+WDATA.box.height]
sub ecx,4
sub edx,4
mov edi,[esi+16]
mov edi,[esi+WDATA.cl_workarea]
call [drawbar]
_noinside2:
 
373,7 → 373,7
cmp [skin_btn_close.left],0
jge _bCx_at_right
mov ebx,[esp]
mov ebx,[ebx+8]
mov ebx,[ebx+WDATA.box.width]
inc ebx
_bCx_at_right:
add ebx,[skin_btn_close.left]
412,7 → 412,7
cmp [skin_btn_minimize.left],0
jge _bMx_at_right
mov ebx,[esp]
mov ebx,[ebx+8]
mov ebx,[ebx+WDATA.box.width]
inc ebx
_bMx_at_right:
add ebx,[skin_btn_minimize.left]
/kernel/trunk/gui/window.inc
68,7 → 68,7
movzx edi, word [0xC400 + esi * 2]
shl edi, 5
 
cmp [0x3000+edi+0xa], byte 9
cmp [0x3000+edi+TASKDATA.state], byte 9
je .not_wnd
 
add edi, window_data
147,8 → 147,8
pushad
mov edi, esi ;;;word [esi*2+0xc400]
shl edi, 8
add edi, 0x80000+0x80 ; address of random shaped window area
cmp [edi], dword 0
add edi, 0x80000 ; address of random shaped window area
cmp [edi+APPDATA.wnd_shape], dword 0
jne .free_form
 
; get x&y size
214,7 → 214,7
inc ecx
inc edx
 
push dword [edi+4] ; push scale first -> for loop
push dword [edi+APPDATA.wnd_shape_scale] ; push scale first -> for loop
 
; get WinMap start -> ebp
push eax
225,7 → 225,7
add eax, WinMapAddress
mov ebp, eax
 
mov edi, [edi]
mov edi, [edi+APPDATA.wnd_shape]
pop eax
 
; eax = x_start
364,7 → 364,7
jne no_com_colours
mov [windowtypechanged],dword 1
mov esi,[0x3010]
add esi,0x10
add esi,TASKDATA.mem_start
add ebx,[esi]
mov esi,ebx
mov edi,common_colours
378,7 → 378,7
cmp eax,3 ; get common window colours
jne no_get_com
mov esi,[0x3010]
add esi,0x10
add esi,TASKDATA.mem_start
add ebx,[esi]
mov edi,ebx
mov esi,common_colours
457,7 → 457,7
jne no_set_skin
mov eax,ebx
mov edi,[0x3010]
add ebx,[edi+0x10] ; abs start of info block
add ebx,[edi+TASKDATA.mem_start] ; abs start of info block
pushd [ebx+0] [ebx+4] [ebx+8] [ebx+12]
mov dword[ebx+0],0 ; read
mov dword[ebx+4],0 ; from the beginning
567,16 → 567,16
 
pushad ; window inside screen ?
 
movzx eax,word [edi+0]
movzx ebx,word [edi+4]
movzx ecx,word [edi+8]
movzx edx,word [edi+12]
movzx eax,word [edi+WDATA.box.left]
movzx ebx,word [edi+WDATA.box.top]
movzx ecx,word [edi+WDATA.box.width]
movzx edx,word [edi+WDATA.box.height]
 
mov esi,ecx ; check x pos
add esi,eax
cmp esi,[0xfe00]
jbe x_pos_ok
mov [edi+0],dword 0
mov [edi+WDATA.box.left],dword 0
xor eax, eax
x_pos_ok:
 
584,7 → 584,7
add esi,ebx
cmp esi,[0xfe04]
jbe y_pos_ok
mov [edi+4],dword 0
mov [edi+WDATA.box.top],dword 0
mov ebx,0
y_pos_ok:
 
593,7 → 593,7
cmp esi,[0xfe00]
jbe x_size_ok
mov ecx,[0xfe00]
mov [edi+8],ecx
mov [edi+WDATA.box.width],ecx
x_size_ok:
 
mov esi,edx ; check y size
601,7 → 601,7
cmp esi,[0xfe04]
jbe y_size_ok
mov edx,[0xfe04]
mov [edi+12],edx
mov [edi+WDATA.box.height],edx
y_size_ok:
 
popad
618,7 → 618,7
 
push eax
 
mov eax,[timer_ticks] ;[0xfdf0]
mov eax,[timer_ticks]
cmp [new_window_starting],eax
jb swml1
 
638,15 → 638,15
 
drawwindow_I_caption:
 
mov ecx,[edx+20] ; grab bar
mov ecx,[edx+WDATA.cl_titlebar] ; grab bar
push ecx
mov esi,edx
mov edx,[esi+04]
mov edx,[esi+WDATA.box.top]
add edx,1
mov ebx,[esi+04]
mov ebx,[esi+WDATA.box.top]
add ebx,21
mov eax,[esi+04]
add eax,[esi+12]
mov eax,[esi+WDATA.box.top]
add eax,[esi+WDATA.box.height]
cmp ebx,eax
jb .wdsizeok
mov ebx,eax
656,25 → 656,25
mov ebx,edx
shl ebx,16
add ebx,edx
mov eax,[esi+00]
mov eax,[esi+WDATA.box.left]
inc eax
shl eax,16
add eax,[esi+00]
add eax,[esi+8]
add eax,[esi+WDATA.box.left]
add eax,[esi+WDATA.box.width]
sub eax,1
push edx
mov edx,0x80000000
mov ecx,[esi+20]
mov ecx,[esi+WDATA.cl_titlebar]
and ecx,edx
cmp ecx,edx
jnz .nofa
mov ecx,[esi+20]
mov ecx,[esi+WDATA.cl_titlebar]
sub ecx,0x00040404
mov [esi+20],ecx
mov [esi+WDATA.cl_titlebar],ecx
and ecx,0x00ffffff
jmp .faj
.nofa:
mov ecx,[esi+20]
mov ecx,[esi+WDATA.cl_titlebar]
and ecx,0x00ffffff
.faj:
pop edx
685,7 → 685,7
jb .drwi
add esp,4
pop ecx
mov [esi+20],ecx
mov [esi+WDATA.cl_titlebar],ecx
 
ret
 
694,30 → 694,30
 
pushad
 
mov esi,[edx+24] ; rectangle
mov eax,[edx+0]
mov esi,[edx+WDATA.cl_frames] ; rectangle
mov eax,[edx+WDATA.box.left]
shl eax,16
add eax,[edx+0]
add eax,[edx+8]
mov ebx,[edx+04]
add eax,[edx+WDATA.box.left]
add eax,[edx+WDATA.box.width]
mov ebx,[edx+WDATA.box.top]
shl ebx,16
add ebx,[edx+4]
add ebx,[edx+12]
add ebx,[edx+WDATA.box.top]
add ebx,[edx+WDATA.box.height]
call draw_rectangle
 
call drawwindow_I_caption
 
mov edx,[esi+04] ; inside work area
mov edx,[esi+WDATA.box.top] ; inside work area
add edx,21+5
mov ebx,[esi+04]
add ebx,[esi+12]
mov ebx,[esi+WDATA.box.top]
add ebx,[esi+WDATA.box.height]
cmp edx,ebx
jg noinside
mov eax,1
mov ebx,21
mov ecx,[esi+8]
mov edx,[esi+12]
mov edi,[esi+16]
mov ecx,[esi+WDATA.box.width]
mov edx,[esi+WDATA.box.height]
mov edi,[esi+WDATA.cl_workarea]
call [drawbar]
noinside:
 
771,15 → 771,15
 
drawwindow_III_caption:
 
mov ecx,[edx+20] ; GRAB BAR
mov ecx,[edx+WDATA.cl_titlebar] ; GRAB BAR
push ecx
mov esi,edx
mov edx,[esi+04]
mov edx,[esi+WDATA.box.top]
add edx,4
mov ebx,[esi+04]
mov ebx,[esi+WDATA.box.top]
add ebx,20
mov eax,[esi+04]
add eax,[esi+12]
mov eax,[esi+WDATA.box.top]
add eax,[esi+WDATA.box.height]
cmp ebx,eax
jb .wdsizeok
mov ebx,eax
789,12 → 789,12
mov ebx,edx
shl ebx,16
add ebx,edx
mov eax,[esi+00]
mov eax,[esi+WDATA.box.left]
shl eax,16
add eax,[esi+00]
add eax,[esi+8]
add eax,[esi+WDATA.box.left]
add eax,[esi+WDATA.box.width]
add eax,4*65536-4
mov ecx,[esi+20]
mov ecx,[esi+WDATA.cl_titlebar]
test ecx,0x40000000
jz .nofa
add ecx,0x040404
803,7 → 803,7
jz .nofa2
sub ecx,0x040404
.nofa2:
mov [esi+20],ecx
mov [esi+WDATA.cl_titlebar],ecx
and ecx,0xffffff
xor edi, edi
call [draw_line]
812,7 → 812,7
jb .drwi
add esp,4
pop ecx
mov [esi+20],ecx
mov [esi+WDATA.cl_titlebar],ecx
 
ret
 
822,15 → 822,15
pushad
 
mov edi,edx ; RECTANGLE
mov eax,[edi+0]
mov eax,[edi+WDATA.box.left]
shl eax,16
mov ax,[edi+0]
add ax,[edi+8]
mov ebx,[edi+4]
mov ax, word [edi+WDATA.box.left]
add ax, word [edi+WDATA.box.width]
mov ebx,[edi+WDATA.box.top]
shl ebx,16
mov bx,[edi+4]
add bx,[edi+12]
mov esi,[edi+24]
mov bx, word [edi+WDATA.box.top]
add bx, word [edi+WDATA.box.height]
mov esi,[edi+WDATA.cl_frames]
shr esi,1
and esi,0x007f7f7f
push esi
839,7 → 839,7
dw3l:
add eax,1*65536-1
add ebx,1*65536-1
mov esi,[edi+24]
mov esi,[edi+WDATA.cl_frames]
call draw_rectangle
dec ecx
jnz dw3l
850,19 → 850,19
 
call drawwindow_III_caption
 
mov edx,[esi+04] ; WORK AREA
mov edx,[esi+WDATA.box.top] ; WORK AREA
add edx,21+5
mov ebx,[esi+04]
add ebx,[esi+12]
mov ebx,[esi+WDATA.box.top]
add ebx,[esi+WDATA.box.height]
cmp edx,ebx
jg noinside2
mov eax,5
mov ebx,20
mov ecx,[esi+8]
mov edx,[esi+12]
mov ecx,[esi+WDATA.box.width]
mov edx,[esi+WDATA.box.height]
sub ecx,4
sub edx,4
mov edi,[esi+16]
mov edi,[esi+WDATA.cl_workarea]
call [drawbar]
noinside2:
 
971,31 → 971,31
 
movzx eax, word [esi]
shl eax, 5
cmp [0x3000 + eax + 0xa], byte 9
cmp [0x3000 + eax + TASKDATA.state], byte 9
je .new_check ; skip dead windows
 
lea esi, [eax+window_data]
 
mov ebx, [edi+4] ; y0
mov edx, [edi+12]
mov ebx, [edi+WDATA.box.top] ; y0
mov edx, [edi+WDATA.box.height]
add edx, ebx ; y0e
 
mov ecx, [esi+4] ; y ; y check
mov ecx, [esi+WDATA.box.top] ; y ; y check
cmp ecx, edx
jae .new_check ; y < y0e
mov eax, [esi+12]
mov eax, [esi+WDATA.box.height]
add ecx, eax ; ye
cmp ebx, ecx ; y0 >= ye
ja .new_check
 
mov eax, [edi+0] ; x0
mov ecx, [edi+8]
mov eax, [edi+WDATA.box.left] ; x0
mov ecx, [edi+WDATA.box.width]
add ecx, eax ; x0e
 
mov edx, [esi+0] ; x ; x check
mov edx, [esi+WDATA.box.left] ; x ; x check
cmp edx, ecx
jae .new_check ; x < x0e
mov ecx, [esi+8]
mov ecx, [esi+WDATA.box.width]
add edx, ecx
cmp eax, edx
ja .new_check
1035,10 → 1035,10
add esi, window_data
 
; coordinates of the upper window
mov eax, [esi+00] ; cx
mov ebx, [esi+04] ; cy
mov ecx, [esi+08] ; sx
mov edx, [esi+12] ; sy
mov eax, [esi + WDATA.box.left] ; cx
mov ebx, [esi + WDATA.box.top] ; cy
mov ecx, [esi + WDATA.box.width] ; sx
mov edx, [esi + WDATA.box.height] ; sy
 
add ecx, eax ; ecx = x_end
add edx, ebx ; edx = y_end
1048,7 → 1048,7
call setscreen
popad
 
mov [edi+31],byte 1 ; redraw flag for app
mov [edi + WDATA.fl_redraw], 1 ; redraw flag for app
mov [0xfb44],byte 0 ; mouse down checks
 
ret
1175,8 → 1175,8
shl edi, 5
add edi, window_data
; mov edi, ebx
mov ecx, [edi+0]
mov edx, [edi+4]
mov ecx, [edi + WDATA.box.left]
mov edx, [edi + WDATA.box.top]
 
mov eax,ecx
mov ebx,edx
1190,8 → 1190,8
jae cwloop
cmp edx, ebx
jae cwloop
add ecx, [edi+8]
add edx, [edi+12]
add ecx, [edi + WDATA.box.width]
add edx, [edi + WDATA.box.height]
cmp eax, ecx
jae cwloop
cmp ebx, edx
1218,7 → 1218,7
popad
 
; Check for user enabled fixed window
mov edx, [edi+0x14]
mov edx, [edi + WDATA.cl_titlebar]
and edx, 0x0f000000
cmp edx, 0x01000000
jne .window_move_enabled_for_user
1230,13 → 1230,13
jnz .no_resize_2
 
mov [do_resize_from_corner],byte 0 ; resize for skinned window
mov edx, [edi+0x10]
mov edx, [edi + WDATA.cl_workarea]
and edx, 0x0f000000
cmp edx, 0x02000000
jb .no_resize_2 ; not type 2 wnd
 
mov edx, [edi+4]
add edx, [edi+12]
mov edx, [edi + WDATA.box.top]
add edx, [edi + WDATA.box.height]
sub edx, 6 ; edx = y_end - 6
cmp ebx, edx ; ebx = mouse_y
jb .no_resize_2
1246,7 → 1246,7
 
push eax
call get_titlebar_height
add eax,[edi+4]
add eax,[edi + WDATA.box.top]
cmp ebx,eax
pop eax
jae .exit
1267,15 → 1267,15
mov cl, [0xfb40] ; save for shade check
mov [do_resize], cl
no_emulation_righ_button:
mov ecx, [edi+0]
mov edx, [edi+4]
mov ecx, [edi + WDATA.box.left]
mov edx, [edi + WDATA.box.top]
 
push eax ecx edx
mov [dlx], ecx ; save for drawlimits
mov [dly], edx
mov eax, [edi+8]
mov eax, [edi + WDATA.box.width]
add ecx, eax
mov eax, [edi+12]
mov eax, [edi + WDATA.box.height]
add edx, eax
mov [dlxe], ecx
mov [dlye], edx
1290,22 → 1290,22
pushad ; wait for putimages to finish
; mov eax,5
; call delay_hs
mov eax,[edi+0]
mov eax,[edi + WDATA.box.left]
mov [npx],eax
mov eax,[edi+4]
mov eax,[edi + WDATA.box.top]
mov [npy],eax
popad
 
push eax ; save old coordinates
mov ax,[edi+00]
mov word [oldc+00],ax
mov ax,[edi+04]
mov word [oldc+04],ax
mov ax,[edi+8]
mov word [oldc+8],ax
mov ax, word [edi + WDATA.box.left]
mov word [oldc+BOX.left],ax
mov ax, word [edi + WDATA.box.top]
mov word [oldc+BOX.top],ax
mov ax, word [edi + WDATA.box.width]
mov word [oldc+BOX.width],ax
mov word [npxe],ax
mov ax,[edi+12]
mov word [oldc+12],ax
mov ax, word [edi + WDATA.box.height]
mov word [oldc+BOX.height],ax
mov word [npye],ax
pop eax
 
1388,14 → 1388,15
 
mov edx,edi
sub edx,window_data
shr edx,5
shl edx,8
add edx,0x80000 ; process base at 0x80000+
;shr edx,5
;shl edx,8
;add edx,0x80000 ; process base at 0x80000+
lea edx, [0x80000 + edx*8]
 
movzx eax,word [0xfb0a]
cmp eax,[edi+0]
cmp eax,[edi + WDATA.box.left]
jb nnepx
sub eax,[edi+0]
sub eax,[edi + WDATA.box.left]
cmp eax,32 ; [edx+0x90+8]
jge nnepx2
mov eax,32 ; [edx+0x90+8]
1406,9 → 1407,9
call get_rolledup_height
mov ebx,eax
movzx eax,word [0xfb0c]
cmp eax,[edi+4]
cmp eax,[edi + WDATA.box.top]
jb nnepy
sub eax,[edi+4]
sub eax,[edi + WDATA.box.top]
cmp eax,ebx ; [edx+0x90+12]
jge nnepy2
mov eax,ebx ; [edx+0x90+12]
1443,13 → 1444,13
call drawwindowframes
 
mov eax,[npx]
mov [edi+0],eax
mov [edi + WDATA.box.left],eax
mov eax,[npy]
mov [edi+4],eax
mov [edi + WDATA.box.top],eax
mov eax,[npxe]
mov [edi+8],eax
mov [edi + WDATA.box.width],eax
mov eax,[npye]
mov [edi+12],eax
mov [edi + WDATA.box.height],eax
 
@@: mov [reposition],cl
 
1464,7 → 1465,7
@@: sub edi,window_data
shr edi,5
shl edi,8
add edi,0x80000+0x90
add edi,0x80000+APPDATA.saved_box
cld
rep movsd
pop ecx edi esi
1492,7 → 1493,7
jmp @f
wnd_rolldown:
and [edi+WDATA.fl_wstate],not WSTATE_ROLLEDUP
mov eax,[edx+0x90+BOX.height]
mov eax,[edx + APPDATA.saved_box.height] ; 0x90+BOX.height
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
jz @f
mov eax,[screen_workarea.bottom]
1527,7 → 1528,7
and [edi+WDATA.fl_wstate],not WSTATE_MAXIMIZED
push [edi+WDATA.box.height]
push edi ; restore
lea esi, [edx + 0x90]
lea esi, [edx + APPDATA.saved_box]
mov ecx,4
cld
rep movsd
1540,20 → 1541,20
 
no_fullscreen_restore:
 
mov eax,[edi+4] ; check Y inside screen
add eax,[edi+12]
mov eax,[edi+WDATA.box.top] ; check Y inside screen
add eax,[edi+WDATA.box.height]
cmp eax,[0xfe04]
jbe no_window_sizing
mov eax,[edi+0] ; check X inside screen
add eax,[edi+8]
mov eax,[edi+WDATA.box.left] ; check X inside screen
add eax,[edi+WDATA.box.width]
cmp eax,[0xfe00]
jbe no_window_sizing
mov eax,[0xfe00]
sub eax,[edi+8]
mov [edi+0],eax
sub eax,[edi+WDATA.box.width]
mov [edi+WDATA.box.left],eax
mov eax,[0xfe04]
sub eax,[edi+12]
mov [edi+4],eax
sub eax,[edi+WDATA.box.height]
mov [edi+WDATA.box.top],eax
no_window_sizing:
 
popad
1565,18 → 1566,18
 
 
push eax ebx ecx edx
mov eax,[edi+00]
mov ebx,[edi+04]
mov ecx,[edi+8]
mov edx,[edi+12]
mov eax,[edi+WDATA.box.left]
mov ebx,[edi+WDATA.box.top]
mov ecx,[edi+WDATA.box.width]
mov edx,[edi+WDATA.box.height]
add ecx,eax
add edx,ebx
call calculatescreen
 
mov eax,[oldc+00]
mov ebx,[oldc+04]
mov ecx,[oldc+8]
mov edx,[oldc+12]
mov eax,[oldc+BOX.left]
mov ebx,[oldc+BOX.top]
mov ecx,[oldc+BOX.width]
mov edx,[oldc+BOX.height]
add ecx,eax
add edx,ebx
call calculatescreen
1701,7 → 1702,7
mov edi,[0x3000]
shl edi,5
add edi,window_data
mov [edi+30],byte 1
mov [edi+WDATA.fl_wdrawn],byte 1
pop edi
 
popad
1715,7 → 1716,7
;
; eax = 0 giving address of data area
; ebx address
; ebx = 1 shape area scale
; eax = 1 shape area scale
; ebx 2^ebx scale
 
test eax, eax
1723,7 → 1724,7
mov eax,[0x3000]
shl eax,8
 
mov [eax+0x80000+0x80],ebx
mov [eax+0x80000+APPDATA.wnd_shape],ebx
rsw_no_address:
 
cmp eax,1
1730,7 → 1731,7
jne rsw_no_scale
mov eax,[0x3000]
shl eax,8
mov [eax+0x80000+0x84],bl
mov byte [eax+0x80000+APPDATA.wnd_shape_scale], bl
rsw_no_scale:
 
ret
/kernel/trunk/hid/keyboard.inc
91,10 → 91,10
mov ds, ax
mov es, ax
 
movzx eax,word[0x3004] ; top window process
mov eax, [0x3004] ; top window process
movzx eax,word[0xC400+eax*2]
shl eax,8
mov al,[0x800B4+eax]
mov al,[0x80000+eax+APPDATA.keyboard_mode]
mov [keyboard_mode],al
 
in al,0x60
/kernel/trunk/kernel.asm
644,12 → 644,12
mov esi,boot_setostask
call boot_log
; name for OS/IDLE process
mov [0x80000+256+0],dword 'OS/I'
mov [0x80000+256+4],dword 'DLE '
mov dword [0x80000+256+APPDATA.app_name], dword 'OS/I'
mov dword [0x80000+256+APPDATA.app_name+4], dword 'DLE '
; task list
mov [0x3020+0xE],byte 1 ; on screen number
mov [0x3020+0x4],dword 1 ; process id number
mov [0x3020+0x10], dword 0 ; process base address
mov [0x3020+TASKDATA.wnd_number], 1 ; on screen number
mov [0x3020+TASKDATA.pid], 1 ; process id number
mov [0x3020+TASKDATA.mem_start], 0 ; process base address
 
; set default flags & stacks
mov [l.eflags],dword 0x11202 ; sti and resume
1442,7 → 1442,7
cmp al,1 ; ecx is a pointer ?
jne displnl1
mov edi,[0x3010]
mov edi,[edi+0x10]
mov edi,[edi+TASKDATA.mem_start]
mov ebx,[edi+ebx]
displnl1:
sub esp,64
1452,8 → 1452,6
shr eax,16
and eax,0x3f
push eax
;mov edi,[0x3010]
;mov edi,[edi+0x10]
mov edi,esp
add edi,4+64
mov ecx,eax
1478,8 → 1476,6
shr eax,16
and eax,0x3f
push eax
;mov edi,[0x3010]
;mov edi,[edi+0x10]
mov edi,esp
add edi,4+64
mov ecx,eax
1505,8 → 1501,6
shr eax,16
and eax,0x3f
push eax
;mov edi,[0x3010]
;mov edi,[edi+0x10]
mov edi,esp
add edi,4+64
mov ecx,eax
1551,9 → 1545,9
push edx ; add window start x & y
push ebx
mov edx,[0x3010]
mov ebx,[edx-twdw]
mov ebx,[edx-twdw+WDATA.box.left]
shl ebx,16
add ebx,[edx-twdw+4]
add ebx,[edx-twdw+WDATA.box.top]
add eax,ebx
pop ebx
pop edx
1615,7 → 1609,7
cmp ebx,1
jnz kbnobase
mov edi,[0x3010]
add ecx,[edi+0x10]
add ecx,[edi+TASKDATA.mem_start]
mov eax,ecx
mov ebx,keymap
mov ecx,128
1625,7 → 1619,7
cmp ebx,2
jnz kbnoshift
mov edi,[0x3010]
add ecx,[edi+0x10]
add ecx,[edi+TASKDATA.mem_start]
mov eax,ecx
mov ebx,keymap_shift
mov ecx,128
1635,7 → 1629,7
cmp ebx,3
jne kbnoalt
mov edi,[0x3010]
add ecx,[edi+0x10]
add ecx,[edi+TASKDATA.mem_start]
mov eax,ecx
mov ebx,keymap_alt
mov ecx,128
1827,7 → 1821,7
cmp ebx,1
jnz kbnobaseret
mov edi,[0x3010]
add ecx,[edi+0x10]
add ecx,[edi+TASKDATA.mem_start]
mov ebx,ecx
mov eax,keymap
mov ecx,128
1837,7 → 1831,7
cmp ebx,2
jnz kbnoshiftret
mov edi,[0x3010]
add ecx,[edi+0x10]
add ecx,[edi+TASKDATA.mem_start]
mov ebx,ecx
mov eax,keymap_shift
mov ecx,128
1847,7 → 1841,7
cmp ebx,3
jne kbnoaltret
mov edi,[0x3010]
add ecx,[edi+0x10]
add ecx,[edi+TASKDATA.mem_start]
mov ebx,ecx
mov eax,keymap_alt
mov ecx,128
1950,10 → 1944,9
shl eax,16
mov ax,[0xfb0c]
mov esi,[0x3010]
sub esi,twdw
mov bx,[esi]
mov bx, word [esi-twdw+WDATA.box.left]
shl ebx,16
mov bx,[esi+4]
mov bx, word [esi-twdw+WDATA.box.top]
sub eax,ebx
mov [esp+36],eax
ret
2081,8 → 2074,7
sys_end:
 
mov eax,[0x3010]
add eax,0xa
mov [eax],byte 3 ; terminate this program
mov [eax+TASKDATA.state], 3 ; terminate this program
 
waitterm: ; wait here for termination
mov eax,5
2141,8 → 2133,8
ja noprocessterminate
mov eax,[0x3004]
shl ebx,5
mov edx,[ebx+0x3000+4]
add ebx,0x3000+0xa
mov edx,[ebx+0x3000+TASKDATA.pid]
add ebx,0x3000+TASKDATA.state
cmp byte [ebx], 9
jz noprocessterminate
 
2262,8 → 2254,8
rep movsb
ret
for_all_tables:
mov edi,[3010h]
mov edi,[edi+10h]
mov edi,[0x3010]
mov edi,[edi+TASKDATA.mem_start]
add edi,ecx
mov esi,0x40000
ret
2281,8 → 2273,8
ret
 
sysfn_getversion: ; 18.13 = get kernel ID and version
mov edi,[3010h]
mov edi,[edi+10h]
mov edi,[0x3010]
mov edi,[edi+TASKDATA.mem_start]
add edi,ebx
mov esi,version_inf
mov ecx,version_end-version_inf
2447,7 → 2439,7
jnz nosb5
; bughere
mov edi, [0x3010]
add ebx, [edi+0x10]
add ebx, [edi+TASKDATA.mem_start]
; mov esi, ebx
; mov edi, ecx
mov eax, ebx
2589,8 → 2581,7
;
 
mov edi,[0x3010] ; eax = return area
add edi,0x10
add eax,[edi]
add eax,[edi + TASKDATA.mem_start]
 
cmp ebx,-1 ; who am I ?
jne no_who_am_i
2609,27 → 2600,20
xor edx,edx
mov eax,0x20
mul ebx
add eax,0x3000+0x1c
add eax,0x3000+TASKDATA.cpu_usage
mov ebx,eax
pop eax
mov ecx,[ebx]
mov [eax],ecx
pop ebx
; mov ebx,[esp]
; shl ebx,1
; add ebx,0xc000
mov cx, [0xC000 + ebx * 2]
mov [eax+4],cx
; mov ebx,[esp]
; shl ebx,1
; add ebx,0xc400
mov cx, [0xC400 + ebx * 2]
mov [eax+6],cx
; pop ebx
push eax
mov eax,ebx
shl eax,8
add eax,0x80000
add eax,0x80000+APPDATA.app_name
pop ebx
add ebx,10
mov ecx,11
2643,19 → 2627,9
cmp ecx,1
je os_mem
shl ecx,8
mov edx,[0x80000+ecx+0x8c]
mov edx,[0x80000+ecx+APPDATA.mem_size] ;0x8c
mov eax,std_application_base_address
;add ecx,0x80000+0x88
;mov ecx,[ecx]
; shl ecx,3
; eax run base -> edx used memory
; mov al,[ecx+gdts+ app_code-3 +4] ; base 23:16
; mov ah,[ecx+gdts+ app_code-3 +7] ; base 31:24
; shl eax,16
; mov ax,[ecx+gdts+ app_code-3 +2] ; base 0:15
; movzx edx,word [ecx+gdts+ app_code-3 +0]
; shl edx,12
 
os_mem:
dec edx
mov [ebx+12],eax
2665,7 → 2639,7
 
mov eax,[esp]
shl eax,5
add eax,0x3000+0x4
add eax,0x3000+TASKDATA.pid
mov eax,[eax]
mov [ebx+20],eax
 
2673,18 → 2647,18
 
mov esi,[esp]
shl esi,5
add esi,window_data
add esi,window_data + WDATA.box
mov edi,[esp+4]
add edi,34
mov ecx,4*4
mov ecx,4
cld
rep movsb
rep movsd
 
; Process state (+50)
 
mov eax,[esp]
shl eax,5
add eax,0x3000+0xa
add eax,0x3000+TASKDATA.state
mov eax,[eax]
mov [ebx+40],ax
 
2826,16 → 2800,15
 
mov edx,[0x3010] ; return whole screen draw area for this app
add edx,draw_data-0x3000
mov [edx+0],dword 0
mov [edx+4],dword 0
mov [edx+RECT.left], 0
mov [edx+RECT.top], 0
mov eax,[0xfe00]
mov [edx+8],eax
mov [edx+RECT.right],eax
mov eax,[0xfe04]
mov [edx+12],eax
mov [edx+RECT.bottom],eax
 
mov edi,[0x3010]
sub edi,twdw
mov [edi+30],byte 1 ; no new position & buttons from app
mov [edi-twdw+WDATA.fl_wdrawn], 1 ; no new position & buttons from app
 
call sys_window_mouse
 
2961,7 → 2934,7
mov ecx,[edi*8+0x80000+APPDATA.wnd_caption]
or ecx,ecx
jz @f
add ecx,[edi+twdw+0x10]
add ecx,[edi+twdw+TASKDATA.mem_start]
 
movzx eax,[edi+window_data+WDATA.fl_wstyle]
and al,0x0F
3118,15 → 3091,16
 
sub edi,window_data
shl edi,3
add edi,0x80000+0x90
add edi,0x80000
 
and cl,0x0F
mov [edi-0x90+APPDATA.wnd_caption],0
mov [edi+APPDATA.wnd_caption],0
cmp cl,3
jne @f
mov [edi-0x90+APPDATA.wnd_caption],esi
mov [edi+APPDATA.wnd_caption],esi
@@: mov esi,[esp+0]
 
add edi, APPDATA.saved_box
mov ecx,4
cld
rep movsd
3135,10 → 3109,10
push eax ebx ecx edx
;;; mov eax, 1
;;; call delay_hs
movzx eax, word [edi+00]
movzx ebx, word [edi+04]
movzx ecx, word [edi+8]
movzx edx, word [edi+12]
mov eax, [edi+WDATA.box.left]
mov ebx, [edi+WDATA.box.top]
mov ecx, [edi+WDATA.box.width]
mov edx, [edi+WDATA.box.height]
add ecx, eax
add edx, ebx
call calculatescreen
3148,7 → 3122,7
mov [0xf500],byte 0 ; empty button buffer
 
newd:
mov [edi+31],byte 0 ; no redraw
mov [edi+WDATA.fl_redraw],byte 0 ; no redraw
mov edx,edi
 
ret
3195,7 → 3169,7
 
sys_window_move:
 
mov edi,[0x00003000]
mov edi,[0x3000]
shl edi,5
add edi,window_data
 
3202,18 → 3176,18
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
jnz .window_move_return
 
push dword [edi+0] ; save old coordinates
push dword [edi+4]
push dword [edi+8]
push dword [edi+12]
push dword [edi + WDATA.box.left] ; save old coordinates
push dword [edi + WDATA.box.top]
push dword [edi + WDATA.box.width]
push dword [edi + WDATA.box.height]
 
cmp eax,-1 ; set new position and size
je .no_x_reposition
mov [edi+0],eax
mov [edi + WDATA.box.left], eax
.no_x_reposition:
cmp ebx,-1
je .no_y_reposition
mov [edi+4],ebx
mov [edi + WDATA.box.top], ebx
.no_y_reposition:
 
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP
3221,11 → 3195,11
 
cmp ecx,-1
je .no_x_resizing
mov [edi+8],ecx
mov [edi + WDATA.box.width], ecx
.no_x_resizing:
cmp edx,-1
je .no_y_resizing
mov [edi+12],edx
mov [edi + WDATA.box.height], edx
.no_y_resizing:
 
call check_window_position
3235,7 → 3209,7
sub edi,window_data
shr edi,5
shl edi,8
add edi,0x80000+0x90
add edi, 0x80000 + APPDATA.saved_box
mov ecx,4
cld
rep movsd
3242,10 → 3216,10
popad
 
pushad ; calculcate screen at new position
mov eax,[edi+00]
mov ebx,[edi+04]
mov ecx,[edi+8]
mov edx,[edi+12]
mov eax, [edi + WDATA.box.left]
mov ebx, [edi + WDATA.box.top]
mov ecx, [edi + WDATA.box.width]
mov edx, [edi + WDATA.box.height]
add ecx,eax
add edx,ebx
call calculatescreen
3263,7 → 3237,7
mov [dlye],edx
call calculatescreen
 
mov [edi+31],byte 1 ; flag the process as redraw
mov [edi + WDATA.fl_redraw], 1 ; flag the process as redraw
 
mov eax,edi ; redraw screen at old position
xor esi,esi
3463,7 → 3437,7
mov ecx, [0x3004]
set_mouse_event:
add edi, 256
or [edi+0x80000+0xA8], dword 00100000b
or [edi+0x80000+APPDATA.event_mask], dword 00100000b
loop set_mouse_event
mouse_not_active:
 
3474,12 → 3448,12
jz nobackgr
mov [0xfff0],byte 2
call change_task
mov [draw_data+32+0],dword 0
mov [draw_data+32+4],dword 0
mov [draw_data+32 + RECT.left],dword 0
mov [draw_data+32 + RECT.top],dword 0
mov eax,[0xfe00]
mov ebx,[0xfe04]
mov [draw_data+32+8],eax
mov [draw_data+32+12],ebx
mov [draw_data+32 + RECT.right],eax
mov [draw_data+32 + RECT.bottom],ebx
call drawbackground
mov [0xfff0],byte 0
mov [0xfff4],byte 0
3502,7 → 3476,7
movzx ecx,byte [0xff00]
add ecx,5
markz:
mov [edx+0xa],byte 3
mov [edx+TASKDATA.state],byte 3
add edx,0x20
loop markz
 
3519,7 → 3493,7
 
 
mov eax,[0x3004] ; termination
mov ebx,0x3020+0xa
mov ebx,0x3020+TASKDATA.state
mov esi,1
 
newct:
3570,10 → 3544,10
cmp ecx,1 ; limit for background
jz bgli
 
mov eax,[edi+0]
mov ebx,[edi+4]
mov ecx,[edi+8]
mov edx,[edi+12]
mov eax, [edi + WDATA.box.left]
mov ebx, [edi + WDATA.box.top]
mov ecx, [edi + WDATA.box.width]
mov edx, [edi + WDATA.box.height]
add ecx,eax
add edx,ebx
 
3585,10 → 3559,10
cmp ecx,eax
jb ricino
 
mov eax,[edi+0]
mov ebx,[edi+4]
mov ecx,[edi+8]
mov edx,[edi+12]
mov eax, [edi + WDATA.box.left]
mov ebx, [edi + WDATA.box.top]
mov ecx, [edi + WDATA.box.width]
mov edx, [edi + WDATA.box.height]
add ecx,eax
add edx,ebx
 
3609,13 → 3583,13
add eax,draw_data-window_data
 
mov ebx,[dlx] ; set limits
mov [eax+0],ebx
mov [eax + RECT.left], ebx
mov ebx,[dly]
mov [eax+4],ebx
mov [eax + RECT.top], ebx
mov ebx,[dlxe]
mov [eax+8],ebx
mov [eax + RECT.right], ebx
mov ebx,[dlye]
mov [eax+12],ebx
mov [eax + RECT.bottom], ebx
 
sub eax,draw_data-window_data
 
3628,7 → 3602,7
newdw8:
nobgrd:
 
mov [eax+31],byte 1 ; mark as redraw
mov [eax + WDATA.fl_redraw],byte 1 ; mark as redraw
 
ricino:
 
3707,7 → 3681,7
push edi
 
mov edi,[0x3010]
mov [edi],eax
mov [edi+TASKDATA.event_mask],eax
 
pop edi
ret
3719,11 → 3693,11
push ecx
push edx
 
mov edx,[timer_ticks];[0xfdf0]
mov edx,[timer_ticks]
add edx,eax
 
newtic:
mov ecx,[timer_ticks];[0xfdf0]
mov ecx,[timer_ticks]
cmp edx,ecx
jbe zerodelay
 
3824,13 → 3798,12
sys_programirq:
 
mov edi,[0x3010]
add edi,0x10
add eax,[edi]
add eax,[edi+TASKDATA.mem_start]
 
cmp ebx,16
jae .not_owner
mov edi,[0x3010]
mov edi,[edi+0x4]
mov edi,[edi+TASKDATA.pid]
cmp edi,[irq_owner+ebx*4]
je spril1
.not_owner:
3859,7 → 3832,7
add edx,irq_owner
mov edx,[edx]
mov edi,[0x3010]
mov edi,[edi+0x4]
mov edi,[edi+TASKDATA.pid]
cmp edx,edi
je gidril1
.not_owner:
4011,7 → 3984,7
shl edi,4
add edi,0x2d0000
mov esi,[0x3010]
mov esi,[esi+0x4]
mov esi,[esi+TASKDATA.pid]
mov [edi],esi
mov [edi+4],ebx
mov [edi+8],ecx
4030,7 → 4003,7
test esi,esi
je frpal2
mov edx,[0x3010]
mov edx,[edx+4]
mov edx,[edx+TASKDATA.pid]
frpal3:
mov edi,esi
shl edi,4
4104,7 → 4077,7
lea edi,[irq_owner+ebx*4]
mov edx,[edi]
mov eax,[0x3010]
cmp edx,[eax+0x4]
cmp edx,[eax+TASKDATA.pid]
jne fril1
dec ecx
mov [edi],ecx
4119,7 → 4092,7
jnz ril1
 
mov edx,[0x3010]
mov edx,[edx+0x4]
mov edx,[edx+TASKDATA.pid]
mov [edi],edx
dec ecx
ril1:
4597,7 → 4570,7
 
mov esi,save_syscall_data ; data
mov edi,[0x3010]
mov edi,[edi+0x10]
mov edi,[edi+TASKDATA.mem_start]
add edi,ebx
cld
rep movsb
4619,7 → 4592,7
jne no_set_keyboard_setup
 
shl edi,8
mov [edi+0x800B4],bl
mov [edi+0x80000 + APPDATA.keyboard_mode],bl
 
ret
 
4629,7 → 4602,7
jne no_get_keyboard_setup
 
shl edi,8
movzx eax, byte [0x800B4+edi]
movzx eax, byte [0x80000+edi + APPDATA.keyboard_mode]
 
mov [esp+36],eax
 
4734,8 → 4707,8
mov edi,[0x3000]
shl edi,8
add edi,0x80000
mov [edi+0xA0],ebx
mov [edi+0xA4],ecx
mov [edi + APPDATA.ipc_start], ebx
mov [edi + APPDATA.ipc_size], ecx
mov [esp+36],dword 0
ret
no_ipc_def:
4745,7 → 4718,7
mov esi,1
mov edi,0x3020
ipcs1:
cmp [edi+4],ebx
cmp [edi+TASKDATA.pid], ebx
je ipcs2
add edi,0x20
inc esi
4760,22 → 4733,22
push esi
mov eax,esi
shl eax,8
mov ebx,[eax+0x80000+0xa0]
mov ebx,[eax+0x80000 + APPDATA.ipc_start]
test ebx,ebx ; ipc area not defined ?
je ipc_err1
 
add ebx,[eax+0x80000+0xa4]
add ebx,[eax+0x80000 + APPDATA.ipc_size]
mov eax,esi
shl eax,5
add ebx,[eax+0x3000+0x10] ; ebx <- max data position
add ebx,[eax+0x3000 + TASKDATA.mem_start] ; ebx <- max data position
 
mov eax,esi ; to
shl esi,8
add esi,0x80000
mov edi,[esi+0xa0]
mov edi,[esi+APPDATA.ipc_start]
shl eax,5
add eax,0x3000
add edi,[eax+0x10]
add edi,[eax+TASKDATA.mem_start]
 
cmp [edi],byte 0 ; overrun ?
jne ipc_err2
4786,7 → 4759,7
 
mov esi,ecx ; from
mov eax,[0x3010]
mov eax,[eax+0x10]
mov eax,[eax+TASKDATA.mem_start]
add esi,eax
 
mov ecx,edx ; size
4799,7 → 4772,7
push ecx
 
mov eax,[0x3010]
mov eax,[eax+4]
mov eax,[eax+TASKDATA.pid]
mov [edi-8],eax
mov [edi-4],ecx
cld
4813,7 → 4786,7
 
mov edi,[esp]
shl edi,8
or dword [edi+0x80000+0xA8],dword 01000000b ; ipc message
or dword [edi+0x80000+APPDATA.event_mask],dword 01000000b ; ipc message
 
cmp [check_idle_semaphore],dword 20
jge ipc_no_cis
4897,8 → 4870,8
 
 
mov edx,[0x3010]
add eax,[edx-twdw]
add ebx,[edx-twdw+4]
add eax,[edx-twdw+WDATA.box.left]
add ebx,[edx-twdw+WDATA.box.top]
mov edi,[0x3000]
shl edi,8
add eax,[edi+0x80000+APPDATA.wnd_clientbox.left]
4913,15 → 4886,14
syscall_writetext: ; WriteText
 
mov edi,[0x3010]
mov ebp,[edi-twdw]
mov ebp,[edi-twdw+WDATA.box.left]
mov esi,[0x3000]
shl esi,8
add ebp,[esi+0x80000+APPDATA.wnd_clientbox.left]
shl ebp,16
add ebp,[edi-twdw+4]
add ebp,[edi-twdw+WDATA.box.top]
add bp,word[esi+0x80000+APPDATA.wnd_clientbox.top]
add edi,0x10
add ecx,[edi]
add ecx,[edi+TASKDATA.mem_start]
add eax,ebp
xor edi,edi
jmp dtext
4932,7 → 4904,7
 
 
mov edi,[0x3010]
add edi,0x10
add edi, TASKDATA.mem_start
add eax,[edi]
add edx,[edi]
mov esi,12
4978,7 → 4950,7
 
syscall_startapp: ; StartApp
mov edi,[0x3010]
add edi,0x10
add edi, TASKDATA.mem_start
add eax,[edi]
test ebx,ebx
jz noapppar
5032,7 → 5004,7
syscall_delramdiskfile: ; DelRamdiskFile
 
mov edi,[0x3010]
add edi,0x10
add edi, TASKDATA.mem_start
add eax,[edi]
call filedelete
mov [esp+36],eax
5043,7 → 5015,7
syscall_writeramdiskfile: ; WriteRamdiskFile
 
mov edi,[0x3010]
add edi,0x10
add edi, TASKDATA.mem_start
add eax,[edi]
add ebx,[edi]
call filesave
5069,7 → 5041,7
syscall_readstring: ; ReadString
 
mov edi,[0x3010]
add edi,0x10
add edi, TASKDATA.mem_start
add eax,[edi]
call read_string
mov [esp+36],eax
5080,7 → 5052,7
syscall_drawline: ; DrawLine
 
mov edi,[0x3010]
movzx edx,word[edi-twdw]
movzx edx,word[edi-twdw+WDATA.box.left]
mov ebp,edx
mov esi,[0x3000]
shl esi,8
5088,7 → 5060,7
add dx,word[esi+0x80000+APPDATA.wnd_clientbox.left]
shl edx,16
add ebp,edx
movzx edx,word[edi-twdw+4]
movzx edx,word[edi-twdw+WDATA.box.top]
add eax,ebp
mov ebp,edx
add ebp,[esi+0x80000+APPDATA.wnd_clientbox.top]
5167,7 → 5139,7
read_from_hd: ; Read from hd - fn not in use
 
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add eax,[edi]
add ecx,[edi]
add edx,[edi]
5184,7 → 5156,7
write_to_hd: ; Write a file to hd
 
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add eax,[edi]
add ecx,[edi]
add edx,[edi]
/kernel/trunk/kernel32.inc
107,12 → 107,13
WSTYLE_HASCAPTION = 00010000b
WSTYLE_CLIENTRELATIVE = 00100000b
 
struc TASKLIST
struc TASKDATA
{
.event_mask dd ?
.pid dd ?
dw ?
.state dw ?
.state db ?
db ?
dw ?
.wnd_number db ?
db ?
122,7 → 123,7
.cpu_usage dd ?
}
virtual at 0
TASKLIST TASKLIST
TASKDATA TASKDATA
end virtual
 
; structures definition
145,12 → 146,12
{
.app_name db 11 dup(?)
db 5 dup(?)
.fpu_save_area db 108 dup(?)
.fpu_save_area: db 108 dup(?)
db 3 dup(?)
.is_fpu_saved db ?
.wnd_shape dd ?
.wnd_shape_scale dd ?
.gdt dd ?
dd ?
.mem_size dd ?
.saved_box BOX
.ipc_start dd ?
157,7 → 158,7
.ipc_size dd ?
.event_mask dd ?
.debugger_slot dd ?
.int40_handler dd ?
dd ?
.keyboard_mode db ?
db 3 dup(?)
.dir_table dd ?
/kernel/trunk/memmap.inc
44,7 → 44,9
;
; 20 dword application event mask
; 24 dword PID - process identification number
; 2a word 0, state 1,2=suspended 3=zombie, 4=terminate
; 2a byte slot state: 0=running, 1,2=suspended
; 3=zombie, 4=terminate,
; 5=waiting for event, 9 = not used
; 2e byte window number on screen
; 30 dword exact position in memory
; 34 dword counter sum
134,7 → 136,7
; 7f byte 0= no fpu saved , 1= fpu saved to 0x10 -> restore
; 80 dword address of random shaped window area
; 84 byte shape area scale
; 88 dword used GDT of TSS
; 88 dword free
; 8C dword application memory size
; 90 dword window X position save
; 94 dword window Y position save
144,7 → 146,7
; A4 dword IPC memory size
; A8 dword event bits: mouse, stack,..
; AC dword 0 or debugger slot
; B0 dword int40 handler in use ; 0 if not in use
; B0 dword free
; B4 byte keyboard mode: 0 = keymap, 1 = scancodes
; B8 dword physical address of directory table
; BC dword address of debug event memory
/kernel/trunk/network/stack.inc
995,7 → 995,7
 
; Get the address of the callers data
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add edx,[edi]
mov edi, edx
 
1058,7 → 1058,7
 
; Get the address of the callers data
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add eax,[edi]
mov esi, eax
 
1117,7 → 1117,7
mov [eax + 24], dword 0 ; recieved data count
 
mov esi, [0x3010]
mov ebx, [esi+0x4]
mov ebx, [esi+TASKDATA.pid]
mov [eax + 4], ebx ; save the process ID
pop eax ; Get the socket number back, so we can return it
 
1176,7 → 1176,7
mov [eax + 28], ebx ; Indicate the state of the TCB
 
mov esi, [0x3010]
mov ecx, [esi+0x4]
mov ecx, [esi+TASKDATA.pid]
mov [eax + 4], ecx ; save the process ID
 
cmp ebx, TCB_LISTEN
1548,7 → 1548,7
 
; Get the address of the callers data
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add eax,[edi]
mov esi, eax
 
1671,7 → 1671,7
 
; Get the address of the callers data
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add edx,[edi]
mov esi, edx
 
/kernel/trunk/network/tcp.inc
1004,7 → 1004,7
; flag an event to the application
pop eax
mov ecx,1
mov esi,0x3020+0x4
mov esi,0x3020+TASKDATA.pid
 
news:
cmp [esi],eax
1016,7 → 1016,7
 
foundPID1:
shl ecx,8
or dword [ecx+0x80000+0xA8],dword 10000000b ; stack event
or dword [ecx+0x80000+APPDATA.event_mask],dword 10000000b ; stack event
 
pop ecx
 
/kernel/trunk/network/udp.inc
114,7 → 114,7
; flag an event to the application
pop eax
mov ecx,1
mov esi,0x3020+0x4
mov esi,0x3020+TASKDATA.pid
newsearch:
cmp [esi],eax
126,7 → 126,7
foundPID:
shl ecx,8
or dword [ecx+0x80000+0xA8],dword 10000000b ; stack event
or dword [ecx+0x80000+APPDATA.event_mask],dword 10000000b ; stack event
 
mov [check_idle_semaphore],200
 
/kernel/trunk/sound/sb16.inc
31,7 → 31,7
cmp eax,0 ; Load data
jne no_SB16_load_music
mov edi,[0x3010]
add edi,0x10
add edi,TASKDATA.mem_start
add ebx,[edi]
call code_SB16_load_music
ret
78,7 → 78,7
; mov [memAdrNote], eax
mov [memAdrNote],edx
mov eax,[0x3010]
mov eax,[eax+4]
mov eax,[eax+TASKDATA.pid]
mov [pidProcessNote],eax
xor eax, eax ; Ok! EAX = 0
retFunc55:
/kernel/trunk/video/vesa12.inc
208,8 → 208,8
mov ebx,3
mul ebx
mov [imax],eax
mov eax,[draw_data+32+0]
mov ebx,[draw_data+32+4]
mov eax,[draw_data+32+RECT.left]
mov ebx,[draw_data+32+RECT.top]
mov edi,0 ;no force
 
v12dp3:
330,15 → 330,15
popa
add esi,3
inc eax
cmp eax,[draw_data+32+8]
cmp eax,[draw_data+32+RECT.right]
jg v12nodp31
jmp v12dp3
 
v12nodp31:
 
mov eax,[draw_data+32+0]
mov eax,[draw_data+32+RECT.left]
inc ebx
cmp ebx,[draw_data+32+12]
cmp ebx,[draw_data+32+RECT.bottom]
jg v12dp4
jmp v12dp3
 
365,8 → 365,8
push ecx
push edx
mov ecx,[0x3010]
add eax,[ecx-twdw]
add ebx,[ecx-twdw+4]
add eax,[ecx-twdw+WDATA.box.left]
add ebx,[ecx-twdw+WDATA.box.top]
push eax
mov eax,ebx ; y
mov ebx,[0xfe08]
403,16 → 403,16
push eax
push ecx
mov eax,[0x3010]
mov ecx,[eax+draw_data-0x3000+0]
mov ecx,[eax+draw_data-0x3000+RECT.left]
cmp ecx,0
jnz dbcblimitlset12
mov ecx,[eax+draw_data-0x3000+4]
mov ecx,[eax+draw_data-0x3000+RECT.top]
cmp ecx,0
jnz dbcblimitlset12
mov ecx,[eax+draw_data-0x3000+8]
mov ecx,[eax+draw_data-0x3000+RECT.right]
cmp ecx,[0xfe00]
jnz dbcblimitlset12
mov ecx,[eax+draw_data-0x3000+12]
mov ecx,[eax+draw_data-0x3000+RECT.bottom]
cmp ecx,[0xfe04]
jnz dbcblimitlset12
pop ecx
726,8 → 726,8
movzx eax,word [esp+2]
movzx ebx,word [esp+0]
mov ecx,[0x3010]
add eax,[ecx-twdw]
add ebx,[ecx-twdw+4]
add eax,[ecx-twdw+WDATA.box.left]
add ebx,[ecx-twdw+WDATA.box.top]
push eax
mov eax,ebx ; y
mov ebx,[0xfe08]
765,16 → 765,16
push eax
push ecx
mov eax,[0x3010]
mov ecx,[eax+draw_data-0x3000+0]
mov ecx,[eax+draw_data-0x3000+RECT.left]
cmp ecx,0
jnz dbcblimitlset212
mov ecx,[eax+draw_data-0x3000+4]
mov ecx,[eax+draw_data-0x3000+RECT.top]
cmp ecx,0
jnz dbcblimitlset212
mov ecx,[eax+draw_data-0x3000+8]
mov ecx,[eax+draw_data-0x3000+RECT.right]
cmp ecx,[0xfe00]
jnz dbcblimitlset212
mov ecx,[eax+draw_data-0x3000+12]
mov ecx,[eax+draw_data-0x3000+RECT.bottom]
cmp ecx,[0xfe04]
jnz dbcblimitlset212
pop ecx
/kernel/trunk/video/vesa20.inc
118,15 → 118,15
 
; calculate absolute (i.e. screen) coordinates
mov eax, [0x3010]
mov ebx, [eax-twdw + 0]
mov ebx, [eax-twdw + WDATA.box.left]
add ebx, [putimg.image_cx]
mov [putimg.abs_cx], ebx
mov ebx, [eax-twdw + 4]
mov ebx, [eax-twdw + WDATA.box.top]
add ebx, [putimg.image_cy]
mov [putimg.abs_cy], ebx
 
; real_sx = MIN(wnd_sx-image_cx, image_sx);
mov ebx, [eax-twdw + 8] ; ebx = wnd_sx
mov ebx, [eax-twdw + WDATA.box.width] ; ebx = wnd_sx
sub ebx, [putimg.image_cx]
ja @f
add esp, putimg.stack_data
142,7 → 142,7
mov [putimg.real_sx], ebx
 
; init real_sy
mov ebx, [eax-twdw + 12] ; ebx = wnd_sy
mov ebx, [eax-twdw + WDATA.box.height] ; ebx = wnd_sy
sub ebx, [putimg.image_cy]
ja @f
add esp, putimg.stack_data
602,13 → 602,13
mov [drbar.bar_cy], ebx
 
mov edi, [0x3010]
add eax, [edi-twdw + 0] ; win_cx
add ebx, [edi-twdw + 4] ; win_cy
add eax, [edi-twdw + WDATA.box.left] ; win_cx
add ebx, [edi-twdw + WDATA.box.top] ; win_cy
mov [drbar.abs_cx], eax
mov [drbar.abs_cy], ebx
 
; real_sx = MIN(wnd_sx-bar_cx, bar_sx);
mov ebx, [edi-twdw + 8] ; ebx = wnd_sx
mov ebx, [edi-twdw + WDATA.box.width] ; ebx = wnd_sx
sub ebx, [drbar.bar_cx]
ja @f
.exit: ;// mike.dld, 2005-01-29
626,7 → 626,7
mov [drbar.real_sx], ebx
 
; real_sy = MIN(wnd_sy-bar_cy, bar_sy);
mov ebx, [edi-twdw + 12] ; ebx = wnd_sy
mov ebx, [edi-twdw + WDATA.box.height] ; ebx = wnd_sy
sub ebx, [drbar.bar_cy]
ja @f
add esp, drbar.stack_data
852,8 → 852,8
add edx,dword [WinMapAddress-8] ; +B
push edx
 
mov ebp,[draw_data+32+0] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+4] ; y start:=(y+Ywin)
mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
 
mov eax,[BytesPerScanLine]
mul ebx
934,7 → 934,7
inc edi ; ptrBuffer++
add esi,3 ; ptrImage+=3
inc eax
cmp eax,[draw_data+32+8] ; X > xend?
cmp eax,[draw_data+32+RECT.right] ; X > xend?
; jg nodp3
; jmp dp3
;
941,7 → 941,7
; nodp3:
jle dp3
 
mov ebp,[draw_data+32+0]
mov ebp,[draw_data+32+RECT.left]
 
inc ebx
 
961,7 → 961,7
 
call calculate_edi
 
cmp ebx,[draw_data+32+12]
cmp ebx,[draw_data+32+RECT.bottom]
; jg dp4
;
; jmp dp3
997,8 → 997,8
add edx,dword [WinMapAddress-8] ; +B
push edx
 
mov ebp,[draw_data+32+0] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+4] ; y start:=(y+Ywin)
mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
 
mov eax,[BytesPerScanLine]
mul ebx
1070,10 → 1070,10
inc edi ; ptrBuffer++
add esi,3 ; ptrImage+=3
inc eax
cmp eax,[draw_data+32+8] ; X > xend?
cmp eax,[draw_data+32+RECT.right] ; X > xend?
jle sdp3
 
mov ebp,[draw_data+32+0]
mov ebp,[draw_data+32+RECT.left]
 
inc ebx
 
1093,7 → 1093,7
 
call calculate_edi
 
cmp ebx,[draw_data+32+12]
cmp ebx,[draw_data+32+RECT.bottom]
jle sdp3
 
add esp,4
/kernel/trunk/video/vga.inc
71,8 → 71,8
movzx eax,word [esp+2] ; eax:=x
movzx ebx,word [esp+0] ; ebx:=y
mov ecx,[0x3010] ;
add eax,[ecx-twdw] ; eax+=Xwin
add ebx,[ecx-twdw+4] ; ebx+=Ywin
add eax,[ecx-twdw+WDATA.box.left] ; eax+=Xwin
add ebx,[ecx-twdw+WDATA.box.top] ; ebx+=Ywin
mov ecx,ebx ; ecx = y+Ywin
mov edx,eax ; edx = x+Xwin
 
104,19 → 104,19
push eax ; LFB address
 
mov eax,[0x3010]
mov ecx,[eax+draw_data-0x3000+0]
mov ecx,[eax+draw_data-0x3000+RECT.left]
cmp ecx,0
jnz dbcblimitlset_vga
 
mov ecx,[eax+draw_data-0x3000+4]
mov ecx,[eax+draw_data-0x3000+RECT.top]
cmp ecx,0
jnz dbcblimitlset_vga
 
mov ecx,[eax+draw_data-0x3000+8]
mov ecx,[eax+draw_data-0x3000+RECT.right]
cmp ecx,[0xfe00] ; ecx <> Screen X size
jnz dbcblimitlset_vga
 
mov ecx,[eax+draw_data-0x3000+12]
mov ecx,[eax+draw_data-0x3000+RECT.bottom]
cmp ecx,[0xfe04] ; ecx <> Screen Y size
jnz dbcblimitlset_vga
 
323,8 → 323,8
push edx ; +0
 
mov ecx,[0x3010] ;
add eax,[ecx-twdw] ; eax:=Xwin+x
add ebx,[ecx-twdw+4] ; ebx:=Ywin+y
add eax,[ecx-twdw+WDATA.box.left] ; eax:=Xwin+x
add ebx,[ecx-twdw+WDATA.box.top] ; ebx:=Ywin+y
mov ecx, eax ; ecx:=(x+Xwin)
mov edx, ebx ; edx:=(y+Ywin)
 
377,19 → 377,19
 
mov eax,[0x3010]
 
mov ecx,[eax+draw_data-0x3000+0]
mov ecx,[eax+draw_data-0x3000+RECT.left]
cmp ecx,0
jnz dbcblimitlset_vga2
 
mov ecx,[eax+draw_data-0x3000+4]
mov ecx,[eax+draw_data-0x3000+RECT.top]
cmp ecx,0
jnz dbcblimitlset_vga2
 
mov ecx,[eax+draw_data-0x3000+8]
mov ecx,[eax+draw_data-0x3000+RECT.right]
cmp ecx,[0xfe00]
jnz dbcblimitlset_vga2
 
mov ecx,[eax+draw_data-0x3000+12]
mov ecx,[eax+draw_data-0x3000+RECT.bottom]
cmp ecx,[0xfe04]
jnz dbcblimitlset_vga2
 
514,8 → 514,8
add edx,dword [WinMapAddress-8] ; +B
push edx
 
mov eax,[draw_data+32+0] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+4] ; y start:=(y+Ywin)
mov eax,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
mov ecx,eax
mov edx,ebx
 
587,7 → 587,7
nbgpvga:
 
inc eax ; x++
cmp eax,[draw_data+32+8] ; X > xend?
cmp eax,[draw_data+32+RECT.right] ; X > xend?
jg nodp3vga
 
test eax,0x07 ; x test modulo 8
602,7 → 602,7
 
nodp3vga:
 
mov eax,[draw_data+32+0] ; x+Xwin
mov eax,[draw_data+32+RECT.left] ; x+Xwin
inc ebx ; y position
mov ecx,eax
mov edx,ebx
622,7 → 622,7
 
call calculate_edi
 
cmp ebx,[draw_data+32+12] ; Y > yend
cmp ebx,[draw_data+32+RECT.bottom] ; Y > yend
jg dp4vga
 
jmp dp3vga
657,8 → 657,8
add edx,dword [WinMapAddress-8] ; +B
push edx
 
mov eax,[draw_data+32+0] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+4] ; y start:=(y+Ywin)
mov eax,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
mov ecx,eax
mov edx,ebx
 
731,7 → 731,7
snbgpvga:
 
inc eax ; x++
cmp eax,[draw_data+32+8] ; X > xend?
cmp eax,[draw_data+32+RECT.right] ; X > xend?
jg snodp3vga
 
test eax,0x07 ; x test modulo 8
746,7 → 746,7
 
snodp3vga:
 
mov eax,[draw_data+32+0] ; x+Xwin
mov eax,[draw_data+32+RECT.left] ; x+Xwin
inc ebx ; y position
mov ecx,eax
mov edx,ebx
766,7 → 766,7
 
call calculate_edi
 
cmp ebx,[draw_data+32+12] ; Y > yend
cmp ebx,[draw_data+32+RECT.bottom] ; Y > yend
jg sdp4vga
 
jmp sdp3vga