
рд╣рдо рдЗрд╕реЗ
Embox рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдХреЗ
Elbrus рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
рдпрд╣ рд▓реЗрдЦ рдПрд▓реНрдмреНрд░рд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдПрдХ рддрдХрдиреАрдХреА рд▓реЗрдЦ рдХрд╛ рднрд╛рдЧ рджреЛ рд╣реИред
рдкрд╣рд▓реЗ рднрд╛рдЧ рдиреЗ рд╕реНрдЯреИрдХ, рд░рдЬрд┐рд╕реНрдЯрд░, рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдирд┐рдкрдЯрд╛ред рдЗрд╕ рднрд╛рдЧ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд▓реНрдмреНрд░рд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЦрдВрдб рдЯрд╛рдЗрдорд░, рдЗрдВрдЯрд░рдкреНрдЯ рдФрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдЧрд╛ред рдпрд╣, рдлрд┐рд░ рд╕реЗ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рдЖрдИрд╕реАрдПрд╕рдЯреА рдореЗрдВ
рдПрд▓рдмреНрд░рд╕ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрд▓реНрдмреНрд░рд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╛рдзрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдЯрд╛рдЗрдорд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо
рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдП, рд╣рдо рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛рдВ рдЬрд╛рдПрдВрдЧреЗред рдЙрдиреНрд╣реЛрдВрдиреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреА рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдХрдИ рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдХреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд░рдЬрд┐рд╕реНрдЯрд░ PSR (рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реНрдЯреЗрдЯрд╕ рд░рдЬрд┐рд╕реНрдЯрд░) рдФрд░ UPSR (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред PSR рдХреЗ рд▓рд┐рдП, exc_last_wish рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд▓реМрдЯрддреЗ рд╕рдордп exc_last_wish рдЕрдкрд╡рд╛рдж рдзреНрд╡рдЬ рд╣реИ, рдФрд░ UPSR рдХреЗ рд▓рд┐рдП, exc_d_interrupt VFDI рдСрдкрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рд▓рдВрдмрд┐рдд рдЕрд╡рд░реЛрдз рдзреНрд╡рдЬ рд╣реИ (рд╡рд┐рд▓рдВрдм рдЕрд╡рд░реЛрдзрди рдзреНрд╡рдЬ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ)ред
рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
#define UPSR_DI (1 << 3) rrs %upsr, %r1 ors %r1, UPSR_DI, %r1 rws %r1, %upsr vfdi
рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ, рд╕рд┐рд╕реНрдЯрдо рдХрд╣реАрдВ рдирд╣реАрдВ рд▓рдЯрдХрд╛, рдХреБрдЫ рднреА рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕реЗ рддрдм рджреЗрдЦрд╛ рдЬрдм рд╣рдордиреЗ рдЯрд╛рдЗрдорд░ рд╕реЗ рд░реБрдХрд╛рд╡рдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рддрдм рдХрдИ рдШрдЯрдХ рдереЗ, рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдХреБрдЫ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдХреНрд░рдорд┐рдХ рдкреНрд░рдЧрддрд┐ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рдерд╛, рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдЕрдкрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдПрд▓реНрдмреНрд░рд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рд░реБрдХрд╛рд╡рдЯ рдФрд░ рдЕрдкрд╡рд╛рдж рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред рд╣рдордиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдиреЗ рдлрд┐рд░ рднреА рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ "рдХрдЪрд░рд╛" рдерд╛ рдЬрд╣рд╛рдВ рдЙрд╕рдиреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╡рд╣ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо Embox рдЫрд╡рд┐ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдерд╛ - рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝рдВрдХреНрд╢рдиред
рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд┐рдПред рдкреНрд░рд╡реЗрд╢ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ ()ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рднреА рд╕реАрдкреАрдпреВ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ, рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ (), рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдХреЛрд░ рд╕рдХреНрд░рд┐рдп рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдмрд╛рдХреА рд╕рднреА рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдХрд╛рдЙрдВрдЯрд░ рд╕реАрдкреАрдпреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рд╣рд┐рдЯ рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐
рдПрд▓реНрдмреНрд░рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
cpuid = __e2k_atomic32_add(1, &last_cpuid); if (cpuid > 1) { while(1); } memcpy((void*)0, &_t_entry, 0x1800); kernel_start();
рдРрд╕рд╛ рдХрд┐рдпрд╛
if (entries_count >= CPU_COUNT) { e2k_trap_handler(regs); ... } e2k_wait_all(); entries_count = __e2k_atomic32_add(1, &entries_count); if (entries_count > 1) { cpu_idle(); } e2k_kernel_start(); }
рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдордиреЗ рд░реБрдХрд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреА (рдмрд╕ рдкреНрд░рд┐рдВрдЯрдл рдХреА рдорджрдж рд╕реЗ рд╣рдордиреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдЫрд╛рдкреА)ред
рдпрд╣рд╛рдБ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рдореЗрдВ рдЕрдкрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрддреЗ рдкрд░ рдерд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рд╕рд╣реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдереЗред рдореБрдЭреЗ рд▓рд┐рдВрдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ, рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛, рдЕрд░реНрдерд╛рдд, рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдХреЛрдбрд╛рдВрддрд░рдХ рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдВрдХрд░ рдХрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╣рд┐рд╕реНрд╕рд╛ рдЕрдм рджрд┐рдЦрддрд╛ рд╣реИ:
.text : { _start = .; _t_entry = .; *(.ttable_entry0) . = _t_entry + 0x800; *(.ttable_entry1) . = _t_entry + 0x1000; *(.ttable_entry2) . = _t_entry + 0x1800; _t_entry_end = .; *(.e2k_entry) *(.cpu_idle) }
рдЕрд░реНрдерд╛рддреН, рд╣рдордиреЗ рдЕрдкрд╡рд╛рдж рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред Cpu_idle рдЕрдиреБрднрд╛рдЧ рдЙрди CPU рдХреЗ рд▓рд┐рдП рднреА рд╡рд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рд╡рд╣ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рдХреНрд░рд┐рдп рдХрд░реНрдиреЗрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ Embox рдЪрд▓реЗрдЧрд╛:
static void e2k_kernel_start(void) { extern void kernel_start(void); int psr; while (idled_cpus_count < CPU_COUNT - 1) ; ... e2k_upsr_write(e2k_upsr_read() & ~UPSR_FE); kernel_start(); }
рдЦреИрд░, VFDI рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХрд╛ рдирдВрдмрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдЕрдкрд╡рд╛рдж рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрд▓реНрдмреНрд░рд╕ рдореЗрдВ TIR рдЗрдВрдЯрд░рдкреНрдЯ рдЗрдВрдлреЙрд░реНрдореЗрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░ (рдЯреНрд░реИрдк рдЗрдиреНрдлреЛ рд░рдЬрд┐рд╕реНрдЯрд░) рд╣реИред рдЙрдирдореЗрдВ рдЕрдВрддрд┐рдо рдХреБрдЫ рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдпрд╛рдиреА рдЯреНрд░реЗрд╕ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧред рдЯреНрд░реЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЗрдХрдЯреНрдард╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмрд╛рдзрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп "рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ"ред рдЯреАрдЖрдИрдЖрд░ рдореЗрдВ рдирд┐рдореНрди (64 рдмрд┐рдЯреНрд╕) рдФрд░ рдЙрдЪреНрдЪ (64 рдмрд┐рдЯреНрд╕) рд╣рд┐рд╕реНрд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХрдо рд╢рдмреНрдж рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЭрдВрдбреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдЪреНрдЪ рд╢рдмреНрдж рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрд╡рд╛рдж рдФрд░ рд╡рд░реНрддрдорд╛рди рдЯреАрдЖрдИрдЖрд░ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рдерд╛ред рддрджрдиреБрд╕рд╛рд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, exc_d_interrupt 4 рдмрд┐рдЯ рд╣реИред
рдиреЛрдЯ рд╣рдореЗрдВ рдЕрднреА рднреА TIRs рдХреА рдЧрд╣рд░рд╛рдИ (рд╕рдВрдЦреНрдпрд╛) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЧрд▓рддрдлрд╣рдореА рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
тАЬрдЯреАрдЖрдИрдЖрд░ рдореЗрдореЛрд░реА рдбреЗрдкреНрде, рдпрд╛рдиреА рдЯреНрд░реИрдк рдЗрдВрдлреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ
TIR_NUM рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
рд╕рднреА рд╕рдВрднрд╡ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рдирд╛ред TIR_NUM = 19; "
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдо рдЧрд╣рд░рд╛рдИ = 1 рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ TIR0 рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
MCST рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдиреЗ рд╣рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ "рд╕рдЯреАрдХ" рд╡реНрдпрд╡рдзрд╛рди рдХреЗ рд▓рд┐рдП TIR0 рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдХреЗрд╡рд▓ рдЯрд╛рдЗрдорд░ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд░реНрдЬ / рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрдирдкреБрдЯ рдкрд░ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 5 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рддреАрди рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рддреИрдпрд╛рд░реА рд░рдЬрд┐рд╕реНрдЯрд░ ctpr [1,2,3] рд╣реИрдВ, рдФрд░ рджреЛ рдЪрдХреНрд░ рдирд┐рдпрдВрддреНрд░рдг рд░рдЬрд┐рд╕реНрдЯрд░ ILCR (рдЪрдХреНрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд░рдЬрд┐рд╕реНрдЯрд░) рдФрд░ LSR (рдЪрдХреНрд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд░рдЬрд┐рд╕реНрдЯрд░) рд╣реИрдВред
.type ttable_entry0,@function ttable_entry0: setwd wsz = 0x10, nfx = 1; rrd %ctpr1, %dr1 rrd %ctpr2, %dr2 rrd %ctpr3, %dr3 rrd %ilcr, %dr4 rrd %lsr, %dr5 getsp -(5 * 8), %dr0 std %dr1, [%dr0 + PT_CTRP1] std %dr2, [%dr0 + PT_CTRP2] std %dr3, [%dr0 + PT_CTRP3] std %dr4, [%dr0 + PT_ILCR] std %dr5, [%dr0 + PT_LSR] disp %ctpr1, e2k_entry ct %ctpr1
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рднреА рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрди 5 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдЗрд╕реЗ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ:
#define RESTORE_COMMON_REGS(regs) \ ({ \ uint64_t ctpr1 = regs->ctpr1, ctpr2 = regs->ctpr2, \ ctpr3 = regs->ctpr3, lsr = regs->lsr, \ ilcr = regs->ilcr; \ \ E2K_SET_DSREG(ctpr1, ctpr1); \ E2K_SET_DSREG(ctpr2, ctpr2); \ E2K_SET_DSREG(ctpr3, ctpr3); \ E2K_SET_DSREG(lsr, lsr); \ E2K_SET_DSREG(ilcr, ilcr); \ })
рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ DONE рдСрдкрд░реЗрд╢рди (рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд░рд┐рдЯрд░реНрди) рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдмрд╣рд╛рд▓реА рдХреЗ рдмрд╛рдж рднреВрд▓ рди рдЬрд╛рдПрдВред рдпрд╣ рдСрдкрд░реЗрд╢рди рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмрд╛рдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо рдЗрд╕реЗ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ:
#define E2K_DONE \ do { \ asm volatile ("{nop 3} {done}" ::: "ctpr3"); \ } while (0)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЗрди рджреЛ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реА рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ рд░реБрдХрд╛рд╡рдЯ рд╕реЗ рд╡рд╛рдкрд╕реА рдХрд░рддреЗ рд╣реИрдВред
e2k_trap_handler(regs); RESTORE_COMMON_REGS(regs); E2K_DONE;
рдмрд╛рд╣рд░реА рд╡реНрдпрд╡рдзрд╛рди
рдЖрдЗрдП рдмрд╛рд╣рд░реА рдЕрд╡рд░реЛрдзреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрд▓реНрдмреНрд░рд╕ рдореЗрдВ, APIC (рдпрд╛ рдЗрд╕рдХреЗ рдПрдирд╛рд▓реЙрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрд╛рдзрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, Embox рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдЪреБрдирдирд╛ рд╕рдВрднрд╡ рдерд╛ред рджреЛ рдЯрд╛рдЗрдорд░ рд╣реИрдВ, рдПрдХ рдЬреЛ
рдкреАрдЖрдИрдЯреА рдХреЗ рд╕рдорд╛рди рд╣реИ, рджреВрд╕рд░рд╛
рд▓реИрдкрд┐рдХ рдЯрд╛рдЗрдорд░ рднреА рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдФрд░ рд╡рд╣ рджреЛрдиреЛрдВ рд╕рд░рд▓ рд▓рдЧ рд░рд╣реЗ рдереЗ, рдФрд░ рд╡рд╣ рдФрд░ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Embox рдореЗрдВ рдореМрдЬреВрдж рдерд╛, рд▓реЗрдХрд┐рди LAPIC рдЯрд╛рдЗрдорд░ рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдиреЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рджреЗрдЦрд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ PIT рдЯрд╛рдЗрдорд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдЧреИрд░-рдорд╛рдирдХ рд▓рдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ APIC рдФрд░ LAPIC рдмрддрд╛рдпрд╛, рдЬреЛ рдореВрд▓ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдереЗред рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореВрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
APIC рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ PSR / UPSR рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреЛрдиреЛрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдмрд╛рд╣рд░реА рд░реБрдХрд╛рд╡рдЯ рдФрд░ рдЧреИрд░-рдирдХрд╛рдмрдкреЛрд╢ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ PSR рд░рдЬрд┐рд╕реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП
рд╕реНрдерд╛рдиреАрдп рд╣реИ (рдпрд╣
рдкрд╣рд▓реЗ рддрдХрдиреАрдХреА рднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА)ред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рдмрд╛рдж рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдкрдиреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╕рд╡рд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдХреИрд╕реЗ рд╡реНрдпрд╡рдзрд╛рди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкреАрдПрд╕рдЖрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдкрдХреЛ рдпреВрдкреАрдПрд╕рдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИ (рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╣рдо Embox рдХреЛрд░ рд▓реЙрдЧрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд╕реАрдзреЗ UPSR (рдорд╣рддреНрд╡рдкреВрд░реНрдг!) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ:
asm volatile ("rrs %%psr, %0" : "=r"(psr) :); psr |= (PSR_IE | PSR_NMIE | PSR_UIE); asm volatile ("rws %0, %%psr" : : "ri"(psr)); kernel_start();
рдХрд┐рд╕реА рддрд░рд╣ рд╕рдВрдпреЛрдЧ рд╕реЗ рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ ... рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ :)
рддреЛ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдкреНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдЬрд╛рдПрдВред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦрд╛ рд╣реИ, рдЕрдкрд╡рд╛рдж рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА TIR рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ 32 рд╡реЗрдВ рдмрд┐рдЯ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд╣рд░реА рд╡реНрдпрд╡рдзрд╛рди рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИред
рдЯрд╛рдЗрдорд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреА рдкреАрдбрд╝рд╛ рдХреЗ рдмрд╛рдж, рдХреЛрдИ рд░реБрдХрд╛рд╡рдЯ рдирд╣реАрдВ рдЖрдИред рдХрд╛рд░рдг рдХрд╛рдлреА рдордиреЛрд░рдВрдЬрдХ рдерд╛ред рдПрд▓реНрдмреНрд░рд╕ рдореЗрдВ 64-рдмрд┐рдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реИрдВ, рдФрд░ APIC рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдкрддрд╛ uint32_t рдореЗрдВ рдорд┐рд▓рд╛, рдЗрд╕реАрд▓рд┐рдП рд╣рдордиреЗ рдЙрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0xF0000000 рдХреЛ рдПрдХ рд╕реВрдЪрдХ рдкрд░ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ, рддреЛ рдЖрдкрдХреЛ 0xF0000000 рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 0xFFFFFFFFF0000000 рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЗрдВрдЯ рд╕рд╛рдЗрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ред
рдпрд╣рд╛рдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, uintptr_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, C99 рдорд╛рдирдХ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЯреАрдЖрдИрдЖрд░ рдореЗрдВ рдЙрдард╛рдП рдЧрдП 32 рд╡реЗрдВ рдмрд┐рдЯ рдХреЛ рджреЗрдЦрд╛, рд╣рдордиреЗ рдпрд╣ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдЗрдВрдЯрд░рдкреНрдЯ рдирдВрдмрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рдирд┐рдХрд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ x86 рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ, рдпрд╣ LAPIC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрд▓реНрдмреНрд░рд╕ рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдкреНрдЯ рдирдВрдмрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ LAPIC рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛:
#define APIC_VECT (0xFEE00000 + 0xFF0)
рдЬрд╣рд╛рдВ 0xFEE00000 LAPIC рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЖрдзрд╛рд░ рдкрддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рд╣реИ, рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдФрд░ LAPIC рдЯрд╛рдЗрдорд░ рджреЛрдиреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдПрд▓рдмреНрд░рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рджреЛ рддрдХрдиреАрдХреА рднрд╛рдЧреЛрдВ рдореЗрдВ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рднреА рдУрдПрд╕ рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдкреНрдЯ рдФрд░ рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рджрд░рдЕрд╕рд▓, рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЗрд╕рдХреА рдЧрд╡рд╛рд╣реА рджреЗрддреЗ рд╣реИрдВред

рдПрд▓реНрдмреНрд░рд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдЕрдВрддрд┐рдо рддрдХрдиреАрдХреА рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЕрдм рд╣рдо Elbrus рдореЗрдВ рдореЗрдореЛрд░реА рдореИрдиреЗрдЬрдореЗрдВрдЯ (MMU) рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЬрд▓реНрдж рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЖрднрд╛рд╕реА рдкрддреЗ рдХреЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдкрддрд╛ рд╕реНрдерд╛рди рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдХреИрд╢рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдпрд╛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдЦ рдореЗрдВ рдЬреЛ рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд╕рдм рдХреБрдЫ
Embox рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИред рд╕рдЪ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓
MCST рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рд╡рд╣рд╛рдБ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред