diff --git a/po/uk.po b/po/uk.po index c79aacc9..63f75c22 100644 --- a/po/uk.po +++ b/po/uk.po @@ -19818,6 +19818,165 @@ msgid "" "\tb 2b\n" "```" msgstr "" +"```armasm\n" +"/*\n" +" * Copyright 2023 Google LLC\n" +" *\n" +" * Licensed under the Apache License, Version 2.0 (the \"License\");\n" +" * you may not use this file except in compliance with the License.\n" +" * You may obtain a copy of the License at\n" +" *\n" +" * https://www.apache.org/licenses/LICENSE-2.0\n" +" *\n" +" * Unless required by applicable law or agreed to in writing, software\n" +" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +" * See the License for the specific language governing permissions and\n" +" * limitations under the License.\n" +" */\n" +"\n" +".macro adr_l, reg:req, sym:req\n" +"\tadrp \\reg, \\sym\n" +"\tadd \\reg, \\reg, :lo12:\\sym\n" +".endm\n" +"\n" +".macro mov_i, reg:req, imm:req\n" +"\tmovz \\reg, :abs_g3:\\imm\n" +"\tmovk \\reg, :abs_g2_nc:\\imm\n" +"\tmovk \\reg, :abs_g1_nc:\\imm\n" +"\tmovk \\reg, :abs_g0_nc:\\imm\n" +".endm\n" +"\n" +".set .L_MAIR_DEV_nGnRE,\t0x04\n" +".set .L_MAIR_MEM_WBWA,\t0xff\n" +".set .Lmairval, .L_MAIR_DEV_nGnRE | (.L_MAIR_MEM_WBWA << 8)\n" +"\n" +"/* Розмір гранул 4 KiB для TTBR0_EL1. */\n" +".set .L_TCR_TG0_4KB, 0x0 << 14\n" +"/* Розмір гранул 4 KiB для TTBR1_EL1. */\n" +".set .L_TCR_TG1_4KB, 0x2 << 30\n" +"/* Вимкнути обхід таблиці перекладу для TTBR1_EL1, замість цього генерувати " +"помилку трансляції. */\n" +".set .L_TCR_EPD1, 0x1 << 23\n" +"/* Обхід таблиці перекладу для TTBR0_EL1 є внутрішньо спільним. */\n" +".set .L_TCR_SH_INNER, 0x3 << 12\n" +"/*\n" +" * Обхід таблиці трансляції для TTBR0_EL1 є зовнішнім зворотним записом " +"зчитуванням-виділенням записом-виділенням\n" +" * з кешуванням.\n" +" */\n" +".set .L_TCR_RGN_OWB, 0x1 << 10\n" +"/*\n" +" * Обхід таблиці трансляції для TTBR0_EL1 є внутрішнім зворотним записом " +"зчитуванням-виділенням записом-виділенням\n" +" * з кешуванням.\n" +" */\n" +".set .L_TCR_RGN_IWB, 0x1 << 8\n" +"/* Зміщення розміру для TTBR0_EL1 становить 2**39 байт (512 Гігабайт). */\n" +".set .L_TCR_T0SZ_512, 64 - 39\n" +".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ." +"L_TCR_RGN_OWB\n" +".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ." +"L_TCR_T0SZ_512\n" +"\n" +"/* Кешування доступу до інструкцій етапу 1 не порушується. */\n" +".set .L_SCTLR_ELx_I, 0x1 << 12\n" +"/* Помилка вирівнювання SP, якщо SP не вирівняно до межі 16 байт. */\n" +".set .L_SCTLR_ELx_SA, 0x1 << 3\n" +"/* Кешування доступу до даних на етапі 1 не порушується. */\n" +".set .L_SCTLR_ELx_C, 0x1 << 2\n" +"/* EL0 і EL1 етапу 1 MMU увімкнено. */\n" +".set .L_SCTLR_ELx_M, 0x1 << 0\n" +"/* Privileged Access Never не змінюється, коли робиться виключення з EL1. " +"*/\n" +".set .L_SCTLR_EL1_SPAN, 0x1 << 23\n" +"/* Інструкція SETEND відключена на EL0 у режимі aarch32. */\n" +".set .L_SCTLR_EL1_SED, 0x1 << 8\n" +"/* У режимі aarch32 на EL0 відключені різні ІТ-інструкції. */\n" +".set .L_SCTLR_EL1_ITD, 0x1 << 7\n" +".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << " +"28) | (0x1 << 29)\n" +".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ." +"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n" +".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ." +"L_SCTLR_EL1_RES1\n" +"\n" +"/**\n" +" * Це загальна точка входу для образу. Вона виконує операції, необхідні для " +"підготовки\n" +" * завантаженого образу до запуску. Зокрема, обнуляє секцію bss за допомогою " +"регістрів x25 і вище,\n" +" * готує стек, вмикає плаваючу крапку і налаштовує вектор виключень. Вона " +"зберігає x0-x3 для\n" +" * точки входу у Rust, оскільки вони можуть містити параметри завантаження.\n" +" */\n" +".section .init.entry, \"ax\"\n" +".global entry\n" +"entry:\n" +"\t/* Завантажує та застосовує конфігурацію керування пам'яттю, готові до " +"ввімкнення MMU та кешів. */\n" +"\tadrp x30, idmap\n" +"\tmsr ttbr0_el1, x30\n" +"\n" +"\tmov_i x30, .Lmairval\n" +"\tmsr mair_el1, x30\n" +"\n" +"\tmov_i x30, .Ltcrval\n" +"\t/* Копіюємо підтримуваний діапазон PA у TCR_EL1.IPS. */\n" +"\tmrs x29, id_aa64mmfr0_el1\n" +"\tbfi x30, x29, #32, #4\n" +"\n" +"\tmsr tcr_el1, x30\n" +"\n" +"\tmov_i x30, .Lsctlrval\n" +"\n" +"\t/*\n" +"\t * Перевіряємо все до завершення цього етапу, а потім робимо недійсними " +"всі потенційно застарілі\n" +"\t * локальні записи TLB, перш ніж вони почнуть використовуватися.\n" +"\t */\n" +"\tisb\n" +"\ttlbi vmalle1\n" +"\tic iallu\n" +"\tdsb nsh\n" +"\tisb\n" +"\n" +"\t/*\n" +"\t * Налаштовуємо sctlr_el1, щоб увімкнути MMU і кеш, і не продовжуємо, доки " +"це не буде зроблено.\n" +"\t */\n" +"\tmsr sctlr_el1, x30\n" +"\tisb\n" +"\n" +"\t/* Вимкнути перехоплення доступу з плаваючою комою в EL1. */\n" +"\tmrs x30, cpacr_el1\n" +"\torr x30, x30, #(0x3 << 20)\n" +"\tmsr cpacr_el1, x30\n" +"\tisb\n" +"\n" +"\t/* Обнулити секцію bss. */\n" +"\tadr_l x29, bss_begin\n" +"\tadr_l x30, bss_end\n" +"0:\tcmp x29, x30\n" +"\tb.hs 1f\n" +"\tstp xzr, xzr, [x29], #16\n" +"\tb 0b\n" +"\n" +"1:\t/* Готуємо стек. */\n" +"\tadr_l x30, boot_stack_end\n" +"\tmov sp, x30\n" +"\n" +"\t/* Настроюємо вектор виключень. */\n" +"\tadr x30, vector_table_el1\n" +"\tmsr vbar_el1, x30\n" +"\n" +"\t/* Виклик коду Rust. */\n" +"\tbl main\n" +"\n" +"\t/* Цикл з постійним очікуванням переривань. */\n" +"2:\twfi\n" +"\tb 2b\n" +"```" #: src/exercises/bare-metal/rtc.md msgid "_exceptions.S_ (you shouldn't need to change this):" @@ -20621,22 +20780,35 @@ msgid "" "process\n" " /// as device memory and not have any other aliases.\n" msgstr "" +"/// Створює новий екземпляр драйвера RTC для пристрою PL031 за заданою\n" +" /// базовою адресою.\n" +" ///\n" +" /// # Безпека\n" +" ///\n" +" /// Вказана базова адреса має вказувати на регістри керування MMIO\n" +" /// пристрою PL031, які мають бути відображені у адресному просторі " +"процесу\n" +" /// як пам'ять пристрою і не мати інших псевдонімів.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Reads the current RTC value.\n" -msgstr "" +msgstr "/// Зчитує поточне значення RTC.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "" "// Safe because we know that self.registers points to the control\n" " // registers of a PL031 device which is appropriately mapped.\n" msgstr "" +"// Безпечно, тому що ми знаємо, що self.registers вказує на керуючі\n" +" // регістри пристрою PL031, який відповідним чином відображено.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "" "/// Writes a match value. When the RTC value matches this then an interrupt\n" " /// will be generated (if it is enabled).\n" msgstr "" +"/// Записує значення збігу. Коли значення RTC збігається з цим, буде\n" +" /// згенеровано переривання (якщо його увімкнено).\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "" @@ -20644,6 +20816,8 @@ msgid "" "not\n" " /// the interrupt is enabled.\n" msgstr "" +"/// Повертає, чи відповідає регістр збігу значенню RTC, незалежно від того,\n" +" /// увімкнено переривання чи ні.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "" @@ -20652,6 +20826,10 @@ msgid "" " /// This should be true if and only if `matched` returns true and the\n" " /// interrupt is masked.\n" msgstr "" +"/// Повертає, чи є переривання в очікуванні.\n" +" ///\n" +" /// Це значення має бути істинним тоді і тільки тоді, коли `matched`\n" +" /// повертає істину і переривання замасковане.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "" @@ -20661,10 +20839,14 @@ msgid "" "the\n" " /// interrupt is disabled.\n" msgstr "" +"/// Встановлює або очищує маску переривання.\n" +" ///\n" +" /// Якщо маска дорівнює істині, переривання увімкнено; якщо ні - \n" +" /// переривання вимкнено.\n" #: src/exercises/bare-metal/solutions-afternoon.md msgid "/// Clears a pending interrupt, if any.\n" -msgstr "" +msgstr "/// Очищає очікуване переривання, якщо таке є.\n" #: src/concurrency.md msgid "Welcome to Concurrency in Rust"