
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ x86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ OS рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдПрдХ рд╡рд╕рдВрдд рдХреА рд░рд╛рдд, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╡рд┐рдЪрд╛рд░ рдерд╛ - рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдУрдПрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ, рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдЗрдВрдЯреЗрд▓ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рд╕рд╛рд░реА рд╢рдХреНрддрд┐ рдХреЛ рдирд┐рдЪреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдХреБрдЫ рдФрд░ред рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдерд╛ рдФрд░ рдРрд╕реЗ OS рдХреЛ рд▓рд┐рдЦрдирд╛, рдЬреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬреНрдпрд╛рджрддрд┐рдпреЛрдВ рдкрд░ CPU рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдП рдмрд┐рдирд╛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХреЗред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдХреЗрд╡рд▓ рдЦреЗрд▓ рдХреА рд░реБрдЪрд┐ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЖрдкрдХреЛ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реБрдЖ, рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд▓рд┐рдЦрдиреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рдУрдПрд╕рдбреА рд╡рд┐рд╖рдп рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕реНрдХреНрд░реИрдЪ рд╕реЗ" - рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереАред рдореИрдВ рдмреЗрдВрдЬрд╛рдорд┐рди рд▓рдВрдЯ рдФрд░ OSDev рдлреЛрд░рдо рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдирдХреЗ рд╡рд┐рдХреА рдХреЗ рдкреНрд░рддрд┐ рдЕрдкрдиреА рдЧрд╣рд░реА рдХреГрддрдЬреНрдЮрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдмреЗрди рдиреЗ рдореБрдЭреЗ EHCI рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдЬрд┐рд╕рдиреЗ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдореЗрд░реЗ OS - USB рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛, рд╡реЗ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВ! рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рднреА рдерд╛, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдИрдПрд▓рдПрдл рдлрд╝рд╛рдЗрд▓ рдорд╛рдирдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдирд╣реАрдВред
рдЦреИрд░, рдЪрд▓рд┐рдП рдореБрджреНрджреЗ рдкрд░ рдЖрддреЗ рд╣реИрдВред
UPD: рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА
tyk рд╕рдореВрд╣ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдбреЙрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЛрд╕реНрдЯ рдФрд░ рдПрдХ рдЫрд╡рд┐ рднреА рд╣реИ (рдкреБрд░рд╛рдирд╛, рдЕрдм рдореИрдВ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ)
рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдм рдореЗрд░рд╛ рдУрдПрд╕ рдпреВрдПрд╕рдмреА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡, рдЪреВрд╣реЛрдВ, рдХреАрдмреЛрд░реНрдб, рдПрдПрдЪрд╕реАрдЖрдИ рдбрд┐рд╕реНрдХ, рдкреАрд╕реАрдЖрдИ рдЖрдИрдбреАрдИ рдирд┐рдпрдВрддреНрд░рдХ, рдПрдкреАрдЖрдИрд╕реА рдФрд░ рдПрд╕реАрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЛ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдлрд╛рдЗрд▓реЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдПрд╕рд╡реАрдЬреАрдП рдбреНрд░рд╛рдЗрд╡рд░ 0x118 VBE рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, DNS, DHCP, TCP, UPD, IPv4, HTTP, рдкреВрд░реНрдг FAT32 рдбреНрд░рд╛рдЗрд╡рд░, RTL8139 (69) рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдЗрдВрдЯреЗрд▓ рдЧрд┐рдЧрд╛рдмрд┐рдЯ рдИрдерд░рдиреЗрдЯ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЦрд┐рдбрд╝рдХреА рдкреНрд░рдгрд╛рд▓реА, рдПрд╕рд╡реАрдЬреАрдП рдХреЗ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде, рд╕реНрдХреНрд░реАрди рдХреЗ рдПрдХ рдкреВрд░реНрдг рд░рд┐рдбреНрд░рд╛ рдХреЗ рд╕рд╛рде 120 рдПрдлрдкреАрдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЖрдЗрдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдмреВрдЯрд▓реЛрдбрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреНрд╡рд┐рддреАрдпрдХ рдмреВрдЯрд▓реЛрдбрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ FAT32 рдХреЗ рд╕рд╛рде рдХрд░реНрдиреЗрд▓ рд╣реИред рджреВрд╕рд░рд╛ рдмреВрдЯрд▓реЛрдбрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХреВрджрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ рдЖрдИрдбреАрдЯреА рдХреЛ рд▓реЛрдб рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реВрдВ, рдЧреБрдард▓реА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕реАрдПрдордбреА рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред
рдХреЛрдИ рдкреВрдЫреЗрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ рдПрд╕рд╡реАрдЬреАрдП рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдкреНрд░рджрд░реНрд╢рди рдХреИрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛? рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдХреЛрдбрд╛рдВрддрд░рдХ, рдХреЛрдбрд╛рдВрддрд░рдХ рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХред рдПрд╕рдПрд╕рдИ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрд┐рдирд╛, рдЬреЛ рдореЗрдореЛрд░реА рдХреЙрдкреА рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд▓рд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ LFB (рд░реИрдЦрд┐рдХ рдлреНрд░реЗрдо рдмрдлрд░) рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдмрдлрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:
.byte 0x60#Save registers in stack
mov %2,%%ecx #Repeat count to ecx
mov %0,%%edi #Video memory start to edi
mov %1,%%esi #Video buffer start to esi
ww1sse2:
movaps (%%esi),%%xmm0 #Copy 16 bytes to xmm0 from buffer
movaps %%xmm0,(%%edi) #Copy from xmm0 to video memory
movaps 16(%%esi),%%xmm0 #16 again, but + 16 from current
movaps %%xmm0,16(%%edi) #16 again, but + 16 from current
movaps 32(%%esi),%%xmm0 #16 again, but + 32 from current
movaps %%xmm0,32(%%edi) #16 again, but + 32 from current
movaps 48(%%esi),%%xmm0 #16 again, but + 48 from current
movaps %%xmm0,48(%%edi) #16 again, but + 48 from current
add $64,%%edi #Add 64 bytes to edi
add $64,%%esi #Add 64 bytes to esi
dec%%ecx#Decrement count
#test %%ecx,%%ecx #Compare ecx with zero
jnz ww1sse2 #If not zero, repeat again
.byte 0x61 #Restore registers from stack
, , , .
тАФ ┬лWatermark Allocator┬╗. , , , ..
-, .
MS-DOS: тАФ . MBR , GPT .
тАФ - , тАФ .
, , тАФ , , : , VIM.
, : , , return , - . , , - , .
: , , , , . тАФ , , тАФ тАФ return'.
, , -, .
тАФ - , - - , , ( , ) тАФ , , .
!