refractoring of EVENT, and so on

git-svn-id: svn://kolibrios.org@1055 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Galkov 2009-03-28 18:36:41 +00:00
parent 361dc65fd3
commit 3be0aa5c21
11 changed files with 3355 additions and 3697 deletions

View File

@ -95,11 +95,11 @@ CAPS_SVM equ 73 ;secure virual machine
CAPS_ALTMOVCR8 equ 74 ; CAPS_ALTMOVCR8 equ 74 ;
; CPU MSR names ; CPU MSR names
MSR_SYSENTER_CS equ 0x174 MSR_SYSENTER_CS equ 0x174
MSR_SYSENTER_ESP equ 0x175 MSR_SYSENTER_ESP equ 0x175
MSR_SYSENTER_EIP equ 0x176 MSR_SYSENTER_EIP equ 0x176
MSR_AMD_EFER equ 0xC0000080 ; Extended Feature Enable Register MSR_AMD_EFER equ 0xC0000080 ; Extended Feature Enable Register
MSR_AMD_STAR equ 0xC0000081 ; SYSCALL/SYSRET Target Address Register MSR_AMD_STAR equ 0xC0000081 ; SYSCALL/SYSRET Target Address Register
CR0_PE equ 0x00000001 ;protected mode CR0_PE equ 0x00000001 ;protected mode
CR0_MP equ 0x00000002 ;monitor fpu CR0_MP equ 0x00000002 ;monitor fpu
@ -468,9 +468,10 @@ struc EVENT
.id dd ? ;event uid .id dd ? ;event uid
.state dd ? ;internal flags .state dd ? ;internal flags
.code dd ? .code dd ?
rd 5 rd 6
.size = $ - .magic
.codesize = $ - .code
} }
EVENT_SIZE equ 52
virtual at 0 virtual at 0
EVENT EVENT EVENT EVENT
@ -687,4 +688,3 @@ end virtual
virtual at 0 virtual at 0
CSYM COFF_SYM CSYM COFF_SYM
end virtual end virtual

View File

@ -9,57 +9,57 @@ $Revision$
iglobal iglobal
szKernel db 'KERNEL', 0 szKernel db 'KERNEL', 0
szVersion db 'version',0 szVersion db 'version',0
szRegService db 'RegService',0 szRegService db 'RegService',0
szGetService db 'GetService',0 szGetService db 'GetService',0
szServiceHandler db 'ServiceHandler',0 szServiceHandler db 'ServiceHandler',0
szAttachIntHandler db 'AttachIntHandler',0 szAttachIntHandler db 'AttachIntHandler',0
szGetIntHandler db 'GetIntHandler', 0 szGetIntHandler db 'GetIntHandler', 0
szFpuSave db 'FpuSave',0 szFpuSave db 'FpuSave',0
szFpuRestore db 'FpuRestore',0 szFpuRestore db 'FpuRestore',0
szReservePortArea db 'ReservePortArea',0 szReservePortArea db 'ReservePortArea',0
szBoot_Log db 'Boot_Log',0 szBoot_Log db 'Boot_Log',0
szPciApi db 'PciApi', 0 szPciApi db 'PciApi', 0
szPciRead32 db 'PciRead32', 0 szPciRead32 db 'PciRead32', 0
szPciRead16 db 'PciRead16', 0 szPciRead16 db 'PciRead16', 0
szPciRead8 db 'PciRead8', 0 szPciRead8 db 'PciRead8', 0
szPciWrite8 db 'PciWrite8',0 szPciWrite8 db 'PciWrite8',0
szPciWrite16 db 'PciWrite16',0 szPciWrite16 db 'PciWrite16',0
szPciWrite32 db 'PciWrite32',0 szPciWrite32 db 'PciWrite32',0
szAllocPage db 'AllocPage',0 szAllocPage db 'AllocPage',0
szAllocPages db 'AllocPages',0 szAllocPages db 'AllocPages',0
szFreePage db 'FreePage',0 szFreePage db 'FreePage',0
szGetPgAddr db 'GetPgAddr',0 szGetPgAddr db 'GetPgAddr',0
szMapPage db 'MapPage',0 szMapPage db 'MapPage',0
szMapSpace db 'MapSpace',0 szMapSpace db 'MapSpace',0
szMapIoMem db 'MapIoMem',0 szMapIoMem db 'MapIoMem',0
szCommitPages db 'CommitPages',0 szCommitPages db 'CommitPages',0
szReleasePages db 'ReleasePages',0 szReleasePages db 'ReleasePages',0
szAllocKernelSpace db 'AllocKernelSpace',0 szAllocKernelSpace db 'AllocKernelSpace',0
szFreeKernelSpace db 'FreeKernelSpace',0 szFreeKernelSpace db 'FreeKernelSpace',0
szKernelAlloc db 'KernelAlloc',0 szKernelAlloc db 'KernelAlloc',0
szKernelFree db 'KernelFree',0 szKernelFree db 'KernelFree',0
szUserAlloc db 'UserAlloc',0 szUserAlloc db 'UserAlloc',0
szUserFree db 'UserFree',0 szUserFree db 'UserFree',0
szKmalloc db 'Kmalloc',0 szKmalloc db 'Kmalloc',0
szKfree db 'Kfree',0 szKfree db 'Kfree',0
szCreateRingBuffer db 'CreateRingBuffer',0 szCreateRingBuffer db 'CreateRingBuffer',0
szGetPid db 'GetPid',0 szGetPid db 'GetPid',0
szCreateObject db 'CreateObject',0 szCreateObject db 'CreateObject',0
szDestroyObject db 'DestroyObject',0 szDestroyObject db 'DestroyObject',0
szCreateEvent db 'CreateEvent',0 szCreateEvent db 'CreateEvent',0
szRaiseEvent db 'RaiseEvent',0 szRaiseEvent db 'RaiseEvent',0
szWaitEvent db 'WaitEvent',0 szWaitEvent db 'WaitEvent',0
szDestroyEvent db 'DestroyEvent',0 szDestroyEvent db 'DestroyEvent',0
szClearEvent db 'ClearEvent',0 szClearEvent db 'ClearEvent',0
szLoadCursor db 'LoadCursor',0 szLoadCursor db 'LoadCursor',0
szSelectHwCursor db 'SelectHwCursor',0 szSelectHwCursor db 'SelectHwCursor',0
szSetHwCursor db 'SetHwCursor',0 szSetHwCursor db 'SetHwCursor',0
szHwCursorRestore db 'HwCursorRestore', 0 szHwCursorRestore db 'HwCursorRestore', 0
@ -68,19 +68,19 @@ iglobal
szSysMsgBoardStr db 'SysMsgBoardStr', 0 szSysMsgBoardStr db 'SysMsgBoardStr', 0
szSysMsgBoardChar db 'SysMsgBoardChar', 0 szSysMsgBoardChar db 'SysMsgBoardChar', 0
szGetCurrentTask db 'GetCurrentTask',0 szGetCurrentTask db 'GetCurrentTask',0
szLFBAddress db 'LFBAddress',0 szLFBAddress db 'LFBAddress',0
szLoadFile db 'LoadFile',0 szLoadFile db 'LoadFile',0
szSendEvent db 'SendEvent',0 szSendEvent db 'SendEvent',0
szSetMouseData db 'SetMouseData',0 szSetMouseData db 'SetMouseData',0
szSleep db 'Sleep',0 szSleep db 'Sleep',0
szGetTimerTicks db 'GetTimerTicks',0 szGetTimerTicks db 'GetTimerTicks',0
szStrncat db 'strncat',0 szStrncat db 'strncat',0
szStrncpy db 'strncpy',0 szStrncpy db 'strncpy',0
szstrncmp db 'strncmp',0 szstrncmp db 'strncmp',0
szStrnlen db 'strnlen',0 szStrnlen db 'strnlen',0
szStrchr db 'strchr',0 szStrchr db 'strchr',0
szStrrchr db 'strrchr',0 szStrrchr db 'strrchr',0
align 16 align 16
@ -90,12 +90,12 @@ kernel_export:
dd szServiceHandler , srv_handler dd szServiceHandler , srv_handler
dd szAttachIntHandler, attach_int_handler dd szAttachIntHandler, attach_int_handler
dd szGetIntHandler , get_int_handler dd szGetIntHandler , get_int_handler
dd szFpuSave , fpu_save dd szFpuSave , fpu_save
dd szFpuRestore , fpu_restore dd szFpuRestore , fpu_restore
dd szReservePortArea , r_f_port_area dd szReservePortArea , r_f_port_area
dd szBoot_Log , boot_log dd szBoot_Log , boot_log
dd szPciApi , pci_api dd szPciApi , pci_api
dd szPciRead32 , pci_read32 dd szPciRead32 , pci_read32
dd szPciRead16 , pci_read16 dd szPciRead16 , pci_read16
dd szPciRead8 , pci_read8 dd szPciRead8 , pci_read8
@ -126,11 +126,11 @@ kernel_export:
dd szGetPid , get_pid dd szGetPid , get_pid
dd szCreateObject , create_kernel_object dd szCreateObject , create_kernel_object
dd szDestroyObject , destroy_kernel_object dd szDestroyObject , destroy_kernel_object
dd szCreateEvent , create_event dd szCreateEvent , create_event ;see EVENT.inc for specification
dd szRaiseEvent , raise_event dd szRaiseEvent , raise_event ;see EVENT.inc for specification
dd szWaitEvent , wait_event dd szWaitEvent , wait_event ;see EVENT.inc for specification
dd szDestroyEvent , destroy_event dd szDestroyEvent , destroy_event ;see EVENT.inc for specification
dd szClearEvent , clear_event dd szClearEvent , clear_event ;see EVENT.inc for specification
dd szLoadCursor , load_cursor ;stdcall dd szLoadCursor , load_cursor ;stdcall
@ -143,21 +143,20 @@ kernel_export:
dd szSysMsgBoardChar , sys_msg_board dd szSysMsgBoardChar , sys_msg_board
dd szGetCurrentTask , get_curr_task dd szGetCurrentTask , get_curr_task
dd szLoadFile , load_file ;retval eax, ebx dd szLoadFile , load_file ;retval eax, ebx
dd szSendEvent , send_event dd szSendEvent , send_event ;see EVENT.inc for specification
dd szSetMouseData , set_mouse_data ;stdcall dd szSetMouseData , set_mouse_data ;stdcall
dd szSleep , delay_ms dd szSleep , delay_ms
dd szGetTimerTicks , get_timer_ticks dd szGetTimerTicks , get_timer_ticks
dd szStrncat , strncat dd szStrncat , strncat
dd szStrncpy , strncpy dd szStrncpy , strncpy
dd szstrncmp , strncmp dd szstrncmp , strncmp
dd szStrnlen , strnlen dd szStrnlen , strnlen
dd szStrchr , strchr dd szStrchr , strchr
dd szStrrchr , strrchr dd szStrrchr , strrchr
exp_lfb: exp_lfb:
dd szLFBAddress , 0 dd szLFBAddress , 0
dd 0 ;terminator, must be zero dd 0 ;terminator, must be zero
endg endg

View File

@ -1051,7 +1051,8 @@ f68:
.14: .14:
cmp ebx, OS_BASE cmp ebx, OS_BASE
jae .fail jae .fail
stdcall get_event_ex, ebx, ecx mov edi,ebx
call get_event_ex
mov [esp+36], eax mov [esp+36], eax
ret ret
.15: .15:

View File

@ -15,321 +15,229 @@ $Revision$
align 32 align 32
irq0: irq0:
pushad pushad
mov ax, app_data ; Mov ds, ax, app_data
mov ds, ax mov es, ax
mov es, ax inc [timer_ticks]
mov eax, [timer_ticks]
; cmp dword[CURRENT_TASK], 1 call playNote ; <<<--- Speaker driver
; jnz @f sub eax,[next_usage_update]
; mov eax, [esp + 32] cmp eax,100
; cmp eax, idle_loop + 1 jb .nocounter
; jz @f add [next_usage_update],100
; DEBUGF 1, "K : OOOPS! EAX = 0x%x\n", eax call updatecputimes
; @@: .nocounter:
mov al,0x20 ; send End Of Interrupt signal
inc dword [timer_ticks] out 0x20,al
btr dword[DONT_SWITCH], 0
mov eax, [timer_ticks] jc .return
call playNote ; <<<--- Speaker driver call find_next_task
jz .return ; if there is only one running process
cmp eax,[next_usage_update] call do_change_task
jb .nocounter .return:
add eax,100 popad
mov [next_usage_update],eax iretd
call updatecputimes
.nocounter:
cmp [DONT_SWITCH], byte 1
jne .change_task
mov al,0x20 ; send End Of Interrupt signal
mov dx,0x20
out dx,al
mov [DONT_SWITCH], byte 0
popad
iretd
.change_task:
call update_counters
call find_next_task
mov ecx, eax
mov al,0x20 ; send End Of Interrupt signal
mov dx,0x20
out dx,al
test ecx, ecx ; if there is only one running process
jnz .return
call do_change_task
.return:
popad
; popfd
iretd
align 4 align 4
change_task: change_task:
pushfd
pushfd cli
cli pushad
pushad
call update_counters
if 0 if 0
; \begin{Mario79} ; <- must be refractoried, if used...
; \begin{Mario79} cmp [dma_task_switched], 1
cmp [dma_task_switched], 1 jne .find_next_task
jne .find_next_task mov [dma_task_switched], 0
mov [dma_task_switched], 0 mov ebx, [dma_process]
mov ebx, [dma_process] cmp [CURRENT_TASK], ebx
cmp [CURRENT_TASK], ebx je .return
je .return mov edi, [dma_slot_ptr]
mov edi, [dma_slot_ptr] mov [CURRENT_TASK], ebx
mov [CURRENT_TASK], ebx mov [TASK_BASE], edi
mov [TASK_BASE], edi jmp @f
jmp @f
.find_next_task: .find_next_task:
; \end{Mario79} ; \end{Mario79}
end if end if
call find_next_task
call find_next_task jz .return ; the same task -> skip switch
test eax, eax ; the same task -> skip switch @@: mov byte[DONT_SWITCH], 1
jnz .return call do_change_task
@@: .return:
mov [DONT_SWITCH],byte 1 popad
call do_change_task popfd
ret
.return:
popad
popfd
ret
uglobal uglobal
align 4 align 4
far_jump: ; far_jump:
.offs dd ? ; .offs dd ?
.sel dw ? ; .sel dw ?
context_counter dd ? ;noname & halyavin context_counter dd 0 ;noname & halyavin
next_usage_update dd ? next_usage_update dd 0
timer_ticks dd ? timer_ticks dd 0
prev_slot dd ? ; prev_slot dd ?
event_sched dd ? ; event_sched dd ?
endg endg
align 4
update_counters: update_counters:
mov edi, [TASK_BASE] mov edi, [TASK_BASE]
mov ebx, [edi+TASKDATA.counter_add] ; time stamp counter add rdtsc
rdtsc sub eax, [edi+TASKDATA.counter_add] ; time stamp counter add
sub eax, ebx add [edi+TASKDATA.counter_sum], eax ; counter sum
add eax, [edi+TASKDATA.counter_sum] ; counter sum ret
mov [edi+TASKDATA.counter_sum], eax
ret
; Find next task to execute
; result: ebx = number of the selected task
; eax = 1 if the task is the same
; edi = address of the data for the task in ebx
; [0x3000] = ebx and [0x3010] = edi
; corrupts other regs
find_next_task:
mov ebx, [CURRENT_TASK]
mov edi, [TASK_BASE]
mov [prev_slot], ebx
.waiting_for_termination:
.waiting_for_reuse:
.waiting_for_event:
.suspended:
cmp ebx, [TASK_COUNT]
jb @f
mov edi, CURRENT_TASK
xor ebx, ebx
@@:
add edi,0x20
inc ebx
mov al, byte [edi+TASKDATA.state]
test al, al
jz .found
cmp al, 1
jz .suspended
cmp al, 2
jz .suspended
cmp al, 3
je .waiting_for_termination
cmp al, 4
je .waiting_for_termination
cmp al, 9
je .waiting_for_reuse
mov [CURRENT_TASK],ebx
mov [TASK_BASE],edi
cmp al, 5
jne .noevents
call get_event_for_app
test eax, eax
jnz @f
mov eax, ebx
shl eax, 8
mov eax, [SLOT_BASE + APPDATA.wait_timeout + eax]
cmp eax, [timer_ticks]
jae .waiting_for_event
xor eax, eax
@@:
mov [event_sched], eax
mov [edi+TASKDATA.state], byte 0
.noevents:
.found:
mov [CURRENT_TASK],ebx
mov [TASK_BASE],edi
rdtsc ;call _rdtsc
mov [edi+TASKDATA.counter_add],eax
mov esi, [prev_slot]
xor eax, eax
cmp ebx, esi
sete al
ret
; param
; ebx = incoming task
; esi = outcomig task
do_change_task:
shl ebx, 8
add ebx, SLOT_BASE
mov [current_slot], ebx
shl esi, 8
add esi, SLOT_BASE
mov [esi+APPDATA.saved_esp], esp
mov esp, [ebx+APPDATA.saved_esp]
; set thread io map
mov ecx, [ebx+APPDATA.io_map]
mov edx, [ebx+APPDATA.io_map+4]
mov dword [page_tabs+((tss._io_map_0 and -4096) shr 10)], ecx
mov dword [page_tabs+((tss._io_map_1 and -4096) shr 10)], edx
mov eax, [ebx+APPDATA.dir_table]
cmp eax, [esi+APPDATA.dir_table]
je @F
mov cr3, eax
@@:
mov eax, [ebx+APPDATA.saved_esp0]
mov [tss._esp0], eax
mov ax, graph_data
mov gs, ax
mov eax, [CURRENT_TASK]
cmp eax, [fpu_owner]
clts ;clear a task switch flag
je @F
;and set it again if the owner
mov ecx, cr0 ;of a fpu has changed
or ecx, CR0_TS
mov cr0, ecx
@@:
inc [context_counter] ;noname & halyavin
test [ebx+APPDATA.dbg_state], 1
jnz @F
ret
@@:
mov eax, [ebx+APPDATA.dbg_regs.dr0]
mov dr0, eax
mov eax, [ebx+APPDATA.dbg_regs.dr1]
mov dr1, eax
mov eax, [ebx+APPDATA.dbg_regs.dr2]
mov dr2, eax
mov eax, [ebx+APPDATA.dbg_regs.dr3]
mov dr3, eax
xor eax, eax
mov dr6, eax
mov eax, [ebx+APPDATA.dbg_regs.dr7]
mov dr7, eax
ret
align 4 align 4
updatecputimes: updatecputimes:
xor eax,eax
xchg eax,[idleuse]
mov [idleusesec],eax
mov ecx, [TASK_COUNT]
mov edi, TASK_DATA
.newupdate:
xor eax,eax
xchg eax,[edi+TASKDATA.counter_sum]
mov [edi+TASKDATA.cpu_usage],eax
add edi,0x20
loop .newupdate
ret
mov eax,[idleuse] align 4
mov [idleusesec],eax find_next_task:
mov [idleuse],dword 0 ;info:
mov ecx, [TASK_COUNT] ; Find next task to execute
mov edi, TASK_DATA ;retval:
.newupdate: ; ebx = address of the APPDATA for the selected task (slot-base)
mov ebx,[edi+TASKDATA.counter_sum] ; esi = previous slot-base ([current_slot] at the begin)
mov [edi+TASKDATA.cpu_usage],ebx ; edi = address of the TASKDATA for the selected task
mov [edi+TASKDATA.counter_sum],dword 0 ; ZF = 1 if the task is the same
add edi,0x20 ;warning:
dec ecx ; [CURRENT_TASK] = bh , [TASK_BASE] = edi -- as result
jnz .newupdate ; [current_slot] is not set to new value (ebx)!!!
;scratched: eax,ecx
call update_counters ; edi := [TASK_BASE]
Mov esi, ebx, [current_slot]
.loop:
cmp bh,[TASK_COUNT]
jb @f
xor bh, bh
mov edi,CURRENT_TASK
@@: inc bh ; ebx += APPDATA.size
add edi,0x20 ; edi += TASKDATA.size
mov al, [edi+TASKDATA.state]
test al, al
jz .found ; state == 0
cmp al, 5
jne .loop ; state == 1,2,3,4,9
; state == 5
pushad ; more freedom for [APPDATA.wait_test]
call [ebx+APPDATA.wait_test]
mov [esp+28],eax
popad
or eax,eax
jnz @f
; testing for timeout
mov ecx, [timer_ticks]
sub ecx, [ebx+APPDATA.wait_begin]
cmp ecx, [ebx+APPDATA.wait_timeout]
jb .loop
@@: mov [ebx+APPDATA.wait_param], eax ; retval for wait
mov [edi+TASKDATA.state], 0
.found:
mov [CURRENT_TASK],bh
mov [TASK_BASE],edi
rdtsc ;call _rdtsc
mov [edi+TASKDATA.counter_add],eax ; for next using update_counters
cmp ebx, esi ;esi - previous slot-base
ret
;TODO: Íàäî áû óáðàòü èñïîëüçîâàíèå do_change_task èç V86...
; è ïîñëå ýòîãî ïåðåíåñòè îáðàáîòêó TASKDATA.counter_add/sum â do_change_task
ret align 4
do_change_task:
;param:
; ebx = address of the APPDATA for incoming task (new)
;warning:
; [CURRENT_TASK] and [TASK_BASE] must be changed before (e.g. in find_next_task)
; [current_slot] is the outcoming (old), and set here to a new value (ebx)
;scratched: eax,ecx,esi
mov esi,ebx
xchg esi,[current_slot]
; set new stack after saving old
mov [esi+APPDATA.saved_esp], esp
mov esp, [ebx+APPDATA.saved_esp]
; set new thread io-map
Mov dword [page_tabs+((tss._io_map_0 and -4096) shr 10)],eax,[ebx+APPDATA.io_map]
Mov dword [page_tabs+((tss._io_map_1 and -4096) shr 10)],eax,[ebx+APPDATA.io_map+4]
; set new thread memory-map
mov ecx, APPDATA.dir_table
mov eax, [ebx+ecx] ;offset>0x7F
cmp eax, [esi+ecx] ;offset>0x7F
je @f
mov cr3, eax
@@: ; set tss.esp0
Mov [tss._esp0],eax,[ebx+APPDATA.saved_esp0]
; set gs selector unconditionally
Mov gs,ax,graph_data
; set CR0.TS
cmp bh, byte[fpu_owner] ;bh == incoming task (new)
clts ;clear a task switch flag
je @f
mov eax, cr0 ;and set it again if the owner
or eax, CR0_TS ;of a fpu has changed
mov cr0, eax
@@: ; set context_counter (only for user pleasure ???)
inc [context_counter] ;noname & halyavin
; set debug-registers, if it's necessary
test byte[ebx+APPDATA.dbg_state], 1
jz @f
xor eax, eax
mov dr6, eax
lea esi,[ebx+ecx+APPDATA.dbg_regs-APPDATA.dir_table] ;offset>0x7F
cld
macro lodsReg [reg] {
lodsd
mov reg,eax
} lodsReg dr0, dr1, dr2, dr3, dr7
purge lodsReg
@@: ret
;end.
if 0 if 0
struc TIMER struc TIMER
{ {
.next dd ? .next dd ?
.exp_time dd ? .exp_time dd ?
.func dd ? .func dd ?
.arg dd ? .arg dd ?
} }
MAX_PROIRITY 0 ; highest, used for kernel tasks
MAX_USER_PRIORITY 0 ; highest priority for user processes
USER_PRIORITY 7 ; default (should correspond to nice 0)
MIN_USER_PRIORITY 14 ; minimum priority for user processes
IDLE_PRIORITY 15 ; lowest, only IDLE process goes here
NR_SCHED_QUEUES 16 ; MUST equal IDLE_PRIORYTY + 1
MAX_PROIRITY 0 ; highest, used for kernel tasks
MAX_USER_PRIORITY 0 ; highest priority for user processes
USER_PRIORITY 7 ; default (should correspond to nice 0)
MIN_USER_PRIORITY 14 ; minimum priority for user processes
IDLE_PRIORITY 15 ; lowest, only IDLE process goes here
NR_SCHED_QUEUES 16 ; MUST equal IDLE_PRIORYTY + 1
rdy_head rd 16 rdy_head rd 16
align 4 align 4
pick_task: pick_task:
xor eax, eax xor eax, eax
.pick: .pick:
mov ebx, [rdy_head+eax*4] mov ebx, [rdy_head+eax*4]
test ebx, ebx test ebx, ebx
jz .next jz .next
mov [next_task], ebx
test [ebx+flags.billable]
jz @F
mov [bill_task], ebx
@@:
ret
.next:
inc eax
jmp .pick
mov [next_task], ebx
test [ebx+flags.billable]
jz @F
mov [bill_task], ebx
@@:
ret
.next:
inc eax
jmp .pick
; param ; param
; eax= task ; eax= task
@ -338,51 +246,48 @@ pick_task:
; eax= task ; eax= task
; ebx= queue ; ebx= queue
; ecx= front if 1 or back if 0 ; ecx= front if 1 or back if 0
align 4 align 4
shed: shed:
cmp [eax+.tics_left], 0 ;signed compare cmp [eax+.tics_left], 0 ;signed compare
mov ebx, [eax+.priority] mov ebx, [eax+.priority]
setg ecx setg ecx
jg @F jg @F
mov edx, [eax+.tics_quantum] mov edx, [eax+.tics_quantum]
mov [eax+.ticks_left], edx mov [eax+.ticks_left], edx
cmp ebx, (IDLE_PRIORITY-1) cmp ebx, (IDLE_PRIORITY-1)
je @F je @F
inc ebx inc ebx
@@: @@:
ret ret
; param ; param
; eax= task ; eax= task
align 4 align 4
enqueue: enqueue:
call shed ;eax call shed ;eax
cmp [rdy_head+ebx*4],0 cmp [rdy_head+ebx*4],0
jnz @F jnz @F
mov [rdy_head+ebx*4], eax mov [rdy_head+ebx*4], eax
mov [rdy_tail+ebx*4], eax mov [rdy_tail+ebx*4], eax
mov [eax+.next_ready], 0 mov [eax+.next_ready], 0
jmp .pick jmp .pick
@@: @@:
test ecx, ecx test ecx, ecx
jz .back jz .back
mov ecx, [rdy_head+ebx*4] mov ecx, [rdy_head+ebx*4]
mov [eax+.next_ready], ecx mov [eax+.next_ready], ecx
mov [rdy_head+ebx*4], eax mov [rdy_head+ebx*4], eax
jmp .pick jmp .pick
.back: .back:
mov ecx, [rdy_tail+ebx*4] mov ecx, [rdy_tail+ebx*4]
mov [ecx+.next_ready], eax mov [ecx+.next_ready], eax
mov [rdy_tail+ebx*4], eax mov [rdy_tail+ebx*4], eax
mov [eax+.next_ready], 0 mov [eax+.next_ready], 0
.pick: .pick:
call pick_proc ;select next task call pick_proc ;select next task
ret ret
end if end if

View File

@ -10,33 +10,17 @@ $Revision$
; Old style system call converter ; Old style system call converter
align 16 align 16
cross_order: cross_order:
; load all registers in crossed order ; load all registers in crossed order
mov eax, ebx mov eax, ebx
mov ebx, ecx mov ebx, ecx
mov ecx, edx mov ecx, edx
mov edx, esi mov edx, esi
mov esi, edi mov esi, edi
mov edi, [esp+28 + 4] movzx edi, byte[esp+28 + 4]
and edi,0xff call dword [servetable+edi*4]
call dword [servetable+edi*4] ret
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; SYSTEM CALL ENTRY ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
align 16
i40:
pushad
cld
movzx eax, al
call dword [servetable2 + eax * 4]
popad
iretd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; SYSENTER ENTRY ;; ;; SYSENTER ENTRY ;;
@ -45,28 +29,43 @@ i40:
align 32 align 32
sysenter_entry: sysenter_entry:
; Íàñòðàèâàåì ñòåê ; Íàñòðàèâàåì ñòåê
mov esp, [ss:tss._esp0] mov esp, [ss:tss._esp0]
sti sti
push ebp ; save app esp + 4 push ebp ; save app esp + 4
mov ebp, [ebp] ; ebp - original ebp mov ebp, [ebp] ; ebp - original ebp
;------------------ ;------------------
pushad pushad
cld cld
movzx eax, al movzx eax, al
call dword [servetable2 + eax * 4] call dword [servetable2 + eax * 4]
popad popad
;------------------ ;------------------
xchg ecx, [ss:esp] ; â âåðøèí ñòåêà - app ecx, ecx - app esp + 4 xchg ecx, [ss:esp] ; â âåðøèí ñòåêà - app ecx, ecx - app esp + 4
sub ecx, 4 sub ecx, 4
xchg edx, [ecx] ; edx - return point, & save original edx xchg edx, [ecx] ; edx - return point, & save original edx
push edx push edx
mov edx, [ss:esp + 4] mov edx, [ss:esp + 4]
mov [ecx + 4], edx ; save original ecx mov [ecx + 4], edx ; save original ecx
pop edx pop edx
sysexit sysexit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; SYSTEM CALL ENTRY ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
align 16
i40:
pushad
cld
movzx eax, al
call dword [servetable2 + eax * 4]
popad
iretd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
@ -76,25 +75,26 @@ sysenter_entry:
align 32 align 32
syscall_entry: syscall_entry:
; cli syscall clear IF ; cli syscall clear IF
xchg esp, [ss:tss._esp0] xchg esp, [ss:tss._esp0]
push ecx push ecx
lea ecx, [esp+4] lea ecx, [esp+4]
xchg ecx, [ss:tss._esp0] xchg ecx, [ss:tss._esp0]
sti sti
push ecx push ecx
mov ecx, [ecx] mov ecx, [ecx]
;------------------ ;------------------
pushad pushad
cld cld
movzx eax, al movzx eax, al
call dword [servetable2 + eax * 4] call dword [servetable2 + eax * 4]
popad
;------------------
mov ecx, [ss:esp+4]
pop esp
sysret
popad
;------------------
mov ecx, [ss:esp+4]
pop esp
sysret
iglobal iglobal
;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SYSTEM FUNCTIONS TABLE ;; ;; SYSTEM FUNCTIONS TABLE ;;
@ -133,7 +133,7 @@ iglobal
dd 0 dd 0
dd 0 ; dd 0 ;
dd 0 dd 0
dd sys_current_directory ; 30-Get/SetCurrentDirectory dd sys_current_directory ; 30-Get/SetCurrentDirectory
dd 0 dd 0
dd 0 dd 0
dd 0 dd 0
@ -153,7 +153,7 @@ iglobal
dd display_number ; 47-WriteNum dd display_number ; 47-WriteNum
dd display_settings ; 48-SetRedrawType and SetButtonType dd display_settings ; 48-SetRedrawType and SetButtonType
dd sys_apm ; 49-Advanced Power Management (APM) dd sys_apm ; 49-Advanced Power Management (APM)
dd random_shaped_window ; 50-Window shape & scale dd random_shaped_window ; 50-Window shape & scale
dd syscall_threads ; 51-Threads dd syscall_threads ; 51-Threads
dd stack_driver_stat ; 52-Stack driver status dd stack_driver_stat ; 52-Stack driver status
dd socket ; 53-Socket interface dd socket ; 53-Socket interface
@ -167,7 +167,7 @@ iglobal
dd sys_gs ; 61-Direct graphics access dd sys_gs ; 61-Direct graphics access
dd sys_pci ; 62-PCI functions dd sys_pci ; 62-PCI functions
dd sys_msg_board ; 63-System message board dd sys_msg_board ; 63-System message board
dd sys_resize_app_memory ; 64-Resize application memory usage dd sys_resize_app_memory ; 64-Resize application memory usage
dd syscall_putimage_palette; 65-PutImagePalette dd syscall_putimage_palette; 65-PutImagePalette
dd sys_process_def ; 66-Process definitions - keyboard dd sys_process_def ; 66-Process definitions - keyboard
dd sys_window_move ; 67-Window move or resize dd sys_window_move ; 67-Window move or resize
@ -175,7 +175,6 @@ iglobal
dd sys_debug_services ; 69-Debug dd sys_debug_services ; 69-Debug
dd file_system_lfn ; 70-Common file system interface, version 2 dd file_system_lfn ; 70-Common file system interface, version 2
dd syscall_windowsettings ; 71-Window settings dd syscall_windowsettings ; 71-Window settings
dd sys_sendwindowmsg ; 72-Send window message
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NEW SYSTEM FUNCTIONS TABLE ;; ;; NEW SYSTEM FUNCTIONS TABLE ;;
@ -197,9 +196,9 @@ iglobal
dd sys_getevent ; 11-CheckForEvent dd sys_getevent ; 11-CheckForEvent
dd sys_redrawstat ; 12-BeginDraw and EndDraw dd sys_redrawstat ; 12-BeginDraw and EndDraw
dd syscall_drawrect ; 13-DrawRect dd syscall_drawrect ; 13-DrawRect
dd syscall_getscreensize ; 14-GetScreenSize dd syscall_getscreensize ; 14-GetScreenSize
dd sys_background ; 15-bgr dd sys_background ; 15-bgr
dd sys_cachetodiskette ; 16-FlushFloppyCache dd sys_cachetodiskette ; 16-FlushFloppyCache
dd sys_getbutton ; 17-GetButton dd sys_getbutton ; 17-GetButton
dd sys_system ; 18-System Services dd sys_system ; 18-System Services
dd paleholder ; 19-reserved dd paleholder ; 19-reserved
@ -224,7 +223,7 @@ iglobal
dd syscall_drawline ; 38-DrawLine dd syscall_drawline ; 38-DrawLine
dd cross_order ; 39-GetBackgroundSize,ReadBgrData,. dd cross_order ; 39-GetBackgroundSize,ReadBgrData,.
dd set_app_param ; 40-WantEvents dd set_app_param ; 40-WantEvents
dd syscall_getirqowner ; 41-GetIrqOwner dd syscall_getirqowner ; 41-GetIrqOwner
dd get_irq_data ; 42-ReadIrqData dd get_irq_data ; 42-ReadIrqData
dd cross_order ; 43-SendDeviceData dd cross_order ; 43-SendDeviceData
dd sys_programirq ; 44-ProgramIrqs dd sys_programirq ; 44-ProgramIrqs
@ -255,8 +254,8 @@ iglobal
dd cross_order ; 69-Debug dd cross_order ; 69-Debug
dd cross_order ; 70-Common file system interface, version 2 dd cross_order ; 70-Common file system interface, version 2
dd cross_order ; 71-Window settings dd cross_order ; 71-Window settings
dd cross_order ; 72-Send window message dd sys_sendwindowmsg ; 72-Send window message
times 255 - ( ($-servetable2) /4 ) dd undefined_syscall times 255 - ( ($-servetable2) /4 ) dd undefined_syscall
dd sys_end ; -1-end application dd sys_end ; -1-end application
endg endg

View File

@ -945,12 +945,12 @@ v86_irq2:
mov cx, [eax*4+2] mov cx, [eax*4+2]
mov word [esi-v86_regs.size+v86_regs.cs], cx mov word [esi-v86_regs.size+v86_regs.cs], cx
and byte [esi-v86_regs.size+v86_regs.eflags+1], not 3 and byte [esi-v86_regs.size+v86_regs.eflags+1], not 3
push ebx ; push ebx
call update_counters call update_counters
pop ebx ; pop ebx
sub ebx, SLOT_BASE ; sub ebx, SLOT_BASE
shr ebx, 8 ; shr ebx, 8
mov esi, [CURRENT_TASK] ; mov esi, [CURRENT_TASK]
call do_change_task call do_change_task
popad popad
iretd iretd

View File

@ -48,28 +48,28 @@ keymap_alt:
boot_memdetect db 'Determining amount of memory',0 boot_memdetect db 'Determining amount of memory',0
boot_fonts db 'Fonts loaded',0 boot_fonts db 'Fonts loaded',0
boot_tss db 'Setting TSSs',0 boot_tss db 'Setting TSSs',0
boot_cpuid db 'Reading CPUIDs',0 boot_cpuid db 'Reading CPUIDs',0
boot_devices db 'Detecting devices',0 boot_devices db 'Detecting devices',0
boot_timer db 'Setting timer',0 boot_timer db 'Setting timer',0
boot_irqs db 'Reprogramming IRQs',0 boot_irqs db 'Reprogramming IRQs',0
boot_setmouse db 'Setting mouse',0 boot_setmouse db 'Setting mouse',0
boot_windefs db 'Setting window defaults',0 boot_windefs db 'Setting window defaults',0
boot_bgr db 'Calculating background',0 boot_bgr db 'Calculating background',0
boot_resirqports db 'Reserving IRQs & ports',0 boot_resirqports db 'Reserving IRQs & ports',0
boot_setrports db 'Setting addresses for IRQs',0 boot_setrports db 'Setting addresses for IRQs',0
boot_setostask db 'Setting OS task',0 boot_setostask db 'Setting OS task',0
boot_allirqs db 'Unmasking all IRQs',0 boot_allirqs db 'Unmasking all IRQs',0
boot_tsc db 'Reading TSC',0 boot_tsc db 'Reading TSC',0
boot_cpufreq db 'CPU frequency is ',' ',' MHz',0 boot_cpufreq db 'CPU frequency is ',' ',' MHz',0
boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0 boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0
boot_pal_vga db 'Setting VGA 640x480 palette',0 boot_pal_vga db 'Setting VGA 640x480 palette',0
boot_failed db 'Failed to start first app',0 boot_failed db 'Failed to start first app',0
boot_mtrr db 'Setting MTRR',0 boot_mtrr db 'Setting MTRR',0
if preboot_blogesc if preboot_blogesc
boot_tasking db 'All set - press ESC to start',0 boot_tasking db 'All set - press ESC to start',0
end if end if
;new_process_loading db 'K : New Process - loading',13,10,0 ;new_process_loading db 'K : New Process - loading',13,10,0
@ -80,7 +80,7 @@ msg_unresolved db 'unresolved ',0
msg_module db 'in module ',0 msg_module db 'in module ',0
msg_version db 'incompatible driver version',13,10,0 msg_version db 'incompatible driver version',13,10,0
msg_www db 'please visit www.kolibrios.org',13,10,0 msg_www db 'please visit www.kolibrios.org',13,10,0
msg_CR db 13,10,0 msg_CR db 13,10,0
aSis db 'SIS',0 aSis db 'SIS',0
intel_str db "GenuineIntel",0 intel_str db "GenuineIntel",0
@ -88,11 +88,11 @@ AMD_str db "AuthenticAMD",0
;szSound db 'SOUND',0 ;szSound db 'SOUND',0
;szInfinity db 'INFINITY',0 ;szInfinity db 'INFINITY',0
szHwMouse db 'ATI2D',0 szHwMouse db 'ATI2D',0
szPS2MDriver db 'PS2MOUSE',0 szPS2MDriver db 'PS2MOUSE',0
szCOM_MDriver db 'COM_MOUSE',0 szCOM_MDriver db 'COM_MOUSE',0
szUSB db 'USB',0 szUSB db 'USB',0
szAtiHW db '/rd/1/drivers/ati2d.drv',0 szAtiHW db '/rd/1/drivers/ati2d.drv',0
szSTART db 'START',0 szSTART db 'START',0
szEXPORTS db 'EXPORTS',0 szEXPORTS db 'EXPORTS',0
@ -103,13 +103,13 @@ szIMPORTS db 'IMPORTS',0
read_firstapp db '/sys/' read_firstapp db '/sys/'
firstapp db 'LAUNCHER',0 firstapp db 'LAUNCHER',0
char db '/sys/FONTS/CHAR.MT',0 char db '/sys/FONTS/CHAR.MT',0
char2 db '/sys/FONTS/CHAR2.MT',0 char2 db '/sys/FONTS/CHAR2.MT',0
bootpath db '/KOLIBRI ' bootpath db '/KOLIBRI '
bootpath2 db 0 bootpath2 db 0
vmode db '/sys/drivers/VMODE.MDR',0 vmode db '/sys/drivers/VMODE.MDR',0
vrr_m db 'VRR_M',0 vrr_m db 'VRR_M',0
kernel_file db 'KERNEL MNT' kernel_file db 'KERNEL MNT'
@ -145,14 +145,14 @@ mode_320_240_8:
; mike.dld { ; mike.dld {
db 0 db 0
dd servetable-0x10000 dd servetable-0x10000
draw_line dd __sys_draw_line draw_line dd __sys_draw_line
disable_mouse dd __sys_disable_mouse disable_mouse dd __sys_disable_mouse
draw_pointer dd __sys_draw_pointer draw_pointer dd __sys_draw_pointer
;//mike.dld, 2006-08-02 [ ;//mike.dld, 2006-08-02 [
;drawbar dd __sys_drawbar ;drawbar dd __sys_drawbar
drawbar dd __sys_drawbar.forced drawbar dd __sys_drawbar.forced
;//mike.dld, 2006-08-02 ] ;//mike.dld, 2006-08-02 ]
putpixel dd __sys_putpixel putpixel dd __sys_putpixel
; } mike.dld ; } mike.dld
@ -160,10 +160,10 @@ align 4
keyboard dd 1 keyboard dd 1
syslang dd 1 syslang dd 1
boot_y dd 10 boot_y dd 10
pci_bios_entry dd 0 pci_bios_entry dd 0
dw pci_code_sel dw pci_code_sel
if __DEBUG__ eq 1 if __DEBUG__ eq 1
include_debug_strings include_debug_strings
@ -174,136 +174,135 @@ IncludeIGlobals
align 16 align 16
gdts: gdts:
dw gdte-$-1 dw gdte-$-1
dd gdts dd gdts
dw 0 dw 0
; Attention! Do not change the order of the first four selectors. They are used in Fast System Call ; Attention! Do not change the order of the first four selectors. They are used in Fast System Call
; must be : os_code, os_data, app_code, app_data, .... ; must be : os_code, os_data, app_code, app_data, ....
int_code_l: int_code_l:
os_code_l: os_code_l:
dw 0xffff dw 0xffff
dw 0x0000 dw 0x0000
db 0x00 db 0x00
dw 11011111b *256 +10011010b dw 11011111b *256 +10011010b
db 0x00 db 0x00
int_data_l: int_data_l:
os_data_l: os_data_l:
dw 0xffff dw 0xffff
dw 0x0000 dw 0x0000
db 0x00 db 0x00
dw 11011111b *256 +10010010b dw 11011111b *256 +10010010b
db 0x00 db 0x00
app_code_l: app_code_l:
dw 0xFFFF dw 0xFFFF
dw 0 dw 0
db 0 db 0
db cpl3 db cpl3
dw G32+D32+(new_app_base shr 16)+0xF; dw G32+D32+(new_app_base shr 16)+0xF;
app_data_l: app_data_l:
dw 0xFFFF dw 0xFFFF
dw 0 dw 0
db 0 db 0
db drw3 db drw3
dw G32+D32+(new_app_base shr 16)+0xF; dw G32+D32+(new_app_base shr 16)+0xF;
; ------------- PCI BIOS ------------------ ; ------------- PCI BIOS ------------------
pci_code_32: pci_code_32:
dw 0 ;lim 0-15 dw 0 ;lim 0-15
dw 0 ;base 0-15 dw 0 ;base 0-15
db 0 ;base 16-23 db 0 ;base 16-23
db cpl0 ;type db cpl0 ;type
db D32 ;lim 16-19+props db D32 ;lim 16-19+props
db 0 ;base 24-31 db 0 ;base 24-31
pci_data_32: pci_data_32:
dw 0 ;lim 0-15 dw 0 ;lim 0-15
dw 0 ;base 0-15 dw 0 ;base 0-15
db 0 ;base 16-23 db 0 ;base 16-23
db dpl0 ;type db dpl0 ;type
db D32 ;lim 16-19+props db D32 ;lim 16-19+props
db 0 ;base 24-31 db 0 ;base 24-31
; --------------- APM --------------------- ; --------------- APM ---------------------
apm_code_32: apm_code_32:
dw 0x0f ; limit 64kb dw 0x0f ; limit 64kb
db 0, 0, 0 db 0, 0, 0
dw 11010000b *256 +10011010b dw 11010000b *256 +10011010b
db 0x00 db 0x00
apm_code_16: apm_code_16:
dw 0x0f dw 0x0f
db 0, 0, 0 db 0, 0, 0
dw 10010000b *256 +10011010b dw 10010000b *256 +10011010b
db 0x00 db 0x00
apm_data_16: apm_data_16:
dw 0x0f dw 0x0f
db 0, 0, 0 db 0, 0, 0
dw 10010000b *256 +10010010b dw 10010000b *256 +10010010b
db 0x00 db 0x00
; ----------------------------------------- ; -----------------------------------------
graph_data_l: graph_data_l:
dw 0x7ff dw 0x7ff
dw 0x0000 dw 0x0000
db 0x00 db 0x00
dw 11010000b *256 +11110010b dw 11010000b *256 +11110010b
db 0x00 db 0x00
tss0_l: tss0_l:
dw TSS_SIZE-1 dw TSS_SIZE-1
dw tss and 0xFFFF dw tss and 0xFFFF
db (tss shr 16) and 0xFF db (tss shr 16) and 0xFF
db 10001001b db 10001001b
dw (tss shr 16) and 0xFF00 dw (tss shr 16) and 0xFF00
endofcode: endofcode:
gdte: gdte:
align 16 align 16
cur_saved_data rb 4096 cur_saved_data rb 4096
fpu_data: rb 512 fpu_data: rb 512
; device irq owners ; device irq owners
irq_owner rd 16 ; process id irq_owner rd 16 ; process id
; on irq read ports ; on irq read ports
irq00read rd 16 irq00read rd 16
irq01read rd 16 irq01read rd 16
irq02read rd 16 irq02read rd 16
irq03read rd 16 irq03read rd 16
irq04read rd 16 irq04read rd 16
irq05read rd 16 irq05read rd 16
irq06read rd 16 irq06read rd 16
irq07read rd 16 irq07read rd 16
irq08read rd 16 irq08read rd 16
irq09read rd 16 irq09read rd 16
irq10read rd 16 irq10read rd 16
irq11read rd 16 irq11read rd 16
irq12read rd 16 irq12read rd 16
irq13read rd 16 irq13read rd 16
irq14read rd 16 irq14read rd 16
irq15read rd 16 irq15read rd 16
irq_tab rd 16 irq_tab rd 16
mem_block_map rb 512 mem_block_map rb 512
event_map rb 64 mem_block_list rd 64
mem_block_list rd 64
large_block_list rd 31 large_block_list rd 31
mem_block_mask rd 2 mem_block_mask rd 2
large_block_mask rd 1 large_block_mask rd 1
mem_used.fd rd 1 mem_used.fd rd 1
mem_used.bk rd 1 mem_used.bk rd 1
mem_block_arr rd 1 mem_block_arr rd 1
mem_block_start rd 1 mem_block_start rd 1
mem_block_end rd 1 mem_block_end rd 1
heap_mutex rd 1 heap_mutex rd 1
heap_size rd 1 heap_size rd 1
@ -315,143 +314,139 @@ mst MEM_STATE
page_start rd 1 page_start rd 1
page_end rd 1 page_end rd 1
events rd 1 sys_page_map rd 1
event_start rd 1 os_stack_seg rd 1
event_end rd 1
event_uid rd 1
sys_page_map rd 1
os_stack_seg rd 1
srv.fd rd 1 srv.fd rd 1
srv.bk rd 1 srv.bk rd 1
scr_width rd 1 scr_width rd 1
scr_height rd 1 scr_height rd 1
create_cursor rd 1 create_cursor rd 1
select_hw_cursor rd 1 select_hw_cursor rd 1
set_hw_cursor rd 1 set_hw_cursor rd 1
hw_restore rd 1 hw_restore rd 1
def_cursor rd 1 def_cursor rd 1
current_cursor rd 1 current_cursor rd 1
hw_cursor rd 1 hw_cursor rd 1
cur_def_interl rd 1 cur_def_interl rd 1
cur_saved_base rd 1 cur_saved_base rd 1
cur_saved_interl rd 1 cur_saved_interl rd 1
cur_saved_w rd 1 cur_saved_w rd 1
cur_saved_h rd 1 cur_saved_h rd 1
ipc_tmp rd 1 ipc_tmp rd 1
ipc_pdir rd 1 ipc_pdir rd 1
ipc_ptab rd 1 ipc_ptab rd 1
proc_mem_map rd 1 proc_mem_map rd 1
proc_mem_pdir rd 1 proc_mem_pdir rd 1
proc_mem_tab rd 1 proc_mem_tab rd 1
tmp_task_pdir rd 1 tmp_task_pdir rd 1
tmp_task_ptab rd 1 tmp_task_ptab rd 1
default_io_map rd 1 default_io_map rd 1
LFBSize rd 1 LFBSize rd 1
stall_mcs rd 1 stall_mcs rd 1
current_slot rd 1 current_slot rd 1
; status ; status
hd1_status rd 1 ; 0 - free : other - pid hd1_status rd 1 ; 0 - free : other - pid
application_table_status rd 1 ; 0 - free : other - pid application_table_status rd 1 ; 0 - free : other - pid
; device addresses ; device addresses
mididp rd 1 mididp rd 1
midisp rd 1 midisp rd 1
cdbase rd 1 cdbase rd 1
cdid rd 1 cdid rd 1
hdbase rd 1 ; for boot 0x1f0 hdbase rd 1 ; for boot 0x1f0
hdid rd 1 hdid rd 1
hdpos rd 1 ; for boot 0x1 hdpos rd 1 ; for boot 0x1
fat32part rd 1 ; for boot 0x1 fat32part rd 1 ; for boot 0x1
cdpos rd 1 cdpos rd 1
;CPUID information ;CPUID information
cpu_vendor rd 3 cpu_vendor rd 3
cpu_sign rd 1 cpu_sign rd 1
cpu_info rd 1 cpu_info rd 1
cpu_caps rd 4 cpu_caps rd 4
pg_data PG_DATA pg_data PG_DATA
heap_test rd 1 heap_test rd 1
buttontype rd 1 buttontype rd 1
windowtypechanged rd 1 windowtypechanged rd 1
hd_entries rd 1 ;unused ? 0xfe10 hd_entries rd 1 ;unused ? 0xfe10
;* start code - Mario79 ;* start code - Mario79
mouse_active rd 1 mouse_active rd 1
mouse_pause rd 1 mouse_pause rd 1
MouseTickCounter rd 1 MouseTickCounter rd 1
;* end code - Mario79 ;* end code - Mario79
img_background rd 1 img_background rd 1
mem_BACKGROUND rd 1 mem_BACKGROUND rd 1
wraw_bacground_select rb 1 wraw_bacground_select rb 1
cache_ide0: cache_ide0:
cache_ide0_pointer rd 1 cache_ide0_pointer rd 1
cache_ide0_size rd 1 ; not use cache_ide0_size rd 1 ; not use
cache_ide0_data_pointer rd 1 cache_ide0_data_pointer rd 1
cache_ide0_system_data_size rd 1 ; not use cache_ide0_system_data_size rd 1 ; not use
cache_ide0_appl_data_size rd 1 ; not use cache_ide0_appl_data_size rd 1 ; not use
cache_ide0_system_data rd 1 cache_ide0_system_data rd 1
cache_ide0_appl_data rd 1 cache_ide0_appl_data rd 1
cache_ide0_system_sad_size rd 1 cache_ide0_system_sad_size rd 1
cache_ide0_appl_sad_size rd 1 cache_ide0_appl_sad_size rd 1
cache_ide0_search_start rd 1 cache_ide0_search_start rd 1
cache_ide0_appl_search_start rd 1 cache_ide0_appl_search_start rd 1
cache_ide1: cache_ide1:
cache_ide1_pointer rd 1 cache_ide1_pointer rd 1
cache_ide1_size rd 1 ; not use cache_ide1_size rd 1 ; not use
cache_ide1_data_pointer rd 1 cache_ide1_data_pointer rd 1
cache_ide1_system_data_size rd 1 ; not use cache_ide1_system_data_size rd 1 ; not use
cache_ide1_appl_data_size rd 1 ; not use cache_ide1_appl_data_size rd 1 ; not use
cache_ide1_system_data rd 1 cache_ide1_system_data rd 1
cache_ide1_appl_data rd 1 cache_ide1_appl_data rd 1
cache_ide1_system_sad_size rd 1 cache_ide1_system_sad_size rd 1
cache_ide1_appl_sad_size rd 1 cache_ide1_appl_sad_size rd 1
cache_ide1_search_start rd 1 cache_ide1_search_start rd 1
cache_ide1_appl_search_start rd 1 cache_ide1_appl_search_start rd 1
cache_ide2: cache_ide2:
cache_ide2_pointer rd 1 cache_ide2_pointer rd 1
cache_ide2_size rd 1 ; not use cache_ide2_size rd 1 ; not use
cache_ide2_data_pointer rd 1 cache_ide2_data_pointer rd 1
cache_ide2_system_data_size rd 1 ; not use cache_ide2_system_data_size rd 1 ; not use
cache_ide2_appl_data_size rd 1 ; not use cache_ide2_appl_data_size rd 1 ; not use
cache_ide2_system_data rd 1 cache_ide2_system_data rd 1
cache_ide2_appl_data rd 1 cache_ide2_appl_data rd 1
cache_ide2_system_sad_size rd 1 cache_ide2_system_sad_size rd 1
cache_ide2_appl_sad_size rd 1 cache_ide2_appl_sad_size rd 1
cache_ide2_search_start rd 1 cache_ide2_search_start rd 1
cache_ide2_appl_search_start rd 1 cache_ide2_appl_search_start rd 1
cache_ide3: cache_ide3:
cache_ide3_pointer rd 1 cache_ide3_pointer rd 1
cache_ide3_size rd 1 ; not use cache_ide3_size rd 1 ; not use
cache_ide3_data_pointer rd 1 cache_ide3_data_pointer rd 1
cache_ide3_system_data_size rd 1 ; not use cache_ide3_system_data_size rd 1 ; not use
cache_ide3_appl_data_size rd 1 ; not use cache_ide3_appl_data_size rd 1 ; not use
cache_ide3_system_data rd 1 cache_ide3_system_data rd 1
cache_ide3_appl_data rd 1 cache_ide3_appl_data rd 1
cache_ide3_system_sad_size rd 1 cache_ide3_system_sad_size rd 1
cache_ide3_appl_sad_size rd 1 cache_ide3_appl_sad_size rd 1
cache_ide3_search_start rd 1 cache_ide3_search_start rd 1
@ -463,12 +458,11 @@ cd_appl_data rb 1 ; 0 = system cache, 1 - application cache
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
timer_ticks_enable rb 1 ; for cd driver timer_ticks_enable rb 1 ; for cd driver
NumBiosDisks rd 1 NumBiosDisks rd 1
BiosDisksData rb 200h BiosDisksData rb 200h
BiosDiskCaches rb 80h*(cache_ide1-cache_ide0) BiosDiskCaches rb 80h*(cache_ide1-cache_ide0)
BiosDiskPartitions rd 80h BiosDiskPartitions rd 80h
IncludeUGlobals IncludeUGlobals

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -74,7 +74,7 @@ WSTATE_MAXIMIZED = 00000001b
WSTATE_MINIMIZED = 00000010b WSTATE_MINIMIZED = 00000010b
WSTATE_ROLLEDUP = 00000100b WSTATE_ROLLEDUP = 00000100b
WSTATE_REDRAW = 00000001b WSTATE_REDRAW = 00000001b
WSTATE_WNDDRAWN = 00000010b WSTATE_WNDDRAWN = 00000010b
WSTYLE_HASCAPTION = 00010000b WSTYLE_HASCAPTION = 00010000b
@ -83,13 +83,13 @@ WSTYLE_CLIENTRELATIVE = 00100000b
struc TASKDATA struc TASKDATA
{ {
.event_mask dd ? .event_mask dd ?
.pid dd ? .pid dd ?
dw ? dw ?
.state db ? .state db ?
db ? db ?
dw ? dw ?
.wnd_number db ? .wnd_number db ?
db ? db ?
.mem_start dd ? .mem_start dd ?
.counter_sum dd ? .counter_sum dd ?
.counter_add dd ? .counter_add dd ?
@ -101,14 +101,14 @@ end virtual
; structures definition ; structures definition
struc WDATA { struc WDATA {
.box BOX .box BOX
.cl_workarea dd ? .cl_workarea dd ?
.cl_titlebar dd ? .cl_titlebar dd ?
.cl_frames dd ? .cl_frames dd ?
.reserved db ? .reserved db ?
.fl_wstate db ? .fl_wstate db ?
.fl_wdrawn db ? .fl_wdrawn db ?
.fl_redraw db ? .fl_redraw db ?
} }
virtual at 0 virtual at 0
WDATA WDATA WDATA WDATA
@ -117,11 +117,11 @@ label WDATA.fl_wstyle byte at 0x13
struc APPDATA struc APPDATA
{ {
.app_name db 11 dup(?) .app_name db 11 dup(?)
db 5 dup(?) db 5 dup(?)
.fpu_state dd ? ;+16 .fpu_state dd ? ;+16
.ev_count dd ? ;+20 .ev_count_ dd ? ;unused ;+20
.fpu_handler dd ? ;+24 .fpu_handler dd ? ;+24
.sse_handler dd ? ;+28 .sse_handler dd ? ;+28
.pl0_stack dd ? ;unused ;+32 .pl0_stack dd ? ;unused ;+32
@ -138,22 +138,24 @@ struc APPDATA
.cur_dir dd ? ;+80 .cur_dir dd ? ;+80
.wait_timeout dd ? ;+84 .wait_timeout dd ? ;+84
.saved_esp0 dd ? ;+88 .saved_esp0 dd ? ;+88
.wait_begin dd ? ;+92 +++
db 36 dup(?) ;+92 .wait_test dd ? ;+96 +++
.wait_param dd ? ;+100 +++
db 24 dup(?) ;+104
.wnd_shape dd ? ;+128 .wnd_shape dd ? ;+128
.wnd_shape_scale dd ? ;+132 .wnd_shape_scale dd ? ;+132
dd ? ;+136 dd ? ;+136
.mem_size dd ? ;+140 .mem_size dd ? ;+140
.saved_box BOX .saved_box BOX
.ipc_start dd ? .ipc_start dd ?
.ipc_size dd ? .ipc_size dd ?
.event_mask dd ? .event_mask dd ?
.debugger_slot dd ? .debugger_slot dd ?
dd ? dd ?
.keyboard_mode db ? .keyboard_mode db ?
db 3 dup(?) db 3 dup(?)
.dir_table dd ? .dir_table dd ?
.dbg_event_mem dd ? .dbg_event_mem dd ?
.dbg_regs: .dbg_regs:
.dbg_regs.dr0 dd ? .dbg_regs.dr0 dd ?
@ -161,7 +163,7 @@ struc APPDATA
.dbg_regs.dr2 dd ? .dbg_regs.dr2 dd ?
.dbg_regs.dr3 dd ? .dbg_regs.dr3 dd ?
.dbg_regs.dr7 dd ? .dbg_regs.dr7 dd ?
.wnd_caption dd ? .wnd_caption dd ?
.wnd_clientbox BOX .wnd_clientbox BOX
} }
virtual at 0 virtual at 0

View File

@ -98,3 +98,9 @@ if ~ f eq
end if end if
} }
; \end{diamond}[29.09.2006] ; \end{diamond}[29.09.2006]
macro Mov op1,op2,op3 ; op1 = op2 = op3
{
mov op2,op3
mov op1,op2
}