Sync net branch with trunk

git-svn-id: svn://kolibrios.org@2385 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr 2012-02-23 19:01:26 +00:00
parent e7bade16fe
commit 33ab203c14
16 changed files with 1109 additions and 1282 deletions

View File

@ -891,8 +891,8 @@ bd_write_cache_chain:
jmp hd_write_error jmp hd_write_error
uglobal uglobal
int13_regs_in rb v86_regs.size int13_regs_in rb sizeof.v86_regs
int13_regs_out rb v86_regs.size int13_regs_out rb sizeof.v86_regs
endg endg
int13_call: int13_call:
@ -907,7 +907,7 @@ int13_call:
push ebx ecx esi edi push ebx ecx esi edi
mov ebx, int13_regs_in mov ebx, int13_regs_in
mov edi, ebx mov edi, ebx
mov ecx, v86_regs.size/4 mov ecx, sizeof.v86_regs/4
xor eax, eax xor eax, eax
rep stosd rep stosd
mov byte [ebx+v86_regs.eax+1], dl mov byte [ebx+v86_regs.eax+1], dl

View File

@ -179,8 +179,6 @@ struct TSS
_io_map_1 rb 4096 _io_map_1 rb 4096
ends ends
TSS_SIZE equ (128+8192)
OS_BASE equ 0x80000000 OS_BASE equ 0x80000000
window_data equ (OS_BASE+0x0001000) window_data equ (OS_BASE+0x0001000)
@ -397,381 +395,256 @@ EVENT_EXTENDED equ 0x00000200
EV_INTR equ 1 EV_INTR equ 1
struc THR_DATA struct THR_DATA
{
rb (8192-512) rb (8192-512)
.pl0_stack: ; pl0_stack
.fpu_state rb 512 fpu_state rb 512
.tls_page rb 4096 tls_page rb 4096
.pdbr rb 4096 pdbr rb 4096
} ends
THR_DATA_SIZE equ 4096*4 virtual at (OS_BASE-sizeof.THR_DATA)
virtual at (OS_BASE-THR_DATA_SIZE)
thr_data THR_DATA thr_data THR_DATA
end virtual end virtual
struc SYS_VARS struct SYS_VARS
{ .bpp dd ? bpp dd ?
.scanline dd ? scanline dd ?
.vesa_mode dd ? vesa_mode dd ?
.x_res dd ? x_res dd ?
.y_res dd ? y_res dd ?
} ends
struc APPOBJ ;common object header struct APPOBJ ; common object header
{ magic dd ? ;
.magic dd ? ; destroy dd ? ; internal destructor
.destroy dd ? ;internal destructor fd dd ? ; next object in list
.fd dd ? ;next object in list bk dd ? ; prev object in list
.bk dd ? ;prev object in list pid dd ? ; owner id
.pid dd ? ;owner id ends
};
virtual at 0
APPOBJ APPOBJ
end virtual
APP_OBJ_OFFSET equ 48 APP_OBJ_OFFSET equ 48
APP_EV_OFFSET equ 40 APP_EV_OFFSET equ 40
struc CURSOR struct CURSOR APPOBJ
{ base dd ? ;allocated memory
;common object header hot_x dd ? ;hotspot coords
.magic dd ? ;'CURS' hot_y dd ?
.destroy dd ? ;internal destructor
.fd dd ? ;next object in list
.bk dd ? ;prev object in list
.pid dd ? ;owner id
;cursor data list_next dd ? ;next cursor in cursor list
.base dd ? ;allocated memory list_prev dd ? ;prev cursor in cursor list
.hot_x dd ? ;hotspot coords dev_obj dd ? ;device depended data
.hot_y dd ? ends
.list_next dd ? ;next cursor in cursor list
.list_prev dd ? ;prev cursor in cursor list
.dev_obj dd ? ;device depended data
.sizeof:
}
virtual at 0
CURSOR CURSOR
end virtual
struc EVENT struct EVENT APPOBJ
{ id dd ? ;event uid
.magic dd ? ;'EVNT' state dd ? ;internal flags
.destroy dd ? ;internal destructor code dd ?
.fd dd ? ;next object in list
.bk dd ? ;prev object in list
.pid dd ? ;owner id
.id dd ? ;event uid
.state dd ? ;internal flags
.code dd ?
rd 5 rd 5
.size = $ - .magic ends
.codesize = $ - .code
}
virtual at 0
EVENT EVENT
end virtual
struc SMEM struct SMEM
{ bk dd ?
.bk dd ? fd dd ? ;+4
.fd dd ? ;+4 base dd ? ;+8
.base dd ? ;+8 size dd ? ;+12
.size dd ? ;+12 access dd ? ;+16
.access dd ? ;+16 refcount dd ? ;+20
.refcount dd ? ;+20 name rb 32 ;+24
.name rb 32 ;+24 ends
.sizeof:
}
struc SMAP struct SMAP APPOBJ
{ base dd ? ;mapped base
.magic dd ? ; SMAP parent dd ? ;SMEM
.destroy dd ? ;internal destructor ends
.fd dd ? ;next object in list
.bk dd ? ;prev object in list
.pid dd ? ;owner id
.base dd ? ;mapped base struct DLLDESCR
.parent dd ? ;SMEM bk dd ?
.sizeof: fd dd ? ;+4
} data dd ? ;+8
size dd ? ;+12
timestamp dq ?
refcount dd ?
defaultbase dd ?
coff_hdr dd ?
symbols_ptr dd ?
symbols_num dd ?
symbols_lim dd ?
exports dd ? ;export table
name rb 260
ends
virtual at 0 struct HDLL
SMEM SMEM fd dd ? ;next object in list
end virtual bk dd ? ;prev object in list
pid dd ? ;owner id
virtual at 0 base dd ? ;mapped base
SMAP SMAP size dd ? ;mapped size
end virtual refcount dd ? ;reference counter for this process and this lib
parent dd ? ;DLLDESCR
ends
struc DLLDESCR struct display_t
{ x dd ?
.bk dd ? y dd ?
.fd dd ? ;+4 width dd ?
.data dd ? ;+8 height dd ?
.size dd ? ;+12 bpp dd ?
.timestamp dq ? vrefresh dd ?
.refcount dd ? pitch dd ?
.defaultbase dd ? lfb dd ?
.coff_hdr dd ?
.symbols_ptr dd ?
.symbols_num dd ?
.symbols_lim dd ?
.exports dd ? ;export table
.name:
.sizeof:
}
struc HDLL modes dd ?
{ ddev dd ?
.fd dd ? ;next object in list connector dd ?
.bk dd ? ;prev object in list crtc dd ?
.pid dd ? ;owner id
.base dd ? ;mapped base cr_list.next dd ?
.size dd ? ;mapped size cr_list.prev dd ?
.refcount dd ? ;reference counter for this process and this lib
.parent dd ? ;DLLDESCR
.sizeof:
}
virtual at 0 cursor dd ?
DLLDESCR DLLDESCR
end virtual
virtual at 0 init_cursor dd ?
HDLL HDLL select_cursor dd ?
end virtual show_cursor dd ?
move_cursor dd ?
restore_cursor dd ?
disable_mouse dd ?
ends
struc display_t struct BOOT_DATA
{ bpp dd ?
.x dd ? scanline dd ?
.y dd ? vesa_mode dd ?
.width dd ? x_res dd ?
.height dd ? y_res dd ?
.bpp dd ? mouse_port dd ?
.vrefresh dd ? bank_switch dd ?
.pitch dd ? lfb dd ?
.lfb dd ? vesa_mem dd ?
log dd ?
direct_lfb dd ?
pci_data dd ?
dd ?
vrr dd ?
ide_base dd ?
mem_amount dd ?
pages_count dd ?
pagemap_size dd ?
kernel_max dd ?
kernel_pages dd ?
kernel_tables dd ?
.modes dd ? cpu_vendor dd ?
.ddev dd ?
.connector dd ?
.crtc dd ?
.cr_list.next dd ?
.cr_list.prev dd ?
.cursor dd ?
.init_cursor dd ?
.select_cursor dd ?
.show_cursor dd ?
.move_cursor dd ?
.restore_cursor dd ?
.disable_mouse dd ?
}
virtual at 0
display_t display_t
end virtual
struc BOOT_DATA
{ .bpp dd ?
.scanline dd ?
.vesa_mode dd ?
.x_res dd ?
.y_res dd ?
.mouse_port dd ?
.bank_switch dd ?
.lfb dd ?
.vesa_mem dd ?
.log dd ?
.direct_lfb dd ?
.pci_data dd ?
; dd ?
.vrr dd ?
.ide_base dd ?
.mem_amount dd ?
.pages_count dd ?
.pagemap_size dd ?
.kernel_max dd ?
.kernel_pages dd ?
.kernel_tables dd ?
.cpu_vendor dd ?
dd ? dd ?
dd ? dd ?
.cpu_sign dd ? cpu_sign dd ?
.cpu_info dd ? cpu_info dd ?
.cpu_caps dd ? cpu_caps dd ?
dd ? dd ?
dd ? dd ?
} ends
virtual at 0 struct LHEAD
BOOT_DATA BOOT_DATA next dd ? ;next object in list
end virtual prev dd ? ;prev object in list
ends
struc MEM_STATE struct MUTEX
{ .mutex MUTEX lhead LHEAD
.smallmap rd 1 count dd ?
.treemap rd 1 ends
.topsize rd 1
.top rd 1
.smallbins rd 4*32
.treebins rd 32
}
struc PG_DATA struct MEM_STATE
{ .mem_amount dd ? mutex MUTEX
.vesa_mem dd ? smallmap dd ?
.pages_count dd ? treemap dd ?
.pages_free dd ? topsize dd ?
.pages_faults dd ? top dd ?
.pagemap_size dd ? smallbins rd 4*32
.kernel_pages dd ? treebins rd 32
.kernel_tables dd ? ends
.sys_page_dir dd ?
.mutex MUTEX
}
;struc LIB struct PG_DATA
;{ .lib_name rb 16 mem_amount dd ?
; .lib_base dd ? vesa_mem dd ?
; .lib_start dd ? pages_count dd ?
; .export dd ? pages_free dd ?
; .import dd ? pages_faults dd ?
;} pagemap_size dd ?
kernel_pages dd ?
kernel_tables dd ?
sys_page_dir dd ?
mutex MUTEX
ends
struc SRV struct SRV
{ srv_name rb 16 ;ASCIIZ string
.srv_name rb 16 ;ASCIIZ string magic dd ? ;+0x10 ;'SRV '
.magic dd ? ;+0x10 ;'SRV ' size dd ? ;+0x14 ;size of structure SRV
.size dd ? ;+0x14 ;size of structure SRV fd dd ? ;+0x18 ;next SRV descriptor
.fd dd ? ;+0x18 ;next SRV descriptor bk dd ? ;+0x1C ;prev SRV descriptor
.bk dd ? ;+0x1C ;prev SRV descriptor base dd ? ;+0x20 ;service base address
.base dd ? ;+0x20 ;service base address entry dd ? ;+0x24 ;service START function
.entry dd ? ;+0x24 ;service START function srv_proc dd ? ;+0x28 ;user mode service handler
.srv_proc dd ? ;+0x28 ;user mode service handler srv_proc_ex dd ? ;+0x2C ;kernel mode service handler
.srv_proc_ex dd ? ;+0x2C ;kernel mode service handler ends
.sizeof:
}
SRV_FD_OFFSET equ 0x18
DRV_ENTRY equ 1 DRV_ENTRY equ 1
DRV_EXIT equ -1 DRV_EXIT equ -1
struc COFF_HEADER struct COFF_HEADER
{ .machine dw ? machine dw ?
.nSections dw ? nSections dw ?
.DataTime dd ? DataTime dd ?
.pSymTable dd ? pSymTable dd ?
.nSymbols dd ? nSymbols dd ?
.optHeader dw ? optHeader dw ?
.flags dw ? flags dw ?
}; ends
struct COFF_SECTION
Name rb 8
VirtualSize dd ?
VirtualAddress dd ?
SizeOfRawData dd ?
PtrRawData dd ?
PtrReloc dd ?
PtrLinenumbers dd ?
NumReloc dw ?
NumLinenum dw ?
Characteristics dd ?
ends
struc COFF_SECTION struct COFF_RELOC
{ .Name rb 8 VirtualAddress dd ?
.VirtualSize dd ? SymIndex dd ?
.VirtualAddress dd ? Type dw ?
.SizeOfRawData dd ? ends
.PtrRawData dd ?
.PtrReloc dd ?
.PtrLinenumbers dd ?
.NumReloc dw ?
.NumLinenum dw ?
.Characteristics dd ?
}
COFF_SECTION_SIZE equ 40
struc COFF_RELOC struct COFF_SYM
{ .VirtualAddress dd ? Name rb 8
.SymIndex dd ? Value dd ?
.Type dw ? SectionNumber dw ?
} Type dw ?
StorageClass db ?
NumAuxSymbols db ?
ends
struc COFF_SYM struct IOCTL
{ .Name rb 8 handle dd ?
.Value dd ? io_code dd ?
.SectionNumber dw ? input dd ?
.Type dw ? inp_size dd ?
.StorageClass db ? output dd ?
.NumAuxSymbols db ? out_size dd ?
} ends
CSYM_SIZE equ 18
struc IOCTL
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
}
virtual at 0
IOCTL IOCTL
end virtual
;virtual at 0
; LIB LIB
;end virtual
virtual at 0
SRV SRV
end virtual
virtual at 0
CFH COFF_HEADER
end virtual
virtual at 0
CFS COFF_SECTION
end virtual
virtual at 0
CRELOC COFF_RELOC
end virtual
virtual at 0
CSYM COFF_SYM
end virtual
struc LHEAD
{
.next dd ? ;next object in list
.prev dd ? ;prev object in list
.sizeof:
}
virtual at 0
LHEAD LHEAD
end virtual
struc IRQH
{
.list LHEAD
.handler dd ? ;handler roututine
.data dd ? ;user-specific data
.sizeof:
}
virtual at 0
IRQH IRQH
end virtual
struct IRQH
list LHEAD
handler dd ? ;handler roututine
data dd ? ;user-specific data
ends

View File

@ -139,7 +139,7 @@ proc srv_handler stdcall, ioctl:dword
cmp [edi+SRV.magic], ' SRV' cmp [edi+SRV.magic], ' SRV'
jne .fail jne .fail
cmp [edi+SRV.size], SRV.sizeof cmp [edi+SRV.size], sizeof.SRV
jne .fail jne .fail
stdcall [edi+SRV.srv_proc], esi stdcall [edi+SRV.srv_proc], esi
@ -171,7 +171,7 @@ srv_handlerEx:
cmp [eax+SRV.magic], ' SRV' cmp [eax+SRV.magic], ' SRV'
jne .fail jne .fail
cmp [eax+SRV.size], SRV.sizeof cmp [eax+SRV.size], sizeof.SRV
jne .fail jne .fail
stdcall [eax+SRV.srv_proc], ecx stdcall [eax+SRV.srv_proc], ecx
@ -196,7 +196,7 @@ proc get_service stdcall, sz_name:dword
@@: @@:
mov edx, [srv.fd] mov edx, [srv.fd]
@@: @@:
cmp edx, srv.fd-SRV_FD_OFFSET cmp edx, srv.fd-SRV.fd
je .not_load je .not_load
stdcall strncmp, edx, [sz_name], 16 stdcall strncmp, edx, [sz_name], 16
@ -226,7 +226,7 @@ proc reg_service stdcall, name:dword, handler:dword
cmp [handler], eax cmp [handler], eax
je .fail je .fail
mov eax, SRV.sizeof mov eax, sizeof.SRV
call malloc call malloc
test eax, eax test eax, eax
jz .fail jz .fail
@ -243,9 +243,9 @@ proc reg_service stdcall, name:dword, handler:dword
pop esi pop esi
mov [eax+SRV.magic], ' SRV' mov [eax+SRV.magic], ' SRV'
mov [eax+SRV.size], SRV.sizeof mov [eax+SRV.size], sizeof.SRV
mov ebx, srv.fd-SRV_FD_OFFSET mov ebx, srv.fd-SRV.fd
mov edx, [ebx+SRV.fd] mov edx, [ebx+SRV.fd]
mov [eax+SRV.fd], edx mov [eax+SRV.fd], edx
mov [eax+SRV.bk], ebx mov [eax+SRV.bk], ebx
@ -514,10 +514,10 @@ proc fix_coff_symbols stdcall uses ebx esi, sec:dword, symbols:dword,\
mov edi, [symbols] mov edi, [symbols]
mov [retval], 1 mov [retval], 1
.fix: .fix:
movzx ebx, [edi+CSYM.SectionNumber] movzx ebx, [edi+COFF_SYM.SectionNumber]
test ebx, ebx test ebx, ebx
jnz .internal jnz .internal
mov eax, dword [edi+CSYM.Name] mov eax, dword [edi+COFF_SYM.Name]
test eax, eax test eax, eax
jnz @F jnz @F
@ -542,7 +542,7 @@ proc fix_coff_symbols stdcall uses ebx esi, sec:dword, symbols:dword,\
mov [retval], 0 mov [retval], 0
@@: @@:
mov edi, [symbols] mov edi, [symbols]
mov [edi+CSYM.Value], eax mov [edi+COFF_SYM.Value], eax
jmp .next jmp .next
.internal: .internal:
cmp bx, -1 cmp bx, -1
@ -555,10 +555,10 @@ proc fix_coff_symbols stdcall uses ebx esi, sec:dword, symbols:dword,\
lea ebx, [ebx+ebx*4] lea ebx, [ebx+ebx*4]
add ebx, [sec] add ebx, [sec]
mov eax, [ebx+CFS.VirtualAddress] mov eax, [ebx+COFF_SECTION.VirtualAddress]
add [edi+CSYM.Value], eax add [edi+COFF_SYM.Value], eax
.next: .next:
add edi, CSYM_SIZE add edi, sizeof.COFF_SYM
mov [symbols], edi mov [symbols], edi
dec [sym_count] dec [sym_count]
jnz .fix jnz .fix
@ -574,38 +574,38 @@ proc fix_coff_relocs stdcall uses ebx esi, coff:dword, sym:dword, \
endl endl
mov eax, [coff] mov eax, [coff]
movzx ebx, [eax+CFH.nSections] movzx ebx, [eax+COFF_HEADER.nSections]
mov [n_sec], ebx mov [n_sec], ebx
lea esi, [eax+20] lea esi, [eax+20]
.fix_sec: .fix_sec:
mov edi, [esi+CFS.PtrReloc] mov edi, [esi+COFF_SECTION.PtrReloc]
add edi, [coff] add edi, [coff]
movzx ecx, [esi+CFS.NumReloc] movzx ecx, [esi+COFF_SECTION.NumReloc]
test ecx, ecx test ecx, ecx
jz .next jz .next
.reloc_loop: .reloc_loop:
mov ebx, [edi+CRELOC.SymIndex] mov ebx, [edi+COFF_RELOC.SymIndex]
add ebx, ebx add ebx, ebx
lea ebx, [ebx+ebx*8] lea ebx, [ebx+ebx*8]
add ebx, [sym] add ebx, [sym]
mov edx, [ebx+CSYM.Value] mov edx, [ebx+COFF_SYM.Value]
cmp [edi+CRELOC.Type], 6 cmp [edi+COFF_RELOC.Type], 6
je .dir_32 je .dir_32
cmp [edi+CRELOC.Type], 20 cmp [edi+COFF_RELOC.Type], 20
jne .next_reloc jne .next_reloc
.rel_32: .rel_32:
mov eax, [edi+CRELOC.VirtualAddress] mov eax, [edi+COFF_RELOC.VirtualAddress]
add eax, [esi+CFS.VirtualAddress] add eax, [esi+COFF_SECTION.VirtualAddress]
sub edx, eax sub edx, eax
sub edx, 4 sub edx, 4
jmp .fix jmp .fix
.dir_32: .dir_32:
mov eax, [edi+CRELOC.VirtualAddress] mov eax, [edi+COFF_RELOC.VirtualAddress]
add eax, [esi+CFS.VirtualAddress] add eax, [esi+COFF_SECTION.VirtualAddress]
.fix: .fix:
add eax, [delta] add eax, [delta]
add [eax], edx add [eax], edx
@ -614,7 +614,7 @@ proc fix_coff_relocs stdcall uses ebx esi, coff:dword, sym:dword, \
dec ecx dec ecx
jnz .reloc_loop jnz .reloc_loop
.next: .next:
add esi, COFF_SECTION_SIZE add esi, sizeof.COFF_SECTION
dec [n_sec] dec [n_sec]
jnz .fix_sec jnz .fix_sec
.exit: .exit:
@ -629,30 +629,30 @@ proc rebase_coff stdcall uses ebx esi, coff:dword, sym:dword, \
endl endl
mov eax, [coff] mov eax, [coff]
movzx ebx, [eax+CFH.nSections] movzx ebx, [eax+COFF_HEADER.nSections]
mov [n_sec], ebx mov [n_sec], ebx
lea esi, [eax+20] lea esi, [eax+20]
mov edx, [delta] mov edx, [delta]
.fix_sec: .fix_sec:
mov edi, [esi+CFS.PtrReloc] mov edi, [esi+COFF_SECTION.PtrReloc]
add edi, [coff] add edi, [coff]
movzx ecx, [esi+CFS.NumReloc] movzx ecx, [esi+COFF_SECTION.NumReloc]
test ecx, ecx test ecx, ecx
jz .next jz .next
.reloc_loop: .reloc_loop:
cmp [edi+CRELOC.Type], 6 cmp [edi+COFF_RELOC.Type], 6
jne .next_reloc jne .next_reloc
.dir_32: .dir_32:
mov eax, [edi+CRELOC.VirtualAddress] mov eax, [edi+COFF_RELOC.VirtualAddress]
add eax, [esi+CFS.VirtualAddress] add eax, [esi+COFF_SECTION.VirtualAddress]
add [eax+edx], edx add [eax+edx], edx
.next_reloc: .next_reloc:
add edi, 10 add edi, 10
dec ecx dec ecx
jnz .reloc_loop jnz .reloc_loop
.next: .next:
add esi, COFF_SECTION_SIZE add esi, sizeof.COFF_SECTION
dec [n_sec] dec [n_sec]
jnz .fix_sec jnz .fix_sec
.exit: .exit:
@ -700,15 +700,15 @@ proc load_driver stdcall, driver_name:dword
mov [coff], eax mov [coff], eax
movzx ecx, [eax+CFH.nSections] movzx ecx, [eax+COFF_HEADER.nSections]
xor ebx, ebx xor ebx, ebx
lea edx, [eax+20] lea edx, [eax+20]
@@: @@:
add ebx, [edx+CFS.SizeOfRawData] add ebx, [edx+COFF_SECTION.SizeOfRawData]
add ebx, 15 add ebx, 15
and ebx, not 15 and ebx, not 15
add edx, COFF_SECTION_SIZE add edx, sizeof.COFF_SECTION
dec ecx dec ecx
jnz @B jnz @B
mov [img_size], ebx mov [img_size], ebx
@ -728,32 +728,32 @@ proc load_driver stdcall, driver_name:dword
rep stosd rep stosd
mov edx, [coff] mov edx, [coff]
movzx ebx, [edx+CFH.nSections] movzx ebx, [edx+COFF_HEADER.nSections]
mov edi, [img_base] mov edi, [img_base]
lea eax, [edx+20] lea eax, [edx+20]
@@: @@:
mov [eax+CFS.VirtualAddress], edi mov [eax+COFF_SECTION.VirtualAddress], edi
mov esi, [eax+CFS.PtrRawData] mov esi, [eax+COFF_SECTION.PtrRawData]
test esi, esi test esi, esi
jnz .copy jnz .copy
add edi, [eax+CFS.SizeOfRawData] add edi, [eax+COFF_SECTION.SizeOfRawData]
jmp .next jmp .next
.copy: .copy:
add esi, edx add esi, edx
mov ecx, [eax+CFS.SizeOfRawData] mov ecx, [eax+COFF_SECTION.SizeOfRawData]
cld cld
rep movsb rep movsb
.next: .next:
add edi, 15 add edi, 15
and edi, not 15 and edi, not 15
add eax, COFF_SECTION_SIZE add eax, sizeof.COFF_SECTION
dec ebx dec ebx
jnz @B jnz @B
mov ebx, [edx+CFH.pSymTable] mov ebx, [edx+COFF_HEADER.pSymTable]
add ebx, edx add ebx, edx
mov [sym], ebx mov [sym], ebx
mov ecx, [edx+CFH.nSymbols] mov ecx, [edx+COFF_HEADER.nSymbols]
add ecx, ecx add ecx, ecx
lea ecx, [ecx+ecx*8];ecx*=18 = nSymbols*CSYM_SIZE lea ecx, [ecx+ecx*8];ecx*=18 = nSymbols*CSYM_SIZE
add ecx, [sym] add ecx, [sym]
@ -764,7 +764,7 @@ proc load_driver stdcall, driver_name:dword
mov dword [ebx+4], 0 mov dword [ebx+4], 0
lea eax, [edx+20] lea eax, [edx+20]
stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols], \ stdcall fix_coff_symbols, eax, [sym], [edx+COFF_HEADER.nSymbols], \
[strings], ebx [strings], ebx
test eax, eax test eax, eax
jz .link_fail jz .link_fail
@ -772,7 +772,7 @@ proc load_driver stdcall, driver_name:dword
mov ebx, [coff] mov ebx, [coff]
stdcall fix_coff_relocs, ebx, [sym], 0 stdcall fix_coff_relocs, ebx, [sym], 0
stdcall get_coff_sym, [sym], [ebx+CFH.nSymbols], szVersion stdcall get_coff_sym, [sym], [ebx+COFF_HEADER.nSymbols], szVersion
test eax, eax test eax, eax
jz .link_fail jz .link_fail
@ -785,7 +785,7 @@ proc load_driver stdcall, driver_name:dword
ja .ver_fail ja .ver_fail
mov ebx, [coff] mov ebx, [coff]
stdcall get_coff_sym, [sym], [ebx+CFH.nSymbols], szSTART stdcall get_coff_sym, [sym], [ebx+COFF_HEADER.nSymbols], szSTART
mov [start], eax mov [start], eax
stdcall kernel_free, [coff] stdcall kernel_free, [coff]
@ -851,7 +851,7 @@ coff_get_align:
; - if alignment is given and is no more than 4K, use it; ; - if alignment is given and is no more than 4K, use it;
; - if alignment is more than 4K, revert to 4K. ; - if alignment is more than 4K, revert to 4K.
push ecx push ecx
mov cl, byte [edx+CFS.Characteristics+2] mov cl, byte [edx+COFF_SECTION.Characteristics+2]
mov eax, 1 mov eax, 1
shr cl, 4 shr cl, 4
dec cl dec cl
@ -955,7 +955,7 @@ proc load_library stdcall, file_name:dword
xor eax, eax xor eax, eax
repnz scasb repnz scasb
not ecx not ecx
lea eax, [ecx+DLLDESCR.sizeof] lea eax, [ecx+sizeof.DLLDESCR]
push ecx push ecx
call malloc call malloc
pop ecx pop ecx
@ -979,7 +979,7 @@ proc load_library stdcall, file_name:dword
; calculate size of loaded DLL ; calculate size of loaded DLL
mov edx, [coff] mov edx, [coff]
movzx ecx, [edx+CFH.nSections] movzx ecx, [edx+COFF_HEADER.nSections]
xor ebx, ebx xor ebx, ebx
add edx, 20 add edx, 20
@ -988,8 +988,8 @@ proc load_library stdcall, file_name:dword
add ebx, eax add ebx, eax
not eax not eax
and ebx, eax and ebx, eax
add ebx, [edx+CFS.SizeOfRawData] add ebx, [edx+COFF_SECTION.SizeOfRawData]
add edx, COFF_SECTION_SIZE add edx, sizeof.COFF_SECTION
dec ecx dec ecx
jnz @B jnz @B
; it must be nonzero and not too big ; it must be nonzero and not too big
@ -1019,7 +1019,7 @@ proc load_library stdcall, file_name:dword
; copy sections and set correct values for VirtualAddress'es in headers ; copy sections and set correct values for VirtualAddress'es in headers
push esi push esi
mov edx, [coff] mov edx, [coff]
movzx ebx, [edx+CFH.nSections] movzx ebx, [edx+COFF_HEADER.nSections]
mov edi, eax mov edi, eax
add edx, 20 add edx, 20
cld cld
@ -1030,11 +1030,11 @@ proc load_library stdcall, file_name:dword
not eax not eax
and ecx, eax and ecx, eax
and edi, eax and edi, eax
mov [edx+CFS.VirtualAddress], ecx mov [edx+COFF_SECTION.VirtualAddress], ecx
add ecx, [edx+CFS.SizeOfRawData] add ecx, [edx+COFF_SECTION.SizeOfRawData]
mov esi, [edx+CFS.PtrRawData] mov esi, [edx+COFF_SECTION.PtrRawData]
push ecx push ecx
mov ecx, [edx+CFS.SizeOfRawData] mov ecx, [edx+COFF_SECTION.SizeOfRawData]
test esi, esi test esi, esi
jnz .copy jnz .copy
xor eax, eax xor eax, eax
@ -1045,7 +1045,7 @@ proc load_library stdcall, file_name:dword
rep movsb rep movsb
.next: .next:
pop ecx pop ecx
add edx, COFF_SECTION_SIZE add edx, sizeof.COFF_SECTION
dec ebx dec ebx
jnz @B jnz @B
pop esi pop esi
@ -1054,28 +1054,28 @@ proc load_library stdcall, file_name:dword
; later we will use COFF header, headers for sections and symbol table ; later we will use COFF header, headers for sections and symbol table
; and also relocations table for all sections ; and also relocations table for all sections
mov edx, [coff] mov edx, [coff]
mov ebx, [edx+CFH.pSymTable] mov ebx, [edx+COFF_HEADER.pSymTable]
mov edi, dword [fileinfo+32] mov edi, dword [fileinfo+32]
sub edi, ebx sub edi, ebx
jc .fail_and_free_data jc .fail_and_free_data
mov [esi+DLLDESCR.symbols_lim], edi mov [esi+DLLDESCR.symbols_lim], edi
add ebx, edx add ebx, edx
movzx ecx, [edx+CFH.nSections] movzx ecx, [edx+COFF_HEADER.nSections]
lea ecx, [ecx*5] lea ecx, [ecx*5]
lea edi, [edi+ecx*8+20] lea edi, [edi+ecx*8+20]
add edx, 20 add edx, 20
@@: @@:
movzx eax, [edx+CFS.NumReloc] movzx eax, [edx+COFF_SECTION.NumReloc]
lea eax, [eax*5] lea eax, [eax*5]
lea edi, [edi+eax*2] lea edi, [edi+eax*2]
add edx, COFF_SECTION_SIZE add edx, sizeof.COFF_SECTION
sub ecx, 5 sub ecx, 5
jnz @b jnz @b
stdcall kernel_alloc, edi stdcall kernel_alloc, edi
test eax, eax test eax, eax
jz .fail_and_free_data jz .fail_and_free_data
mov edx, [coff] mov edx, [coff]
movzx ecx, [edx+CFH.nSections] movzx ecx, [edx+COFF_HEADER.nSections]
lea ecx, [ecx*5] lea ecx, [ecx*5]
lea ecx, [ecx*2+5] lea ecx, [ecx*2+5]
mov [esi+DLLDESCR.coff_hdr], eax mov [esi+DLLDESCR.coff_hdr], eax
@ -1086,7 +1086,7 @@ proc load_library stdcall, file_name:dword
pop esi pop esi
mov [esi+DLLDESCR.symbols_ptr], edi mov [esi+DLLDESCR.symbols_ptr], edi
push esi push esi
mov ecx, [edx+CFH.nSymbols] mov ecx, [edx+COFF_HEADER.nSymbols]
mov [esi+DLLDESCR.symbols_num], ecx mov [esi+DLLDESCR.symbols_num], ecx
mov ecx, [esi+DLLDESCR.symbols_lim] mov ecx, [esi+DLLDESCR.symbols_lim]
mov esi, ebx mov esi, ebx
@ -1094,27 +1094,27 @@ proc load_library stdcall, file_name:dword
pop esi pop esi
mov ebx, [esi+DLLDESCR.coff_hdr] mov ebx, [esi+DLLDESCR.coff_hdr]
push esi push esi
movzx eax, [edx+CFH.nSections] movzx eax, [edx+COFF_HEADER.nSections]
lea edx, [ebx+20] lea edx, [ebx+20]
@@: @@:
movzx ecx, [edx+CFS.NumReloc] movzx ecx, [edx+COFF_SECTION.NumReloc]
lea ecx, [ecx*5] lea ecx, [ecx*5]
mov esi, [edx+CFS.PtrReloc] mov esi, [edx+COFF_SECTION.PtrReloc]
mov [edx+CFS.PtrReloc], edi mov [edx+COFF_SECTION.PtrReloc], edi
sub [edx+CFS.PtrReloc], ebx sub [edx+COFF_SECTION.PtrReloc], ebx
add esi, [coff] add esi, [coff]
shr ecx, 1 shr ecx, 1
rep movsd rep movsd
adc ecx, ecx adc ecx, ecx
rep movsw rep movsw
add edx, COFF_SECTION_SIZE add edx, sizeof.COFF_SECTION
dec eax dec eax
jnz @b jnz @b
pop esi pop esi
; fixup symbols ; fixup symbols
mov edx, ebx mov edx, ebx
mov eax, [ebx+CFH.nSymbols] mov eax, [ebx+COFF_HEADER.nSymbols]
add edx, 20 add edx, 20
mov ecx, [esi+DLLDESCR.symbols_num] mov ecx, [esi+DLLDESCR.symbols_num]
lea ecx, [ecx*9] lea ecx, [ecx*9]
@ -1128,11 +1128,11 @@ proc load_library stdcall, file_name:dword
; ;
;@@: ;@@:
stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+CFH.nSymbols], szEXPORTS stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+COFF_HEADER.nSymbols], szEXPORTS
test eax, eax test eax, eax
jnz @F jnz @F
stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+CFH.nSymbols], sz_EXPORTS stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+COFF_HEADER.nSymbols], sz_EXPORTS
@@: @@:
mov [esi+DLLDESCR.exports], eax mov [esi+DLLDESCR.exports], eax
@ -1160,7 +1160,7 @@ proc load_library stdcall, file_name:dword
jz .fail_and_dereference jz .fail_and_dereference
@@: @@:
mov [img_base], eax mov [img_base], eax
mov eax, HDLL.sizeof mov eax, sizeof.HDLL
call malloc call malloc
test eax, eax test eax, eax
jz .fail_and_free_user jz .fail_and_free_user
@ -1369,11 +1369,11 @@ stop_all_services:
push ebp push ebp
mov edx, [srv.fd] mov edx, [srv.fd]
.next: .next:
cmp edx, srv.fd-SRV_FD_OFFSET cmp edx, srv.fd-SRV.fd
je .done je .done
cmp [edx+SRV.magic], ' SRV' cmp [edx+SRV.magic], ' SRV'
jne .next jne .next
cmp [edx+SRV.size], SRV.sizeof cmp [edx+SRV.size], sizeof.SRV
jne .next jne .next
mov ebx, [edx+SRV.entry] mov ebx, [edx+SRV.entry]

View File

@ -8,26 +8,20 @@
$Revision$ $Revision$
struc MEM_BLOCK struct MEM_BLOCK
{ list LHEAD
.list LHEAD next_block dd ? ;+8
.next_block dd ? ;+8 prev_block dd ? ;+4
.prev_block dd ? ;+4 base dd ? ;+16
.base dd ? ;+16 size dd ? ;+20
.size dd ? ;+20 flags dd ? ;+24
.flags dd ? ;+24 handle dd ? ;+28
.handle dd ? ;+28 ends
.sizeof:
}
FREE_BLOCK equ 4 FREE_BLOCK equ 4
USED_BLOCK equ 8 USED_BLOCK equ 8
DONT_FREE_BLOCK equ 10h DONT_FREE_BLOCK equ 10h
virtual at 0
MEM_BLOCK MEM_BLOCK
end virtual
block_next equ MEM_BLOCK.next_block block_next equ MEM_BLOCK.next_block
block_prev equ MEM_BLOCK.prev_block block_prev equ MEM_BLOCK.prev_block
@ -146,8 +140,8 @@ proc init_kernel_heap
jnz .l1 jnz .l1
mov edi, HEAP_BASE ;descriptors mov edi, HEAP_BASE ;descriptors
mov ebx, HEAP_BASE+MEM_BLOCK.sizeof ;free space mov ebx, HEAP_BASE+sizeof.MEM_BLOCK ;free space
mov ecx, HEAP_BASE+MEM_BLOCK.sizeof*2 ;terminator mov ecx, HEAP_BASE+sizeof.MEM_BLOCK*2 ;terminator
xor eax, eax xor eax, eax
mov [edi+block_next], ebx mov [edi+block_next], ebx
@ -155,7 +149,7 @@ proc init_kernel_heap
mov [edi+list_fd], eax mov [edi+list_fd], eax
mov [edi+list_bk], eax mov [edi+list_bk], eax
mov [edi+block_base], HEAP_BASE mov [edi+block_base], HEAP_BASE
mov [edi+block_size], 4096*MEM_BLOCK.sizeof mov [edi+block_size], 4096*sizeof.MEM_BLOCK
mov [edi+block_flags], USED_BLOCK mov [edi+block_flags], USED_BLOCK
mov [ecx+block_next], eax mov [ecx+block_next], eax
@ -168,11 +162,11 @@ proc init_kernel_heap
mov [ebx+block_next], ecx mov [ebx+block_next], ecx
mov [ebx+block_prev], edi mov [ebx+block_prev], edi
mov [ebx+block_base], HEAP_BASE+4096*MEM_BLOCK.sizeof mov [ebx+block_base], HEAP_BASE+4096*sizeof.MEM_BLOCK
mov ecx, [pg_data.kernel_pages] mov ecx, [pg_data.kernel_pages]
shl ecx, 12 shl ecx, 12
sub ecx, HEAP_BASE-OS_BASE+4096*MEM_BLOCK.sizeof sub ecx, HEAP_BASE-OS_BASE+4096*sizeof.MEM_BLOCK
mov [heap_size], ecx mov [heap_size], ecx
mov [heap_free], ecx mov [heap_free], ecx
mov [ebx+block_size], ecx mov [ebx+block_size], ecx
@ -185,15 +179,15 @@ proc init_kernel_heap
list_add ebx, ecx list_add ebx, ecx
mov ecx, 4096-3-1 mov ecx, 4096-3-1
mov eax, HEAP_BASE+MEM_BLOCK.sizeof*4 mov eax, HEAP_BASE+sizeof.MEM_BLOCK*4
mov [next_memblock], HEAP_BASE+MEM_BLOCK.sizeof*3 mov [next_memblock], HEAP_BASE+sizeof.MEM_BLOCK *3
@@: @@:
mov [eax-MEM_BLOCK.sizeof], eax mov [eax-sizeof.MEM_BLOCK], eax
add eax, MEM_BLOCK.sizeof add eax, sizeof.MEM_BLOCK
loop @B loop @B
mov [eax-MEM_BLOCK.sizeof], dword 0 mov [eax-sizeof.MEM_BLOCK], dword 0
mov ecx, heap_mutex mov ecx, heap_mutex
call mutex_init call mutex_init
@ -1292,7 +1286,7 @@ align 4
and ecx, -4096 and ecx, -4096
mov [size], ecx mov [size], ecx
mov eax, SMEM.sizeof mov eax, sizeof.SMEM
call malloc call malloc
test eax, eax test eax, eax
mov esi, eax mov esi, eax
@ -1354,7 +1348,7 @@ align 4
mov ebx, [CURRENT_TASK] mov ebx, [CURRENT_TASK]
shl ebx, 5 shl ebx, 5
mov ebx, [CURRENT_TASK+ebx+4] mov ebx, [CURRENT_TASK+ebx+4]
mov eax, SMAP.sizeof mov eax, sizeof.SMAP
call create_kernel_object call create_kernel_object
test eax, eax test eax, eax

View File

@ -12,9 +12,9 @@ IRQ_POOL_SIZE equ 48
uglobal uglobal
align 16 align 16
irqh_tab rd LHEAD.sizeof * IRQ_RESERVED / 4 irqh_tab rd sizeof.LHEAD * IRQ_RESERVED / 4
irqh_pool rd IRQH.sizeof * IRQ_POOL_SIZE /4 irqh_pool rd sizeof.IRQH * IRQ_POOL_SIZE /4
next_irqh rd 1 next_irqh rd 1
irq_active_set rd 1 irq_active_set rd 1
@ -34,14 +34,14 @@ init_irqs:
loop @B loop @B
mov ecx, IRQ_POOL_SIZE-1 mov ecx, IRQ_POOL_SIZE-1
mov eax, irqh_pool+IRQH.sizeof mov eax, irqh_pool+sizeof.IRQH
mov [next_irqh], irqh_pool mov [next_irqh], irqh_pool
@@: @@:
mov [eax-IRQH.sizeof], eax mov [eax-sizeof.IRQH], eax
add eax, IRQH.sizeof add eax, sizeof.IRQH
loop @B loop @B
mov [eax-IRQH.sizeof], dword 0 mov [eax-sizeof.IRQH], dword 0
ret ret

View File

@ -10,34 +10,34 @@ $Revision$
GREEDY_KERNEL equ 0 GREEDY_KERNEL equ 0
struc APP_HEADER_00 struct APP_HEADER_00_
{ .banner dq ? banner dq ?
.version dd ? ;+8 version dd ? ;+8
.start dd ? ;+12 start dd ? ;+12
.i_end dd ? ;+16 i_end dd ? ;+16
.mem_size dd ? ;+20 mem_size dd ? ;+20
.i_param dd ? ;+24 i_param dd ? ;+24
} ends
struc APP_HEADER_01 struct APP_HEADER_01_
{ .banner dq ? banner dq ?
.version dd ? ;+8 version dd ? ;+8
.start dd ? ;+12 start dd ? ;+12
.i_end dd ? ;+16 i_end dd ? ;+16
.mem_size dd ? ;+20 mem_size dd ? ;+20
.stack_top dd ? ;+24 stack_top dd ? ;+24
.i_param dd ? ;+28 i_param dd ? ;+28
.i_icon dd ? ;+32 i_icon dd ? ;+32
} ends
struc APP_PARAMS struct APP_PARAMS
{ .app_cmdline ;0x00 app_cmdline dd ? ;0x00
.app_path ;0x04 app_path dd ? ;0x04
.app_eip ;0x08 app_eip dd ? ;0x08
.app_esp ;0x0C app_esp dd ? ;0x0C
.app_mem ;0x10 app_mem dd ? ;0x10
} ends
macro _clear_ op macro _clear_ op
{ mov ecx, op/4 { mov ecx, op/4
@ -254,10 +254,10 @@ endp
align 4 align 4
test_app_header: test_app_header:
virtual at eax virtual at eax
APP_HEADER_00 APP_HEADER_00 APP_HEADER_00 APP_HEADER_00_
end virtual end virtual
virtual at eax virtual at eax
APP_HEADER_01 APP_HEADER_01 APP_HEADER_01 APP_HEADER_01_
end virtual end virtual
cmp dword [eax], 'MENU' cmp dword [eax], 'MENU'

View File

@ -12,21 +12,16 @@ $Revision$
DEBUG_SHOW_IO = 0 DEBUG_SHOW_IO = 0
struc V86_machine struct V86_machine
{
; page directory ; page directory
.pagedir dd ? pagedir dd ?
; translation table: V86 address -> flat linear address ; translation table: V86 address -> flat linear address
.pages dd ? pages dd ?
; mutex to protect all data from writing by multiple threads at one time ; mutex to protect all data from writing by multiple threads at one time
.mutex dd ? mutex dd ?
; i/o permission map ; i/o permission map
.iopm dd ? iopm dd ?
.size = $ ends
}
virtual at 0
V86_machine V86_machine
end virtual
; Create V86 machine ; Create V86 machine
; in: nothing ; in: nothing
@ -35,7 +30,7 @@ end virtual
; destroys: ebx, ecx, edx (due to malloc) ; destroys: ebx, ecx, edx (due to malloc)
v86_create: v86_create:
; allocate V86_machine structure ; allocate V86_machine structure
mov eax, V86_machine.size mov eax, sizeof.V86_machine
call malloc call malloc
test eax, eax test eax, eax
jz .fail jz .fail
@ -245,31 +240,26 @@ end if
.ret: .ret:
ret ret
struc v86_regs struct v86_regs
{
; don't change the order, it is important ; don't change the order, it is important
.edi dd ? edi dd ?
.esi dd ? esi dd ?
.ebp dd ? ebp dd ?
dd ? ; ignored dd ? ; ignored
.ebx dd ? ebx dd ?
.edx dd ? edx dd ?
.ecx dd ? ecx dd ?
.eax dd ? eax dd ?
.eip dd ? eip dd ?
.cs dd ? cs dd ?
.eflags dd ? ; VM flag must be set! eflags dd ? ; VM flag must be set!
.esp dd ? esp dd ?
.ss dd ? ss dd ?
.es dd ? es dd ?
.ds dd ? ds dd ?
.fs dd ? fs dd ?
.gs dd ? gs dd ?
.size = $ ends
}
virtual at 0
v86_regs v86_regs
end virtual
; Run V86 machine ; Run V86 machine
; in: ebx -> registers for V86 (two structures: in and out) ; in: ebx -> registers for V86 (two structures: in and out)
@ -319,10 +309,10 @@ v86_start:
; sti ; sti
mov eax, esi mov eax, esi
sub esp, v86_regs.size sub esp, sizeof.v86_regs
mov esi, ebx mov esi, ebx
mov edi, esp mov edi, esp
mov ecx, v86_regs.size/4 mov ecx, sizeof.v86_regs/4
rep movsd rep movsd
cmp edx, -1 cmp edx, -1
@ -372,7 +362,7 @@ v86_exc_c:
xor eax, eax xor eax, eax
mov dr6, eax mov dr6, eax
@@: @@:
mov eax, [esp+v86_regs.size+10h+18h] mov eax, [esp+sizeof.v86_regs+10h+18h]
cmp word [esp+v86_regs.eip], ax cmp word [esp+v86_regs.eip], ax
jnz @f jnz @f
shr eax, 16 shr eax, 16
@ -444,7 +434,7 @@ v86_exc_c:
sub eax, 6 sub eax, 6
add edx, eax add edx, eax
mov eax, edx mov eax, edx
mov esi, [esp+4+v86_regs.size+10h+4] mov esi, [esp+4+sizeof.v86_regs+10h+4]
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
jae @f jae @f
@ -492,7 +482,7 @@ v86_exc_c:
movzx eax, word [esp+v86_regs.esp] movzx eax, word [esp+v86_regs.esp]
add edx, eax add edx, eax
mov eax, edx mov eax, edx
mov esi, [esp+v86_regs.size+10h+4] mov esi, [esp+sizeof.v86_regs+10h+4]
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
jae @f jae @f
@ -528,7 +518,7 @@ v86_exc_c:
movzx eax, ax movzx eax, ax
add edx, eax add edx, eax
mov eax, edx mov eax, edx
mov esi, [esp+v86_regs.size+10h+4] mov esi, [esp+sizeof.v86_regs+10h+4]
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
jae @f jae @f
@ -560,7 +550,7 @@ v86_exc_c:
sub eax, 4 sub eax, 4
add edx, eax add edx, eax
mov eax, edx mov eax, edx
mov esi, [esp+v86_regs.size+10h+4] mov esi, [esp+sizeof.v86_regs+10h+4]
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
jae @f jae @f
@ -591,7 +581,7 @@ v86_exc_c:
movzx eax, word [esp+v86_regs.esp] movzx eax, word [esp+v86_regs.esp]
add edx, eax add edx, eax
mov eax, edx mov eax, edx
mov esi, [esp+v86_regs.size+10h+4] mov esi, [esp+sizeof.v86_regs+10h+4]
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
jae @f jae @f
@ -622,7 +612,7 @@ v86_exc_c:
movzx eax, word [esp+v86_regs.esp] movzx eax, word [esp+v86_regs.esp]
add edx, eax add edx, eax
mov eax, edx mov eax, edx
mov esi, [esp+v86_regs.size+10h+4] mov esi, [esp+sizeof.v86_regs+10h+4]
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
jae @f jae @f
@ -748,7 +738,7 @@ end if
shl edx, 4 shl edx, 4
add edx, [esp+32] add edx, [esp+32]
@@: @@:
mov esi, [esp+v86_regs.size+10h+4] mov esi, [esp+sizeof.v86_regs+10h+4]
mov eax, edx mov eax, edx
call v86_get_lin_addr call v86_get_lin_addr
cmp eax, 0x1000 cmp eax, 0x1000
@ -773,10 +763,10 @@ end if
xor eax, eax xor eax, eax
.exit: .exit:
mov [esp+v86_regs.size+10h+1Ch], eax mov [esp+sizeof.v86_regs+10h+1Ch], eax
mov [esp+v86_regs.size+10h+18h], ebx mov [esp+sizeof.v86_regs+10h+18h], ebx
mov edx, [esp+v86_regs.size+10h+14h] mov edx, [esp+sizeof.v86_regs+10h+14h]
cmp edx, -1 cmp edx, -1
jz @f jz @f
dec [v86_irqhooks+edx*8+4] dec [v86_irqhooks+edx*8+4]
@ -785,9 +775,9 @@ end if
@@: @@:
mov esi, esp mov esi, esp
mov edi, [esi+v86_regs.size+10h+10h] mov edi, [esi+sizeof.v86_regs+10h+10h]
add edi, v86_regs.size add edi, sizeof.v86_regs
mov ecx, v86_regs.size/4 mov ecx, sizeof.v86_regs/4
rep movsd rep movsd
mov esp, esi mov esp, esi
@ -874,12 +864,12 @@ v86_irq2:
jnz .cont jnz .cont
push ecx push ecx
mov ecx, [ebx+APPDATA.saved_esp0] mov ecx, [ebx+APPDATA.saved_esp0]
cmp word [ecx-v86_regs.size+v86_regs.esp], 6 cmp word [ecx-sizeof.v86_regs+v86_regs.esp], 6
jb .cont2 jb .cont2
movzx edx, word [ecx-v86_regs.size+v86_regs.ss] movzx edx, word [ecx-sizeof.v86_regs+v86_regs.ss]
shl edx, 4 shl edx, 4
push eax push eax
movzx eax, word [ecx-v86_regs.size+v86_regs.esp] movzx eax, word [ecx-sizeof.v86_regs+v86_regs.esp]
sub eax, 6 sub eax, 6
add edx, eax add edx, eax
mov eax, edx mov eax, edx
@ -905,12 +895,12 @@ v86_irq2:
iretd iretd
.found: .found:
mov cr3, eax mov cr3, eax
sub word [esi-v86_regs.size+v86_regs.esp], 6 sub word [esi-sizeof.v86_regs+v86_regs.esp], 6
mov ecx, [esi-v86_regs.size+v86_regs.eip] mov ecx, [esi-sizeof.v86_regs+v86_regs.eip]
mov word [edx], cx mov word [edx], cx
mov ecx, [esi-v86_regs.size+v86_regs.cs] mov ecx, [esi-sizeof.v86_regs+v86_regs.cs]
mov word [edx+2], cx mov word [edx+2], cx
mov ecx, [esi-v86_regs.size+v86_regs.eflags] mov ecx, [esi-sizeof.v86_regs+v86_regs.eflags]
mov word [edx+4], cx mov word [edx+4], cx
lea eax, [edi+8] lea eax, [edi+8]
cmp al, 10h cmp al, 10h
@ -918,10 +908,10 @@ v86_irq2:
add al, 60h add al, 60h
@@: @@:
mov cx, [eax*4] mov cx, [eax*4]
mov word [esi-v86_regs.size+v86_regs.eip], cx mov word [esi-sizeof.v86_regs+v86_regs.eip], cx
mov cx, [eax*4+2] mov cx, [eax*4+2]
mov word [esi-v86_regs.size+v86_regs.cs], cx mov word [esi-sizeof.v86_regs+v86_regs.cs], cx
and byte [esi-v86_regs.size+v86_regs.eflags+1], not 3 and byte [esi-sizeof.v86_regs+v86_regs.eflags+1], not 3
call update_counters call update_counters
lea edi, [ebx + 0x100000000 - SLOT_BASE] lea edi, [ebx + 0x100000000 - SLOT_BASE]
shr edi, 3 shr edi, 3

View File

@ -275,7 +275,7 @@ graph_data_l:
dw 11010000b *256 +11110010b dw 11010000b *256 +11110010b
db 0x00 db 0x00
tss0_l: tss0_l:
dw TSS_SIZE-1 dw sizeof.TSS-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

View File

@ -14,21 +14,16 @@ $Revision$
button.MAX_BUTTONS = 4095 button.MAX_BUTTONS = 4095
struc SYS_BUTTON struct SYS_BUTTON
{ pslot dw ?
.pslot dw ? id_lo dw ?
.id_lo dw ? left dw ?
.left dw ? width dw ?
.width dw ? top dw ?
.top dw ? height dw ?
.height dw ? id_hi dw ?
.id_hi dw ?
dw ? dw ?
.sizeof: ends
}
virtual at 0
SYS_BUTTON SYS_BUTTON
end virtual
align 4 align 4
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -216,18 +211,18 @@ syscall_button.remove_button:
mov edi, [BTN_ADDR] mov edi, [BTN_ADDR]
mov ebx, [edi] mov ebx, [edi]
inc ebx inc ebx
imul esi, ebx, SYS_BUTTON.sizeof imul esi, ebx, sizeof.SYS_BUTTON
add esi, edi add esi, edi
xor ecx, ecx xor ecx, ecx
add ecx, -SYS_BUTTON.sizeof add ecx, -sizeof.SYS_BUTTON
add esi, SYS_BUTTON.sizeof add esi, sizeof.SYS_BUTTON
.next_button: .next_button:
dec ebx dec ebx
jz .exit jz .exit
add ecx, SYS_BUTTON.sizeof add ecx, sizeof.SYS_BUTTON
add esi, -SYS_BUTTON.sizeof add esi, -sizeof.SYS_BUTTON
; does it belong to our process? ; does it belong to our process?
mov ax, [CURRENT_TASK] mov ax, [CURRENT_TASK]
@ -244,10 +239,10 @@ syscall_button.remove_button:
; okay, undefine it ; okay, undefine it
push ebx push ebx
mov ebx, esi mov ebx, esi
lea eax, [esi + SYS_BUTTON.sizeof] lea eax, [esi + sizeof.SYS_BUTTON]
call memmove call memmove
dec dword[edi] dec dword[edi]
add ecx, -SYS_BUTTON.sizeof add ecx, -sizeof.SYS_BUTTON
pop ebx pop ebx
jmp .next_button jmp .next_button
@ -334,16 +329,16 @@ button._.find_button: ;////////////////////////////////////////////////////////
mov edi, [BTN_ADDR] mov edi, [BTN_ADDR]
mov ecx, [edi] mov ecx, [edi]
imul esi, ecx, SYS_BUTTON.sizeof imul esi, ecx, sizeof.SYS_BUTTON
add esi, edi add esi, edi
inc ecx inc ecx
add esi, SYS_BUTTON.sizeof add esi, sizeof.SYS_BUTTON
.next_button: .next_button:
dec ecx dec ecx
jz .not_found jz .not_found
add esi, -SYS_BUTTON.sizeof add esi, -sizeof.SYS_BUTTON
; does it belong to our process? ; does it belong to our process?
cmp dx, [esi + SYS_BUTTON.pslot] cmp dx, [esi + SYS_BUTTON.pslot]

View File

@ -25,7 +25,7 @@ FreeEvents = event_start-EVENT.fd ; "
; FreeEvents.fd=event_start è FreeEvents.bk=event_end ; FreeEvents.fd=event_start è FreeEvents.bk=event_end
align 4 align 4
init_events: ;; used from kernel.asm init_events: ;; used from kernel.asm
stdcall kernel_alloc, EV_SPACE*EVENT.size stdcall kernel_alloc, EV_SPACE*sizeof.EVENT
or eax, eax or eax, eax
jz .fail jz .fail
; eax - current event, ebx - previos event below ; eax - current event, ebx - previos event below
@ -36,7 +36,7 @@ init_events: ;; used from kernel.asm
mov [ebx+EVENT.fd], eax mov [ebx+EVENT.fd], eax
mov [eax+EVENT.bk], ebx mov [eax+EVENT.bk], ebx
mov ebx, eax ; previos <- current mov ebx, eax ; previos <- current
add eax, EVENT.size ; new current add eax, sizeof.EVENT ; new current
loop @b loop @b
pop eax ; âîò îíî êîíöîì è ñòàëî pop eax ; âîò îíî êîíöîì è ñòàëî
mov [ebx+EVENT.fd], eax mov [ebx+EVENT.fd], eax
@ -100,7 +100,7 @@ set_event: ;; INTERNAL use !!! don't use
or esi, esi or esi, esi
jz RemoveEventTo jz RemoveEventTo
lea edi, [eax+EVENT.code] lea edi, [eax+EVENT.code]
mov ecx, EVENT.codesize/4 mov ecx, (sizeof.EVENT -EVENT.code)/4
cld cld
rep movsd rep movsd
@ -155,7 +155,7 @@ raise_event: ;; EXPORT use
or esi, esi or esi, esi
jz @f jz @f
lea edi, [ebx+EVENT.code] lea edi, [ebx+EVENT.code]
mov ecx, EVENT.codesize/4 mov ecx, (sizeof.EVENT -EVENT.code)/4
cld cld
rep movsd rep movsd
@@: @@:
@ -299,10 +299,10 @@ get_event_ex: ;; f68:14
mov edx, get_event_queue ; wait_test mov edx, get_event_queue ; wait_test
call Wait_events ; timeout ignored call Wait_events ; timeout ignored
lea esi, [eax+EVENT.code] lea esi, [eax+EVENT.code]
mov ecx, EVENT.codesize/4 mov ecx, (sizeof.EVENT-EVENT.code)/4
cld cld
rep movsd rep movsd
mov [edi-EVENT.codesize+2], cl;clear priority field mov byte[edi-(sizeof.EVENT-EVENT.code)+2], cl;clear priority field
wait_finish: wait_finish:
test byte[eax+EVENT.state+3], MANUAL_RESET shr 24 test byte[eax+EVENT.state+3], MANUAL_RESET shr 24
jnz get_event_queue.ret ; RET jnz get_event_queue.ret ; RET

View File

@ -568,16 +568,16 @@ mouse._.find_sys_button_under_cursor: ;////////////////////////////////////////
; check if any process button contains cursor ; check if any process button contains cursor
mov eax, [BTN_ADDR] mov eax, [BTN_ADDR]
mov ecx, [eax] mov ecx, [eax]
imul esi, ecx, SYS_BUTTON.sizeof imul esi, ecx, sizeof.SYS_BUTTON
add esi, eax add esi, eax
inc ecx inc ecx
add esi, SYS_BUTTON.sizeof add esi, sizeof.SYS_BUTTON
.next_button: .next_button:
dec ecx dec ecx
jz .not_found jz .not_found
add esi, -SYS_BUTTON.sizeof add esi, -sizeof.SYS_BUTTON
; does it belong to our process? ; does it belong to our process?
cmp dx, [esi + SYS_BUTTON.pslot] cmp dx, [esi + SYS_BUTTON.pslot]

View File

@ -566,7 +566,7 @@ high_code:
mov [unpack.p], eax mov [unpack.p], eax
call init_events call init_events
mov eax, srv.fd-SRV_FD_OFFSET mov eax, srv.fd-SRV.fd
mov [srv.fd], eax mov [srv.fd], eax
mov [srv.bk], eax mov [srv.bk], eax

View File

@ -148,16 +148,6 @@ struct APPDATA
ends ends
;// mike.dld, 2006-29-01 ]
struct MUTEX
lhead LHEAD
count dd ?
ends
; Core functions ; Core functions
include "core/sync.inc" ; macros for synhronization objects include "core/sync.inc" ; macros for synhronization objects
include "core/sys32.inc" ; process management include "core/sys32.inc" ; process management

View File

@ -124,10 +124,8 @@ UDP_input:
jz .no_checksum ; if checksum is zero, it is considered valid and we continue processing jz .no_checksum ; if checksum is zero, it is considered valid and we continue processing
; otherwise, we will re-calculate the checksum and add it to this value, thus creating 0 when it is correct ; otherwise, we will re-calculate the checksum and add it to this value, thus creating 0 when it is correct
push esi
UDP_checksum (edi), (edi+4) UDP_checksum (edi), (edi+4)
pop esi ;;; jnz .checksum_mismatch
jnz .checksum_mismatch
.no_checksum: .no_checksum:
DEBUGF 1,"UDP Checksum is correct\n" DEBUGF 1,"UDP Checksum is correct\n"

View File

@ -1,34 +1,25 @@
struct BLITTER_BLOCK
xmin dd ?
ymin dd ?
xmax dd ?
ymax dd ?
ends
struct BLITTER
dc BLITTER_BLOCK
sc BLITTER_BLOCK
dst_x dd ? ; 32
dst_y dd ? ; 36
src_x dd ? ; 40
src_y dd ? ; 44
w dd ? ; 48
h dd ? ; 52
struc BLITTER bitmap dd ? ; 56
{ stride dd ? ; 60
.dc.xmin rd 1 ; 0 ends
.dc.ymin rd 1 ; 4
.dc.xmax rd 1 ; 8
.dc.ymax rd 1 ; 12
.sc:
.sc.xmin rd 1 ; 16
.sc.ymin rd 1 ; 20
.sc.xmax rd 1 ; 24
.sc.ymax rd 1 ; 28
.dst_x rd 1 ; 32
.dst_y rd 1 ; 36
.src_x rd 1 ; 40
.src_y rd 1 ; 44
.w rd 1 ; 48
.h rd 1 ; 52
.bitmap rd 1 ; 56
.stride rd 1 ; 60
}
virtual at 0
BLITTER BLITTER
end virtual
align 4 align 4

View File

@ -13,23 +13,19 @@ LOAD_FROM_MEM equ 1
LOAD_INDIRECT equ 2 LOAD_INDIRECT equ 2
LOAD_SYSTEM equ 3 LOAD_SYSTEM equ 3
struc BITMAPINFOHEADER { struct BITMAPINFOHEADER
.biSize dd ? ; DWORD Size dd ?
.biWidth dd ? ; LONG Width dd ?
.biHeight dd ? ; LONG Height dd ?
.biPlanes dw ? ; WORD Planes dw ?
.biBitCount dw ? ; WORD BitCount dw ?
.biCompression dd ? ; DWORD Compression dd ?
.biSizeImage dd ? ; DWORD SizeImage dd ?
.biXPelsPerMeter dd ? ; LONG XPelsPerMeter dd ?
.biYPelsPerMeter dd ? ; LONG YPelsPerMeter dd ?
.biClrUsed dd ? ; DWORD ClrUsed dd ?
.biClrImportant dd ? ; DWORD ClrImportant dd ?
} ends
virtual at 0
BI BITMAPINFOHEADER
end virtual
align 4 align 4
proc init_cursor stdcall, dst:dword, src:dword proc init_cursor stdcall, dst:dword, src:dword
@ -47,11 +43,11 @@ proc init_cursor stdcall, dst:dword, src:dword
add esi, [esi+18] add esi, [esi+18]
mov eax, esi mov eax, esi
cmp [esi+BI.biBitCount], 24 cmp [esi+BITMAPINFOHEADER.BitCount], 24
je .img_24 je .img_24
cmp [esi+BI.biBitCount], 8 cmp [esi+BITMAPINFOHEADER.BitCount], 8
je .img_8 je .img_8
cmp [esi+BI.biBitCount], 4 cmp [esi+BITMAPINFOHEADER.BitCount], 4
je .img_4 je .img_4
.img_2: .img_2:
@ -226,9 +222,9 @@ proc init_cursor stdcall, dst:dword, src:dword
mov [pQuad], eax mov [pQuad], eax
add eax, 0xC00 add eax, 0xC00
mov [pAnd], eax mov [pAnd], eax
mov eax, [esi+BI.biWidth] mov eax, [esi+BITMAPINFOHEADER.Width]
mov [width], eax mov [width], eax
mov ebx, [esi+BI.biHeight] mov ebx, [esi+BITMAPINFOHEADER.Height]
shr ebx, 1 shr ebx, 1
mov [height], ebx mov [height], ebx
@ -300,7 +296,7 @@ create_cursor:
push ebx push ebx
mov ebx, eax mov ebx, eax
mov eax, CURSOR.sizeof mov eax, sizeof.CURSOR
call create_kernel_object call create_kernel_object
test eax, eax test eax, eax
jz .fail jz .fail