diff --git a/packages/app-android/app/i18n/de.json b/packages/app-android/app/i18n/de.json
index 2a4dc60f..d243271f 100644
--- a/packages/app-android/app/i18n/de.json
+++ b/packages/app-android/app/i18n/de.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Verbesserte App-Darstellung und Zugänglichkeit",
"Enhanced the hex monitor address range input for easier value editing": "Verbesserte Eingabe des Adressbereichs im Hex-Monitor",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Mit diesem Wissen solltest du erkennen können, dass die Anweisung LDA #$01 den Hexadezimalwert $01 in das Register A lädt. Ich werde im nächsten Abschnitt näher auf Register eingehen.",
+ "Even Odd": "Gerade oder ungerade",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Auch wenn dies eine einfache Version sein wird, wird der Code wesentlich umfangreicher sein als alle bisherigen Beispiele. Wir müssen mehrere Speicheradressen für die verschiedenen Aspekte des Spiels im Auge behalten. Wir können die notwendige Buchführung im Programm immer noch selbst durchführen, wie zuvor, aber in größerem Umfang wird das schnell mühsam und kann auch zu schwer zu findenden Fehlern führen. Stattdessen lassen wir jetzt den Assembler einen Teil der alltäglichen Arbeit für uns erledigen.",
"Example submitted for review": "Beispiel zur Überprüfung eingereicht",
"Examples": "Beispiele",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Ein Problem wurde behoben, bei dem der Zurück-Button im Lernbereich im Desktop- und Tablet-Modus immer sichtbar war, auch wenn keine Unterseite geöffnet war.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Build-Fehler unter PostmarketOS behoben, verbessert Kompatibilität mit Mobilgeräten",
"Follow system style": "Systemstil verwenden",
+ "Font": "Schrift",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Für Linux gibt es jetzt auch ein AppImage: eine Datei, keine Installation, praktisch auf einer Distribution, für die wir kein Paket bauen.",
"Found %d label.": "%d Label gefunden.",
"Found %d labels.": "%d Labels gefunden.",
@@ -245,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Anweisungen in der Assemblersprache sind wie eine kleine Sammlung vordefinierter Funktionen. Alle Anweisungen nehmen null oder ein Argument. Hier ist etwas kommentierter Quellcode, um einige verschiedene Anweisungen vorzustellen:",
"Interactive tutorial": "Interaktives Tutorial",
"Interactive tutorials guide you from beginner to advanced": "Interaktive Tutorials führen dich vom Anfänger zum Fortgeschrittenen",
+ "Interface font": "Schrift der Oberfläche",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Interrupt Flag: Wenn gesetzt, maskiert (deaktiviert) alle maskierbaren Interrupts (IRQ). Nur Non-Maskable Interrupts (NMI) können noch auftreten. Wird für kritische Codeabschnitte verwendet, die nicht unterbrochen werden dürfen.",
"Introduction": "Einführung",
"JMP": "JMP",
@@ -379,9 +382,11 @@
"Supporter": "Unterstützer",
"Syntax error line %d: %s": "Syntaxfehler in Zeile %d: %s",
"System font": "Systemstandard",
+ "System font, GNOME size": "Systemschrift, GNOME-Größe",
"Teal": "Türkis",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Wir freuen uns über die finnische Übersetzung, freundlicherweise beigesteuert von Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Teste deine Kreationen auf einer virtuellen Spielkonsole",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Prüft Bit 0 von A mit LSR und BCC und legt als Ergebnis 1 oder 0 in A ab",
"Thank you for using open source software.": "Danke, dass du Open-Source-Software nutzt.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "Der 6502 verwendet einen 16-Bit-Adressbus, was bedeutet, dass dem Prozessor 65536 Bytes Speicher zur Verfügung stehen. Denk daran, dass ein Byte durch zwei Hex-Zeichen dargestellt wird, sodass die Speicheradressen im Allgemeinen als $0000 - $ffff dargestellt werden. Es gibt verschiedene Möglichkeiten, sich auf diese Speicheradressen zu beziehen, wie unten beschrieben.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "Der BIT-Opcode ist ähnlich wie AND, aber die Berechnung wird nur verwendet, um das Zero-Flag zu setzen - das eigentliche Ergebnis wird verworfen. Das Zero-Flag wird nur gesetzt, wenn das Ergebnis der UND-Verknüpfung des Akkumulators mit dem Argument Null ist. Wenn wir Zweierpotenzen betrachten, wird das Zero-Flag nur gesetzt, wenn die beiden Zahlen nicht gleich sind. Zum Beispiel ist 0001 AND 0001 nicht Null, aber 0001 AND 0010 ist Null.",
@@ -392,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Der Stack Pointer verwaltet den Aufruf-Stack für Unterprogramme und Unterbrechungen. Er beginnt bei $FF (Stack-Spitze) und wächst nach unten. Wird für PUSH/PULL-Operationen, JSR/RTS-Aufrufe und Unterbrechungsbehandlung verwendet. Kritisch für verschachtelte Funktionsaufrufe.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Das X Index Register wird für indexierte Adressierungsmodi und Zähloperationen verwendet. Es kann Schleifenzähler, Array-Indizes halten und ist für den Zugriff auf Speicherplätze relativ zu einer Basisadresse mit X als Offset unerlässlich. Special: TSX/TXS Transfer X zum/vom Stackpointer.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Das Y‑Indexregister ist X ähnlich und hat keine speziellen Funktionen. Wird häufig für indizierte Adressierung und Datenbewegung verwendet.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Die App ist für die GNOME-Oberflächenschrift gestaltet. Auf anderen Systemen wird sie mit der Schrift des jeweiligen Systems dargestellt, die meist kleiner ist.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Der schwarze Spielkonsolenbildschirm sollte jetzt drei farbige \"Pixel\" oben links zeigen.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Der Code-Block unten enthält den gesamten Quellcode des Spiels. Ich werde in den folgenden Abschnitten erklären, wie es funktioniert.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "Die Wirkung davon ist, die zwei niedrigstwertigen Bits des Akkumulators zu maskieren und die anderen auf Null zu setzen. Dies konvertiert eine Zahl im Bereich von 0-255 in eine Zahl im Bereich von 0-3.",
diff --git a/packages/app-android/app/i18n/en.default.json b/packages/app-android/app/i18n/en.default.json
index 760d1121..e8e2284a 100644
--- a/packages/app-android/app/i18n/en.default.json
+++ b/packages/app-android/app/i18n/en.default.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Enhanced app presentation and accessibility",
"Enhanced the hex monitor address range input for easier value editing": "Enhanced the hex monitor address range input for easier value editing",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.",
+ "Even Odd": "Even Odd",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.",
"Example submitted for review": "Example submitted for review",
"Examples": "Examples",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Fixed build error on PostmarketOS, improving mobile compatibility",
"Follow system style": "Follow system style",
+ "Font": "Font",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.",
"Found %d label.": "Found %d label.",
"Found %d labels.": "Found %d labels.",
@@ -245,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:",
"Interactive tutorial": "Interactive tutorial",
"Interactive tutorials guide you from beginner to advanced": "Interactive tutorials guide you from beginner to advanced",
+ "Interface font": "Interface font",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.",
"Introduction": "Introduction",
"JMP": "JMP",
@@ -379,9 +382,11 @@
"Supporter": "Supporter",
"Syntax error line %d: %s": "Syntax error line %d: %s",
"System font": "System font",
+ "System font, GNOME size": "System font, GNOME size",
"Teal": "Teal",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Test your creations on a virtual game console",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result",
"Thank you for using open source software.": "Thank you for using open source software.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.",
@@ -392,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "The black game console screen now should show three coloured \"pixels\" at the top left.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "The code block below contains the entire source code of the game. I'll explain how it works in the following sections.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.",
@@ -472,9 +478,5 @@
"wdm-output": "wdm-output",
"which represents the indirectly-addressed memory locations $0411, $0410 and $040f (three pixels in the middle of the display). I'm labouring this point, but it's important to fully grok how indirect addressing works.": "which represents the indirectly-addressed memory locations $0411, $0410 and $040f (three pixels in the middle of the display). I'm labouring this point, but it's important to fully grok how indirect addressing works.",
"வணக்கம்! We are happy to welcome Tamil translations, contributed by தமிழ்நேரம். நன்றி!": "வணக்கம்! We are happy to welcome Tamil translations, contributed by தமிழ்நேரம். நன்றி!",
- "Font": "Font",
- "Interface font": "Interface font",
- "System font, GNOME size": "System font, GNOME size",
- "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.",
"app.name": "Learn 6502 Assembly"
}
\ No newline at end of file
diff --git a/packages/app-android/app/i18n/es.json b/packages/app-android/app/i18n/es.json
index b004ff6c..024e37c9 100644
--- a/packages/app-android/app/i18n/es.json
+++ b/packages/app-android/app/i18n/es.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Mejorada la presentación de la app y la accesibilidad",
"Enhanced the hex monitor address range input for easier value editing": "Mejorada la entrada del rango de direcciones en el monitor hex para facilitar la edición",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Con ese conocimiento, deberías ver que la instrucción LDA #$01 carga el valor hexadecimal $01 en el registro A. Entraré en más detalle sobre los registros en la siguiente sección.",
+ "Even Odd": "Par o impar",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Aunque será una versión sencilla, el código será considerablemente mayor que en los ejemplos anteriores. Debemos llevar el control de varias ubicaciones de memoria a la vez para los distintos aspectos del juego. Podríamos seguir manteniendo el registro manualmente, como antes, pero a mayor escala se vuelve tedioso y propenso a errores sutiles. En su lugar, dejaremos que el ensamblador haga parte del trabajo rutinario por nosotros.",
"Example submitted for review": "Ejemplo enviado para revisión",
"Examples": "Ejemplos",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Se corrigió un problema en el que el botón de retroceso en la sección de aprendizaje siempre era visible en modo escritorio y tableta, incluso cuando no había una subpágina abierta.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Corregido un error de compilación en PostmarketOS, mejorando la compatibilidad móvil",
"Follow system style": "Seguir el estilo del sistema",
+ "Font": "Fuente",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Para Linux ahora también hay una AppImage: un archivo, sin instalación, útil en una distribución para la que no publicamos paquetes.",
"Found %d label.": "Se encontró %d etiqueta.",
"Found %d labels.": "Se encontraron %d etiquetas.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Ir entre secciones es más complicado, ya que hay que tener en cuenta también el byte más significativo. Por ejemplo, bajar desde $02e1 debería llevar a $0301. Por suerte, esto es bastante fácil de lograr. Sumar $20 a $e1 da $01 y activa el bit de acarreo. Si el bit de acarreo estaba activo, sabemos que también hay que incrementar el byte más significativo.",
"Got a cool 6502 example?\nShare it with the community!": "¿Tienes un ejemplo genial de 6502?\n¡Compártelo con la comunidad!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "¿Tienes tu propia creación 6502? ¡Compártela con la comunidad! Ahora puedes enviar tus ejemplos de código directamente desde la aplicación. Solo presiona el botón de compartir y crearemos automáticamente un issue y pull request de GitHub para ti.",
+ "Great start — you finished the first chapter!": "¡Buen comienzo: has terminado el primer capítulo!",
"Green": "Verde",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "El hebreo es además nuestro primer idioma escrito de derecha a izquierda: gracias a las pruebas y contribuciones de Menachem, la aplicación ahora admite diseños de derecha a izquierda y está preparada para más idiomas RTL.",
"Help": "Ayuda",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Las instrucciones en ensamblador son como un conjunto pequeño de funciones predefinidas. Todas aceptan cero o un argumento. Aquí hay código comentado para introducir varias instrucciones distintas:",
"Interactive tutorial": "Tutorial interactivo",
"Interactive tutorials guide you from beginner to advanced": "Los tutoriales interactivos te guían de principiante a avanzado",
+ "Interface font": "Fuente de la interfaz",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Indicador de interrupción: Cuando está activo, enmascara (desactiva) todas las interrupciones enmascarables (IRQ). Solo pueden ocurrir interrupciones no enmascarables (NMI). Se usa para secciones críticas de código que no deben interrumpirse.",
"Introduction": "Introducción",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Al reiniciar (simulador): P = $30 (bit5 y B activados; D e I desactivados)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Una vez que los valores se han desplazado por la serpiente, debemos decidir qué hacer con la cabeza. Primero se carga la dirección en A. LSR significa «desplazamiento lógico a la derecha», es decir, desplazar todos los bits una posición a la derecha. El bit menos significativo pasa al indicador de acarreo, así que si el acumulador es 1, tras LSR será 0 y el indicador de acarreo quedará activado.",
"Open Assembly File": "Abrir archivo de ensamblador",
+ "Open Source": "Código abierto",
"Open...": "Abrir...",
"Opened %s": "Abierto: %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Configuración de Flatpak optimizada eliminando permisos innecesarios",
@@ -373,11 +378,16 @@
"Stopped": "Detenido",
"Style": "Estilo",
"Submit": "Enviar",
+ "Support": "Apoyar",
+ "Supporter": "Patrocinador",
"Syntax error line %d: %s": "Error de sintaxis en la línea %d: %s",
"System font": "Predeterminado del sistema",
+ "System font, GNOME size": "Fuente del sistema, tamaño de GNOME",
"Teal": "Verde azulado",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Nos alegra dar la bienvenida a la traducción al finés, amablemente contribuida por Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Prueba tus creaciones en una consola de juegos virtual",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Comprueba el bit 0 de A con LSR y BCC y deja 1 o 0 en A como resultado",
+ "Thank you for using open source software.": "Gracias por usar software de código abierto.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "El 6502 usa un bus de direcciones de 16 bits, lo que significa que el procesador tiene 65536 bytes de memoria disponibles. Recuerda que un byte se representa con dos caracteres hexadecimales, por lo que las direcciones de memoria suelen representarse como $0000 - $ffff. Hay varias formas de referirse a estas direcciones, como se detalla a continuación.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "La operación BIT es similar a AND, pero el cálculo solo se usa para establecer el indicador cero; el resultado se descarta. El indicador cero se establece únicamente si el resultado de hacer AND entre el acumulador y el argumento es cero. Al tratar con potencias de dos, el indicador cero solo se establece si los dos números no son iguales. Por ejemplo, 0001 AND 0001 no es cero, pero 0001 AND 0010 sí lo es.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "La subrutina init delega en dos subrutinas: initSnake y generateApplePosition. initSnake establece la dirección y la longitud de la serpiente y luego carga las ubicaciones iniciales de memoria de la cabeza y el cuerpo. El par de bytes en $10 contiene la posición en pantalla de la cabeza, el par en $12 la del único segmento del cuerpo y $14 la de la cola (la cola es el último segmento del cuerpo y se dibuja en negro para mantener el movimiento). Esto ocurre en el siguiente código:",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "El puntero de pila gestiona la pila de llamadas para subrutinas e interrupciones. Empieza en $FF (parte superior de la pila) y crece hacia abajo. Se usa para operaciones PUSH/PULL, llamadas JSR/RTS y gestión de interrupciones. Crítico para llamadas de funciones anidadas.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "El registro índice X se usa para modos de direccionamiento indexado y operaciones de conteo. Puede almacenar contadores de bucle e índices de arrays, y es esencial para acceder a ubicaciones de memoria relativas a una dirección base usando X como desplazamiento. Especial: TSX/TXS transfiere X hacia/desde el puntero de pila.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "El registro índice Y es similar a X y no tiene funciones especiales. Se usa comúnmente para direccionamiento indexado y movimiento de datos.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "La aplicación está diseñada para la fuente de interfaz de GNOME. En otros sistemas se dibuja con la fuente de ese sistema, que suele ser más pequeña.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "La pantalla negra de la consola de juegos ahora debería mostrar tres \"píxeles\" de colores en la esquina superior izquierda.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "El bloque de código siguiente contiene todo el código fuente del juego. Explicaré cómo funciona en las siguientes secciones.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "El efecto de esto es enmascarar los dos bits menos significativos del acumulador, poniendo los demás a cero. Esto convierte un número en el rango 0–255 a un número en el rango 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Escribe y edita código con un editor integrado",
"Yellow": "Amarillo",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Puedes pensar en la pantalla como cuatro franjas horizontales de 32 × 8 píxeles. Estas franjas se mapean a $0200-$02ff, $0300-$03ff, $0400-$04ff y $0500-$05ff. Las primeras filas de píxeles son $0200-$021f, $0220-$023f, $0240-$025f, etc.",
+ "You supported this open source project by buying the app. Thank you!": "Has apoyado este proyecto de código abierto al comprar la aplicación. ¡Gracias!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Ya has visto TAX. Probablemente puedas adivinar qué hacen TAY, TXA y TYA, pero escribe algo de código para comprobar tus suposiciones.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "Tu archivo tiene cambios sin guardar. Se perderán si no los guardas.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Indicador cero: Se establece cuando el resultado de una operación es cero. Es esencial para ramificaciones condicionales: la mayoría de saltos condicionales (BEQ, BNE) consultan este indicador para decidir el flujo según si un valor es cero.",
diff --git a/packages/app-android/app/i18n/fi.json b/packages/app-android/app/i18n/fi.json
index 3de34046..50e2e7a3 100644
--- a/packages/app-android/app/i18n/fi.json
+++ b/packages/app-android/app/i18n/fi.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Parannettu sovelluksen esitystapaa ja saavutettavuutta",
"Enhanced the hex monitor address range input for easier value editing": "Paranneltu heksamonitorin osoitealueen syöttöä arvojen muokkaamisen helpottamiseksi",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Tämän tiedon avulla sinun pitäisi nähdä, että käsky LDA #$01 lataa heksadesimaaliarvon $01 rekisteriin A. Käsittelen rekistereitä tarkemmin seuraavassa osiossa.",
+ "Even Odd": "Parillinen vai pariton",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Vaikka tämä on yksinkertainen versio, koodi on huomattavasti laajempi kuin kaikki aiemmat esimerkit. Meidän täytyy seurata useita muistiosoitteita yhdessä pelin eri osien vuoksi. Voisimme edelleen tehdä tarvittavan kirjanpidon itse kuten aiemmin, mutta suuremmassa mittakaavassa siitä tulee nopeasti tylsää ja se voi johtaa vaikeasti havaittaviin virheisiin. Sen sijaan annamme nyt assemblerin tehdä osan arkipäiväisestä työstä puolestamme.",
"Example submitted for review": "Esimerkki lähetetty arvioitavaksi",
"Examples": "Esimerkit",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Korjattu ongelma, jossa opintosivun takaisin-painike oli aina näkyvissä työpöytä- ja tablettitilassa, vaikka alisivua ei ollut avoinna.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Korjattu käännösvirhe PostmarketOS:ssa, mikä parantaa mobiiliyhteensopivuutta",
"Follow system style": "Seuraa järjestelmän tyyliä",
+ "Font": "Fontti",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Linuxille on nyt saatavilla myös AppImage: yksi tiedosto, ei asennusta, kätevä jakelussa, jolle emme tee omaa pakettia.",
"Found %d label.": "Löydettiin %d otsikko.",
"Found %d labels.": "Löydettiin %d otsikkoa.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Osioiden välillä liikkuminen on monimutkaisempaa, koska meidän täytyy ottaa huomioon myös merkitsevin tavu. Esimerkiksi alaspäin siirtyminen osoitteesta $02e1 pitäisi johtaa osoitteeseen $0301. Onneksi tämä on melko helppoa toteuttaa. $20:n lisääminen $e1:een antaa tulokseksi $01 ja asettaa siirtobitin. Jos siirtobitti oli asetettu, tiedämme, että myös merkitsevin tavu täytyy kasvattaa.",
"Got a cool 6502 example?\nShare it with the community!": "Onko sinulla siisti 6502-esimerkki?\nJaa se yhteisön kanssa!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Onko sinulla oma hieno 6502-luomus? Jaa se yhteisön kanssa! Voit nyt lähettää koodiesimerkejäsi suoraan sovelluksesta. Paina vain jaa-painiketta, niin luomme automaattisesti GitHub-issuen ja pull requestin puolestasi.",
+ "Great start — you finished the first chapter!": "Hyvä alku – olet suorittanut ensimmäisen luvun!",
"Green": "Vihreä",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Heprea on myös ensimmäinen oikealta vasemmalle kirjoitettava kielemme: Menachemin testauksen ja avustusten ansiosta sovellus tukee nyt oikealta vasemmalle -asetteluja ja on valmiina useammille RTL-kielille.",
"Help": "Ohje",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Assemblykielen konekäskyt ovat kuin pieni joukko ennalta määriteltyjä funktioita. Kaikki käskyt ottavat nolla tai yhden argumentin. Tässä on kommentoitua lähdekoodia muutaman eri käskyn esittelyksi:",
"Interactive tutorial": "Vuorovaikutteinen opas",
"Interactive tutorials guide you from beginner to advanced": "Vuorovaikutteiset oppaat ohjaavat sinut aloittelijasta edistyneeksi",
+ "Interface font": "Käyttöliittymän fontti",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Keskeytyslippu: Kun asetettu, estää (poistaa käytöstä) kaikki peruutettavat keskeytykset (IRQ). Vain ei-peruutettavat keskeytykset (NMI) voivat silti tapahtua. Käytetään kriittisille koodiosioille, joita ei saa keskeyttää.",
"Introduction": "Esittely",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Nollauksen yhteydessä (simulaattori): P = $30 (bitti 5 ja B asetettu; D ja I nollattu)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Kun arvot on siirretty madon suuntaan, meidän täytyy selvittää, mitä tehdä päälle. Suunta ladataan ensin A:han. LSR tarkoittaa \"logical shift right\" eli \"siirrä kaikki bitit yhden paikan oikealle\". Vähiten merkitsevä bitti siirtyy siirtolippuun, joten jos akkumulaattori on 1, LSR:n jälkeen se on 0 ja siirtolippu on asetettu.",
"Open Assembly File": "Avaa Assembly-tiedosto",
+ "Open Source": "Avoin lähdekoodi",
"Open...": "Avaa...",
"Opened %s": "Avattu %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Optimoitu Flatpak-konfiguraatio poistamalla tarpeettomat käyttöoikeudet",
@@ -373,10 +378,16 @@
"Stopped": "Pysäytetty",
"Style": "Tyyli",
"Submit": "Lähetä",
+ "Support": "Tue projektia",
+ "Supporter": "Tukija",
"Syntax error line %d: %s": "Syntaksivirhe rivillä %d: %s",
+ "System font": "Järjestelmän oletus",
+ "System font, GNOME size": "Järjestelmän fontti, GNOMEn koko",
"Teal": "Sinivihreä",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Olemme iloisia voidessamme toivottaa tervetulleeksi suomenkieliset käännökset, ystävällisesti Jiri Grönroosin toimittamana. Kiitos!",
"Test your creations on a virtual game console": "Testaa luomuksiasi virtuaalisella pelikonsolilla",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Testaa A:n bitin 0 komennoilla LSR ja BCC ja tallentaa tuloksen, 1 tai 0, A:han",
+ "Thank you for using open source software.": "Kiitos, että käytät avoimen lähdekoodin ohjelmistoja.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 käyttää 16-bittistä osoiteväylää, mikä tarkoittaa, että suorittimella on käytettävissään 65536 tavua muistia. Muista, että tavu esitetään kahdella heksadesimaalimerkeillä, joten muistiosoitteet esitetään yleensä muodossa $0000 - $ffff. Näihin muistiosoitteisiin voidaan viitata eri tavoin, kuten alla on kuvattu.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "BIT-opcoodi on samankaltainen kuin AND, mutta laskutoimitusta käytetään vain nollalipun asettamiseen – varsinainen tulos hylätään. Nollalippu asetetaan vain, jos akkumulaattorin ja argumentin AND-operaation tulos on nolla. Kun tarkastelemme kahden potensseja, nollalippu asetetaan vain, jos kaksi lukua eivät ole samoja. Esimerkiksi 0001 AND 0001 ei ole nolla, mutta 0001 AND 0010 on nolla.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "init-aliohjelma kutsuu kahta aliohjelmaa: initSnake ja generateApplePosition. initSnake asettaa madon suunnan, pituuden ja lataa sitten madon pään ja vartalon alkumuistisijainnit. Tavupari osoitteessa $10 sisältää pään näyttösijainnin, pari osoitteessa $12 sisältää ainoan vartalo-osan sijainnin, ja $14 sisältää hännän sijainnin (häntä on vartalon viimeinen osa ja se piirretään mustana, jotta mato liikkuu). Tämä tapahtuu seuraavassa koodissa:",
@@ -386,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Pino-osoitin hallitsee kutsupinoa aliohjelmille ja keskeytyksille. Se alkaa arvosta $FF (pinon huippu) ja kasvaa alaspäin. Käytetään PUSH/PULL-operaatioihin, JSR/RTS-kutsuihin ja keskeytysten käsittelyyn. Kriittinen sisäkkäisille funktiokutsuille.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "X-indeksirekisteriä käytetään indeksoituihin osoitteistustiloihin ja laskuoperaatioihin. Se voi sisältää silmukkalaskureita, taulukkoindeksejä ja on välttämätön muistiosoitteiden käyttämiseen perusosoitteeseen nähden X:n toimiessa siirtymänä. Erityistä: TSX/TXS siirtävät X:n pino-osoittimeen/pino-osoittimesta.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Y-indeksirekisteri on samanlainen kuin X eikä sillä ole erityistoimintoja. Yleisesti käytetään indeksoituun osoitteistukseen ja datan siirtoon.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Sovellus on suunniteltu GNOMEn käyttöliittymäfontille. Muissa järjestelmissä se piirretään kyseisen järjestelmän fontilla, joka on yleensä pienempi.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Mustan pelikonsolin näytön pitäisi nyt näyttää kolme värillistä \"pikseliä\" vasemmassa yläkulmassa.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Alla oleva koodilohko sisältää pelin koko lähdekoodin. Selitän sen toiminnan seuraavissa osioissa.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "Tämän vaikutus on peittää akkumulaattorin kaksi vähiten merkitsevää bittiä ja nollata muut. Tämä muuntaa luvun väliltä 0–255 luvuksi väliltä 0–3.",
@@ -450,6 +462,7 @@
"Write and edit code with a built-in code editor": "Kirjoita ja muokkaa koodia sisäänrakennetulla koodimuokkaimella",
"Yellow": "Keltainen",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Näytön voi ajatella neljänä vaakasuuntaisena kaistana, joissa on 32 × 8 pikseliä. Nämä kaistat vastaavat osoitteita $0200-$02ff, $0300-$03ff, $0400-$04ff ja $0500-$05ff. Pikselien ensimmäiset rivit ovat $0200-$021f, $0220-$023f, $0240-$025f jne.",
+ "You supported this open source project by buying the app. Thank you!": "Tuit tätä avoimen lähdekoodin projektia ostamalla sovelluksen. Kiitos!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Olet nähnyt TAX:n. Voit luultavasti arvata, mitä TAY, TXA ja TYA tekevät, mutta kirjoita koodia testataksesi oletuksesi.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "TIedostossa on tallentamattomia muutoksia. Muutokset katoavat, jos et tallenna niitä.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Nollalippu: Asetetaan, kun operaation tulos on nolla. Välttämätön ehdolliselle haarautumiselle – useimmat ehdolliset hyppykäskyt (BEQ, BNE) tarkistavat tämän lipun määrittääkseen ohjelman kulun sen perusteella, onko arvo nolla.",
diff --git a/packages/app-android/app/i18n/fr.json b/packages/app-android/app/i18n/fr.json
index 029b7692..aa30beb5 100644
--- a/packages/app-android/app/i18n/fr.json
+++ b/packages/app-android/app/i18n/fr.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Amélioration de la présentation et de l'accessibilité de l'application",
"Enhanced the hex monitor address range input for easier value editing": "Amélioration de la saisie de la plage d'adresses du moniteur hexadécimal pour faciliter l'édition des valeurs",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Avec ces connaissances, vous devriez pouvoir voir que l'instruction LDA #$01 charge la valeur hexadécimale $01 dans le registre A. J'entrerai plus en détail sur les registres dans la section suivante.",
+ "Even Odd": "Pair ou impair",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Bien que ce soit une version simple, le code sera substantiellement plus grand que tous les exemples précédents. Nous devrons suivre plusieurs emplacements mémoire ensemble pour les différents aspects du jeu. Nous pouvons toujours faire nous-mêmes la comptabilité nécessaire tout au long du programme, comme avant, mais à plus grande échelle, cela devient rapidement fastidieux et peut aussi conduire à des bugs difficiles à repérer. À la place, nous allons maintenant laisser l'assembleur faire une partie du travail fastidieux pour nous.",
"Example submitted for review": "Exemple soumis pour révision",
"Examples": "Exemples",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Correction d'un problème où le bouton de retour dans la section d'apprentissage était toujours visible en mode bureau et tablette, même lorsqu'aucune sous-page n'était ouverte.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Correction d'une erreur de compilation sur PostmarketOS, améliorant la compatibilité mobile",
"Follow system style": "Suivre le style du système",
+ "Font": "Police",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Pour Linux, il y a maintenant aussi une AppImage : un fichier, aucune installation, utile sur une distribution pour laquelle nous ne fournissons pas de paquet.",
"Found %d label.": "Trouvé %d étiquette.",
"Found %d labels.": "Trouvé %d étiquettes.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Le passage entre les sections est plus compliqué, car nous devons également tenir compte de l'octet le plus significatif. Par exemple, descendre de $02e1 devrait mener à $0301. Heureusement, c'est assez facile à réaliser. Ajouter $20 à $e1 donne $01 et active le bit de retenue. Si le bit de retenue est activé, nous savons que nous devons aussi incrémenter l'octet le plus significatif.",
"Got a cool 6502 example?\nShare it with the community!": "Vous avez un bel exemple 6502 ?\nPartagez-le avec la communauté !",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Vous avez votre propre création 6502 ? Partagez-la avec la communauté ! Vous pouvez maintenant soumettre vos exemples de code directement depuis l'application. Appuyez simplement sur le bouton de partage et nous créerons automatiquement un issue et une pull request GitHub pour vous.",
+ "Great start — you finished the first chapter!": "Beau début : vous avez terminé le premier chapitre !",
"Green": "Vert",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "L'hébreu est aussi notre première langue s'écrivant de droite à gauche : grâce aux tests et aux contributions de Menachem, l'application prend désormais en charge les mises en page de droite à gauche, la préparant à d'autres langues RTL.",
"Help": "Aide",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Les instructions en langage assembleur sont comme un petit ensemble de fonctions prédéfinies. Toutes les instructions prennent zéro ou un argument. Voici du code source annoté pour présenter quelques instructions différentes :",
"Interactive tutorial": "Tutoriel interactif",
"Interactive tutorials guide you from beginner to advanced": "Des tutoriels interactifs vous guident du niveau débutant au niveau avancé",
+ "Interface font": "Police de l'interface",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Drapeau d'interruption : Lorsqu'il est activé, masque (désactive) toutes les interruptions masquables (IRQ). Seules les interruptions non masquables (NMI) peuvent encore se produire. Utilisé pour les sections critiques du code qui ne doivent pas être interrompues.",
"Introduction": "Introduction",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "À la réinitialisation (simulateur) : P = $30 (bit5 et B activés ; D et I effacés)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Une fois que les valeurs ont été décalées le long du serpent, nous devons déterminer quoi faire avec la tête. La direction est d'abord chargée dans A. LSR signifie \"décalage logique à droite\", ou \"décaler tous les bits d'une position vers la droite\". Le bit le moins significatif est décalé dans le drapeau de retenue, donc si l'accumulateur est 1, après LSR il est 0, avec le drapeau de retenue activé.",
"Open Assembly File": "Ouvrir un fichier assembleur",
+ "Open Source": "Open source",
"Open...": "Ouvrir...",
"Opened %s": "Ouvert %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Configuration Flatpak optimisée en supprimant les permissions inutiles",
@@ -373,11 +378,16 @@
"Stopped": "Arrêté",
"Style": "Style",
"Submit": "Soumettre",
+ "Support": "Soutenir",
+ "Supporter": "Soutien",
"Syntax error line %d: %s": "Erreur de syntaxe ligne %d : %s",
"System font": "Valeur par défaut du système",
+ "System font, GNOME size": "Police système, taille GNOME",
"Teal": "Sarcelle",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa ! Nous avons le plaisir d'accueillir la traduction finnoise, aimablement contribuée par Jiri Grönroos. Kiitos !",
"Test your creations on a virtual game console": "Testez vos créations sur une console de jeu virtuelle",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Teste le bit 0 de A avec LSR et BCC, puis place 1 ou 0 dans A selon le résultat",
+ "Thank you for using open source software.": "Merci d'utiliser des logiciels open source.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "Le 6502 utilise un bus d'adresse 16 bits, ce qui signifie qu'il y a 65536 octets de mémoire disponibles pour le processeur. Rappelez-vous qu'un octet est représenté par deux caractères hexadécimaux, donc les emplacements mémoire sont généralement représentés comme $0000 - $ffff. Il existe différentes façons de faire référence à ces emplacements mémoire, comme détaillé ci-dessous.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "L'opcode BIT est similaire à AND, mais le calcul n'est utilisé que pour définir le drapeau zéro - le résultat actuel est ignoré. Le drapeau zéro est défini seulement si le résultat du ET logique de l'accumulateur avec l'argument est zéro. Quand nous regardons les puissances de deux, le drapeau zéro ne sera défini que si les deux nombres ne sont pas identiques. Par exemple, 0001 AND 0001 n'est pas zéro, mais 0001 AND 0010 l'est.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "La sous-routine init délègue à deux sous-routines, initSnake et generateApplePosition. initSnake définit la direction du serpent, sa longueur, puis charge les emplacements mémoire initiaux de la tête et du corps du serpent. La paire d'octets à $10 contient l'emplacement écran de la tête, la paire à $12 contient l'emplacement du segment de corps unique, et $14 contient l'emplacement de la queue (la queue est le dernier segment du corps et est dessinée en noir pour maintenir le serpent en mouvement). Cela se produit dans le code suivant :",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Le pointeur de pile gère la pile d'appels pour les sous-routines et les interruptions. Il commence à $FF (sommet de la pile) et croît vers le bas. Utilisé pour les opérations PUSH/PULL, les appels JSR/RTS et la gestion des interruptions. Essentiel pour les appels de fonctions imbriquées.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Le registre d'index X est utilisé pour les modes d'adressage indexé et les opérations de comptage. Il peut contenir des compteurs de boucle, des indices de tableau, et est essentiel pour accéder à des emplacements mémoire relatifs à une adresse de base en utilisant X comme décalage. Spécial : TSX/TXS transfèrent X vers/depuis le pointeur de pile.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Le registre d'index Y est similaire à X et n'a pas de fonctions spéciales. Couramment utilisé pour l'adressage indexé et le déplacement de données.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "L'application est conçue pour la police d'interface de GNOME. Sur les autres systèmes, elle est affichée avec la police de ce système, qui est généralement plus petite.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "L'écran noir de la console de jeu devrait maintenant afficher trois \"pixels\" colorés en haut à gauche.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Le bloc de code ci-dessous contient tout le code source du jeu. Je vais expliquer comment il fonctionne dans les sections suivantes.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "L'effet de ceci est de masquer les deux bits de poids faible de l'accumulateur, en mettant les autres à zéro. Cela convertit un nombre dans la plage 0–255 en un nombre dans la plage 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Écrivez et modifiez du code avec un éditeur de code intégré",
"Yellow": "Jaune",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Vous pouvez considérer l'écran comme quatre bandes horizontales de 32 × 8 pixels. Ces bandes se mappent à $0200-$02ff, $0300-$03ff, $0400-$04ff et $0500-$05ff. Les premières rangées de pixels sont $0200-$021f, $0220-$023f, $0240-$025f, etc.",
+ "You supported this open source project by buying the app. Thank you!": "Vous avez soutenu ce projet open source en achetant l'application. Merci !",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Vous avez vu TAX. Vous pouvez probablement deviner ce que font TAY, TXA et TYA, mais écrivez du code pour tester vos hypothèses.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "Votre fichier a des modifications non sauvegardées. Les modifications seront perdues si vous ne les sauvegardez pas.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Drapeau Zéro : Défini quand le résultat d'une opération est zéro. Essentiel pour les branchements conditionnels - la plupart des instructions de saut conditionnel (BEQ, BNE) vérifient ce drapeau pour déterminer le flux du programme selon qu'une valeur est zéro.",
diff --git a/packages/app-android/app/i18n/he.json b/packages/app-android/app/i18n/he.json
index 5f2481f2..a8b4574a 100644
--- a/packages/app-android/app/i18n/he.json
+++ b/packages/app-android/app/i18n/he.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "שיפורי תצוגה ונגישות",
"Enhanced the hex monitor address range input for easier value editing": "שופר בורר תווך־הכתובות במנטר ההקסדצימלי, להקל על שינוי ערכים",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "עם הידע הזה, אתם תוכלו לראות שהפקודה LDA #$01 טוענת את הערך ההקסדצימלי $01 לאוגר A. בקטע הבא אני ארחיב יותר על אוגרים.",
+ "Even Odd": "זוגי או אי־זוגי",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "למרות שזו תהיה גרסה פשוטה, הקוד יהיה גדול משמעותית מכל הדוגמאות הקודמות. אנחנו נצתרך לעקוב אחר כמה נקודות זיכרון ביחד בשביל שלל חלקי המשחק. אנחנו עדיין יכולים לרשום ולסדר בעצמינו את כל הפרטים החשובים במהלך התוכנה כמו קודם, אבל בקנה מידה גדול, זה מהר מאוד נהיה מעייף ועלול לגרום לבאגים קשים לאיתור. במקום, אנחנו ניתן עכשיו למאסף לעשות חלק מהעבודה הקשה בשבילנו.",
"Example submitted for review": "הדוגמה נשלחה לבדיקה",
"Examples": "דוגמאות",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "תוקנה בעיה שכפתור החזרה באזור הלימוד תמיד היה גלוי במצב שולחן עבודה וטאבלט, גם כששום נושא לא היה פתוח.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "תוקנה שגיאת בנייה ב־PostmarketOS, משפר את התאימות לניידים",
"Follow system style": "השתמש בסגנון המערכת",
+ "Font": "גופן",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "ל־Linux יש עכשיו גם AppImage: קובץ אחד, בלי התקנה, שימושי בהפצה שאין לנו חבילה עבורה.",
"Found %d label.": "נמצאה תווית %d.",
"Found %d labels.": "נמצאו %d תוויות.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "לעבור בין קטעים זה קצת יותר מסובך, כי צריך לקחת בחשבון גם את הבייט המשמעותי. לדוגמה, ירידה מטה מ־$02e1 אמורה להוביל אל $0301. למזלנו, זה די קל לביצוע. כשמוסיפים $20 ל־$e1 מקבלים $01 ודגל הנשא מוגדר. אם דגל הנשא הוגדר, אנחנו יודעים שצריך להגדיל גם את הבייט המשמעותי.",
"Got a cool 6502 example?\nShare it with the community!": "יש לכם דוגמה מגניבה עם 6502?\nשתפו אותה עם הקהילה!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "יצרתם משהו מגניב עם 6502? שתפו אותו עם הקהילה! עכשיו אתם יכולים לשתף את דוגמאות הקוד שלכם ישר מהיישום. פשוט הקישו על כפתור השיתוף, ואנחנו ניצור אוטומטית סוגיה ובקשת שילוב ב־Github בשבילכם.",
+ "Great start — you finished the first chapter!": "התחלה מצוינת – סיימתם את הפרק הראשון!",
"Green": "ירוק",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "עברית היא גם שפת הימין-לשמאל הראשונה שלנו: הודות לבדיקות ולתרומות של מנחם, היישום תומך כעת בפריסות מימין לשמאל ומוכן לשפות RTL נוספות.",
"Help": "עזרה",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "פקודות בשפת סף הם כמו סט קטן של פונקציות מוגדרות מראש. כל הפקודות או שלוקחות ארגומנט אחד או שלא. הנה לכם קצת קוד עם הערות שיציג מעט פקודות שונות:",
"Interactive tutorial": "מדריך אינטראקטיבי",
"Interactive tutorials guide you from beginner to advanced": "מדריכים אינטראקטיבים יובילו אתכם ממתחילים למתקדמים",
+ "Interface font": "גופן הממשק",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "דגל הפסיקה: כאשר מוגדר, ממסך (מבטל) כל פסיקה שניתנת למיסוך (IRQ). רק פסיקות שאינם ניתנות למיסוך (NMI) יכולים עדיין לקרות. משמש לקטעי קוד חשובים שאין להפסיק במהלכם.",
"Introduction": "מבוא",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "לאחר איפוס (סימולטור): P = $30 (ביט 5 ו־B מוגדרים; D ו־I ריקים)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "לאחר שהערכים זזו במורד הנחש, אנחנו צריכים לחשוב מה לעשות עם הראש. קודם טוענים את הכיוון ל־A. LSR פירושו \"הוזזה לוגית ימינה\", או \"הוזז את כל הביטים מקום אחד לימין\". הביט השולי זז לדגל הנשא, אז עם הסוכם מכיל 1, אחרי LSR הוא יכיל 0, ודגל הנשא יוגדר.",
"Open Assembly File": "פתח קובץ קוד סף",
+ "Open Source": "קוד פתוח",
"Open...": "פתיחה...",
"Opened %s": "%s נפתח",
"Optimized Flatpak configuration by removing unnecessary permissions": "ייעול תצורת Flatpak בהסרת הרשאות מיותרות",
@@ -373,10 +378,16 @@
"Stopped": "עצר",
"Style": "עיצוב",
"Submit": "שלח",
+ "Support": "תמיכה",
+ "Supporter": "תומך",
"Syntax error line %d: %s": "שגיאת תחביר בשורה %d: %s",
+ "System font": "ברירת המחדל של המערכת",
+ "System font, GNOME size": "גופן המערכת, בגודל של GNOME",
"Teal": "טורקיז",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! אנחנו שמחים להזמין את התרגום לפינית. באדיבותו של Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "בידקו את היצירות שלכם על קונסולת משחק ווירטואלית",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "בודק את ביט 0 של A באמצעות LSR ו-BCC, ומציב 1 או 0 ב-A בהתאם לתוצאה",
+ "Thank you for using open source software.": "תודה שאתם משתמשים בתוכנה בקוד פתוח.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "ה־6502 משתמש בנתיב מידע של 16 ביטים, זאת אומרת ש־65536 בתים של זיכרון זמינים למעבד. זיכרו שבייט מיוצג עם שתי תווים הקסדצימלים, אז בדרך כלל מציגים את כתובות הזיכרון כטווח $0000 - $ffff. ישנם דרכים רבות לפנות לכתובות האלה, כמפורט למטה.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "הפקודה BIT זהה ל־AND, אבל החישוב משמש רק להגדרת דגל האפס - התוצאה עצמה נזרקת. דגל האפס מוגדר רק אם התוצאה של פעולת AND בין הסוכם לפרמטר היא אפס. כשעוסקים רק בחזקות של שתיים, דגל האפס יוגדר רק אם שני המספרים שונים. לדוגמה, 0001 AND 0001 לא שווה אפס, אבל 0001 AND 0010 כן שווה אפס.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "התהליכון init מוביל לשתי תהליכונים, initSnake ו־generateApplePosition. initSnake מגדיר את כיוון הנחש, ואורכו, ואז טוען את נקודות הזכרון ההתחלתיות של גוף וראש הנחש. זוג הבתים ב־$10 מכיל את מיקום הראש במסך, הזוג ב־$12 מכיל את המיקום של פלג גוף בודד, ו־$14 מכיל את מיקומו של הזנב (הזנב הוא פלג הגוף האחרון וצובעים אותו בשחור כדי שהנחש יראה זז). זה קורה בקוד הבא:",
@@ -386,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "מצביע המחסנית מנהל את מחסנית הקריאות לתהליכונים ופסיקות. הוא מתחיל ב $FF (ראש המחסנית) וגדל כלפי מטה. משמש בפעולות PUSH/PULL, קריאות JSR/RTS, וניהול פסיקות. חיוני לקריאת פונקציות בתוך פונקציות.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "אוגר האינדוּקס X משמש למצבי מיעון מאוּנדקסים ולפעולות ספירה. הוא יכול להכיל מונה ללולאות, אינדקס למערכים, והוא חשוב לגישה אל נקודות זיכרון ביחס לכתובת בסיס כש־X משמש כהיסט. מיוחד: TSX/TXS מחליפים בין X למצביע המחסנית.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "אוגר האינדוּקס Y דומה ל־X ואין לו שום יכולות מיוחדות. בדרך כלל משתמשים בו לאינדוּקס כתובות והוזזת נתונים.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "האפליקציה מעוצבת עבור גופן הממשק של GNOME. במערכות אחרות היא מוצגת בגופן של אותה מערכת, שבדרך כלל קטן יותר.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "עכשיו המסך השחור של קונסולת המשחק אמור להציג שלושה \"פיקסלים\" צבועים למעלה משמאל.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "הקוד למטה כולל את כל קוד המקור של המשחק. אני יסביר איך הוא עובד בפסקאות הבאות.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "התוצאה של זה היא שמירת שתי הביטים השולִים של הסוכם, ואיפוס השאר. זה ממיר מספר מטווח של 0–255 למספר בטווח של 0–3.",
@@ -450,6 +462,7 @@
"Write and edit code with a built-in code editor": "כתבו ועירכו קוד עם עורך קוד מובנה",
"Yellow": "צהוב",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "אתם יכולים לחשוב המסך כארבע רצועות אופקיות של 32 × 8 פיקסלים. הרצועות האלה מותאמות ל־$0200-$02ff, $0300-$03ff, $0400-$04ff ו־$0500-$05ff. שורות הפיקסלים הראשונות הם $0200-$021f, $0220-$023f, $0240-$025f, וכו'.",
+ "You supported this open source project by buying the app. Thank you!": "תמכתם בפרויקט קוד פתוח זה על ידי רכישת האפליקציה. תודה!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "ראיתם את TAX. בטח תוכלו לנחש מה עושים TAY, TXA ו־TYA, אבל תכתבו קצת קוד לבדוק אם נחשתם נכון.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "בקובץ שלך ישנם שינויים לא שמורים. ללא שמירה השינויים יאבדו.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "דגל האפס: מוגדר כשהתוצאה של פעולה היא אפס. חיוני להסתעפות מותנית - רוב פקודות הקפיצה המותנות (BEQ, BNE) בודקים את הדגל הזה לראות אם ערך מסוים היה אפס כדי לקבוע את זרימת התוכנה.",
diff --git a/packages/app-android/app/i18n/ia.json b/packages/app-android/app/i18n/ia.json
index 1b064cd1..02554265 100644
--- a/packages/app-android/app/i18n/ia.json
+++ b/packages/app-android/app/i18n/ia.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Meliorate presentation del app e accessibilitate",
"Enhanced the hex monitor address range input for easier value editing": "Meliorate le entrata de rango de adresse de monitor hex pro plus facile edition de valores",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Equipate con ille cognoscentia, tu deberea poter vider que le instruction LDA #$01 carga le valor hex $01 in le registro A. Io entrara in plus detalios sur registros in le section sequente.",
+ "Even Odd": "Par o impar",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Ben que iste sera un version simple, le codice sera substantialmente plus grande que tote le exemplos previe. Nos habera besonio de traciar plure locationes de memoria insimul pro le varie aspectos del joco. Nos pote ancora facer le comptabilitate necessari per tote le programma nos mesme, como antea, ma sur un scala plus grande que rapidemente deveni tediose e pote tamben ducer a bugs que es difficile de deteger. In vice nos ora lassara le assemblator facer alcun del labor mundane pro nos.",
"Example submitted for review": "Exemplo submittite pro revision",
"Examples": "Exemplos",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Corrigite un problema ubi le button retro in le section de apprender era sempre visibile in modo de scriptorio e tabletta, mesmo quando nulle subpagina era aperite.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Corrigite error de construction sur PostmarketOS, meliorante compatibilitate mobile",
"Follow system style": "Sequer stilo de systema",
+ "Font": "Typo de litteras",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Pro Linux il ha ora anque un AppImage: un sol file, sin installation, utile sur un distribution pro le qual nos non offere un pacchetto.",
"Found %d label.": "Trovate %d etiquetta.",
"Found %d labels.": "Trovate %d etiquettas.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Ir inter sectiones es plus complicate, proque nos debe tamben tener in conto le byte plus significante. Pro exemplo, ir bassum de $02e1 deberea ducer a $0301. Felicemente, isto es bastante facile de accomplir. Adder $20 a $e1 resulta in $01 e defini le bit de reporto. Si le bit de reporto esseva definite, nos sape que nos tamben debe incrementar le byte plus significante.",
"Got a cool 6502 example?\nShare it with the community!": "Ha tu un exemplo de 6502 interessante?\nComparti lo con le communitate!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Ha tu un proprie creation 6502 interessante? Comparti lo con le communitate! Tu pote ora submitter tu exemplos de codice directemente desde le application. Simplemente preme le button de compartir e nos creara automaticamente un issue e pull request de GitHub pro te.",
+ "Great start — you finished the first chapter!": "Bon initio – tu ha finite le prime capitulo!",
"Green": "Verde",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Le hebreo es etiam nostre prime lingua scribite de dextra a sinistra: gratias al tests e contributiones de Menachem, le application ora supporta dispositiones de dextra a sinistra e es preparate pro plus linguas RTL.",
"Help": "Adjuta",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Instructiones in lingua de assemblage es como un micre collection de functiones predefinite. Tote instructiones prende zero o un argumentos. Ecce alcun codice fonte annotate pro introducer alcun instructiones differente:",
"Interactive tutorial": "Tutorial interactive",
"Interactive tutorials guide you from beginner to advanced": "Tutoriales interactive te guia de initiator a avantiate",
+ "Interface font": "Typo de litteras del interfacie",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Bandiera de interruption: Quando definite, mascara (dishabilita) tote interruptiones mascabile (IRQ). Solo interruptiones non mascabile (NMI) pote ancora occurer. Usate pro sectiones critical de codice que non debe esser interruptite.",
"Introduction": "Introduction",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Sur reinitialisar (simulator): P = $30 (bit5 e B definite; D e I clar)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Un vice que le valores ha essite cambiate bassum le serpente, nos debe laborar foras que facer con le capite. Le direction es prime cargate in A. LSR significa \"cambio logic dextra\", o \"cambiar tote le bits un position a dextra\". Le bit minus significante es cambiate in le bandiera de reporto, assi si le accumulator es 1, post LSR illo es 0, con le bandiera de reporto definite.",
"Open Assembly File": "Aperir file de assemblage",
+ "Open Source": "Codice aperte",
"Open...": "Aperir...",
"Opened %s": "Aperite %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Optimisate configuration Flatpak per remover permissiones non necessari",
@@ -373,11 +378,16 @@
"Stopped": "Fermate",
"Style": "Stilo",
"Submit": "Submitter",
+ "Support": "Supportar",
+ "Supporter": "Supportator",
"Syntax error line %d: %s": "Error de syntaxe linea %d: %s",
"System font": "Predefinition del systema",
+ "System font, GNOME size": "Typo de litteras del systema, dimension de GNOME",
"Teal": "Turquoise",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Nos es felice de dar le benvenita al traduction finnese, gentilmente contribute per Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Testa tu creationes sur un consola de joco virtual",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Proba le bit 0 de A con LSR e BCC e pone 1 o 0 in A como resultato",
+ "Thank you for using open source software.": "Gratias pro usar software de codice aperte.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "Le 6502 usa un bus de adresse de 16-bit, significante que il ha 65536 bytes de memoria disponibile al processor. Recorda que un byte es representate per duo characteres hex, assi le locationes de memoria es generalmente representate como $0000 - $ffff. Il ha varie manieras de referer a iste locationes de memoria, como detaliate infra.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "Le opcode BIT es simile a AND, ma le calculation es solo usate pro definir le bandiera de zero - le resultato actual es discardate. Le bandiera de zero es definite solo si le resultato de AND-ing le accumulator con argumento es zero. Quando nos reguarda potentias de duo, le bandiera de zero sera solo definite si le duo numeros non es le mesme. Pro exemplo, 0001 AND 0001 non es zero, ma 0001 AND 0010 es zero.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "Le subrutina init differe a duo subrutinas, initSnake e generateApplePosition. initSnake defini le direction del serpente, longitude, e pois carga le locationes initial de memoria del capite del serpente e corpore. Le par de bytes a $10 contine le location de schermo del capite, le par a $12 contine le location del sol segmento del corpore, e $14 contine le location del cauda (le cauda es le ultime segmento del corpore e es designate in negro pro mantener le serpente movente). Iste occurre in le codice sequente:",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Le Punctator de pila gere le pila de appella pro subrutinas e interruptiones. Illo comencia a $FF (cima de pila) e cresce bassum. Usate pro operationes PUSH/PULL, appellos JSR/RTS, e maneamento de interruptiones. Critico pro appellos de functiones nidate.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Le Registro de indice X es usate pro modos de adressage indexate e operationes de contation. Illo pote mantener contadores de loop, indices de array, e es essential pro acceder locationes de memoria relative a un adresse base usante X como distantia. Special: TSX/TXS transfer X a/de le punctator de pila.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Le Registro de indice Y es simile a X e ha nulle functiones special. Communmente usate pro adressage indexate e movimento de datos.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Le app es designate pro le typo de litteras de interfacie de GNOME. Sur altere systemas, illo es displicate con le typo de litteras de ille systema, que es generalmente plus parve.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Le schermo nigre del consola de joco ora deberea monstrar tres \"pixeles\" colorate in alto a sinistra.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Le bloco de codice infra contine tote le codice fonte del joco. Io explicara como illo functiona in le sectiones sequente.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "Le effecto de isto es mascar le duo bits minus significante del accumulator, definiente le alteres a zero. Iste converte un numero in le rango de 0–255 a un numero in le rango de 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Scribe e edita codice con un editor de codice integrate",
"Yellow": "Jalne",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Tu pote pensar le schermo como quatro bandas horizontal de 32 × 8 pixeles. Iste bandas se mappa a $0200-$02ff, $0300-$03ff, $0400-$04ff e $0500-$05ff. Le prime lineas de pixeles es $0200-$021f, $0220-$023f, $0240-$025f, etc.",
+ "You supported this open source project by buying the app. Thank you!": "Tu ha supportate iste projecto de codice aperte per comprar le app. Gratias!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Tu ha vidite TAX. Tu pote probablement divinar que TAY, TXA e TYA face, ma scribe alcun codice pro testar tu assumptiones.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "Tu file ha cambiamentos non salvate. Cambiamentos sera perdite si tu non los salva.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Bandiera Zero: Definite quando le resultato de un operation es zero. Essential pro ramification conditional - le majoritate de instructiones de salto conditional (BEQ, BNE) verifica iste bandiera pro determinar fluxo de programma basate sur si un valor es zero.",
diff --git a/packages/app-android/app/i18n/id.json b/packages/app-android/app/i18n/id.json
index 971df7bb..e43b3887 100644
--- a/packages/app-android/app/i18n/id.json
+++ b/packages/app-android/app/i18n/id.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Peningkatan presentasi dan aksesibilitas aplikasi",
"Enhanced the hex monitor address range input for easier value editing": "Meningkatkan input rentang alamat monitor hex agar lebih mudah mengedit nilai",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Dengan pengetahuan tersebut, Anda seharusnya dapat melihat bahwa instruksi LDA #$01 memuat nilai hex $01 ke dalam register A. Saya akan membahas lebih detail tentang register di bagian berikutnya.",
+ "Even Odd": "Genap Ganjil",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Meskipun ini akan menjadi versi sederhana, kodenya akan jauh lebih besar dari semua contoh sebelumnya. Kita perlu melacak beberapa lokasi memori secara bersamaan untuk berbagai aspek permainan. Kita masih dapat melakukan pencatatan yang diperlukan di seluruh program sendiri, seperti sebelumnya, tetapi pada skala yang lebih besar hal itu dengan cepat menjadi membosankan dan juga dapat menyebabkan bug yang sulit dideteksi. Sebagai gantinya, sekarang kita akan membiarkan assembler melakukan sebagian pekerjaan yang membosankan itu untuk kita.",
"Example submitted for review": "Contoh telah dikirimkan untuk ditinjau",
"Examples": "Contoh",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Memperbaiki masalah di mana tombol kembali di bagian learn selalu terlihat dalam mode desktop dan tablet, bahkan ketika tidak ada subhalaman yang dibuka.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Memperbaiki error build di PostmarketOS, meningkatkan kompatibilitas mobile",
"Follow system style": "Ikuti gaya sistem",
+ "Font": "Fon",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Untuk Linux kini tersedia juga AppImage: satu file, tanpa instalasi, berguna pada distribusi yang tidak kami buatkan paketnya.",
"Found %d label.": "Ditemukan %d label.",
"Found %d labels.": "Ditemukan %d label.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Berpindah antar bagian lebih rumit, karena kita juga harus memperhitungkan byte paling signifikan. Misalnya, bergerak ke bawah dari $02e1 seharusnya menuju ke $0301. Untungnya, ini cukup mudah dilakukan. Menambahkan $20 ke $e1 menghasilkan $01 dan mengeset bit carry. Jika bit carry diset, kita tahu kita juga perlu menaikkan byte paling signifikan.",
"Got a cool 6502 example?\nShare it with the community!": "Punya contoh 6502 yang keren?\nBagikan kepada komunitas!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Punya kreasi 6502 yang keren? Bagikan kepada komunitas! Kini Anda dapat mengirimkan contoh kode langsung dari dalam aplikasi. Cukup tekan tombol bagikan, dan kami akan otomatis membuat GitHub issue dan pull request untuk Anda.",
+ "Great start — you finished the first chapter!": "Awal yang bagus — Anda telah menyelesaikan bab pertama!",
"Green": "Hijau",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Bahasa Ibrani juga merupakan bahasa pertama kami yang ditulis dari kanan ke kiri: berkat pengujian dan kontribusi Menachem, aplikasi kini mendukung tata letak kanan-ke-kiri dan siap untuk lebih banyak bahasa RTL.",
"Help": "Bantuan",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Instruksi dalam bahasa assembly seperti sekumpulan fungsi kecil yang telah ditentukan. Semua instruksi mengambil nol atau satu argumen. Berikut beberapa kode sumber beranotasi untuk memperkenalkan beberapa instruksi yang berbeda:",
"Interactive tutorial": "Tutorial interaktif",
"Interactive tutorials guide you from beginner to advanced": "Tutorial interaktif memandu Anda dari pemula hingga mahir",
+ "Interface font": "Fon antarmuka",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Flag Interrupt: Saat diset, menutupi (menonaktifkan) semua interrupt yang dapat di-mask (IRQ). Hanya Non-Maskable Interrupt (NMI) yang masih dapat terjadi. Digunakan untuk bagian kode kritis yang tidak boleh diinterupsi.",
"Introduction": "Pengantar",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Saat reset (simulator): P = $30 (bit5 dan B diset; D dan I clear)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Setelah nilai-nilai digeser ke bawah ular, kita harus menentukan apa yang harus dilakukan dengan kepala. Arah pertama-tama dimuat ke A. LSR berarti \"logical shift right\", atau \"geser semua bit satu posisi ke kanan\". Bit paling tidak signifikan digeser ke flag carry, sehingga jika accumulator adalah 1, setelah LSR nilainya menjadi 0 dengan flag carry diset.",
"Open Assembly File": "Buka File Assembly",
+ "Open Source": "Sumber terbuka",
"Open...": "Buka...",
"Opened %s": "Dibuka %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Mengoptimalkan konfigurasi Flatpak dengan menghapus izin yang tidak diperlukan",
@@ -373,10 +378,16 @@
"Stopped": "Dihentikan",
"Style": "Gaya",
"Submit": "Kirim",
+ "Support": "Dukung",
+ "Supporter": "Pendukung",
"Syntax error line %d: %s": "Kesalahan sintaks baris %d: %s",
+ "System font": "Bawaan sistem",
+ "System font, GNOME size": "Fon sistem, ukuran GNOME",
"Teal": "Teal",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Kami dengan senang hati menyambut terjemahan bahasa Finlandia, yang dengan baik hati dikontribusikan oleh Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Uji kreasi Anda pada konsol permainan virtual",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Menguji bit 0 pada A dengan LSR dan BCC, lalu menaruh 1 atau 0 di A sebagai hasilnya",
+ "Thank you for using open source software.": "Terima kasih telah menggunakan perangkat lunak sumber terbuka.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 menggunakan bus alamat 16-bit, yang berarti ada 65536 byte memori yang tersedia untuk prosesor. Ingat bahwa satu byte direpresentasikan oleh dua karakter hex, sehingga lokasi memori umumnya direpresentasikan sebagai $0000 - $ffff. Ada berbagai cara untuk merujuk ke lokasi memori ini, seperti yang dijelaskan di bawah.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "Opcode BIT mirip dengan AND, tetapi kalkulasinya hanya digunakan untuk mengeset flag zero - hasil aktualnya dibuang. Flag zero hanya diset jika hasil operasi AND antara accumulator dan argumen adalah nol. Saat kita melihat pangkat dua, flag zero hanya akan diset jika kedua angka tidak sama. Misalnya, 0001 AND 0001 bukan nol, tetapi 0001 AND 0010 adalah nol.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "Subrutin init mendelegasikan ke dua subrutin, initSnake dan generateApplePosition. initSnake mengatur arah ular, panjang, lalu memuat lokasi memori awal dari kepala dan badan ular. Pasangan byte di $10 berisi lokasi layar dari kepala, pasangan di $12 berisi lokasi segmen badan tunggal, dan $14 berisi lokasi ekor (ekor adalah segmen terakhir dari badan dan digambar dengan warna hitam agar ular tetap bergerak). Ini terjadi dalam kode berikut:",
@@ -386,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Stack Pointer mengelola call stack untuk subrutin dan interrupt. Dimulai dari $FF (bagian atas stack) dan tumbuh ke bawah. Digunakan untuk operasi PUSH/PULL, panggilan JSR/RTS, dan penanganan interrupt. Kritis untuk panggilan fungsi bersarang.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Register Indeks X digunakan untuk mode pengalamatan terindeks dan operasi penghitungan. Dapat menyimpan penghitung loop, indeks array, dan penting untuk mengakses lokasi memori relatif terhadap alamat dasar menggunakan X sebagai offset. Khusus: TSX/TXS mentransfer X ke/dari stack pointer.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Register Indeks Y mirip dengan X dan tidak memiliki fungsi khusus. Umumnya digunakan untuk pengalamatan terindeks dan perpindahan data.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Aplikasi ini dirancang untuk fon antarmuka GNOME. Pada sistem lain, aplikasi ditampilkan dengan fon sistem tersebut, yang biasanya lebih kecil.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Layar konsol permainan yang hitam kini seharusnya menampilkan tiga \"piksel\" berwarna di kiri atas.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Blok kode di bawah berisi seluruh kode sumber permainan. Saya akan menjelaskan cara kerjanya di bagian-bagian berikut.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "Efek dari ini adalah menutupi dua bit paling tidak signifikan dari accumulator, mengatur yang lainnya ke nol. Ini mengkonversi angka dalam rentang 0–255 menjadi angka dalam rentang 0–3.",
@@ -450,6 +462,7 @@
"Write and edit code with a built-in code editor": "Tulis dan edit kode dengan editor kode bawaan",
"Yellow": "Kuning",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Anda dapat membayangkan layar sebagai empat strip horizontal berukuran 32 × 8 piksel. Strip-strip ini dipetakan ke $0200-$02ff, $0300-$03ff, $0400-$04ff, dan $0500-$05ff. Baris piksel pertama adalah $0200-$021f, $0220-$023f, $0240-$025f, dst.",
+ "You supported this open source project by buying the app. Thank you!": "Anda telah mendukung proyek sumber terbuka ini dengan membeli aplikasi. Terima kasih!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Anda sudah melihat TAX. Anda mungkin bisa menebak apa yang dilakukan TAY, TXA, dan TYA, tetapi tulislah beberapa kode untuk menguji asumsi Anda.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "File Anda memiliki perubahan yang belum disimpan. Perubahan akan hilang jika Anda tidak menyimpannya.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Flag Zero: Diset saat hasil operasi adalah nol. Penting untuk percabangan kondisional - sebagian besar instruksi lompatan kondisional (BEQ, BNE) memeriksa flag ini untuk menentukan alur program berdasarkan apakah suatu nilai adalah nol.",
diff --git a/packages/app-android/app/i18n/ja.json b/packages/app-android/app/i18n/ja.json
index 13390152..da8b3ecf 100644
--- a/packages/app-android/app/i18n/ja.json
+++ b/packages/app-android/app/i18n/ja.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "アプリの見た目とアクセシビリティを改善",
"Enhanced the hex monitor address range input for easier value editing": "16進モニターのアドレス範囲入力を改善し、値の編集を容易に",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "この知識があれば、命令 LDA #$01 が 16進の $01 をレジスタ A にロードすることが分かるはずです。レジスタの詳細は次の節で説明します。",
+ "Even Odd": "偶数・奇数",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "簡易版とはいえ、コード量はこれまでの例より大幅に増えます。ゲームの様々な要素のために複数のメモリアドレスをまとめて管理する必要があります。従来どおり手作業で管理することもできますが、規模が大きくなると煩雑で見落としやすい不具合の原因になります。そこで、単純作業はアセンブラに任せることにします。",
"Example submitted for review": "例がレビュー用に送信されました",
"Examples": "例",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "学習セクションの戻るボタンが、サブページが開かれていない状態でもデスクトップモードおよびタブレットモードで常に表示されていた問題を修正しました。",
"Fixed build error on PostmarketOS, improving mobile compatibility": "PostmarketOS のビルドエラーを修正し、モバイル互換性を向上",
"Follow system style": "システムのスタイルに従う",
+ "Font": "フォント",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Linux 向けには AppImage も用意しました。ファイルは1つだけ、インストールは不要で、パッケージを提供していないディストリビューションでも使えます。",
"Found %d label.": "ラベルを %d 件見つけました。",
"Found %d labels.": "ラベルを %d 件見つけました。",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "セクション間の移動は、上位バイトも考慮する必要があるため少し複雑です。たとえば $02e1 から下へは $0301 になります。幸い、これは比較的簡単です。$e1 に $20 を加えると $01 となりキャリービットが立ちます。キャリーが立ったなら、上位バイトもインクリメントすべきだと分かります。",
"Got a cool 6502 example?\nShare it with the community!": "クールな6502の例はありますか?\nコミュニティと共有しましょう!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "独自のクールな6502作品をお持ちですか?コミュニティと共有しましょう!アプリから直接コード例を投稿できるようになりました。共有ボタンを押すだけで、GitHubのissueとプルリクエストが自動的に作成されます。",
+ "Great start — you finished the first chapter!": "好スタートです!最初の章を修了しました!",
"Green": "緑",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "ヘブライ語は、右から左に書く初めての言語でもあります。Menachem のテストと貢献のおかげで、アプリは右から左へのレイアウトに対応し、さらなるRTL言語への準備が整いました。",
"Help": "ヘルプ",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "アセンブリの命令は小さな事前定義関数の集合のようなものです。すべての命令は引数0個または1個を取ります。いくつかの命令を注釈付きコードで紹介します:",
"Interactive tutorial": "インタラクティブチュートリアル",
"Interactive tutorials guide you from beginner to advanced": "インタラクティブチュートリアルで初心者から上級者までガイド",
+ "Interface font": "インターフェースフォント",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "割り込み禁止フラグ: セット時はマスク可能な割り込み(IRQ)をすべて無効化します。NMI(不可マスク割り込み)のみ発生します。割り込み不可のクリティカル区間で使用します。",
"Introduction": "導入",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "リセット時(シミュレーター): P = $30(bit5 と B セット、D と I クリア)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "値がスネークの体に沿ってシフトダウンされた後、頭部をどうするかを決定する必要があります。まず方向をAにロードします。LSRは「論理右シフト」を意味し、「すべてのビットを1ビット右にシフト」します。最下位ビットはキャリーフラグにシフトされるため、アキュムレータが1の場合、LSRの後は0になり、キャリーフラグがセットされます。",
"Open Assembly File": "アセンブリファイルを開く",
+ "Open Source": "オープンソース",
"Open...": "開く...",
"Opened %s": "%s を開きました",
"Optimized Flatpak configuration by removing unnecessary permissions": "不要な権限を削除して Flatpak 設定を最適化",
@@ -373,11 +378,16 @@
"Stopped": "停止",
"Style": "スタイル",
"Submit": "送信",
+ "Support": "支援する",
+ "Supporter": "サポーター",
"Syntax error line %d: %s": "構文エラー 行 %d: %s",
"System font": "システムデフォルト",
+ "System font, GNOME size": "システムフォント(GNOMEのサイズ)",
"Teal": "ティール",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! フィンランド語の翻訳が加わりました。Jiri Grönroos氏のご協力に感謝します。Kiitos!",
"Test your creations on a virtual game console": "仮想ゲームコンソールで作品をテスト",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "LSRとBCCでAのビット0を調べ、結果として1または0をAに格納します",
+ "Thank you for using open source software.": "オープンソースソフトウェアをご利用いただきありがとうございます。",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 は 16 ビットのアドレスバスを使用し、プロセッサは 65536 バイトのメモリにアクセスできます。1 バイトは 2 桁の16進で表すため、メモリアドレスは一般に $0000 - $ffff と表記します。以下に代表的な参照方法を示します。",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "BIT は AND に似ていますが、計算はゼロフラグの設定にのみ使われ、結果自体は破棄されます。アキュムレータと引数の AND が 0 のときのみゼロフラグが立ちます。2 の冪を扱う場合、2 つの数が異なるときだけゼロになります(例: 0001 AND 0001 は 0 ではなく、0001 AND 0010 は 0)。",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "init は initSnake と generateApplePosition の2つに分かれます。initSnake は方向と長さを設定し、頭部と胴体の初期位置を読み込みます。$10 は頭、$12 は単一の胴体セグメント、$14 は尾の画面位置を保持します(尾は最後のセグメントで黒で描画し、動きを表現します)。次のコードで行われます。",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "スタックポインタはサブルーチンや割り込みのコールスタックを管理します。初期値は $FF(スタック頂点)で下方向に伸びます。PUSH/PULL、JSR/RTS、割り込み処理で用いられ、入れ子呼び出しで重要です。",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "X インデックスレジスタはインデックス付きアドレッシングやカウントに使用します。ループカウンタや配列インデックスを保持し、基底アドレスに対する X オフセットでのメモリアクセスに必須です。特例: TSX/TXS で X とスタックポインタを相互に転送します。",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Y インデックスレジスタは X と同様で特別な機能はありません。主にインデックス付きアドレッシングやデータ移動に使われます。",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "このアプリはGNOMEのインターフェースフォント向けに設計されています。他のシステムではそのシステムのフォントで描画されるため、通常は小さく表示されます。",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "黒いゲーム画面の左上に色付きの「ピクセル」が3つ表示されているはずです。",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "以下のコードブロックにはゲーム全体のソースコードが含まれています。以降のセクションでその仕組みを説明します。",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "これによりアキュムレータの下位2ビットがマスクされ、それ以外は 0 になります。0〜255 の数を 0〜3 の範囲に変換します。",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "内蔵コードエディターでコードを作成・編集",
"Yellow": "黄色",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "画面は 32×8 ピクセルの水平ストリップ 4 本と考えられます。対応は $0200-$02ff、$0300-$03ff、$0400-$04ff、$0500-$05ff。各行の先頭は $0200-$021f、$0220-$023f、$0240-$025f…です。",
+ "You supported this open source project by buying the app. Thank you!": "アプリを購入して、このオープンソースプロジェクトを支援していただきました。ありがとうございます!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "TAX は見ましたね。TAY、TXA、TYA が何をするか想像できるでしょう。コードを書いて確かめてみましょう。",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "ファイルに未保存の変更があります。保存しない場合、変更は失われます。",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "ゼロフラグ: 演算結果が0のときにセット。条件分岐で重要で、BEQ/BNE など多くの命令が値が0かどうかの判定に用います。",
diff --git a/packages/app-android/app/i18n/nl.json b/packages/app-android/app/i18n/nl.json
index bbcbe90f..fbe71486 100644
--- a/packages/app-android/app/i18n/nl.json
+++ b/packages/app-android/app/i18n/nl.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Verbeterde app‑presentatie en toegankelijkheid",
"Enhanced the hex monitor address range input for easier value editing": "Adresbereik‑invoer van de hexmonitor verbeterd voor eenvoudiger waardebewerking",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Met die kennis zie je dat de instructie LDA #$01 de hexwaarde $01 in register A laadt. Ik ga in het volgende deel dieper in op registers.",
+ "Even Odd": "Even of oneven",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Ook al wordt dit een eenvoudige versie, de code zal aanzienlijk groter zijn dan alle vorige voorbeelden. We moeten meerdere geheugenlocaties samen bijhouden voor de verschillende aspecten van het spel. We kunnen het nodige bijhouden nog steeds zelf in het programma doen, zoals eerder, maar op grotere schaal wordt dat snel saai en kan het leiden tot lastig te vinden bugs. In plaats daarvan laten we de assembler nu een deel van het routinewerk voor ons doen.",
"Example submitted for review": "Voorbeeld ingediend ter beoordeling",
"Examples": "Voorbeelden",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Een probleem verholpen waarbij de terugknop in het leergedeelte altijd zichtbaar was in desktop- en tabletmodus, zelfs wanneer er geen subpagina geopend was.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Buildfout op PostmarketOS verholpen, mobiele compatibiliteit verbeterd",
"Follow system style": "Systeemstijl volgen",
+ "Font": "Lettertype",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Voor Linux is er nu ook een AppImage: één bestand, geen installatie, handig op een distributie waarvoor we geen pakket maken.",
"Found %d label.": "%d label gevonden.",
"Found %d labels.": "%d labels gevonden.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Tussen secties gaan is ingewikkelder, omdat we ook met het meest significante byte rekening moeten houden. Van $02e1 naar beneden gaan moet bijvoorbeeld $0301 opleveren. Gelukkig is dit vrij eenvoudig te bereiken. $20 optellen bij $e1 resulteert in $01 en zet de carry‑bit. Als de carry‑bit was gezet, weten we dat we ook het meest significante byte moeten verhogen.",
"Got a cool 6502 example?\nShare it with the community!": "Heb je een vet 6502-voorbeeld?\nDeel het met de gemeenschap!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Heb je je eigen coole 6502-creatie? Deel het met de gemeenschap! Je kunt nu je codevoorbeelden direct vanuit de app indienen. Druk gewoon op de deelknop en we maken automatisch een GitHub-issue en pull request voor je aan.",
+ "Great start — you finished the first chapter!": "Goed begin – je hebt het eerste hoofdstuk afgerond!",
"Green": "Groen",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Hebreeuws is ook onze eerste taal die van rechts naar links wordt geschreven: dankzij het testen en de bijdragen van Menachem ondersteunt de app nu lay-outs van rechts naar links en is ze voorbereid op meer RTL-talen.",
"Help": "Hulp",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Instructies in assembleertaal lijken op een kleine set vooraf gedefinieerde functies. Alle instructies nemen nul of één argument. Hier is wat geannoteerde broncode om een paar verschillende instructies te introduceren:",
"Interactive tutorial": "Interactieve tutorial",
"Interactive tutorials guide you from beginner to advanced": "Interactieve tutorials begeleiden je van beginner tot gevorderd",
+ "Interface font": "Interfacelettertype",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Interrupt‑vlag: Wanneer gezet, maskeert (deactiveert) alle maskeerbare interrupts (IRQ). Alleen niet‑maskeerbare interrupts (NMI) kunnen nog optreden. Gebruikt voor kritieke code‑secties die niet mogen worden onderbroken.",
"Introduction": "Inleiding",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Bij reset (simulator): P = $30 (bit5 en B gezet; D en I gewist)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Zodra de waarden door de slang naar beneden zijn verschoven, moeten we bepalen wat we met de kop doen. De richting wordt eerst in A geladen. LSR betekent \"logical shift right\" ofwel \"schuif alle bits één positie naar rechts\". Het minst significante bit wordt naar de carry‑vlag geschoven, dus als de accumulator 1 is, is die na LSR 0, met de carry‑vlag gezet.",
"Open Assembly File": "Assembly‑bestand openen",
+ "Open Source": "Open source",
"Open...": "Openen...",
"Opened %s": "%s geopend",
"Optimized Flatpak configuration by removing unnecessary permissions": "Flatpak‑configuratie geoptimaliseerd door onnodige permissies te verwijderen",
@@ -373,11 +378,16 @@
"Stopped": "Gestopt",
"Style": "Stijl",
"Submit": "Indienen",
+ "Support": "Steunen",
+ "Supporter": "Supporter",
"Syntax error line %d: %s": "Syntaxisfout regel %d: %s",
"System font": "Systeemstandaard",
+ "System font, GNOME size": "Systeemlettertype, GNOME-grootte",
"Teal": "Teal",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! We verwelkomen met plezier de Finse vertaling, vriendelijk bijgedragen door Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Test je creaties op een virtuele spelconsole",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Test bit 0 van A met LSR en BCC en zet 1 of 0 in A als resultaat",
+ "Thank you for using open source software.": "Bedankt voor het gebruik van open-sourcesoftware.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "De 6502 gebruikt een 16‑bit adresbus, wat betekent dat er 65536 bytes geheugen beschikbaar zijn voor de processor. Onthoud dat een byte wordt weergegeven door twee hex‑tekens, dus geheugenlocaties worden doorgaans weergegeven als $0000 - $ffff. Er zijn verschillende manieren om naar deze geheugenlocaties te verwijzen, zoals hieronder beschreven.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "De opcode BIT lijkt op AND, maar de berekening wordt alleen gebruikt om de zero‑vlag te zetten – het resultaat zelf wordt weggegooid. De zero‑vlag wordt alleen gezet als het resultaat van AND tussen de accumulator en het argument nul is. Bij machten van twee wordt de zero‑vlag alleen gezet als de twee getallen niet hetzelfde zijn. Bijvoorbeeld: 0001 AND 0001 is niet nul, maar 0001 AND 0010 is nul.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "De subroutine init verwijst naar twee subroutines, initSnake en generateApplePosition. initSnake stelt de richting en lengte van de slang in en laadt vervolgens de initiële geheugenlocaties van de slangkop en het lichaam. Het bytepaar op $10 bevat de schermlocatie van de kop, het paar op $12 bevat de locatie van het enkele lichaamssegment en $14 bevat de locatie van de staart (de staart is het laatste segment van het lichaam en wordt zwart getekend om de slang te laten bewegen). Dit gebeurt in de volgende code:",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "De Stackpointer beheert de aanroepstack voor subroutines en interrupts. Hij start op $FF (bovenkant van de stack) en groeit naar beneden. Gebruikt voor PUSH/PULL‑operaties, JSR/RTS‑aanroepen en afhandeling van interrupts. Kritisch voor geneste functieaanroepen.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Het X‑indexregister wordt gebruikt voor geïndexeerde adresseringsmodi en telbewerkingen. Het kan lus‑tellers en array‑indices bevatten en is essentieel om geheugenlocaties relatief tot een basisadres te benaderen met X als offset. Speciaal: TSX/TXS zet X naar/van de stackpointer.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Het Y‑indexregister lijkt op X en heeft geen speciale functies. Wordt vaak gebruikt voor geïndexeerde adressering en gegevensverplaatsing.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "De app is ontworpen voor het GNOME-interfacelettertype. Op andere systemen wordt de app getekend met het lettertype van dat systeem, dat meestal kleiner is.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Het zwarte scherm van de spelconsole zou nu drie gekleurde \"pixels\" linksboven moeten tonen.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Het onderstaande codeblok bevat de volledige broncode van het spel. In de volgende secties leg ik uit hoe het werkt.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "Het effect hiervan is dat de twee minst significante bits van de accumulator worden gemaskeerd en de overige op nul worden gezet. Dit zet een getal in het bereik 0–255 om naar een getal in het bereik 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Schrijf en bewerk code met een ingebouwde code‑editor",
"Yellow": "Geel",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Je kunt het scherm zien als vier horizontale stroken van 32 × 8 pixels. Deze stroken mappen naar $0200-$02ff, $0300-$03ff, $0400-$04ff en $0500-$05ff. De eerste pixelrijen zijn $0200-$021f, $0220-$023f, $0240-$025f, enz.",
+ "You supported this open source project by buying the app. Thank you!": "Je hebt dit open-sourceproject gesteund door de app te kopen. Bedankt!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Je hebt TAX gezien. Je kunt waarschijnlijk raden wat TAY, TXA en TYA doen, maar schrijf wat code om je aannames te testen.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "Je bestand heeft niet‑opgeslagen wijzigingen. Wijzigingen gaan verloren als je ze niet opslaat.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Zero‑vlag: gezet wanneer het resultaat van een bewerking nul is. Essentieel voor voorwaardelijke vertakkingen – de meeste voorwaardelijke spronginstructies (BEQ, BNE) controleren deze vlag om de programmapath te bepalen op basis van of een waarde nul is.",
diff --git a/packages/app-android/app/i18n/pl.json b/packages/app-android/app/i18n/pl.json
index fdda3ff5..2aae6b40 100644
--- a/packages/app-android/app/i18n/pl.json
+++ b/packages/app-android/app/i18n/pl.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Ulepszona prezentacja aplikacji i dostępność",
"Enhanced the hex monitor address range input for easier value editing": "Ulepszono wejście zakresu adresów monitora heksadecymalnego dla łatwiejszej edycji wartości",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Wyposażony w tę wiedzę, powinieneś być w stanie zobaczyć, że instrukcja LDA #$01 ładuje wartość heksadecymalną $01 do rejestru A. W następnej sekcji wejdę w więcej szczegółów na temat rejestrów.",
+ "Even Odd": "Parzysta czy nieparzysta",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Chociaż będzie to prosta wersja, kod będzie znacznie większy niż wszystkie poprzednie przykłady. Będziemy musieli śledzić kilka lokalizacji pamięci razem dla różnych aspektów gry. Możemy nadal robić niezbędną księgowość w całym programie sami, jak wcześniej, ale na większą skalę staje się to szybko nużące i może również prowadzić do błędów, które trudno zauważyć. Zamiast tego pozwolimy teraz asemblerowi zrobić część nudnej pracy za nas.",
"Example submitted for review": "Przykład przesłany do recenzji",
"Examples": "Przykłady",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Naprawiono problem, w którym przycisk wstecz w sekcji nauki był zawsze widoczny w trybie desktopowym i tabletowym, nawet gdy żadna podstrona nie była otwarta.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Naprawiono błąd kompilacji na PostmarketOS, poprawiając kompatybilność mobilną",
"Follow system style": "Podążaj za stylem systemu",
+ "Font": "Czcionka",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Dla Linuxa jest teraz także AppImage: jeden plik, bez instalacji, przydatny w dystrybucji, dla której nie przygotowujemy pakietu.",
"Found %d label.": "Znaleziono %d etykietę.",
"Found %d labels.": "Znaleziono %d etykiet.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Przechodzenie między sekcjami jest bardziej skomplikowane, ponieważ musimy również wziąć pod uwagę najbardziej znaczący bajt. Na przykład, schodzenie w dół z $02e1 powinno prowadzić do $0301. Na szczęście jest to dość łatwe do wykonania. Dodanie $20 do $e1 daje $01 i ustawia bit przeniesienia. Jeśli bit przeniesienia był ustawiony, wiemy, że musimy również zwiększyć najbardziej znaczący bajt.",
"Got a cool 6502 example?\nShare it with the community!": "Masz fajny przykład 6502?\nPodziel się nim ze społecznością!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Masz swoją własną fajną kreację 6502? Podziel się nią ze społecznością! Możesz teraz przesyłać przykłady kodu bezpośrednio z aplikacji. Wystarczy nacisnąć przycisk udostępniania, a automatycznie utworzymy dla Ciebie zgłoszenie i pull request na GitHub.",
+ "Great start — you finished the first chapter!": "Świetny początek – pierwszy rozdział masz już za sobą!",
"Green": "Zielony",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Hebrajski to także nasz pierwszy język pisany od prawej do lewej: dzięki testom i wkładowi Menachema aplikacja obsługuje teraz układy od prawej do lewej i jest przygotowana na kolejne języki RTL.",
"Help": "Pomoc",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Instrukcje w języku asemblera są jak mały zestaw predefiniowanych funkcji. Wszystkie instrukcje przyjmują zero lub jeden argument. Oto trochę anotowanego kodu źródłowego, aby wprowadzić kilka różnych instrukcji:",
"Interactive tutorial": "Interaktywny tutorial",
"Interactive tutorials guide you from beginner to advanced": "Interaktywne tutoriale prowadzą Cię od początkującego do zaawansowanego",
+ "Interface font": "Czcionka interfejsu",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Flaga Interrupt: Gdy ustawiona, maskuje (wyłącza) wszystkie maskowalne przerwania (IRQ). Mogą nadal występować tylko niemaskowalne przerwania (NMI). Używana do krytycznych sekcji kodu, które nie mogą być przerwane.",
"Introduction": "Wprowadzenie",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Przy resecie (symulator): P = $30 (bit5 i B ustawione; D i I wyczyszczone)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Gdy wartości zostały przesunięte w dół węża, musimy wymyślić, co zrobić z głową. Kierunek jest najpierw ładowany do A. LSR oznacza \"logiczne przesunięcie w prawo\", lub \"przesuń wszystkie bity o jedną pozycję w prawo\". Najmniej znaczący bit jest przesuwany do flagi carry, więc jeśli akumulator to 1, po LSR jest 0, z ustawioną flagą carry.",
"Open Assembly File": "Otwórz plik asemblera",
+ "Open Source": "Open source",
"Open...": "Otwórz...",
"Opened %s": "Otworzono %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Zoptymalizowano konfigurację Flatpak poprzez usunięcie niepotrzebnych uprawnień",
@@ -373,10 +378,16 @@
"Stopped": "Zatrzymany",
"Style": "Styl",
"Submit": "Prześlij",
+ "Support": "Wesprzyj",
+ "Supporter": "Wspierający",
"Syntax error line %d: %s": "Błąd składni w linii %d: %s",
+ "System font": "Domyślna systemowa",
+ "System font, GNOME size": "Czcionka systemowa, rozmiar GNOME",
"Teal": "Cyjanowy",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Z przyjemnością witamy fińskie tłumaczenie, udostępnione dzięki uprzejmości Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Testuj swoje kreacje na wirtualnej konsoli do gier",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Sprawdza bit 0 rejestru A za pomocą LSR i BCC i umieszcza w A wynik: 1 lub 0",
+ "Thank you for using open source software.": "Dziękujemy za korzystanie z oprogramowania open source.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 używa 16-bitowej magistrali adresowej, co oznacza, że procesor ma dostęp do 65536 bajtów pamięci. Pamiętaj, że bajt jest reprezentowany przez dwa znaki heksadecymalne, więc lokalizacje pamięci są ogólnie reprezentowane jako $0000 - $ffff. Istnieją różne sposoby odwoływania się do tych lokalizacji pamięci, jak szczegółowo opisano poniżej.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "Opkod BIT jest podobny do AND, ale obliczenie jest używane tylko do ustawienia flagi zero - rzeczywisty wynik jest odrzucany. Flaga zero jest ustawiana tylko wtedy, gdy wynik AND między akumulatorem a argumentem jest zerem. Gdy patrzymy na potęgi dwójki, flaga zero będzie ustawiana tylko wtedy, gdy dwie liczby nie są takie same. Na przykład, 0001 AND 0001 nie jest zerem, ale 0001 AND 0010 jest zerem.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "Podprogram init odwołuje się do dwóch podprogramów, initSnake i generateApplePosition. initSnake ustawia kierunek węża, długość, a następnie ładuje początkowe lokalizacje pamięci głowy i ciała węża. Para bajtów na $10 zawiera lokalizację ekranową głowy, para na $12 zawiera lokalizację pojedynczego segmentu ciała, a $14 zawiera lokalizację ogona (ogon jest ostatnim segmentem ciała i jest rysowany na czarno, aby utrzymać węża w ruchu). Dzieje się to w następującym kodzie:",
@@ -386,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Wskaźnik stosu zarządza stosem wywołań dla podprogramów i przerwań. Rozpoczyna się od $FF (szczyt stosu) i rośnie w dół. Używany do operacji PUSH/PULL, wywołań JSR/RTS i obsługi przerwań. Krytyczny dla zagnieżdżonych wywołań funkcji.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Rejestr indeksowy X jest używany do trybów adresowania indeksowanego i operacji liczenia. Może przechowywać liczniki pętli, indeksy tablic i jest niezbędny do dostępu do lokalizacji pamięci względem adresu bazowego używając X jako offsetu. Specjalne: TSX/TXS transferuje X do/z wskaźnika stosu.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Rejestr indeksowy Y jest podobny do X i nie ma specjalnych funkcji. Powszechnie używany do adresowania indeksowanego i ruchu danych.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Aplikacja została zaprojektowana z myślą o czcionce interfejsu GNOME. W innych systemach jest wyświetlana czcionką tego systemu, która zwykle jest mniejsza.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Czarny ekran konsoli do gier powinien teraz pokazać trzy kolorowe \"piksele\" w lewym górnym rogu.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Blok kodu poniżej zawiera cały kod źródłowy gry. Wyjaśnię, jak to działa w następnych sekcjach.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "Efektem tego jest zamaskowanie dwóch najmniej znaczących bitów akumulatora, ustawienie pozostałych na zero. To konwertuje liczbę w zakresie 0–255 na liczbę w zakresie 0–3.",
@@ -450,6 +462,7 @@
"Write and edit code with a built-in code editor": "Pisz i edytuj kod z wbudowanym edytorem kodu",
"Yellow": "Żółty",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Możesz pomyśleć o ekranie jako o czterech poziomych pasach 32 × 8 pikseli. Te pasy mapują się na $0200-$02ff, $0300-$03ff, $0400-$04ff i $0500-$05ff. Pierwsze wiersze pikseli to $0200-$021f, $0220-$023f, $0240-$025f, itd.",
+ "You supported this open source project by buying the app. Thank you!": "Dzięki zakupowi aplikacji wspierasz ten projekt open source. Dziękujemy!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Widziałeś TAX. Prawdopodobnie możesz zgadnąć, co robią TAY, TXA i TYA, ale napisz jakiś kod, aby przetestować swoje założenia.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "Twój plik ma niezapisane zmiany. Zmiany zostaną utracone, jeśli ich nie zapiszesz.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Flaga Zero: Ustawiana gdy wynik operacji jest zerem. Niezbędna do warunkowego rozgałęziania - większość instrukcji warunkowych skoków (BEQ, BNE) sprawdza tę flagę, aby określić przepływ programu na podstawie tego, czy wartość jest zerem.",
diff --git a/packages/app-android/app/i18n/pt-BR.json b/packages/app-android/app/i18n/pt-BR.json
index 7b045edf..d988792e 100644
--- a/packages/app-android/app/i18n/pt-BR.json
+++ b/packages/app-android/app/i18n/pt-BR.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Melhorada a apresentação da aplicativo e acessibilidade",
"Enhanced the hex monitor address range input for easier value editing": "Melhorada a entrada de faixa de endereços do monitor hex para facilitar a edição de valores",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Equipado com esse conhecimento, você deve ser capaz de ver que a instrução LDA #$01 carrega o valor hexadecimal $01 no registro A. Vou entrar em mais detalhes sobre os registros na próxima seção.",
+ "Even Odd": "Par ou Ímpar",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Embora esta seja uma versão simples, o código será substancialmente maior do que todos os exemplos anteriores. Teremos de acompanhar várias endereços de memória em conjunto para os vários aspetos do jogo. Podemos ainda fazer a contabilidade necessária ao longo do programa nós mesmos, como antes, mas numa escala maior isso torna-se rapidamente tedioso e também pode levar a bugs difíceis de detetar. Em vez disso, vamos agora deixar o assembler fazer parte do trabalho mundano por nós.",
"Example submitted for review": "Exemplo enviado para revisão",
"Examples": "Exemplos",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Corrigido um problema onde o botão Voltar na seção de aprendizagem estava sempre visível no modo desktop e tablet, mesmo quando nenhuma subpágina estava aberta.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Corrigido erro de compilação no PostmarketOS, melhorando a compatibilidade móvel",
"Follow system style": "Seguir estilo do sistema",
+ "Font": "Fonte",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Para Linux também há um AppImage agora: um único arquivo, sem instalação, útil em uma distribuição para a qual não geramos pacotes.",
"Found %d label.": "Encontrado %d rótulo.",
"Found %d labels.": "Encontrados %d rótulos.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Ir entre seções é mais complicado, pois temos de levar em conta também o byte mais significativo. Por exemplo, ir para baixo de $02e1 deveria levar a $0301. Felizmente, isto é bastante fácil de conseguir. Adicionar $20 a $e1 resulta em $01 e define o bit carry. Se o bit carry foi definido, sabemos que também precisamos de incrementar o byte mais significativo.",
"Got a cool 6502 example?\nShare it with the community!": "Tem um exemplo 6502 legal?\nCompartilhe com a comunidade!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Tem sua própria criação 6502 legal? Compartilhe com a comunidade! Agora você pode enviar seus exemplos de código diretamente do aplicativo. Basta apertar o botão de compartilhar e criaremos automaticamente uma issue e pull request no GitHub para você.",
+ "Great start — you finished the first chapter!": "Ótimo começo — você concluiu o primeiro capítulo!",
"Green": "Verde",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "O hebraico também é nosso primeiro idioma escrito da direita para a esquerda: graças aos testes e contribuições de Menachem, o aplicativo agora oferece suporte a layouts da direita para a esquerda, preparando-o para mais idiomas RTL.",
"Help": "Ajuda",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "As instruções na linguagem assembly são como um pequeno conjunto de funções predefinidas. Todas as instruções tomam zero ou um argumento. Aqui está algum código fonte anotado para introduzir algumas instruções diferentes:",
"Interactive tutorial": "Tutorial interativo",
"Interactive tutorials guide you from beginner to advanced": "Tutoriais interativos guiam você do iniciante ao avançado",
+ "Interface font": "Fonte da interface",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Flag de Interrupção: Quando definida, mascara (desativa) todas as interrupções mascaráveis (IRQ). Apenas as Interrupções Não-Mascaráveis (NMI) podem ainda ocorrer. Usada para seções críticas de código que não devem ser interrompidas.",
"Introduction": "Introdução",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "No reset (simulador): P = $30 (bit5 e B definidos; D e I limpos)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Uma vez que os valores foram deslocados para baixo na cobra, temos de descobrir o que fazer com a cabeça. A direção é primeiro carregada em A. LSR significa \"deslocamento lógico para a direita\", ou \"deslocar todos os bits uma posição para a direita\". O bit menos significativo é deslocado para a flag carry, então se o acumulador for 1, após LSR é 0, com a flag carry definida.",
"Open Assembly File": "Abrir Arquivo Assembly",
+ "Open Source": "Código aberto",
"Open...": "Abrir...",
"Opened %s": "Aberto %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Configuração Flatpak otimizada removendo permissões desnecessárias",
@@ -373,11 +378,16 @@
"Stopped": "Parado",
"Style": "Estilo",
"Submit": "Enviar",
+ "Support": "Apoiar",
+ "Supporter": "Apoiador",
"Syntax error line %d: %s": "Erro de sintaxe na linha %d: %s",
"System font": "Padrão do sistema",
+ "System font, GNOME size": "Fonte do sistema, tamanho do GNOME",
"Teal": "Azul-petróleo",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Temos o prazer de dar as boas-vindas à tradução finlandesa, gentilmente contribuída por Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Teste suas criações no console de jogos virtual",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Testa o bit 0 de A com LSR e BCC e coloca 1 ou 0 em A como resultado",
+ "Thank you for using open source software.": "Obrigado por usar software de código aberto.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "O 6502 usa um barramento de endereços de 16-bit, o que significa que há 65536 bytes de memória disponíveis para o processador. Lembre-se que um byte é representado por dois caracteres hexadecimais, por isso as endereços de memória são geralmente representadas como $0000 - $ffff. Há várias formas de se referir a estas endereços de memória, como detalhado abaixo.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "O opcode BIT é similar a AND, mas o cálculo é apenas usado para definir a flag zero - o resultado real é descartado. A flag zero é definida apenas se o resultado de fazer AND do acumulador com o argumento for zero. Quando estamos a olhar para potências de dois, a flag zero só será definida se os dois números não forem os mesmos. Por exemplo, 0001 AND 0001 não é zero, mas 0001 AND 0010 é zero.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "A sub-rotina init adia para duas sub-rotinas, initSnake e generateApplePosition. initSnake define a direção da cobra, comprimento, e depois carrega as endereços de memória iniciais da cabeça da cobra e do corpo. O par de bytes em $10 contém a localização da tela da cabeça, o par em $12 contém a localização do segmento único do corpo, e $14 contém a localização da cauda (a cauda é o último segmento do corpo e é desenhada a preto para manter a cobra a mover-se). Isto acontece no seguinte código:",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "O Ponteiro da Pilha gere a pilha de chamadas para sub-rotinas e interrupções. Começa em $FF (topo da pilha) e cresce para baixo. Usado para operações PUSH/PULL, chamadas JSR/RTS, e tratamento de interrupções. Crítico para chamadas de funções aninhadas.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "O registro de Índice X é usado para modos de endereçamento indexados e operações de contagem. Pode conter contadores de ciclo, índices de array, e é essencial para acessar endereços de memória relativas a um endereço base usando X como deslocamento. Especial: TSX/TXS transferem X para/de o ponteiro da pilha.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "O registro de Índice Y é similar a X e não tem funções especiais. Comumente usado para endereçamento indexado e movimento de dados.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "O aplicativo foi projetado para a fonte de interface do GNOME. Em outros sistemas, ele é desenhado com a fonte desse sistema, que geralmente é menor.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "A tela preta do console de jogo deve agora mostrar três \"pixels\" coloridos no canto superior esquerdo.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "O bloco de código abaixo contém todo o código-fonte do jogo. Vou explicar como funciona nas seções seguintes.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "O efeito disto é mascarar os dois bits menos significativos do acumulador, definindo os outros como zero. Isto converte um número no intervalo de 0–255 para um número no intervalo de 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Escreva e edita código com um editor de código integrado",
"Yellow": "Amarelo",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Você pode pensar na tela como quatro faixas horizontais de 32 × 8 pixels. Estas faixas mapeiam-se para $0200-$02ff, $0300-$03ff, $0400-$04ff e $0500-$05ff. As primeiras linhas de pixels são $0200-$021f, $0220-$023f, $0240-$025f, etc.",
+ "You supported this open source project by buying the app. Thank you!": "Você apoiou este projeto de código aberto ao comprar o aplicativo. Obrigado!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Já viste TAX. Provavelmente consegues adivinhar o que TAY, TXA e TYA fazem, mas escreve algum código para testar as suas suposições.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "seu arquivo tem alterações não salvas. As alterações serão perdidas se não as salvares.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Flag Zero: Definida quando o resultado de uma operação é zero. Essencial para ramificação condicional - a maioria das instruções de salto condicional (BEQ, BNE) verifique esta flag para determinar o fluxo do programa baseado se um valor é zero.",
diff --git a/packages/app-android/app/i18n/pt.json b/packages/app-android/app/i18n/pt.json
index c6a82548..ecb4c606 100644
--- a/packages/app-android/app/i18n/pt.json
+++ b/packages/app-android/app/i18n/pt.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Melhorada a apresentação da aplicação e acessibilidade",
"Enhanced the hex monitor address range input for easier value editing": "Melhorada a entrada de gama de endereços do monitor hex para facilitar a edição de valores",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Equipado com esse conhecimento, deverás ser capaz de ver que a instrução LDA #$01 carrega o valor hexadecimal $01 no registo A. Vou entrar em mais detalhes sobre os registos na próxima secção.",
+ "Even Odd": "Par ou Ímpar",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Embora esta seja uma versão simples, o código será substancialmente maior do que todos os exemplos anteriores. Teremos de acompanhar várias localizações de memória em conjunto para os vários aspetos do jogo. Podemos ainda fazer a contabilidade necessária ao longo do programa nós mesmos, como antes, mas numa escala maior isso torna-se rapidamente tedioso e também pode levar a bugs difíceis de detetar. Em vez disso, vamos agora deixar o assembler fazer parte do trabalho mundano por nós.",
"Example submitted for review": "Exemplo submetido para revisão",
"Examples": "Exemplos",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Corrigido um problema onde o botão Voltar na secção de aprendizagem estava sempre visível no modo de computador e tablet, mesmo quando não havia subpágina aberta.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Corrigido erro de compilação no PostmarketOS, melhorando a compatibilidade móvel",
"Follow system style": "Seguir estilo do sistema",
+ "Font": "Tipo de letra",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Para Linux existe agora também uma AppImage: um ficheiro, sem instalação, útil numa distribuição para a qual não criamos pacotes.",
"Found %d label.": "Encontrado %d rótulo.",
"Found %d labels.": "Encontrados %d rótulos.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Ir entre secções é mais complicado, pois temos de levar em conta também o byte mais significativo. Por exemplo, ir para baixo de $02e1 deveria levar a $0301. Felizmente, isto é bastante fácil de conseguir. Adicionar $20 a $e1 resulta em $01 e define o bit carry. Se o bit carry foi definido, sabemos que também precisamos de incrementar o byte mais significativo.",
"Got a cool 6502 example?\nShare it with the community!": "Tem um exemplo 6502 interessante?\nPartilhe-o com a comunidade!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Tem a sua própria criação 6502? Partilhe-a com a comunidade! Agora pode submeter os seus exemplos de código diretamente da aplicação. Basta premir o botão de partilha e criaremos automaticamente um issue e pull request no GitHub para si.",
+ "Great start — you finished the first chapter!": "Ótimo começo — concluiu o primeiro capítulo!",
"Green": "Verde",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "O hebraico é também a nossa primeira língua escrita da direita para a esquerda: graças aos testes e contribuições de Menachem, a aplicação suporta agora disposições da direita para a esquerda, ficando preparada para mais línguas RTL.",
"Help": "Ajuda",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "As instruções na linguagem assembly são como um pequeno conjunto de funções predefinidas. Todas as instruções tomam zero ou um argumento. Aqui está algum código fonte anotado para introduzir algumas instruções diferentes:",
"Interactive tutorial": "Tutorial interativo",
"Interactive tutorials guide you from beginner to advanced": "Tutorials interativos guiam-te do principiante ao avançado",
+ "Interface font": "Tipo de letra da interface",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Flag de Interrupção: Quando definida, mascara (desativa) todas as interrupções mascaráveis (IRQ). Apenas as Interrupções Não-Mascaráveis (NMI) podem ainda ocorrer. Usada para secções críticas de código que não devem ser interrompidas.",
"Introduction": "Introdução",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "No reset (simulador): P = $30 (bit5 e B definidos; D e I limpos)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Uma vez que os valores foram deslocados para baixo na cobra, temos de descobrir o que fazer com a cabeça. A direção é primeiro carregada em A. LSR significa \"deslocamento lógico para a direita\", ou \"deslocar todos os bits uma posição para a direita\". O bit menos significativo é deslocado para a flag carry, então se o acumulador for 1, após LSR é 0, com a flag carry definida.",
"Open Assembly File": "Abrir Ficheiro Assembly",
+ "Open Source": "Código aberto",
"Open...": "Abrir...",
"Opened %s": "Aberto %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Configuração Flatpak otimizada removendo permissões desnecessárias",
@@ -373,11 +378,16 @@
"Stopped": "Parado",
"Style": "Estilo",
"Submit": "Submeter",
+ "Support": "Apoiar",
+ "Supporter": "Apoiante",
"Syntax error line %d: %s": "Erro de sintaxe na linha %d: %s",
"System font": "Padrão do sistema",
+ "System font, GNOME size": "Tipo de letra do sistema, tamanho do GNOME",
"Teal": "Azul-petróleo",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Temos o prazer de dar as boas-vindas à tradução finlandesa, gentilmente contribuída por Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Testa as tuas criações numa consola de jogos virtual",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Testa o bit 0 de A com LSR e BCC e coloca 1 ou 0 em A como resultado",
+ "Thank you for using open source software.": "Obrigado por utilizar software de código aberto.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "O 6502 usa um barramento de endereços de 16-bit, o que significa que há 65536 bytes de memória disponíveis para o processador. Lembra-te que um byte é representado por dois caracteres hexadecimais, por isso as localizações de memória são geralmente representadas como $0000 - $ffff. Há várias formas de se referir a estas localizações de memória, como detalhado abaixo.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "O opcode BIT é similar a AND, mas o cálculo é apenas usado para definir a flag zero - o resultado real é descartado. A flag zero é definida apenas se o resultado de fazer AND do acumulador com o argumento for zero. Quando estamos a olhar para potências de dois, a flag zero só será definida se os dois números não forem os mesmos. Por exemplo, 0001 AND 0001 não é zero, mas 0001 AND 0010 é zero.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "A sub-rotina init adia para duas sub-rotinas, initSnake e generateApplePosition. initSnake define a direção da cobra, comprimento, e depois carrega as localizações de memória iniciais da cabeça da cobra e do corpo. O par de bytes em $10 contém a localização do ecrã da cabeça, o par em $12 contém a localização do segmento único do corpo, e $14 contém a localização da cauda (a cauda é o último segmento do corpo e é desenhada a preto para manter a cobra a mover-se). Isto acontece no seguinte código:",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "O Ponteiro da Pilha gere a pilha de chamadas para sub-rotinas e interrupções. Começa em $FF (topo da pilha) e cresce para baixo. Usado para operações PUSH/PULL, chamadas JSR/RTS, e tratamento de interrupções. Crítico para chamadas de funções aninhadas.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "O Registo de Índice X é usado para modos de endereçamento indexados e operações de contagem. Pode conter contadores de ciclo, índices de array, e é essencial para aceder a localizações de memória relativas a um endereço base usando X como deslocamento. Especial: TSX/TXS transferem X para/de o ponteiro da pilha.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "O Registo de Índice Y é similar a X e não tem funções especiais. Comumente usado para endereçamento indexado e movimento de dados.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "A aplicação foi concebida para o tipo de letra de interface do GNOME. Noutros sistemas, é desenhada com o tipo de letra desse sistema, que costuma ser menor.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "O ecrã preto da consola de jogo deve agora mostrar três \"píxeis\" coloridos no canto superior esquerdo.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "O bloco de código abaixo contém todo o código-fonte do jogo. Vou explicar como funciona nas secções seguintes.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "O efeito disto é mascarar os dois bits menos significativos do acumulador, definindo os outros como zero. Isto converte um número no intervalo de 0–255 para um número no intervalo de 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Escreve e edita código com um editor de código integrado",
"Yellow": "Amarelo",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Podes pensar no ecrã como quatro faixas horizontais de 32 × 8 píxeis. Estas faixas mapeiam-se para $0200-$02ff, $0300-$03ff, $0400-$04ff e $0500-$05ff. As primeiras linhas de píxeis são $0200-$021f, $0220-$023f, $0240-$025f, etc.",
+ "You supported this open source project by buying the app. Thank you!": "Apoiou este projeto de código aberto ao comprar a aplicação. Obrigado!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Já viste TAX. Provavelmente consegues adivinhar o que TAY, TXA e TYA fazem, mas escreve algum código para testar as tuas suposições.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "O teu ficheiro tem alterações não guardadas. As alterações serão perdidas se não as guardares.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Flag Zero: Definida quando o resultado de uma operação é zero. Essencial para ramificação condicional - a maioria das instruções de salto condicional (BEQ, BNE) verifica esta flag para determinar o fluxo do programa baseado se um valor é zero.",
diff --git a/packages/app-android/app/i18n/ta.json b/packages/app-android/app/i18n/ta.json
index ae97c903..583de6f4 100644
--- a/packages/app-android/app/i18n/ta.json
+++ b/packages/app-android/app/i18n/ta.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "மேம்படுத்தப்பட்ட பயன்பாட்டு விளக்கக்காட்சி மற்றும் அணுகல்தன்மை",
"Enhanced the hex monitor address range input for easier value editing": "எளிதாக மதிப்பு திருத்துதல் செய்ய ஃச் மானிட்டர் முகவரி வரம்பு உள்ளீடு மேம்படுத்தப்பட்டது",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "அந்த அறிவைப் பெற்றிருந்தால், LDA #$01 என்ற ஃச் மதிப்பை $01 பதிவேட்டில் A ஏற்றுகிறது என்பதை நீங்கள் பார்க்க முடியும். அடுத்த பகுதியில் பதிவேடுகளைப் பற்றி மேலும் விரிவாகப் பேசுகிறேன்.",
+ "Even Odd": "இரட்டை ஒற்றை",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "இது ஒரு எளிய பதிப்பாக இருந்தாலும், குறியீடு முந்தைய எல்லா எடுத்துக்காட்டுகளையும் விட கணிசமாக பெரியதாக இருக்கும். விளையாட்டின் பல்வேறு அம்சங்களுக்காக நாம் பல நினைவக இருப்பிடங்களை ஒன்றாகக் கண்காணிக்க வேண்டும். முன்பைப் போலவே, நிரல் முழுவதும் தேவையான புத்தக பராமரிப்பை நாமே இன்னும் செய்யலாம், ஆனால் பெரிய அளவில் அது விரைவாக சோர்வாக மாறும் மற்றும் கண்டறிய கடினமாக இருக்கும் பிழைகளுக்கு வழிவகுக்கும். அதற்கு பதிலாக, அசெம்பிளரை நமக்காக சில சாதாரண வேலைகளைச் செய்ய அனுமதிப்போம்.",
"Example submitted for review": "சான்று மதிப்பாய்வுக்காக சமர்ப்பிக்கப்பட்டது",
"Examples": "எடுத்துக்காட்டுகள்",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "எந்த துணைப் பக்கமும் திறக்கப்படாவிட்டாலும், கற்றல் பிரிவில் உள்ள பின் பொத்தான் எப்போதும் டெச்க்டாப் மற்றும் டேப்லெட் பயன்முறையில் காணக்கூடிய சிக்கல் சரி செய்யப்பட்டது.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "PostmarketOS இல் நிலையான உருவாக்க பிழை, மொபைல் இணக்கத்தன்மையை மேம்படுத்துகிறது",
"Follow system style": "கணினி பாணியைப் பின்பற்றவும்",
+ "Font": "எழுத்துரு",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Linux-க்கு இப்போது ஒரு AppImage-ம் உள்ளது: ஒரே கோப்பு, நிறுவல் தேவையில்லை, நாங்கள் தொகுப்பு வழங்காத விநியோகங்களிலும் இது பயன்படும்.",
"Found %d label.": "%d சிட்டை கிடைத்தது.",
"Found %d labels.": "%d லேபிள்கள் உள்ளன.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "பிரிவுகளுக்கு இடையே நகர்வது இன்னும் சிக்கலானது, ஏனெனில் உயர் வரிசைப் பைட்டையும் கணக்கில் கொள்ள வேண்டும். எடுத்துக்காட்டாக, $02e1 இலிருந்து கீழே செல்வது $0301 க்கு இட்டுச்செல்ல வேண்டும். நல்லவேளையாக, இதைச் செய்வது மிகவும் எளிது. $e1 உடன் $20 ஐச் சேர்த்தால் $01 கிடைக்கும், மேலும் கேரி பிட் அமைக்கப்படும். கேரி பிட் அமைக்கப்பட்டிருந்தால், உயர் வரிசைப் பைட்டையும் அதிகரிக்க வேண்டும் என்பது நமக்குத் தெரியும்.",
"Got a cool 6502 example?\nShare it with the community!": "கூல் 6502 சான்று கிடைத்ததா? \nசமூகத்துடன் பகிர்ந்து கொள்ளுங்கள்!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "உங்களுடைய சொந்த 6502 படைப்பு ஏதேனும் உள்ளதா? அதைச் சமூகத்துடன் பகிருங்கள்! இப்போது உங்கள் குறியீட்டு எடுத்துக்காட்டுகளை நேரடியாகப் பயன்பாட்டிற்குள்ளிருந்தே சமர்ப்பிக்கலாம். பகிர் பொத்தானை அழுத்தினால் போதும் — உங்களுக்காக GitHub சிக்கலையும் இழுக்கக் கோரிக்கையையும் நாங்கள் தானாகவே உருவாக்கிவிடுவோம்.",
+ "Great start — you finished the first chapter!": "சிறந்த தொடக்கம் — முதல் அத்தியாயத்தை முடித்துவிட்டீர்கள்!",
"Green": "பச்சை",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "எங்களின் முதல் வலமிருந்து இடமாக ஈப்ரு மொழியும் உள்ளது: மெனாகெமின் சோதனை மற்றும் பங்களிப்புகளுக்கு நன்றி, ஆப்ச் இப்போது வலமிருந்து இடமாக தளவமைப்புகளை ஆதரிக்கிறது, மேலும் RTL மொழிகளுக்கு அதை ஆயத்தம் செய்கிறது.",
"Help": "உதவி",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "அசெம்பிளி மொழியில் உள்ள வழிமுறைகள் முன் வரையறுக்கப்பட்ட செயல்பாடுகளின் சிறிய தொகுப்பைப் போன்றது. அனைத்து வழிமுறைகளும் பூச்சியம் அல்லது ஒரு வாதங்களை எடுக்கும். சில வேறுபட்ட வழிமுறைகளை அறிமுகப்படுத்த சில சிறுகுறிப்பு மூலக் குறியீடு இங்கே:",
"Interactive tutorial": "ஊடாடும் பயிற்சி",
"Interactive tutorials guide you from beginner to advanced": "இன்டராக்டிவ் டுடோரியல்கள் தொடக்கநிலையிலிருந்து மேம்பட்ட வரை உங்களுக்கு வழிகாட்டும்",
+ "Interface font": "இடைமுக எழுத்துரு",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "குறுக்கீடு கொடி: அமைக்கப்படும் போது, அனைத்து மாச்க் செய்யக்கூடிய குறுக்கீடுகளையும் (IRQ) முகமூடிகள் (முடக்குகிறது). மாச்கபிள் அல்லாத குறுக்கீடுகள் (NMI) மட்டுமே இன்னும் ஏற்படலாம். குறுக்கீடு செய்யாத குறியீட்டின் முக்கியமான பிரிவுகளுக்குப் பயன்படுத்தப்படுகிறது.",
"Introduction": "அறிமுகம்",
"JMP": "சேஎம்பி",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "மீட்டமைப்பில் (சிமுலேட்டர்): P = $30 (bit5 மற்றும் B set; D மற்றும் I தெளிவானது)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "மதிப்புகள் பாம்புக்கு கீழே மாற்றப்பட்டவுடன், தலையை என்ன செய்வது என்று நாம் வேலை செய்ய வேண்டும். திசை முதலில் A இல் ஏற்றப்படும். LSR என்றால் \"லாசிக்கல் சிப்ட் வலப்பக்கம்\" அல்லது \"அனைத்து பிட்களையும் ஒரு நிலைக்கு வலப்புறமாக மாற்றவும்\". குறைந்த முக்கியத்துவம் வாய்ந்த பிட் கேரிக் கொடியில் மாற்றப்படுகிறது, எனவே திரட்டி 1 எனில், LSR க்குப் பிறகு அது 0, கேரி ஃபிளாக் செட் ஆகும்.",
"Open Assembly File": "அசெம்பிளி கோப்பைத் திறக்கவும்",
+ "Open Source": "திறந்த மூல",
"Open...": "திற...",
"Opened %s": "%s திறக்கப்பட்டது",
"Optimized Flatpak configuration by removing unnecessary permissions": "தேவையற்ற அனுமதிகளை அகற்றுவதன் மூலம் உகந்த Flatpak உள்ளமைவு",
@@ -373,10 +378,16 @@
"Stopped": "நிறுத்தப்பட்டது",
"Style": "சூல் தண்டு",
"Submit": "சமர்ப்பிக்கவும்",
+ "Support": "ஆதரவு",
+ "Supporter": "ஆதரவாளர்",
"Syntax error line %d: %s": "தொடரியல் பிழை வரி %d: %s",
+ "System font": "கணினி இயல்புநிலை",
+ "System font, GNOME size": "கணினி எழுத்துரு, GNOME அளவு",
"Teal": "டீல்",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "வருக! பின்னிச் மொழிபெயர்ப்புகளை வரவேற்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம், அன்புடன் சிரி க்ரோன்ரூச் பங்களித்தார். நன்றி!",
"Test your creations on a virtual game console": "உங்கள் படைப்புகளை மெய்நிகர் கேம் கன்சோலில் சோதிக்கவும்",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "LSR மற்றும் BCC மூலம் A இன் பிட் 0-ஐ சோதித்து, முடிவாக A-இல் 1 அல்லது 0-ஐ வைக்கிறது",
+ "Thank you for using open source software.": "திறந்த மூல மென்பொருளைப் பயன்படுத்தியதற்கு நன்றி.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 ஆனது 16-பிட் முகவரி பச்சைப் பயன்படுத்துகிறது, அதாவது செயலிக்கு 65536 பைட்டுகள் நினைவகம் உள்ளது. ஒரு பைட் இரண்டு ஃச் எழுத்துகளால் குறிக்கப்படுகிறது என்பதை நினைவில் கொள்ளுங்கள், எனவே நினைவக இருப்பிடங்கள் பொதுவாக $0000 - $ffff எனக் குறிப்பிடப்படுகின்றன. கீழே விவரிக்கப்பட்டுள்ளபடி, இந்த நினைவக இருப்பிடங்களைக் குறிப்பிட பல்வேறு வழிகள் உள்ளன.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "BIT ஆப்கோட் AND ஐப் போன்றது, ஆனால் கணக்கீடு பூச்சியக் கொடியை அமைக்க மட்டுமே பயன்படுகிறது — உண்மையான முடிவு நிராகரிக்கப்படுகிறது. திரட்டியை வாதத்துடன் AND செய்த முடிவு பூச்சியமாக இருந்தால் மட்டுமே பூச்சியக் கொடி அமைக்கப்படும். இரண்டின் அடுக்குகளைப் பார்க்கும்போது, இரண்டு எண்களும் ஒன்றாக இல்லாவிட்டால் மட்டுமே பூச்சியக் கொடி அமைக்கப்படும். எடுத்துக்காட்டாக, 0001 AND 0001 பூச்சியம் அல்ல, ஆனால் 0001 AND 0010 பூச்சியம்.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "init சப்ரூட்டின், initSnake மற்றும் generateApplePosition ஆகிய இரண்டு சப்ரூட்டின்களிடம் வேலையை ஒப்படைக்கிறது. initSnake பாம்பின் திசையையும் நீளத்தையும் அமைத்து, பின்னர் பாம்பின் தலை மற்றும் உடலின் தொடக்க நினைவக இடங்களை ஏற்றுகிறது. $10 இல் உள்ள பைட் சோடி தலையின் திரை இருப்பிடத்தைக் கொண்டுள்ளது, $12 இல் உள்ள சோடி ஒற்றை உடல் பகுதியின் இருப்பிடத்தைக் கொண்டுள்ளது, $14 வாலின் இருப்பிடத்தைக் கொண்டுள்ளது (வால் என்பது உடலின் கடைசிப் பகுதி; பாம்பு நகர்ந்துகொண்டே இருப்பதற்காக அது கருப்பு நிறத்தில் வரையப்படுகிறது). இது பின்வரும் குறியீட்டில் நிகழ்கிறது:",
@@ -386,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "ச்டாக் பாயிண்டர் சப்ரூட்டின்கள் மற்றும் குறுக்கீடுகளுக்கான அழைப்பு அடுக்கை நிர்வகிக்கிறது. இது $FF (ச்டாக்கின் மேல்) தொடங்கி கீழ்நோக்கி வளரும். புச்/புல் செயல்பாடுகள், சேஎச்ஆர்/ஆர்டிஎச் அழைப்புகள் மற்றும் குறுக்கீடு கையாளுதல் ஆகியவற்றுக்குப் பயன்படுத்தப்படுகிறது. உள்ளமை செயல்பாடு அழைப்புகளுக்கு முக்கியமானது.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "ஃச் குறியீட்டுப் பதிவேடு குறியீட்டு முகவரி முறைகள் மற்றும் எண்ணும் செயல்பாடுகளுக்குப் பயன்படுத்தப்படுகிறது. இது லூப் கவுண்டர்கள், வரிசை குறியீடுகளை வைத்திருக்க முடியும், மேலும் X ஐ ஆஃப்செட்டாகப் பயன்படுத்தி அடிப்படை முகவரியுடன் தொடர்புடைய நினைவக இருப்பிடங்களை அணுகுவதற்கு இது தேவை. சிறப்பு: TSX/TXS ஃச் ஐ ச்டாக் பாயிண்டருக்கு/இருந்து பரிமாற்றம்.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "ஒய் குறியீட்டுப் பதிவு ஃச் ஐப் போன்றது மற்றும் சிறப்பு செயல்பாடுகள் இல்லை. குறியீட்டு முகவரி மற்றும் தரவு இயக்கத்திற்கு பொதுவாகப் பயன்படுத்தப்படுகிறது.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "இந்தப் பயன்பாடு GNOME இடைமுக எழுத்துருவுக்காக வடிவமைக்கப்பட்டுள்ளது. பிற அமைப்புகளில் அந்த அமைப்பின் எழுத்துருவில் வரையப்படும், அது பொதுவாகச் சிறியதாக இருக்கும்.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "கருப்பு கேம் கன்சோல் திரை இப்போது மேல் இடதுபுறத்தில் மூன்று வண்ண \"பிக்சல்களை\" காட்ட வேண்டும்.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "கீழே உள்ள குறியீடு தொகுதி விளையாட்டின் முழு மூலக் குறியீட்டையும் கொண்டுள்ளது. இது எவ்வாறு செயல்படுகிறது என்பதை பின்வரும் பிரிவுகளில் விளக்குகிறேன்.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "இதன் விளைவு, திரட்டியின் மிகக் குறைவான குறிப்பிடத்தக்க இரண்டு பிட்களை மறைத்து, மற்றவற்றை பூச்சியத்திற்கு அமைப்பதாகும். இது 0–255 வரம்பில் உள்ள எண்ணை 0–3 வரம்பில் உள்ள எண்ணாக மாற்றுகிறது.",
@@ -450,6 +462,7 @@
"Write and edit code with a built-in code editor": "உள்ளமைக்கப்பட்ட குறியீடு திருத்தி மூலம் குறியீட்டை எழுதி திருத்தவும்",
"Yellow": "மஞ்சள்",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "திரையை 32 × 8 படப்புள்ளிகள் கொண்ட நான்கு கிடைமட்ட பட்டைகளாக நீங்கள் நினைக்கலாம். இந்த கீற்றுகள் $0200-$02ff, $0300-$03ff, $0400-$04ff மற்றும் $0500-$05ff. பிக்சல்களின் முதல் வரிசைகள் $0200-$021f, $0220-$023f, $0240-$025f போன்றவை.",
+ "You supported this open source project by buying the app. Thank you!": "பயன்பாட்டை வாங்குவதன் மூலம் இந்தத் திறந்த மூலத் திட்டத்தை ஆதரித்துள்ளீர்கள். நன்றி!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "நீங்கள் TAX பார்த்திருக்கிறீர்கள். TAY, TXA மற்றும் TYA என்ன செய்வது என்று நீங்கள் யூகிக்கலாம், ஆனால் உங்கள் அனுமானங்களைச் சோதிக்க சில குறியீட்டை எழுதுங்கள்.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "உங்கள் கோப்பில் சேமிக்கப்படாத மாற்றங்கள் உள்ளன. நீங்கள் அவற்றைச் சேமிக்கவில்லை என்றால் மாற்றங்கள் இழக்கப்படும்.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "பூச்சியக் கொடி: செயல்பாட்டின் முடிவு பூச்சியமாக இருக்கும்போது அமைக்கவும். நிபந்தனைக்குட்பட்ட கிளைகளுக்கு இன்றியமையாதது - மிகவும் நிபந்தனைக்குட்பட்ட சம்ப் வழிமுறைகள் (BEQ, BNE) மதிப்பானது பூச்சியமா என்பதை அடிப்படையாகக் கொண்டு நிரல் ஓட்டத்தைத் தீர்மானிக்க இந்தக் கொடியைச் சரிபார்க்கவும்.",
diff --git a/packages/app-android/app/i18n/uk.json b/packages/app-android/app/i18n/uk.json
index d37db0a7..9749839e 100644
--- a/packages/app-android/app/i18n/uk.json
+++ b/packages/app-android/app/i18n/uk.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Покращено представлення застосунку та доступність",
"Enhanced the hex monitor address range input for easier value editing": "Покращено введення діапазону адрес hex-монітора для легшого редагування значень",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Озброєні цими знаннями, ви маєте побачити, що інструкція LDA #$01 завантажує шістнадцяткове значення $01 у регістр A. Докладніше про регістри — у наступному розділі.",
+ "Even Odd": "Парне чи непарне",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Хоча це буде спрощена версія, код буде значно більший за попередні приклади. Потрібно відстежувати кілька комірок пам’яті для різних аспектів гри. Ми могли б і надалі виконувати потрібний облік вручну по всій програмі, як раніше, але в більшому масштабі це швидко стає виснажливим і веде до важковиявних помилок. Тож доручимо частину рутинної роботи асемблеру.",
"Example submitted for review": "Приклад надіслано на перевірку",
"Examples": "Приклади",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Виправлено проблему, через яку кнопка «Назад» у розділі навчання була завжди видимою в режимі робочого столу та планшета, навіть коли жодна підсторінка не була відкрита.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Виправлено помилку збірки на PostmarketOS, покращуючи сумісність з мобільними пристроями",
"Follow system style": "Дотримуватися системного стилю",
+ "Font": "Шрифт",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Для Linux тепер є й AppImage: один файл, без встановлення, стане в пригоді на дистрибутиві, для якого ми не збираємо пакунок.",
"Found %d label.": "Знайдено %d мітку.",
"Found %d labels.": "Знайдено %d міток.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Перехід між смугами складніший, бо треба враховувати і старший байт. Наприклад, перехід донизу з $02e1 має привести до $0301. На щастя, це легко реалізувати: додавання $20 до $e1 дає $01 і встановлює біт перенесення. Якщо біт перенесення встановлено, треба також інкрементувати старший байт.",
"Got a cool 6502 example?\nShare it with the community!": "Є класний приклад 6502?\nПоділіться ним зі спільнотою!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Є власна класна розробка на 6502? Поділіться нею зі спільнотою! Тепер ви можете надсилати свої приклади коду безпосередньо з додатку. Просто натисніть кнопку «Поділитися», і ми автоматично створимо для вас issue та pull request на GitHub.",
+ "Great start — you finished the first chapter!": "Чудовий початок — ви завершили перший розділ!",
"Green": "Зелений",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Іврит — це також наша перша мова з письмом справа наліво: завдяки тестуванню та внескам Menachem застосунок тепер підтримує розташування справа наліво й готовий до нових мов RTL.",
"Help": "Допомога",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Інструкції в асемблері — це невеликий набір наперед визначених операцій. Кожна інструкція має нуль або один аргумент. Нижче — анотований код, що показує кілька різних інструкцій:",
"Interactive tutorial": "Інтерактивний посібник",
"Interactive tutorials guide you from beginner to advanced": "Інтерактивні посібники ведуть вас від початківця до просунутого рівня",
+ "Interface font": "Шрифт інтерфейсу",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Прапорець переривань: коли встановлений, маскує (вимикає) всі масковані переривання (IRQ). Можливі лише немасковані переривання (NMI). Використовується для критичних ділянок коду, які не можна переривати.",
"Introduction": "Вступ",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Після скидання (симулятор): P = $30 (встановлені bit5 і B; D та I скинуті)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Після зсуву значень уздовж тіла змійки треба вирішити, що робити з головою. Спочатку напрямок завантажується в A. LSR означає «логічний зсув праворуч», тобто зсув усіх бітів на одну позицію вправо. Молодший біт переходить у прапорець перенесення, тому якщо акумулятор дорівнює 1, після LSR він стане 0, а прапорець перенесення буде встановлено.",
"Open Assembly File": "Відкрити файл асемблера",
+ "Open Source": "Відкритий код",
"Open...": "Відкрити...",
"Opened %s": "Відкрито %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Оптимізовано конфігурацію Flatpak шляхом видалення непотрібних дозволів",
@@ -373,11 +378,16 @@
"Stopped": "Зупинено",
"Style": "Стиль",
"Submit": "Надіслати",
+ "Support": "Підтримати",
+ "Supporter": "Прихильник",
"Syntax error line %d: %s": "Синтаксична помилка в рядку %d: %s",
"System font": "Системне за замовчуванням",
+ "System font, GNOME size": "Системний шрифт, розмір GNOME",
"Teal": "Бірюзовий",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Ми раді вітати фінський переклад, люб'язно наданий Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Тестуйте свої творіння на віртуальній ігровій консолі",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Перевіряє біт 0 регістра A за допомогою LSR і BCC та записує в A результат: 1 або 0",
+ "Thank you for using open source software.": "Дякуємо, що користуєтеся програмним забезпеченням з відкритим кодом.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 має 16‑бітну шину адреси, тобто процесору доступні 65536 байтів пам’яті. Пам’ятайте: байт записується двома шістнадцятковими символами, тож адреси зазвичай подають як $0000 - $ffff. Нижче описано різні способи посилання на ці адреси.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "Операція BIT подібна до AND, але обчислення використовується лише для встановлення нульового прапорця — фактичний результат відкидається. Нульовий прапорець встановлюється тільки якщо результат AND акумулятора з аргументом дорівнює нулю. Для степенів двійки нульовий прапорець встановлюється лише тоді, коли біти не збігаються. Наприклад, 0001 AND 0001 не дорівнює нулю, а 0001 AND 0010 — нуль.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "Підпрограма init делегує двом підпрограмам: initSnake і generateApplePosition. initSnake встановлює напрямок і довжину змійки, а також завантажує початкові адреси голови та тіла. Пара байтів у $10 містить екранну адресу голови, пара в $12 — адресу єдиного сегмента тіла, а $14 — адресу хвоста (хвіст — останній сегмент тіла і малюється чорним, щоб змійка рухалась). Це виглядає так:",
@@ -387,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Вказівник стека керує стеком викликів для підпрограм і переривань. Він починається з $FF (вершина стека) і зростає вниз. Використовується для операцій PUSH/PULL, викликів JSR/RTS та обробки переривань. Критично важливий для вкладених викликів функцій.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Індексний регістр X використовується для режимів індексної адресації та операцій підрахунку. Він може зберігати лічильники циклів, індекси масивів і є необхідним для доступу до комірок пам'яті відносно базової адреси, використовуючи X як зміщення. Особливе: TSX/TXS передають X до/з вказівника стека.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Індексний регістр Y подібний до X і не має спеціальних функцій. Зазвичай використовується для індексної адресації та переміщення даних.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Застосунок розроблено для шрифту інтерфейсу GNOME. В інших системах він відображається шрифтом цієї системи, який зазвичай менший.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Тепер на чорному екрані консолі має бути три кольорові «пікселі» у верхньому лівому куті.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Блок коду нижче містить повний вихідний код гри. Далі я поясню, як він працює.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "У результаті маскуються два молодші біти акумулятора, інші обнуляються. Це перетворює число з діапазону 0–255 на число в діапазоні 0–3.",
@@ -451,6 +462,7 @@
"Write and edit code with a built-in code editor": "Пишіть і редагуйте код у вбудованому редакторі",
"Yellow": "Жовтий",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Екран можна уявити як чотири горизонтальні смуги по 32 × 8 пікселів. Вони відповідають діапазонам $0200-$02ff, $0300-$03ff, $0400-$04ff і $0500-$05ff. Перші рядки пікселів: $0200-$021f, $0220-$023f, $0240-$025f тощо.",
+ "You supported this open source project by buying the app. Thank you!": "Ви підтримали цей проєкт з відкритим кодом, купивши застосунок. Дякуємо!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Ви вже бачили TAX. Можете здогадатися, що роблять TAY, TXA і TYA, але напишіть трохи коду, щоб перевірити здогадки.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "У вашому файлі є незбережені зміни. Зміни буде втрачено, якщо ви їх не збережете.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Нульовий прапорець: встановлюється, коли результат операції дорівнює нулю. Критично важливий для умовних переходів — більшість інструкцій (BEQ, BNE) перевіряють його, щоб визначати потік виконання.",
diff --git a/packages/app-android/app/i18n/vi.json b/packages/app-android/app/i18n/vi.json
index 93722343..0160fabd 100644
--- a/packages/app-android/app/i18n/vi.json
+++ b/packages/app-android/app/i18n/vi.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "Khả năng truy cập và trình bày ứng dụng nâng cao",
"Enhanced the hex monitor address range input for easier value editing": "Cải tiến đầu vào phạm vi địa chỉ màn hình hex để chỉnh sửa giá trị dễ dàng hơn",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "Được trang bị kiến thức đó, bạn sẽ có thể thấy rằng lệnh LDA #$01 tải giá trị hex $01 vào thanh ghi A. Tôi sẽ đi vào chi tiết hơn về sổ đăng ký trong phần tiếp theo.",
+ "Even Odd": "Chẵn Lẻ",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "Mặc dù đây sẽ là một phiên bản đơn giản nhưng mã sẽ lớn hơn đáng kể so với tất cả các ví dụ trước đó. Chúng ta sẽ cần phải theo dõi nhiều vị trí bộ nhớ cùng nhau cho các khía cạnh khác nhau của trò chơi. Chúng tôi vẫn có thể tự mình thực hiện các công việc ghi sổ cần thiết trong suốt chương trình như trước đây, nhưng ở quy mô lớn hơn, việc này nhanh chóng trở nên tẻ nhạt và cũng có thể dẫn đến các lỗi khó phát hiện. Thay vào đó, bây giờ chúng ta sẽ để trình biên dịch mã thực hiện một số công việc tầm thường cho chúng ta.",
"Example submitted for review": "Ví dụ được gửi để xem xét",
"Examples": "Ví dụ",
@@ -192,6 +193,7 @@
"Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open.": "Đã sửa lỗi nút Lui lại trong phần học luôn hiển thị ở chế độ máy tính để bàn và máy tính bảng, ngay cả khi không có trang con nào được mở.",
"Fixed build error on PostmarketOS, improving mobile compatibility": "Đã sửa lỗi xây dựng trên PostmarketOS, cải thiện khả năng tương thích với thiết bị di động",
"Follow system style": "Theo phong cách hệ thống",
+ "Font": "Phông chữ",
"For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.": "Với Linux hiện cũng có AppImage: một tệp duy nhất, không cần cài đặt, hữu ích trên bản phân phối mà chúng tôi không đóng gói sẵn.",
"Found %d label.": "Đã tìm thấy nhãn %d.",
"Found %d labels.": "Đã tìm thấy nhãn %d.",
@@ -205,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "Việc chuyển đổi giữa các phần phức tạp hơn vì chúng ta cũng phải tính đến byte quan trọng nhất. Ví dụ: giảm từ $02e1 sẽ dẫn đến $0301. May mắn thay, điều này khá dễ thực hiện. Việc thêm $20 vào $e1 sẽ tạo ra $01 và đặt cờ nhớ. Nếu cờ nhớ được đặt, chúng ta biết rằng chúng ta cũng cần tăng byte quan trọng nhất.",
"Got a cool 6502 example?\nShare it with the community!": "Bạn có một ví dụ thú vị về 6502?\nHãy chia sẻ nó với cộng đồng!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "Bạn có sáng tạo 6502 thú vị của riêng mình không? Hãy chia sẻ nó với cộng đồng! Bây giờ bạn có thể gửi ví dụ mã của mình trực tiếp từ trong ứng dụng. Chỉ cần nhấn nút chia sẻ và chúng tôi sẽ tự động tạo issue GitHub và pull request cho bạn.",
+ "Great start — you finished the first chapter!": "Khởi đầu tuyệt vời — bạn đã hoàn thành chương đầu tiên!",
"Green": "Xanh lá",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "Tiếng Do Thái cũng là ngôn ngữ viết từ phải sang trái đầu tiên của chúng tôi: nhờ việc kiểm thử và những đóng góp của Menachem, ứng dụng hiện đã hỗ trợ bố cục từ phải sang trái, sẵn sàng cho nhiều ngôn ngữ RTL khác.",
"Help": "Trợ giúp",
@@ -244,6 +247,7 @@
"Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here's some annotated source code to introduce a few different instructions:": "Các hướng dẫn trong hợp ngữ giống như một tập hợp nhỏ các hàm được xác định trước. Tất cả các hướng dẫn đều có 0 hoặc một đối số. Dưới đây là một số mã nguồn có chú thích để giới thiệu một số hướng dẫn khác nhau:",
"Interactive tutorial": "Hướng dẫn tương tác",
"Interactive tutorials guide you from beginner to advanced": "Hướng dẫn tương tác hướng dẫn bạn từ cơ bản đến nâng cao",
+ "Interface font": "Phông chữ giao diện",
"Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted.": "Cờ Ngắt: Khi được đặt, sẽ che dấu (vô hiệu hóa) tất cả các ngắt có thể che được (IRQ). Chỉ các ngắt không thể che giấu (NMI) vẫn có thể xảy ra. Được sử dụng cho các phần mã quan trọng không được bị gián đoạn.",
"Introduction": "Giới thiệu",
"JMP": "JMP",
@@ -280,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "Khi đặt lại (trình mô phỏng): P = $30 (bit5 và B được đặt; D và I xóa)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "Khi các giá trị đã được chuyển xuống con rắn, chúng ta phải tìm ra những việc cần làm với phần đầu. Hướng đầu tiên được tải vào A. LSR có nghĩa là \"dịch chuyển logic sang phải\" hoặc \"dịch chuyển tất cả các bit sang phải một vị trí\". Bit ít quan trọng nhất được chuyển sang cờ nhớ, vì vậy nếu bộ tích lũy là 1 thì sau LSR thì đó là 0, với cờ nhớ được đặt.",
"Open Assembly File": "Mở Tệp Hợp Ngữ",
+ "Open Source": "Mã nguồn mở",
"Open...": "Mở...",
"Opened %s": "Đã Mở %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "Cấu hình Flatpak được tối ưu hóa bằng cách loại bỏ các quyền không cần thiết",
@@ -373,10 +378,16 @@
"Stopped": "Đã Dừng",
"Style": "Phong Cách",
"Submit": "Nộp",
+ "Support": "Ủng hộ",
+ "Supporter": "Người ủng hộ",
"Syntax error line %d: %s": "Dòng lỗi cú pháp %d: %s",
+ "System font": "Mặc định hệ thống",
+ "System font, GNOME size": "Phông chữ hệ thống, cỡ GNOME",
"Teal": "Xanh Mòng Két",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! Chúng tôi vui mừng chào đón bản dịch tiếng Phần Lan, được đóng góp bởi Jiri Grönroos. Kiitos!",
"Test your creations on a virtual game console": "Kiểm tra sự sáng tạo của bạn trên bảng điều khiển trò chơi ảo",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "Kiểm tra bit 0 của A bằng LSR và BCC, đặt 1 hoặc 0 vào A làm kết quả",
+ "Thank you for using open source software.": "Cảm ơn bạn đã sử dụng phần mềm mã nguồn mở.",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 sử dụng bus địa chỉ 16 bit, nghĩa là có 65536 byte bộ nhớ dành cho bộ xử lý. Hãy nhớ rằng một byte được biểu thị bằng hai ký tự hex, do đó vị trí bộ nhớ thường được biểu thị dưới dạng $0000 - $ffff. Có nhiều cách khác nhau để đề cập đến các vị trí bộ nhớ này, như được trình bày chi tiết bên dưới.",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "Mã hoạt động BIT tương tự như AND, nhưng phép tính chỉ được sử dụng để đặt cờ 0 - kết quả thực tế sẽ bị loại bỏ. Cờ 0 chỉ được đặt nếu kết quả của AND-ing bộ tích lũy với đối số bằng 0. Khi chúng ta xét lũy thừa của hai, cờ số 0 sẽ chỉ được đặt nếu hai số không giống nhau. Ví dụ: 0001 AND 0001 không phải là 0, nhưng 0001 AND 0010 là 0.",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "Chương trình con init bao gồm hai chương trình con, initSnake và generateApplePosition. initSnake đặt hướng, chiều dài của con rắn, sau đó tải các vị trí bộ nhớ ban đầu của đầu và thân con rắn. Cặp byte tại $10 chứa vị trí màn hình của phần đầu, cặp tại $12 chứa vị trí của một đoạn cơ thể và $14 chứa vị trí của đuôi (đuôi là đoạn cuối cùng của cơ thể và được vẽ màu đen để giữ cho con rắn chuyển động). Điều này xảy ra trong đoạn mã sau:",
@@ -386,6 +397,7 @@
"The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls.": "Con Trỏ Ngăn Xếp quản lý ngăn xếp cuộc gọi cho các chương trình con và các ngắt. Nó bắt đầu ở $FF (đỉnh ngăn xếp) và tăng dần xuống dưới. Được sử dụng cho các hoạt động PUSH/PULL, lệnh gọi JSR/RTS và xử lý ngắt. Quan trọng đối với các lệnh gọi hàm lồng nhau.",
"The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer.": "Thanh Ghi Chỉ Mục X được sử dụng cho các chế độ đánh địa chỉ được lập chỉ mục và các hoạt động đếm. Nó có thể chứa bộ đếm vòng lặp, chỉ mục mảng và rất cần thiết để truy cập các vị trí bộ nhớ liên quan đến địa chỉ cơ sở bằng cách sử dụng X làm phần bù. Đặc biệt: TSX/TXS truyền X đến/từ con trỏ ngăn xếp.",
"The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement.": "Thanh ghi chỉ số Y tương tự như X và không có chức năng đặc biệt. Thường được sử dụng để đánh địa chỉ và di chuyển dữ liệu.",
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system's font, which is usually smaller.": "Ứng dụng được thiết kế cho phông chữ giao diện của GNOME. Trên các hệ thống khác, ứng dụng được hiển thị bằng phông chữ của hệ thống đó, thường nhỏ hơn.",
"The black game console screen now should show three coloured \"pixels\" at the top left.": "Màn hình bảng điều khiển trò chơi màu đen bây giờ sẽ hiển thị ba \"pixel\" màu ở trên cùng bên trái.",
"The code block below contains the entire source code of the game. I'll explain how it works in the following sections.": "Khối mã bên dưới chứa toàn bộ mã nguồn của trò chơi. Tôi sẽ giải thích cách nó hoạt động trong các phần sau.",
"The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3.": "ác dụng của việc này là che giấu hai bit có ý nghĩa nhỏ nhất của bộ tích lũy, đặt các bit còn lại về 0. Điều này chuyển đổi một số trong phạm vi 0–255 thành một số trong phạm vi 0–3.",
@@ -450,6 +462,7 @@
"Write and edit code with a built-in code editor": "Viết và chỉnh sửa code bằng trình chỉnh sửa code tích hợp",
"Yellow": "Vàng",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "Bạn có thể coi màn hình là bốn dải ngang 32 × 8 pixel. Các dải này ánh xạ tới $0200-$02ff, $0300-$03ff, $0400-$04ff và $0500-$05ff. Các hàng pixel đầu tiên là $0200-$021f, $0220-$023f, $0240-$025f, v.v.",
+ "You supported this open source project by buying the app. Thank you!": "Bạn đã ủng hộ dự án mã nguồn mở này bằng cách mua ứng dụng. Cảm ơn bạn!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "Bạn đã xem TAX. Bạn có thể đoán TAY, TXA và TYA làm gì, nhưng hãy viết một số mã để kiểm tra giả định của bạn.",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "Tệp của bạn có những thay đổi chưa được lưu. Các thay đổi sẽ bị mất nếu bạn không lưu chúng.",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "Cờ 0: Đặt khi kết quả của thao tác bằng 0. Cần thiết cho việc phân nhánh có điều kiện - hầu hết các lệnh nhảy có điều kiện (BEQ, BNE) đều kiểm tra cờ này để xác định luồng chương trình dựa trên việc giá trị có bằng 0 hay không.",
diff --git a/packages/app-android/app/i18n/zh.json b/packages/app-android/app/i18n/zh.json
index 2c653dc3..0d77443f 100644
--- a/packages/app-android/app/i18n/zh.json
+++ b/packages/app-android/app/i18n/zh.json
@@ -175,6 +175,7 @@
"Enhanced app presentation and accessibility": "改进了应用呈现与无障碍性",
"Enhanced the hex monitor address range input for easier value editing": "改进十六进制监视器的地址范围输入,便于编辑数值",
"Equipped with that knowledge, you should be able to see that the instruction LDA #$01 loads the hex value $01 into register A. I'll go into more detail on registers in the next section.": "掌握这些知识后,你应该能看出指令 LDA #$01 会把十六进制值 $01 加载到寄存器 A 中。关于寄存器的更多细节将在下一节介绍。",
+ "Even Odd": "奇偶判断",
"Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we'll now let the assembler do some of the mundane work for us.": "虽然这将是一个简单版本,代码会比以往示例大得多。我们需要同时跟踪游戏各方面的多个内存位置。我们也可以像之前那样自己在程序中做必要的“簿记”,但规模变大后会很繁琐且易出错。相反,我们现在让汇编器替我们处理一部分琐事。",
"Example submitted for review": "已提交示例供审核",
"Examples": "示例",
@@ -206,6 +207,7 @@
"Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from $02e1 should lead to $0301. Luckily, this is fairly easy to accomplish. Adding $20 to $e1 results in $01 and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte.": "在不同区域之间移动更复杂,因为还需要考虑高字节。例如,从 $02e1 向下应到达 $0301。幸运的是这并不难:将 $20 加到 $e1 得到 $01 并置位进位位。如果进位被置位,我们还需要递增高字节。",
"Got a cool 6502 example?\nShare it with the community!": "有很酷的 6502 示例吗?\n与社区分享吧!",
"Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we'll automatically create a GitHub issue and pull request for you.": "有自己很酷的6502作品吗?与社区分享吧!您现在可以直接从应用程序内提交代码示例。只需点击分享按钮,我们将自动为您创建GitHub issue和pull request。",
+ "Great start — you finished the first chapter!": "开局不错——你已完成第一章!",
"Green": "绿色",
"Hebrew is also our first right-to-left language: thanks to Menachem's testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages.": "希伯来语也是我们首个从右向左书写的语言:得益于 Menachem 的测试和贡献,应用现已支持从右向左的布局,为支持更多 RTL 语言做好了准备。",
"Help": "帮助",
@@ -282,6 +284,7 @@
"On reset (simulator): P = $30 (bit5 and B set; D and I clear)": "复位(模拟器)时:P = $30(第 5 位与 B 置位;D 与 I 清零)",
"Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into A. LSR means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is 1, after LSR it is 0, with the carry flag set.": "当值沿着蛇身下移后,需要决定如何处理蛇头。先将方向加载到 A。LSR 表示\"逻辑右移\",即将所有位右移一位。最低位会移入进位标志,因此如果累加器为 1,执行 LSR 后变为 0,且进位标志被置位。",
"Open Assembly File": "汇编文件",
+ "Open Source": "开源",
"Open...": "打开…",
"Opened %s": "已打开 %s",
"Optimized Flatpak configuration by removing unnecessary permissions": "通过移除不必要的权限优化了 Flatpak 配置",
@@ -375,12 +378,16 @@
"Stopped": "已停止",
"Style": "样式",
"Submit": "提交",
+ "Support": "支持",
+ "Supporter": "支持者",
"Syntax error line %d: %s": "语法错误 第 %d 行:%s",
"System font": "系统默认",
"System font, GNOME size": "系统字体,使用GNOME大小",
"Teal": "青色",
"Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!": "Tervetuloa! 我们很高兴迎来芬兰语翻译,由 Jiri Grönroos 友情贡献。Kiitos!",
"Test your creations on a virtual game console": "在虚拟游戏主机上测试你的作品",
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result": "用 LSR 和 BCC 测试 A 的第 0 位,并将结果 1 或 0 存入 A",
+ "Thank you for using open source software.": "感谢你使用开源软件。",
"The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as $0000 - $ffff. There are various ways to refer to these memory locations, as detailed below.": "6502 使用 16 位地址总线,这意味着处理器可以访问 65536 字节的内存。请记住一个字节用两个十六进制字符表示,因此内存位置通常表示为 $0000 - $ffff。访问这些内存位置有多种方式,详述如下。",
"The BIT opcode is similar to AND, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we're looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, 0001 AND 0001 is not zero, but 0001 AND 0010 is zero.": "BIT 指令与 AND 相似,但计算结果仅用于设置零标志——实际结果会被丢弃。仅当累加器与参数进行 AND 运算的结果为零时,零标志才会置位。对于 2 的幂,仅当两个数不相同时零标志才会置位。例如,0001 AND 0001 不为零,但 0001 AND 0010 为零。",
"The init subroutine defers to two subroutines, initSnake and generateApplePosition. initSnake sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at $10 contains the screen location of the head, the pair at $12 contains the location of the single body segment, and $14 contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:": "init 子程序调用两个子程序:initSnake 和 generateApplePosition。initSnake 设置蛇的方向和长度,然后加载蛇头与身体的初始内存位置。$10 处的字节对包含蛇头的屏幕位置,$12 处的字节对包含唯一身体段的位置,$14 包含尾部位置(尾部是身体的最后一段,用黑色绘制以保持蛇的移动)。这在以下代码中实现:",
@@ -455,6 +462,7 @@
"Write and edit code with a built-in code editor": "使用内置代码编辑器编写与编辑代码",
"Yellow": "黄色",
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to $0200-$02ff, $0300-$03ff, $0400-$04ff and $0500-$05ff. The first rows of pixels are $0200-$021f, $0220-$023f, $0240-$025f, etc.": "可以将屏幕看作 4 个横向条,每个条 32 × 8 像素。它们映射到 $0200-$02ff、$0300-$03ff、$0400-$04ff 和 $0500-$05ff。第一行像素是 $0200-$021f、$0220-$023f、$0240-$025f 等。",
+ "You supported this open source project by buying the app. Thank you!": "你购买了这款应用,从而支持了这个开源项目。谢谢!",
"You've seen TAX. You can probably guess what TAY, TXA and TYA do, but write some code to test your assumptions.": "你已经看过 TAX 了。你大概能猜到 TAY、TXA 和 TYA 的作用,但请编写代码来验证你的假设。",
"Your file has unsaved changes. Changes will be lost if you don't save them.": "你的文件有未保存的更改。如不保存,这些更改将会丢失。",
"Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero.": "零标志(Z):当运算结果为零时置位。对条件分支至关重要——大多数条件跳转(BEQ、BNE)会检查该标志以依据是否为零来决定流程。",
diff --git a/packages/app-android/data/Android/src/main/res/values-de/strings.xml b/packages/app-android/data/Android/src/main/res/values-de/strings.xml
index 0276455d..cc870d11 100644
--- a/packages/app-android/data/Android/src/main/res/values-de/strings.xml
+++ b/packages/app-android/data/Android/src/main/res/values-de/strings.xml
@@ -3,206 +3,465 @@
"Lerne 6502 Assembler"
"Lerne 6502 Assembler"
"Lerne 6502 Assembler"
- "Das letzte Unterprogramm, <tt>spinWheels</tt>, ist nur da, weil das Spiel sonst zu schnell laufen würde. Alles, was <tt>spinWheels</tt> tut, ist <tt>X</tt> von Null herunterzuzählen, bis es wieder Null erreicht. Das erste <tt>dex</tt> überläuft, wodurch <tt>X</tt> zu <tt>#$ff</tt> wird."
- "Als nächstes kommt <tt>drawSnake</tt>. Dies ist auch ziemlich einfach - wir löschen zuerst den Schwanz und zeichnen dann den Kopf. <tt>X</tt> wird auf die Länge der Schlange gesetzt, damit wir zum richtigen Pixel indexieren können, und wir setzen <tt>A</tt> auf Null und führen dann das Schreiben mit dem indizierten indirekten Adressierungsmodus durch. Dann laden wir <tt>X</tt> neu, um zum Kopf zu indexieren, setzen <tt>A</tt> auf eins und speichern es in <tt>($10,x)</tt>. <tt>$10</tt> speichert die zweibyte-Position des Kopfes, also zeichnet dies einen weißen Pixel an der aktuellen Kopfposition. Da sich nur der Kopf und der Schwanz der Schlange bewegen, reicht dies aus, um die Schlange in Bewegung zu halten."
- "Da der Spielzustand in Form von Pixelpositionen gespeichert wird, ist die Darstellung des Spiels sehr einfach. Das erste Unterprogramm, <tt>drawApple</tt>, ist extrem einfach. Es setzt <tt>Y</tt> auf Null, lädt eine zufällige Farbe in den Akkumulator und speichert diesen Wert dann in <tt>($00),y</tt>. <tt>$00</tt> ist der Ort, an dem die Position des Apfels gespeichert ist, also dereferenziert <tt>($00),y</tt> zu dieser Speicheradresse. Lies den Abschnitt \"Indirekt indiziert\" in <a href=\"#addressing\">Adressierungsmodi</a> für weitere Details."
- "Das Spiel darstellen"
- "Ich werde nicht im Detail erklären, wie jede der Richtungen funktioniert, aber die obige Erklärung sollte dir genug geben, um es mit etwas Studium selbst herauszufinden."
- "Nach einer Bewegung in jede Richtung müssen wir auch überprüfen, ob der Kopf außerhalb der Grenzen geraten würde. Dies wird für jede Richtung unterschiedlich gehandhabt. Für links und rechts können wir überprüfen, ob der Kopf effektiv \"umgebrochen\" ist. Wenn man von <tt>$021f</tt> nach rechts geht, indem man das niedrigstwertige Byte erhöht, würde dies zu <tt>$0220</tt> führen, aber das bedeutet eigentlich einen Sprung vom letzten Pixel der ersten Zeile zum ersten Pixel der zweiten Zeile. Also müssen wir jedes Mal, wenn wir nach rechts gehen, überprüfen, ob das neue niedrigstwertige Byte ein Vielfaches von <tt>$20</tt> ist. Dies geschieht durch eine Bit-Prüfung gegen die Maske <tt>$1f</tt>. Die Illustration unten wird hoffentlich zeigen, wie das Maskieren der niedrigsten 5 Bits offenbart, ob eine Zahl ein Vielfaches von <tt>$20</tt> ist oder nicht."
- "Der Übergang zwischen den Abschnitten ist komplizierter, da wir auch das höchstwertige Byte berücksichtigen müssen. Zum Beispiel sollte das Heruntergehen von <tt>$02e1</tt> zu <tt>$0301</tt> führen. Glücklicherweise ist dies ziemlich einfach zu erreichen. Die Addition von <tt>$20</tt> zu <tt>$e1</tt> ergibt <tt>$01</tt> und setzt das Carry-Bit. Wenn das Carry-Bit gesetzt wurde, wissen wir, dass wir auch das höchstwertige Byte erhöhen müssen."
- "Solange du dich innerhalb eines dieser horizontalen Streifen bewegst, sind die Dinge einfach. Um zum Beispiel nach rechts zu gehen, erhöhe einfach das niedrigstwertige Byte (z.B. wird aus <tt>$0200</tt> dann <tt>$0201</tt>). Um nach unten zu gehen, addiere <tt>$20</tt> (z.B. wird aus <tt>$0200</tt> dann <tt>$0220</tt>). Links und oben sind die Umkehrung davon."
+ "வணக்கம்! Wir freuen uns über die tamilische Übersetzung, beigesteuert von தமிழ்நேரம். நன்றி!"
+ "was die indirekt adressierten Speicheradressen <tt>$0411</tt>, <tt>$0410</tt> und <tt>$040f</tt> repräsentiert (drei Pixel in der Mitte des Displays). Ich betone diesen Punkt, aber es ist wichtig, vollständig zu verstehen, wie indirekte Adressierung funktioniert."
+ "WDM-Ausgabe"
+ "Programmierung"
+ "lernen"
+ "von %1$s"
+ "_Einstellungen"
+ "Nullseite: <tt>$c0</tt>"
+ "Nullseite,Y: <tt>$c0,Y</tt>"
+ "Nullseite,X: <tt>$c0,X</tt>"
+ "Verwendung der Nullseite"
+ "Nullseite ($0000-$00FF)"
+ "Zero Flag: Wird gesetzt, wenn das Ergebnis einer Operation null ist. Essentiell für bedingte Verzweigungen - die meisten bedingten Sprunganweisungen (BEQ, BNE) prüfen dieses Flag, um den Programmfluss basierend darauf zu bestimmen, ob ein Wert null ist."
+ "Deine Datei enthält ungespeicherte Änderungen. Die Änderungen gehen verloren, wenn du sie nicht speicherst."
+ "Du hast <tt>TAX</tt> gesehen. Du kannst wahrscheinlich erraten, was <tt>TAY</tt>, <tt>TXA</tt> und <tt>TYA</tt> tun, aber schreibe etwas Code, um deine Vermutungen zu testen."
+ "Du hast dieses Open-Source-Projekt durch den Kauf der App unterstützt. Danke!"
"Du kannst dir den Bildschirm als vier horizontale Streifen von 32 × 8 Pixeln vorstellen. Diese Streifen werden auf <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> und <tt>$0500-$05ff</tt> abgebildet. Die ersten Pixelreihen sind <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, usw."
- "Der nächste Teil aktualisiert den Kopf der Schlange abhängig von der Richtung. Dies ist wahrscheinlich der komplizierteste Teil des Codes, und es hängt alles davon ab, wie Speicheradressen auf den Bildschirm abgebildet werden, also lass uns das genauer betrachten."
- "Um zu testen, ob die Richtung <tt>1</tt>, <tt>2</tt>, <tt>4</tt> oder <tt>8</tt> ist, verschiebt der Code kontinuierlich nach rechts, bis das Carry gesetzt ist. Ein <tt>LSR</tt> bedeutet \"nach oben\", zwei bedeutet \"nach rechts\" und so weiter."
- "Sobald die Werte die Schlange hinunter verschoben wurden, müssen wir herausfinden, was mit dem Kopf zu tun ist. Die Richtung wird zuerst in <tt>A</tt> geladen. <tt>LSR</tt> bedeutet \"logische Verschiebung nach rechts\" oder \"verschiebe alle Bits um eine Position nach rechts\". Das niedrigstwertige Bit wird in das Carry-Flag verschoben, also wenn der Akkumulator <tt>1</tt> ist, ist er nach <tt>LSR</tt> <tt>0</tt>, wobei das Carry-Flag gesetzt ist."
- "Die Länge wird auf <tt>4</tt> initialisiert, also beginnt <tt>X</tt> bei <tt>3</tt>. <tt>LDA $10,x</tt> lädt den Wert von <tt>$13</tt> in <tt>A</tt>, dann speichert <tt>STA $12,x</tt> diesen Wert in <tt>$15</tt>. <tt>X</tt> wird dekrementiert und wir durchlaufen die Schleife. Jetzt ist <tt>X</tt> <tt>2</tt>, also laden wir <tt>$12</tt> und speichern es in <tt>$14</tt>. Dies läuft in einer Schleife, solange <tt>X</tt> positiv ist (<tt>BPL</tt> bedeutet \"verzweige wenn positiv\")."
- "Auf niedriger Ebene ist dieses Unterprogramm etwas komplexer. Zuerst wird die Länge in das <tt>X</tt>-Register geladen, das dann dekrementiert wird. Der untenstehende Ausschnitt zeigt den Anfangsspeicher für die Schlange."
- "Nach der Kollisionserkennung aktualisieren wir die Position der Schlange. Dies wird auf hoher Ebene so gemacht: Zuerst wird jedes Bytepaar des Körpers um eine Position im Speicher nach oben verschoben. Zweitens wird der Kopf entsprechend der aktuellen Richtung aktualisiert. Schließlich wird, wenn der Kopf außerhalb der Grenzen ist, dies als Kollision behandelt. Ich werde dies mit ASCII-Kunst veranschaulichen. Jedes Klammerpaar enthält der Einfachheit halber eine x,y-Koordinate anstelle eines Bytepaars."
- "<tt>checkSnakeCollision</tt> durchläuft die Körpersegmente der Schlange und vergleicht jedes Bytepaar mit dem Kopfpaar. Wenn es eine Übereinstimmung gibt, dann ist das Spiel vorbei."
- "Das nächste Unterprogramm, <tt>checkCollision</tt>, delegiert an <tt>checkAppleCollision</tt> und <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> überprüft nur, ob die zwei Bytes, die die Position des Apfels enthalten, mit den zwei Bytes übereinstimmen, die die Position des Kopfes enthalten. Wenn sie übereinstimmen, wird die Länge erhöht und eine neue Apfelposition generiert."
+ "Gelb"
+ "Schreibe und bearbeite Code mit einem integrierten Code-Editor"
+ "Bei all diesen Beispielen kann es hilfreich sein, den <b>Hex-Monitor</b> in der Debug-Ansicht zu verwenden, um die Speicheränderungen zu beobachten. Wähle einen Speicherbereich aus der Liste, um diesen Abschnitt zu sehen — zum Beispiel <b>Anzeigespeicher ($0200–$05FF)</b>, um die Bildschirmpixel zu beobachten, oder <b>Nullseite ($0000–$00FF)</b>, um die ersten 256 Bytes zu untersuchen."
+ "Bei der absoluten Adressierung wird die vollständige Speicheradresse als Argument für die Anweisung verwendet. Zum Beispiel:"
+ "Willkommen zur vietnamesischen Übersetzung, vollständig beigetragen von Loc Huynh (hthienloc)."
+ "Willkommen zur polnischen Übersetzung, ursprünglich beigetragen von Micro Wave. Dziękujemy!"
+ "Wir haben bereits einen kurzen Blick auf den Prozessorstatus-Bereich geworfen (den Teil mit <tt>A</tt>, <tt>PC</tt> usw.), aber was bedeutet das alles?"
+ "Wir haben eine neue Beispiele-Sektion im Lernen-Tab hinzugefügt, wo du vollständig kommentierte 6502-Programme direkt in der App erkunden und ausführen kannst. Beginne mit unserem Snake-Spiel-Beispiel und sieh zu, wie die Pixel zum Leben erwachen!"
+ "Werte <tt>$00</tt>-<tt>$0F</tt> stellen 16 verschiedene Farben dar (<tt>$00</tt>=schwarz, <tt>$01</tt>=weiß)"
+ "Benutzerdefinierte Primärfarbe verwenden"
+ "Benutzerdefinierte Akzentfarbe verwenden"
"Den Spielzustand aktualisieren"
- "Wenn wir also <tt>upKey</tt> betrachten und die aktuelle Richtung nach unten ist (4), wird der Bit-Test Null sein. <tt>BNE</tt> bedeutet \"verzweige, wenn das Zero-Flag nicht gesetzt ist\", also werden wir in diesem Fall zu <tt>illegalMove</tt> verzweigen, was einfach aus dem Unterprogramm zurückkehrt. Andernfalls wird die neue Richtung (in diesem Fall 1) in der entsprechenden Speicheradresse gespeichert."
- "Der <tt>BIT</tt>-Opcode ist ähnlich wie <tt>AND</tt>, aber die Berechnung wird nur verwendet, um das Zero-Flag zu setzen - das eigentliche Ergebnis wird verworfen. Das Zero-Flag wird nur gesetzt, wenn das Ergebnis der UND-Verknüpfung des Akkumulators mit dem Argument Null ist. Wenn wir Zweierpotenzen betrachten, wird das Zero-Flag nur gesetzt, wenn die beiden Zahlen nicht gleich sind. Zum Beispiel ist <tt>0001 AND 0001</tt> nicht Null, aber <tt>0001 AND 0010</tt> ist Null."
- "Wie bereits erwähnt, werden die vier Richtungen intern durch die Zahlen 1, 2, 4 und 8 dargestellt. Jede dieser Zahlen ist eine Zweierpotenz, daher werden sie durch eine Binärzahl mit einer einzigen <tt>1</tt> dargestellt:"
- "Jeder Abschnitt (<tt>upKey</tt>, <tt>rightKey</tt>, usw.) überprüft zuerst, ob die aktuelle Richtung die entgegengesetzte der neuen Richtung ist. Dies erfordert einen weiteren kleinen Umweg."
- "Zusätzliche Tasteneingaben sind ebenfalls verfügbar: Taste A (Eingabe/Return-Taste, ASCII-Code <tt>$0D</tt>) und Taste B (Leertaste, ASCII-Code <tt>$20</tt>). Diese können genutzt werden, um mehr Interaktion zu deinen Spielen hinzuzufügen. Für die Richtungssteuerung können sowohl WASD-Tasten als auch Pfeiltasten austauschbar verwendet werden."
- "Das erste Unterprogramm, <tt>readKeys</tt>, übernimmt die Aufgabe, Benutzereingaben anzunehmen. Die Speicheradresse <tt>$ff</tt> enthält den ASCII-Code des letzten Tastendrucks in diesem Simulator. Der Wert wird in den Akkumulator geladen und dann mit <tt>$77</tt> (dem Hexcode für W), <tt>$64</tt> (D), <tt>$73</tt> (S) und <tt>$61</tt> (A) verglichen. Wenn einer dieser Vergleiche erfolgreich ist, verzweigt das Programm zum entsprechenden Abschnitt."
- "Die Eingabe lesen"
- "Fast alle Spiele haben in ihrem Kern eine Spielschleife. Alle Spielschleifen haben die gleiche Grundform: Benutzereingaben annehmen, den Spielzustand aktualisieren und den Spielzustand darstellen. Diese Schleife ist da keine Ausnahme."
- "Die Spielschleife"
+ "Uneingespeicherte Änderungen"
+ "Im Gegensatz zu Nullseite,Y kann absolut,Y nicht mit <tt>STX</tt> verwendet werden, aber mit <tt>LDA</tt> und <tt>STA</tt>."
+ "Unter der Haube: Update auf TypeScript 6, Vite 8 und weitere Abhängigkeits-Updates für verbesserte Leistung und Stabilität."
+ "Code kann nicht außerhalb des 64k Speicherbereichs verschoben werden"
+ "Die angegebene Adresse/Label konnte nicht gefunden oder verarbeitet werden"
+ "Zwei der Stack-Anweisungen sind <tt>PHA</tt> und <tt>PLA</tt>, \"push accumulator\" und \"pull accumulator\". Unten ist ein Beispiel dieser beiden in Aktion."
+ "Zwei neue Beispielprogramme, und beide kommen von euch: Dino Run von Jacob und Line Buster 6502 von edit12. Es sind die ersten Beispiele, die über den Teilen-Button eingereicht wurden, und wir hätten gern mehr davon."
+ "Tutorial <sub>von <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, lizenziert unter CC BY 4.0</sub>"
+ "Tutorial"
+ "Versuche Code-Beispiele zu schreiben, die jeden der 6502-Adressierungsmodi verwenden. Denk daran, dass du den <b>Hex-Monitor</b> in der Debug-Ansicht verwenden kannst, um einen Speicherbereich zu beobachten."
+ "Probiere Beispielprogramme für den 6502-Mikroprozessor aus."
+ "Beispielprogramme ausprobieren"
+ "Versuche die Farbe der drei Pixel zu ändern."
+ "Seitenleiste umschalten"
+ "Um zu testen, ob die Richtung <tt>1</tt>, <tt>2</tt>, <tt>4</tt> oder <tt>8</tt> ist, verschiebt der Code kontinuierlich nach rechts, bis das Carry gesetzt ist. Ein <tt>LSR</tt> bedeutet \"nach oben\", zwei bedeutet \"nach rechts\" und so weiter."
+ "Titel"
+ "Diese Version bringt lebendiges, handheld-inspiriertes Theming mit anpassbaren Farben. Wir haben adaptive Tablet- und Desktop-Layouts eingeführt, die alles im Blick behalten - perfekt für diese Marathon-Codingsessions beim Lernen der Retro-Spielentwicklung in Assembly. Großer Dank an unseren neuen Mitwirkenden @mmartinortiz für die großartigen Desktop-Layout-Ideen. Es gibt auch einige coole technische Verbesserungen wie TypeScript-Strictness, benutzerdefinierte GtkSourceView-Style-Schemes und erweiterte Debugger-Steuerungen für flüssigere Entwicklung."
+ "Diese ist etwas seltsam. Es ist wie eine Kreuzung zwischen Nullseite,X und indirekt. Im Grunde nimmst du die Nullseiten-Adresse, addierst den Wert des <tt>X</tt>-Registers dazu und verwendest das dann, um eine zweibyte-Adresse nachzuschlagen. Zum Beispiel:"
+ "Dies lädt den Wert <tt>$11</tt> in die Speicheradresse <tt>$10</tt>, den Wert <tt>$10</tt> in <tt>$12</tt> und <tt>$0f</tt> in <tt>$14</tt>. Dann lädt es den Wert <tt>$04</tt> in <tt>$11</tt>, <tt>$13</tt> und <tt>$15</tt>. Dies führt zu Speicher wie diesem:"
+ "Hier wird die Adressierung interessant. In diesem Modus wird eine Nullseiten-Adresse angegeben und dann der Wert des <tt>X</tt>-Registers hinzuaddiert. Hier ist ein Beispiel:"
+ "Dies ist das Äquivalent zu Nullseite,X, kann aber nur mit <tt>LDX</tt> und <tt>STX</tt> verwendet werden."
+ "Dies sind die absoluten Adressierungsversionen von Nullseite,X und Nullseite,Y. Zum Beispiel:"
+ "Es gibt außerdem einen sehr praktischen Grund: Retro-Spieleentwicklung. Die Homebrew-Szene ist quicklebendig – es erscheinen weiterhin neue Spiele für das <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">NES</a> (einige sogar als physische Cartridges) und für viele andere klassische Systeme; das NES ist hier nur ein Beispiel. Selbst wenn du eigentlich eine Plattform wie das SNES anpeilst, lohnt sich der Einstieg mit 6502: Die SNES-CPU (65C816) ist abwärtskompatibel zum 6502, daher lassen sich die Grundlagen, die du hier lernst – Register, Adressierungsarten und der Kernbefehlssatz – direkt übertragen."
+ "Warum dann 6502? Warum nicht eine <i>nützliche</i> Assemblersprache wie <a href=\"https://de.wikipedia.org/wiki/X86-Architektur\">x86</a>? Nun, ich denke nicht, dass das Lernen von x86 nützlich ist. Ich glaube nicht, dass du jemals in deinem Arbeitsalltag Assemblersprache <i>schreiben</i> musst – für manche ist das eine akademische Übung, etwas, um Geist und Denken zu erweitern. 6502 wurde ursprünglich in einer anderen Zeit geschrieben, als die Mehrheit der Entwickler direkt in Assembler programmierte, statt in diesen neumodischen höheren Programmiersprachen. Daher wurde es für Menschen geschrieben. Modernere Assemblersprachen sind dafür gedacht, von Compilern geschrieben zu werden, also überlassen wir es ihnen. Außerdem macht 6502 <i>Spaß</i>. Niemand hat je x86 als <i>spaßig</i> bezeichnet."
+ "Die Zero Page wird verwendet, um verschiedene Spielzustandsvariablen zu speichern, wie im Kommentarblock am Anfang des Spiels beschrieben. Die Bereiche <tt>$00</tt>, <tt>$01</tt> und ab <tt>$10</tt> aufwärts enthalten jeweils Bytepaare, die eine 2-Byte-Speicheradresse darstellen und über Indirect Addressing nachgeschlagen werden. Diese Speicheradressen liegen alle zwischen <tt>$0200</tt> und <tt>$05ff</tt> - dem Speicherbereich des Spielkonsolen-Displays. Wenn zum Beispiel <tt>$00</tt> und <tt>$01</tt> die Werte <tt>$01</tt> und <tt>$02</tt> enthalten, verweisen sie auf das zweite Pixel des Displays (<tt>$0201</tt> - beachte, dass bei Indirect Addressing das Least Significant Byte zuerst kommt)."
+ "Der Stack in einem 6502-Prozessor ist wie jeder andere Stack - Werte werden darauf geschoben (gepusht) und davon genommen (\"gepullt\" in 6502-Sprache). Die aktuelle Tiefe des Stacks wird durch den Stack-Pointer gemessen, ein spezielles Register. Der Stack befindet sich im Speicher zwischen <tt>$0100</tt> und <tt>$01ff</tt>. Der Stack-Pointer ist anfangs <tt>$ff</tt>, was auf die Speicheradresse <tt>$01ff</tt> zeigt. Wenn ein Byte auf den Stack geschoben wird, wird der Stack-Pointer zu <tt>$fe</tt>, oder Speicheradresse <tt>$01fe</tt>, und so weiter."
+ "Der Stack"
+ "Das Snake-Spiel aus dem Tutorial"
"Das Ergebnis dieses Unterprogramms ist, ein zufälliges Byte in <tt>$00</tt> und eine Zufallszahl zwischen 2 und 5 in <tt>$01</tt> zu laden. Da das niedrigstwertige Byte bei indirekter Adressierung zuerst kommt, übersetzt sich dies in eine Speicheradresse zwischen <tt>$0200</tt> und <tt>$05ff</tt>: genau der Bereich, der zum Zeichnen des Displays verwendet wird."
- "Danach wird der Wert <tt>2</tt> zum Akkumulator addiert, um eine endgültige Zufallszahl im Bereich 2-5 zu erzeugen."
- "Die Wirkung davon ist, die zwei niedrigstwertigen Bits des Akkumulators zu maskieren und die anderen auf Null zu setzen. Dies konvertiert eine Zahl im Bereich von 0-255 in eine Zahl im Bereich von 0-3."
- "Der Hexadezimalwert <tt>$03</tt> wird binär als <tt>00000011</tt> dargestellt. Der <tt>AND</tt>-Opcode führt eine bitweise UND-Verknüpfung des Arguments mit dem Akkumulator durch. Wenn zum Beispiel der Akkumulator den binären Wert <tt>10101010</tt> enthält, dann wird das Ergebnis von <tt>AND</tt> mit <tt>00000011</tt> <tt>00000010</tt> sein."
+ "Der Prozessor weiß, wohin er zurückkehren soll, weil <tt>JSR</tt> die Adresse der nächsten Anweisung minus eins auf den Stack schiebt, bevor er zur angegebenen Position springt. <tt>RTS</tt> nimmt diese Position vom Stack, addiert eins dazu und springt zu dieser Position. Ein Beispiel:"
+ "Das Problem ist, dass <tt>$184</tt> zu groß ist, um in ein einzelnes Byte zu passen (das Maximum ist <tt>$FF</tt>), und die Register können nur ein einzelnes Byte speichern. Aber keine Sorge; der Prozessor ist nicht wirklich dumm. Wenn du genau aufgepasst hast, wirst du bemerkt haben, dass das Carry-Flag nach dieser Operation auf <tt>1</tt> gesetzt wurde. So weißt du Bescheid."
+ "Das Gegenteil von <tt>BNE</tt> ist <tt>BEQ</tt>. Versuche ein Programm zu schreiben, das <tt>BEQ</tt> verwendet."
+ "Das Gegenteil von <tt>ADC</tt> ist <tt>SBC</tt> (subtract with carry). Schreibe ein Programm, das diese Anweisung verwendet."
+ "Das Offline-Laufspiel aus dem Browser, in 6502-Assembler"
"Das nächste Unterprogramm, <tt>generateApplePosition</tt>, setzt die Apfelposition auf eine zufällige Position auf dem Display. Zuerst lädt es ein zufälliges Byte in den Akkumulator (<tt>$fe</tt> ist ein Zufallszahlengenerator in diesem Simulator). Dies wird in <tt>$00</tt> gespeichert. Als nächstes wird ein anderes zufälliges Byte in den Akkumulator geladen, das dann mit dem Wert <tt>$03</tt> <tt>AND</tt>-verknüpft wird. Dieser Teil erfordert einen kleinen Umweg."
- "was die indirekt adressierten Speicheradressen <tt>$0411</tt>, <tt>$0410</tt> und <tt>$040f</tt> repräsentiert (drei Pixel in der Mitte des Displays). Ich betone diesen Punkt, aber es ist wichtig, vollständig zu verstehen, wie indirekte Adressierung funktioniert."
- "Dies lädt den Wert <tt>$11</tt> in die Speicheradresse <tt>$10</tt>, den Wert <tt>$10</tt> in <tt>$12</tt> und <tt>$0f</tt> in <tt>$14</tt>. Dann lädt es den Wert <tt>$04</tt> in <tt>$11</tt>, <tt>$13</tt> und <tt>$15</tt>. Dies führt zu Speicher wie diesem:"
- "Die <tt>init</tt>-Subroutine ruft zwei weitere Subroutinen auf: <tt>initSnake</tt> und <tt>generateApplePosition</tt>. <tt>initSnake</tt> legt die Richtung und Länge der Schlange fest und lädt dann die initialen Speicherpositionen für Kopf und Körper. Das Bytepaar bei <tt>$10</tt> enthält die Bildschirmposition des Kopfes, das Paar bei <tt>$12</tt> die Position des Körpersegments und <tt>$14</tt> die Position des Schwanzes (der Schwanz ist das letzte Segment des Körpers und wird schwarz dargestellt, damit die Bewegung der Schlange sichtbar wird). Dies geschieht im folgenden Code:"
- "Initialisierung"
- "Schließlich enthält Byte <tt>$03</tt> die aktuelle Länge der Schlange, gemessen in Bytes im Speicher (eine Länge von 4 bedeutet also 2 Pixel)."
+ "Das nächste Unterprogramm, <tt>checkCollision</tt>, delegiert an <tt>checkAppleCollision</tt> und <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> überprüft nur, ob die zwei Bytes, die die Position des Apfels enthalten, mit den zwei Bytes übereinstimmen, die die Position des Kopfes enthalten. Wenn sie übereinstimmen, wird die Länge erhöht und eine neue Apfelposition generiert."
+ "Die nächste Zeile, <tt>BNE decrement</tt>, wird die Ausführung zum decrement-Label verschieben, wenn das <tt>Z</tt>-Flag auf <tt>0</tt> gesetzt ist (was bedeutet, dass die beiden Werte im <tt>CPX</tt>-Vergleich nicht gleich waren), andernfalls passiert nichts und wir speichern <tt>X</tt> in <tt>$0201</tt> und beenden dann das Programm."
+ "Der nächste Teil aktualisiert den Kopf der Schlange abhängig von der Richtung. Dies ist wahrscheinlich der komplizierteste Teil des Codes, und es hängt alles davon ab, wie Speicheradressen auf den Bildschirm abgebildet werden, also lass uns das genauer betrachten."
+ "Die Länge wird auf <tt>4</tt> initialisiert, also beginnt <tt>X</tt> bei <tt>3</tt>. <tt>LDA $10,x</tt> lädt den Wert von <tt>$13</tt> in <tt>A</tt>, dann speichert <tt>STA $12,x</tt> diesen Wert in <tt>$15</tt>. <tt>X</tt> wird dekrementiert und wir durchlaufen die Schleife. Jetzt ist <tt>X</tt> <tt>2</tt>, also laden wir <tt>$12</tt> und speichern es in <tt>$14</tt>. Dies läuft in einer Schleife, solange <tt>X</tt> positiv ist (<tt>BPL</tt> bedeutet \"verzweige wenn positiv\")."
+ "Das letzte Unterprogramm, <tt>spinWheels</tt>, ist nur da, weil das Spiel sonst zu schnell laufen würde. Alles, was <tt>spinWheels</tt> tut, ist <tt>X</tt> von Null herunterzuzählen, bis es wieder Null erreicht. Das erste <tt>dex</tt> überläuft, wodurch <tt>X</tt> zu <tt>#$ff</tt> wird."
+ "Der letzte Abschnitt zeigt die Prozessor-Flags. Jedes Flag ist ein Bit, sodass alle sieben Flags in einem einzigen Byte untergebracht sind. Die Flags werden vom Prozessor gesetzt, um Informationen über die vorherige Anweisung zu geben. Mehr dazu später. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lies hier mehr über Register und Flags</a>."
+ "Der Hexadezimalwert <tt>$03</tt> wird binär als <tt>00000011</tt> dargestellt. Der <tt>AND</tt>-Opcode führt eine bitweise UND-Verknüpfung des Arguments mit dem Akkumulator durch. Wenn zum Beispiel der Akkumulator den binären Wert <tt>10101010</tt> enthält, dann wird das Ergebnis von <tt>AND</tt> mit <tt>00000011</tt> <tt>00000010</tt> sein."
+ "Der Hexadezimalcode sollte etwa so aussehen:"
+ "Die Spielschleife"
"Die ersten zwei Bytes enthalten die Position des Apfels. Diese wird jedes Mal aktualisiert, wenn die Schlange den Apfel frisst. Byte <tt>$02</tt> enthält die aktuelle Richtung. <tt>1</tt> bedeutet nach oben, <tt>2</tt> nach rechts, <tt>4</tt> nach unten und <tt>8</tt> nach links. Die Logik hinter diesen Zahlen wird später klar werden."
- "Die Zero Page wird verwendet, um verschiedene Spielzustandsvariablen zu speichern, wie im Kommentarblock am Anfang des Spiels beschrieben. Die Bereiche <tt>$00</tt>, <tt>$01</tt> und ab <tt>$10</tt> aufwärts enthalten jeweils Bytepaare, die eine 2-Byte-Speicheradresse darstellen und über Indirect Addressing nachgeschlagen werden. Diese Speicheradressen liegen alle zwischen <tt>$0200</tt> und <tt>$05ff</tt> - dem Speicherbereich des Spielkonsolen-Displays. Wenn zum Beispiel <tt>$00</tt> und <tt>$01</tt> die Werte <tt>$01</tt> und <tt>$02</tt> enthalten, verweisen sie auf das zweite Pixel des Displays (<tt>$0201</tt> - beachte, dass bei Indirect Addressing das Least Significant Byte zuerst kommt)."
- "Verwendung der Nullseite"
- "Zuerst überprüft <tt>readkeys</tt>, ob eine der Richtungstasten (W, A, S, D) gedrückt wurde, und setzt entsprechend die Richtung der Schlange. Dann überprüft <tt>checkCollision</tt>, ob die Schlange mit sich selbst oder dem Apfel kollidiert ist. <tt>updateSnake</tt> aktualisiert die interne Darstellung der Schlange basierend auf ihrer Richtung. Als nächstes werden der Apfel und die Schlange gezeichnet. Schließlich lässt <tt>spinWheels</tt> den Prozessor etwas Leerlaufarbeit machen, damit das Spiel nicht zu schnell läuft. Denk daran wie an einen Sleep-Befehl. Das Spiel läuft weiter, bis die Schlange mit der Wand oder sich selbst kollidiert."
+ "Das erste Unterprogramm, <tt>readKeys</tt>, übernimmt die Aufgabe, Benutzereingaben anzunehmen. Die Speicheradresse <tt>$ff</tt> enthält den ASCII-Code des letzten Tastendrucks in diesem Simulator. Der Wert wird in den Akkumulator geladen und dann mit <tt>$77</tt> (dem Hexcode für W), <tt>$64</tt> (D), <tt>$73</tt> (S) und <tt>$61</tt> (A) verglichen. Wenn einer dieser Vergleiche erfolgreich ist, verzweigt das Programm zum entsprechenden Abschnitt."
+ "Die erste Zeile zeigt die Register <tt>A</tt>, <tt>X</tt> und <tt>Y</tt> (<tt>A</tt> wird oft als \"Akkumulator\" bezeichnet). Jedes Register enthält ein einzelnes Byte. Die meisten Operationen arbeiten mit dem Inhalt dieser Register."
+ "Die erste Anweisung veranlasst die Ausführung zum <tt>init</tt>-Label zu springen. Dies setzt <tt>X</tt> und kehrt dann zur nächsten Anweisung zurück, <tt>JSR loop</tt>. Dies springt zum <tt>loop</tt>-Label, das <tt>X</tt> erhöht, bis es gleich <tt>$05</tt> ist. Danach kehren wir zur nächsten Anweisung zurück, <tt>JSR end</tt>, die zum Ende der Datei springt. Dies zeigt, wie <tt>JSR</tt> und <tt>RTS</tt> zusammen verwendet werden können, um modularen Code zu erstellen."
+ "Die Wirkung davon ist, die zwei niedrigstwertigen Bits des Akkumulators zu maskieren und die anderen auf Null zu setzen. Dies konvertiert eine Zahl im Bereich von 0-255 in eine Zahl im Bereich von 0-3."
+ "Der Code-Block unten enthält den gesamten Quellcode des Spiels. Ich werde in den folgenden Abschnitten erklären, wie es funktioniert."
+ "Der schwarze Spielkonsolenbildschirm sollte jetzt drei farbige \"Pixel\" oben links zeigen."
+ "Die App ist für die GNOME-Oberflächenschrift gestaltet. Auf anderen Systemen wird sie mit der Schrift des jeweiligen Systems dargestellt, die meist kleiner ist."
+ "Das Y‑Indexregister ist X ähnlich und hat keine speziellen Funktionen. Wird häufig für indizierte Adressierung und Datenbewegung verwendet."
+ "Das X Index Register wird für indexierte Adressierungsmodi und Zähloperationen verwendet. Es kann Schleifenzähler, Array-Indizes halten und ist für den Zugriff auf Speicherplätze relativ zu einer Basisadresse mit X als Offset unerlässlich. Special: TSX/TXS Transfer X zum/vom Stackpointer."
+ "Der Stack Pointer verwaltet den Aufruf-Stack für Unterprogramme und Unterbrechungen. Er beginnt bei $FF (Stack-Spitze) und wächst nach unten. Wird für PUSH/PULL-Operationen, JSR/RTS-Aufrufe und Unterbrechungsbehandlung verwendet. Kritisch für verschachtelte Funktionsaufrufe."
+ "Der Program Counter enthält die Speicheradresse der nächsten auszuführenden Anweisung. Er inkrementiert automatisch nach jeder Anweisung und kann durch Sprünge, Verzweigungen, Aufrufe und Rückgaben modifiziert werden. Essentiell für die Programmflusssteuerung und das Debugging."
+ "Der Akkumulator (A) ist das primäre Register für arithmetische und logische Operationen. Alle grundlegenden Berechnungen wie ADD, SUBTRACT, AND, OR, etc. verwenden dieses Register. Es ist das am häufigsten verwendete Register in der 6502-Assembler-Programmierung."
"Das <tt>loop</tt>-Unterprogramm selbst ruft nur eine Reihe von Unterprogrammen nacheinander auf, bevor es zu sich selbst zurückkehrt:"
- "<tt>init</tt> und <tt>loop</tt> sind beide Unterprogramme. <tt>init</tt> initialisiert den Spielzustand, und <tt>loop</tt> ist die Hauptspielschleife."
- "Nach dem anfänglichen Block von Kommentaren (Zeilen, die mit Semikolons beginnen), sind die ersten beiden Zeilen:"
+ "Die <tt>init</tt>-Subroutine ruft zwei weitere Subroutinen auf: <tt>initSnake</tt> und <tt>generateApplePosition</tt>. <tt>initSnake</tt> legt die Richtung und Länge der Schlange fest und lädt dann die initialen Speicherpositionen für Kopf und Körper. Das Bytepaar bei <tt>$10</tt> enthält die Bildschirmposition des Kopfes, das Paar bei <tt>$12</tt> die Position des Körpersegments und <tt>$14</tt> die Position des Schwanzes (der Schwanz ist das letzte Segment des Körpers und wird schwarz dargestellt, damit die Bewegung der Schlange sichtbar wird). Dies geschieht im folgenden Code:"
+ "Der <tt>BIT</tt>-Opcode ist ähnlich wie <tt>AND</tt>, aber die Berechnung wird nur verwendet, um das Zero-Flag zu setzen - das eigentliche Ergebnis wird verworfen. Das Zero-Flag wird nur gesetzt, wenn das Ergebnis der UND-Verknüpfung des Akkumulators mit dem Argument Null ist. Wenn wir Zweierpotenzen betrachten, wird das Zero-Flag nur gesetzt, wenn die beiden Zahlen nicht gleich sind. Zum Beispiel ist <tt>0001 AND 0001</tt> nicht Null, aber <tt>0001 AND 0010</tt> ist Null."
+ "Der 6502 verwendet einen 16-Bit-Adressbus, was bedeutet, dass dem Prozessor 65536 Bytes Speicher zur Verfügung stehen. Denk daran, dass ein Byte durch zwei Hex-Zeichen dargestellt wird, sodass die Speicheradressen im Allgemeinen als <tt>$0000 - $ffff</tt> dargestellt werden. Es gibt verschiedene Möglichkeiten, sich auf diese Speicheradressen zu beziehen, wie unten beschrieben."
+ "Danke, dass du Open-Source-Software nutzt."
+ "Prüft Bit 0 von A mit LSR und BCC und legt als Ergebnis 1 oder 0 in A ab"
+ "Teste deine Kreationen auf einer virtuellen Spielkonsole"
+ "Tervetuloa! Wir freuen uns über die finnische Übersetzung, freundlicherweise beigesteuert von Jiri Grönroos. Kiitos!"
+ "Türkis"
+ "Systemschrift, GNOME-Größe"
+ "Systemstandard"
+ "Syntaxfehler in Zeile %1$d: %2$s"
+ "Unterstützer"
+ "Unterstützen"
+ "Einreichen"
+ "Stil"
+ "Angehalten"
+ "Schritt-für-Schritt-Anleitung zu 6502 Assembly"
+ "Schritt"
+ "Status-Flags"
+ "Stack Pointer: Zeigt auf Stack-Position"
+ "Stack-Beispiel"
+ "Stack ($0100-$01FF)"
+ "Spezielle Speicheradressen (im Simulator)"
+ "Quell-URL"
+ "Einige Anweisungen arbeiten nicht mit Speicheradressen (z.B. <tt>INX</tt> - inkrementiere das <tt>X</tt>-Register). Diese haben eine implizite Adressierung - das Argument ergibt sich aus der Anweisung selbst."
+ "Warum solltest du also 6502 lernen wollen? Es ist doch eine tote Sprache, oder? Nun, Latein ist das auch. Und das wird immer noch unterrichtet. <a href=\"https://de.wikipedia.org/wiki/Quod_erat_demonstrandum\">Q.E.D.</a>"
+ "Was macht dieses Programm eigentlich? Lass uns es Schritt für Schritt durchgehen. Klicke auf <b>Zurücksetzen</b> und verwende dann <b>Schritt</b>, um das Programm Anweisung für Anweisung auszuführen. Die <b>Debug</b>-Ansicht zeigt die Register und den Speicher — auf einem kleinen Fenster ist sie ein eigener Tab, auf einem breiten das Panel unter der Spielkonsole. Klicke einmal auf <b>Schritt</b> und du wirst in der Debug-Ansicht sehen, dass sich <tt>A=</tt> von <tt>$00</tt> zu <tt>$01</tt> und <tt>PC=</tt> von <tt>$0600</tt> zu <tt>$0602</tt> geändert hat."
+ "Die Anweisung <tt>STA $0200</tt> speichert also den Wert des <tt>A</tt>-Registers an der Speicheradresse <tt>$0200</tt>. Klicke noch vier Mal auf <b>Schritt</b>, um die restlichen Anweisungen auszuführen, und beobachte dabei, wie sich das <tt>A</tt>-Register verändert."
+ "Wenn wir also <tt>upKey</tt> betrachten und die aktuelle Richtung nach unten ist (4), wird der Bit-Test Null sein. <tt>BNE</tt> bedeutet \"verzweige, wenn das Zero-Flag nicht gesetzt ist\", also werden wir in diesem Fall zu <tt>illegalMove</tt> verzweigen, was einfach aus dem Unterprogramm zurückkehrt. Andernfalls wird die neue Richtung (in diesem Fall 1) in der entsprechenden Speicheradresse gespeichert."
+ "Also, lass uns loslegen! Diese Anwendung enthält einen <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler und Simulator</a>, den ich für dieses interaktive Tutorial angepasst habe. Klicke auf den <b>Kopieren</b>-Button im Code-Block unten, um den Beispielcode in den Editor zu kopieren. Verwende dann <b>Assemblieren</b>, um den Code zu assemblieren, und <b>Ausführen</b>, um ihn auszuführen. Du findest diese Aktionen als Buttons oder im Menü."
+ "Bisher können wir nur einfache Programme ohne Verzweigungslogik schreiben. Lass uns das ändern."
+ "Speichernutzung im Snake-Spiel"
+ "Snake-Spieldaten ($00-$15)"
+ "Snake-Spiel"
+ "Schiefer"
+ "Simulator-Fehler"
+ "Simulator"
+ "Geteilte Codebeispiele enthalten jetzt CC-BY-4.0-Lizenzinformationen, wodurch klar wird, wie die Community Ihre Beiträge nutzen und darauf aufbauen kann."
+ "Teile dein Beispiel"
+ "Beispiel teilen"
+ "Teilen"
+ "Shalom! Wir freuen uns über die hebräische Übersetzung, vollständig beigesteuert von Menachem (naattxx). Toda raba!"
+ "Aber ernsthaft, ich denke es ist wertvoll, ein Verständnis für Assemblersprache zu haben. Assemblersprache ist die niedrigste Abstraktionsebene in Computern - der Punkt, an dem der Code noch lesbar ist. Assemblersprache wird direkt in die Bytes übersetzt, die von deinem Computerprozessor ausgeführt werden. Wenn du verstehst, wie es funktioniert, bist du im Grunde ein Computer-<a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">Magier</a> geworden."
+ "Selamat datang! Wir freuen uns auch über die indonesische Übersetzung, freundlicherweise beigesteuert von Arif Budiman. Terima kasih!"
+ "Bildschirm wird auf Speicherbereich <tt>$0200</tt>-<tt>$05FF</tt> abgebildet"
+ "Begrüße viele neue Übersetzungen: Französisch, Interlingua, Portugiesisch, Portugiesisch (Brasilien), Niederländisch, Spanisch, Ukrainisch, Japanisch und Chinesisch (Vereinfacht)"
+ "Gespeichert unter %1$s"
+ "Änderungen speichern?"
+ "Speichern unter..."
+ "Assembler Datei speichern"
+ "Speichern"
+ "Snake-Spiel läuft"
+ "Ausführen"
+ "Schreibe das erste Beispiel in diesem Abschnitt so um, dass es das <tt>Y</tt>-Register anstelle des <tt>X</tt>-Registers verwendet."
+ "Überprüfe, wie dein Beispiel anderen erscheinen wird. Durch Klicken auf <b>Einreichen</b> wird ein Issue auf GitHub erstellt. Du musst dich mit deinem GitHub-Konto anmelden, um die Einreichung abzuschließen."
+ "Fortsetzen"
+ "Zurücksetzen"
+ "Das Spiel darstellen"
+ "Relativ: <tt>$c0</tt> (oder Label)"
+ "Relative Adressierung wird für Verzweigungsanweisungen verwendet. Diese Anweisungen nehmen ein einzelnes Byte, das als Offset von der folgenden Anweisung verwendet wird."
+ "Register und Flags"
+ "Register"
+ "Reduzierter Standard-Adressbereich des Hex-Monitors für bessere Effizienz"
+ "Rot"
+ "Die Eingabe lesen"
+ "Zufalls-/Eingabedaten ($FE-$FF)"
+ "Beenden"
+ "Kurz-Tipps"
+ "Violett"
+ "Programmiere Retro-Spielekonsolen"
+ "Programm pausiert"
+ "Programm beendet. Setze den Simulator zurück, um das Programm erneut schrittweise auszuführen."
+ "Programm beendet bei PC=$%1$s"
+ "Programm beendet"
+ "Programmspeicher ($0600-$FFFF)"
+ "Program Counter: Zeigt auf nächste Anweisung"
+ "Prozessor-Statusregister"
+ "Prozessor-Flags"
+ "Primär: Gelb"
+ "Primär: Türkis"
+ "Primär: Schiefer"
+ "Primär: Rot"
+ "Primär: Violett"
+ "Primär: Rosa"
+ "Primär: Orange"
+ "Primär: Grün"
+ "Primär: Blau"
+ "Primärfarbe"
+ "Vorherige"
+ "Vorschau deines Beispiels"
+ "Vorschau"
+ "Drücke erneut <b>Schritt</b>, um die zweite Anweisung auszuführen. Das Pixel oben links in der Spielkonsole sollte jetzt weiß sein. Dieser Simulator verwendet die Speicheradressen von <tt>$0200</tt> bis <tt>$05ff</tt>, um Pixel auf seinem Display zu zeichnen. Die Werte von <tt>$00</tt> bis <tt>$0f</tt> repräsentieren 16 verschiedene Farben (<tt>$00</tt> ist schwarz und <tt>$01</tt> ist weiß), daher zeichnet das Speichern des Wertes <tt>$01</tt> an der Speicheradresse <tt>$0200</tt> ein weißes Pixel in der oberen linken Ecke. Das ist einfacher als die Art und Weise, wie ein echter Computer Video ausgeben würde, aber für den Moment reicht es."
+ "Vorverarbeitung läuft..."
+ "Spielen"
+ "Rosa"
+ "Perfekt für Hobbyisten, Studenten und alle, die neugierig sind, wie Computer wirklich unter der Haube funktionieren!"
+ "Pause"
+ "Overflow Flag: Wird gesetzt, wenn eine arithmetische Operation ein Ergebnis produziert, das nicht im vorzeichenbehafteten 8-Bit-Bereich (-128 bis +127) dargestellt werden kann. Wird zur Erkennung von Fehlern in vorzeichenbehafteten arithmetischen Berechnungen verwendet."
"Gesamtstruktur"
- "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> hat einen <a href=\"https://gist.github.com/wkjagt/9043907\">vollständig kommentierten Gist dieses Quellcodes</a> erstellt, folge diesem für weitere Details."
- "Der Code-Block unten enthält den gesamten Quellcode des Spiels. Ich werde in den folgenden Abschnitten erklären, wie es funktioniert."
- "Hier ist ein Beispiel. Beachte, dass unmittelbare Operanden immer noch mit einem <tt>#</tt> beginnen."
- "In diesem Assembler können wir beschreibende Konstanten (oder Symbole) definieren, die Zahlen repräsentieren. Der restliche Code kann dann einfach die Konstanten anstelle der wörtlichen Zahl verwenden, was sofort deutlich macht, womit wir es zu tun haben. Du kannst Buchstaben, Ziffern und Unterstriche in einem Namen verwenden."
- "Auch wenn dies eine einfache Version sein wird, wird der Code wesentlich umfangreicher sein als alle bisherigen Beispiele. Wir müssen mehrere Speicheradressen für die verschiedenen Aspekte des Spiels im Auge behalten. Wir können die notwendige Buchführung im Programm immer noch selbst durchführen, wie zuvor, aber in größerem Umfang wird das schnell mühsam und kann auch zu schwer zu findenden Fehlern führen. Stattdessen lassen wir jetzt den Assembler einen Teil der alltäglichen Arbeit für uns erledigen."
+ "Sprungbefehl außerhalb des gültigen Bereichs in Zeile %1$d (Sprünge sind auf -128 bis +127 begrenzt): %2$s"
+ "Unser erstes Programm"
+ "Organisiert als vier horizontale Streifen von 32×8 Pixeln"
+ "Orange"
+ "Optimierte Flatpak-Konfiguration durch Entfernen unnötiger Berechtigungen"
+ "Geöffnet %1$s"
+ "Öffnen..."
+ "Open Source"
+ "Assembler-Datei öffnen"
+ "Sobald die Werte die Schlange hinunter verschoben wurden, müssen wir herausfinden, was mit dem Kopf zu tun ist. Die Richtung wird zuerst in <tt>A</tt> geladen. <tt>LSR</tt> bedeutet \"logische Verschiebung nach rechts\" oder \"verschiebe alle Bits um eine Position nach rechts\". Das niedrigstwertige Bit wird in das Carry-Flag verschoben, also wenn der Akkumulator <tt>1</tt> ist, ist er nach <tt>LSR</tt> <tt>0</tt>, wobei das Carry-Flag gesetzt ist."
+ "Beim Zurücksetzen (Simulator): <tt>P = $30</tt> (Bit5 und <tt>B</tt> gesetzt; <tt>D</tt> und <tt>I</tt> gelöscht)"
+ "OK"
"Jetzt lass uns all dieses Wissen gut nutzen und ein Spiel erstellen! Wir werden eine sehr einfache Version des klassischen Spiels \'Snake\' erstellen."
- "Ein Spiel erstellen"
- "Die erste Anweisung veranlasst die Ausführung zum <tt>init</tt>-Label zu springen. Dies setzt <tt>X</tt> und kehrt dann zur nächsten Anweisung zurück, <tt>JSR loop</tt>. Dies springt zum <tt>loop</tt>-Label, das <tt>X</tt> erhöht, bis es gleich <tt>$05</tt> ist. Danach kehren wir zur nächsten Anweisung zurück, <tt>JSR end</tt>, die zum Ende der Datei springt. Dies zeigt, wie <tt>JSR</tt> und <tt>RTS</tt> zusammen verwendet werden können, um modularen Code zu erstellen."
- "Der Prozessor weiß, wohin er zurückkehren soll, weil <tt>JSR</tt> die Adresse der nächsten Anweisung minus eins auf den Stack schiebt, bevor er zur angegebenen Position springt. <tt>RTS</tt> nimmt diese Position vom Stack, addiert eins dazu und springt zu dieser Position. Ein Beispiel:"
- "<tt>JSR</tt> und <tt>RTS</tt> (\"jump to subroutine\" und \"return from subroutine\") sind ein dynamisches Duo, das du normalerweise zusammen verwendet siehst. <tt>JSR</tt> wird verwendet, um von der aktuellen Position zu einem anderen Teil des Codes zu springen. <tt>RTS</tt> kehrt zur vorherigen Position zurück. Dies ist im Grunde wie ein Funktionsaufruf und die Rückkehr daraus."
- "JSR/RTS"
- "<tt>JMP</tt> ist ein unbedingter Sprung. Hier ist ein sehr einfaches Beispiel, um es in Aktion zu zeigen:"
- "JMP"
+ "Keine vorherigen Programmierkenntnisse erforderlich. Beginne mit interaktiven Lektionen und baue deine Fähigkeiten Schritt für Schritt auf."
+ "Kein Code zum Ausführen vorhanden."
+ "Keine Adresse oder Label angegeben"
+ "Als nächstes kommt <tt>drawSnake</tt>. Dies ist auch ziemlich einfach - wir löschen zuerst den Schwanz und zeichnen dann den Kopf. <tt>X</tt> wird auf die Länge der Schlange gesetzt, damit wir zum richtigen Pixel indexieren können, und wir setzen <tt>A</tt> auf Null und führen dann das Schreiben mit dem indizierten indirekten Adressierungsmodus durch. Dann laden wir <tt>X</tt> neu, um zum Kopf zu indexieren, setzen <tt>A</tt> auf eins und speichern es in <tt>($10,x)</tt>. <tt>$10</tt> speichert die zweibyte-Position des Kopfes, also zeichnet dies einen weißen Pixel an der aktuellen Kopfposition. Da sich nur der Kopf und der Schwanz der Schlange bewegen, reicht dies aus, um die Schlange in Bewegung zu halten."
+ "Neue Werkzeuge zur Code-Analyse, einschließlich Disassembler und schnell umschaltbarer Speicheransicht"
+ "Negative Flag: Wird gesetzt, wenn das höchstwertige Bit (Bit 7) des Ergebnisses 1 ist. Wird für Vergleiche mit Vorzeichen verwendet und zeigt an, ob ein Wert negativ in der Zweierkomplement-Darstellung ist."
+ "Fast alle Spiele haben in ihrem Kern eine Spielschleife. Alle Spielschleifen haben die gleiche Grundform: Benutzereingaben annehmen, den Spielzustand aktualisieren und den Spielzustand darstellen. Diese Schleife ist da keine Ausnahme."
+ "Meldungen"
+ "Die Speicheradressen <tt>$01</tt> und <tt>$02</tt> enthalten die Werte <tt>$05</tt> bzw. <tt>$07</tt>. Denke an <tt>($00,X)</tt> als <tt>($00 + X)</tt>. In diesem Fall ist <tt>X</tt> gleich <tt>$01</tt>, also vereinfacht sich das zu <tt>($01)</tt>. Von hier aus läuft es wie bei der standardmäßigen indirekten Adressierung - die zwei Bytes bei <tt>$01</tt> und <tt>$02</tt> (<tt>$05</tt> und <tt>$07</tt>) werden nachgeschlagen, um die Adresse <tt>$0705</tt> zu bilden. Dies ist die Adresse, in die das <tt>Y</tt>-Register in der vorherigen Anweisung gespeichert wurde, sodass das <tt>A</tt>-Register den gleichen Wert wie <tt>Y</tt> erhält, wenn auch auf einem viel umständlicheren Weg. Das wirst du nicht oft sehen."
+ "Speicherbelegung"
+ "Zahlreiche kleine Fehler wurden behoben, um die allgemeine Benutzerfreundlichkeit zu verbessern"
+ "Wichtige UI-Verbesserungen mit Einführung eines modernen Floating Action Buttons mit dynamischen Zuständen für intuitive Programmkontrolle und einem vollständig neu gestalteten Debugger-Widget mit modernen Adwaita-Komponenten."
+ "Line Buster 6502"
+ "Heller Stil"
+ "Lernen durch Beispiele war noch nie so einfach. Tauche in funktionierenden Code ein, passe ihn an, bring ihn kaputt, repariere ihn wieder - so haben die besten Programmierer früher gelernt!"
+ "Lerne, wie man den Stack mit den Befehlen PHA und PLA verwendet"
+ "Lerne, wie man den 6502-Mikroprozessor programmiert."
+ "Erfahre mehr über Computer-Geschichte beim Programmieren"
+ "Learn 6502 läuft jetzt auch unter Windows und macOS. Wenn du es jemandem zeigen wolltest, der kein Linux nutzt, geht das jetzt."
+ "Lerne 6502 läuft jetzt auf GNOME 50! Dank an Sabri Ünal für den Beitrag zum Runtime-Update."
+ "Lerne 6502 Assembler"
+ "Lernen"
+ "Label-Fehler"
+ "Label wurde bereits in Zeile %1$d definiert: %2$s"
+ "Label %1$s wird bereits als Symbol verwendet; bitte eines davon umbenennen"
"Springen ist wie Verzweigen mit zwei Hauptunterschieden. Erstens werden Sprünge nicht bedingt ausgeführt, und zweitens verwenden sie eine zweibyte absolute Adresse. Für kleine Programme ist dieses zweite Detail nicht sehr wichtig, da du hauptsächlich Labels verwendest und der Assembler die korrekte Speicheradresse aus dem Label ermittelt. Für größere Programme ist Springen jedoch der einzige Weg, um von einem Codeabschnitt zu einem anderen zu gelangen."
"Springen"
- "<tt>X</tt> enthält die Pixelfarbe und <tt>Y</tt> enthält die Position des aktuellen Pixels. Die erste Schleife zeichnet die aktuelle Farbe als Pixel (über das <tt>A</tt>-Register), schiebt die Farbe auf den Stack und erhöht dann die Farbe und Position. Die zweite Schleife nimmt die Farbe vom Stack, zeichnet die genommene Farbe als Pixel und erhöht dann die Position. Wie zu erwarten, erzeugt dies ein gespiegeltes Muster."
- "Zwei der Stack-Anweisungen sind <tt>PHA</tt> und <tt>PLA</tt>, \"push accumulator\" und \"pull accumulator\". Unten ist ein Beispiel dieser beiden in Aktion."
- "Der Stack in einem 6502-Prozessor ist wie jeder andere Stack - Werte werden darauf geschoben (gepusht) und davon genommen (\"gepullt\" in 6502-Sprache). Die aktuelle Tiefe des Stacks wird durch den Stack-Pointer gemessen, ein spezielles Register. Der Stack befindet sich im Speicher zwischen <tt>$0100</tt> und <tt>$01ff</tt>. Der Stack-Pointer ist anfangs <tt>$ff</tt>, was auf die Speicheradresse <tt>$01ff</tt> zeigt. Wenn ein Byte auf den Stack geschoben wird, wird der Stack-Pointer zu <tt>$fe</tt>, oder Speicheradresse <tt>$01fe</tt>, und so weiter."
- "Der Stack"
- "Versuche Code-Beispiele zu schreiben, die jeden der 6502-Adressierungsmodi verwenden. Denk daran, dass du den Monitor im Debugger verwenden kannst, um einen Speicherbereich zu beobachten."
- "Übung"
- "In diesem Fall schlägt <tt>($01)</tt> die zwei Bytes bei <tt>$01</tt> und <tt>$02</tt> nach: <tt>$03</tt> und <tt>$07</tt>. Diese bilden die Adresse <tt>$0703</tt>. Der Wert des <tt>Y</tt>-Registers wird zu dieser Adresse addiert, um die endgültige Adresse <tt>$0704</tt> zu erhalten."
- "Indirekt indiziert ist wie indiziert indirekt, aber weniger verrückt. Anstatt das <tt>X</tt>-Register <i>vor</i> dem Dereferenzieren zur Adresse zu addieren, wird die Nullseiten-Adresse dereferenziert und das <tt>Y</tt>-Register zur resultierenden Adresse addiert."
+ "JSR/RTS"
+ "JMP"
+ "Einführung"
+ "Interrupt Flag: Wenn gesetzt, maskiert (deaktiviert) alle maskierbaren Interrupts (IRQ). Nur Non-Maskable Interrupts (NMI) können noch auftreten. Wird für kritische Codeabschnitte verwendet, die nicht unterbrochen werden dürfen."
+ "Schrift der Oberfläche"
+ "Interaktive Tutorials führen dich vom Anfänger zum Fortgeschrittenen"
+ "Interaktives Tutorial"
+ "Anweisungen in der Assemblersprache sind wie eine kleine Sammlung vordefinierter Funktionen. Alle Anweisungen nehmen null oder ein Argument. Hier ist etwas kommentierter Quellcode, um einige verschiedene Anweisungen vorzustellen:"
+ "Anweisungen"
+ "Initialisierung"
+ "Indirekt: <tt>($c000)</tt>"
"Indirekt indiziert: <tt>($c0),Y</tt>"
- "Die Speicheradressen <tt>$01</tt> und <tt>$02</tt> enthalten die Werte <tt>$05</tt> bzw. <tt>$07</tt>. Denke an <tt>($00,X)</tt> als <tt>($00 + X)</tt>. In diesem Fall ist <tt>X</tt> gleich <tt>$01</tt>, also vereinfacht sich das zu <tt>($01)</tt>. Von hier aus läuft es wie bei der standardmäßigen indirekten Adressierung - die zwei Bytes bei <tt>$01</tt> und <tt>$02</tt> (<tt>$05</tt> und <tt>$07</tt>) werden nachgeschlagen, um die Adresse <tt>$0705</tt> zu bilden. Dies ist die Adresse, in die das <tt>Y</tt>-Register in der vorherigen Anweisung gespeichert wurde, sodass das <tt>A</tt>-Register den gleichen Wert wie <tt>Y</tt> erhält, wenn auch auf einem viel umständlicheren Weg. Das wirst du nicht oft sehen."
- "Diese ist etwas seltsam. Es ist wie eine Kreuzung zwischen Nullseite,X und indirekt. Im Grunde nimmst du die Nullseiten-Adresse, addierst den Wert des <tt>X</tt>-Registers dazu und verwendest das dann, um eine zweibyte-Adresse nachzuschlagen. Zum Beispiel:"
+ "Indirekt indiziert ist wie indiziert indirekt, aber weniger verrückt. Anstatt das <tt>X</tt>-Register <i>vor</i> dem Dereferenzieren zur Adresse zu addieren, wird die Nullseiten-Adresse dereferenziert und das <tt>Y</tt>-Register zur resultierenden Adresse addiert."
+ "Indirekte Adressierung verwendet eine absolute Adresse, um eine andere Adresse nachzuschlagen. Die erste Adresse liefert das niedrigstwertige Byte der Adresse, und das folgende Byte liefert das höchstwertige Byte. Das kann schwer zu verstehen sein, hier ist ein Beispiel:"
+ "Labels werden indiziert..."
"Indiziert indirekt: <tt>($c0,X)</tt>"
+ "Indexregister Y: Wird für Adressierung verwendet"
+ "Indexregister X: Wird für Adressierung verwendet"
+ "In diesem kleinen Tutorial zeige ich dir, wie du mit der 6502-Assemblersprache loslegen kannst. Der 6502-Prozessor war in den Siebzigern und Achtzigern riesig und trieb berühmte Computer wie den <a href=\"https://de.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://de.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://de.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://de.wikipedia.org/wiki/Apple_II\">Apple II</a> und das <a href=\"https://de.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a> an. Bender aus Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">hat einen 6502-Prozessor als Gehirn</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Sogar der Terminator wurde in 6502 programmiert</a>."
"In diesem Beispiel enthält <tt>$f0</tt> den Wert <tt>$01</tt> und <tt>$f1</tt> enthält den Wert <tt>$cc</tt>. Die Anweisung <tt>JMP ($f0)</tt> veranlasst den Prozessor, die zwei Bytes bei <tt>$f0</tt> und <tt>$f1</tt> (<tt>$01</tt> und <tt>$cc</tt>) nachzuschlagen und sie zur Adresse <tt>$cc01</tt> zusammenzufügen, die dann zum neuen Programmzähler wird. Assembliere und gehe das obige Programm schrittweise durch, um zu sehen, was passiert. Ich werde mehr über <tt>JMP</tt> im Abschnitt über <a href=\"#jumping\">Springen</a> sprechen."
- "Indirekte Adressierung verwendet eine absolute Adresse, um eine andere Adresse nachzuschlagen. Die erste Adresse liefert das niedrigstwertige Byte der Adresse, und das folgende Byte liefert das höchstwertige Byte. Das kann schwer zu verstehen sein, hier ist ein Beispiel:"
- "Indirekt: <tt>($c000)</tt>"
- "Einige Anweisungen arbeiten nicht mit Speicheradressen (z.B. <tt>INX</tt> - inkrementiere das <tt>X</tt>-Register). Diese haben eine implizite Adressierung - das Argument ergibt sich aus der Anweisung selbst."
+ "In diesem Fall schlägt <tt>($01)</tt> die zwei Bytes bei <tt>$01</tt> und <tt>$02</tt> nach: <tt>$03</tt> und <tt>$07</tt>. Diese bilden die Adresse <tt>$0703</tt>. Der Wert des <tt>Y</tt>-Registers wird zu dieser Adresse addiert, um die endgültige Adresse <tt>$0704</tt> zu erhalten."
+ "In diesem Assembler können wir beschreibende Konstanten (oder Symbole) definieren, die Zahlen repräsentieren. Der restliche Code kann dann einfach die Konstanten anstelle der wörtlichen Zahl verwenden, was sofort deutlich macht, womit wir es zu tun haben. Du kannst Buchstaben, Ziffern und Unterstriche in einem Namen verwenden."
+ "<b>Tippe</b> (nicht einfügen) den folgenden Code in den Editor:"
+ "In der Assemblersprache verwendet man normalerweise Labels mit Verzweigungsanweisungen. Beim Assemblieren wird dieses Label jedoch in einen einbytigen relativen Offset umgewandelt (eine Anzahl von Bytes, die von der nächsten Anweisung aus vor- oder rückwärts gegangen werden soll), sodass Verzweigungsanweisungen nur etwa 256 Bytes vor und zurück gehen können. Das bedeutet, dass sie nur für Bewegungen innerhalb von lokalem Code verwendet werden können. Für weitere Bewegungen musst du die Sprunganweisungen verwenden."
+ "Verbesserte Leistung der Spielekonsole für flüssigeres Gameplay"
+ "Verbesserte Spieloberfläche und Steuerung für mobile Geräte"
+ "Verbesserte Beschreibungen für nicht-technische Benutzer"
"Implizit"
- "<tt>a9</tt> und <tt>c9</tt> sind die Prozessor-Opcodes für unmittelbar adressierte <tt>LDA</tt> und <tt>CMP</tt>. <tt>01</tt> und <tt>02</tt> sind die Argumente für diese Anweisungen. <tt>d0</tt> ist der Opcode für <tt>BNE</tt>, und sein Argument ist <tt>02</tt>. Dies bedeutet \"überspringe die nächsten zwei Bytes\" (<tt>85 22</tt>, die assemblierte Version von <tt>STA $22</tt>). Versuche den Code so zu ändern, dass <tt>STA</tt> eine zweibyte absolute Adresse anstelle einer einbyte Nullseiten-Adresse verwendet (z.B. ändere <tt>STA $22</tt> zu <tt>STA $2222</tt>). Assembliere den Code neu und schaue dir den Hexdump erneut an - das Argument für <tt>BNE</tt> sollte jetzt <tt>03</tt> sein, weil die Anweisung, die der Prozessor überspringt, jetzt drei Bytes lang ist."
- "Der Hexadezimalcode sollte etwa so aussehen:"
- "Assembliere den folgenden Code und schaue dann im Debugger, um den Hexdump des assemblierten Codes zu sehen."
- "Relative Adressierung wird für Verzweigungsanweisungen verwendet. Diese Anweisungen nehmen ein einzelnes Byte, das als Offset von der folgenden Anweisung verwendet wird."
- "Relativ: <tt>$c0</tt> (oder Label)"
- "Die unmittelbare Adressierung beschäftigt sich nicht direkt mit Speicheradressen - dies ist der Modus, in dem tatsächliche Werte verwendet werden. Zum Beispiel lädt <tt>LDX #$01</tt> den Wert <tt>$01</tt> in das <tt>X</tt>-Register. Dies unterscheidet sich deutlich von der Nullseiten-Anweisung <tt>LDX $01</tt>, die den Wert an der Speicheradresse <tt>$01</tt> in das <tt>X</tt>-Register lädt."
"Unmittelbar: <tt>#$c0</tt>"
- "Im Gegensatz zu Nullseite,Y kann absolut,Y nicht mit <tt>STX</tt> verwendet werden, aber mit <tt>LDA</tt> und <tt>STA</tt>."
- "Dies sind die absoluten Adressierungsversionen von Nullseite,X und Nullseite,Y. Zum Beispiel:"
- "Absolut,X und absolut,Y: <tt>$c000,X</tt> und <tt>$c000,Y</tt>"
- "Dies ist das Äquivalent zu Nullseite,X, kann aber nur mit <tt>LDX</tt> und <tt>STX</tt> verwendet werden."
- "Nullseite,Y: <tt>$c0,Y</tt>"
+ "Die unmittelbare Adressierung beschäftigt sich nicht direkt mit Speicheradressen - dies ist der Modus, in dem tatsächliche Werte verwendet werden. Zum Beispiel lädt <tt>LDX #$01</tt> den Wert <tt>$01</tt> in das <tt>X</tt>-Register. Dies unterscheidet sich deutlich von der Nullseiten-Anweisung <tt>LDX $01</tt>, die den Wert an der Speicheradresse <tt>$01</tt> in das <tt>X</tt>-Register lädt."
+ "Wenn deine Systemsprache Chinesisch ist, erscheint die App wieder auf Chinesisch. Sie war versehentlich auf Englisch zurückgefallen."
+ "Wenn dein Beispiel auf einem anderen Beispiel basiert oder davon inspiriert ist, kannst du die Quell-URL angeben."
+ "Wenn du eine der aufgeführten Sprachen sprichst, hilf bitte beim Überprüfen oder Verbessern der Übersetzungen. Du kannst über die In‑App‑Links, unsere Übersetzungsplattform oder durch das Eröffnen eines Issues beitragen."
"Wenn das Ergebnis der Addition größer als ein einzelnes Byte ist, wird die Adresse umgebrochen. Zum Beispiel:"
- "Hier wird die Adressierung interessant. In diesem Modus wird eine Nullseiten-Adresse angegeben und dann der Wert des <tt>X</tt>-Registers hinzuaddiert. Hier ist ein Beispiel:"
- "Nullseite,X: <tt>$c0,X</tt>"
- "Alle Anweisungen, die absolute Adressierung unterstützen (mit Ausnahme der Sprunganweisungen), haben auch die Möglichkeit, eine einbyte-Adresse zu verwenden. Diese Art der Adressierung wird \"Nullseite\" genannt - nur die erste Seite (die ersten 256 Bytes) des Speichers ist zugänglich. Dies ist schneller, da nur ein Byte nachgeschlagen werden muss, und nimmt auch weniger Platz im assemblierten Code ein."
- "Nullseite: <tt>$c0</tt>"
- "Bei der absoluten Adressierung wird die vollständige Speicheradresse als Argument für die Anweisung verwendet. Zum Beispiel:"
- "Absolut: <tt>$c000</tt>"
- "Bei all diesen Beispielen kann es hilfreich sein, den Speicher-Monitor im Debugger zu verwenden, um die Änderungen im Speicher zu beobachten. Der Monitor benötigt eine Startadresse und die Anzahl der Bytes, die von dieser Position angezeigt werden sollen. Beide Werte sind Hexadezimalzahlen. Um zum Beispiel 16 Bytes Speicher ab <tt>$c000</tt> anzuzeigen, gib <tt>c000</tt> und <tt>10</tt> in die Felder <b>Start</b> bzw. <b>Länge</b> ein."
- "Der 6502 verwendet einen 16-Bit-Adressbus, was bedeutet, dass dem Prozessor 65536 Bytes Speicher zur Verfügung stehen. Denk daran, dass ein Byte durch zwei Hex-Zeichen dargestellt wird, sodass die Speicheradressen im Allgemeinen als <tt>$0000 - $ffff</tt> dargestellt werden. Es gibt verschiedene Möglichkeiten, sich auf diese Speicheradressen zu beziehen, wie unten beschrieben."
- "Adressierungsmodi"
- "<tt>BCC</tt> und <tt>BCS</tt> (\"branch on carry clear\" und \"branch on carry set\") werden verwendet, um abhängig vom Carry-Flag zu verzweigen. Schreibe ein Programm, das eine dieser beiden Anweisungen verwendet."
- "Das Gegenteil von <tt>BNE</tt> ist <tt>BEQ</tt>. Versuche ein Programm zu schreiben, das <tt>BEQ</tt> verwendet."
- "In der Assemblersprache verwendet man normalerweise Labels mit Verzweigungsanweisungen. Beim Assemblieren wird dieses Label jedoch in einen einbytigen relativen Offset umgewandelt (eine Anzahl von Bytes, die von der nächsten Anweisung aus vor- oder rückwärts gegangen werden soll), sodass Verzweigungsanweisungen nur etwa 256 Bytes vor und zurück gehen können. Das bedeutet, dass sie nur für Bewegungen innerhalb von lokalem Code verwendet werden können. Für weitere Bewegungen musst du die Sprunganweisungen verwenden."
- "Die nächste Zeile, <tt>BNE decrement</tt>, wird die Ausführung zum decrement-Label verschieben, wenn das <tt>Z</tt>-Flag auf <tt>0</tt> gesetzt ist (was bedeutet, dass die beiden Werte im <tt>CPX</tt>-Vergleich nicht gleich waren), andernfalls passiert nichts und wir speichern <tt>X</tt> in <tt>$0201</tt> und beenden dann das Programm."
- "Zuerst laden wir den Wert <tt>$08</tt> in das <tt>X</tt>-Register. Die nächste Zeile ist ein Label. Labels markieren bestimmte Stellen in einem Programm, damit wir später dorthin zurückkehren können. Nach dem Label dekrementieren wir <tt>X</tt>, speichern es in <tt>$0200</tt> (das Pixel oben links) und vergleichen es dann mit dem Wert <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> vergleicht den Wert im <tt>X</tt>-Register mit einem anderen Wert. Wenn die beiden Werte gleich sind, wird das <tt>Z</tt>-Flag auf <tt>1</tt> gesetzt, andernfalls auf <tt>0</tt>."
- "Die 6502-Assemblersprache hat eine Reihe von Verzweigungsanweisungen, die alle basierend darauf verzweigen, ob bestimmte Flags gesetzt sind oder nicht. In diesem Beispiel schauen wir uns <tt>BNE</tt> an: \"Branch on not equal\" (Verzweige bei Ungleichheit)."
- "Bisher können wir nur einfache Programme ohne Verzweigungslogik schreiben. Lass uns das ändern."
+ "IDE"
+ "Ich werde nicht im Detail erklären, wie jede der Richtungen funktioniert, aber die obige Erklärung sollte dir genug geben, um es mit etwas Studium selbst herauszufinden."
+ "Ausgeblendet"
+ "Hexdump erzeugt."
+ "Hexdump"
+ "Hex-Monitor"
+ "Hier ist ein Beispiel. Beachte, dass unmittelbare Operanden immer noch mit einem <tt>#</tt> beginnen."
+ "Hilfe"
+ "Hebräisch ist außerdem unsere erste Sprache, die von rechts nach links geschrieben wird: Dank Menachems Tests und Beiträgen unterstützt die App jetzt Layouts von rechts nach links und ist damit auf weitere RTL-Sprachen vorbereitet."
+ "Grün"
+ "Guter Start – du hast das erste Kapitel geschafft!"
+ "Hast du eine coole 6502-Kreation? Teile sie mit der Community! Du kannst jetzt deine Code-Beispiele direkt aus der App einreichen. Einfach auf den Teilen-Button klicken, und wir erstellen automatisch ein GitHub Issue und Pull Request für dich."
+ "Hast du ein cooles 6502 Beispiel?\nTeile es mit der Community!"
+ "Der Übergang zwischen den Abschnitten ist komplizierter, da wir auch das höchstwertige Byte berücksichtigen müssen. Zum Beispiel sollte das Heruntergehen von <tt>$02e1</tt> zu <tt>$0301</tt> führen. Glücklicherweise ist dies ziemlich einfach zu erreichen. Die Addition von <tt>$20</tt> zu <tt>$e1</tt> ergibt <tt>$01</tt> und setzt das Carry-Bit. Wenn das Carry-Bit gesetzt wurde, wissen wir, dass wir auch das höchstwertige Byte erhöhen müssen."
+ "Deutsch und Spanisch wurden von Mitwirkenden validiert. Die anderen Sprachen sind KI‑unterstützte Entwürfe und benötigen eine menschliche Validierung."
+ "Spiele werden jetzt automatisch pausiert, wenn zwischen Bildschirmen gewechselt wird"
+ "Gamepad-Taste gedrückt:"
+ "GNOME"
+ "GNOME"
+ "Vollständig kommentierte Version des Snake-Spiels"
+ "Gesamter Speicher ($0000-$FFFF)"
+ "%1$d Labels gefunden."
+ "%1$d Label gefunden."
+ "Für Linux gibt es jetzt auch ein AppImage: eine Datei, keine Installation, praktisch auf einer Distribution, für die wir kein Paket bauen."
+ "Schrift"
+ "Systemstil verwenden"
+ "Build-Fehler unter PostmarketOS behoben, verbessert Kompatibilität mit Mobilgeräten"
+ "Ein Problem wurde behoben, bei dem der Zurück-Button im Lernbereich im Desktop- und Tablet-Modus immer sichtbar war, auch wenn keine Unterseite geöffnet war."
+ "Zuerst überprüft <tt>readkeys</tt>, ob eine der Richtungstasten (W, A, S, D) gedrückt wurde, und setzt entsprechend die Richtung der Schlange. Dann überprüft <tt>checkCollision</tt>, ob die Schlange mit sich selbst oder dem Apfel kollidiert ist. <tt>updateSnake</tt> aktualisiert die interne Darstellung der Schlange basierend auf ihrer Richtung. Als nächstes werden der Apfel und die Schlange gezeichnet. Schließlich lässt <tt>spinWheels</tt> den Prozessor etwas Leerlaufarbeit machen, damit das Spiel nicht zu schnell läuft. Denk daran wie an einen Sleep-Befehl. Das Spiel läuft weiter, bis die Schlange mit der Wand oder sich selbst kollidiert."
+ "Zuerst laden wir den Wert <tt>$08</tt> in das <tt>X</tt>-Register. Die nächste Zeile ist ein Label. Labels markieren bestimmte Stellen in einem Programm, damit wir später dorthin zurückkehren können. Nach dem Label dekrementieren wir <tt>X</tt>, speichern es in <tt>$0200</tt> (das Pixel oben links) und vergleichen es dann mit dem Wert <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> vergleicht den Wert im <tt>X</tt>-Register mit einem anderen Wert. Wenn die beiden Werte gleich sind, wird das <tt>Z</tt>-Flag auf <tt>1</tt> gesetzt, andernfalls auf <tt>0</tt>."
+ "Erste Zeile: <tt>$0200</tt>-<tt>$021F</tt>, zweite Zeile: <tt>$0220</tt>-<tt>$023F</tt>, usw."
+ "Erste Veröffentlichung von Lerne 6502 Assembler für GNOME"
+ "Schließlich enthält Byte <tt>$03</tt> die aktuelle Länge der Schlange, gemessen in Bytes im Speicher (eine Länge von 4 bedeutet also 2 Pixel)."
+ "Fülle die Informationen über dein 6502 Beispiel aus, um es mit der Community zu teilen"
+ "Datei \"%1$s\" enthält ungespeicherte Änderungen"
+ "Konnte nicht in die Zwischenablage kopiert werden"
+ "Übungen"
+ "Übung"
+ "Anweisungen einzeln ausführen anstatt kontinuierlich"
+ "Beispiele"
+ "Beispiel zur Überprüfung eingereicht"
+ "Auch wenn dies eine einfache Version sein wird, wird der Code wesentlich umfangreicher sein als alle bisherigen Beispiele. Wir müssen mehrere Speicheradressen für die verschiedenen Aspekte des Spiels im Auge behalten. Wir können die notwendige Buchführung im Programm immer noch selbst durchführen, wie zuvor, aber in größerem Umfang wird das schnell mühsam und kann auch zu schwer zu findenden Fehlern führen. Stattdessen lassen wir jetzt den Assembler einen Teil der alltäglichen Arbeit für uns erledigen."
+ "Gerade oder ungerade"
+ "Mit diesem Wissen solltest du erkennen können, dass die Anweisung <tt>LDA #$01</tt> den Hexadezimalwert <tt>$01</tt> in das Register <tt>A</tt> lädt. Ich werde im nächsten Abschnitt näher auf Register eingehen."
+ "Verbesserte Eingabe des Adressbereichs im Hex-Monitor"
+ "Verbesserte App-Darstellung und Zugänglichkeit"
+ "Stepper-Modus aktivieren"
+ "Debugger aktivieren"
+ "Jeder Abschnitt (<tt>upKey</tt>, <tt>rightKey</tt>, usw.) überprüft zuerst, ob die aktuelle Richtung die entgegengesetzte der neuen Richtung ist. Dies erfordert einen weiteren kleinen Umweg."
+ "Fertig"
+ "Bildschirmorganisation"
+ "Anzeigespeicher ($0200-$05FF)"
+ "Entdecke die faszinierende Welt der Programmierung klassischer Computer und Spielekonsolen! Lerne die 6502-Assemblersprache - denselben Code, der legendäre Systeme wie NES, Commodore 64 und Apple II antrieb."
+ "Verwerfen"
+ "Disassemblierter Code erzeugt."
+ "Disassemblierter Code"
+ "Deaktivieren, um die Leistung zu verbessern"
+ "Dino Run"
+ "Beschreibung"
+ "Decimal Flag: Aktiviert den Binary Coded Decimal (BCD)-Modus für arithmetische Operationen. Wenn gesetzt, behandeln ADC/SBC-Anweisungen Werte als Dezimalziffern (0-9) anstatt als Binärzahlen. Wird für Finanzberechnungen und Dezimalarithmetik verwendet."
+ "Debugger wird nur noch aktualisiert, wenn er sichtbar ist, reduziert unnötige Verarbeitung"
+ "Debugger"
+ "Debugge deine Programme mit Echtzeit-Inspektionswerkzeugen"
+ "Debug-Einstellungen"
+ "Debuggen"
+ "Dunkler Stil"
+ "Ein Spiel erstellen"
+ "In Editor kopieren"
+ "In die Zwischenablage kopieren"
+ "In die Zwischenablage kopiert"
+ "Fortfahren"
+ "Bestätigen"
+ "Häufige Anweisungen"
+ "Kommentiertes Snake-Spiel"
+ "Farbpalette"
+ "Code-Editor und virtuelle Spielkonsole"
+ "Code in Editor kopiert"
+ "Code erfolgreich assembliert, %1$d Bytes."
+ "Coden"
+ "Ändere eines der Pixel so, dass es in der unteren rechten Ecke gezeichnet wird (Speicheradresse <tt>$05ff</tt>)."
+ "Carry Flag: Wird gesetzt, wenn eine Addition einen Übertrag erzeugt oder eine Subtraktion einen Borrow erzeugt. Wird für Multi-Byte-Arithmetikoperationen und bedingte Verzweigungen (BCS, BCC) verwendet. Kritisch für die Implementierung von arithmetischen Operationen, die größer als 8 Bit sind."
+ "Abbrechen"
+ "Durch das Übermitteln stimmst du zu, dass dein Beispiel unter <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a> lizenziert wird."
+ "Zerstöre die Blöcke mit Schläger und Ball."
+ "Break Flag: Wird gesetzt, wenn eine BRK (Break)-Anweisung ausgeführt wird. Wird verwendet, um zwischen Software-Interrupts (BRK) und Hardware-Interrupts zu unterscheiden. Hilft bei der Identifizierung der Quelle eines Interrupts in Interrupt-Service-Routinen."
"Verzweigungen"
- "Das Gegenteil von <tt>ADC</tt> ist <tt>SBC</tt> (subtract with carry). Schreibe ein Programm, das diese Anweisung verwendet."
- "Schreibe das erste Beispiel in diesem Abschnitt so um, dass es das <tt>Y</tt>-Register anstelle des <tt>X</tt>-Registers verwendet."
- "Du hast <tt>TAX</tt> gesehen. Du kannst wahrscheinlich erraten, was <tt>TAY</tt>, <tt>TXA</tt> und <tt>TYA</tt> tun, aber schreibe etwas Code, um deine Vermutungen zu testen."
- "Eine vollständige Liste des 6502-Befehlssatzes ist <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">hier</a> und <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">hier</a> verfügbar (ich verweise normalerweise auf beide Seiten, da sie ihre Stärken und Schwächen haben). Diese Seiten beschreiben die Argumente für jede Anweisung, welche Register sie verwenden und welche Flags sie setzen. Sie sind deine Bibel."
- "Assembliere den Code und wähle <b>Schritt</b> aus dem Dropdown-Menü des Run-Buttons, um diese drei Anweisungen schrittweise durchzugehen. Der Monitor im Debugger zeigt einen Speicherbereich an und kann hilfreich sein, um die Ausführung von Programmen zu visualisieren. <tt>STA $01</tt> speichert den Wert des <tt>A</tt>-Registers an der Speicheradresse <tt>$01</tt>, und <tt>ADC $01</tt> addiert den an der Speicheradresse <tt>$01</tt> gespeicherten Wert zum <tt>A</tt>-Register. <tt>$80 + $80</tt> sollte <tt>$100</tt> ergeben, aber da dies größer als ein Byte ist, wird das <tt>A</tt>-Register auf <tt>$00</tt> gesetzt und das Carry-Flag wird gesetzt. Zusätzlich wird auch das Zero-Flag gesetzt. Das Zero-Flag wird bei allen Anweisungen gesetzt, bei denen das Ergebnis null ist."
+ "Blau"
+ "Da der Spielzustand in Form von Pixelpositionen gespeichert wird, ist die Darstellung des Spiels sehr einfach. Das erste Unterprogramm, <tt>drawApple</tt>, ist extrem einfach. Es setzt <tt>Y</tt> auf Null, lädt eine zufällige Farbe in den Akkumulator und speichert diesen Wert dann in <tt>($00),y</tt>. <tt>$00</tt> ist der Ort, an dem die Position des Apfels gespeichert ist, also dereferenziert <tt>($00),y</tt> zu dieser Speicheradresse. Lies den Abschnitt \"Indirekt indiziert\" in <a href=\"#addressing\">Adressierungsmodi</a> für weitere Details."
+ "Zurück"
+ "Autor"
+ "Auf niedriger Ebene ist dieses Unterprogramm etwas komplexer. Zuerst wird die Länge in das <tt>X</tt>-Register geladen, das dann dekrementiert wird. Der untenstehende Ausschnitt zeigt den Anfangsspeicher für die Schlange."
+ "Assembler-Dateien"
+ "Assembler"
+ "Code wird assembliert..."
+ "Erfolgreich assembliert"
+ "Assembliere den folgenden Code, öffne dann die <b>Debug</b>-Ansicht und schaue dir den <b>Hexdump</b> an, um den assemblierten Code zu sehen."
+ "Assembliere den Code, öffne dann die <b>Debug</b>-Ansicht und gehe den Code schrittweise durch, während du die Register <tt>A</tt> und <tt>X</tt> beobachtest. Etwas Seltsames passiert in der Zeile <tt>ADC #$c4</tt>. Du könntest erwarten, dass das Addieren von <tt>$c4</tt> zu <tt>$c0</tt> <tt>$184</tt> ergibt, aber dieser Prozessor gibt das Ergebnis als <tt>$84</tt> aus. Was hat es damit auf sich?"
+ "Assembliere den Code und verwende <b>Schritt</b>, um diese drei Anweisungen schrittweise durchzugehen. Der <b>Hex-Monitor</b> in der Debug-Ansicht zeigt einen Speicherbereich an und kann hilfreich sein, um die Ausführung von Programmen zu visualisieren. <tt>STA $01</tt> speichert den Wert des <tt>A</tt>-Registers an der Speicheradresse <tt>$01</tt>, und <tt>ADC $01</tt> addiert den an der Speicheradresse <tt>$01</tt> gespeicherten Wert zum <tt>A</tt>-Register. <tt>$80 + $80</tt> sollte <tt>$100</tt> ergeben, aber da dies größer als ein Byte ist, wird das <tt>A</tt>-Register auf <tt>$00</tt> gesetzt und das Carry-Flag wird gesetzt. Zusätzlich wird auch das Zero-Flag gesetzt. Das Zero-Flag wird bei allen Anweisungen gesetzt, bei denen das Ergebnis null ist."
+ "Assemblieren fehlgeschlagen"
+ "Assemblieren"
+ "Wie bereits erwähnt, werden die vier Richtungen intern durch die Zahlen 1, 2, 4 und 8 dargestellt. Jede dieser Zahlen ist eine Zweierpotenz, daher werden sie durch eine Binärzahl mit einer einzigen <tt>1</tt> dargestellt:"
+ "Solange du dich innerhalb eines dieser horizontalen Streifen bewegst, sind die Dinge einfach. Um zum Beispiel nach rechts zu gehen, erhöhe einfach das niedrigstwertige Byte (z.B. wird aus <tt>$0200</tt> dann <tt>$0201</tt>). Um nach unten zu gehen, addiere <tt>$20</tt> (z.B. wird aus <tt>$0200</tt> dann <tt>$0220</tt>). Links und oben sind die Umkehrung davon."
+ "Wie immer enthält diese Version viele kleine Fehlerbehebungen und Verbesserungen."
+ "Architekturverbesserungen ermöglichen bessere Code-Teilung zwischen GNOME, Web und Android-Plattformen."
+ "Erscheinungsbild-Einstellungen"
+ "Erscheinungsbild"
+ "Alle Zahlen mit dem Präfix <tt>$</tt> in der 6502-Assemblersprache (und folglich auch in diesem Buch) sind im Hexadezimal-(Hex)-Format. Wenn du mit Hexadezimalzahlen nicht vertraut bist, empfehle ich dir, <a href=\"https://de.wikipedia.org/wiki/Hexadezimalsystem\">den Wikipedia-Artikel</a> zu lesen. Alles mit dem Präfix <tt>#</tt> ist ein Literalwert. Alle anderen Zahlen beziehen sich auf Speicheradressen."
"Ein wichtiger Punkt hier ist der Unterschied zwischen <tt>ADC #$01</tt> und <tt>ADC $01</tt>. Der erste Befehl addiert den Wert <tt>$01</tt> zum <tt>A</tt>-Register, aber der zweite addiert den an der Speicheradresse <tt>$01</tt> gespeicherten Wert zum <tt>A</tt>-Register."
- "Tippe (nicht einfügen) den folgenden Code in den Simulator ein:"
- "Das Problem ist, dass <tt>$184</tt> zu groß ist, um in ein einzelnes Byte zu passen (das Maximum ist <tt>$FF</tt>), und die Register können nur ein einzelnes Byte speichern. Aber keine Sorge; der Prozessor ist nicht wirklich dumm. Wenn du genau aufgepasst hast, wirst du bemerkt haben, dass das Carry-Flag nach dieser Operation auf <tt>1</tt> gesetzt wurde. So weißt du Bescheid."
- "Assembliere den Code, schalte dann den Debugger ein und gehe den Code schrittweise durch, während du die Register <tt>A</tt> und <tt>X</tt> beobachtest. Etwas Seltsames passiert in der Zeile <tt>ADC #$c4</tt>. Du könntest erwarten, dass das Addieren von <tt>$c4</tt> zu <tt>$c0</tt> <tt>$184</tt> ergibt, aber dieser Prozessor gibt das Ergebnis als <tt>$84</tt> aus. Was hat es damit auf sich?"
- "Anweisungen in der Assemblersprache sind wie eine kleine Sammlung vordefinierter Funktionen. Alle Anweisungen nehmen null oder ein Argument. Hier ist etwas kommentierter Quellcode, um einige verschiedene Anweisungen vorzustellen:"
- "Anweisungen"
- "Der letzte Abschnitt zeigt die Prozessor-Flags. Jedes Flag ist ein Bit, sodass alle sieben Flags in einem einzigen Byte untergebracht sind. Die Flags werden vom Prozessor gesetzt, um Informationen über die vorherige Anweisung zu geben. Mehr dazu später. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lies hier mehr über Register und Flags</a>."
- "<tt>PC</tt> ist der Programmzähler (program counter) - damit weiß der Prozessor, an welcher Stelle im Programm er sich gerade befindet. Es ist wie die aktuelle Zeilennummer eines ausgeführten Skripts. Im JavaScript-Simulator wird der Code ab der Speicheradresse <tt>$0600</tt> assembliert, daher beginnt <tt>PC</tt> immer dort."
- "<tt>SP</tt> ist der Stack-Pointer. Ich werde jetzt noch nicht auf den Stack eingehen, aber im Grunde wird dieses Register jedes Mal dekrementiert, wenn ein Byte auf den Stack geschoben wird, und inkrementiert, wenn ein Byte vom Stack genommen wird."
- "Die erste Zeile zeigt die Register <tt>A</tt>, <tt>X</tt> und <tt>Y</tt> (<tt>A</tt> wird oft als \"Akkumulator\" bezeichnet). Jedes Register enthält ein einzelnes Byte. Die meisten Operationen arbeiten mit dem Inhalt dieser Register."
- "Wir haben bereits einen kurzen Blick auf den Prozessorstatus-Bereich geworfen (den Teil mit <tt>A</tt>, <tt>PC</tt> usw.), aber was bedeutet das alles?"
- "Register und Flags"
+ "Auch nützlich: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Fast fertig!"
+ "Alle Anweisungen, die absolute Adressierung unterstützen (mit Ausnahme der Sprunganweisungen), haben auch die Möglichkeit, eine einbyte-Adresse zu verwenden. Diese Art der Adressierung wird \"Nullseite\" genannt - nur die erste Seite (die ersten 256 Bytes) des Speichers ist zugänglich. Dies ist schneller, da nur ein Byte nachgeschlagen werden muss, und nimmt auch weniger Platz im assemblierten Code ein."
+ "Alle Dateien"
+ "Danach wird der Wert <tt>2</tt> zum Akkumulator addiert, um eine endgültige Zufallszahl im Bereich 2-5 zu erzeugen."
+ "Nach dem anfänglichen Block von Kommentaren (Zeilen, die mit Semikolons beginnen), sind die ersten beiden Zeilen:"
+ "Nach der Kollisionserkennung aktualisieren wir die Position der Schlange. Dies wird auf hoher Ebene so gemacht: Zuerst wird jedes Bytepaar des Körpers um eine Position im Speicher nach oben verschoben. Zweitens wird der Kopf entsprechend der aktuellen Richtung aktualisiert. Schließlich wird, wenn der Kopf außerhalb der Grenzen ist, dies als Kollision behandelt. Ich werde dies mit ASCII-Kunst veranschaulichen. Jedes Klammerpaar enthält der Einfachheit halber eine x,y-Koordinate anstelle eines Bytepaars."
+ "Nach einer Bewegung in jede Richtung müssen wir auch überprüfen, ob der Kopf außerhalb der Grenzen geraten würde. Dies wird für jede Richtung unterschiedlich gehandhabt. Für links und rechts können wir überprüfen, ob der Kopf effektiv \"umgebrochen\" ist. Wenn man von <tt>$021f</tt> nach rechts geht, indem man das niedrigstwertige Byte erhöht, würde dies zu <tt>$0220</tt> führen, aber das bedeutet eigentlich einen Sprung vom letzten Pixel der ersten Zeile zum ersten Pixel der zweiten Zeile. Also müssen wir jedes Mal, wenn wir nach rechts gehen, überprüfen, ob das neue niedrigstwertige Byte ein Vielfaches von <tt>$20</tt> ist. Dies geschieht durch eine Bit-Prüfung gegen die Maske <tt>$1f</tt>. Die Illustration unten wird hoffentlich zeigen, wie das Maskieren der niedrigsten 5 Bits offenbart, ob eine Zahl ein Vielfaches von <tt>$20</tt> ist oder nicht."
+ "Adwaita"
+ "Adressierungsmodi"
+ "Adressierungsmodi"
+ "Adresse %1$s - unbekannter Opcode"
+ "Zusätzliche Tasteneingaben sind ebenfalls verfügbar: Taste A (Eingabe/Return-Taste, ASCII-Code <tt>$0D</tt>) und Taste B (Leertaste, ASCII-Code <tt>$20</tt>). Diese können genutzt werden, um mehr Interaktion zu deinen Spielen hinzuzufügen. Für die Richtungssteuerung können sowohl WASD-Tasten als auch Pfeiltasten austauschbar verwendet werden."
+ "Hilfefunktion hinzugefügt, um die Codebearbeitung für Anfänger zu erleichtern"
+ "Dateiverwaltung zum Speichern und Laden von Programmen hinzugefügt"
"Füge weitere Anweisungen hinzu, um zusätzliche Pixel zu zeichnen."
- "3."
- "Ändere eines der Pixel so, dass es in der unteren rechten Ecke gezeichnet wird (Speicheradresse <tt>$05ff</tt>)."
- "2."
- "Versuche die Farbe der drei Pixel zu ändern."
- "1."
- "Übungen"
- "Die Anweisung <tt>STA $0200</tt> speichert also den Wert des <tt>A</tt>-Registers an der Speicheradresse <tt>$0200</tt>. Klicke noch vier Mal auf <b>Schritt</b>, um die restlichen Anweisungen auszuführen, und beobachte dabei, wie sich das <tt>A</tt>-Register verändert."
- "Drücke erneut <b>Schritt</b>, um die zweite Anweisung auszuführen. Das Pixel oben links in der Spielkonsole sollte jetzt weiß sein. Dieser Simulator verwendet die Speicheradressen von <tt>$0200</tt> bis <tt>$05ff</tt>, um Pixel auf seinem Display zu zeichnen. Die Werte von <tt>$00</tt> bis <tt>$0f</tt> repräsentieren 16 verschiedene Farben (<tt>$00</tt> ist schwarz und <tt>$01</tt> ist weiß), daher zeichnet das Speichern des Wertes <tt>$01</tt> an der Speicheradresse <tt>$0200</tt> ein weißes Pixel in der oberen linken Ecke. Das ist einfacher als die Art und Weise, wie ein echter Computer Video ausgeben würde, aber für den Moment reicht es."
- "Mit diesem Wissen solltest du erkennen können, dass die Anweisung <tt>LDA #$01</tt> den Hexadezimalwert <tt>$01</tt> in das Register <tt>A</tt> lädt. Ich werde im nächsten Abschnitt näher auf Register eingehen."
- "Alle Zahlen mit dem Präfix <tt>$</tt> in der 6502-Assemblersprache (und folglich auch in diesem Buch) sind im Hexadezimal-(Hex)-Format. Wenn du mit Hexadezimalzahlen nicht vertraut bist, empfehle ich dir, <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">den Wikipedia-Artikel</a> zu lesen. Alles mit dem Präfix <tt>#</tt> ist ein Literalwert. Alle anderen Zahlen beziehen sich auf Speicheradressen."
- "Was macht dieses Programm eigentlich? Lass uns es Schritt für Schritt durchgehen. Klicke auf <b>Zurücksetzen</b> und wähle dann <b>Schritt</b> aus dem Dropdown-Menü. Der Button wechselt in den Schritt-Modus, wodurch du das Programm Anweisung für Anweisung ausführen kannst. Nach einem Klick wirst du im Debugger sehen, dass sich <tt>A=</tt> von <tt>$00</tt> zu <tt>$01</tt> und <tt>PC=</tt> von <tt>$0600</tt> zu <tt>$0602</tt> geändert hat."
- "Der schwarze Spielkonsolenbildschirm sollte jetzt drei farbige \"Pixel\" oben links zeigen."
- "Also, lass uns loslegen! Diese Anwendung enthält einen <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler und Simulator</a>, den ich für dieses interaktive Tutorial angepasst habe. Klicke auf den <b>Kopieren</b>-Button im Code-Block unten, um den Beispielcode in den Editor zu kopieren. Klicke dann auf den Button oben rechts, um den Code zu assemblieren, und klicke erneut, um das Programm auszuführen. Diese Aktionen kannst du auch über das Dropdown-Menü aufrufen."
- "Unser erstes Programm"
- "Warum dann 6502? Warum nicht eine <i>nützliche</i> Assemblersprache wie <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Nun, ich denke nicht, dass das Lernen von x86 nützlich ist. Ich glaube nicht, dass du jemals in deinem Arbeitsalltag Assemblersprache <i>schreiben</i> musst - dies ist eine rein akademische Übung, etwas um deinen Geist und dein Denken zu erweitern. 6502 wurde ursprünglich in einer anderen Zeit geschrieben, als die Mehrheit der Entwickler direkt in Assembler programmierte, statt in diesen neumodischen höheren Programmiersprachen. Daher wurde es für Menschen geschrieben. Modernere Assemblersprachen sind dafür gedacht, von Compilern geschrieben zu werden, also überlassen wir es ihnen. Außerdem macht 6502 <i>Spaß</i>. Niemand hat je x86 als <i>spaßig</i> bezeichnet."
- "Aber ernsthaft, ich denke es ist wertvoll, ein Verständnis für Assemblersprache zu haben. Assemblersprache ist die niedrigste Abstraktionsebene in Computern - der Punkt, an dem der Code noch lesbar ist. Assemblersprache wird direkt in die Bytes übersetzt, die von deinem Computerprozessor ausgeführt werden. Wenn du verstehst, wie es funktioniert, bist du im Grunde ein Computer-<a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">Magier</a> geworden."
- "(Tatsächlich wurde mir zuverlässig mitgeteilt, dass 6502-Prozessoren immer noch von <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> hergestellt und <a href=\"https://www.mouser.co.uk/c/?q=65C02\">an Bastler verkauft</a> werden, also ist 6502 offensichtlich <i>keine</i> tote Sprache! Wer hätte das gedacht?)"
- "Warum solltest du also 6502 lernen wollen? Es ist doch eine tote Sprache, oder? Nun, Latein ist das auch. Und das wird immer noch unterrichtet. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
- "In diesem kleinen Tutorial zeige ich dir, wie du mit der 6502-Assemblersprache loslegen kannst. Der 6502-Prozessor war in den Siebzigern und Achtzigern riesig und trieb berühmte Computer wie den <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a> und das <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a> an. Bender aus Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">hat einen 6502-Prozessor als Gehirn</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Sogar der Terminator wurde in 6502 programmiert</a>."
- "Einführung"
- "Tutorial <sub>von <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, lizenziert unter CC BY 4.0</sub>"
- "<b><tt>$10</tt>-<tt>$15</tt></b>: Schlangen-Positionsdaten (Kopf, Körpersegmente, Schwanz)"
- "<b><tt>$03</tt></b>: Schlangen-Länge"
- "<b><tt>$02</tt></b>: Schlangen-Richtung (1=oben, 2=rechts, 4=unten, 8=links)"
- "<b><tt>$00</tt>-<tt>$01</tt></b>: Apfel-Position"
- "Speichernutzung im Snake-Spiel"
- "<b>E</b> oder Leertaste (<tt>$20</tt>)"
- "<b>Q</b> oder Eingabe/Return-Taste (<tt>$0D</tt>)"
- "<b>Aktionstasten</b>:"
- "<b>D</b> oder Pfeil nach rechts (<tt>$64</tt>)"
- "<b>S</b> oder Pfeil nach unten (<tt>$73</tt>)"
- "<b>A</b> oder Pfeil nach links (<tt>$61</tt>)"
+ "Akkumulator: Hauptregister für Berechnungen"
+ "Akzent: Gelb"
+ "Akzent: Türkis"
+ "Akzent: Schiefer"
+ "Akzent: Rot"
+ "Akzent: Lila"
+ "Akzent: Pink"
+ "Akzent: Orange"
+ "Akzent: Grün"
+ "Akzent: Blau"
+ "Akzentfarbe"
+ "Absolut: <tt>$c000</tt>"
+ "Absolut,X und absolut,Y: <tt>$c000,X</tt> und <tt>$c000,Y</tt>"
+ "Über Lerne 6502 Assembler"
+ "Eine vollständige Liste des 6502-Befehlssatzes ist <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">hier</a> und <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">hier</a> verfügbar (ich verweise normalerweise auf beide Seiten, da sie ihre Stärken und Schwächen haben). Diese Seiten beschreiben die Argumente für jede Anweisung, welche Register sie verwenden und welche Flags sie setzen. Sie sind deine Bibel."
+ "Ein GitHub-Issue wurde in deinem Browser geöffnet. Bitte überprüfe und reiche es dort ein, um deinen Beitrag abzuschließen. Sobald es genehmigt wurde, wird dein Beispiel in der nächsten Version enthalten sein.\n\nFalls dein Beispiel zu groß ist, wird der vollständige Inhalt in deine Zwischenablage kopiert, um ihn manuell in das GitHub-Issue einzufügen."
+ "<tt>init</tt> und <tt>loop</tt> sind beide Unterprogramme. <tt>init</tt> initialisiert den Spielzustand, und <tt>loop</tt> ist die Hauptspielschleife."
+ "<tt>checkSnakeCollision</tt> durchläuft die Körpersegmente der Schlange und vergleicht jedes Bytepaar mit dem Kopfpaar. Wenn es eine Übereinstimmung gibt, dann ist das Spiel vorbei."
+ "<tt>a9</tt> und <tt>c9</tt> sind die Prozessor-Opcodes für unmittelbar adressierte <tt>LDA</tt> und <tt>CMP</tt>. <tt>01</tt> und <tt>02</tt> sind die Argumente für diese Anweisungen. <tt>d0</tt> ist der Opcode für <tt>BNE</tt>, und sein Argument ist <tt>02</tt>. Dies bedeutet \"überspringe die nächsten zwei Bytes\" (<tt>85 22</tt>, die assemblierte Version von <tt>STA $22</tt>). Versuche den Code so zu ändern, dass <tt>STA</tt> eine zweibyte absolute Adresse anstelle einer einbyte Nullseiten-Adresse verwendet (z.B. ändere <tt>STA $22</tt> zu <tt>STA $2222</tt>). Assembliere den Code neu und schaue dir den Hexdump erneut an - das Argument für <tt>BNE</tt> sollte jetzt <tt>03</tt> sein, weil die Anweisung, die der Prozessor überspringt, jetzt drei Bytes lang ist."
+ "<tt>X</tt> enthält die Pixelfarbe und <tt>Y</tt> enthält die Position des aktuellen Pixels. Die erste Schleife zeichnet die aktuelle Farbe als Pixel (über das <tt>A</tt>-Register), schiebt die Farbe auf den Stack und erhöht dann die Farbe und Position. Die zweite Schleife nimmt die Farbe vom Stack, zeichnet die genommene Farbe als Pixel und erhöht dann die Position. Wie zu erwarten, erzeugt dies ein gespiegeltes Muster."
+ "<tt>SP</tt> ist der Stack-Pointer. Ich werde jetzt noch nicht auf den Stack eingehen, aber im Grunde wird dieses Register jedes Mal dekrementiert, wenn ein Byte auf den Stack geschoben wird, und inkrementiert, wenn ein Byte vom Stack genommen wird."
+ "<tt>PC</tt> ist der Programmzähler (program counter) - damit weiß der Prozessor, an welcher Stelle im Programm er sich gerade befindet. Es ist wie die aktuelle Zeilennummer eines ausgeführten Skripts. Im Simulator wird der Code ab der Speicheradresse <tt>$0600</tt> assembliert, daher beginnt <tt>PC</tt> immer dort."
+ "<tt>JSR</tt> und <tt>RTS</tt> (\"jump to subroutine\" und \"return from subroutine\") sind ein dynamisches Duo, das du normalerweise zusammen verwendet siehst. <tt>JSR</tt> wird verwendet, um von der aktuellen Position zu einem anderen Teil des Codes zu springen. <tt>RTS</tt> kehrt zur vorherigen Position zurück. Dies ist im Grunde wie ein Funktionsaufruf und die Rückkehr daraus."
+ "<tt>JMP</tt> ist ein unbedingter Sprung. Hier ist ein sehr einfaches Beispiel, um es in Aktion zu zeigen:"
+ "<tt>BCC</tt> und <tt>BCS</tt> (\"branch on carry clear\" und \"branch on carry set\") werden verwendet, um abhängig vom Carry-Flag zu verzweigen. Schreibe ein Programm, das eine dieser beiden Anweisungen verwendet."
+ "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (erste 256 Bytes, schnellerer Zugriff)"
+ "<b>Nullseite</b> (<tt>$c0</tt>): Greift auf Speicheradressen <tt>$00</tt>-<tt>$FF</tt> zu"
+ "<b>Nullseite,X/Y</b> (<tt>$c0,X</tt>): Addiert X/Y-Register zur Nullseitenadresse"
+ "<b>Z</b> (Zero/Null): Gesetzt, wenn Ergebnis null ist"
+ "<b>X, Y</b>: Indexregister für Adressierung und Zählung"
"<b>W</b> oder Pfeil nach oben (<tt>$77</tt>)"
- "<b>Richtungssteuerung</b>:"
- "<b><tt>$FF</tt></b>: Zuletzt gedrückte Taste (ASCII-Code)"
- "<b><tt>$FE</tt></b>: Zufallszahlengenerator (liefert einen Zufallswert 0-255)"
- "Spezielle Speicheradressen (im Simulator)"
- "<b>PHA/PLA</b>: Akkumulator auf Stack legen/vom Stack holen"
- "<b>BEQ/BNE/BCC/BCS</b>: Verzweige wenn gleich/ungleich/Übertrag gelöscht/Übertrag gesetzt"
- "<b>JSR/RTS</b>: Sprung zu Unterprogramm / Rückkehr aus Unterprogramm"
- "<b>JMP</b>: Unbedingter Sprung"
- "<b>ADC/SBC</b>: Addieren/Subtrahieren mit Übertrag"
- "<b>INX/INY/DEX/DEY</b>: Register erhöhen/verringern"
+ "<b>V</b> (Überlauf): Gesetzt, wenn arithmetische Operation einen Vorzeichenüberlauf verursacht"
+ "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
"<b>STA/STX/STY</b>: Register im Speicher ablegen"
+ "<b>SP</b> (Stack Pointer): Zeigt auf aktuelle Stack-Position (beginnt bei <tt>$FF</tt>)"
+ "<b>SBC benötigt gesetztes Carry</b>: Vor dem Subtrahieren <tt>C</tt> setzen (wirkt als inverse Borrow). <tt>C</tt>=0 nach SBC bedeutet, dass ein Borrow auftrat."
+ "<b>S</b> oder Pfeil nach unten (<tt>$73</tt>)"
+ "<b>Relativ</b> (<tt>label</tt>): Verzweigung nutzt signierten 8‑Bit‑Offset von der nächsten Anweisung (−128…+127)."
+ "<b>Q</b> oder Eingabe/Return-Taste (<tt>$0D</tt>)"
+ "<b>Programmspeicher</b>: Beginnt bei <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Akkumulator auf den Stack legen/vom Stack holen"
+ "<b>PC</b> (Program Counter): Zeigt auf die nächste auszuführende Anweisung"
+ "<b>N</b> (Negativ): Gesetzt, wenn Bit 7 des Ergebnisses gesetzt ist"
"<b>LDA/LDX/LDY</b>: Register laden"
- "Häufige Anweisungen"
- "<b>Indirekt Indiziert</b> (<tt>($c0),Y</tt>): Dereferenziert Nullseitenadresse, dann Y addieren"
- "<b>Indiziert Indirekt</b> (<tt>($c0,X)</tt>): Addiert X zur Nullseitenadresse, dann dereferenzieren"
+ "<b>JSR/RTS</b>: Sprung zu Unterprogramm / Rückkehr aus Unterprogramm"
+ "<b>JMP</b>: Unbedingter Sprung"
"<b>Indirekt</b> (<tt>($c000)</tt>): Liest die an der angegebenen Adresse gespeicherte Adresse"
- "<b>Absolut,X/Y</b> (<tt>$c000,X</tt>): Addiert X/Y-Register zur absoluten Adresse"
- "<b>Nullseite,X/Y</b> (<tt>$c0,X</tt>): Addiert X/Y-Register zur Nullseitenadresse"
- "<b>Absolut</b> (<tt>$c000</tt>): Greift auf beliebige Speicheradressen zu"
- "<b>Nullseite</b> (<tt>$c0</tt>): Greift auf Speicheradressen <tt>$00</tt>-<tt>$FF</tt> zu"
+ "<b>Indirekt Indiziert</b> (<tt>($c0),Y</tt>): Verwendet Nullseitenadresse als Zeiger zur Basisadresse, dann addiert Y zu dieser Basis"
+ "<b>Indiziert Indirekt</b> (<tt>($c0,X)</tt>): Addiert X zur Nullseitenadresse, dann verwendet das Ergebnis als Zeiger zur tatsächlichen Zieladresse"
"<b>Unmittelbar</b> (<tt>#$c0</tt>): Verwendet den tatsächlichen Wert"
- "Adressierungsmodi"
- "Wird für bedingte Verzweigungen verwendet"
- "<b>C</b> (Übertrag): Gesetzt, wenn arithmetische Operationen ein Byte überlaufen"
- "<b>Z</b> (Null): Gesetzt, wenn Ergebnis null ist"
+ "<b>INX/INY/DEX/DEY</b>: Register erhöhen/verringern"
"<b>I</b> (Interrupt): Gesetzt, wenn Interrupts deaktiviert sind"
- "<b>D</b> (Dezimal): Gesetzt, wenn Prozessor im BCD-Modus (Binary Coded Decimal) ist"
+ "<b>E</b> oder Leertaste (<tt>$20</tt>)"
+ "<b>Anzeigespeicher</b>: <tt>$0200</tt>-<tt>$05FF</tt> (für Bildschirmausgabe)"
+ "<b>Richtungssteuerung</b>:"
+ "<b>D</b> oder Pfeil nach rechts (<tt>$64</tt>)"
+ "<b>D</b> (Dezimal): Gesetzt, wenn der Prozessor im BCD‑Modus (Binary Coded Decimal) ist"
+ "<b>Vergleichsoperationen</b>: <tt>CMP/CPX/CPY</tt> setzen <tt>N/Z/C</tt> wie eine Subtraktion (Register − Speicher), ohne ein Ergebnis zu speichern."
+ "<b>C</b> (Übertrag): Gesetzt, wenn arithmetische Operationen ein Byte überlaufen"
+ "<b>BEQ/BNE/BCC/BCS</b>: Verzweige wenn gleich/ungleich/Carry gelöscht/Carry gesetzt"
"<b>B</b> (Break): Gesetzt, wenn BRK-Anweisung ausgeführt wird"
- "<b>V</b> (Überlauf): Gesetzt, wenn arithmetische Operation einen Vorzeichenüberlauf verursacht"
- "<b>N</b> (Negativ): Gesetzt, wenn Bit 7 des Ergebnisses gesetzt ist"
- "Prozessor-Flags"
- "<b>PC</b> (Program Counter): Zeigt auf die nächste auszuführende Anweisung"
- "<b>SP</b> (Stack Pointer): Zeigt auf aktuelle Stack-Position (beginnt bei <tt>$FF</tt>)"
- "<b>X, Y</b>: Indexregister für Adressierung und Zählung"
+ "<b>Aktionstasten</b>:"
+ "<b>Absolut</b> (<tt>$c000</tt>): Greift auf beliebige Speicheradressen zu"
+ "<b>Absolut,X/Y</b> (<tt>$c000,X</tt>): Addiert X/Y-Register zur absoluten Adresse"
+ "<b>ADC/SBC</b>: Addieren/Subtrahieren mit Übertrag"
+ "<b>A</b> oder Pfeil nach links (<tt>$61</tt>)"
"<b>A</b> (Akkumulator): Hauptregister für Berechnungen und Datenmanipulation"
- "Register"
"<b><tt>$f</tt></b>: Hellgrau (<tt>#bbbbbb</tt>)"
"<b><tt>$e</tt></b>: Hellblau (<tt>#0088ff</tt>)"
"<b><tt>$d</tt></b>: Hellgrün (<tt>#aaff66</tt>)"
"<b><tt>$c</tt></b>: Grau (<tt>#777777</tt>)"
"<b><tt>$b</tt></b>: Dunkelgrau (<tt>#333333</tt>)"
"<b><tt>$a</tt></b>: Hellrot (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Zuletzt gedrückte Taste (ASCII-Code)"
+ "<b><tt>$FE</tt></b>: Zufallszahlengenerator (liefert einen Zufallswert 0-255)"
"<b><tt>$9</tt></b>: Braun (<tt>#664400</tt>)"
"<b><tt>$8</tt></b>: Orange (<tt>#dd8855</tt>)"
"<b><tt>$7</tt></b>: Gelb (<tt>#eeee77</tt>)"
@@ -212,135 +471,15 @@
"<b><tt>$3</tt></b>: Cyan (<tt>#aaffee</tt>)"
"<b><tt>$2</tt></b>: Rot (<tt>#880000</tt>)"
"<b><tt>$1</tt></b>: Weiß (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Schlangen-Positionsdaten (Kopf, Körpersegmente, Schwanz)"
"<b><tt>$0</tt></b>: Schwarz (<tt>#000000</tt>)"
- "Farbpalette"
- "Erste Zeile: <tt>$0200</tt>-<tt>$021F</tt>, zweite Zeile: <tt>$0220</tt>-<tt>$023F</tt>, usw."
- "Organisiert als vier horizontale Streifen von 32×8 Pixeln"
- "Werte <tt>$00</tt>-<tt>$0F</tt> stellen 16 verschiedene Farben dar (<tt>$00</tt>=schwarz, <tt>$01</tt>=weiß)"
- "Bildschirm wird auf Speicherbereich <tt>$0200</tt>-<tt>$05FF</tt> abgebildet"
- "Bildschirmorganisation"
- "<b>Programmspeicher</b>: Beginnt bei <tt>$0600</tt>"
- "<b>Anzeigespeicher</b>: <tt>$0200</tt>-<tt>$05FF</tt> (für Bildschirmausgabe)"
- "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
- "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (erste 256 Bytes, schnellerer Zugriff)"
- "Speicherbelegung"
- "Emulator"
- "Lernen"
- "Programmierung"
- "Assembler"
- "Erste Veröffentlichung von Lerne 6502 Assembler für GNOME"
- "Build-Fehler unter PostmarketOS behoben, verbessert Kompatibilität mit Mobilgeräten"
- "Debugger wird nur noch aktualisiert, wenn er sichtbar ist, reduziert unnötige Verarbeitung"
- "Reduzierter Standard-Adressbereich des Hex-Monitors für bessere Effizienz"
- "Verbesserte Eingabe des Adressbereichs im Hex-Monitor"
- "Verbesserte Leistung der Spielekonsole für flüssigeres Gameplay"
- "Optimierte Flatpak-Konfiguration durch Entfernen unnötiger Berechtigungen"
- "Verbesserte Beschreibungen für nicht-technische Benutzer"
- "Verbesserte App-Darstellung und Zugänglichkeit"
- "Dateiverwaltung zum Speichern und Laden von Programmen hinzugefügt"
- "Spiele werden jetzt automatisch pausiert, wenn zwischen Bildschirmen gewechselt wird"
- "Zahlreiche kleine Fehler wurden behoben, um die allgemeine Benutzerfreundlichkeit zu verbessern"
- "Neue Werkzeuge zur Code-Analyse, einschließlich Disassembler und schnell umschaltbarer Speicheransicht"
- "Verbesserte Spieloberfläche und Steuerung für mobile Geräte"
- "Hilfefunktion hinzugefügt, um die Codebearbeitung für Anfänger zu erleichtern"
- "Umfangreiches Update mit Fokus auf verbessertes Lernerlebnis und Benutzerfreundlichkeit"
- "Virtuelle Spielkonsole mit drei farbigen Pixeln"
- "Integrierter Debugger mit Echtzeit-Anzeige von Registern, Flags und Speicher"
- "Code-Editor mit Syntaxhervorhebung für 6502-Assembler und sichtbarer Hilfe"
- "Interaktive Tutorial-Oberfläche im dunklen Design"
- "Interaktive Tutorial-Oberfläche im hellen Design"
- "Führe deinen Code auf einer virtuellen Spielkonsole aus"
- "Debugge deine Programme mit Echtzeit-Tools"
- "Schreibe Code mit einem integrierten Editor"
- "Lerne Schritt für Schritt mit einem interaktiven Tutorial"
- "Funktionen:"
- "Eine umfassende Lernumgebung für die Programmierung von Retro-Computern und Spielkonsolen mit 6502-Assembler."
- "Lernumgebung für 6502-Assembler"
- "In die Zwischenablage kopieren"
- "Gesamter Speicher ($0000-$FFFF)"
- "Zufalls-/Eingabedaten ($FE-$FF)"
- "Snake-Spieldaten ($00-$15)"
- "Programmspeicher ($0600-$FFFF)"
- "Anzeigespeicher ($0200-$05FF)"
- "Stack ($0100-$01FF)"
- "Nullseite ($0000-$00FF)"
- "Derzeit gibt es keine Einstellungen."
- "Haupteinstellungen"
- "Erscheinungsbild"
- "Einstellungen"
- "Lerne, wie man den 6502-Mikroprozessor programmiert."
- "Disassemblierter Code"
- "Hexdump"
- "Hex-Monitor"
- "Meldungen"
- "Information"
- "Debugge deinen 6502-Assemblercode, gehe dein Programm schrittweise durch und betrachte Speicher und Register. Kompiliere und starte dein Programm, um zu beginnen."
- "Verwerfen"
- "Abbrechen"
- "Deine Datei enthält ungespeicherte Änderungen. Die Änderungen gehen verloren, wenn du sie nicht speicherst."
- "Änderungen speichern?"
- "Fortfahren"
- "Beenden"
- "Über Lerne 6502 Assembler"
- "Hilfe"
- "Speichern unter..."
- "Speichern"
- "Öffnen..."
- "Spielkonsole"
- "Debugger"
- "Editor"
- "Lernen"
- "Menü"
- "Lerne 6502 Assembler"
- "In Editor kopieren"
- "Alle Dateien"
- "Assembler-Dateien"
- "Datei erfolgreich gespeichert"
- "Fehler beim Speichern der Datei"
- "Assembler Datei speichern"
- "unbenannt"
- "Fehler beim Öffnen der Datei"
- "Datei erfolgreich geladen"
- "Datei konnte nicht geladen werden"
- "Assembler-Datei öffnen"
- "Gamepad-Taste gedrückt:"
- "Label-Fehler"
- "Simulator-Fehler"
- "Disassemblierung:"
- "Hexdump:"
- "Assemblierung fehlgeschlagen"
- "Erfolgreich assembliert"
- "Programm automatisch pausiert"
- "Konnte nicht in die Zwischenablage kopiert werden"
- "In die Zwischenablage kopiert"
- "Code in Editor kopiert"
- "Schritt"
- "Zurücksetzen"
- "Fortsetzen"
- "Pause"
- "Ausführen"
- "Assemblieren"
- "Datei \"%1$s\" enthält ungespeicherte Änderungen"
- "Uneingespeicherte Änderungen"
- "Programm beendet bei PC=$%1$s"
- "6502 Stack leer! Unterlauf..."
+ "<b><tt>$03</tt></b>: Schlangen-Länge"
+ "<b><tt>$02</tt></b>: Schlangen-Richtung (1=oben, 2=rechts, 4=unten, 8=links)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Apfel-Position"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> hat einen <a href=\"https://gist.github.com/wkjagt/9043907\">vollständig kommentierten Gist dieses Quellcodes</a> erstellt, folge diesem für weitere Details."
+ "Die 6502-Assemblersprache hat eine Reihe von Verzweigungsanweisungen, die alle basierend darauf verzweigen, ob bestimmte Flags gesetzt sind oder nicht. In diesem Beispiel schauen wir uns <tt>BNE</tt> an: \"Branch on not equal\" (Verzweige bei Ungleichheit)."
"6502 Stack voll! Überlauf..."
- "Adresse %1$s - unbekannter Opcode"
- "WDM-Ausgabe"
- "Angehalten"
- "Die angegebene Adresse/Label konnte nicht gefunden oder verarbeitet werden"
- "Keine Adresse oder Label angegeben"
- "Label {label} wird bereits als Symbol verwendet; bitte eines davon umbenennen"
- "Label wurde bereits in Zeile %1$d definiert: %2$s"
- "Labels werden indiziert..."
- "%1$d Label gefunden."
- "%1$d Labels gefunden."
- "Vorverarbeitung läuft..."
- "Code erfolgreich assembliert, %1$d Bytes."
- "Sprungbefehl außerhalb des gültigen Bereichs in Zeile %1$d (Sprünge sind auf -128 bis +127 begrenzt): %2$s"
- "Syntaxfehler in Zeile %1$d: %2$s"
- "Kein Code zum Ausführen vorhanden."
- "Code wird assembliert..."
- "Code kann nicht außerhalb des 64k Speicherbereichs verschoben werden"
+ "6502 Stack leer! Unterlauf..."
+ "(Tatsächlich wurde mir zuverlässig mitgeteilt, dass 6502-Prozessoren immer noch von <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> hergestellt und <a href=\"https://www.mouser.co.uk/c/?q=65C02\">an Bastler verkauft</a> werden, also ist 6502 offensichtlich <i>keine</i> tote Sprache! Wer hätte das gedacht?)"
"6502"
diff --git a/packages/app-android/data/Android/src/main/res/values-es/strings.xml b/packages/app-android/data/Android/src/main/res/values-es/strings.xml
new file mode 100644
index 00000000..17dbcbd0
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-es/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Aprende 6502 Assembly"
+ "Aprende 6502 Assembly"
+ "Aprende 6502 Assembly"
+ "வணக்கம்! Nos alegra dar la bienvenida a la traducción al tamil, aportada por தமிழ்நேரம். நன்றி!"
+ "lo que representa las direcciones de memoria indirectas <tt>$0411</tt>, <tt>$0410</tt> y <tt>$040f</tt> (tres píxeles en el centro de la pantalla). Insisto en este punto porque es importante entender bien cómo funciona el direccionamiento indirecto."
+ "wdm-output"
+ "programación"
+ "aprendizaje"
+ "por %1$s"
+ "_Preferencias"
+ "Página cero: <tt>$c0</tt>"
+ "Página cero,Y: <tt>$c0,Y</tt>"
+ "Página cero,X: <tt>$c0,X</tt>"
+ "Uso de página cero"
+ "Página cero ($0000-$00FF)"
+ "Indicador cero: Se establece cuando el resultado de una operación es cero. Es esencial para ramificaciones condicionales: la mayoría de saltos condicionales (BEQ, BNE) consultan este indicador para decidir el flujo según si un valor es cero."
+ "Tu archivo tiene cambios sin guardar. Se perderán si no los guardas."
+ "Ya has visto <tt>TAX</tt>. Probablemente puedas adivinar qué hacen <tt>TAY</tt>, <tt>TXA</tt> y <tt>TYA</tt>, pero escribe algo de código para comprobar tus suposiciones."
+ "Has apoyado este proyecto de código abierto al comprar la aplicación. ¡Gracias!"
+ "Puedes pensar en la pantalla como cuatro franjas horizontales de 32 × 8 píxeles. Estas franjas se mapean a <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> y <tt>$0500-$05ff</tt>. Las primeras filas de píxeles son <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
+ "Amarillo"
+ "Escribe y edita código con un editor integrado"
+ "Con todos estos ejemplos puede serte útil usar el <b>Monitor Hex</b> en la vista <b>Depurar</b> para observar cómo cambia la memoria. Elige una región de memoria de la lista para ver esa sección, por ejemplo, <b>Memoria de pantalla ($0200–$05FF)</b> para ver los píxeles de la pantalla, o <b>Página cero ($0000–$00FF)</b> para inspeccionar los primeros 256 bytes."
+ "Con direccionamiento absoluto, se usa la dirección de memoria completa como argumento de la instrucción. Por ejemplo:"
+ "Bienvenida la traducción al vietnamita, totalmente contribuida por Loc Huynh (hthienloc)."
+ "Bienvenida la traducción al polaco, inicialmente contribuida por Micro Wave. Dziękujemy!"
+ "Ya hemos visto un poco la sección de estado del procesador (la parte con <tt>A</tt>, <tt>PC</tt>, etc.), pero ¿qué significa todo?"
+ "Hemos añadido una nueva sección de Ejemplos en la pestaña Aprender donde puedes explorar y ejecutar programas 6502 completamente comentados directamente en la aplicación. ¡Comienza con nuestro ejemplo del juego Snake y observa cómo cobran vida los píxeles!"
+ "Los valores <tt>$00</tt>-<tt>$0F</tt> representan 16 colores distintos (<tt>$00</tt>=negro, <tt>$01</tt>=blanco)"
+ "Usar color primario personalizado"
+ "Usar color de acento personalizado"
+ "Actualizando el estado del juego"
+ "Cambios sin guardar"
+ "A diferencia de página cero,Y, absoluto,Y no puede usarse con <tt>STX</tt> pero sí con <tt>LDA</tt> y <tt>STA</tt>."
+ "Bajo el capó: actualización a TypeScript 6, Vite 8 y otras actualizaciones de dependencias para mejorar el rendimiento y la estabilidad."
+ "No es posible reubicar código fuera de 64k de memoria"
+ "No se puede encontrar/analizar la dirección/etiqueta dada"
+ "Dos instrucciones de pila son <tt>PHA</tt> y <tt>PLA</tt>, \"push accumulator\" y \"pull accumulator\". Abajo hay un ejemplo de ambas en acción."
+ "Dos nuevos programas de ejemplo, y los dos llegan de la comunidad: Dino Run, de Jacob, y Line Buster 6502, de edit12. Son los primeros ejemplos enviados con el botón de compartir, y nos gustaría recibir más."
+ "Tutorial <sub>por <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, con licencia CC BY 4.0</sub>"
+ "Tutorial"
+ "Intenta escribir fragmentos de código que usen cada uno de los modos de direccionamiento del 6502. Recuerda que puedes usar el <b>Monitor Hex</b> en la vista <b>Depurar</b> para observar una sección de memoria."
+ "Prueba programas de ejemplo para el microprocesador 6502."
+ "Prueba programas de ejemplo"
+ "Prueba a cambiar el color de los tres píxeles."
+ "Alternar barra lateral"
+ "Para probar si la dirección es <tt>1</tt>, <tt>2</tt>, <tt>4</tt> u <tt>8</tt>, el código desplaza a la derecha continuamente hasta que se active el acarreo. Un <tt>LSR</tt> significa \"arriba\", dos significa \"derecha\", y así sucesivamente."
+ "Título"
+ "Esta versión trae un tema vibrante inspirado en dispositivos portátiles con colores personalizables. Hemos introducido diseños adaptativos para tabletas y escritorio que mantienen todo a la vista, perfectos para esas sesiones de programación maratónicas al aprender a desarrollar juegos retro en ensamblador. Muchas gracias a nuestro nuevo colaborador @mmartinortiz por las excelentes ideas de diseño de escritorio. También hay algunas mejoras técnicas geniales, como el rigor de TypeScript, esquemas de estilo GtkSourceView personalizados y controles de depuración mejorados para un desarrollo más fluido."
+ "Esta es un poco rara. Es como una mezcla entre página cero, X e indirecto. Básicamente, tomas la dirección de página cero, le sumas el valor del registro <tt>X</tt> y usas eso para buscar una dirección de dos bytes. Por ejemplo:"
+ "Esto carga el valor <tt>$11</tt> en la dirección <tt>$10</tt>, el valor <tt>$10</tt> en <tt>$12</tt> y <tt>$0f</tt> en <tt>$14</tt>. Luego carga el valor <tt>$04</tt> en <tt>$11</tt>, <tt>$13</tt> y <tt>$15</tt>. Esto deja la memoria así:"
+ "Aquí es donde la direccionamiento se vuelve interesante. En este modo se da una dirección de página cero y luego se suma el valor del registro <tt>X</tt>. Aquí tienes un ejemplo:"
+ "Esto es equivalente a página cero,X, pero solo puede usarse con <tt>LDX</tt> y <tt>STX</tt>."
+ "Estas son las versiones de direccionamiento absoluto de página cero,X y página cero,Y. Por ejemplo:"
+ "También hay una razón práctica: el desarrollo de juegos retro. La escena homebrew está muy viva: aún se <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">publican juegos para NES</a> (algunos incluso en cartucho físico) y para muchos otros sistemas clásicos; la NES es solo un ejemplo. Incluso si tu objetivo es algo como la SNES, empezar con 6502 compensa: la CPU de SNES (65C816) es retrocompatible con 6502, así que los fundamentos que aprendas aquí —registros, modos de direccionamiento y el set de instrucciones— se trasladan tal cual."
+ "¿Entonces por qué 6502? ¿Por qué no un ensamblador <i>útil</i>, como <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Bueno, no creo que aprender x86 sea útil. Tampoco creo que vayas a <i>escribir</i> ensamblador en tu trabajo diario: para algunas personas es un ejercicio académico, algo para ampliar la mente. 6502 se escribió en otra época, cuando la mayoría de desarrolladores programaban directamente en ensamblador, no en lenguajes de alto nivel. Por eso fue diseñado para humanos. Lenguajes de ensamblador modernos están pensados para compiladores, dejémoselo a ellos. Además, 6502 es <i>divertido</i>. Nadie llamó a x86 <i>divertido</i>."
+ "La página cero de la memoria se usa para almacenar varias variables del estado del juego, como se indica en el bloque de comentarios al principio. Todo en <tt>$00</tt>, <tt>$01</tt> y a partir de <tt>$10</tt> hacia arriba son pares de bytes que representan una dirección de dos bytes que se consultará usando direccionamiento indirecto. Estas direcciones estarán entre <tt>$0200</tt> y <tt>$05ff</tt>, la sección de memoria de la consola. Por ejemplo, si <tt>$00</tt> y <tt>$01</tt> contienen <tt>$01</tt> y <tt>$02</tt>, se refieren al segundo píxel de la pantalla (<tt>$0201</tt>; recuerda que en direccionamiento indirecto el byte menos significativo va primero)."
+ "La pila en un procesador 6502 es como cualquier otra: los valores se empujan (push) y se sacan (\"pull\" en la jerga 6502). La profundidad actual de la pila la mide el puntero de pila, un registro especial. La pila vive en memoria entre <tt>$0100</tt> y <tt>$01ff</tt>. El puntero de pila comienza en <tt>$ff</tt>, que apunta a <tt>$01ff</tt>. Cuando se empuja un byte, el puntero pasa a <tt>$fe</tt> (dirección <tt>$01fe</tt>), y así sucesivamente."
+ "La pila"
+ "El juego de la serpiente del tutorial"
+ "El resultado de esta subrutina es cargar un byte aleatorio en <tt>$00</tt> y un número aleatorio entre 2 y 5 en <tt>$01</tt>. Como en el direccionamiento indirecto el byte menos significativo va primero, esto se traduce en una dirección entre <tt>$0200</tt> y <tt>$05ff</tt>: exactamente el rango usado para dibujar la pantalla."
+ "El procesador sabe adónde volver porque <tt>JSR</tt> empuja al stack la dirección de la siguiente instrucción menos uno antes de saltar a la ubicación dada. <tt>RTS</tt> saca esa dirección, le suma uno y salta allí. Un ejemplo:"
+ "El problema es que <tt>$184</tt> es demasiado grande para caber en un solo byte (el máximo es <tt>$FF</tt>), y los registros solo pueden contener un byte. Pero no pasa nada; el procesador no es tonto. Si miraste con atención, habrás notado que el indicador de acarreo quedó en <tt>1</tt> tras esta operación. Así es como lo sabes."
+ "La instrucción opuesta a <tt>BNE</tt> es <tt>BEQ</tt>. Intenta escribir un programa que use <tt>BEQ</tt>."
+ "La instrucción opuesta a <tt>ADC</tt> es <tt>SBC</tt> (resta con acarreo). Escribe un programa que use esta instrucción."
+ "El juego de correr sin conexión del navegador, en ensamblador 6502"
+ "La siguiente subrutina, <tt>generateApplePosition</tt>, fija la posición de la manzana en un lugar aleatorio de la pantalla. Primero, carga un byte aleatorio en el acumulador (<tt>$fe</tt> es un generador de números aleatorios en este simulador) y lo guarda en <tt>$00</tt>. Después, carga otro byte aleatorio y hace <tt>AND</tt> con el valor <tt>$03</tt>. Esta parte requiere un pequeño desvío."
+ "La siguiente subrutina, <tt>checkCollision</tt>, delega en <tt>checkAppleCollision</tt> y <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> solo comprueba si los dos bytes con la ubicación de la manzana coinciden con los dos bytes con la ubicación de la cabeza. Si coinciden, se incrementa la longitud y se genera una nueva posición para la manzana."
+ "La siguiente línea, <tt>BNE decrement</tt>, hará que la ejecución salte a la etiqueta decrement si el indicador <tt>Z</tt> está en <tt>0</tt> (lo que significa que los dos valores en la comparación <tt>CPX</tt> no eran iguales); si no, no hace nada y almacenamos <tt>X</tt> en <tt>$0201</tt>, y terminamos el programa."
+ "La siguiente parte actualiza la cabeza de la serpiente según la dirección. Probablemente sea la parte más compleja del código y depende de cómo se mapean las direcciones de memoria a la pantalla; veámoslo con más detalle."
+ "La longitud se inicializa en <tt>4</tt>, así que <tt>X</tt> empieza en <tt>3</tt>. <tt>LDA $10,x</tt> carga el valor de <tt>$13</tt> en <tt>A</tt>, luego <tt>STA $12,x</tt> almacena ese valor en <tt>$15</tt>. <tt>X</tt> se decrementa y repetimos. Ahora <tt>X</tt> es <tt>2</tt>, así que cargamos <tt>$12</tt> y lo almacenamos en <tt>$14</tt>. Esto se repite mientras <tt>X</tt> sea positivo (<tt>BPL</tt> significa «saltar si es positivo»)."
+ "La última subrutina, <tt>spinWheels</tt>, está ahí porque si no el juego iría demasiado rápido. Todo lo que hace <tt>spinWheels</tt> es decrementar <tt>X</tt> desde cero hasta volver a cero. El primer <tt>dex</tt> desborda, dejando <tt>X</tt> en <tt>#$ff</tt>."
+ "La última sección muestra los indicadores del procesador. Cada indicador es un bit, así que los siete viven en un solo byte. El procesador los establece para dar información sobre la instrucción previa. Más sobre esto después. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lee más sobre registros e indicadores aquí</a>."
+ "El valor hexadecimal <tt>$03</tt> se representa en binario como <tt>00000011</tt>. La operación <tt>AND</tt> realiza un AND bit a bit entre el argumento y el acumulador. Por ejemplo, si el acumulador contiene <tt>10101010</tt>, el resultado de <tt>AND</tt> con <tt>00000011</tt> será <tt>00000010</tt>."
+ "El hex debería verse más o menos así:"
+ "El bucle del juego"
+ "Los dos primeros bytes contienen la ubicación de la manzana. Se actualiza cada vez que la serpiente come la manzana. El byte <tt>$02</tt> contiene la dirección actual. <tt>1</tt> es arriba, <tt>2</tt> derecha, <tt>4</tt> abajo y <tt>8</tt> izquierda. La lógica detrás de estos números se aclarará más adelante."
+ "La primera subrutina, <tt>readKeys</tt>, acepta la entrada del usuario. La dirección de memoria <tt>$ff</tt> contiene el código ASCII de la tecla más reciente en este simulador. El valor se carga en el acumulador y luego se compara con <tt>$77</tt> (el código hex para W), <tt>$64</tt> (D), <tt>$73</tt> (S) y <tt>$61</tt> (A). Si alguna comparación es exitosa, el programa salta a la sección correspondiente."
+ "La primera línea muestra los registros <tt>A</tt>, <tt>X</tt> y <tt>Y</tt> (<tt>A</tt> suele llamarse \"acumulador\"). Cada registro contiene un solo byte. La mayoría de operaciones trabajan con el contenido de estos registros."
+ "La primera instrucción hace que la ejecución salte a la etiqueta <tt>init</tt>. Esto ajusta <tt>X</tt> y luego retorna a la siguiente instrucción, <tt>JSR loop</tt>. Esto salta a la etiqueta <tt>loop</tt>, que incrementa <tt>X</tt> hasta que sea igual a <tt>$05</tt>. Después volvemos a la siguiente instrucción, <tt>JSR end</tt>, que salta al final del archivo. Esto ilustra cómo <tt>JSR</tt> y <tt>RTS</tt> pueden usarse juntos para crear código modular."
+ "El efecto de esto es enmascarar los dos bits menos significativos del acumulador, poniendo los demás a cero. Esto convierte un número en el rango 0–255 a un número en el rango 0–3."
+ "El bloque de código siguiente contiene todo el código fuente del juego. Explicaré cómo funciona en las siguientes secciones."
+ "La pantalla negra de la consola de juegos ahora debería mostrar tres \"píxeles\" de colores en la esquina superior izquierda."
+ "La aplicación está diseñada para la fuente de interfaz de GNOME. En otros sistemas se dibuja con la fuente de ese sistema, que suele ser más pequeña."
+ "El registro índice Y es similar a X y no tiene funciones especiales. Se usa comúnmente para direccionamiento indexado y movimiento de datos."
+ "El registro índice X se usa para modos de direccionamiento indexado y operaciones de conteo. Puede almacenar contadores de bucle e índices de arrays, y es esencial para acceder a ubicaciones de memoria relativas a una dirección base usando X como desplazamiento. Especial: TSX/TXS transfiere X hacia/desde el puntero de pila."
+ "El puntero de pila gestiona la pila de llamadas para subrutinas e interrupciones. Empieza en $FF (parte superior de la pila) y crece hacia abajo. Se usa para operaciones PUSH/PULL, llamadas JSR/RTS y gestión de interrupciones. Crítico para llamadas de funciones anidadas."
+ "El contador de programa contiene la dirección de memoria de la siguiente instrucción a ejecutar. Se incrementa automáticamente tras cada instrucción y puede modificarse por saltos, ramificaciones, llamadas y retornos. Esencial para el control del flujo del programa y el depurado."
+ "El acumulador (A) es el registro principal para operaciones aritméticas y lógicas. Todos los cálculos básicos como ADD, SUBSTRACT, AND, OR, etc., usan este registro. Es el registro más utilizado en la programación en ensamblador 6502."
+ "La subrutina <tt>loop</tt> simplemente llama secuencialmente a varias subrutinas antes de volver a sí misma:"
+ "La subrutina <tt>init</tt> delega en dos subrutinas: <tt>initSnake</tt> y <tt>generateApplePosition</tt>. <tt>initSnake</tt> establece la dirección y la longitud de la serpiente y luego carga las ubicaciones iniciales de memoria de la cabeza y el cuerpo. El par de bytes en <tt>$10</tt> contiene la posición en pantalla de la cabeza, el par en <tt>$12</tt> la del único segmento del cuerpo y <tt>$14</tt> la de la cola (la cola es el último segmento del cuerpo y se dibuja en negro para mantener el movimiento). Esto ocurre en el siguiente código:"
+ "La operación <tt>BIT</tt> es similar a <tt>AND</tt>, pero el cálculo solo se usa para establecer el indicador cero; el resultado se descarta. El indicador cero se establece únicamente si el resultado de hacer AND entre el acumulador y el argumento es cero. Al tratar con potencias de dos, el indicador cero solo se establece si los dos números no son iguales. Por ejemplo, <tt>0001 AND 0001</tt> no es cero, pero <tt>0001 AND 0010</tt> sí lo es."
+ "El 6502 usa un bus de direcciones de 16 bits, lo que significa que el procesador tiene 65536 bytes de memoria disponibles. Recuerda que un byte se representa con dos caracteres hexadecimales, por lo que las direcciones de memoria suelen representarse como <tt>$0000 - $ffff</tt>. Hay varias formas de referirse a estas direcciones, como se detalla a continuación."
+ "Gracias por usar software de código abierto."
+ "Comprueba el bit 0 de A con LSR y BCC y deja 1 o 0 en A como resultado"
+ "Prueba tus creaciones en una consola de juegos virtual"
+ "Tervetuloa! Nos alegra dar la bienvenida a la traducción al finés, amablemente contribuida por Jiri Grönroos. Kiitos!"
+ "Verde azulado"
+ "Fuente del sistema, tamaño de GNOME"
+ "Predeterminado del sistema"
+ "Error de sintaxis en la línea %1$d: %2$s"
+ "Patrocinador"
+ "Apoyar"
+ "Enviar"
+ "Estilo"
+ "Detenido"
+ "Guía paso a paso de ensamblador 6502"
+ "Paso"
+ "Indicadores de estado"
+ "Puntero de pila: apunta a la posición de la pila"
+ "Ejemplo de Pila"
+ "Pila ($0100-$01FF)"
+ "Ubicaciones de memoria especiales (en el simulador)"
+ "URL de origen"
+ "Algunas instrucciones no operan con direcciones de memoria (p.ej., <tt>INX</tt> - incrementa el registro <tt>X</tt>). Se dice que tienen direccionamiento implícito: el argumento está implícito en la instrucción."
+ "Entonces, ¿por qué querrías aprender 6502? Es un lenguaje muerto, ¿no? Bueno, también lo es el latín. Y aún se enseña. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Entonces, ¿qué hace realmente este programa? Recorrámoslo paso a paso. Pulsa <b>Reiniciar</b> y luego usa <b>Paso</b> para ejecutar el programa instrucción por instrucción. La vista <b>Depurar</b> muestra los registros y la memoria: es una pestaña aparte en una ventana pequeña, y el panel debajo de la consola del juego en una ventana ancha. Haz clic en <b>Paso</b> una vez y verás en la vista <b>Depurar</b> que <tt>A=</tt> cambia de <tt>$00</tt> a <tt>$01</tt>, y <tt>PC=</tt> de <tt>$0600</tt> a <tt>$0602</tt>."
+ "Así que, la instrucción <tt>STA $0200</tt> almacena el valor del registro <tt>A</tt> en la dirección de memoria <tt>$0200</tt>. Haz clic en <b>Paso</b> cuatro veces más para ejecutar el resto de instrucciones, observando cómo cambia el registro <tt>A</tt>."
+ "Así que, mirando <tt>upKey</tt>, si la dirección actual es hacia abajo (4), la prueba de bits será cero. <tt>BNE</tt> significa \"salta si el indicador cero está limpio\", por lo que en este caso saltaremos a <tt>illegalMove</tt>, que simplemente retorna de la subrutina. En caso contrario, se almacena la nueva dirección (1 en este caso) en la ubicación de memoria correspondiente."
+ "¡Vamos allá! Esta aplicación contiene un <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">ensamblador y simulador 6502 en JavaScript</a> que he adaptado para este tutorial interactivo. Haz clic en el botón <b>Copiar</b> del bloque de código de abajo para copiar el ejemplo al editor. Después usa <b>Ensamblar</b> para ensamblar el código y <b>Ejecutar</b> para ejecutarlo. Encontrarás estas acciones como botones o en el menú."
+ "Hasta ahora solo podemos escribir programas básicos sin lógica de ramificación. Cambiemos eso."
+ "Uso de memoria del juego Snake"
+ "Datos del juego Snake ($00-$15)"
+ "Juego de la Serpiente"
+ "Pizarra"
+ "Fallo del simulador"
+ "Simulador"
+ "Los ejemplos de código compartidos ahora incluyen información de licencia CC-BY-4.0, aclarando cómo la comunidad puede usar y construir sobre tus contribuciones."
+ "Comparte tu ejemplo"
+ "Compartir ejemplo"
+ "Compartir"
+ "Shalom! Nos alegra dar la bienvenida a la traducción al hebreo, aportada íntegramente por Menachem (naattxx). Toda raba!"
+ "Hablando en serio, creo que es valioso comprender el lenguaje ensamblador. Es el nivel más bajo de abstracción en informática: el punto en el que el código aún es legible. El ensamblador se traduce directamente a los bytes que ejecuta el procesador de tu ordenador. Si entiendes cómo funciona, básicamente te conviertes en un <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">mago</a> de la computación."
+ "Selamat datang! También damos la bienvenida a la traducción al indonesio, amablemente aportada por Arif Budiman. Terima kasih!"
+ "La pantalla se mapea al rango de memoria <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Dale la bienvenida a muchas traducciones nuevas: Francés, Interlingua, Portugués, Portugués (Brasil), Neerlandés, Español, Ucraniano, Japonés y Chino (simplificado)"
+ "Guardado como %1$s"
+ "¿Guardar cambios?"
+ "Guardar como..."
+ "Guardar archivo de ensamblador"
+ "Guardar"
+ "Juego de la serpiente ejecutándose"
+ "Ejecutar"
+ "Reescribe el primer ejemplo de esta sección para usar el registro <tt>Y</tt> en lugar del registro <tt>X</tt>."
+ "Revisa cómo aparecerá tu ejemplo a los demás. Al hacer clic en <b>Enviar</b> se creará un issue en GitHub. Necesitarás iniciar sesión con tu cuenta de GitHub para completar el envío."
+ "Reanudar"
+ "Reiniciar"
+ "Renderizado del juego"
+ "Relativo: <tt>$c0</tt> (o etiqueta)"
+ "El direccionamiento relativo se usa para instrucciones de ramificación. Estas instrucciones toman un solo byte, que se usa como desplazamiento desde la instrucción siguiente."
+ "Registros e indicadores"
+ "Registros"
+ "Rango de direcciones predeterminado del monitor hex reducido para mejorar la eficiencia"
+ "Rojo"
+ "Leyendo la entrada"
+ "Aleatorio/Entrada ($FE-$FF)"
+ "Salir"
+ "Consejos rápidos"
+ "Púrpura"
+ "Programa consolas de videojuegos clásicas"
+ "Programa en pausa"
+ "Programa completado. Reinicia para volver a ejecutar el programa paso a paso."
+ "Programa completado en PC=$%1$s"
+ "Programa completado"
+ "Almacenamiento del programa ($0600-$FFFF)"
+ "Contador de programa: apunta a la siguiente instrucción"
+ "Registro de estado del procesador"
+ "Indicadores del procesador"
+ "Primario: Amarillo"
+ "Primario: Verde azulado"
+ "Primario: Pizarra"
+ "Primario: Rojo"
+ "Primario: Púrpura"
+ "Primario: Rosa"
+ "Primario: Naranja"
+ "Primario: Verde"
+ "Primario: Azul"
+ "Color primario"
+ "Anterior"
+ "Vista previa de tu ejemplo"
+ "Vista previa"
+ "Pulsa <b>Paso</b> de nuevo para ejecutar la segunda instrucción. El píxel superior izquierdo de la consola ahora debería ser blanco. Este simulador usa las direcciones de memoria <tt>$0200</tt> a <tt>$05ff</tt> para dibujar píxeles en su pantalla. Los valores <tt>$00</tt> a <tt>$0f</tt> representan 16 colores distintos (<tt>$00</tt> es negro y <tt>$01</tt> es blanco), así que almacenar <tt>$01</tt> en la dirección <tt>$0200</tt> dibuja un píxel blanco en la esquina superior izquierda. Es más simple que la salida de vídeo real de un ordenador, pero sirve por ahora."
+ "Preprocesando ..."
+ "Jugar"
+ "Rosa"
+ "Perfecto para aficionados, estudiantes y cualquier persona curiosa por cómo funcionan realmente los ordenadores por dentro."
+ "Pausa"
+ "Indicador de desbordamiento: Se establece cuando una operación aritmética produce un resultado que no puede representarse en el rango de 8 bits con signo (-128 a +127). Se usa para detectar errores aritméticos con signo en cálculos."
+ "Estructura general"
+ "Salto fuera de rango en la línea %1$d (los saltos están limitados a -128 a +127): %2$s"
+ "Nuestro primer programa"
+ "Organizado como cuatro franjas horizontales de 32×8 píxeles"
+ "Naranja"
+ "Configuración de Flatpak optimizada eliminando permisos innecesarios"
+ "Abierto: %1$s"
+ "Abrir..."
+ "Código abierto"
+ "Abrir archivo de ensamblador"
+ "Una vez que los valores se han desplazado por la serpiente, debemos decidir qué hacer con la cabeza. Primero se carga la dirección en <tt>A</tt>. <tt>LSR</tt> significa «desplazamiento lógico a la derecha», es decir, desplazar todos los bits una posición a la derecha. El bit menos significativo pasa al indicador de acarreo, así que si el acumulador es <tt>1</tt>, tras <tt>LSR</tt> será <tt>0</tt> y el indicador de acarreo quedará activado."
+ "Al reiniciar (simulador): <tt>P = $30</tt> (bit5 y <tt>B</tt> activados; <tt>D</tt> e <tt>I</tt> desactivados)"
+ "Aceptar"
+ "Ahora pongamos todo este conocimiento en práctica y hagamos un juego. Vamos a crear una versión muy sencilla del clásico \'Snake\'."
+ "No se necesita experiencia previa en programación. Comienza con lecciones interactivas y desarrolla tus habilidades paso a paso."
+ "No hay código para ejecutar."
+ "No se proporcionó dirección ni etiqueta"
+ "Luego viene <tt>drawSnake</tt>. Esto también es bastante simple: primero borramos la cola y luego dibujamos la cabeza. <tt>X</tt> se establece a la longitud de la serpiente para poder indexar al píxel correcto, y ponemos <tt>A</tt> a cero y escribimos usando el modo de direccionamiento indirecto indexado. Después recargamos <tt>X</tt> para indexar a la cabeza, ponemos <tt>A</tt> a uno y lo almacenamos en <tt>($10,x)</tt>. <tt>$10</tt> guarda la ubicación de dos bytes de la cabeza, así que esto dibuja un píxel blanco en la posición actual de la cabeza. Como solo se mueven la cabeza y la cola, esto es suficiente para mantener a la serpiente en movimiento."
+ "Nuevas herramientas para examinar tu código, incluyendo desensamblador y visor de memoria con cambio rápido"
+ "Indicador negativo: Se establece cuando el bit más significativo (bit 7) del resultado es 1. Se usa para comparaciones con signo e indica si un valor es negativo en representación en complemento a dos."
+ "Casi todos los juegos tienen en su núcleo un bucle de juego. Todos los bucles de juego comparten la misma forma básica: aceptar la entrada del usuario, actualizar el estado del juego y representarlo. Este no es diferente."
+ "Mensajes"
+ "Las ubicaciones de memoria <tt>$01</tt> y <tt>$02</tt> contienen los valores <tt>$05</tt> y <tt>$07</tt> respectivamente. Piensa en <tt>($00,X)</tt> como <tt>($00 + X)</tt>. En este caso <tt>X</tt> es <tt>$01</tt>, así que se simplifica a <tt>($01)</tt>. A partir de aquí procede como la direccionamiento indirecto estándar: se consultan los dos bytes en <tt>$01</tt> y <tt>$02</tt> (<tt>$05</tt> y <tt>$07</tt>) para formar la dirección <tt>$0705</tt>. Esta es la dirección en la que se almacenó el registro <tt>Y</tt> en la instrucción anterior, por lo que el registro <tt>A</tt> obtiene el mismo valor que <tt>Y</tt>, aunque por una ruta mucho más enrevesada. No verás esto a menudo."
+ "Mapa de memoria"
+ "Se han corregido numerosos errores menores para mejorar la usabilidad general"
+ "Importantes mejoras de UI con un botón de acción flotante moderno y estados dinámicos para un control intuitivo del programa, y un widget de depurador completamente rediseñado usando componentes modernos de Adwaita."
+ "Line Buster 6502"
+ "Estilo claro"
+ "Aprender con ejemplos nunca ha sido tan fácil. Sumérgete en código funcional, modifícalo, rómpelo, arréglalo de nuevo. ¡Así es como los mejores programadores aprendieron en su día!"
+ "Aprende a usar la pila con las instrucciones PHA y PLA"
+ "Aprende a programar el microprocesador 6502."
+ "Aprende sobre la historia de la informática mientras programas"
+ "Learn 6502 ahora también se ejecuta en Windows y macOS. Si querías enseñárselo a alguien que no usa Linux, ya puedes hacerlo."
+ "¡Learn 6502 ahora se ejecuta en GNOME 50! Gracias a Sabri Ünal por contribuir la actualización del runtime."
+ "Aprende 6502 Assembly"
+ "Aprender"
+ "Error de etiquetas"
+ "Etiqueta ya definida en la línea %1$d: %2$s"
+ "La etiqueta %1$s ya se usa como símbolo; por favor, renombra una de ellas"
+ "Los saltos son como las ramificaciones con dos diferencias principales. Primero, los saltos no se ejecutan de forma condicional, y segundo, toman una dirección absoluta de dos bytes. En programas pequeños este segundo detalle no es muy importante, ya que normalmente usarás etiquetas y el ensamblador calcula la ubicación correcta a partir de ellas. En programas más grandes, sin embargo, saltar es la única manera de moverse de una sección del código a otra."
+ "Saltos"
+ "JSR/RTS"
+ "JMP"
+ "Introducción"
+ "Indicador de interrupción: Cuando está activo, enmascara (desactiva) todas las interrupciones enmascarables (IRQ). Solo pueden ocurrir interrupciones no enmascarables (NMI). Se usa para secciones críticas de código que no deben interrumpirse."
+ "Fuente de la interfaz"
+ "Los tutoriales interactivos te guían de principiante a avanzado"
+ "Tutorial interactivo"
+ "Las instrucciones en ensamblador son como un conjunto pequeño de funciones predefinidas. Todas aceptan cero o un argumento. Aquí hay código comentado para introducir varias instrucciones distintas:"
+ "Instrucciones"
+ "Inicialización"
+ "Indirecto: <tt>($c000)</tt>"
+ "Indirecto indexado: <tt>($c0),Y</tt>"
+ "El modo indirecto indexado es como el indexado indirecto pero menos enrevesado. En lugar de sumar el registro <tt>X</tt> a la dirección <i>antes</i> de desreferenciar, se desreferencia la dirección de página cero y se suma el registro <tt>Y</tt> a la dirección resultante."
+ "La direccionamiento indirecto usa una dirección absoluta para buscar otra dirección. La primera da el byte menos significativo y la siguiente el más significativo. Puede ser difícil de visualizar; aquí tienes un ejemplo:"
+ "Indexando etiquetas..."
+ "Indexado indirecto: <tt>($c0,X)</tt>"
+ "Registro índice Y: Se usa para direccionamiento"
+ "Registro índice X: Se usa para direccionamiento"
+ "En este mini tutorial te mostraré cómo empezar a escribir en ensamblador 6502. El procesador 6502 fue enorme en los setenta y ochenta, dando vida a ordenadores famosos como el <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a> y la <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender en Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">tiene un 6502 por cerebro</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Incluso el Terminator fue programado en 6502</a>."
+ "En este ejemplo, <tt>$f0</tt> contiene el valor <tt>$01</tt> y <tt>$f1</tt> contiene el valor <tt>$cc</tt>. La instrucción <tt>JMP ($f0)</tt> hace que el procesador lea los dos bytes en <tt>$f0</tt> y <tt>$f1</tt> (<tt>$01</tt> y <tt>$cc</tt>) y los combine para formar la dirección <tt>$cc01</tt>, que se convierte en el nuevo contador de programa. Ensambla y recorre el programa para ver qué ocurre. Hablaré más de <tt>JMP</tt> en la sección de <a href=\"#jumping\">Saltos</a>."
+ "En este caso, <tt>($01)</tt> busca los dos bytes en <tt>$01</tt> y <tt>$02</tt>: <tt>$03</tt> y <tt>$07</tt>. Estos forman la dirección <tt>$0703</tt>. El valor del registro <tt>Y</tt> se suma a esta dirección para obtener la dirección final <tt>$0704</tt>."
+ "En este ensamblador podemos definir constantes descriptivas (o símbolos) que representan números. El resto del código puede usar las constantes en lugar del número literal, lo que hace evidente de qué se trata. Puedes usar letras, dígitos y guiones bajos en un nombre."
+ "En el editor <b>escribe</b> (no pegues) el siguiente código:"
+ "En ensamblador, normalmente usarás etiquetas con instrucciones de salto condicional. Al ensamblar, esa etiqueta se convierte en un desplazamiento relativo de un byte (número de bytes hacia atrás o hacia delante desde la siguiente instrucción), por lo que los saltos solo pueden moverse unos 256 bytes. Esto limita su uso a código local. Para recorrer más distancia necesitas instrucciones de salto incondicional."
+ "Mejorado el rendimiento de la consola de juegos para una jugabilidad más fluida"
+ "Mejoradas la pantalla del juego y los controles para dispositivos móviles"
+ "Descripciones mejoradas para ser más acogedoras para usuarios no técnicos"
+ "Implícito"
+ "Inmediato: <tt>#$c0</tt>"
+ "La direccionamiento inmediato no trata estrictamente con direcciones de memoria; es el modo en el que se usan valores reales. Por ejemplo, <tt>LDX #$01</tt> carga el valor <tt>$01</tt> en el registro <tt>X</tt>. Es muy distinto de la instrucción de página cero <tt>LDX $01</tt>, que carga en <tt>X</tt> el valor almacenado en la dirección de memoria <tt>$01</tt>."
+ "Si el idioma de tu sistema es chino, la aplicación vuelve a mostrarse en chino. Antes recurría al inglés por error."
+ "Si tu ejemplo se basa en o está inspirado en otro ejemplo, puedes proporcionar la URL de origen."
+ "Si hablas uno de los idiomas listados, por favor ayuda a revisar o mejorar las traducciones. Puedes contribuir mediante los enlaces dentro de la app, nuestra plataforma de traducción o abriendo un issue."
+ "Si el resultado de la suma es mayor que un solo byte, la dirección hace wrap-around. Por ejemplo:"
+ "IDE"
+ "No explicaré en detalle cómo funciona cada dirección, pero la explicación anterior debería darte lo suficiente para resolverlo con un poco de estudio."
+ "Oculto"
+ "Hexdump generado."
+ "Hexdump"
+ "Monitor Hex"
+ "Aquí tienes un ejemplo. Ten en cuenta que los operandos inmediatos siguen llevando el prefijo <tt>#</tt>."
+ "Ayuda"
+ "El hebreo es además nuestro primer idioma escrito de derecha a izquierda: gracias a las pruebas y contribuciones de Menachem, la aplicación ahora admite diseños de derecha a izquierda y está preparada para más idiomas RTL."
+ "Verde"
+ "¡Buen comienzo: has terminado el primer capítulo!"
+ "¿Tienes tu propia creación 6502? ¡Compártela con la comunidad! Ahora puedes enviar tus ejemplos de código directamente desde la aplicación. Solo presiona el botón de compartir y crearemos automáticamente un issue y pull request de GitHub para ti."
+ "¿Tienes un ejemplo genial de 6502?\n¡Compártelo con la comunidad!"
+ "Ir entre secciones es más complicado, ya que hay que tener en cuenta también el byte más significativo. Por ejemplo, bajar desde <tt>$02e1</tt> debería llevar a <tt>$0301</tt>. Por suerte, esto es bastante fácil de lograr. Sumar <tt>$20</tt> a <tt>$e1</tt> da <tt>$01</tt> y activa el bit de acarreo. Si el bit de acarreo estaba activo, sabemos que también hay que incrementar el byte más significativo."
+ "Alemán y Español han sido validados por colaboradores. Los demás idiomas son borradores asistidos por IA y necesitan validación humana."
+ "Los juegos ahora se pausan automáticamente al cambiar entre pantallas"
+ "Tecla de gamepad pulsada:"
+ "GNOME"
+ "GNOME"
+ "Versión completamente comentada del juego de la serpiente"
+ "Memoria completa ($0000-$FFFF)"
+ "Se encontraron %1$d etiquetas."
+ "Se encontró %1$d etiqueta."
+ "Para Linux ahora también hay una AppImage: un archivo, sin instalación, útil en una distribución para la que no publicamos paquetes."
+ "Fuente"
+ "Seguir el estilo del sistema"
+ "Corregido un error de compilación en PostmarketOS, mejorando la compatibilidad móvil"
+ "Se corrigió un problema en el que el botón de retroceso en la sección de aprendizaje siempre era visible en modo escritorio y tableta, incluso cuando no había una subpágina abierta."
+ "Primero, <tt>readkeys</tt> comprueba si se ha pulsado alguna tecla de dirección (W, A, S, D) y, de ser así, ajusta la dirección de la serpiente. Luego, <tt>checkCollision</tt> verifica si la serpiente colisionó consigo misma o con la manzana. <tt>updateSnake</tt> actualiza la representación interna de la serpiente según su dirección. Después, se dibujan la manzana y la serpiente. Por último, <tt>spinWheels</tt> hace que el procesador se ocupe un poco para que el juego no corra demasiado rápido (piénsalo como un «sleep»). El juego continúa hasta que la serpiente choca con la pared o consigo misma."
+ "Primero cargamos el valor <tt>$08</tt> en el registro <tt>X</tt>. La siguiente línea es una etiqueta. Las etiquetas marcan puntos del programa para poder volver a ellos después. Tras la etiqueta, decrementamos <tt>X</tt>, lo almacenamos en <tt>$0200</tt> (el píxel superior izquierdo) y lo comparamos con el valor <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compara el valor del registro <tt>X</tt> con otro valor. Si son iguales, la bandera <tt>Z</tt> se pone a <tt>1</tt>; en caso contrario, a <tt>0</tt>."
+ "Primera fila: <tt>$0200</tt>-<tt>$021F</tt>, segunda fila: <tt>$0220</tt>-<tt>$023F</tt>, etc."
+ "Primera versión de Learn 6502 Assembly para GNOME"
+ "Por último, el byte <tt>$03</tt> contiene la longitud actual de la serpiente, en términos de bytes en memoria (una longitud de 4 significa 2 píxeles)."
+ "Completa la información sobre tu ejemplo de 6502 para compartirlo con la comunidad"
+ "El archivo \"%1$s\" tiene cambios sin guardar"
+ "Error al copiar al portapapeles"
+ "Ejercicios"
+ "Ejercicio"
+ "Ejecutar instrucciones una por una en lugar de continuamente"
+ "Ejemplos"
+ "Ejemplo enviado para revisión"
+ "Aunque será una versión sencilla, el código será considerablemente mayor que en los ejemplos anteriores. Debemos llevar el control de varias ubicaciones de memoria a la vez para los distintos aspectos del juego. Podríamos seguir manteniendo el registro manualmente, como antes, pero a mayor escala se vuelve tedioso y propenso a errores sutiles. En su lugar, dejaremos que el ensamblador haga parte del trabajo rutinario por nosotros."
+ "Par o impar"
+ "Con ese conocimiento, deberías ver que la instrucción <tt>LDA #$01</tt> carga el valor hexadecimal <tt>$01</tt> en el registro <tt>A</tt>. Entraré en más detalle sobre los registros en la siguiente sección."
+ "Mejorada la entrada del rango de direcciones en el monitor hex para facilitar la edición"
+ "Mejorada la presentación de la app y la accesibilidad"
+ "Activar modo paso a paso"
+ "Activar depurador"
+ "Cada sección (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) primero comprueba si la dirección actual es la opuesta a la nueva. Esto requiere otro pequeño desvío."
+ "Hecho"
+ "Organización de la pantalla"
+ "Memoria de pantalla ($0200-$05FF)"
+ "Descubre el fascinante mundo de la programación de ordenadores y consolas clásicas. Aprende el lenguaje ensamblador 6502: el mismo código que impulsó sistemas icónicos como NES, Commodore 64 y Apple II."
+ "Descartar"
+ "Desensamblado generado."
+ "Desensamblado"
+ "Desactivar para mejorar el rendimiento"
+ "Dino Run"
+ "Descripción"
+ "Indicador decimal: Habilita el modo BCD (Binary Coded Decimal) para operaciones aritméticas. Cuando está activo, las instrucciones ADC/SBC tratan los valores como dígitos decimales (0‑9) en lugar de binarios. Usado para cálculos financieros y aritmética decimal."
+ "El depurador ahora solo se actualiza cuando es visible, reduciendo el procesamiento innecesario"
+ "Depurador"
+ "Depura tus programas con herramientas de inspección en tiempo real"
+ "Ajustes de depuración"
+ "Depurar"
+ "Estilo oscuro"
+ "Crear un juego"
+ "Copiar al editor"
+ "Copiar al portapapeles"
+ "Copiado al portapapeles"
+ "Continuar"
+ "Confirmar"
+ "Instrucciones comunes"
+ "Juego de la Serpiente Comentado"
+ "Paleta de colores"
+ "Editor de código y consola de juegos virtual"
+ "Código copiado al editor"
+ "Código ensamblado correctamente, %1$d bytes."
+ "Código"
+ "Cambia uno de los píxeles para dibujar en la esquina inferior derecha (dirección de memoria <tt>$05ff</tt>)."
+ "Indicador de acarreo: Se establece cuando una suma produce un acarreo; se restablece cuando una resta requiere un préstamo. Se usa para aritmética multibyte y desplazamientos/rotaciones (BCS/BCC)."
+ "Cancelar"
+ "Al enviar, aceptas que tu ejemplo será licenciado bajo <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Rompe los bloques con la paleta y la pelota."
+ "Indicador Break: Se establece cuando se ejecuta una instrucción BRK (Break). Se usa para distinguir entre interrupciones de software (BRK) e interrupciones de hardware. Ayuda a identificar el origen de una interrupción en las rutinas de servicio de interrupciones."
+ "Ramificación"
+ "Azul"
+ "Como el estado del juego se almacena en términos de posiciones de píxeles, renderizar el juego es muy sencillo. La primera subrutina, <tt>drawApple</tt>, es extremadamente simple. Establece <tt>Y</tt> en cero, carga un color aleatorio en el acumulador y luego almacena ese valor en <tt>($00),y</tt>. <tt>$00</tt> es donde se guarda la ubicación de la manzana, así que <tt>($00),y</tt> desreferencia a esa dirección de memoria. Lee la sección «Indirecto indexado» en <a href=\"#addressing\">Modos de direccionamiento</a> para más detalles."
+ "Atrás"
+ "Autor"
+ "A bajo nivel, esta subrutina es un poco más compleja. Primero, la longitud se carga en el registro <tt>X</tt>, que luego se decrementa. El fragmento de abajo muestra la memoria inicial de la serpiente."
+ "Archivos de Assembly"
+ "Assembly"
+ "Ensamblando código ..."
+ "Ensamblado correctamente"
+ "Ensambla el siguiente código, luego abre la vista <b>Depurar</b> y consulta el <b>Hexdump</b> para ver el código ensamblado."
+ "Ensambla el código, luego abre la vista <b>Depurar</b> y recorre el código observando los registros <tt>A</tt> y <tt>X</tt>. Ocurre algo curioso en la línea <tt>ADC #$c4</tt>. Podrías esperar que sumar <tt>$c4</tt> a <tt>$c0</tt> dé <tt>$184</tt>, pero este procesador da <tt>$84</tt>. ¿Qué pasa ahí?"
+ "Ensambla el código y usa <b>Paso</b> para recorrer estas tres instrucciones. El <b>Monitor Hex</b> en la vista <b>Depurar</b> muestra una sección de memoria y puede ayudar a visualizar la ejecución de los programas. <tt>STA $01</tt> guarda el valor del registro <tt>A</tt> en la dirección de memoria <tt>$01</tt>, y <tt>ADC $01</tt> suma al registro <tt>A</tt> el valor almacenado en la dirección <tt>$01</tt>. <tt>$80 + $80</tt> debería ser <tt>$100</tt>, pero como es mayor que un byte, el registro <tt>A</tt> queda en <tt>$00</tt> y se marca el indicador de acarreo. Además, se marca el indicador de cero. El indicador de cero se establece en todas las instrucciones cuyo resultado es cero."
+ "Error al ensamblar"
+ "Ensamblar"
+ "Como se dijo antes, las cuatro direcciones se representan internamente por los números 1, 2, 4 y 8. Cada uno es una potencia de 2, por lo que se representa con un número binario con un único <tt>1</tt>:"
+ "Mientras te muevas dentro de una de estas bandas horizontales, todo es sencillo. Por ejemplo, para ir a la derecha basta con incrementar el byte menos significativo (p. ej., <tt>$0200</tt> pasa a <tt>$0201</tt>). Para bajar, suma <tt>$20</tt> (p. ej., <tt>$0200</tt> pasa a <tt>$0220</tt>). Izquierda y arriba son lo contrario."
+ "Como siempre, esta versión incluye muchas pequeñas correcciones y mejoras."
+ "Las mejoras de arquitectura permiten un mejor intercambio de código entre GNOME, Web y Android."
+ "Configuración de apariencia"
+ "Apariencia"
+ "Cualquier número con el prefijo <tt>$</tt> en ensamblador 6502 (y por extensión, en este libro) está en formato hexadecimal (hex). Si no estás familiarizado con los números hexadecimales, te recomiendo leer <a href=\"https://es.wikipedia.org/wiki/Sistema_hexadecimal\">el artículo de Wikipedia</a>. Todo lo que lleva el prefijo <tt>#</tt> es un valor numérico literal. Cualquier otro número se refiere a una dirección de memoria."
+ "Es importante notar aquí la diferencia entre <tt>ADC #$01</tt> y <tt>ADC $01</tt>. La primera suma el valor <tt>$01</tt> al registro <tt>A</tt>, pero la segunda suma al registro <tt>A</tt> el valor almacenado en la dirección de memoria <tt>$01</tt>."
+ "También útiles: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "¡Casi listo!"
+ "Todas las instrucciones que admiten direccionamiento absoluto (con la excepción de las instrucciones de salto) también pueden tomar una dirección de un byte. Este tipo de direccionamiento se llama \"página cero\": solo es accesible la primera página (los primeros 256 bytes) de memoria. Es más rápido, ya que solo hay que buscar un byte, y ocupa menos espacio en el código ensamblado."
+ "Todos los archivos"
+ "Después de esto, se suma el valor <tt>2</tt> al acumulador para crear un número aleatorio final en el rango 2–5."
+ "Tras el bloque inicial de comentarios (líneas que empiezan con punto y coma), las dos primeras líneas son:"
+ "Después de la detección de colisiones, actualizamos la ubicación de la serpiente. A alto nivel: primero, desplaza cada par de bytes del cuerpo una posición hacia arriba en memoria. Segundo, actualiza el puntero según la dirección actual. Por último, si el puntero está fuera de límites, trátalo como una colisión. Lo ilustraré con arte ASCII. Cada par de corchetes contiene una coordenada x,y en lugar de un par de bytes, por simplicidad."
+ "Después de un movimiento en cada dirección, también debemos comprobar si el puntero queda fuera de los límites. Esto se maneja de forma diferente para cada dirección. Para izquierda y derecha, podemos comprobar si el puntero ha «envuelto». Ir a la derecha desde <tt>$021f</tt> incrementando el byte menos significativo daría <tt>$0220</tt>, pero en realidad eso salta del último píxel de la primera fila al primero de la segunda. Así que, cada vez que vamos a la derecha, debemos comprobar si el nuevo byte menos significativo es múltiplo de <tt>$20</tt>. Esto se hace con una comprobación de bits usando la máscara <tt>$1f</tt>. La ilustración de abajo debería mostrar cómo enmascarar los 5 bits inferiores revela si un número es múltiplo de <tt>$20</tt> o no."
+ "Adwaita"
+ "Modos de direccionamiento"
+ "Modos de direccionamiento"
+ "Dirección %1$s - opcode desconocido"
+ "También hay entradas de botón adicionales: botón A (tecla Intro/Return, código ASCII <tt>$0D</tt>) y botón B (barra espaciadora, código ASCII <tt>$20</tt>). Se pueden usar para añadir más interacción a tus juegos. Para el control direccional, se pueden usar indistintamente tanto las teclas WASD como las flechas."
+ "Se añadió una función de ayuda para facilitar la edición de código a principiantes"
+ "Se añadió la gestión de archivos para guardar y cargar tus programas"
+ "Añade más instrucciones para dibujar píxeles adicionales."
+ "Acumulador: Registro principal para cálculos"
+ "Acento: Amarillo"
+ "Acento: Verde azulado"
+ "Acento: Pizarra"
+ "Acento: Rojo"
+ "Acento: Morado"
+ "Acento: Rosa"
+ "Acento: Naranja"
+ "Acento: Verde"
+ "Acento: Azul"
+ "Color de acento"
+ "Absoluta: <tt>$c000</tt>"
+ "Absoluta,X y absoluta,Y: <tt>$c000,X</tt> y <tt>$c000,Y</tt>"
+ "Acerca de Learn 6502 Assembly"
+ "Una lista completa del conjunto de instrucciones del 6502 está <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">disponible aquí</a> y <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">aquí</a> (suelo consultar ambas páginas, ya que tienen puntos fuertes y débiles). Estas páginas detallan los argumentos de cada instrucción, qué registros utilizan y qué indicadores establecen. Son tu biblia."
+ "Se ha abierto un issue de GitHub en tu navegador. Por favor, revísalo y envíalo allí para completar tu contribución. Una vez aprobado, tu ejemplo se incluirá en la próxima versión.\n\nSi tu ejemplo es demasiado grande, el contenido completo se copiará al portapapeles para pegarlo manualmente en el issue de GitHub."
+ "<tt>init</tt> y <tt>loop</tt> son subrutinas. <tt>init</tt> inicializa el estado del juego y <tt>loop</tt> es el bucle principal del juego."
+ "<tt>checkSnakeCollision</tt> recorre los segmentos del cuerpo de la serpiente comparando cada par de bytes con el par de la cabeza. Si hay coincidencia, fin del juego."
+ "<tt>a9</tt> y <tt>c9</tt> son los opcodes del procesador para <tt>LDA</tt> y <tt>CMP</tt> con direccionamiento inmediato, respectivamente. <tt>01</tt> y <tt>02</tt> son los argumentos de estas instrucciones. <tt>d0</tt> es el opcode de <tt>BNE</tt> y su argumento es <tt>02</tt>. Esto significa \"saltar los dos siguientes bytes\" (<tt>85 22</tt>, la versión ensamblada de <tt>STA $22</tt>). Prueba a editar el código para que <tt>STA</tt> use una dirección absoluta de dos bytes en lugar de una dirección de página cero de un solo byte (por ejemplo, cambia <tt>STA $22</tt> por <tt>STA $2222</tt>). Ensambla de nuevo y mira el volcado hexadecimal: el argumento de <tt>BNE</tt> ahora debería ser <tt>03</tt>, porque la instrucción que el procesador salta ahora tiene tres bytes."
+ "<tt>X</tt> contiene el color del píxel y <tt>Y</tt> la posición del píxel actual. El primer bucle dibuja el color actual como un píxel (a través del registro <tt>A</tt>), empuja el color a la pila y luego incrementa el color y la posición. El segundo bucle extrae un valor (que representa un color) de la pila, dibuja el color extraído como un píxel y después incrementa la posición. Como era de esperar, esto crea un patrón simétrico."
+ "<tt>SP</tt> es el puntero de pila. No entraré aún en la pila, pero básicamente este registro se decrementa cada vez que se empuja un byte a la pila y se incrementa cuando se saca un byte de la pila."
+ "<tt>PC</tt> es el contador de programa: así sabe el procesador en qué punto del programa está. Es como el número de línea actual de un script en ejecución. En el simulador, el código se ensambla comenzando en la dirección de memoria <tt>$0600</tt>, así que <tt>PC</tt> siempre empieza ahí."
+ "<tt>JSR</tt> y <tt>RTS</tt> (\"saltar a subrutina\" y \"retornar de subrutina\") son un dúo dinámico que normalmente verás juntos. <tt>JSR</tt> se usa para saltar desde la ubicación actual a otra parte del código. <tt>RTS</tt> regresa a la posición anterior. Básicamente es como llamar a una función y retornar."
+ "<tt>JMP</tt> es un salto incondicional. He aquí un ejemplo muy sencillo para verlo en acción:"
+ "<tt>BCC</tt> y <tt>BCS</tt> (\"ramificar si se borra el acarreo\" y \"ramificar si se establece el acarreo\") se usan para ramificar según el indicador de acarreo. Escribe un programa que use una de estas dos."
+ "<b>Página cero</b>: <tt>$0000</tt>-<tt>$00FF</tt> (primeros 256 bytes, acceso más rápido)"
+ "<b>Página cero</b> (<tt>$c0</tt>): Acceder a ubicaciones de memoria <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Página cero,X/Y</b> (<tt>$c0,X</tt>): Sumar el registro X/Y a la dirección de página cero"
+ "<b>Z</b> (Cero): Se establece cuando el resultado es cero"
+ "<b>X, Y</b>: Registros índice para direccionamiento y conteo"
+ "<b>W</b> o tecla Flecha arriba (<tt>$77</tt>)"
+ "<b>V</b> (Desbordamiento): Se establece cuando una operación aritmética provoca desbordamiento con signo"
+ "<b>Pila</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Almacenar registros en memoria"
+ "<b>SP</b> (Stack Pointer): Apunta a la posición actual de la pila (empieza en <tt>$FF</tt>)"
+ "<b>SBC requiere acarreo activado</b>: establece <tt>C</tt> antes de restar (actúa como préstamo inverso). <tt>C</tt> en cero tras SBC indica que hubo un préstamo."
+ "<b>S</b> o tecla Cursor abajo (<tt>$73</tt>)"
+ "<b>Relativo</b> (<tt>label</tt>): La rama usa un desplazamiento con signo de 8 bits desde la siguiente instrucción (−128…+127)"
+ "<b>Q</b> o tecla Intro/Return (<tt>$0D</tt>)"
+ "<b>Almacenamiento de programa</b>: comienza en <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Apilar/desapilar el acumulador en/desde la pila"
+ "<b>PC</b> (Program Counter): Apunta a la siguiente instrucción a ejecutar"
+ "<b>N</b> (Negativo): Se establece cuando el bit 7 del resultado está activado"
+ "<b>LDA/LDX/LDY</b>: Cargar registros"
+ "<b>JSR/RTS</b>: Saltar a subrutina / Retornar de subrutina"
+ "<b>JMP</b>: Salto incondicional"
+ "<b>Indirecto</b> (<tt>($c000)</tt>): Busca la dirección almacenada en la ubicación indicada"
+ "<b>Indirecto indexado</b> (<tt>($c0),Y</tt>): Usa la dirección de página cero como puntero para obtener la dirección base y luego suma Y a esa base"
+ "<b>Indexado indirecto</b> (<tt>($c0,X)</tt>): Suma X a la dirección de página cero y luego usa el resultado como puntero para obtener la dirección objetivo real"
+ "<b>Inmediato</b> (<tt>#$c0</tt>): Utiliza el valor literal"
+ "<b>INX/INY/DEX/DEY</b>: Incrementar/decrementar registros"
+ "<b>I</b> (Interrupt): Se establece cuando las interrupciones están deshabilitadas"
+ "<b>E</b> o tecla Espacio (<tt>$20</tt>)"
+ "<b>Memoria de pantalla</b>: <tt>$0200</tt>-<tt>$05FF</tt> (usada para la salida en pantalla)"
+ "<b>Controles direccionales</b>:"
+ "<b>D</b> o tecla de flecha derecha (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Se establece cuando el procesador está en modo BCD (Binary Coded Decimal)"
+ "<b>Operaciones de comparación</b>: <tt>CMP/CPX/CPY</tt> establecen <tt>N/Z/C</tt> como una resta (registro − memoria) sin almacenar un resultado."
+ "<b>C</b> (Acarreo): Se establece cuando las operaciones aritméticas desbordan un byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Saltar si igual/no igual/acarreo borrado/acarreo establecido"
+ "<b>B</b> (Break): Se establece cuando se ejecuta la instrucción BRK"
+ "<b>Botones de acción</b>:"
+ "<b>Absoluta</b> (<tt>$c000</tt>): Accede a cualquier ubicación de memoria"
+ "<b>Absoluta,X/Y</b> (<tt>$c000,X</tt>): Suma el registro X/Y a la dirección absoluta"
+ "<b>ADC/SBC</b>: Sumar/restar con acarreo"
+ "<b>A</b> o tecla de flecha izquierda (<tt>$61</tt>)"
+ "<b>A</b> (Acumulador): Registro principal para cálculos y manipulación de datos"
+ "<b><tt>$f</tt></b>: Gris claro (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Azul claro (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Verde claro (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Gris (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Gris oscuro (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Rojo claro (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Última tecla pulsada (código ASCII)"
+ "<b><tt>$FE</tt></b>: Generador de números aleatorios (se lee como un valor aleatorio 0-255)"
+ "<b><tt>$9</tt></b>: Marrón (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Naranja (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Amarillo (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Azul (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Verde (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Púrpura (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Cian (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Rojo (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Blanco (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Datos de posición de la serpiente (cabeza, segmentos del cuerpo, cola)"
+ "<b><tt>$0</tt></b>: Negro (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Longitud de la serpiente"
+ "<b><tt>$02</tt></b>: Dirección de la serpiente (1=arriba, 2=derecha, 4=abajo, 8=izquierda)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Posición de la manzana"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> hizo un <a href=\"https://gist.github.com/wkjagt/9043907\">gist completamente anotado de este código fuente</a>; leelo para más detalles."
+ "El lenguaje ensamblador 6502 tiene muchas instrucciones de salto, las cuales dependen de si ciertas banderas están activas o no. En este ejemplo veremos <tt>BNE</tt>: «saltar si no es igual»."
+ "¡Pila del 6502 llena! Ajustando..."
+ "¡Pila del 6502 vacía! Ajustando..."
+ "(En realidad, me han informado de forma fiable de que los procesadores 6502 siguen siendo fabricados por <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> y <a href=\"https://www.mouser.co.uk/c/?q=65C02\">vendidos a aficionados</a>, así que ,claramente, el lenguage ensamblador para el 6502 <i>no es</i> un lenguaje muerto. ¿Quién lo diría?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-fi/strings.xml b/packages/app-android/data/Android/src/main/res/values-fi/strings.xml
new file mode 100644
index 00000000..cf982a55
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-fi/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Opi 6502 Assembly"
+ "Opi 6502 Assembly"
+ "Opi 6502 Assembly"
+ "வணக்கம்! Olemme iloisia voidessamme toivottaa tervetulleeksi tamilinkieliset käännökset, jotka தமிழ்நேரம் on toimittanut. நன்றி!"
+ "joka edustaa epäsuorasti osoitettuja muistiosoitteita <tt>$0411</tt>, <tt>$0410</tt> ja <tt>$040f</tt> (kolme pikseliä näytön keskellä). Jankutan tästä, mutta on tärkeää ymmärtää perusteellisesti, miten epäsuora osoitteistus toimii."
+ "wdm-tulostus"
+ "ohjelmointi"
+ "opiskelu"
+ "tekijä %1$s"
+ "_Asetukset"
+ "Nollasivu: <tt>$c0</tt>"
+ "Nollasivu,Y: <tt>$c0,Y</tt>"
+ "Nollasivu,X: <tt>$c0,X</tt>"
+ "Nollasivun käyttö"
+ "Nollasivu ($0000-$00FF)"
+ "Nollalippu: Asetetaan, kun operaation tulos on nolla. Välttämätön ehdolliselle haarautumiselle – useimmat ehdolliset hyppykäskyt (BEQ, BNE) tarkistavat tämän lipun määrittääkseen ohjelman kulun sen perusteella, onko arvo nolla."
+ "TIedostossa on tallentamattomia muutoksia. Muutokset katoavat, jos et tallenna niitä."
+ "Olet nähnyt <tt>TAX</tt>:n. Voit luultavasti arvata, mitä <tt>TAY</tt>, <tt>TXA</tt> ja <tt>TYA</tt> tekevät, mutta kirjoita koodia testataksesi oletuksesi."
+ "Tuit tätä avoimen lähdekoodin projektia ostamalla sovelluksen. Kiitos!"
+ "Näytön voi ajatella neljänä vaakasuuntaisena kaistana, joissa on 32 × 8 pikseliä. Nämä kaistat vastaavat osoitteita <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> ja <tt>$0500-$05ff</tt>. Pikselien ensimmäiset rivit ovat <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt> jne."
+ "Keltainen"
+ "Kirjoita ja muokkaa koodia sisäänrakennetulla koodimuokkaimella"
+ "Kaikkien näiden esimerkkien kanssa voi olla hyödyllistä käyttää vianjäljitysnäkymän <b>Heksamonitoria</b> muistin muutosten tarkkailuun. Valitse luettelosta muistialue nähdäksesi kyseisen osan — esimerkiksi <b>Näyttömuisti ($0200–$05FF)</b> näytön pikseleiden tarkkailuun tai <b>Nollasivu ($0000–$00FF)</b> ensimmäisten 256 tavun tutkimiseen."
+ "Absoluuttisessa osoitteistuksessa käskyn argumenttina käytetään täyttä muistiosoitetta. Esimerkiksi:"
+ "Tervetuloa vietnaminkielinen käännös, kokonaan Loc Huynhin (hthienloc) tekemä."
+ "Tervetuloa puolankielinen käännös, alunperin Micro Waven tekemä. Dziękujemy!"
+ "Olemme jo vilkaisseet suorittimen tilaosiota (<tt>A</tt>, <tt>PC</tt> jne.), mutta mitä kaikki se tarkoittaa?"
+ "Olemme lisänneet uuden Esimerkit-osion Opi-välilehteen, jossa voit tutkia ja suorittaa täysin kommentoituja 6502-ohjelmia suoraan sovelluksessa. Aloita esitellystä matopeliesimerkistä ja katso, miten pikselit heräävät henkiin!"
+ "Arvot <tt>$00</tt>-<tt>$0F</tt> edustavat 16 eri väriä (<tt>$00</tt>=musta, <tt>$01</tt>=valkoinen)"
+ "Käytä mukautettua ensisijaista väriä"
+ "Käytä mukautettua korostusväriä"
+ "Pelin tilan päivittäminen"
+ "Tallentamattomia muutoksia"
+ "Toisin kuin nollasivu,Y, absoluuttinen,Y ei toimi <tt>STX</tt>:n kanssa, mutta sitä voi käyttää <tt>LDA</tt>:n ja <tt>STA</tt>:n kanssa."
+ "Konepellin alla: päivitetty TypeScript 6:een, Vite 8:aan ja muita riippuvuuspäivityksiä suorituskyvyn ja vakauden parantamiseksi."
+ "Koodia ei voi siirtää 64 kt:n muistin ulkopuolelle"
+ "Annettua osoitetta/otsikkoa ei löydy tai sitä ei voi jäsentää"
+ "Kaksi pinokäskyistä ovat <tt>PHA</tt> ja <tt>PLA</tt>, \"push accumulator\" (työnnä akkumulaattori) ja \"pull accumulator\" (vedä akkumulaattori). Alla on esimerkki näiden kahden toiminnasta."
+ "Kaksi uutta esimerkkiohjelmaa, ja molemmat tulivat teiltä: Dino Run, tekijänä Jacob, ja Line Buster 6502, tekijänä edit12. Ne ovat ensimmäiset jaa-painikkeella lähetetyt esimerkit, ja otamme mielellämme vastaan lisää."
+ "Opas, <sub>tehnyt <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, lisenssi CC BY 4.0</sub>"
+ "Opas"
+ "Kokeile kirjoittaa koodinpätkiä, jotka käyttävät kutakin 6502:n osoitteistustilaa. Muista, että voit käyttää vianjäljitysnäkymän <b>Heksamonitoria</b> muistin osan tarkkailuun."
+ "Kokeile ohjelmien esimerkkejä 6502-mikroprosessorille."
+ "Kokeile ohjelmien esimerkkejä"
+ "Kokeile vaihtaa kolmen pikselin väriä."
+ "Sivupalkki päällä/pois"
+ "Testatakseen onko suunta <tt>1</tt>, <tt>2</tt>, <tt>4</tt> vai <tt>8</tt>, koodi siirtää jatkuvasti oikealle, kunnes siirtolippu asetetaan. Yksi <tt>LSR</tt> tarkoittaa \"ylös\", kaksi tarkoittaa \"oikealle\" ja niin edelleen."
+ "Nimi"
+ "Tämä julkaisu tuo mukanaan värikkään käsikonsoli-inspiroituneen teeman muokattavin värein. Olemme lisänneet mukautuvat tabletti- ja työpöytäasettelut, jotka pitävät kaiken näkyvissä – täydellistä pitkiin koodaussessioihin, kun opettelee retropelien kehittämistä assemblyllä. Suuret kiitokset uudelle avustajalle @mmartinortiz loistavista työpöytäasetteluideoista. Mukana on myös hienoja teknisiä parannuksia, kuten TypeScript-tiukkuus, mukautetut GtkSourceView-tyylimallit ja parannetut vianjäljitysohjaimet sujuvampaan kehitykseen."
+ "Tämä on hieman outo. Se on kuin risteytys nollasivu,X:n ja epäsuoran välillä. Periaatteessa otetaan nollasivun osoite, lisätään siihen <tt>X</tt>-rekisterin arvo ja käytetään sitä kaksitavuisen osoitteen hakemiseen. Esimerkiksi:"
+ "Tämä lataa arvon <tt>$11</tt> muistiosoitteeseen <tt>$10</tt>, arvon <tt>$10</tt> osoitteeseen <tt>$12</tt> ja <tt>$0f</tt> osoitteeseen <tt>$14</tt>. Sen jälkeen se lataa arvon <tt>$04</tt> osoitteisiin <tt>$11</tt>, <tt>$13</tt> ja <tt>$15</tt>. Tämä johtaa seuraavanlaiseen muistiin:"
+ "Tässä osoitteistus alkaa olla mielenkiintoista. Tässä tilassa annetaan nollasivun osoite ja siihen lisätään <tt>X</tt>-rekisterin arvo. Tässä on esimerkki:"
+ "Tämä on nollasivu,X:n vastine, mutta sitä voi käyttää vain <tt>LDX</tt>- ja <tt>STX</tt>-käskyjen kanssa."
+ "Nämä ovat absoluuttiset osoitteistusversiot nollasivu,X:stä ja nollasivu,Y:stä. Esimerkiksi:"
+ "On myös hyvin käytännöllinen syy: retropelien kehitys. Homebrew-skene on elossa ja voi hyvin – uusia pelejä <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">julkaistaan yhä NES:lle</a> (joitakin jopa fyysisinä kasettteina) ja monille muille klassisille järjestelmille; NES on vain yksi esimerkki. Vaikka kohteesi olisi jotain kuten SNES, 6502:sta aloittaminen kannattaa: SNES:n suoritin (65C816) on taaksepäin yhteensopiva 6502:n kanssa, joten täällä oppimasi perusteet – rekisterit, osoitteistustilat ja käskyjoukon ydin – siirtyvät suoraan."
+ "Miksi sitten 6502? Miksi ei <i>hyödyllistä</i> assemblykieltä, kuten <a href=\"https://fi.wikipedia.org/wiki/X86\">x86</a>? No, en usko, että x86:n oppiminen on hyödyllistä. En usko, että sinun tarvitsee koskaan <i>kirjoittaa</i> assemblykieltä päivätyössäsi – joillekin tämä on akateeminen harjoitus, jotain joka laajentaa mieltä ja ajattelua. 6502 kirjoitettiin alun perin toisena aikakautena, aikana jolloin suurin osa kehittäjistä kirjoitti assemblyä suoraan näiden uusien korkean tason ohjelmointikielien sijaan. Joten se suunniteltiin ihmisten kirjoitettavaksi. Modernimmat assemblykielet on tarkoitettu kääntäjien kirjoitettaviksi, joten jätetään se niiden tehtäväksi. Lisäksi 6502 on <i>hauskaa</i>. Kukaan ei ole koskaan kutsunut x86:ta <i>hauskaksi</i>."
+ "Muistin nollasivua käytetään useiden pelin tilamuuttujien tallentamiseen, kuten pelin yläosan kommenttilohkossa mainitaan. Kaikki <tt>$00</tt>:ssa, <tt>$01</tt>:ssä ja <tt>$10</tt>:stä ylöspäin ovat tavupareja, jotka edustavat kaksitavuista muistiosoitetta, joka haetaan epäsuoralla osoitteistuksella. Nämä muistiosoitteet ovat kaikki välillä <tt>$0200</tt> – <tt>$05ff</tt> – pelikonsolia vastaava muistialue. Jos esimerkiksi <tt>$00</tt> ja <tt>$01</tt> sisältäisivät arvot <tt>$01</tt> ja <tt>$02</tt>, ne viittaisivat näytön toiseen pikseliin (<tt>$0201</tt> – muista, vähiten merkitsevä tavu tulee ensin epäsuorassa osoitteistuksessa)."
+ "Pino 6502-suorittimessa on kuin mikä tahansa pino – arvoja työnnetään siihen ja vedetään (\"pulled\" 6502-kielellä) siitä. Pinon nykyistä syvyyttä mitataan pino-osoittimella, erityisellä rekisterillä. Pino sijaitsee muistissa välillä <tt>$0100</tt> – <tt>$01ff</tt>. Pino-osoitin on aluksi <tt>$ff</tt>, joka osoittaa muistiosoitteeseen <tt>$01ff</tt>. Kun tavu työnnetään pinoon, pino-osoittimesta tulee <tt>$fe</tt> eli muistiosoite <tt>$01fe</tt>, ja niin edelleen."
+ "Pino eli \"stack\""
+ "Oppassa esitelty matopeli"
+ "Tämän aliohjelman tulos on satunnaisen tavun lataaminen osoitteeseen <tt>$00</tt> ja satunnaisen luvun välillä 2–5 lataaminen osoitteeseen <tt>$01</tt>. Koska vähiten merkitsevä tavu tulee ensin epäsuorassa osoitteistuksessa, tämä kääntyy muistiosoitteeksi välillä <tt>$0200</tt> – <tt>$05ff</tt>: juuri se alue, jota käytetään näytön piirtämiseen."
+ "Suoritin tietää, minne palata, koska <tt>JSR</tt> työntää seuraavan käskyn osoitteen miinus yksi pinoon ennen hyppäämistä annettuun sijaintiin. <tt>RTS</tt> vetää tämän sijainnin pinosta, lisää siihen yhden ja hyppää siihen osoitteeseen. Esimerkki:"
+ "Ongelma on, että <tt>$184</tt> on liian suuri mahtumaan yhteen tavuun (enimmäismäärä on <tt>$FF</tt>), ja rekisterit voivat sisältää vain yhden tavun. Se on kuitenkin ok; suoritin ei ole oikeasti tyhmä. Jos katsoit tarkkaan, huomasit, että siirtolippu asetettiin arvoon <tt>1</tt> tämän operaation jälkeen. Sillä tavalla tiedät."
+ "<tt>BNE</tt>:n vastakohta on <tt>BEQ</tt>. Kokeile kirjoittaa ohjelma, joka käyttää <tt>BEQ</tt>:ta."
+ "<tt>ADC</tt>:n vastakohta on <tt>SBC</tt> (subtract with carry, vähennys siirtolipulla). Kirjoita ohjelma, joka käyttää tätä käskyä."
+ "Selaimen offline-juoksupeli 6502 Assemblyllä"
+ "Seuraava aliohjelma, <tt>generateApplePosition</tt>, asettaa omenan sijainnin satunnaiseen kohtaan näytöllä. Ensin satunnainen tavu ladataan akkumulaattoriin (<tt>$fe</tt> on satunnaislukugeneraattori tässä simulaattorissa). Tämä tallennetaan osoitteeseen <tt>$00</tt>. Seuraavaksi toinen satunnainen tavu ladataan akkumulaattoriin, johon suoritetaan <tt>AND</tt>-operaatio arvolla <tt>$03</tt>. Tämä osa vaatii pienen sivupolun."
+ "Seuraava aliohjelma, <tt>checkCollision</tt>, kutsuu <tt>checkAppleCollision</tt>- ja <tt>checkSnakeCollision</tt>-aliohjelmia. <tt>checkAppleCollision</tt> tarkistaa yksinkertaisesti, vastaavatko omenan sijainnin kaksi tavua pään sijainnin kahta tavua. Jos vastaavat, pituutta kasvatetaan ja uusi omenan sijainti luodaan."
+ "Seuraava rivi, <tt>BNE decrement</tt>, siirtää suorituksen decrement-otsikkoon, jos <tt>Z</tt>-lippu on <tt>0</tt> (eli <tt>CPX</tt>-vertailun arvot eivät olleet yhtä suuret), muuten se ei tee mitään ja tallennamme <tt>X</tt>:n osoitteeseen <tt>$0201</tt> ja lopetamme ohjelman."
+ "Seuraava osa päivittää madon pään suunnan mukaan. Tämä on luultavasti koodin monimutkaisin osa, ja se perustuu siihen, miten muistiosoitteet vastaavat näyttöä, joten tarkastellaan sitä tarkemmin."
+ "Pituus alustetaan arvoon <tt>4</tt>, joten <tt>X</tt> alkaa arvosta <tt>3</tt>. <tt>LDA $10,x</tt> lataa osoitteen <tt>$13</tt> arvon <tt>A</tt>:han, sitten <tt>STA $12,x</tt> tallentaa tämän arvon osoitteeseen <tt>$15</tt>. <tt>X</tt>:ää vähennetään ja palataan silmukkaan. Nyt <tt>X</tt> on <tt>2</tt>, joten ladataan <tt>$12</tt> ja tallennetaan se osoitteeseen <tt>$14</tt>. Silmukka jatkuu niin kauan kuin <tt>X</tt> on positiivinen (<tt>BPL</tt> tarkoittaa \"haaraudu, jos positiivinen\")."
+ "Viimeinen aliohjelma, <tt>spinWheels</tt>, on olemassa vain siksi, että peli pyörisi muuten liian nopeasti. <tt>spinWheels</tt> laskee <tt>X</tt>:n alaspäin nollasta, kunnes se osuu taas nollaan. Ensimmäinen <tt>dex</tt> kiertyy ympäri ja tekee <tt>X</tt>:stä <tt>#$ff</tt>."
+ "Viimeinen osio näyttää suorittimen liput. Jokainen lippu on yksi bitti, joten kaikki seitsemän lippua mahtuvat yhteen tavuun. Liput asetetaan suorittimen toimesta antamaan tietoa edellisestä käskystä. Lisää tästä myöhemmin. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lue lisää rekistereistä ja lipuista täältä</a>."
+ "Heksadesimaali arvo <tt>$03</tt> esitetään binäärinä <tt>00000011</tt>. <tt>AND</tt>-opcoodi suorittaa bittitasoisen AND-operaation argumentin ja akkumulaattorin välillä. Esimerkiksi, jos akkumulaattori sisältää binääriarvon <tt>10101010</tt>, <tt>AND</tt>-operaation tulos <tt>00000011</tt>:n kanssa on <tt>00000010</tt>."
+ "Heksadumpin pitäisi näyttää suunnilleen tältä:"
+ "Pelisilmukka"
+ "Kaksi ensimmäistä tavua sisältävät omenan sijainnin. Tämä päivitetään joka kerta, kun mato syö omenan. Tavu <tt>$02</tt> sisältää nykyisen suunnan. <tt>1</tt> tarkoittaa ylös, <tt>2</tt> oikealle, <tt>4</tt> alas ja <tt>8</tt> vasemmalle. Näiden lukujen perustelut selviävät myöhemmin."
+ "Ensimmäinen aliohjelma, <tt>readKeys</tt>, vastaanottaa käyttäjän syötteen. Muistiosoite <tt>$ff</tt> sisältää tässä simulaattorissa viimeksi painetun näppäimen ASCII-koodin. Arvo ladataan akkumulaattoriin ja sitä verrataan arvoihin <tt>$77</tt> (W:n heksakoodi), <tt>$64</tt> (D), <tt>$73</tt> (S) ja <tt>$61</tt> (A). Jos jokin näistä vertailuista onnistuu, ohjelma haarautuu asianmukaiseen osioon."
+ "Ensimmäinen rivi näyttää <tt>A</tt>-, <tt>X</tt>- ja <tt>Y</tt>-rekisterit (<tt>A</tt>:ta kutsutaan usein \"akkumulaattoriksi\"). Jokainen rekisteri sisältää yhden tavun. Useimmat operaatiot käsittelevät näiden rekistereiden sisältöä."
+ "Ensimmäinen käsky saa suorituksen hyppäämään <tt>init</tt>-otsikkoon. Tämä asettaa <tt>X</tt>:n ja palaa sitten seuraavaan käskyyn, <tt>JSR loop</tt>. Tämä hyppää <tt>loop</tt>-otsikkoon, joka kasvattaa <tt>X</tt>:ää, kunnes se on <tt>$05</tt>. Sen jälkeen palaamme seuraavaan käskyyn, <tt>JSR end</tt>, joka hyppää tiedoston loppuun. Tämä havainnollistaa, miten <tt>JSR</tt> ja <tt>RTS</tt> voidaan käyttää yhdessä modulaarisen koodin luomiseen."
+ "Tämän vaikutus on peittää akkumulaattorin kaksi vähiten merkitsevää bittiä ja nollata muut. Tämä muuntaa luvun väliltä 0–255 luvuksi väliltä 0–3."
+ "Alla oleva koodilohko sisältää pelin koko lähdekoodin. Selitän sen toiminnan seuraavissa osioissa."
+ "Mustan pelikonsolin näytön pitäisi nyt näyttää kolme värillistä \"pikseliä\" vasemmassa yläkulmassa."
+ "Sovellus on suunniteltu GNOMEn käyttöliittymäfontille. Muissa järjestelmissä se piirretään kyseisen järjestelmän fontilla, joka on yleensä pienempi."
+ "Y-indeksirekisteri on samanlainen kuin X eikä sillä ole erityistoimintoja. Yleisesti käytetään indeksoituun osoitteistukseen ja datan siirtoon."
+ "X-indeksirekisteriä käytetään indeksoituihin osoitteistustiloihin ja laskuoperaatioihin. Se voi sisältää silmukkalaskureita, taulukkoindeksejä ja on välttämätön muistiosoitteiden käyttämiseen perusosoitteeseen nähden X:n toimiessa siirtymänä. Erityistä: TSX/TXS siirtävät X:n pino-osoittimeen/pino-osoittimesta."
+ "Pino-osoitin hallitsee kutsupinoa aliohjelmille ja keskeytyksille. Se alkaa arvosta $FF (pinon huippu) ja kasvaa alaspäin. Käytetään PUSH/PULL-operaatioihin, JSR/RTS-kutsuihin ja keskeytysten käsittelyyn. Kriittinen sisäkkäisille funktiokutsuille."
+ "Ohjelmalaskuri sisältää seuraavan suoritettavan käskyn muistiosoitteen. Se kasvaa automaattisesti jokaisen käskyn jälkeen ja sitä voivat muuttaa hypyt, haarautumiset, kutsut ja paluut. Välttämätön ohjelman kulun hallintaan ja vianjäljitykseen."
+ "Akkumulaattori (A) on ensisijainen rekisteri aritmeettisille ja loogisille operaatioille. Kaikki peruslaskelmat kuten yhteenlasku, vähennyslasku, AND, OR jne. käyttävät tätä rekisteriä. Se on 6502-assembly-ohjelmoinnin useimmin käytetty rekisteri."
+ "<tt>loop</tt>-aliohjelma itsessään kutsuu vain joukon aliohjelmia peräkkäin ja palaa sitten alkuun:"
+ "<tt>init</tt>-aliohjelma kutsuu kahta aliohjelmaa: <tt>initSnake</tt> ja <tt>generateApplePosition</tt>. <tt>initSnake</tt> asettaa madon suunnan, pituuden ja lataa sitten madon pään ja vartalon alkumuistisijainnit. Tavupari osoitteessa <tt>$10</tt> sisältää pään näyttösijainnin, pari osoitteessa <tt>$12</tt> sisältää ainoan vartalo-osan sijainnin, ja <tt>$14</tt> sisältää hännän sijainnin (häntä on vartalon viimeinen osa ja se piirretään mustana, jotta mato liikkuu). Tämä tapahtuu seuraavassa koodissa:"
+ "<tt>BIT</tt>-opcoodi on samankaltainen kuin <tt>AND</tt>, mutta laskutoimitusta käytetään vain nollalipun asettamiseen – varsinainen tulos hylätään. Nollalippu asetetaan vain, jos akkumulaattorin ja argumentin AND-operaation tulos on nolla. Kun tarkastelemme kahden potensseja, nollalippu asetetaan vain, jos kaksi lukua eivät ole samoja. Esimerkiksi <tt>0001 AND 0001</tt> ei ole nolla, mutta <tt>0001 AND 0010</tt> on nolla."
+ "6502 käyttää 16-bittistä osoiteväylää, mikä tarkoittaa, että suorittimella on käytettävissään 65536 tavua muistia. Muista, että tavu esitetään kahdella heksadesimaalimerkeillä, joten muistiosoitteet esitetään yleensä muodossa <tt>$0000 - $ffff</tt>. Näihin muistiosoitteisiin voidaan viitata eri tavoin, kuten alla on kuvattu."
+ "Kiitos, että käytät avoimen lähdekoodin ohjelmistoja."
+ "Testaa A:n bitin 0 komennoilla LSR ja BCC ja tallentaa tuloksen, 1 tai 0, A:han"
+ "Testaa luomuksiasi virtuaalisella pelikonsolilla"
+ "Tervetuloa! Olemme iloisia voidessamme toivottaa tervetulleeksi suomenkieliset käännökset, ystävällisesti Jiri Grönroosin toimittamana. Kiitos!"
+ "Sinivihreä"
+ "Järjestelmän fontti, GNOMEn koko"
+ "Järjestelmän oletus"
+ "Syntaksivirhe rivillä %1$d: %2$s"
+ "Tukija"
+ "Tue projektia"
+ "Lähetä"
+ "Tyyli"
+ "Pysäytetty"
+ "Vaiheittainen ohje 6502 assemblyyn"
+ "Askel"
+ "Tilaliput"
+ "Pino-osoitin: Osoittaa pinon kohtaan"
+ "Pinoesimerkki"
+ "Pino ($0100-$01FF)"
+ "Erityiset muistialueet (simulaattorissa)"
+ "Lähteen URL-osoite"
+ "Jotkut käskyt eivät käsittele muistiosoitteita (esim. <tt>INX</tt> – kasvata <tt>X</tt>-rekisteriä). Näillä sanotaan olevan implisiittinen osoitteistus – argumentti käy ilmi itse käskystä."
+ "Miksi siis haluaisit oppia 6502:ta? Sehän on kuollut kieli, eikö? No, niin on latinakin. Ja sitä opetetaan yhä. <a href=\"https://fi.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Mitä tämä ohjelma siis oikeastaan tekee? Käydään se läpi askel kerrallaan. Paina <b>Nollaa</b> ja käytä sitten <b>Askel</b>-toimintoa suorittaaksesi ohjelman käsky kerrallaan. <b>Vianjäljitys</b>-näkymä näyttää rekisterit ja muistin — se on erillinen välilehti pienessä ikkunassa ja pelikonsolin alapuolella oleva paneeli leveässä. Napsauta <b>Askel</b> kerran ja huomaat vianjäljitysnäkymässä, että <tt>A=</tt> muuttui <tt>$00</tt>:sta <tt>$01</tt>:ksi ja <tt>PC=</tt> muuttui <tt>$0600</tt>:sta <tt>$0602</tt>:ksi."
+ "Käsky <tt>STA $0200</tt> siis tallentaa <tt>A</tt>-rekisterin arvon muistiosoitteeseen <tt>$0200</tt>. Napsauta <b>Askel</b> vielä neljä kertaa suorittaaksesi loput käskyt ja seuraa <tt>A</tt>-rekisterin muuttumista."
+ "Tarkastellaan siis <tt>upKey</tt>:tä: jos nykyinen suunta on alas (4), bittitestin tulos on nolla. <tt>BNE</tt> tarkoittaa \"haaraudu, jos nollalippu on nollattu\", joten tässä tapauksessa haaraudumme <tt>illegalMove</tt>-kohtaan, joka yksinkertaisesti palaa aliohjelmasta. Muussa tapauksessa uusi suunta (tässä tapauksessa 1) tallennetaan asianmukaiseen muistiosoitteeseen."
+ "Sukellaan siis mukaan! Tämä sovellus sisältää <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 -assemblerin ja -simulaattorin</a>, jonka olen mukauttanut tätä vuorovaikutteista opasta varten. Napsauta alla olevan koodilohkon <b>Kopioi</b>-painiketta kopioidaksesi esimerkkikoodin muokkaimeen. Käytä sitten <b>Käännä konekielelle</b>-toimintoa koodin kääntämiseen ja <b>Suorita</b>-toimintoa sen suorittamiseen. Löydät nämä toiminnot painikkeina tai valikosta."
+ "Toistaiseksi osaamme kirjoittaa vain perusohjelmia ilman haarautumislogiikkaa. Muutetaan se."
+ "Matopelin muistinkäyttö"
+ "Matopelin data ($00-$15)"
+ "Matopeli"
+ "Liuskekivi"
+ "Simulaattorivirhe"
+ "Simulaattori"
+ "Jaetut koodiesimerkit sisältävät nyt CC-BY-4.0-lisenssitiedot, mikä selventää, miten yhteisö voi käyttää ja rakentaa osallistumistesi pohjalle."
+ "Jaa oma esimerkki"
+ "Jaa esimerkki"
+ "Jaa"
+ "Shalom! Olemme iloisia voidessamme toivottaa tervetulleeksi hepreankieliset käännökset, jotka Menachem (naattxx) on kokonaisuudessaan toimittanut. Toda raba!"
+ "Vakavasti puhuen, uskon, että assemblykielen ymmärtäminen on arvokasta. Assemblykieli on tietokoneiden alin abstraktiotaso – se kohta, jossa koodi on vielä luettavaa. Assemblykieli kääntyy suoraan tavuiksi, joita tietokoneesi suoritin suorittaa. Jos ymmärrät, miten se toimii, sinusta on käytännössä tullut tietokone<a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">taikuri</a>."
+ "Selamat datang! Toivotamme tervetulleeksi myös indonesiankieliset käännökset, jotka Arif Budiman on ystävällisesti toimittanut. Terima kasih!"
+ "Näyttö vastaa muistialuetta <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Monet tuoreet käännökset: ranska, interlingua, portugali, brasilianportugali, hollanti, espanja, ukraina, japani ja kiina (yksinkertaistettu)"
+ "Tallennettu nimellä %1$s"
+ "Tallennetaanko muutokset?"
+ "Tallenna nimellä..."
+ "Tallenna Assembly-tiedosto"
+ "Tallenna"
+ "Suoritetaan matopeli"
+ "Suorita"
+ "Kirjoita tämän osion ensimmäinen esimerkki uudelleen käyttäen <tt>Y</tt>-rekisteriä <tt>X</tt>-rekisterin sijaan."
+ "Tarkista, miltä esimerkkisi näyttää muille. <b>Lähetä</b>-painikkeen napsauttaminen luo issuen GitHubiin. Sinun täytyy kirjautua sisään GitHub-tililläsi lähetyksen viimeistelemiseksi."
+ "Jatka"
+ "Nollaa"
+ "Pelin renderöinti"
+ "Suhteellinen: <tt>$c0</tt> (tai otsikko)"
+ "Suhteellista osoitteistusta käytetään haarautumiskäskyissä. Nämä käskyt ottavat yhden tavun, jota käytetään siirtymänä seuraavasta käskystä."
+ "Rekisterit ja liput"
+ "Rekisterit"
+ "Pienennetty heksamonitorin oletusosoitealuetta paremman tehokkuuden saavuttamiseksi"
+ "Punainen"
+ "Syötteen lukeminen"
+ "Satunnaisluku/syöte ($FE-$FF)"
+ "Lopeta"
+ "Pikavinkit"
+ "Liila"
+ "Ohjelmoi vintage-pelikonsoleita"
+ "Ohjelma keskeytetty"
+ "Ohjelma valmistui. Nollaa, jotta voit suorittaa ohjelman uudelleen askel askeleelta."
+ "Ohjelma valmistui kohdassa PC=$%1$s"
+ "Ohjelma valmistui"
+ "Ohjelmamuisti ($0600-$FFFF)"
+ "Ohjelmalaskuri: Osoittaa seuraavaan konekäskyyn"
+ "Suorittimen tilarekisteri"
+ "Suorittimen liput"
+ "Ensisijainen: keltainen"
+ "Ensisijainen: sinivihreä"
+ "Ensisijainen: liuskekivi"
+ "Ensisijainen: punainen"
+ "Ensisijainen: liila"
+ "Ensisijainen: pinkki"
+ "Ensisijainen: oranssi"
+ "Ensisijainen: vihreä"
+ "Ensisijainen: sininen"
+ "Ensisijainen väri"
+ "Edellinen"
+ "Esikatsele esimerkkiäsi"
+ "Esikatselu"
+ "Paina <b>Askel</b> uudelleen suorittaaksesi toisen käskyn. Pelikonsolin vasemman yläkulman pikselin pitäisi nyt olla valkoinen. Tämä simulaattori käyttää muistiosoitteita <tt>$0200</tt> – <tt>$05ff</tt> pikseleiden piirtämiseen näytölle. Arvot <tt>$00</tt> – <tt>$0f</tt> edustavat 16 eri väriä (<tt>$00</tt> on musta ja <tt>$01</tt> valkoinen), joten arvon <tt>$01</tt> tallentaminen muistiosoitteeseen <tt>$0200</tt> piirtää valkoisen pikselin vasempaan yläkulmaan. Tämä on yksinkertaisempaa kuin miten oikea tietokone tuottaisi videokuvaa, mutta se kelpaa toistaiseksi."
+ "Esikäsitellään..."
+ "Pelaa"
+ "Pinkki"
+ "Täydellinen harrastelijoille, opiskelijoille ja kaikille tietokoneen toiminnasta konepellin alla kiinnostuneille!"
+ "Keskeytä"
+ "Ylivuotolippu: Asetetaan, kun aritmeettinen operaatio tuottaa tuloksen, jota ei voi esittää etumerkillisellä 8-bittisellä alueella (-128 – +127). Käytetään etumerkillisten aritmeettisten virheiden havaitsemiseen."
+ "Kokonaisrakenne"
+ "Haarautuminen alueen ulkopuolelle rivillä %1$d (haarautuminen rajoitettu välille -128 – +127): %2$s"
+ "Ensimmäinen ohjelma"
+ "Järjestetty neljäksi vaakasuuntaiseksi 32×8 pikselin kaistaksi"
+ "Oranssi"
+ "Optimoitu Flatpak-konfiguraatio poistamalla tarpeettomat käyttöoikeudet"
+ "Avattu %1$s"
+ "Avaa..."
+ "Avoin lähdekoodi"
+ "Avaa Assembly-tiedosto"
+ "Kun arvot on siirretty madon suuntaan, meidän täytyy selvittää, mitä tehdä päälle. Suunta ladataan ensin <tt>A</tt>:han. <tt>LSR</tt> tarkoittaa \"logical shift right\" eli \"siirrä kaikki bitit yhden paikan oikealle\". Vähiten merkitsevä bitti siirtyy siirtolippuun, joten jos akkumulaattori on <tt>1</tt>, <tt>LSR</tt>:n jälkeen se on <tt>0</tt> ja siirtolippu on asetettu."
+ "Nollauksen yhteydessä (simulaattori): <tt>P = $30</tt> (bitti 5 ja <tt>B</tt> asetettu; <tt>D</tt> ja <tt>I</tt> nollattu)"
+ "OK"
+ "Laitetaan nyt kaikki tämä tieto hyötykäyttöön ja tehdään peli! Teemme todella yksinkertaisen version klassisesta matopelista."
+ "Aiempaa ohjelmointikokemusta ei tarvita. Aloita vuorovaikutteisin oppitunnein ja rakenna taitosi vaiheittain."
+ "Ei koodia suoritettavaksi."
+ "Osoitetta tai otsikkoa ei annettu"
+ "Seuraavaksi tulee <tt>drawSnake</tt>. Tämäkin on melko yksinkertainen – ensin poistetaan häntä ja sitten piirretään pää. <tt>X</tt> asetetaan madon pituudeksi, jotta voimme indeksoida oikeaan pikseliin, ja asetamme <tt>A</tt>:n nollaksi ja suoritamme kirjoituksen indeksoidulla epäsuoralla osoitteistustilalla. Sitten lataamme <tt>X</tt>:n uudelleen indeksoimaan päähän, asetamme <tt>A</tt>:n ykköseksi ja tallennamme sen osoitteeseen <tt>($10,x)</tt>. <tt>$10</tt> tallentaa pään kaksitavuisen sijainnin, joten tämä piirtää valkoisen pikselin pään nykyiseen sijaintiin. Koska vain madon pää ja häntä liikkuvat, tämä riittää pitämään madon liikkeessä."
+ "Uusia työkaluja koodin tutkimiseen, mukaan lukien takaisinkääntäjä ja nopeasti vaihdettava muistinäkymä"
+ "Negatiivinen lippu: Asetetaan, kun tuloksen merkitsevin bitti (bitti 7) on 1. Käytetään etumerkillisten lukujen vertailuun ja osoittaa, onko arvo negatiivinen kahden komplementin esityksessä."
+ "Lähes kaikkien pelien ytimessä on pelisilmukka. Kaikissa pelisilmukoissa on sama perusmuoto: vastaanota käyttäjän syöte, päivitä pelin tila ja renderöi pelin tila. Tämä silmukka ei ole poikkeus."
+ "Viestit"
+ "Muistiosoitteet <tt>$01</tt> ja <tt>$02</tt> sisältävät arvot <tt>$05</tt> ja <tt>$07</tt>. Ajattele <tt>($00,X)</tt>:ää muodossa <tt>($00 + X)</tt>. Tässä tapauksessa <tt>X</tt> on <tt>$01</tt>, joten tämä yksinkertaistuu muotoon <tt>($01)</tt>. Tästä eteenpäin asiat etenevät kuten tavallisessa epäsuorassa osoitteistuksessa – kaksi tavua osoitteissa <tt>$01</tt> ja <tt>$02</tt> (<tt>$05</tt> ja <tt>$07</tt>) haetaan muodostamaan osoite <tt>$0705</tt>. Tähän osoitteeseen <tt>Y</tt>-rekisteri tallennettiin edellisessä käskyssä, joten <tt>A</tt>-rekisteri saa saman arvon kuin <tt>Y</tt>, joskin paljon mutkikkaamman reitin kautta. Tätä ei näe usein."
+ "Muistikartta"
+ "Useita pieniä virheitä on korjattu yleisen käytettävyyden parantamiseksi"
+ "Merkittäviä käyttöliittymäparannuksia: moderni kelluva toimintopainike dynaamisilla tiloilla intuitiiviseen ohjelman hallintaan ja täysin uudelleen suunniteltu vianjäljityskomponentti moderneilla Adwaita-komponenteilla."
+ "Line Buster 6502"
+ "Vaalea tyyli"
+ "Esimerkeistä oppiminen ei ole koskaan ollut helpompaa. Sukella toimivaan koodiin, muokkaa sitä, riko se, korjaa se taas – näin parhaat ohjelmoijat oppivat aikoinaan!"
+ "Opi käyttämään pinoa PHA- ja PLA-konekäskyillä"
+ "Opi ohjelmoimaan 6502-mikroprosessoria."
+ "Opi tietokonehistoriaa samalla kun koodaat"
+ "Learn 6502 toimii nyt myös Windowsilla ja macOS:llä. Jos olet halunnut vinkata siitä ystävälle, joka ei käytä Linuxia, nyt se onnistuu."
+ "Learn 6502 toimii nyt GNOME 50:llä! Kiitos Sabri Ünalille ajonympäristön päivityksen tekemisestä."
+ "Opi 6502 Assembly"
+ "Opi"
+ "Otsikoiden käsittely epäonnistui"
+ "Otsikko on jo määritelty rivillä %1$d: %2$s"
+ "Otsikko %1$s on jo käytössä symbolina; nimeä toinen niistä uudelleen"
+ "Hyppääminen on kuin haarautumista kahdella pääerolla. Ensinnäkin hyppyjä ei suoriteta ehdollisesti, ja toiseksi ne ottavat kaksitavuisen absoluuttisen osoitteen. Pienille ohjelmille tämä toinen yksityiskohta ei ole kovin tärkeä, koska käytät enimmäkseen otsikoita ja assembleri laskee oikean muistiosoitteen otsikoista. Suuremmissa ohjelmissa hyppääminen on kuitenkin ainoa tapa siirtyä koodin osasta toiseen."
+ "Hyppääminen"
+ "JSR/RTS"
+ "JMP"
+ "Esittely"
+ "Keskeytyslippu: Kun asetettu, estää (poistaa käytöstä) kaikki peruutettavat keskeytykset (IRQ). Vain ei-peruutettavat keskeytykset (NMI) voivat silti tapahtua. Käytetään kriittisille koodiosioille, joita ei saa keskeyttää."
+ "Käyttöliittymän fontti"
+ "Vuorovaikutteiset oppaat ohjaavat sinut aloittelijasta edistyneeksi"
+ "Vuorovaikutteinen opas"
+ "Assemblykielen konekäskyt ovat kuin pieni joukko ennalta määriteltyjä funktioita. Kaikki käskyt ottavat nolla tai yhden argumentin. Tässä on kommentoitua lähdekoodia muutaman eri käskyn esittelyksi:"
+ "Konekäskyt"
+ "Alustus"
+ "Epäsuora: <tt>($c000)</tt>"
+ "Epäsuora indeksoitu: <tt>($c0),Y</tt>"
+ "Epäsuora indeksoitu on kuin indeksoitu epäsuora, mutta vähemmän sekava. Sen sijaan, että <tt>X</tt>-rekisteri lisättäisiin osoitteeseen <i>ennen</i> viittauksen purkamista, nollasivun osoitteen viittaus puretaan ensin ja <tt>Y</tt>-rekisteri lisätään tuloksena olevaan osoitteeseen."
+ "Epäsuora osoitteistus käyttää absoluuttista osoitetta toisen osoitteen hakemiseen. Ensimmäinen osoite antaa osoitteen vähiten merkitsevän tavun, ja seuraava tavu antaa merkitsevimmän tavun. Tätä voi olla vaikea hahmottaa, joten tässä on esimerkki:"
+ "Indeksoidaan otsikoita..."
+ "Indeksoitu epäsuora: <tt>($c0,X)</tt>"
+ "Indeksirekisteri Y: Käytetään osoitteistukseen"
+ "Indeksirekisteri X: Käytetään osoitteistukseen"
+ "Tässä pienessä oppaassa näytän, miten pääset alkuun 6502-assemblykielen kirjoittamisessa. 6502-suoritin oli valtava 70- ja 80-luvuilla, ja se toimi kuuluisien tietokoneiden kuten <a href=\"https://fi.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://fi.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://fi.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://fi.wikipedia.org/wiki/Apple_II\">Apple II</a> ja <a href=\"https://fi.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a> -laitteiden ytimessä. Futuraman Benderillä on <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">6502-suoritin aivoina</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Jopa Terminator ohjelmoitiin 6502:lla</a>."
+ "Tässä esimerkissä <tt>$f0</tt> sisältää arvon <tt>$01</tt> ja <tt>$f1</tt> sisältää arvon <tt>$cc</tt>. Käsky <tt>JMP ($f0)</tt> saa suorittimen hakemaan kaksi tavua osoitteista <tt>$f0</tt> ja <tt>$f1</tt> (<tt>$01</tt> ja <tt>$cc</tt>) ja yhdistämään ne osoitteeksi <tt>$cc01</tt>, josta tulee uusi ohjelmalaskuri. Käännä ja askella yllä oleva ohjelma läpi nähdäksesi, mitä tapahtuu. Kerron lisää <tt>JMP</tt>:stä osiossa <a href=\"#jumping\">Hyppääminen</a>."
+ "Tässä tapauksessa <tt>($01)</tt> hakee kaksi tavua osoitteista <tt>$01</tt> ja <tt>$02</tt>: <tt>$03</tt> ja <tt>$07</tt>. Nämä muodostavat osoitteen <tt>$0703</tt>. <tt>Y</tt>-rekisterin arvo lisätään tähän osoitteeseen, jolloin saadaan lopullinen osoite <tt>$0704</tt>."
+ "Tässä assemblerissa voimme määritellä kuvaavia vakioita (tai symboleja), jotka edustavat lukuja. Muu koodi voi sitten yksinkertaisesti käyttää vakioita lukuarvon sijaan, mikä tekee heti selväksi, mistä on kyse. Nimissä voi käyttää kirjaimia, numeroita ja alaviivoja."
+ "<b>Kirjoita</b> (älä liitä) muokkaimeen seuraava koodi:"
+ "Assemblykielessä käytetään yleensä otsikoita haarautumiskäskyjen kanssa. Käännettäessä otsikko muunnetaan kuitenkin yksitavuiseksi suhteelliseksi siirtymäksi (tavumäärä eteen- tai taaksepäin seuraavasta käskystä), joten haarautumiskäskyt voivat liikkua vain noin 256 tavua eteen- tai taaksepäin. Tämä tarkoittaa, että niitä voi käyttää vain paikallisen koodin sisällä liikkumiseen. Pidemmälle siirtymiseen tarvitset hyppykäskyjä."
+ "Parannettu pelikonsolin suorituskykyä sujuvamman pelaamisen takaamiseksi"
+ "Parannettu pelinäkymää ja ohjaimia mobiililaitteille"
+ "Parannettu kuvauksia vastaanottavaisemmiksi ei-teknisille käyttäjille"
+ "Implisiittinen"
+ "Välitön: <tt>#$c0</tt>"
+ "Välitön osoitteistus ei varsinaisesti käsittele muistiosoitteita – tämä on tila, jossa käytetään todellisia arvoja. Esimerkiksi <tt>LDX #$01</tt> lataa arvon <tt>$01</tt> <tt>X</tt>-rekisteriin. Tämä on hyvin erilainen kuin nollasivun käsky <tt>LDX $01</tt>, joka lataa muistiosoitteessa <tt>$01</tt> olevan arvon <tt>X</tt>-rekisteriin."
+ "Jos järjestelmäsi kieli on kiina, sovellus näkyy taas kiinaksi. Se oli vahingossa palautunut englantiin."
+ "Jos esimerkkisi pohjautuu tai on saanut inspiraatiota toisesta esimerkistä, voit lisätä lähteen URL-osoitteen tähän."
+ "Jos puhut jotakin listatuista kielistä, auta tarkistamaan tai parantamaan käännöksiä. Voit osallistua sovelluksen sisäisten linkkien, käännösalustamme tai issuen avaamisen kautta."
+ "Jos yhteenlaskun tulos on suurempi kuin yksi tavu, osoite kiertyy ympäri. Esimerkiksi:"
+ "IDE"
+ "En selitä yksityiskohtaisesti, miten kukin suunta toimii, mutta yllä oleva selitys antaa sinulle riittävästi tietoa, jotta voit selvittää sen pienellä tutkimisella."
+ "Piilotettu"
+ "Heksavedos luotu."
+ "Heksavedos"
+ "Heksamonitori"
+ "Tässä on esimerkki. Huomaa, että välittömät operandit merkitään edelleen <tt>#</tt>-etuliitteellä."
+ "Ohje"
+ "Heprea on myös ensimmäinen oikealta vasemmalle kirjoitettava kielemme: Menachemin testauksen ja avustusten ansiosta sovellus tukee nyt oikealta vasemmalle -asetteluja ja on valmiina useammille RTL-kielille."
+ "Vihreä"
+ "Hyvä alku – olet suorittanut ensimmäisen luvun!"
+ "Onko sinulla oma hieno 6502-luomus? Jaa se yhteisön kanssa! Voit nyt lähettää koodiesimerkejäsi suoraan sovelluksesta. Paina vain jaa-painiketta, niin luomme automaattisesti GitHub-issuen ja pull requestin puolestasi."
+ "Onko sinulla siisti 6502-esimerkki?\nJaa se yhteisön kanssa!"
+ "Osioiden välillä liikkuminen on monimutkaisempaa, koska meidän täytyy ottaa huomioon myös merkitsevin tavu. Esimerkiksi alaspäin siirtyminen osoitteesta <tt>$02e1</tt> pitäisi johtaa osoitteeseen <tt>$0301</tt>. Onneksi tämä on melko helppoa toteuttaa. <tt>$20</tt>:n lisääminen <tt>$e1</tt>:een antaa tulokseksi <tt>$01</tt> ja asettaa siirtobitin. Jos siirtobitti oli asetettu, tiedämme, että myös merkitsevin tavu täytyy kasvattaa."
+ "Saksa ja espanja on tarkistettu avustajien toimesta. Muut kielet ovat tekoälyavusteisia luonnoksia ja tarvitsevat ihmisen tarkistuksen."
+ "Pelit keskeytyvät nyt automaattisesti näkymien välillä vaihdettaessa"
+ "Peliohjaimen näppäintä painettu:"
+ "GNOME"
+ "GNOME"
+ "Matopelin täysin kommentoitu versio"
+ "Koko muisti ($0000-$FFFF)"
+ "Löydettiin %1$d otsikkoa."
+ "Löydettiin %1$d otsikko."
+ "Linuxille on nyt saatavilla myös AppImage: yksi tiedosto, ei asennusta, kätevä jakelussa, jolle emme tee omaa pakettia."
+ "Fontti"
+ "Seuraa järjestelmän tyyliä"
+ "Korjattu käännösvirhe PostmarketOS:ssa, mikä parantaa mobiiliyhteensopivuutta"
+ "Korjattu ongelma, jossa opintosivun takaisin-painike oli aina näkyvissä työpöytä- ja tablettitilassa, vaikka alisivua ei ollut avoinna."
+ "Ensin <tt>readkeys</tt> tarkistaa, painettiinko jotain suuntanäppäintä (W, A, S, D), ja asettaa madon suunnan sen mukaisesti. Sitten <tt>checkCollision</tt> tarkistaa, törmäsikö mato itseensä tai omenaan. <tt>updateSnake</tt> päivittää madon sisäisen esityksen sen suunnan perusteella. Seuraavaksi omena ja mato piirretään. Lopuksi <tt>spinWheels</tt> laittaa suorittimen tekemään tyhjää työtä, jotta peli ei pyörisi liian nopeasti. Ajattele sitä kuin sleep-komentoa. Peli jatkuu, kunnes mato törmää seinään tai itseensä."
+ "Ensin lataamme arvon <tt>$08</tt> <tt>X</tt>-rekisteriin. Seuraava rivi on otsikko. Otsikot merkitsevät tiettyjä kohtia ohjelmassa, jotta niihin voidaan palata myöhemmin. Otsikon jälkeen vähennämme <tt>X</tt>:ää, tallennamme sen osoitteeseen <tt>$0200</tt> (vasen yläkulman pikseli) ja vertaamme sitä arvoon <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> vertaa <tt>X</tt>-rekisterin arvoa toiseen arvoon. Jos arvot ovat yhtä suuret, <tt>Z</tt>-lippu asetetaan arvoon <tt>1</tt>, muuten arvoon <tt>0</tt>."
+ "Ensimmäinen rivi: <tt>$0200</tt>-<tt>$021F</tt>, toinen rivi: <tt>$0220</tt>-<tt>$023F</tt>, jne."
+ "Ensimmäinen julkaisu: Opi 6502 Assembly GNOME:lle"
+ "Lopuksi tavu <tt>$03</tt> sisältää madon nykyisen pituuden muistitavuina (joten pituus 4 tarkoittaa 2 pikseliä)."
+ "Täytä tiedot 6502-esimerkistäsi jakaaksesi sen yhteisön kanssa"
+ "Tiedostossa \"%1$s\" on tallentamattomia muutoksia"
+ "Leikepöydälle kopiointi epäonnistui"
+ "Harjoitukset"
+ "Harjoitus"
+ "Toteuta konekäskyt yksi kerrallaan jatkuvuuden sijaan"
+ "Esimerkit"
+ "Esimerkki lähetetty arvioitavaksi"
+ "Vaikka tämä on yksinkertainen versio, koodi on huomattavasti laajempi kuin kaikki aiemmat esimerkit. Meidän täytyy seurata useita muistiosoitteita yhdessä pelin eri osien vuoksi. Voisimme edelleen tehdä tarvittavan kirjanpidon itse kuten aiemmin, mutta suuremmassa mittakaavassa siitä tulee nopeasti tylsää ja se voi johtaa vaikeasti havaittaviin virheisiin. Sen sijaan annamme nyt assemblerin tehdä osan arkipäiväisestä työstä puolestamme."
+ "Parillinen vai pariton"
+ "Tämän tiedon avulla sinun pitäisi nähdä, että käsky <tt>LDA #$01</tt> lataa heksadesimaaliarvon <tt>$01</tt> rekisteriin <tt>A</tt>. Käsittelen rekistereitä tarkemmin seuraavassa osiossa."
+ "Paranneltu heksamonitorin osoitealueen syöttöä arvojen muokkaamisen helpottamiseksi"
+ "Parannettu sovelluksen esitystapaa ja saavutettavuutta"
+ "Käytä askeltavaa tilaa"
+ "Käytä vianjäljitystä"
+ "Jokainen osio (<tt>upKey</tt>, <tt>rightKey</tt> jne.) tarkistaa ensin, onko nykyinen suunta uuden suunnan vastakohta. Tämä vaatii pienen sivupolun."
+ "Valmis"
+ "Näytön järjestely"
+ "Näyttömuisti ($0200-$05FF)"
+ "Löydä vanhojen tietokoneiden ja pelikonsolien ohjelmoinnin kiehtova maailma! Opi 6502-assemblykieltä - samaa koodia, joka oli ikonisten järjestelmien, kuten NES, Commodore 64 ja Apple II, takana."
+ "Hylkää"
+ "Takaisinkäännös luotu."
+ "Takaisinkäännetty"
+ "Poista käytöstä parantaaksesi suorituskykyä"
+ "Dino Run"
+ "Kuvaus"
+ "Desimaalilippu: Ottaa käyttöön BCD (Binary Coded Decimal) -tilan aritmeettisille operaatioille. Kun asetettu, ADC/SBC-käskyt käsittelevät arvoja desimaalilukuina (0–9) binäärin sijaan. Käytetään taloudellisiin laskelmiin ja desimaaliaritmetiikkaan."
+ "Vianjäljitin päivittyy nyt vain näkyvissä ollessaan, mikä vähentää turhaa käsittelyä"
+ "Vianjäljitin"
+ "Etsi vikoja ohjelmistasi reaaliaikaisilla tarkastustyökaluilla"
+ "Vianjäljitysasetukset"
+ "Vianjäljitys"
+ "Tumma tyyli"
+ "Pelin luominen"
+ "Kopioi muokkaimeen"
+ "Kopioi leikepöydälle"
+ "Kopioitu leikepöydälle"
+ "Jatka"
+ "Vahvista"
+ "Yleiset konekäskyt"
+ "Kommentoitu matopeli"
+ "Väripaletti"
+ "Koodimuokkain ja virtuaalipelikonsoli"
+ "Koodi kopioitu muokkaimeen"
+ "Koodi käännetty konekielelle onnistuneesti, %1$d tavua."
+ "Koodi"
+ "Muuta yksi pikseleistä piirtymään oikeaan alakulmaan (muistiosoite <tt>$05ff</tt>)."
+ "Siirtolippu: Asetetaan, kun yhteenlasku tuottaa siirron; nollataan, kun vähennys vaatii lainan. Käytetään monitavuisessa aritmetiikassa ja siirto-/kiertokäskyissä (BCS/BCC)."
+ "Peru"
+ "Lähettämällä hyväksyt, että esimerkin lisenssinä käytetään <a href=\"https://creativecommons.org/licenses/by/4.0/deed.fi\">CC BY 4.0 (Nimeä 4.0 Kansainvälinen)</a>"
+ "Riko palikat mailalla ja pallolla."
+ "Break-lippu: Asetetaan, kun BRK (Break) -konekäsky suoritetaan. Käytetään erottamaan ohjelmistokeskeytykset (BRK) laitteistokeskeytyksistä. Auttaa tunnistamaan keskeytyksen lähteen keskeytyskäsittelijöissä."
+ "Haarautuminen"
+ "Sininen"
+ "Koska pelin tila tallennetaan pikselisijainteina, pelin renderöinti on hyvin suoraviivaista. Ensimmäinen aliohjelma, <tt>drawApple</tt>, on äärimmäisen yksinkertainen. Se asettaa <tt>Y</tt>:n nollaan, lataa satunnaisen värin akkumulaattoriin ja tallentaa tämän arvon <tt>($00),y</tt>:hyn. <tt>$00</tt> on paikka, johon omenan sijainti on tallennettu, joten <tt>($00),y</tt> viittaa tähän muistiosoitteeseen. Lue lisätietoja \"Epäsuora indeksoitu\" -kohdasta <a href=\"#addressing\">Osoitteistuksen tilat</a> -osiossa."
+ "Takaisin"
+ "Tekijä"
+ "Matalalla tasolla tämä aliohjelma on hieman monimutkaisempi. Ensin pituus ladataan <tt>X</tt>-rekisteriin, jota sitten vähennetään. Alla oleva pätkä näyttää madon alkumuistin."
+ "Assembly-tiedostot"
+ "Assembly"
+ "Käännetään koodia konekielelle..."
+ "Käännetty konekielelle onnistuneesti"
+ "Käännä seuraava koodi konekielelle, avaa sitten <b>Vianjäljitys</b>-näkymä ja tarkista <b>Heksavedos</b> nähdäksesi käännetyn koodin."
+ "Käännä koodi konekielelle, avaa sitten <b>Vianjäljitys</b>-näkymä ja askella koodin läpi tarkkaillen <tt>A</tt>- ja <tt>X</tt>-rekistereitä. Jotain hieman outoa tapahtuu rivillä <tt>ADC #$c4</tt>. Voisit odottaa, että <tt>$c4</tt>:n lisääminen <tt>$c0</tt>:aan antaisi <tt>$184</tt>, mutta suoritin antaa tulokseksi <tt>$84</tt>. Mistä tämä johtuu?"
+ "Käännä koodi konekielelle ja käytä <b>Askel</b>-toimintoa käydäksesi nämä kolme käskyä läpi. Vianjäljitysnäkymän <b>Heksamonitori</b> näyttää muistin osan ja voi auttaa ohjelmien suorituksen visualisoinnissa. <tt>STA $01</tt> tallentaa <tt>A</tt>-rekisterin arvon muistiosoitteeseen <tt>$01</tt>, ja <tt>ADC $01</tt> lisää muistiosoitteessa <tt>$01</tt> tallennetun arvon <tt>A</tt>-rekisteriin. <tt>$80 + $80</tt> pitäisi olla <tt>$100</tt>, mutta koska tämä on suurempi kuin tavu, <tt>A</tt>-rekisteriksi asetetaan <tt>$00</tt> ja siirtolippu asetetaan. Tämän lisäksi myös nollalippu asetetaan. Nollalippu asetetaan kaikissa käskyissä, joissa tulos on nolla."
+ "Kääntäminen konekielelle epäonnistui"
+ "Käännä konekielelle"
+ "Kuten aiemmin todettiin, neljää suuntaa edustavat sisäisesti luvut 1, 2, 4 ja 8. Jokainen näistä on kahden potenssi, joten ne esitetään binääriluvulla, jossa on yksi <tt>1</tt>:"
+ "Niin kauan kuin liikut yhden vaakakaistan sisällä, asiat ovat yksinkertaisia. Esimerkiksi oikealle siirtymiseen riittää vähiten merkitsevän tavun kasvattaminen (esim. <tt>$0200</tt>:sta tulee <tt>$0201</tt>). Alaspäin siirtymiseen lisätään <tt>$20</tt> (esim. <tt>$0200</tt>:sta tulee <tt>$0220</tt>). Vasen ja ylös ovat käänteisiä."
+ "Kuten aina, tämä julkaisu sisältää paljon pieniä korjauksia ja parannuksia."
+ "Arkkitehtuuriparannukset mahdollistavat paremman koodin jakamisen GNOME-, web- ja Android-alustojen välillä."
+ "Ulkoasun asetukset"
+ "Ulkoasu"
+ "Kaikki <tt>$</tt>-etuliitteellä varustetut luvut 6502-assemblykielessä (ja tässä oppaassa) ovat heksadesimaaleja (heksa). Jos heksaluvut eivät ole tuttuja, suosittelen lukemaan <a href=\"https://fi.wikipedia.org/wiki/Heksadesimaalij%%C3%1$A4rjestelm%%C3%2$A4\">Wikipedia-artikkelin</a>. <tt>#</tt>-etuliitteellä merkityt ovat suoria lukuarvoja. Muut luvut viittaavat muistiosoitteisiin."
+ "Tärkeä huomio on ero <tt>ADC #$01</tt>:n ja <tt>ADC $01</tt>:n välillä. Ensimmäinen lisää arvon <tt>$01</tt> <tt>A</tt>-rekisteriin, mutta toinen lisää muistiosoitteessa <tt>$01</tt> tallennetun arvon <tt>A</tt>-rekisteriin."
+ "Myös hyödyllisiä: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Melkein valmista!"
+ "Kaikki absoluuttista osoitteistusta tukevat käskyt (hyppykäskyjä lukuun ottamatta) voivat ottaa myös yksitavuisen osoitteen. Tätä osoitteistustapaa kutsutaan \"nollasivuksi\" – vain ensimmäinen sivu (ensimmäiset 256 tavua) muistista on käytettävissä. Tämä on nopeampaa, koska vain yksi tavu tarvitsee hakea, ja se vie myös vähemmän tilaa käännetyssä koodissa."
+ "Kaikki tiedostot"
+ "Tämän jälkeen akkumulaattoriin lisätään arvo <tt>2</tt>, jolloin saadaan lopullinen satunnaisluku välillä 2–5."
+ "Ensimmäisen kommenttilohkon (puolipisteellä alkavat rivit) jälkeen kaksi ensimmäistä riviä ovat:"
+ "Törmäystunnistuksen jälkeen päivitämme madon sijainnin. Korkealla tasolla tämä tapahtuu näin: Ensin siirretään jokainen vartalon tavupari yhden paikan ylöspäin muistissa. Toiseksi päivitetään pää nykyisen suunnan mukaan. Lopuksi, jos pää on rajojen ulkopuolella, käsitellään se törmäyksenä. Havainnollistan tätä ASCII-taiteella. Jokainen sulkupari sisältää x,y-koordinaatin tavuparin sijaan yksinkertaisuuden vuoksi."
+ "Jokaisen suuntaan siirtymisen jälkeen meidän täytyy myös tarkistaa, meneekö pää rajojen ulkopuolelle. Tämä käsitellään eri tavalla kullekin suunnalle. Vasemmalle ja oikealle voimme tarkistaa, onko pää käytännössä \"kierähtänyt ympäri\". Oikealle siirtyminen osoitteesta <tt>$021f</tt> kasvattamalla vähiten merkitsevää tavua johtaisi osoitteeseen <tt>$0220</tt>, mutta tämä on itse asiassa hyppy ensimmäisen rivin viimeisestä pikselistä toisen rivin ensimmäiseen pikseliin. Joten joka kerta kun siirrymme oikealle, meidän täytyy tarkistaa, onko uusi vähiten merkitsevä tavu <tt>$20</tt>:n monikerta. Tämä tehdään bittitarkistuksella maskia <tt>$1f</tt> vasten. Toivottavasti alla oleva kuva näyttää, miten viiden alimman bitin peittäminen paljastaa, onko luku <tt>$20</tt>:n monikerta vai ei."
+ "Adwaita"
+ "Osoitteistuksen tilat"
+ "Osoitteistuksen tilat"
+ "Osoite %1$s - tuntematon opcode"
+ "Käytettävissä on myös lisäpainikkeet: painike A (Enter/Return-näppäin, ASCII-koodi <tt>$0D</tt>) ja painike B (välilyönti, ASCII-koodi <tt>$20</tt>). Näitä voidaan käyttää lisäämään vuorovaikutusta peleissä. Suuntaohjauksessa sekä WASD-näppäimiä että nuolinäppäimiä voi käyttää vaihtokelpoisesti."
+ "Lisätty ohjetoiminto koodin muokkaamisen helpottamiseksi aloittelijoille"
+ "Lisätty tiedostonhallinta ohjelmien tallentamiseen ja lataamiseen"
+ "Lisää käskyjä piirtääksesi lisää pikseleitä."
+ "Akkumulaattori: päärekisteri laskennoille"
+ "Korostus: keltainen"
+ "Korostus: sinivihreä"
+ "Korostus: liuskekivi"
+ "Korostus: punainen"
+ "Korostus: liila"
+ "Korostus: pinkki"
+ "Korostus: oranssi"
+ "Korostus: vihreä"
+ "Korostus: sininen"
+ "Korostusväri"
+ "Absoluuttinen: <tt>$c000</tt>"
+ "Absoluuttinen,X ja absoluuttinen,Y: <tt>$c000,X</tt> ja <tt>$c000,Y</tt>"
+ "Tietoja - Opi 6502 Assembly"
+ "Täydellinen luettelo 6502:n käskyjoukosta löytyy <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">täältä</a> ja <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">täältä</a> (käytän yleensä molempia sivuja, sillä kummallakin on vahvuutensa ja heikkoutensa). Nämä sivut kertovat jokaisen käskyn argumentit, mitä rekistereitä ne käyttävät ja mitä lippuja ne asettavat. Ne ovat raamattusi."
+ "GitHub-issue on avattu selaimessasi. Tarkista ja lähetä se siellä saattaaksesi osallistumisesi loppuun. Hyväksymisen jälkeen esimerkkisi sisällytetään seuraavaan julkaisuun.\n\nJos esimerkkisi on liian suuri, koko sisältö kopioidaan leikepöydällesi, jotta voit liittää sen manuaalisesti GitHub-issueen."
+ "<tt>init</tt> ja <tt>loop</tt> ovat molemmat aliohjelmia. <tt>init</tt> alustaa pelin tilan ja <tt>loop</tt> on pelin pääsilmukka."
+ "<tt>checkSnakeCollision</tt> käy läpi madon vartalon osat vertaamalla jokaista tavuparia pään tavupariin. Jos osuma löytyy, peli päättyy."
+ "<tt>a9</tt> ja <tt>c9</tt> ovat suorittimen opcoodit välittömästi osoitetuille <tt>LDA</tt>- ja <tt>CMP</tt>-käskyille. <tt>01</tt> ja <tt>02</tt> ovat näiden käskyjen argumentit. <tt>d0</tt> on <tt>BNE</tt>:n opcoodi, ja sen argumentti on <tt>02</tt>. Tämä tarkoittaa \"hyppää seuraavien kahden tavun yli\" (<tt>85 22</tt>, <tt>STA $22</tt>:n käännetty versio). Kokeile muokata koodia niin, että <tt>STA</tt> ottaa kaksitavuisen absoluuttisen osoitteen yksitavuisen nollasivun osoitteen sijaan (esim. vaihda <tt>STA $22</tt> muotoon <tt>STA $2222</tt>). Käännä koodi uudelleen ja katso heksavedosta – <tt>BNE</tt>:n argumentin pitäisi nyt olla <tt>03</tt>, koska ohitettava käsky on nyt kolme tavua pitkä."
+ "<tt>X</tt> sisältää pikselin värin ja <tt>Y</tt> nykyisen pikselin sijainnin. Ensimmäinen silmukka piirtää nykyisen värin pikseliksi (<tt>A</tt>-rekisterin kautta), työntää värin pinoon ja kasvattaa sitten väriä ja sijaintia. Toinen silmukka vetää pinosta, piirtää vedetyn värin pikseliksi ja kasvattaa sijaintia. Kuten odottaa saattaa, tämä luo peilatun kuvion."
+ "<tt>SP</tt> on pino-osoitin. En käsittele pinoa vielä, mutta periaatteessa tätä rekisteriä vähennetään aina, kun tavu työnnetään pinoon, ja kasvatetaan, kun tavu vedetään pinosta."
+ "<tt>PC</tt> on ohjelmalaskuri – sen avulla suoritin tietää, missä kohtaa ohjelmaa ollaan. Se on kuin suoritettavan skriptin nykyinen rivinumero. Simulaattorissa koodi käännetään alkaen muistiosoitteesta <tt>$0600</tt>, joten <tt>PC</tt> alkaa aina siitä."
+ "<tt>JSR</tt> ja <tt>RTS</tt> (\"jump to subroutine\" ja \"return from subroutine\") ovat dynaaminen duo, jotka näkee yleensä yhdessä. <tt>JSR</tt>:ää käytetään hyppäämään nykyisestä sijainnista toiseen koodin osaan. <tt>RTS</tt> palaa edelliseen sijaintiin. Tämä on periaatteessa kuin funktion kutsuminen ja paluu."
+ "<tt>JMP</tt> on ehdoton hyppy. Tässä on todella yksinkertainen esimerkki sen toiminnasta:"
+ "<tt>BCC</tt> ja <tt>BCS</tt> (\"branch on carry clear\" ja \"branch on carry set\") haarautuvat siirtolipun perusteella. Kirjoita ohjelma, joka käyttää jompaakumpaa näistä."
+ "<b>Nollasivu</b>: <tt>$0000</tt>-<tt>$00FF</tt> (ensimmäiset 256 tavua, nopeampi pääsy)"
+ "<b>Nollasivu</b> (<tt>$c0</tt>): Pääsy muistiosoitteisiin <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Nollasivu,X/Y</b> (<tt>$c0,X</tt>): Lisää X/Y-rekisteri nollasivun osoitteeseen"
+ "<b>Z</b> (Zero): Asetetaan, kun tulos on nolla"
+ "<b>X, Y</b>: Indeksirekisterit osoitteistukseen ja laskentaan"
+ "<b>W</b> tai nuoli ylös (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Asetetaan, kun aritmeettinen operaatio aiheuttaa etumerkillisen ylivuodon"
+ "<b>Pino</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Tallenna rekisterit muistiin"
+ "<b>SP</b> (pino-osoitin): Osoittaa nykyiseen pinon kohtaan (alkaa arvosta <tt>$FF</tt>)"
+ "<b>SBC vaatii siirtolipun asetetuksi</b>: Aseta <tt>C</tt> ennen vähennystä (toimii käänteislainana). <tt>C</tt>:n nollautuminen SBC:n jälkeen tarkoittaa, että laina tapahtui."
+ "<b>S</b> tai nuoli alas (<tt>$73</tt>)"
+ "<b>Suhteellinen</b> (<tt>label</tt>): Haarautuminen käyttää etumerkillistä 8-bittistä siirtymää seuraavasta konekäskystä (−128…+127)"
+ "<b>Q</b> tai Enter/Return-näppäin (<tt>$0D</tt>)"
+ "<b>Ohjelmamuisti</b>: Alkaa osoitteesta <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Työnnä/vedä akkumulaattori pinoon/pinosta"
+ "<b>PC</b> (ohjelmalaskuri): Osoittaa seuraavaan suoritettavaan konekäskyyn"
+ "<b>N</b> (Negative): Asetetaan, kun tuloksen bitti 7 on asetettu"
+ "<b>LDA/LDX/LDY</b>: Lataa rekistereihin"
+ "<b>JSR/RTS</b>: Hyppää aliohjelmaan / Palaa aliohjelmasta"
+ "<b>JMP</b>: Ehdoton hyppy"
+ "<b>Epäsuora</b> (<tt>($c000)</tt>): Hae annetussa sijainnissa tallennettu osoite"
+ "<b>Epäsuora indeksoitu</b> (<tt>($c0),Y</tt>): Käytä nollasivun osoitetta osoittimena perusosoitteeseen, lisää sitten Y perusosoitteeseen"
+ "<b>Indeksoitu epäsuora</b> (<tt>($c0,X)</tt>): Lisää X nollasivun osoitteeseen, käytä sitten tulosta osoittimena varsinaiseen kohdeosoitteeseen"
+ "<b>Välitön</b> (<tt>#$c0</tt>): Käytä suoraan arvoa"
+ "<b>INX/INY/DEX/DEY</b>: Kasvata/vähennä rekistereitä"
+ "<b>I</b> (Interrupt): Asetetaan, kun keskeytykset on estetty"
+ "<b>E</b> tai välilyönti (<tt>$20</tt>)"
+ "<b>Näyttömuisti</b>: <tt>$0200</tt>-<tt>$05FF</tt> (käytetään näytön tulostukseen)"
+ "<b>Suuntaohjaimet</b>:"
+ "<b>D</b> tai nuoli oikealle (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Asetetaan, kun suoritin on BCD (Binary Coded Decimal) -tilassa"
+ "<b>Vertailuoperaatiot</b>: <tt>CMP/CPX/CPY</tt> asettavat <tt>N/Z/C</tt>-liput kuten vähennyslasku (rekisteri − muisti) tallentamatta tulosta."
+ "<b>C</b> (Carry): Asetetaan, kun aritmeettinen operaatio ylittää tavun"
+ "<b>BEQ/BNE/BCC/BCS</b>: Haaraudu, jos yhtä suuri/eri suuri/siirtolippu nolla/siirtolippu asetettu"
+ "<b>B</b> (Break): Asetetaan, kun BRK-konekäsky suoritetaan"
+ "<b>Toimintopainikkeet</b>:"
+ "<b>Absoluuttinen</b> (<tt>$c000</tt>): Pääsy mihin tahansa muistiosoitteeseen"
+ "<b>Absoluuttinen,X/Y</b> (<tt>$c000,X</tt>): Lisää X/Y-rekisteri absoluuttiseen osoitteeseen"
+ "<b>ADC/SBC</b>: Yhteen-/vähennyslasku siirtolipulla"
+ "<b>A</b> tai nuoli vasemmalle (<tt>$61</tt>)"
+ "<b>A</b> (akkumulaattori): Päärekisteri laskennoille ja datan käsittelylle"
+ "<b><tt>$f</tt></b>: Vaaleanharmaa (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Vaaleansininen (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Vaaleanvihreä (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Harmaa (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Tummanharmaa (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Vaaleanpunainen (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Viimeksi painettu näppäin (ASCII-koodi)"
+ "<b><tt>$FE</tt></b>: Satunnaislukugeneraattori (lukee satunnaisena arvona välillä 0-255)"
+ "<b><tt>$9</tt></b>: Ruskea (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Oranssi (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Keltainen (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Sininen (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Vihreä (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Liila (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Syaani (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Punainen (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Valkoinen (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Madon sijaintidata (pää, ruumiinosat, häntä)"
+ "<b><tt>$0</tt></b>: Musta (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Madon pituus"
+ "<b><tt>$02</tt></b>: Madon suunta (1=ylös, 2=oikealle, 4=alas, 8=vasemmalle)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Omenan sijainti"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> on tehnyt <a href=\"https://gist.github.com/wkjagt/9043907\">täysin kommentoidun gistin tästä lähdekoodista</a>, joten seuraa sitä saadaksesi lisätietoja."
+ "6502-assemblykielessä on joukko haarautumiskäskyjä, jotka kaikki haarautuvat sen perusteella, ovatko tietyt liput asetettuina vai eivät. Tässä esimerkissä tarkastelemme <tt>BNE</tt>-käskyä: \"Branch on not equal\" eli \"haaraudu, jos eri suuri\"."
+ "6502-pino täynnä! Kierretään..."
+ "6502-pino tyhjeni! Kierretään..."
+ "(Itse asiassa minulle on kerrottu luotettavasti, että 6502-suorittimia valmistaa yhä <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> ja niitä <a href=\"https://www.mouser.co.uk/c/?q=65C02\">myydään harrastelijoille</a>, joten 6502 <i>ei</i> selvästikään ole kuollut kieli! Kuka olisi uskonut?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-fr/strings.xml b/packages/app-android/data/Android/src/main/res/values-fr/strings.xml
index bb4f510b..4b2f7bb8 100644
--- a/packages/app-android/data/Android/src/main/res/values-fr/strings.xml
+++ b/packages/app-android/data/Android/src/main/res/values-fr/strings.xml
@@ -1,346 +1,485 @@
- "Learn 6502 Assembly"
- "Learn 6502 Assembly"
- "Learn 6502 Assembly"
- "Déboguez votre code assembleur 6502, exécutez-le étape par étape et visualisez la mémoire et les registres. Pour commencer, assemblez et exécutez votre programme."
- "The last subroutine, <tt>spinWheels</tt>, is just there because the game would run too fast otherwise. All <tt>spinWheels</tt> does is count <tt>X</tt> down from zero until it hits zero again. The first <tt>dex</tt> wraps, making <tt>X</tt> <tt>#$ff</tt>."
- "Next comes <tt>drawSnake</tt>. This is pretty simple too - we first undraw the tail and then draw the head. <tt>X</tt> is set to the length of the snake, so we can index to the right pixel, and we set <tt>A</tt> to zero then perform the write using the indexed indirect addressing mode. Then we reload <tt>X</tt> to index to the head, set <tt>A</tt> to one and store it at <tt>($10,x)</tt>. <tt>$10</tt> stores the two-byte location of the head, so this draws a white pixel at the current head position. As only the head and the tail of the snake move, this is enough to keep the snake moving."
- "Because the game state is stored in terms of pixel locations, rendering the game is very straightforward. The first subroutine, <tt>drawApple</tt>, is extremely simple. It sets <tt>Y</tt> to zero, loads a random colour into the accumulator, then stores this value into <tt>($00),y</tt>. <tt>$00</tt> is where the location of the apple is stored, so <tt>($00),y</tt> dereferences to this memory location. Read the \"Indirect indexed\" section in <a href=\"#addressing\">Addressing modes</a> for more details."
- "Rendering the game"
- "I won\'t explain in depth how each of the directions work, but the above explanation should give you enough to work it out with a bit of study."
- "After a move in each direction, we also need to check to see if the head would become out of bounds. This is handled differently for each direction. For left and right, we can check to see if the head has effectively \"wrapped around\". Going right from <tt>$021f</tt> by incrementing the least significant byte would lead to <tt>$0220</tt>, but this is actually jumping from the last pixel of the first row to the first pixel of the second row. So, every time we move right, we need to check if the new least significant byte is a multiple of <tt>$20</tt>. This is done using a bit check against the mask <tt>$1f</tt>. Hopefully the illustration below will show you how masking out the lowest 5 bits reveals whether a number is a multiple of <tt>$20</tt> or not."
- "Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from <tt>$02e1</tt> should lead to <tt>$0301</tt>. Luckily, this is fairly easy to accomplish. Adding <tt>$20</tt> to <tt>$e1</tt> results in <tt>$01</tt> and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte."
- "As long as you\'re moving within one of these horizontal strips, things are simple. For example, to move right, just increment the least significant byte (e.g. <tt>$0200</tt> becomes <tt>$0201</tt>). To go down, add <tt>$20</tt> (e.g. <tt>$0200</tt> becomes <tt>$0220</tt>). Left and up are the reverse."
- "You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> and <tt>$0500-$05ff</tt>. The first rows of pixels are <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
- "The next bit updates the head of the snake depending on the direction. This is probably the most complicated part of the code, and it\'s all reliant on how memory locations map to the screen, so let\'s look at that in more detail."
- "To test whether the direction is <tt>1</tt>, <tt>2</tt>, <tt>4</tt> or <tt>8</tt>, the code continually shifts right until the carry is set. One <tt>LSR</tt> means \"up\", two means \"right\", and so on."
- "Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into <tt>A</tt>. <tt>LSR</tt> means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is <tt>1</tt>, after <tt>LSR</tt> it is <tt>0</tt>, with the carry flag set."
- "The length is initialized to <tt>4</tt>, so <tt>X</tt> starts off as <tt>3</tt>. <tt>LDA $10,x</tt> loads the value of <tt>$13</tt> into <tt>A</tt>, then <tt>STA $12,x</tt> stores this value into <tt>$15</tt>. <tt>X</tt> is decremented, and we loop. Now <tt>X</tt> is <tt>2</tt>, so we load <tt>$12</tt> and store it into <tt>$14</tt>. This loops while <tt>X</tt> is positive (<tt>BPL</tt> means \"branch if positive\")."
- "At a low level, this subroutine is slightly more complex. First, the length is loaded into the <tt>X</tt> register, which is then decremented. The snippet below shows the starting memory for the snake."
- "After collision detection, we update the snake\'s location. This is done at a high level like so: First, move each byte pair of the body up one position in memory. Second, update the head according to the current direction. Finally, if the head is out of bounds, handle it as a collision. I\'ll illustrate this with some ascii art. Each pair of brackets contains an x,y coordinate rather than a pair of bytes for simplicity."
- "<tt>checkSnakeCollision</tt> loops through the snake\'s body segments, checking each byte pair against the head pair. If there is a match, then game over."
- "The next subroutine, <tt>checkCollision</tt>, defers to <tt>checkAppleCollision</tt> and <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> just checks to see if the two bytes holding the location of the apple match the two bytes holding the location of the head. If they do, the length is increased and a new apple position is generated."
- "Updating the game state"
- "So, looking at <tt>upKey</tt>, if the current direction is down (4), the bit test will be zero. <tt>BNE</tt> means \"branch if the zero flag is clear\", so in this case we\'ll branch to <tt>illegalMove</tt>, which just returns from the subroutine. Otherwise, the new direction (1 in this case) is stored in the appropriate memory location."
- "The <tt>BIT</tt> opcode is similar to <tt>AND</tt>, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we\'re looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, <tt>0001 AND 0001</tt> is not zero, but <tt>0001 AND 0010</tt> is zero."
- "As stated before, the four directions are represented internally by the numbers 1, 2, 4 and 8. Each of these numbers is a power of 2, thus they are represented by a binary number with a single <tt>1</tt>:"
- "Each section (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) first checks to see if the current direction is the opposite of the new direction. This requires another little detour."
- "Additional button inputs are also available: button A (Enter/Return key, ASCII code <tt>$0D</tt>) and button B (Space key, ASCII code <tt>$20</tt>). These can be used to add more interaction to your games. For directional controls, both WASD keys and arrow keys can be used interchangeably."
- "The first subroutine, <tt>readKeys</tt>, takes the job of accepting user input. The memory location <tt>$ff</tt> holds the ascii code of the most recent key press in this simulator. The value is loaded into the accumulator, then compared to <tt>$77</tt> (the hex code for W), <tt>$64</tt> (D), <tt>$73</tt> (S) and <tt>$61</tt> (A). If any of these comparisons are successful, the program branches to the appropriate section."
- "Reading the input"
- "Nearly all games have at their heart a game loop. All game loops have the same basic form: accept user input, update the game state, and render the game state. This loop is no different."
- "The game loop"
- "The result of this subroutine is to load a random byte into <tt>$00</tt>, and a random number between 2 and 5 into <tt>$01</tt>. Because the least significant byte comes first with indirect addressing, this translates into a memory address between <tt>$0200</tt> and <tt>$05ff</tt>: the exact range used to draw the display."
- "After this, the value <tt>2</tt> is added to the accumulator, to create a final random number in the range 2–5."
- "The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3."
- "The hex value <tt>$03</tt> is represented in binary as <tt>00000011</tt>. The <tt>AND</tt> opcode performs a bitwise AND of the argument with the accumulator. For example, if the accumulator contains the binary value <tt>10101010</tt>, then the result of <tt>AND</tt> with <tt>00000011</tt> will be <tt>00000010</tt>."
- "The next subroutine, <tt>generateApplePosition</tt>, sets the apple location to a random position on the display. First, it loads a random byte into the accumulator (<tt>$fe</tt> is a random number generator in this simulator). This is stored into <tt>$00</tt>. Next, a different random byte is loaded into the accumulator, which is then <tt>AND</tt>-ed with the value <tt>$03</tt>. This part requires a bit of a detour."
- "which represents the indirectly-addressed memory locations <tt>$0411</tt>, <tt>$0410</tt> and <tt>$040f</tt> (three pixels in the middle of the display). I\'m labouring this point, but it\'s important to fully grok how indirect addressing works."
- "This loads the value <tt>$11</tt> into the memory location <tt>$10</tt>, the value <tt>$10</tt> into <tt>$12</tt>, and <tt>$0f</tt> into <tt>$14</tt>. It then loads the value <tt>$04</tt> into <tt>$11</tt>, <tt>$13</tt> and <tt>$15</tt>. This leads to memory like this:"
- "The <tt>init</tt> subroutine defers to two subroutines, <tt>initSnake</tt> and <tt>generateApplePosition</tt>. <tt>initSnake</tt> sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at <tt>$10</tt> contains the screen location of the head, the pair at <tt>$12</tt> contains the location of the single body segment, and <tt>$14</tt> contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:"
- "Initialization"
- "Finally, byte <tt>$03</tt> contains the current length of the snake, in terms of bytes in memory (so a length of 4 means 2 pixels)."
- "The first two bytes hold the location of the apple. This is updated every time the snake eats the apple. Byte <tt>$02</tt> contains the current direction. <tt>1</tt> means up, <tt>2</tt> right, <tt>4</tt> down, and <tt>8</tt> left. The reasoning behind these numbers will become clear later."
- "The zero page of memory is used to store a number of game state variables, as noted in the comment block at the top of the game. Everything in <tt>$00</tt>, <tt>$01</tt> and <tt>$10</tt> upwards is a pair of bytes representing a two-byte memory location that will be looked up using indirect addressing. These memory locations will all be between <tt>$0200</tt> and <tt>$05ff</tt> - the section of memory corresponding to the game console. For example, if <tt>$00</tt> and <tt>$01</tt> contained the values <tt>$01</tt> and <tt>$02</tt>, they would be referring to the second pixel of the display ( <tt>$0201</tt> - remember, the least significant byte comes first in indirect addressing)."
- "Zero page usage"
- "First, <tt>readkeys</tt> checks to see if one of the direction keys (W, A, S, D) was pressed, and if so, sets the direction of the snake accordingly. Then, <tt>checkCollision</tt> checks to see if the snake collided with itself or the apple. <tt>updateSnake</tt> updates the internal representation of the snake, based on its direction. Next, the apple and snake are drawn. Finally, <tt>spinWheels</tt> makes the processor do some busy work, to stop the game from running too quickly. Think of it like a sleep command. The game keeps running until the snake collides with the wall or itself."
- "The <tt>loop</tt> subroutine itself just calls a number of subroutines sequentially, before looping back on itself:"
- "<tt>init</tt> and <tt>loop</tt> are both subroutines. <tt>init</tt> initializes the game state, and <tt>loop</tt> is the main game loop."
- "After the initial block of comments (lines starting with semicolons), the first two lines are:"
- "Overall structure"
- "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> made a <a href=\"https://gist.github.com/wkjagt/9043907\">fully annotated gist of this source code</a>, so follow along with that for more details."
- "The code block below contains the entire source code of the game. I\'ll explain how it works in the following sections."
- "Here\'s an example. Note that immediate operands are still prefixed with a <tt>#</tt>."
- "In this assembler, we can define descriptive constants (or symbols) that represent numbers. The rest of the code can then simply use the constants instead of the literal number, which immediately makes it obvious what we\'re dealing with. You can use letters, digits and underscores in a name."
- "Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we\'ll now let the assembler do some of the mundane work for us."
- "Now, let\'s put all this knowledge to good use, and make a game! We\'re going to be making a really simple version of the classic game \'Snake\'."
- "Creating a game"
- "The first instruction causes execution to jump to the <tt>init</tt> label. This sets <tt>X</tt>, then returns to the next instruction, <tt>JSR loop</tt>. This jumps to the <tt>loop</tt> label, which increments <tt>X</tt> until it is equal to <tt>$05</tt>. After that we return to the next instruction, <tt>JSR end</tt>, which jumps to the end of the file. This illustrates how <tt>JSR</tt> and <tt>RTS</tt> can be used together to create modular code."
- "The processor knows where to return to because <tt>JSR</tt> pushes the address minus one of the next instruction onto the stack before jumping to the given location. <tt>RTS</tt> pops this location, adds one to it, and jumps to that location. An example:"
- "<tt>JSR</tt> and <tt>RTS</tt> (\"jump to subroutine\" and \"return from subroutine\") are a dynamic duo that you\'ll usually see used together. <tt>JSR</tt> is used to jump from the current location to another part of the code. <tt>RTS</tt> returns to the previous position. This is basically like calling a function and returning."
+ "Apprendre l\'assembleur 6502"
+ "Apprendre l\'assembleur 6502"
+ "Apprendre l\'assembleur 6502"
+ "வணக்கம் ! Nous sommes heureux d\'accueillir la traduction en tamoul, contribuée par தமிழ்நேரம். நன்றி !"
+ "qui représente les emplacements mémoire adressés indirectement <tt>$0411</tt>, <tt>$0410</tt> et <tt>$040f</tt> (trois pixels au milieu de l\'affichage). J\'insiste sur ce point, mais il est important de bien comprendre comment fonctionne l\'adressage indirect."
+ "sortie-wdm"
+ "programmation"
+ "apprentissage"
+ "par %1$s"
+ "_Préférences"
+ "Page zéro : <tt>$c0</tt>"
+ "Page zéro,Y : <tt>$c0,Y</tt>"
+ "Page zéro,X : <tt>$c0,X</tt>"
+ "Utilisation de la page zéro"
+ "Page Zéro ($0000-$00FF)"
+ "Drapeau Zéro : Défini quand le résultat d\'une opération est zéro. Essentiel pour les branchements conditionnels - la plupart des instructions de saut conditionnel (BEQ, BNE) vérifient ce drapeau pour déterminer le flux du programme selon qu\'une valeur est zéro."
+ "Votre fichier a des modifications non sauvegardées. Les modifications seront perdues si vous ne les sauvegardez pas."
+ "Vous avez vu <tt>TAX</tt>. Vous pouvez probablement deviner ce que font <tt>TAY</tt>, <tt>TXA</tt> et <tt>TYA</tt>, mais écrivez du code pour tester vos hypothèses."
+ "Vous avez soutenu ce projet open source en achetant l\'application. Merci !"
+ "Vous pouvez considérer l\'écran comme quatre bandes horizontales de 32 × 8 pixels. Ces bandes se mappent à <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> et <tt>$0500-$05ff</tt>. Les premières rangées de pixels sont <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
+ "Jaune"
+ "Écrivez et modifiez du code avec un éditeur de code intégré"
+ "Avec tous ces exemples, vous trouverez peut-être utile d\'utiliser le <b>Moniteur hexadécimal</b> dans la vue <b>Déboguer</b> pour observer les changements en mémoire. Sélectionnez une région mémoire dans la liste pour voir cette section — par exemple, <b>Mémoire d\'affichage ($0200–$05FF)</b> pour observer les pixels de l\'écran, ou <b>Page Zéro ($0000–$00FF)</b> pour inspecter les 256 premiers octets."
+ "Avec l\'adressage absolu, l\'emplacement mémoire complet est utilisé comme argument de l\'instruction. Par exemple :"
+ "Bienvenue à la traduction vietnamienne, entièrement contribuée par Loc Huynh (hthienloc)."
+ "Bienvenue à la traduction polonaise, initialement contribuée par Micro Wave. Dziękujemy!"
+ "Nous avons déjà jeté un petit coup d\'œil à la section d\'état du processeur (celle avec <tt>A</tt>, <tt>PC</tt> etc.), mais qu\'est-ce que ça signifie ?"
+ "Nous avons ajouté une nouvelle section Exemples dans l\'onglet Apprendre où vous pouvez explorer et exécuter des programmes 6502 entièrement commentés directement dans l\'application. Commencez avec notre exemple du jeu Snake et voyez comment ces pixels prennent vie !"
+ "Les valeurs <tt>$00</tt>-<tt>$0F</tt> représentent 16 couleurs différentes (<tt>$00</tt>=noir, <tt>$01</tt>=blanc)"
+ "Utiliser une couleur principale personnalisée"
+ "Utiliser une couleur d\'accent personnalisée"
+ "Mise à jour de l\'état du jeu"
+ "Modifications non sauvegardées"
+ "Contrairement à page zéro,Y, absolu,Y ne peut pas être utilisé avec <tt>STX</tt> mais peut être utilisé avec <tt>LDA</tt> et <tt>STA</tt>."
+ "Sous le capot : mise à jour vers TypeScript 6, Vite 8 et d\'autres mises à jour de dépendances pour de meilleures performances et stabilité."
+ "Impossible de déplacer le code en dehors de la mémoire 64k"
+ "Impossible de trouver/analyser l\'adresse/étiquette donnée"
+ "Deux des instructions de pile sont <tt>PHA</tt> et <tt>PLA</tt>, \"push accumulator\" et \"pull accumulator\". Ci-dessous un exemple de ces deux en action."
+ "Deux nouveaux programmes d\'exemple, et tous les deux viennent de vous : Dino Run par Jacob et Line Buster 6502 par edit12. Ce sont les premiers exemples envoyés avec le bouton de partage, et nous aimerions en recevoir d\'autres."
+ "Tutoriel <sub>par <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, sous licence CC BY 4.0</sub>"
+ "Tutoriel"
+ "Essayez d\'écrire des extraits de code qui utilisent chacun des modes d\'adressage 6502. Rappelez-vous, vous pouvez utiliser le <b>Moniteur hexadécimal</b> dans la vue <b>Déboguer</b> pour surveiller une section de mémoire."
+ "Essayez des programmes d\'exemple pour le microprocesseur 6502."
+ "Essayez des programmes d\'exemple"
+ "Essayez de changer la couleur des trois pixels."
+ "Basculer la barre latérale"
+ "Pour tester si la direction est <tt>1</tt>, <tt>2</tt>, <tt>4</tt> ou <tt>8</tt>, le code décale continuellement vers la droite jusqu\'à ce que la retenue soit définie. Un <tt>LSR</tt> signifie \"haut\", deux signifie \"droite\", et ainsi de suite."
+ "Titre"
+ "Cette version apporte un thème vibrant inspiré des consoles portables avec des couleurs personnalisables. Nous avons introduit des mises en page adaptatives pour tablettes et ordinateurs de bureau qui gardent tout en vue, parfaites pour ces sessions de codage marathon quand on apprend à développer des jeux rétro en assembleur. Gros merci à notre nouveau contributeur @mmartinortiz pour les excellentes idées de mise en page de bureau. Il y a aussi des améliorations techniques cool, comme la stricte vérification TypeScript, des schémas de style GtkSourceView personnalisés, et des contrôles de débogueur améliorés pour un développement plus fluide."
+ "Celui-ci est un peu bizarre. C\'est comme un croisement entre page zéro,X et indirect. En gros, vous prenez l\'adresse de page zéro, ajoutez la valeur du registre <tt>X</tt>, puis utilisez cela pour rechercher une adresse à deux octets. Par exemple :"
+ "Cela charge la valeur <tt>$11</tt> dans l\'emplacement mémoire <tt>$10</tt>, la valeur <tt>$10</tt> dans <tt>$12</tt>, et <tt>$0f</tt> dans <tt>$14</tt>. Il charge ensuite la valeur <tt>$04</tt> dans <tt>$11</tt>, <tt>$13</tt> et <tt>$15</tt>. Cela conduit à une mémoire comme ceci :"
+ "C\'est là que l\'adressage devient intéressant. Dans ce mode, une adresse de page zéro est donnée, puis la valeur du registre <tt>X</tt> est ajoutée. Voici un exemple :"
+ "C\'est l\'équivalent de page zéro,X, mais ne peut être utilisé qu\'avec <tt>LDX</tt> et <tt>STX</tt>."
+ "Ce sont les versions d\'adressage absolu de page zéro,X et page zéro,Y. Par exemple :"
+ "Il y a aussi une raison très pratique : le développement de jeux rétro. La scène homebrew est vivante et bien portante—de nouveaux jeux sont encore <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">publiés pour la NES</a> (certains même sous forme de cartouches physiques) et pour beaucoup d\'autres systèmes classiques ; la NES n\'est qu\'un exemple. Même si votre cible est quelque chose comme la SNES, commencer par le 6502 paie : le CPU de la SNES (65C816) est rétro-compatible avec le 6502, donc les fondamentaux que vous apprenez ici—registres, modes d\'adressage, et l\'ensemble d\'instructions de base—se transfèrent directement."
+ "Alors pourquoi le 6502 ? Pourquoi pas un langage assembleur <i>utile</i>, comme <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a> ? Eh bien, je ne pense pas que l\'apprentissage de x86 soit utile. Je ne pense pas que vous ayez jamais besoin d\'<i>écrire</i> du langage assembleur dans votre travail quotidien - pour certaines personnes c\'est un exercice académique, quelque chose pour élargir votre esprit et votre réflexion. Le 6502 a été écrit à l\'origine dans une époque différente, une époque où la majorité des développeurs écrivaient directement en assembleur, plutôt que dans ces nouveaux langages de programmation de haut niveau à la mode. Donc, il a été conçu pour être écrit par des humains. Les langages assembleur plus modernes sont destinés à être écrits par des compilateurs, donc laissons-les faire. De plus, le 6502 est <i>amusant</i>. Personne n\'a jamais appelé x86 <i>amusant</i>."
+ "La page zéro de la mémoire est utilisée pour stocker un certain nombre de variables d\'état du jeu, comme noté dans le bloc de commentaires en haut du jeu. Tout dans <tt>$00</tt>, <tt>$01</tt> et <tt>$10</tt> et au-dessus est une paire d\'octets représentant un emplacement mémoire à deux octets qui sera recherché en utilisant l\'adressage indirect. Ces emplacements mémoire seront tous entre <tt>$0200</tt> et <tt>$05ff</tt> - la section de mémoire correspondant à la console de jeu. Par exemple, si <tt>$00</tt> et <tt>$01</tt> contenaient les valeurs <tt>$01</tt> et <tt>$02</tt>, ils feraient référence au deuxième pixel de l\'affichage (<tt>$0201</tt> - rappelez-vous, l\'octet de poids faible vient en premier dans l\'adressage indirect)."
+ "La pile dans un processeur 6502 est comme toute autre pile - les valeurs sont poussées dessus et dépilées (\"pull\" dans le jargon 6502). La profondeur actuelle de la pile est mesurée par le pointeur de pile, un registre spécial. La pile vit en mémoire entre <tt>$0100</tt> et <tt>$01ff</tt>. Le pointeur de pile est initialement <tt>$ff</tt>, ce qui pointe vers l\'emplacement mémoire <tt>$01ff</tt>. Quand un octet est poussé sur la pile, le pointeur de pile devient <tt>$fe</tt>, soit l\'emplacement mémoire <tt>$01fe</tt>, et ainsi de suite."
+ "La pile"
+ "Le jeu du serpent du tutoriel"
+ "Le résultat de cette sous-routine est de charger un octet aléatoire dans <tt>$00</tt>, et un nombre aléatoire entre 2 et 5 dans <tt>$01</tt>. Parce que l\'octet de poids faible vient en premier avec l\'adressage indirect, cela se traduit par une adresse mémoire entre <tt>$0200</tt> et <tt>$05ff</tt> : la plage exacte utilisée pour dessiner l\'affichage."
+ "Le processeur sait où retourner parce que <tt>JSR</tt> pousse l\'adresse moins un de l\'instruction suivante sur la pile avant de sauter vers l\'emplacement donné. <tt>RTS</tt> dépile cet emplacement, ajoute un, et saute vers cet emplacement. Un exemple :"
+ "Le problème est que <tt>$184</tt> est trop grand pour tenir dans un seul octet (le max est <tt>$FF</tt>), et les registres ne peuvent contenir qu\'un seul octet. C\'est OK cependant ; le processeur n\'est pas vraiment stupide. Si vous regardiez attentivement, vous auriez remarqué que le drapeau de retenue était défini à <tt>1</tt> après cette opération. C\'est comme ça que vous le savez."
+ "L\'opposé de <tt>BNE</tt> est <tt>BEQ</tt>. Essayez d\'écrire un programme qui utilise <tt>BEQ</tt>."
+ "L\'opposé de <tt>ADC</tt> est <tt>SBC</tt> (subtract with carry - soustraction avec retenue). Écrivez un programme qui utilise cette instruction."
+ "Le jeu de course hors ligne du navigateur, en assembleur 6502"
+ "La sous-routine suivante, <tt>generateApplePosition</tt>, définit l\'emplacement de la pomme à une position aléatoire sur l\'affichage. D\'abord, elle charge un octet aléatoire dans l\'accumulateur (<tt>$fe</tt> est un générateur de nombres aléatoires dans ce simulateur). Celle-ci est stockée dans <tt>$00</tt>. Ensuite, un octet aléatoire différent est chargé dans l\'accumulateur, qui subit ensuite un <tt>AND</tt> avec la valeur <tt>$03</tt>. Cette partie nécessite un petit détour."
+ "La sous-routine suivante, <tt>checkCollision</tt>, délègue à <tt>checkAppleCollision</tt> et <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> vérifie simplement si les deux octets contenant l\'emplacement de la pomme correspondent aux deux octets contenant l\'emplacement de la tête. Si c\'est le cas, la longueur est augmentée et une nouvelle position de pomme est générée."
+ "La ligne suivante, <tt>BNE decrement</tt>, décalera l\'exécution vers l\'étiquette decrement si le drapeau <tt>Z</tt> est défini à <tt>0</tt> (signifiant que les deux valeurs dans la comparaison <tt>CPX</tt> n\'étaient pas égales), sinon elle ne fait rien et nous stockons <tt>X</tt> dans <tt>$0201</tt>, puis terminons le programme."
+ "La partie suivante met à jour la tête du serpent selon la direction. C\'est probablement la partie la plus compliquée du code, et tout dépend de la façon dont les emplacements mémoire se mappent à l\'écran, donc regardons ça en détail."
+ "La longueur est initialisée à <tt>4</tt>, donc <tt>X</tt> commence à <tt>3</tt>. <tt>LDA $10,x</tt> charge la valeur de <tt>$13</tt> dans <tt>A</tt>, puis <tt>STA $12,x</tt> stocke cette valeur dans <tt>$15</tt>. <tt>X</tt> est décrémenté, et nous bouclons. Maintenant <tt>X</tt> est <tt>2</tt>, donc nous chargeons <tt>$12</tt> et le stockons dans <tt>$14</tt>. Cela boucle tant que <tt>X</tt> est positif (<tt>BPL</tt> signifie \"branch if positive\")."
+ "La dernière sous-routine, <tt>spinWheels</tt>, est juste là parce que le jeu fonctionnerait trop vite sinon. Tout ce que fait <tt>spinWheels</tt> c\'est compter <tt>X</tt> à rebours depuis zéro jusqu\'à ce qu\'il atteigne zéro à nouveau. Le premier <tt>dex</tt> boucle, faisant <tt>X</tt> <tt>#$ff</tt>."
+ "La dernière section affiche les drapeaux du processeur. Chaque drapeau est un bit, donc les sept drapeaux vivent dans un seul octet. Les drapeaux sont définis par le processeur pour donner des informations sur l\'instruction précédente. Plus d\'infos là-dessus plus tard. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">En savoir plus sur les registres et drapeaux ici</a>."
+ "La valeur hex <tt>$03</tt> est représentée en binaire comme <tt>00000011</tt>. L\'opcode <tt>AND</tt> effectue un ET bit à bit de l\'argument avec l\'accumulateur. Par exemple, si l\'accumulateur contient la valeur binaire <tt>10101010</tt>, alors le résultat de <tt>AND</tt> avec <tt>00000011</tt> sera <tt>00000010</tt>."
+ "L\'hex devrait ressembler à quelque chose comme ça :"
+ "La boucle de jeu"
+ "Les deux premiers octets contiennent l\'emplacement de la pomme. Celle-ci est mise à jour chaque fois que le serpent mange la pomme. L\'octet <tt>$02</tt> contient la direction actuelle. <tt>1</tt> signifie haut, <tt>2</tt> droite, <tt>4</tt> bas et <tt>8</tt> gauche. Le raisonnement derrière ces nombres deviendra clair plus tard."
+ "La première sous-routine, <tt>readKeys</tt>, se charge d\'accepter les entrées utilisateur. L\'emplacement mémoire <tt>$ff</tt> contient le code ASCII de la touche la plus récemment pressée dans ce simulateur. La valeur est chargée dans l\'accumulateur, puis comparée à <tt>$77</tt> (le code hex pour W), <tt>$64</tt> (D), <tt>$73</tt> (S) et <tt>$61</tt> (A). Si l\'une de ces comparaisons réussit, le programme branche vers la section appropriée."
+ "La première ligne affiche les registres <tt>A</tt>, <tt>X</tt> et <tt>Y</tt> (<tt>A</tt> est souvent appelé \"l\'accumulateur\"). Chaque registre contient un seul octet. La plupart des opérations travaillent sur le contenu de ces registres."
+ "La première instruction fait sauter l\'exécution vers l\'étiquette <tt>init</tt>. Celle-ci définit <tt>X</tt>, puis retourne à l\'instruction suivante, <tt>JSR loop</tt>. Celle-ci saute vers l\'étiquette <tt>loop</tt>, qui incrémente <tt>X</tt> jusqu\'à ce qu\'il soit égal à <tt>$05</tt>. Après cela, nous retournons à l\'instruction suivante, <tt>JSR end</tt>, qui saute à la fin du fichier. Cela illustre comment <tt>JSR</tt> et <tt>RTS</tt> peuvent être utilisés ensemble pour créer du code modulaire."
+ "L\'effet de ceci est de masquer les deux bits de poids faible de l\'accumulateur, en mettant les autres à zéro. Cela convertit un nombre dans la plage 0–255 en un nombre dans la plage 0–3."
+ "Le bloc de code ci-dessous contient tout le code source du jeu. Je vais expliquer comment il fonctionne dans les sections suivantes."
+ "L\'écran noir de la console de jeu devrait maintenant afficher trois \"pixels\" colorés en haut à gauche."
+ "L\'application est conçue pour la police d\'interface de GNOME. Sur les autres systèmes, elle est affichée avec la police de ce système, qui est généralement plus petite."
+ "Le registre d\'index Y est similaire à X et n\'a pas de fonctions spéciales. Couramment utilisé pour l\'adressage indexé et le déplacement de données."
+ "Le registre d\'index X est utilisé pour les modes d\'adressage indexé et les opérations de comptage. Il peut contenir des compteurs de boucle, des indices de tableau, et est essentiel pour accéder à des emplacements mémoire relatifs à une adresse de base en utilisant X comme décalage. Spécial : TSX/TXS transfèrent X vers/depuis le pointeur de pile."
+ "Le pointeur de pile gère la pile d\'appels pour les sous-routines et les interruptions. Il commence à $FF (sommet de la pile) et croît vers le bas. Utilisé pour les opérations PUSH/PULL, les appels JSR/RTS et la gestion des interruptions. Essentiel pour les appels de fonctions imbriquées."
+ "Le compteur de programme contient l\'adresse mémoire de l\'instruction suivante à exécuter. Il s\'incrémente automatiquement après chaque instruction et peut être modifié par des sauts, branchements, appels et retours. Essentiel pour le contrôle du flux du programme et le débogage."
+ "L\'Accumulateur (A) est le registre principal pour les opérations arithmétiques et logiques. Tous les calculs de base comme ADD, SUBTRACT, AND, OR, etc. utilisent ce registre. C\'est le registre le plus fréquemment utilisé en programmation assembleur 6502."
+ "La sous-routine <tt>loop</tt> elle-même appelle simplement un certain nombre de sous-routines séquentiellement, avant de boucler sur elle-même :"
+ "La sous-routine <tt>init</tt> délègue à deux sous-routines, <tt>initSnake</tt> et <tt>generateApplePosition</tt>. <tt>initSnake</tt> définit la direction du serpent, sa longueur, puis charge les emplacements mémoire initiaux de la tête et du corps du serpent. La paire d\'octets à <tt>$10</tt> contient l\'emplacement écran de la tête, la paire à <tt>$12</tt> contient l\'emplacement du segment de corps unique, et <tt>$14</tt> contient l\'emplacement de la queue (la queue est le dernier segment du corps et est dessinée en noir pour maintenir le serpent en mouvement). Cela se produit dans le code suivant :"
+ "L\'opcode <tt>BIT</tt> est similaire à <tt>AND</tt>, mais le calcul n\'est utilisé que pour définir le drapeau zéro - le résultat actuel est ignoré. Le drapeau zéro est défini seulement si le résultat du ET logique de l\'accumulateur avec l\'argument est zéro. Quand nous regardons les puissances de deux, le drapeau zéro ne sera défini que si les deux nombres ne sont pas identiques. Par exemple, <tt>0001 AND 0001</tt> n\'est pas zéro, mais <tt>0001 AND 0010</tt> l\'est."
+ "Le 6502 utilise un bus d\'adresse 16 bits, ce qui signifie qu\'il y a 65536 octets de mémoire disponibles pour le processeur. Rappelez-vous qu\'un octet est représenté par deux caractères hexadécimaux, donc les emplacements mémoire sont généralement représentés comme <tt>$0000 - $ffff</tt>. Il existe différentes façons de faire référence à ces emplacements mémoire, comme détaillé ci-dessous."
+ "Merci d\'utiliser des logiciels open source."
+ "Teste le bit 0 de A avec LSR et BCC, puis place 1 ou 0 dans A selon le résultat"
+ "Testez vos créations sur une console de jeu virtuelle"
+ "Tervetuloa ! Nous avons le plaisir d\'accueillir la traduction finnoise, aimablement contribuée par Jiri Grönroos. Kiitos !"
+ "Sarcelle"
+ "Police système, taille GNOME"
+ "Valeur par défaut du système"
+ "Erreur de syntaxe ligne %1$d : %2$s"
+ "Soutien"
+ "Soutenir"
+ "Soumettre"
+ "Style"
+ "Arrêté"
+ "Guide pas à pas de l\'assembleur 6502"
+ "Pas à pas"
+ "Drapeaux d\'état"
+ "Pointeur de pile : Pointe vers la position de la pile"
+ "Exemple de Pile"
+ "Pile ($0100-$01FF)"
+ "Emplacements mémoire spéciaux (dans le simulateur)"
+ "URL source"
+ "Certaines instructions ne traitent pas d\'emplacements mémoire (par ex. <tt>INX</tt> - incrémente le registre <tt>X</tt>). Celles-ci sont dites avoir un adressage implicite - l\'argument est implicite dans l\'instruction."
+ "Pourquoi vouloir apprendre le 6502 ? C\'est un langage mort, non ? Eh bien, le latin l\'est aussi. Et on l\'enseigne encore. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">C.Q.F.D.</a>"
+ "Que fait réellement ce programme ? Parcourons-le étape par étape. Cliquez sur <b>Réinitialiser</b>, puis utilisez <b>Pas à pas</b> pour exécuter le programme une instruction à la fois. La vue <b>Déboguer</b> affiche les registres et la mémoire — c\'est un onglet séparé sur une petite fenêtre, et le panneau sous la console de jeu sur une fenêtre large. Cliquez une fois sur <b>Pas à pas</b> et vous remarquerez dans la vue Déboguer que <tt>A=</tt> est passé de <tt>$00</tt> à <tt>$01</tt>, et <tt>PC=</tt> de <tt>$0600</tt> à <tt>$0602</tt>."
+ "L\'instruction <tt>STA $0200</tt> stocke la valeur du registre <tt>A</tt> à l\'emplacement mémoire <tt>$0200</tt>. Cliquez sur <b>Step</b> quatre fois de plus pour exécuter le reste des instructions, en gardant un œil sur le registre <tt>A</tt> pendant qu\'il change."
+ "En regardant <tt>upKey</tt>, si la direction actuelle est bas (4), le test de bit sera zéro. <tt>BNE</tt> signifie \"branch if the zero flag is clear\" (branche si le drapeau zéro est effacé), donc dans ce cas nous branchons vers <tt>illegalMove</tt>, qui retourne simplement de la sous-routine. Sinon, la nouvelle direction (1 dans ce cas) est stockée à l\'emplacement mémoire approprié."
+ "Allons-y ! Cette application contient un <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">assembleur et simulateur JavaScript 6502</a> que j\'ai adapté pour ce tutoriel interactif. Cliquez sur le bouton <b>Copier</b> dans le bloc de code ci-dessous pour copier le code d\'exemple dans l\'éditeur. Utilisez ensuite <b>Assembler</b> pour assembler le code, puis <b>Exécuter</b> pour le lancer. Vous trouverez ces actions sous forme de boutons ou dans le menu."
+ "Jusqu\'à présent, nous ne pouvons écrire que des programmes basiques sans logique de branchement. Changeons ça."
+ "Utilisation mémoire du jeu Snake"
+ "Données du jeu Snake ($00-$15)"
+ "Jeu du Serpent"
+ "Ardoise"
+ "Échec du simulateur"
+ "Simulateur"
+ "Les exemples de code partagés incluent désormais les informations de licence CC-BY-4.0, clarifiant comment la communauté peut utiliser et s\'appuyer sur vos contributions."
+ "Partagez votre exemple"
+ "Partager l\'exemple"
+ "Partager"
+ "Shalom ! Nous sommes heureux d\'accueillir la traduction en hébreu, entièrement contribuée par Menachem (naattxx). Toda raba !"
+ "Sérieusement, je pense qu\'il est précieux de comprendre le langage assembleur. Le langage assembleur est le niveau d\'abstraction le plus bas en informatique - le point où le code reste lisible. Le langage assembleur se traduit directement en octets exécutés par le processeur de votre ordinateur. Si vous comprenez comment ça marche, vous devenez en quelque sorte un <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magicien</a> de l\'informatique."
+ "Selamat datang ! Nous accueillons également la traduction en indonésien, aimablement contribuée par Arif Budiman. Terima kasih !"
+ "L\'écran correspond à la plage mémoire <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Découvrez de nombreuses nouvelles traductions : français, interlingua, portugais, portugais (Brésil), néerlandais, espagnol, ukrainien, japonais et chinois (simplifié)"
+ "Enregistré sous %1$s"
+ "Enregistrer les modifications ?"
+ "Enregistrer sous..."
+ "Enregistrer le fichier assembleur"
+ "Enregistrer"
+ "Jeu Snake en cours d\'exécution"
+ "Exécuter"
+ "Réécrivez le premier exemple de cette section en utilisant le registre <tt>Y</tt> au lieu du registre <tt>X</tt>."
+ "Vérifiez comment votre exemple apparaîtra aux autres. Cliquer sur <b>Soumettre</b> créera un ticket sur GitHub. Vous devrez vous connecter avec votre compte GitHub pour compléter la soumission."
+ "Reprendre"
+ "Réinitialiser"
+ "Rendu du jeu"
+ "Relatif : <tt>$c0</tt> (ou étiquette)"
+ "L\'adressage relatif est utilisé pour les instructions de branchement. Ces instructions prennent un seul octet, qui est utilisé comme décalage par rapport à l\'instruction suivante."
+ "Registres et drapeaux"
+ "Registres"
+ "Plage d\'adresses du moniteur hexadécimal par défaut réduite pour une meilleure efficacité"
+ "Rouge"
+ "Lecture de l\'entrée"
+ "Aléatoire/Entrée ($FE-$FF)"
+ "Quitter"
+ "Astuces rapides"
+ "Violet"
+ "Programmer des consoles de jeux vintage"
+ "Programme en pause"
+ "Programme terminé. Réinitialisez pour parcourir à nouveau le programme pas à pas."
+ "Programme terminé à PC=$%1$s"
+ "Programme terminé"
+ "Stockage du programme ($0600-$FFFF)"
+ "Compteur de programme : Pointe vers l\'instruction suivante"
+ "Registre d\'état du processeur"
+ "Drapeaux du processeur"
+ "Primaire : Jaune"
+ "Primaire : Bleu sarcelle"
+ "Primaire : Ardoise"
+ "Primaire : Rouge"
+ "Primaire : Violet"
+ "Primaire : Rose"
+ "Primaire : Orange"
+ "Primaire : Vert"
+ "Primaire : Bleu"
+ "Couleur primaire"
+ "Précédent"
+ "Aperçu de votre exemple"
+ "Aperçu"
+ "Appuyez à nouveau sur <b>Pas à pas</b> pour exécuter la deuxième instruction. Le pixel en haut à gauche de la console de jeu devrait maintenant être blanc. Ce simulateur utilise les emplacements mémoire <tt>$0200</tt> à <tt>$05ff</tt> pour dessiner des pixels sur son affichage. Les valeurs <tt>$00</tt> à <tt>$0f</tt> représentent 16 couleurs différentes (<tt>$00</tt> est noir et <tt>$01</tt> est blanc), donc stocker la valeur <tt>$01</tt> à l\'emplacement mémoire <tt>$0200</tt> dessine un pixel blanc dans le coin supérieur gauche. C\'est plus simple que la façon dont un véritable ordinateur produirait de la vidéo, mais ça fera l\'affaire pour l\'instant."
+ "Prétraitement ..."
+ "Jouer"
+ "Rose"
+ "Parfait pour les amateurs, les étudiants et tous ceux qui sont curieux de savoir comment fonctionnent réellement les ordinateurs sous le capot !"
+ "Pause"
+ "Drapeau de débordement : Activé lorsqu\'une opération arithmétique produit un résultat qui ne peut pas être représenté dans la plage signée de 8 bits (-128 à +127). Utilisé pour détecter les erreurs arithmétiques signées dans les calculs."
+ "Structure générale"
+ "Branchement hors limites à la ligne %1$d (les branchements sont limités de -128 à +127) : %2$s"
+ "Notre premier programme"
+ "Organisé en quatre bandes horizontales de 32×8 pixels"
+ "Orange"
+ "Configuration Flatpak optimisée en supprimant les permissions inutiles"
+ "Ouvert %1$s"
+ "Ouvrir..."
+ "Open source"
+ "Ouvrir un fichier assembleur"
+ "Une fois que les valeurs ont été décalées le long du serpent, nous devons déterminer quoi faire avec la tête. La direction est d\'abord chargée dans <tt>A</tt>. <tt>LSR</tt> signifie \"décalage logique à droite\", ou \"décaler tous les bits d\'une position vers la droite\". Le bit le moins significatif est décalé dans le drapeau de retenue, donc si l\'accumulateur est <tt>1</tt>, après <tt>LSR</tt> il est <tt>0</tt>, avec le drapeau de retenue activé."
+ "À la réinitialisation (simulateur) : <tt>P = $30</tt> (bit5 et <tt>B</tt> activés ; <tt>D</tt> et <tt>I</tt> effacés)"
+ "OK"
+ "Maintenant, mettons toutes ces connaissances à profit et créons un jeu ! Nous allons créer une version très simple du jeu classique \'Snake\'."
+ "Aucune expérience préalable en programmation n\'est nécessaire. Commencez avec des leçons interactives et développez vos compétences étape par étape."
+ "Aucun code à exécuter."
+ "Aucune adresse ou étiquette fournie"
+ "Vient ensuite <tt>drawSnake</tt>. C\'est aussi assez simple - nous effaçons d\'abord la queue puis dessinons la tête. <tt>X</tt> est défini sur la longueur du serpent, donc nous pouvons indexer jusqu\'au bon pixel, et nous mettons <tt>A</tt> à zéro puis effectuons l\'écriture en utilisant le mode d\'adressage indirect indexé. Ensuite, nous rechargeons <tt>X</tt> pour indexer jusqu\'à la tête, mettons <tt>A</tt> à un et le stockons à <tt>($10,x)</tt>. <tt>$10</tt> stocke l\'emplacement sur deux octets de la tête, donc cela dessine un pixel blanc à la position actuelle de la tête. Comme seules la tête et la queue du serpent bougent, c\'est suffisant pour maintenir le serpent en mouvement."
+ "Nouveaux outils pour examiner votre code, y compris un désassembleur et un visualiseur de mémoire rapidement commutable"
+ "Drapeau négatif : Activé lorsque le bit le plus significatif (bit 7) du résultat est 1. Utilisé pour les comparaisons de nombres signés et indique si une valeur est négative dans la représentation en complément à deux."
+ "Presque tous les jeux ont en leur cœur une boucle de jeu. Toutes les boucles de jeu ont la même forme de base : accepter les entrées de l\'utilisateur, mettre à jour l\'état du jeu et afficher l\'état du jeu. Cette boucle n\'est pas différente."
+ "Messages"
+ "Les emplacements mémoire <tt>$01</tt> et <tt>$02</tt> contiennent respectivement les valeurs <tt>$05</tt> et <tt>$07</tt>. Pensez à <tt>($00,X)</tt> comme <tt>($00 + X)</tt>. Dans ce cas, <tt>X</tt> vaut <tt>$01</tt>, donc cela se simplifie en <tt>($01)</tt>. À partir de là, les choses se déroulent comme l\'adressage indirect standard - les deux octets à <tt>$01</tt> et <tt>$02</tt> (<tt>$05</tt> et <tt>$07</tt>) sont consultés pour former l\'adresse <tt>$0705</tt>. C\'est l\'adresse dans laquelle le registre <tt>Y</tt> a été stocké dans l\'instruction précédente, donc le registre <tt>A</tt> obtient la même valeur que <tt>Y</tt>, bien que par un chemin beaucoup plus détourné. Vous ne verrez pas cela souvent."
+ "Carte mémoire"
+ "De nombreux bugs mineurs ont été corrigés pour améliorer l\'utilisabilité générale"
+ "Améliorations majeures de l\'interface utilisateur introduisant un bouton d\'action flottant moderne avec des états dynamiques pour un contrôle intuitif du programme, et un widget de débogage entièrement repensé utilisant des composants Adwaita modernes."
+ "Line Buster 6502"
+ "Style clair"
+ "Apprendre par l\'exemple n\'a jamais été aussi facile. Plongez dans du code fonctionnel, modifiez-le, cassez-le, réparez-le à nouveau - c\'est ainsi que les meilleurs programmeurs ont appris autrefois !"
+ "Apprenez à utiliser la pile avec les instructions PHA et PLA"
+ "Apprenez à programmer le microprocesseur 6502."
+ "Apprenez l\'histoire de l\'informatique tout en codant"
+ "Learn 6502 fonctionne maintenant aussi sur Windows et macOS. Si vous vouliez le montrer à quelqu\'un qui n\'est pas sous Linux, c\'est désormais possible."
+ "Learn 6502 fonctionne maintenant sur GNOME 50 ! Merci à Sabri Ünal pour sa contribution à la mise à jour du runtime."
+ "Apprendre l\'assembleur 6502"
+ "Apprendre"
+ "Échec des étiquettes"
+ "Étiquette déjà définie à la ligne %1$d : %2$s"
+ "L\'étiquette %1$s est déjà utilisée comme symbole ; veuillez en renommer une"
+ "Le saut est comme le branchement avec deux différences principales. Premièrement, les sauts ne sont pas exécutés conditionnellement, et deuxièmement, ils prennent une adresse absolue de deux octets. Pour les petits programmes, ce second détail n\'est pas très important, car vous utiliserez principalement des étiquettes, et l\'assembleur détermine l\'emplacement mémoire correct à partir de l\'étiquette. Pour les programmes plus importants cependant, le saut est la seule façon de passer d\'une section du code à une autre."
+ "Sauts"
"JSR/RTS"
- "<tt>JMP</tt> is an unconditional jump. Here\'s a really simple example to show it in action:"
"JMP"
- "Jumping is like branching with two main differences. First, jumps are not conditionally executed, and second, they take a two-byte absolute address. For small programs, this second detail isn\'t very important, as you\'ll mostly be using labels, and the assembler works out the correct memory location from the label. For larger programs though, jumping is the only way to move from one section of the code to another."
- "Jumping"
- "<tt>X</tt> holds the pixel colour, and <tt>Y</tt> holds the position of the current pixel. The first loop draws the current colour as a pixel (via the <tt>A</tt> register), pushes the colour to the stack, then increments the colour and position. The second loop pops the stack, draws the popped colour as a pixel, then increments the position. As should be expected, this creates a mirrored pattern."
- "Two of the stack instructions are <tt>PHA</tt> and <tt>PLA</tt>, \"push accumulator\" and \"pull accumulator\". Below is an example of these two in action."
- "The stack in a 6502 processor is just like any other stack - values are pushed onto it and popped (\"pulled\" in 6502 parlance) off it. The current depth of the stack is measured by the stack pointer, a special register. The stack lives in memory between <tt>$0100</tt> and <tt>$01ff</tt>. The stack pointer is initially <tt>$ff</tt>, which points to memory location <tt>$01ff</tt>. When a byte is pushed onto the stack, the stack pointer becomes <tt>$fe</tt>, or memory location <tt>$01fe</tt>, and so on."
- "The stack"
- "Try to write code snippets that use each of the 6502 addressing modes. Remember, you can use the monitor in the debugger to watch a section of memory."
- "Exercise"
- "In this case, <tt>($01)</tt> looks up the two bytes at <tt>$01</tt> and <tt>$02</tt>: <tt>$03</tt> and <tt>$07</tt>. These form the address <tt>$0703</tt>. The value of the <tt>Y</tt> register is added to this address to give the final address <tt>$0704</tt>."
- "Indirect indexed is like indexed indirect but less insane. Instead of adding the <tt>X</tt> register to the address <i>before</i> dereferencing, the zero page address is dereferenced, and the <tt>Y</tt> register is added to the resulting address."
- "Indirect indexed: <tt>($c0),Y</tt>"
- "Memory locations <tt>$01</tt> and <tt>$02</tt> contain the values <tt>$05</tt> and <tt>$07</tt> respectively. Think of <tt>($00,X)</tt> as <tt>($00 + X)</tt>. In this case <tt>X</tt> is <tt>$01</tt>, so this simplifies to <tt>($01)</tt>. From here things proceed like standard indirect addressing - the two bytes at <tt>$01</tt> and <tt>$02</tt> (<tt>$05</tt> and <tt>$07</tt>) are looked up to form the address <tt>$0705</tt>. This is the address that the <tt>Y</tt> register was stored into in the previous instruction, so the <tt>A</tt> register gets the same value as <tt>Y</tt>, albeit through a much more circuitous route. You won\'t see this much."
- "This one\'s kinda weird. It\'s like a cross between zero page,X and indirect. Basically, you take the zero page address, add the value of the <tt>X</tt> register to it, then use that to look up a two-byte address. For example:"
- "Indexed indirect: <tt>($c0,X)</tt>"
- "In this example, <tt>$f0</tt> contains the value <tt>$01</tt> and <tt>$f1</tt> contains the value <tt>$cc</tt>. The instruction <tt>JMP ($f0)</tt> causes the processor to look up the two bytes at <tt>$f0</tt> and <tt>$f1</tt> (<tt>$01</tt> and <tt>$cc</tt>) and put them together to form the address <tt>$cc01</tt>, which becomes the new program counter. Assemble and step through the program above to see what happens. I\'ll talk more about <tt>JMP</tt> in the section on <a href=\"#jumping\">Jumping</a>."
- "Indirect addressing uses an absolute address to look up another address. The first address gives the least significant byte of the address, and the following byte gives the most significant byte. That can be hard to wrap your head around, so here\'s an example:"
- "Indirect: <tt>($c000)</tt>"
- "Some instructions don\'t deal with memory locations (e.g. <tt>INX</tt> - increment the <tt>X</tt> register). These are said to have implicit addressing - the argument is implied by the instruction."
- "Implicit"
- "<tt>a9</tt> and <tt>c9</tt> are the processor opcodes for immediate-addressed <tt>LDA</tt> and <tt>CMP</tt> respectively. <tt>01</tt> and <tt>02</tt> are the arguments to these instructions. <tt>d0</tt> is the opcode for <tt>BNE</tt>, and its argument is <tt>02</tt>. This means \"skip over the next two bytes\" (<tt>85 22</tt>, the assembled version of <tt>STA $22</tt>). Try editing the code so <tt>STA</tt> takes a two-byte absolute address rather than a single-byte zero page address (e.g. change <tt>STA $22</tt> to <tt>STA $2222</tt>). Reassemble the code and look at the hexdump again - the argument to <tt>BNE</tt> should now be <tt>03</tt>, because the instruction the processor is skipping past is now three bytes long."
- "The hex should look something like this:"
- "Assemble the following code, then check the debugger to see the hexdump of the assembled code."
- "Relative addressing is used for branching instructions. These instructions take a single byte, which is used as an offset from the following instruction."
- "Relative: <tt>$c0</tt> (or label)"
- "Immediate addressing doesn\'t strictly deal with memory addresses - this is the mode where actual values are used. For example, <tt>LDX #$01</tt> loads the value <tt>$01</tt> into the <tt>X</tt> register. This is very different to the zero page instruction <tt>LDX $01</tt> which loads the value at memory location <tt>$01</tt> into the <tt>X</tt> register."
- "Immediate: <tt>#$c0</tt>"
- "Unlike zero page,Y, absolute,Y can\'t be used with <tt>STX</tt> but can be used with <tt>LDA</tt> and <tt>STA</tt>."
- "These are the absolute addressing versions of zero page,X and zero page,Y. For example:"
- "Absolute,X and absolute,Y: <tt>$c000,X</tt> and <tt>$c000,Y</tt>"
- "This is the equivalent of zero page,X, but can only be used with <tt>LDX</tt> and <tt>STX</tt>."
- "Zero page,Y: <tt>$c0,Y</tt>"
- "If the result of the addition is larger than a single byte, the address wraps around. For example:"
- "This is where addressing gets interesting. In this mode, a zero page address is given, and then the value of the <tt>X</tt> register is added. Here is an example:"
- "Zero page,X: <tt>$c0,X</tt>"
- "All instructions that support absolute addressing (with the exception of the jump instructions) also have the option to take a single-byte address. This type of addressing is called \"zero page\" - only the first page (the first 256 bytes) of memory is accessible. This is faster, as only one byte needs to be looked up, and takes up less space in the assembled code as well."
- "Zero page: <tt>$c0</tt>"
- "With absolute addressing, the full memory location is used as the argument to the instruction. For example:"
- "Absolute: <tt>$c000</tt>"
- "With all these examples you might find it helpful to use the memory monitor in the debugger to watch the memory change. The monitor takes a starting memory location and a number of bytes to display from that location. Both of these are hex values. For example, to display 16 bytes of memory from <tt>$c000</tt>, enter <tt>c000</tt> and <tt>10</tt> into <b>Start</b> and <b>Length</b>, respectively."
- "The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as <tt>$0000 - $ffff</tt>. There are various ways to refer to these memory locations, as detailed below."
- "Addressing modes"
- "<tt>BCC</tt> and <tt>BCS</tt> (\"branch on carry clear\" and \"branch on carry set\") are used to branch on the carry flag. Write a program that uses one of these two."
- "The opposite of <tt>BNE</tt> is <tt>BEQ</tt>. Try writing a program that uses <tt>BEQ</tt>."
- "In assembly language, you\'ll usually use labels with branch instructions. When assembled though, this label is converted to a single-byte relative offset (a number of bytes to go backwards or forwards from the next instruction) so branch instructions can only go forward and back around 256 bytes. This means they can only be used to move around local code. For moving further you\'ll need to use the jumping instructions."
- "The next line, <tt>BNE decrement</tt>, will shift execution to the decrement label if the <tt>Z</tt> flag is set to <tt>0</tt> (meaning that the two values in the <tt>CPX</tt> comparison were not equal), otherwise it does nothing and we store <tt>X</tt> to <tt>$0201</tt>, then finish the program."
- "First we load the value <tt>$08</tt> into the <tt>X</tt> register. The next line is a label. Labels just mark certain points in a program so we can return to them later. After the label we decrement <tt>X</tt>, store it to <tt>$0200</tt> (the top-left pixel), and then compare it to the value <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compares the value in the <tt>X</tt> register with another value. If the two values are equal, the <tt>Z</tt> flag is set to <tt>1</tt>, otherwise it is set to <tt>0</tt>."
- "6502 assembly language has a bunch of branching instructions, all of which branch based on whether certain flags are set or not. In this example we\'ll be looking at <tt>BNE</tt>: \"Branch on not equal\"."
- "So far we\'re only able to write basic programs without any branching logic. Let\'s change that."
- "Branching"
- "The opposite of <tt>ADC</tt> is <tt>SBC</tt> (subtract with carry). Write a program that uses this instruction."
- "Rewrite the first example in this section to use the <tt>Y</tt> register instead of the <tt>X</tt> register."
- "You\'ve seen <tt>TAX</tt>. You can probably guess what <tt>TAY</tt>, <tt>TXA</tt> and <tt>TYA</tt> do, but write some code to test your assumptions."
- "A full list of the 6502 instruction set is <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">available here</a> and <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">here</a> (I usually refer to both pages as they have their strengths and weaknesses). These pages detail the arguments to each instruction, which registers they use, and which flags they set. They are your bible."
- "Assemble the code and select <b>Step</b> from the Run button\'s dropdown menu to step through these three instructions. The monitor in the debugger shows a section of memory, and can be helpful to visualise the execution of programs. <tt>STA $01</tt> stores the value of the <tt>A</tt> register at memory location <tt>$01</tt>, and <tt>ADC $01</tt> adds the value stored at the memory location <tt>$01</tt> to the <tt>A</tt> register. <tt>$80 + $80</tt> should equal <tt>$100</tt>, but because this is bigger than a byte, the <tt>A</tt> register is set to <tt>$00</tt> and the carry flag is set. As well as this though, the zero flag is set. The zero flag is set by all instructions where the result is zero."
- "An important thing to notice here is the distinction between <tt>ADC #$01</tt> and <tt>ADC $01</tt>. The first one adds the value <tt>$01</tt> to the <tt>A</tt> register, but the second adds the value stored at memory location <tt>$01</tt> to the <tt>A</tt> register."
- "In the simulator below <b>type</b> (don\'t paste) the following code:"
- "The problem is, <tt>$184</tt> is too big to fit in a single byte (the max is <tt>$FF</tt>), and the registers can only hold a single byte. It\'s OK though; the processor isn\'t actually dumb. If you were looking carefully enough, you\'ll have noticed that the carry flag was set to <tt>1</tt> after this operation. So that\'s how you know."
- "Assemble the code, then turn on the debugger and step through the code, watching the <tt>A</tt> and <tt>X</tt> registers. Something slightly odd happens on the line <tt>ADC #$c4</tt>. You might expect that adding <tt>$c4</tt> to <tt>$c0</tt> would give <tt>$184</tt>, but this processor gives the result as <tt>$84</tt>. What\'s up with that?"
- "Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here\'s some annotated source code to introduce a few different instructions:"
- "Instructions"
- "The last section shows the processor flags. Each flag is one bit, so all seven flags live in a single byte. The flags are set by the processor to give information about the previous instruction. More on that later. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Read more about the registers and flags here</a>."
- "<tt>PC</tt> is the program counter - it\'s how the processor knows at what point in the program it currently is. It\'s like the current line number of an executing script. In the JavaScript simulator the code is assembled starting at memory location <tt>$0600</tt>, so <tt>PC</tt> always starts there."
- "<tt>SP</tt> is the stack pointer. I won\'t get into the stack yet, but basically this register is decremented every time a byte is pushed onto the stack, and incremented when a byte is popped off the stack."
- "The first line shows the <tt>A</tt>, <tt>X</tt> and <tt>Y</tt> registers (<tt>A</tt> is often called the \"accumulator\"). Each register holds a single byte. Most operations work on the contents of these registers."
- "We\'ve already had a little look at the processor status section (the bit with <tt>A</tt>, <tt>PC</tt> etc.), but what does it all mean?"
- "Registers and flags"
- "Add more instructions to draw extra pixels."
- "3."
- "Change one of the pixels to draw at the bottom-right corner (memory location <tt>$05ff</tt>)."
- "2."
- "Try changing the colour of the three pixels."
- "1."
- "Exercises"
- "So, the instruction <tt>STA $0200</tt> stores the value of the <tt>A</tt> register to memory location <tt>$0200</tt>. Click <b>Step</b> four more times to execute the rest of the instructions, keeping an eye on the <tt>A</tt> register as it changes."
- "Press <b>Step</b> again to execute the second instruction. The top-left pixel of the game console should now be white. This simulator uses the memory locations <tt>$0200</tt> to <tt>$05ff</tt> to draw pixels on its display. The values <tt>$00</tt> to <tt>$0f</tt> represent 16 different colours (<tt>$00</tt> is black and <tt>$01</tt> is white), so storing the value <tt>$01</tt> at memory location <tt>$0200</tt> draws a white pixel at the top left corner. This is simpler than how an actual computer would output video, but it\'ll do for now."
- "Equipped with that knowledge, you should be able to see that the instruction <tt>LDA #$01</tt> loads the hex value <tt>$01</tt> into register <tt>A</tt>. I\'ll go into more detail on registers in the next section."
- "Any numbers prefixed with <tt>$</tt> in 6502 assembly language (and by extension, in this book) are in hexadecimal (hex) format. If you\'re not familiar with hex numbers, I recommend you read <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">the Wikipedia article</a>. Anything prefixed with <tt>#</tt> is a literal number value. Any other number refers to a memory location."
- "So, what\'s this program actually doing? Let\'s step through it. Hit <b>Reset</b>, then select <b>Step</b> from the dropdown menu. The button will switch to step mode, allowing you to execute the program one instruction at a time. Click once and you\'ll notice in the debugger that <tt>A=</tt> changed from <tt>$00</tt> to <tt>$01</tt>, and <tt>PC=</tt> changed from <tt>$0600</tt> to <tt>$0602</tt>."
- "The black game console screen now should show three coloured \"pixels\" at the top left."
- "So, let\'s dive in! This application contains a <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler and Simulator</a> that I have adapted for this interactive tutorial. Click the <b>Copy</b> button in the code block below to copy the example code to the editor. Then click the button in the top right to assemble the code, then click it again to run the program. You can also access these actions through the dropdown menu."
- "Our first program"
- "Then why 6502? Why not a <i>useful</i> assembly language, like <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Well, I don\'t think learning x86 is useful. I don\'t think you\'ll ever have to <i>write</i> assembly language in your day job - this is purely an academic exercise, something to expand your mind and your thinking. 6502 was originally written in a different age, a time when the majority of developers were writing assembly directly, rather than in these new-fangled high-level programming languages. So, it was designed to be written by humans. More modern assembly languages are meant to written by compilers, so let\'s leave it to them. Plus, 6502 is <i>fun</i>. Nobody ever called x86 <i>fun</i>."
- "Seriously though, I think it\'s valuable to have an understanding of assembly language. Assembly language is the lowest level of abstraction in computers - the point at which the code is still readable. Assembly language translates directly to the bytes that are executed by your computer\'s processor. If you understand how it works, you\'ve basically become a computer <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magician</a>."
- "(Actually, I\'ve been reliably informed that 6502 processors are still being produced by <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> and <a href=\"https://www.mouser.co.uk/c/?q=65C02\">sold to hobbyists</a>, so clearly 6502 <i>isn't</i> a dead language! Who knew?)"
- "So, why would you want to learn 6502? It\'s a dead language isn\'t it? Well, so\'s Latin. And they still teach that. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
- "In this tiny tutorial I\'m going to show you how to get started writing 6502 assembly language. The 6502 processor was massive in the seventies and eighties, powering famous computers like the <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, and the <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender in Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">has a 6502 processor for a brain</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Even the Terminator was programmed in 6502</a>."
"Introduction"
- "Tutorial <sub>by <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, licensed under CC BY 4.0</sub>"
- "<b><tt>$10</tt>-<tt>$15</tt></b>: Snake position data (head, body segments, tail)"
- "<b><tt>$03</tt></b>: Snake length"
- "<b><tt>$02</tt></b>: Snake direction (1=up, 2=right, 4=down, 8=left)"
- "<b><tt>$00</tt>-<tt>$01</tt></b>: Apple position"
- "Snake Game Memory Usage"
- "<b>E</b> or Space key (<tt>$20</tt>)"
- "<b>Q</b> or Enter/Return key (<tt>$0D</tt>)"
- "<b>Action buttons</b>:"
- "<b>D</b> or Right Arrow key (<tt>$64</tt>)"
- "<b>S</b> or Down Arrow key (<tt>$73</tt>)"
- "<b>A</b> or Left Arrow key (<tt>$61</tt>)"
- "<b>W</b> or Up Arrow key (<tt>$77</tt>)"
- "<b>Directional controls</b>:"
- "<b><tt>$FF</tt></b>: Last pressed key (ASCII code)"
- "<b><tt>$FE</tt></b>: Random number generator (reads as a random value 0-255)"
- "Special Memory Locations (in Simulator)"
- "<b>PHA/PLA</b>: Push/pull accumulator to/from stack"
- "<b>BEQ/BNE/BCC/BCS</b>: Branch if equal/not equal/carry clear/carry set"
- "<b>JSR/RTS</b>: Jump to subroutine / Return from subroutine"
- "<b>JMP</b>: Unconditional jump"
- "<b>ADC/SBC</b>: Add/subtract with carry"
- "<b>INX/INY/DEX/DEY</b>: Increment/decrement registers"
- "<b>STA/STX/STY</b>: Store registers to memory"
- "<b>LDA/LDX/LDY</b>: Load registers"
- "Common Instructions"
- "<b>Indirect Indexed</b> (<tt>($c0),Y</tt>): Dereference zero page address, then add Y"
- "<b>Indexed Indirect</b> (<tt>($c0,X)</tt>): Add X to zero page address, then dereference"
- "<b>Indirect</b> (<tt>($c000)</tt>): Look up address stored at given location"
- "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Add X/Y register to absolute address"
- "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): Add X/Y register to zero page address"
- "<b>Absolute</b> (<tt>$c000</tt>): Access any memory location"
- "<b>Zero Page</b> (<tt>$c0</tt>): Access memory locations <tt>$00</tt>-<tt>$FF</tt>"
- "<b>Immediate</b> (<tt>#$c0</tt>): Use the actual value"
- "Addressing Modes"
- "Used for conditional branching"
- "<b>C</b> (Carry): Set when arithmetic operations overflow a byte"
- "<b>Z</b> (Zero): Set when result is zero"
- "<b>I</b> (Interrupt): Set when interrupts are disabled"
- "<b>D</b> (Decimal): Set when processor is in BCD (Binary Coded Decimal) mode"
- "<b>B</b> (Break): Set when BRK instruction is executed"
- "<b>V</b> (Overflow): Set when arithmetic operation causes signed overflow"
- "<b>N</b> (Negative): Set when bit 7 of result is set"
- "Processor Flags"
- "<b>PC</b> (Program Counter): Points to the next instruction to execute"
- "<b>SP</b> (Stack Pointer): Points to current stack position (starts at <tt>$FF</tt>)"
- "<b>X, Y</b>: Index registers for addressing and counting"
- "<b>A</b> (Accumulator): Main register for calculations and data manipulation"
- "Registers"
- "<b><tt>$f</tt></b>: Light grey (<tt>#bbbbbb</tt>)"
- "<b><tt>$e</tt></b>: Light blue (<tt>#0088ff</tt>)"
- "<b><tt>$d</tt></b>: Light green (<tt>#aaff66</tt>)"
- "<b><tt>$c</tt></b>: Grey (<tt>#777777</tt>)"
- "<b><tt>$b</tt></b>: Dark grey (<tt>#333333</tt>)"
- "<b><tt>$a</tt></b>: Light red (<tt>#ff7777</tt>)"
- "<b><tt>$9</tt></b>: Brown (<tt>#664400</tt>)"
- "<b><tt>$8</tt></b>: Orange (<tt>#dd8855</tt>)"
- "<b><tt>$7</tt></b>: Yellow (<tt>#eeee77</tt>)"
- "<b><tt>$6</tt></b>: Blue (<tt>#0000aa</tt>)"
- "<b><tt>$5</tt></b>: Green (<tt>#00cc55</tt>)"
- "<b><tt>$4</tt></b>: Purple (<tt>#cc44cc</tt>)"
- "<b><tt>$3</tt></b>: Cyan (<tt>#aaffee</tt>)"
- "<b><tt>$2</tt></b>: Red (<tt>#880000</tt>)"
- "<b><tt>$1</tt></b>: White (<tt>#ffffff</tt>)"
- "<b><tt>$0</tt></b>: Black (<tt>#000000</tt>)"
- "Color Palette"
- "First row: <tt>$0200</tt>-<tt>$021F</tt>, second row: <tt>$0220</tt>-<tt>$023F</tt>, etc."
- "Organized as four horizontal strips of 32×8 pixels"
- "Values <tt>$00</tt>-<tt>$0F</tt> represent 16 different colors (<tt>$00</tt>=black, <tt>$01</tt>=white)"
- "Screen maps to memory range <tt>$0200</tt>-<tt>$05FF</tt>"
- "Display Organization"
- "<b>Program Storage</b>: Starting at <tt>$0600</tt>"
- "<b>Display Memory</b>: <tt>$0200</tt>-<tt>$05FF</tt> (used for screen output)"
- "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
- "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (first 256 bytes, faster access)"
- "Memory Map"
- "Emulator"
- "Learning"
- "Programming"
- "Assembly"
- "First release of Learn 6502 Assembly for GNOME"
- "Fixed build error on PostmarketOS, improving mobile compatibility"
- "Debugger now only updates when visible, reducing unnecessary processing"
- "Reduced default hex monitor address range for better efficiency"
- "Enhanced the hex monitor address range input for easier value editing"
- "Improved the game console performance for smoother gameplay"
- "Optimized Flatpak configuration by removing unnecessary permissions"
- "Improved descriptions to be more welcoming for non-technical users"
- "Enhanced app presentation and accessibility"
- "Added file management to save and load your programs"
- "Games now automatically pause when switching between screens"
- "Many minor bugs have been fixed to improve overall usability"
- "New tools to examine your code, including disassembler and fast switchable memory viewer"
- "Improved game screen and controls for mobile devices"
- "Added help feature to make code editing easier for beginners"
- "Major update focusing on improved learning experience and usability"
- "Virtual game console displaying three colored pixels"
- "Built-in debugger showing real-time registers, flags, and memory"
- "Code editor with 6502 assembly syntax highlighting and visible help"
- "Interactive tutorial interface in dark theme"
- "Interactive tutorial interface in light theme"
- "See your code run on a virtual game console"
- "Debug your programs with real-time tools"
- "Write code with a built-in editor"
- "Learn step-by-step with an interactive tutorial"
- "Features:"
- "A comprehensive learning environment for programming vintage computers and game consoles using 6502 assembly language."
- "6502 Assembly Learning Environment"
- "Copy to clipboard"
- "Full Memory ($0000-$FFFF)"
- "Random/Input ($FE-$FF)"
- "Snake Game Data ($00-$15)"
- "Program Storage ($0600-$FFFF)"
- "Display Memory ($0200-$05FF)"
- "Stack ($0100-$01FF)"
- "Zero Page ($0000-$00FF)"
- "There are currently no settings."
- "Main Settings"
- "Appearance"
- "Preferences"
- "Learn how to program the 6502 microprocessor."
- "Disassembled"
- "Hexdump"
- "Hex Monitor"
- "Messages"
- "Information"
- "Discard"
- "Cancel"
- "Your file has unsaved changes. Changes will be lost if you don\'t save them."
- "Save changes?"
- "Continue"
- "Quit"
- "About Learn 6502 Assembly"
- "Help"
- "Save as..."
- "Save"
- "Open..."
- "Game Console"
- "Debugger"
- "Editor"
- "Learn"
- "Menu"
- "Learn 6502 Assembly"
- "Copy to editor"
- "All Files"
- "Assembly Files"
- "File saved successfully"
- "Error saving file"
- "Save Assembly File"
- "untitled"
- "Error opening file"
- "File loaded successfully"
- "Failed to load file"
- "Open Assembly File"
- "Gamepad key pressed:"
- "Labels failure"
- "Simulator failure"
- "Disassembly:"
- "Hexdump:"
- "Assemble failed"
- "Assembled successfully"
- "Program paused"
- "Failed to copy to clipboard"
- "Copied to clipboard"
- "Code copied to editor"
- "Step"
- "Reset"
- "Resume"
- "Pause"
- "Run"
- "Assemble"
- "File \"%1$s\" has unsaved changes"
- "Unsaved changes"
- "Program completed at PC=$%1$s"
- "6502 Stack emptied! Wrapping..."
- "6502 Stack filled! Wrapping..."
- "Address %1$s - unknown opcode"
- "wdm-output"
- "Stopped"
- "Unable to find/parse given address/label"
- "No address or label provided"
- "Label {label} is already used as a symbol; please rename one of them"
- "Label already defined at line %1$s: %2$d"
- "Indexing labels..."
- "Found $d label."
- "Found $d labels."
- "Preprocessing ..."
- "Code assembled successfully, %1$d bytes."
- "Out of range branch on line %1$d (branches are limited to -128 to +127): %2$s"
- "Syntax error line %1$d: %2$s"
- "No code to run."
- "Assembling code ..."
- "Unable to relocate code outside 64k memory"
+ "Drapeau d\'interruption : Lorsqu\'il est activé, masque (désactive) toutes les interruptions masquables (IRQ). Seules les interruptions non masquables (NMI) peuvent encore se produire. Utilisé pour les sections critiques du code qui ne doivent pas être interrompues."
+ "Police de l\'interface"
+ "Des tutoriels interactifs vous guident du niveau débutant au niveau avancé"
+ "Tutoriel interactif"
+ "Les instructions en langage assembleur sont comme un petit ensemble de fonctions prédéfinies. Toutes les instructions prennent zéro ou un argument. Voici du code source annoté pour présenter quelques instructions différentes :"
+ "Instructions"
+ "Initialisation"
+ "Indirect : <tt>($c000)</tt>"
+ "Indirect indexé : <tt>($c0),Y</tt>"
+ "L\'indirect indexé est comme l\'indexé indirect mais moins fou. Au lieu d\'ajouter le registre <tt>X</tt> à l\'adresse <i>avant</i> le déréférencement, l\'adresse de la page zéro est déréférencée, et le registre <tt>Y</tt> est ajouté à l\'adresse résultante."
+ "L\'adressage indirect utilise une adresse absolue pour rechercher une autre adresse. La première adresse donne l\'octet le moins significatif de l\'adresse, et l\'octet suivant donne l\'octet le plus significatif. Cela peut être difficile à comprendre, alors voici un exemple :"
+ "Indexation des étiquettes..."
+ "Indirect indexé : <tt>($c0,X)</tt>"
+ "Registre d\'index Y : Utilisé pour l\'adressage"
+ "Registre d\'index X : Utilisé pour l\'adressage"
+ "Dans ce petit tutoriel, je vais vous montrer comment commencer à écrire en langage assembleur 6502. Le processeur 6502 était omniprésent dans les années soixante-dix et quatre-vingt, alimentant des ordinateurs célèbres comme le <a href=\"https://fr.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, l\'<a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, le <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, l\'<a href=\"https://fr.wikipedia.org/wiki/Apple_II\">Apple II</a>, et la <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender dans Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">a un processeur 6502 comme cerveau</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Même le Terminator était programmé en 6502</a>."
+ "Dans cet exemple, <tt>$f0</tt> contient la valeur <tt>$01</tt> et <tt>$f1</tt> contient la valeur <tt>$cc</tt>. L\'instruction <tt>JMP ($f0)</tt> fait que le processeur consulte les deux octets à <tt>$f0</tt> et <tt>$f1</tt> (<tt>$01</tt> et <tt>$cc</tt>) et les assemble pour former l\'adresse <tt>$cc01</tt>, qui devient le nouveau compteur de programme. Assemblez et parcourez le programme ci-dessus pas à pas pour voir ce qui se passe. Je parlerai plus en détail de <tt>JMP</tt> dans la section sur les <a href=\"#jumping\">Sauts</a>."
+ "Dans ce cas, <tt>($01)</tt> consulte les deux octets à <tt>$01</tt> et <tt>$02</tt> : <tt>$03</tt> et <tt>$07</tt>. Ceux-ci forment l\'adresse <tt>$0703</tt>. La valeur du registre <tt>Y</tt> est ajoutée à cette adresse pour donner l\'adresse finale <tt>$0704</tt>."
+ "Dans cet assembleur, nous pouvons définir des constantes descriptives (ou symboles) qui représentent des nombres. Le reste du code peut alors simplement utiliser les constantes au lieu du nombre littéral, ce qui rend immédiatement évident ce dont nous traitons. Vous pouvez utiliser des lettres, des chiffres et des tirets bas dans un nom."
+ "Dans l\'éditeur <b>tapez</b> (ne collez pas) le code suivant :"
+ "En langage assembleur, vous utiliserez généralement des étiquettes avec les instructions de branchement. Lors de l\'assemblage cependant, cette étiquette est convertie en un décalage relatif d\'un octet (un nombre d\'octets à reculer ou avancer depuis l\'instruction suivante), donc les instructions de branchement ne peuvent aller en avant et en arrière que d\'environ 256 octets. Cela signifie qu\'elles ne peuvent être utilisées que pour se déplacer dans du code local. Pour aller plus loin, vous devrez utiliser les instructions de saut."
+ "Amélioration des performances de la console de jeu pour une expérience de jeu plus fluide"
+ "Amélioration de l\'écran de jeu et des contrôles pour les appareils mobiles"
+ "Amélioration des descriptions pour être plus accueillantes pour les utilisateurs non techniques"
+ "Implicite"
+ "Immédiat : <tt>#$c0</tt>"
+ "L\'adressage immédiat ne traite pas strictement des adresses mémoire - c\'est le mode où les valeurs réelles sont utilisées. Par exemple, <tt>LDX #$01</tt> charge la valeur <tt>$01</tt> dans le registre <tt>X</tt>. C\'est très différent de l\'instruction de page zéro <tt>LDX $01</tt> qui charge la valeur à l\'emplacement mémoire <tt>$01</tt> dans le registre <tt>X</tt>."
+ "Si la langue de votre système est le chinois, l\'application s\'affiche à nouveau en chinois. Elle basculait vers l\'anglais par erreur."
+ "Si votre exemple est basé sur ou inspiré d\'un autre exemple, vous pouvez fournir l\'URL source."
+ "Si vous parlez l\'une des langues listées, aidez‑nous à relire ou à améliorer les traductions. Vous pouvez contribuer via les liens dans l\'application, notre plateforme de traduction ou en ouvrant un ticket."
+ "Si le résultat de l\'addition est plus grand qu\'un seul octet, l\'adresse revient au début. Par exemple :"
+ "IDE"
+ "Je n\'expliquerai pas en détail comment fonctionne chacune des directions, mais l\'explication ci-dessus devrait vous donner suffisamment d\'éléments pour le comprendre avec un peu d\'étude."
+ "Masqué"
+ "Vidage hexadécimal généré."
+ "Vidage hexadécimal"
+ "Moniteur hexadécimal"
+ "Voici un exemple. Notez que les opérandes immédiats sont toujours préfixés par <tt>#</tt>."
+ "Aide"
+ "L\'hébreu est aussi notre première langue s\'écrivant de droite à gauche : grâce aux tests et aux contributions de Menachem, l\'application prend désormais en charge les mises en page de droite à gauche, la préparant à d\'autres langues RTL."
+ "Vert"
+ "Beau début : vous avez terminé le premier chapitre !"
+ "Vous avez votre propre création 6502 ? Partagez-la avec la communauté ! Vous pouvez maintenant soumettre vos exemples de code directement depuis l\'application. Appuyez simplement sur le bouton de partage et nous créerons automatiquement un issue et une pull request GitHub pour vous."
+ "Vous avez un bel exemple 6502 ?\nPartagez-le avec la communauté !"
+ "Le passage entre les sections est plus compliqué, car nous devons également tenir compte de l\'octet le plus significatif. Par exemple, descendre de <tt>$02e1</tt> devrait mener à <tt>$0301</tt>. Heureusement, c\'est assez facile à réaliser. Ajouter <tt>$20</tt> à <tt>$e1</tt> donne <tt>$01</tt> et active le bit de retenue. Si le bit de retenue est activé, nous savons que nous devons aussi incrémenter l\'octet le plus significatif."
+ "L\'allemand et l\'espagnol ont été validés par des contributeurs. Les autres langues sont des brouillons assistés par IA et nécessitent une validation humaine."
+ "Les jeux se mettent maintenant automatiquement en pause lors du changement d\'écran"
+ "Touche de manette pressée :"
+ "GNOME"
+ "GNOME"
+ "Version entièrement commentée du jeu du serpent"
+ "Mémoire complète ($0000-$FFFF)"
+ "Trouvé %1$d étiquettes."
+ "Trouvé %1$d étiquette."
+ "Pour Linux, il y a maintenant aussi une AppImage : un fichier, aucune installation, utile sur une distribution pour laquelle nous ne fournissons pas de paquet."
+ "Police"
+ "Suivre le style du système"
+ "Correction d\'une erreur de compilation sur PostmarketOS, améliorant la compatibilité mobile"
+ "Correction d\'un problème où le bouton de retour dans la section d\'apprentissage était toujours visible en mode bureau et tablette, même lorsqu\'aucune sous-page n\'était ouverte."
+ "D\'abord, <tt>readkeys</tt> vérifie si l\'une des touches de direction (Z, Q, S, D) a été pressée, et si oui, définit la direction du serpent en conséquence. Ensuite, <tt>checkCollision</tt> vérifie si le serpent est entré en collision avec lui-même ou avec la pomme. <tt>updateSnake</tt> met à jour la représentation interne du serpent, en fonction de sa direction. Ensuite, la pomme et le serpent sont dessinés. Enfin, <tt>spinWheels</tt> fait faire au processeur un travail occupé, pour empêcher le jeu de s\'exécuter trop rapidement. Pensez-y comme à une commande sleep. Le jeu continue de s\'exécuter jusqu\'à ce que le serpent entre en collision avec le mur ou avec lui-même."
+ "D\'abord, nous chargeons la valeur <tt>$08</tt> dans le registre <tt>X</tt>. La ligne suivante est une étiquette. Les étiquettes marquent simplement certains points dans un programme pour que nous puissions y revenir plus tard. Après l\'étiquette, nous décrémentons <tt>X</tt>, le stockons à <tt>$0200</tt> (le pixel en haut à gauche), puis le comparons à la valeur <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compare la valeur dans le registre <tt>X</tt> avec une autre valeur. Si les deux valeurs sont égales, le drapeau <tt>Z</tt> est mis à <tt>1</tt>, sinon il est mis à <tt>0</tt>."
+ "Première ligne : <tt>$0200</tt>-<tt>$021F</tt>, deuxième ligne : <tt>$0220</tt>-<tt>$023F</tt>, etc."
+ "Première version de Learn 6502 Assembly pour GNOME"
+ "Enfin, l\'octet <tt>$03</tt> contient la longueur actuelle du serpent, en termes d\'octets en mémoire (donc une longueur de 4 signifie 2 pixels)."
+ "Remplissez les informations sur votre exemple 6502 pour le partager avec la communauté"
+ "Le fichier \"%1$s\" a des modifications non enregistrées"
+ "Échec de la copie dans le presse-papiers"
+ "Exercices"
+ "Exercice"
+ "Exécuter les instructions une par une au lieu de façon continue"
+ "Exemples"
+ "Exemple soumis pour révision"
+ "Bien que ce soit une version simple, le code sera substantiellement plus grand que tous les exemples précédents. Nous devrons suivre plusieurs emplacements mémoire ensemble pour les différents aspects du jeu. Nous pouvons toujours faire nous-mêmes la comptabilité nécessaire tout au long du programme, comme avant, mais à plus grande échelle, cela devient rapidement fastidieux et peut aussi conduire à des bugs difficiles à repérer. À la place, nous allons maintenant laisser l\'assembleur faire une partie du travail fastidieux pour nous."
+ "Pair ou impair"
+ "Avec ces connaissances, vous devriez pouvoir voir que l\'instruction <tt>LDA #$01</tt> charge la valeur hexadécimale <tt>$01</tt> dans le registre <tt>A</tt>. J\'entrerai plus en détail sur les registres dans la section suivante."
+ "Amélioration de la saisie de la plage d\'adresses du moniteur hexadécimal pour faciliter l\'édition des valeurs"
+ "Amélioration de la présentation et de l\'accessibilité de l\'application"
+ "Activer le mode pas à pas"
+ "Activer le débogueur"
+ "Chaque section (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) vérifie d\'abord si la direction actuelle est opposée à la nouvelle direction. Cela nécessite un autre petit détour."
+ "Terminé"
+ "Organisation de l\'affichage"
+ "Mémoire d\'affichage ($0200-$05FF)"
+ "Découvrez le monde fascinant de la programmation des ordinateurs et consoles de jeux classiques ! Apprenez le langage assembleur 6502 - le même code qui alimentait des systèmes emblématiques comme la NES, le Commodore 64 et l\'Apple II."
+ "Abandonner"
+ "Désassemblage généré."
+ "Désassemblé"
+ "Désactiver pour améliorer les performances"
+ "Dino Run"
+ "Description"
+ "Drapeau décimal : Active le mode BCD (Binary Coded Decimal) pour les opérations arithmétiques. Lorsqu\'il est activé, les instructions ADC/SBC traitent les valeurs comme des chiffres décimaux (0-9) au lieu de binaires. Utilisé pour les calculs financiers et l\'arithmétique décimale."
+ "Le débogueur ne se met à jour que lorsqu\'il est visible, réduisant les traitements inutiles"
+ "Débogueur"
+ "Déboguez vos programmes avec des outils d\'inspection en temps réel"
+ "Paramètres de débogage"
+ "Déboguer"
+ "Style sombre"
+ "Créer un jeu"
+ "Copier dans l\'éditeur"
+ "Copier dans le presse-papiers"
+ "Copié dans le presse-papiers"
+ "Continuer"
+ "Confirmer"
+ "Instructions courantes"
+ "Jeu du Serpent Commenté"
+ "Palette de couleurs"
+ "Éditeur de code et console de jeu virtuelle"
+ "Code copié dans l\'éditeur"
+ "Code assemblé avec succès, %1$d octets."
+ "Code"
+ "Modifiez l\'un des pixels pour le dessiner dans le coin inférieur droit (emplacement mémoire <tt>$05ff</tt>)."
+ "Drapeau de retenue : Activé lorsqu\'une addition produit une retenue ; effacé lorsqu\'une soustraction nécessite un emprunt. Utilisé pour l\'arithmétique multi-octets et les décalages/rotations (BCS/BCC)."
+ "Annuler"
+ "En soumettant, vous acceptez que votre exemple soit sous licence <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Cassez les briques avec la raquette et la balle."
+ "Drapeau Break : Activé lorsqu\'une instruction BRK (Break) est exécutée. Utilisé pour distinguer les interruptions logicielles (BRK) des interruptions matérielles. Aide à identifier la source d\'une interruption dans les routines de service d\'interruption."
+ "Branchement"
+ "Bleu"
+ "Comme l\'état du jeu est stocké en termes de positions de pixels, le rendu du jeu est très simple. La première sous-routine, <tt>drawApple</tt>, est extrêmement simple. Elle met <tt>Y</tt> à zéro, charge une couleur aléatoire dans l\'accumulateur, puis stocke cette valeur dans <tt>($00),y</tt>. <tt>$00</tt> est l\'endroit où la position de la pomme est stockée, donc <tt>($00),y</tt> déréférence cet emplacement mémoire. Lisez la section \"Post-indexé indirect\" dans <a href=\"#addressing\">Modes d\'adressage</a> pour plus de détails."
+ "Retour"
+ "Auteur"
+ "À bas niveau, cette sous-routine est un peu plus complexe. D\'abord, la longueur est chargée dans le registre <tt>X</tt>, qui est ensuite décrémenté. L\'extrait ci-dessous montre la mémoire initiale pour le serpent."
+ "Fichiers assembleur"
+ "Assembleur"
+ "Code d\'assemblage ..."
+ "Assemblage réussi"
+ "Assemblez le code suivant, puis ouvrez la vue <b>Déboguer</b> et consultez le <b>Vidage hexadécimal</b> pour voir le code assemblé."
+ "Assemblez le code, puis ouvrez la vue <b>Déboguer</b> et parcourez le code pas à pas, en observant les registres <tt>A</tt> et <tt>X</tt>. Quelque chose d\'un peu étrange se produit à la ligne <tt>ADC #$c4</tt>. Vous pourriez vous attendre à ce que l\'addition de <tt>$c4</tt> à <tt>$c0</tt> donne <tt>$184</tt>, mais ce processeur donne le résultat <tt>$84</tt>. Qu\'est-ce qui se passe ?"
+ "Assemblez le code et utilisez <b>Pas à pas</b> pour parcourir ces trois instructions. Le <b>Moniteur hexadécimal</b> dans la vue <b>Déboguer</b> montre une section de la mémoire et peut être utile pour visualiser l\'exécution des programmes. <tt>STA $01</tt> stocke la valeur du registre <tt>A</tt> à l\'emplacement mémoire <tt>$01</tt>, et <tt>ADC $01</tt> ajoute la valeur stockée à l\'emplacement mémoire <tt>$01</tt> au registre <tt>A</tt>. <tt>$80 + $80</tt> devrait être égal à <tt>$100</tt>, mais comme c\'est plus grand qu\'un octet, le registre <tt>A</tt> est mis à <tt>$00</tt> et le drapeau de retenue est activé. De plus, le drapeau zéro est également activé. Le drapeau zéro est activé par toutes les instructions où le résultat est zéro."
+ "Échec de l\'assemblage"
+ "Assembler"
+ "Comme indiqué précédemment, les quatre directions sont représentées en interne par les nombres 1, 2, 4 et 8. Chacun de ces nombres est une puissance de 2, ils sont donc représentés par un nombre binaire avec un seul <tt>1</tt> :"
+ "Tant que vous vous déplacez dans une de ces bandes horizontales, les choses sont simples. Par exemple, pour aller à droite, il suffit d\'incrémenter l\'octet le moins significatif (par ex. <tt>$0200</tt> devient <tt>$0201</tt>). Pour descendre, ajoutez <tt>$20</tt> (par ex. <tt>$0200</tt> devient <tt>$0220</tt>). Gauche et haut sont l\'inverse."
+ "Comme toujours, cette version inclut de nombreux petits correctifs et améliorations."
+ "Les améliorations de l\'architecture permettent un meilleur partage de code entre les plateformes GNOME, Web et Android."
+ "Paramètres d\'apparence"
+ "Apparence"
+ "Tous les nombres préfixés par <tt>$</tt> dans le langage assembleur 6502 (et par extension, dans ce livre) sont au format hexadécimal (hex). Si vous n\'êtes pas familier avec les nombres hexadécimaux, je vous recommande de lire <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">l\'article Wikipédia</a>. Tout ce qui est préfixé par <tt>#</tt> est une valeur numérique littérale. Tout autre nombre fait référence à un emplacement mémoire."
+ "Une chose importante à noter ici est la distinction entre <tt>ADC #$01</tt> et <tt>ADC $01</tt>. Le premier ajoute la valeur <tt>$01</tt> au registre <tt>A</tt>, mais le second ajoute la valeur stockée à l\'emplacement mémoire <tt>$01</tt> au registre <tt>A</tt>."
+ "Également utiles : <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Presque terminé !"
+ "Toutes les instructions qui supportent l\'adressage absolu (à l\'exception des instructions de saut) ont également la possibilité de prendre une adresse d\'un seul octet. Ce type d\'adressage est appelé \"page zéro\" - seule la première page (les 256 premiers octets) de la mémoire est accessible. C\'est plus rapide, car un seul octet doit être consulté, et cela prend également moins de place dans le code assemblé."
+ "Tous les fichiers"
+ "Après cela, la valeur <tt>2</tt> est ajoutée à l\'accumulateur, pour créer un nombre aléatoire final dans la plage 2–5."
+ "Après le bloc initial de commentaires (lignes commençant par des points-virgules), les deux premières lignes sont :"
+ "Après la détection de collision, nous mettons à jour la position du serpent. Cela se fait à haut niveau comme suit : D\'abord, déplacer chaque paire d\'octets du corps d\'une position vers le haut en mémoire. Ensuite, mettre à jour la tête selon la direction actuelle. Enfin, si la tête est hors limites, la traiter comme une collision. Je vais illustrer cela avec de l\'art ASCII. Chaque paire de crochets contient une coordonnée x,y plutôt qu\'une paire d\'octets pour plus de simplicité."
+ "Après un déplacement dans chaque direction, nous devons également vérifier si la tête sortirait des limites. Cela est géré différemment pour chaque direction. Pour la gauche et la droite, nous pouvons vérifier si la tête a effectivement \"fait le tour\". Aller à droite depuis <tt>$021f</tt> en incrémentant l\'octet le moins significatif mènerait à <tt>$0220</tt>, mais cela revient en fait à sauter du dernier pixel de la première ligne au premier pixel de la deuxième ligne. Donc, chaque fois que nous allons à droite, nous devons vérifier si le nouvel octet le moins significatif est un multiple de <tt>$20</tt>. Cela se fait en utilisant un test de bits avec le masque <tt>$1f</tt>. L\'illustration ci-dessous vous montrera comment le masquage des 5 bits les plus bas révèle si un nombre est un multiple de <tt>$20</tt> ou non."
+ "Adwaita"
+ "Modes d\'adressage"
+ "Modes d\'adressage"
+ "Adresse %1$s - code d\'opération inconnu"
+ "Des entrées de boutons supplémentaires sont également disponibles : bouton A (touche Entrée/Retour, code ASCII <tt>$0D</tt>) et bouton B (touche Espace, code ASCII <tt>$20</tt>). Celles-ci peuvent être utilisées pour ajouter plus d\'interaction à vos jeux. Pour les contrôles directionnels, les touches ZQSD et les touches fléchées peuvent être utilisées de manière interchangeable."
+ "Ajout d\'une fonction d\'aide pour faciliter l\'édition du code pour les débutants"
+ "Ajout de la gestion des fichiers pour sauvegarder et charger vos programmes"
+ "Ajoutez plus d\'instructions pour dessiner des pixels supplémentaires."
+ "Accumulateur : Registre principal pour les calculs"
+ "Accent : Jaune"
+ "Accent : Bleu sarcelle"
+ "Accent : Ardoise"
+ "Accent : Rouge"
+ "Accent : Violet"
+ "Accent : Rose"
+ "Accent : Orange"
+ "Accent : Vert"
+ "Accent : Bleu"
+ "Couleur d\'accentuation"
+ "Absolu : <tt>$c000</tt>"
+ "Absolu,X et absolu,Y : <tt>$c000,X</tt> et <tt>$c000,Y</tt>"
+ "À propos de Learn 6502 Assembly"
+ "Une liste complète du jeu d\'instructions du 6502 est <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">disponible ici</a> et <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">ici</a> (je me réfère habituellement aux deux pages car elles ont chacune leurs forces et leurs faiblesses). Ces pages détaillent les arguments de chaque instruction, les registres qu\'elles utilisent et les drapeaux qu\'elles définissent. Ce sont vos bibles."
+ "Un ticket GitHub a été ouvert dans votre navigateur. Veuillez le vérifier et le soumettre là pour compléter votre contribution. Une fois approuvé, votre exemple sera inclus dans la prochaine version.\n\nSi votre exemple est trop volumineux, le contenu complet sera copié dans votre presse-papiers pour un collage manuel dans le ticket GitHub."
+ "<tt>init</tt> et <tt>loop</tt> sont toutes deux des sous-routines. <tt>init</tt> initialise l\'état du jeu, et <tt>loop</tt> est la boucle principale du jeu."
+ "<tt>checkSnakeCollision</tt> parcourt les segments du corps du serpent, vérifiant chaque paire d\'octets par rapport à la paire de la tête. S\'il y a une correspondance, alors c\'est la fin du jeu."
+ "<tt>a9</tt> et <tt>c9</tt> sont respectivement les codes d\'opération du processeur pour <tt>LDA</tt> et <tt>CMP</tt> en adressage immédiat. <tt>01</tt> et <tt>02</tt> sont les arguments de ces instructions. <tt>d0</tt> est le code d\'opération pour <tt>BNE</tt>, et son argument est <tt>02</tt>. Cela signifie \"sauter les deux octets suivants\" (<tt>85 22</tt>, la version assemblée de <tt>STA $22</tt>). Essayez de modifier le code pour que <tt>STA</tt> prenne une adresse absolue de deux octets plutôt qu\'une adresse de page zéro d\'un seul octet (par exemple, changez <tt>STA $22</tt> en <tt>STA $2222</tt>). Réassemblez le code et regardez à nouveau le hexdump - l\'argument de <tt>BNE</tt> devrait maintenant être <tt>03</tt>, car l\'instruction que le processeur saute fait maintenant trois octets de long."
+ "<tt>X</tt> contient la couleur du pixel, et <tt>Y</tt> contient la position du pixel actuel. La première boucle dessine la couleur actuelle comme un pixel (via le registre <tt>A</tt>), empile la couleur sur la pile, puis incrémente la couleur et la position. La deuxième boucle dépile la pile, dessine la couleur dépilée comme un pixel, puis incrémente la position. Comme on pouvait s\'y attendre, cela crée un motif en miroir."
+ "<tt>SP</tt> est le pointeur de pile. Je n\'entrerai pas dans les détails de la pile pour l\'instant, mais en gros ce registre est décrémenté chaque fois qu\'un octet est empilé sur la pile, et incrémenté lorsqu\'un octet est dépilé de la pile."
+ "<tt>PC</tt> est le compteur de programme - c\'est ainsi que le processeur sait à quel point du programme il se trouve actuellement. C\'est comme le numéro de ligne actuel d\'un script en cours d\'exécution. Dans le simulateur, le code est assemblé à partir de l\'emplacement mémoire <tt>$0600</tt>, donc <tt>PC</tt> commence toujours là."
+ "<tt>JSR</tt> et <tt>RTS</tt> (\"saut vers sous-routine\" et \"retour de sous-routine\") sont un duo dynamique que vous verrez généralement utilisés ensemble. <tt>JSR</tt> est utilisé pour sauter de l\'emplacement actuel vers une autre partie du code. <tt>RTS</tt> retourne à la position précédente. C\'est essentiellement comme appeler une fonction et en revenir."
+ "<tt>JMP</tt> est un saut inconditionnel. Voici un exemple très simple pour le montrer en action :"
+ "<tt>BCC</tt> et <tt>BCS</tt> (\"branchement si retenue effacée\" et \"branchement si retenue activée\") sont utilisés pour le branchement sur le drapeau de retenue. Écrivez un programme qui utilise l\'une de ces deux instructions."
+ "<b>Page zéro</b> : <tt>$0000</tt>-<tt>$00FF</tt> (premiers 256 octets, accès plus rapide)"
+ "<b>Page zéro</b> (<tt>$c0</tt>) : Accéder aux emplacements mémoire <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Page zéro,X/Y</b> (<tt>$c0,X</tt>) : Ajouter le registre X/Y à l\'adresse de la page zéro"
+ "<b>Z</b> (Zéro) : Activé lorsque le résultat est zéro"
+ "<b>X, Y</b> : Registres d\'index pour l\'adressage et le comptage"
+ "<b>W</b> ou flèche haut (<tt>$77</tt>)"
+ "<b>V</b> (Débordement) : Activé lorsqu\'une opération arithmétique provoque un débordement signé"
+ "<b>Pile</b> : <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b> : Stocker les registres en mémoire"
+ "<b>SP</b> (Pointeur de pile) : Pointe vers la position actuelle de la pile (commence à <tt>$FF</tt>)"
+ "<b>SBC nécessite la retenue activée</b> : Activer <tt>C</tt> avant la soustraction (fonctionne comme un emprunt inversé). <tt>C</tt> effacé après SBC indique qu\'un emprunt a eu lieu."
+ "<b>S</b> ou flèche bas (<tt>$73</tt>)"
+ "<b>Relatif</b> (<tt>label</tt>) : Le branchement utilise un décalage signé de 8 bits à partir de l\'instruction suivante (−128…+127)"
+ "<b>Q</b> ou touche Entrée/Retour (<tt>$0D</tt>)"
+ "<b>Stockage du programme</b> : Commence à <tt>$0600</tt>"
+ "<b>PHA/PLA</b> : Empiler/dépiler l\'accumulateur vers/depuis la pile"
+ "<b>PC</b> (Compteur de programme) : Pointe vers la prochaine instruction à exécuter"
+ "<b>N</b> (Négatif) : Activé lorsque le bit 7 du résultat est activé"
+ "<b>LDA/LDX/LDY</b> : Charger les registres"
+ "<b>JSR/RTS</b> : Saut vers sous-routine / Retour de sous-routine"
+ "<b>JMP</b> : Saut inconditionnel"
+ "<b>Indirect</b> (<tt>($c000)</tt>) : Consulter l\'adresse stockée à l\'emplacement donné"
+ "<b>Post-indexé indirect</b> (<tt>($c0),Y</tt>) : Utiliser l\'adresse de la page zéro comme pointeur pour obtenir l\'adresse de base, puis ajouter Y à cette base"
+ "<b>Indirect indexé</b> (<tt>($c0,X)</tt>) : Ajouter X à l\'adresse de la page zéro, puis utiliser le résultat comme pointeur pour obtenir l\'adresse cible réelle"
+ "<b>Immédiat</b> (<tt>#$c0</tt>) : Utiliser la valeur directe"
+ "<b>INX/INY/DEX/DEY</b> : Incrémenter/décrémenter les registres"
+ "<b>I</b> (Interruption) : Activé lorsque les interruptions sont désactivées"
+ "<b>E</b> ou touche Espace (<tt>$20</tt>)"
+ "<b>Mémoire d\'affichage</b> : <tt>$0200</tt>-<tt>$05FF</tt> (utilisée pour l\'affichage à l\'écran)"
+ "<b>Contrôles directionnels</b> :"
+ "<b>D</b> ou flèche droite (<tt>$64</tt>)"
+ "<b>D</b> (Décimal) : Activé lorsque le processeur est en mode BCD (Binary Coded Decimal)"
+ "<b>Opérations de comparaison</b> : <tt>CMP/CPX/CPY</tt> définissent <tt>N/Z/C</tt> comme une soustraction (registre − mémoire) sans stocker de résultat."
+ "<b>C</b> (Retenue) : Activé lorsque les opérations arithmétiques dépassent un octet"
+ "<b>BEQ/BNE/BCC/BCS</b> : Branchement si égal/non égal/retenue effacée/retenue activée"
+ "<b>B</b> (Break) : Activé lorsque l\'instruction BRK est exécutée"
+ "<b>Boutons d\'action</b> :"
+ "<b>Absolu</b> (<tt>$c000</tt>) : Accéder à n\'importe quelle adresse mémoire"
+ "<b>Absolu,X/Y</b> (<tt>$c000,X</tt>) : Ajouter le registre X/Y à l\'adresse absolue"
+ "<b>ADC/SBC</b> : Addition/soustraction avec retenue"
+ "<b>A</b> ou flèche gauche (<tt>$61</tt>)"
+ "<b>A</b> (Accumulateur) : Registre principal pour les calculs et la manipulation de données"
+ "<b><tt>$f</tt></b> : Gris clair (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b> : Bleu clair (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b> : Vert clair (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b> : Gris (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b> : Gris foncé (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b> : Rouge clair (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b> : Dernière touche pressée (code ASCII)"
+ "<b><tt>$FE</tt></b> : Générateur de nombres aléatoires (renvoie une valeur aléatoire entre 0 et 255)"
+ "<b><tt>$9</tt></b> : Marron (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b> : Orange (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b> : Jaune (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b> : Bleu (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b> : Vert (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b> : Violet (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b> : Cyan (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b> : Rouge (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b> : Blanc (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b> : Données de position du serpent (tête, segments du corps, queue)"
+ "<b><tt>$0</tt></b> : Noir (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b> : Longueur du serpent"
+ "<b><tt>$02</tt></b> : Direction du serpent (1=haut, 2=droite, 4=bas, 8=gauche)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b> : Position de la pomme"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> a créé un <a href=\"https://gist.github.com/wkjagt/9043907\">gist entièrement annoté de ce code source</a>, suivez-le pour plus de détails."
+ "Le langage assembleur 6502 possède un ensemble d\'instructions de branchement, qui se basent toutes sur l\'état de certains drapeaux. Dans cet exemple, nous allons examiner <tt>BNE</tt> : \"Branchement si non égal\"."
+ "Pile 6502 remplie ! Retour à zéro..."
+ "Pile 6502 vidée ! Retour à zéro..."
+ "(En fait, on m\'a informé de manière fiable que les processeurs 6502 sont toujours produits par le <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> et <a href=\"https://www.mouser.co.uk/c/?q=65C02\">vendus aux amateurs</a>, donc clairement le 6502 <i>n\'est pas</i> un langage mort ! Qui l\'eût cru ?)"
"6502"
diff --git a/packages/app-android/data/Android/src/main/res/values-he/strings.xml b/packages/app-android/data/Android/src/main/res/values-he/strings.xml
new file mode 100644
index 00000000..4834c696
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-he/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "לימוד שפת הסף של 6502"
+ "לימוד שפת הסף של 6502"
+ "לימוד שפת הסף של 6502"
+ "வணக்கம்! אנחנו שמחים לקבל בברכה את התרגום לטמילית, שנתרם על ידי தமிழ்நேரம். நன்றி!"
+ "שמייצג את הכתובות העקיפות <tt>$0411</tt>, <tt>$0410</tt> ו־<tt>$040f</tt> (שלשה פיקסלים במרכז המסך). אני חורש על הנקודה הזאת, אבל היא חיונית להבנה איך מיעון עקיף עובד במלואו."
+ "wdm-output"
+ "תכנות"
+ "לימוד"
+ "על ידי %1$s"
+ "_העדפות"
+ "דף אפס: <tt>$c0</tt>"
+ "דף אפס,Y: <tt>$c0,Y</tt>"
+ "דף אפס,X: <tt>$c0,X</tt>"
+ "שימוש בדף אפס"
+ "דף אפס ($0000-$00FF)"
+ "דגל האפס: מוגדר כשהתוצאה של פעולה היא אפס. חיוני להסתעפות מותנית - רוב פקודות הקפיצה המותנות (BEQ, BNE) בודקים את הדגל הזה לראות אם ערך מסוים היה אפס כדי לקבוע את זרימת התוכנה."
+ "בקובץ שלך ישנם שינויים לא שמורים. ללא שמירה השינויים יאבדו."
+ "ראיתם את <tt>TAX</tt>. בטח תוכלו לנחש מה עושים <tt>TAY</tt>, <tt>TXA</tt> ו־<tt>TYA</tt>, אבל תכתבו קצת קוד לבדוק אם נחשתם נכון."
+ "תמכתם בפרויקט קוד פתוח זה על ידי רכישת האפליקציה. תודה!"
+ "אתם יכולים לחשוב המסך כארבע רצועות אופקיות של 32 × 8 פיקסלים. הרצועות האלה מותאמות ל־<tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> ו־<tt>$0500-$05ff</tt>. שורות הפיקסלים הראשונות הם <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, וכו\'."
+ "צהוב"
+ "כתבו ועירכו קוד עם עורך קוד מובנה"
+ "בין כל הדוגמאות האלה אולי תמצאו עזר ב<b>צג ההקסדצימלי</b> בתצוגת ניפוי השגיאות כדי לעקוב אחר השינויים בזיכרון. בחרו אזור זיכרון מהרשימה כדי לראות את הקטע הזה — לדוגמה, <b>זיכרון תצוגה ($0200–$05FF)</b> כדי לצפות בפיקסלים שבמסך, או <b>דף אפס ($0000–$00FF)</b> כדי לבחון את 256 הבתים הראשונים."
+ "במיעון מוחלט, משתמשים בכתובת הזכרון המלאה כפרמטר לפקודה. לדוגמה:"
+ "מקבלים בברכה את התרגום לווייאטנמית, נתרם במלואו על ידי Loc Huynh (hthienloc)."
+ "מקבלים בברכה את התרגום לפולנית, במקור נתרם על ידי Micro Wave. Dziękujemy!"
+ "כבר הוצצנו לאזור מצב המעבד (החלק עם <tt>A</tt>, <tt>PC</tt> וכו\'.), אבל מה כל זה אומר?"
+ "הוספנו קטע \"דוגמאות\" חדש ללשונית הלימוד שבו תוכלו לגלות ולהריץ תוכניות 6502 מוערות־במלואן הישר מהישום. תתחילו מדוגמת משחק ה־\"סנייק\" שלנו ותראו איך הפיקסלים מתעוררים לתחייה!"
+ "הערכים <tt>$00</tt>-<tt>$0F</tt> מתארים 16 צבעים שונים (<tt>$00</tt>=שחור, <tt>$01</tt>=לבן)"
+ "שימוש בצבע מותאם אישית"
+ "שימוש בגוון מותאם אישית"
+ "עדכון מצב המשחק"
+ "שינויים לא שמורים"
+ "בשונה מ־דף אפס,Y, אי אפשר להשתמש ב־מוחלט,Y עם <tt>STX</tt> אבל אפשר עם <tt>LDA</tt> ו־<tt>STA</tt>."
+ "מאחורי הקלעים: עידכון ל־TypeScript 6, Vite 8, ושאר עידכוני תלות לשיפור הביצועים והיציבות."
+ "אי אפשר להעביר קוד אל מחוץ ל־64 קילובייט של זיכרון"
+ "לא ניתן לאתר או לעבד את הכתובת/תווית שניתנה"
+ "שניים מפקודות המחסנית הם <tt>PHA</tt> ו־<tt>PLA</tt>, \"דחוף את הסוכם\" ו־\"משוך את הסוכם\". למטה ישנה דוגמה של שניהם בפעולה."
+ "שתי תוכניות דוגמה חדשות, ושתיהן הגיעו מכם: Dino Run של Jacob, ו־Line Buster 6502 של edit12. אלו הדוגמאות הראשונות שנשלחו עם כפתור השיתוף, ונשמח לעוד."
+ "מדריך <sub>של <a href=\"https://www.skilldrick.co.uk/\">ניק מורגן</a>, תחת רישיון CC BY 4.0</sub>"
+ "מדריך"
+ "נסו לכתוב קטעי קוד שמשתמשים בכל אחד ממצבי המיעון של ה־6502. זיכרו, אתם יכולים להשתמש ב<b>צג ההקסדצימלי</b> בתצוגת ניפוי השגיאות כדי לצפות בקטע מהזיכרון."
+ "נסו תוכניות לדוגמה למעבד 6502."
+ "נסו תוכניות לדוגמה"
+ "נסו לשנות את הצבע של שלושת הפיקסלים."
+ "הצג או הסתר את התפריט הצידי"
+ "כדי לבדוק אם הכיוון הוא <tt>1</tt>, <tt>2</tt>, <tt>4</tt> או <tt>8</tt>, הקוד מוזיז ביטים ימינה ללא הרף עד שדגל הנשא מוגדר. <tt>LSR</tt> אחד פירושו \"למעלה\", שתיים פירושם \"ימינה\", וכן הלאה."
+ "כותרת"
+ "העדכון הזה מביא עיצוב תוסס בהשראת קונסולות יד עם צבעים בהתאמה אישית. הוספנו פריסות גמישות ששומרים על התצוגה בטאבלט ושולחן העבודה, מושלמים לאותם \"מרתונים\" ארוכים של תכנות כשלומדים לפתח משחקי רטרו בשפת סף. תודה רבה לתורם החדש שלנו @mmartinortiz על הרעיונות הנפלאים לפריסות שולחניות. יש גם מספר שיפורים טכנים מגניבים, כמו מצב מחמיר ב־TypeScript, עיצובי GtkSourceView מותאמים אישית, ושיפור המקשים במנפה השגיאות להקלה על חווית הפיתוח."
+ "האחד הזה קצת מוזר. הוא כמו שילוב בין דף אפס,X ו־עקיף. בעצם, אתם לוקחים כתובת דף אפס, מוסיפים אליה את הערך שבאוגר <tt>X</tt>, ואז משתמשים בתוצאה כדי למצוא כתובת בת שני בתים. לדוגמה:"
+ "זה טוען את הערך <tt>$11</tt> לנקודת הזכרון <tt>$10</tt>, את הערך <tt>$10</tt> ל־<tt>$12</tt>, ואת <tt>$0f</tt> ל־<tt>$14</tt>. אחר כך הוא טוען את הערך <tt>$04</tt> ל־<tt>$11</tt>, <tt>$13</tt> ו־<tt>$15</tt>. זה מוביל לזיכרון כזה:"
+ "פה המיעון הופך למעניין. במצב הזה, דף אפס ניתן, ואז הערך של אוגר <tt>X</tt> מוסף עליו. הנה דוגמה:"
+ "זה אותו דבר כמו דף אפס,X, אבל יכול לשמש רק עם <tt>LDX</tt> ו־<tt>STX</tt>."
+ "אלו גרסאות המיעון המוחלט של דף אפס,X ו־דף אפס,Y. לדוגמה:"
+ "יש גם סיבה מאוד פרקטית: פיתוח משחקי רטרו. עולם המשחקים תוצרת בית חי וקיים – עדיין יוצאים <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">משחקים חדשים ל־NES</a> (חלקם אפילו בכרטיס פיזי) ולהרבה מערכות קלסיות; ה־NES הוא רק דוגמה. גם אם המטרה שלכם היא משהו כמו ה־SNES, שווה להתחיל עם 6502: המעבד של ה־SNES (65C816) תומך לאחור ב־6502, אז היסודות שתלמדו כאן – אוגרים, מצבי מיעון, ועיקר סט הפקודות – יעברו לשם ישירות."
+ "אז למה 6502? למה לא שפת סף <i>שימושית</i>, כמו <a href=\"https://he.wikipedia.org/wiki/X86\">x86</a>? ובכן, אני לא חושב שזה שימושי ללמוד x86. אני לא חושב שתצטרכו אי פעם <i>לכתוב</i> שפת סף בעבודה היום יומית ‐ למספר אנשים זה תרגיל אקדמי, משהו לפתח את הראש והמחשבה. 6502 נכתב מלכתחילה בדור אחר, בזמן שבו רוב המתכנתים היו כותבים ישירות בשפת סף, ולא בשפות התכנות הגבוהות החדשות־מעורפלות. לכן היא עוצבה להכתב על ידי בני־אדם. שפות סף יותר מודרניות נועדו להכתב על ידי תוכנות הידור, אז נשאיר אותם להם. בנוסף, 6502 היא <i>כֵּפִית</i>. אף אחד מעולם לא קרא ל־x86 <i>כיף</i>."
+ "דף האפס של הזיכרון משמש לשמירת מספר משתנים של מצב המשחק, כמצויין בההערה בתחילה המשחק. הכל ב־<tt>$00</tt>, <tt>$01</tt> ו־<tt>$10</tt> ומעלה מורכב מזוגות בתים שמייצגים נקודות זיכרון בנות שתי בתים שיגשו אליהן במיעון עקיף. כל נקודות הזיכרון האלו יהיו בין <tt>$0200</tt> ו־<tt>$05ff</tt> - קטע הזיכרון שמחובר למסך המשחק. לדוגמה, אם <tt>$00</tt> ו־<tt>$01</tt> יכילו את הערכים <tt>$01</tt> ו־<tt>$02</tt>, הכוונה בהם היא לפיקסל השני של המסך (<tt>$0201</tt> – זיכרו, הבייט השולי מגיע ראשון במיעון עקיף)."
+ "המחסנית במעבד 6502 היא בדיוק כמו כל מחסנית אחרת - ערכים נדחפים אל תוכה ומוצאים (\"נמשכים\" בשפה של 6502) ממנה. עומקה הנוכחי של המחסנית נמדד באמצעות מצביע המחסנית, אוגר מיוחד. המחסנית שוכנת בזיכרון בין <tt>$0100</tt> ו־<tt>$01ff</tt>. בהתחלה מצביע המחסנית שווה ל־<tt>$ff</tt>, כך שמצביע על נקודת הזיכרון <tt>$01ff</tt>. כאשר בייט נדחף אל תוך המחסנית, מצביע המחסנית הופך ל־<tt>$fe</tt>, ומצביע על נקודת הזיכרון <tt>$01fe</tt>, וכן הלאה."
+ "המחסנית"
+ "משחק הסנייק מהמדריך"
+ "התוצאה של התהליך הזה היא טעינת בייט אקראי ל־<tt>$00</tt>, ומספר אקראי בין 2 ל־5 ל־<tt>$01</tt>. בגלל שבמיעון עקיף הבייט השולי מגיע ראשון, זה מתורגם לכתובת זכרון בין <tt>$0200</tt> ו־<tt>$05ff</tt>: בדיוק הטווח שמשמש לציור על המסך."
+ "המעבד יודע לאן לחזור כי <tt>JSR</tt> דוחף את הכתובת של הפקודה הבאה פחות אחד למחסנית לפני שהוא קופץ למקום הנתון. <tt>RTS</tt> מוציא את הכתובת הזאת, מוסיף לה אחד, וקופץ אליה. לדוגמה:"
+ "הבעיה היא, ש־<tt>$184</tt> גדול מהכיל בבייט בודד (המקסימום הוא <tt>$FF</tt>), והאוגרים יכולים להכיל רק בייט בודד. אבל זה בסדר; למעשה המעבד לא טיפש. אם עקבתם מספיק בזהירות, וודאי הבחנתם שדגל הנשא הוגדר ל־<tt>1</tt> אחר הפעולה הזאת. וכך תוכלו לדעת."
+ "ההפך מ־<tt>BNE</tt> זה <tt>BEQ</tt>. נסו לכתוב תוכנה שמשתמשת ב־<tt>BEQ</tt>."
+ "ההפך מ־<tt>ADC</tt> הוא <tt>SBC</tt> (הפחתה עם נשא). כתבו תוכנה שמשתמשת בפקודה הזו."
+ "משחק הריצה הלא־מקוון של הדפדפן, בשפת הסף של 6502"
+ "התהליך הבא, <tt>generateApplePosition</tt>, מגדיר לתפוח מיקום אקראי במסך. קודם, הוא טוען בייט אקראי לסוכם (בסימולטור הזה <tt>$fe</tt> הוא מחולל מספרים אקראיים). ושומר אותו ב־<tt>$00</tt>. אחר כך, נטען לסוכם בייט אקראי נוסף, שעושים לו <tt>AND</tt> עם הערך <tt>$03</tt>. החלק הזה צריך קצת הסבר."
+ "התהליך הבא, <tt>checkCollision</tt>, מפנה אל <tt>checkAppleCollision</tt> ו־<tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> פשוט בודק אם שני הבתים שמכילים את מיקום התפוח שווים לשני הבתים שמכילים את מיקום הראש. אם כן, האורך גדל ונוצר מיקום חדש לתפוח."
+ "השורה הבאה, <tt>BNE decrement</tt>, תסיט את המעבד לתווית decrement אם הדגל <tt>Z</tt> מוגדר ל־<tt>0</tt> (זאת אומרת ששני הערכים בהשוואה של <tt>CPX</tt> לא היו שווים), אחרת היא לא תעשה כלום ונשמור את <tt>X</tt> ב־<tt>$0201</tt>, ואז נסיים את התוכנית."
+ "החלק הבא מעדכן את ראש הנחש לפי הכיוון. זה כנראה החלק הכי מסובך של הקוד, והכל בגלל איך שנקודות הזיכרון מותאמות למסך, אז בוא נתמקד בזה."
+ "האורך מאותחל ל־<tt>4</tt>, אז <tt>X</tt> מתחיל כ־<tt>3</tt>. <tt>LDA $10,x</tt> טוען את הערך <tt>$13</tt> לתוך <tt>A</tt>, ואז <tt>STA $12,x</tt> שומר את הערך הזה לתוך <tt>$15</tt>. <tt>X</tt> מוקטן, וחוזרים לראש הלולאה. עכשיו <tt>X</tt> שווה <tt>2</tt>, אז אנחנו טוענים <tt>$12</tt> ושומרים אותו בתוך <tt>$14</tt>. חוזרים על כך כל עוד <tt>X</tt> חיובי (<tt>BPL</tt> פירושו \"הסתעף כאשר חיובי\")."
+ "התהליכון האחרון, <tt>spinWheels</tt>, נמצא כאן רק כי המשחק ירוץ מהר מידי בלעדיו. כל מה ש־<tt>spinWheels</tt> עושה זה להפחית את <tt>X</tt> מאפס עד שיגיע לאפס שוב. ה־<tt>dex</tt> הראשון חוזר למעלה, והופך את <tt>X</tt> ל־<tt>#$ff</tt>."
+ "הקטע האחרון מראה את דגלי המעבד. כל דגל הוא ביט אחד, כך שכל שבעת הדגלים שוכנים בבייט בודד. הדגלים מוגדרים על ידי המעבד כדי לתת מידע על הפקודה הקודמת. נרחיב על כך בהמשך. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">קראו עוד על אוגרים ודגלים כאן</a>."
+ "הערך ההקסדצימלי <tt>$03</tt> מיוצג בבינרי כ־<tt>00000011</tt>. הפקודה <tt>AND</tt> מבצעת AND בין הסיביות של הפרמטר לסוכם. לדוגמה, אם הסוכם מכיל את הערך הבינרי <tt>10101010</tt>, אז התוצאה של <tt>AND</tt> עם <tt>00000011</tt> תהיה <tt>00000010</tt>."
+ "הקוד ההקסדצימלי אמור להראות משהו כמו זה:"
+ "לולאת המשחק"
+ "שתי הבתים הראשונים מכילים את מיקום התפוח. הם מעודכנים בכל פעם שהנחש אוכל את התפוח. בייט <tt>$02</tt> מכיל את הכיוון הנוכחי. <tt>1</tt> פירושו למעלה, <tt>2</tt> ימינה, <tt>4</tt> למטה, ו־<tt>8</tt> שמאלה. הרעיון מאחורי מספרים אלו יובהר בהמשך."
+ "התהליך הראשון, <tt>readKeys</tt>, אחראי לקבלת קלט מהמשתמש. כתובת הזכרון <tt>$ff</tt> מכילה את קוד ה־ascii של התו האחרון שהוקש בסימולטור. הערך נטען לסוכם, ואז מושווה ל־<tt>$77</tt> (הקוד ההקסדצימלי ל־W), <tt>$64</tt> (D), <tt>$73</tt> (S) ו־<tt>$61</tt> (A). אם אחת ההשוואות האלו מצליחה, התוכנה תסתעף לקטע המתאים."
+ "השורה הראשונה מראה את האוגרים <tt>A</tt>, <tt>X</tt> ו־<tt>Y</tt> (<tt>A</tt> מכונה לעיתים קרובות \"הצובר\" או \"הסוכם\"). כל אוגר מכיל בייט בודד. רוב הפקודות פועלות על התוכן של האוגרים האלה."
+ "הפקודה הראשונה גורמת להרצה לקפוץ אל התווית <tt>init</tt>. זה מגדיר את <tt>X</tt>, ואז חוזר לפקודה הבאה, <tt>JSR loop</tt>. זה קופץ לתווית <tt>loop</tt>, שמגדילה את <tt>X</tt> עד שהוא שווה ל־<tt>$05</tt>. אחר כך אנחנו חוזרים לפקודה הבאה, <tt>JSR end</tt>, שמקפיצה אל סוף הקובץ. זה מתאר איך אפשר להשתמש ב־<tt>JSR</tt> ו־<tt>RTS</tt> יחדיו כדי ליצור קוד מודולרי."
+ "התוצאה של זה היא שמירת שתי הביטים השולִים של הסוכם, ואיפוס השאר. זה ממיר מספר מטווח של 0–255 למספר בטווח של 0–3."
+ "הקוד למטה כולל את כל קוד המקור של המשחק. אני יסביר איך הוא עובד בפסקאות הבאות."
+ "עכשיו המסך השחור של קונסולת המשחק אמור להציג שלושה \"פיקסלים\" צבועים למעלה משמאל."
+ "האפליקציה מעוצבת עבור גופן הממשק של GNOME. במערכות אחרות היא מוצגת בגופן של אותה מערכת, שבדרך כלל קטן יותר."
+ "אוגר האינדוּקס Y דומה ל־X ואין לו שום יכולות מיוחדות. בדרך כלל משתמשים בו לאינדוּקס כתובות והוזזת נתונים."
+ "אוגר האינדוּקס X משמש למצבי מיעון מאוּנדקסים ולפעולות ספירה. הוא יכול להכיל מונה ללולאות, אינדקס למערכים, והוא חשוב לגישה אל נקודות זיכרון ביחס לכתובת בסיס כש־X משמש כהיסט. מיוחד: TSX/TXS מחליפים בין X למצביע המחסנית."
+ "מצביע המחסנית מנהל את מחסנית הקריאות לתהליכונים ופסיקות. הוא מתחיל ב $FF (ראש המחסנית) וגדל כלפי מטה. משמש בפעולות PUSH/PULL, קריאות JSR/RTS, וניהול פסיקות. חיוני לקריאת פונקציות בתוך פונקציות."
+ "מונה התוכנה מכיל את הכתובת של הפקודה הבאה שעומדת לרוץ. הוא גדל אוטומטית אחרי כל פקודה ואפשר לשנות אותו עם קפיצות, הסתעפויות, קריאות, וחזרות. חיוני לפיקוד על מהלך התוכנה, ולניפוי שגיאות."
+ "הסוכם (Accumulator, A) הוא האוגר הראשי לפעולות אריתמטיות ולוגיות. כל החישובים הבסיסיים כמו ADD, SUBTRACT, AND, OR, וכו\'. משתמשים באוגר הזה. הוא האוגר הכי נפוץ בשפת הסף 6502."
+ "התהליך <tt>loop</tt> עצמו פשוט קורא ברצף למספר תהליכים לפני שחוזר על עצמו:"
+ "התהליכון <tt>init</tt> מוביל לשתי תהליכונים, <tt>initSnake</tt> ו־<tt>generateApplePosition</tt>. <tt>initSnake</tt> מגדיר את כיוון הנחש, ואורכו, ואז טוען את נקודות הזכרון ההתחלתיות של גוף וראש הנחש. זוג הבתים ב־<tt>$10</tt> מכיל את מיקום הראש במסך, הזוג ב־<tt>$12</tt> מכיל את המיקום של פלג גוף בודד, ו־<tt>$14</tt> מכיל את מיקומו של הזנב (הזנב הוא פלג הגוף האחרון וצובעים אותו בשחור כדי שהנחש יראה זז). זה קורה בקוד הבא:"
+ "הפקודה <tt>BIT</tt> זהה ל־<tt>AND</tt>, אבל החישוב משמש רק להגדרת דגל האפס - התוצאה עצמה נזרקת. דגל האפס מוגדר רק אם התוצאה של פעולת AND בין הסוכם לפרמטר היא אפס. כשעוסקים רק בחזקות של שתיים, דגל האפס יוגדר רק אם שני המספרים שונים. לדוגמה, <tt>0001 AND 0001</tt> לא שווה אפס, אבל <tt>0001 AND 0010</tt> כן שווה אפס."
+ "ה־6502 משתמש בנתיב מידע של 16 ביטים, זאת אומרת ש־65536 בתים של זיכרון זמינים למעבד. זיכרו שבייט מיוצג עם שתי תווים הקסדצימלים, אז בדרך כלל מציגים את כתובות הזיכרון כטווח <tt>$0000 - $ffff</tt>. ישנם דרכים רבות לפנות לכתובות האלה, כמפורט למטה."
+ "תודה שאתם משתמשים בתוכנה בקוד פתוח."
+ "בודק את ביט 0 של A באמצעות LSR ו-BCC, ומציב 1 או 0 ב-A בהתאם לתוצאה"
+ "בידקו את היצירות שלכם על קונסולת משחק ווירטואלית"
+ "Tervetuloa! אנחנו שמחים להזמין את התרגום לפינית. באדיבותו של Jiri Grönroos. Kiitos!"
+ "טורקיז"
+ "גופן המערכת, בגודל של GNOME"
+ "ברירת המחדל של המערכת"
+ "שגיאת תחביר בשורה %1$d: %2$s"
+ "תומך"
+ "תמיכה"
+ "שלח"
+ "עיצוב"
+ "עצר"
+ "מדריך שלב אחר שלב לשפת הסף 6502"
+ "צעד"
+ "דגלי מצב"
+ "מצביע המחסנית: מצביע על מיקום המחסנית"
+ "דוגמת מחסנית"
+ "מחסנית ($0100-$01FF)"
+ "נקודות זיכרון מיוחדות (בסימולטור)"
+ "URL למקור"
+ "חלק מהפקודות לא מתעסקים עם כתובות זכרון (לדוגמה <tt>INX</tt> - מגדיל את אוגר <tt>X</tt>). קוראים להם בעלי מיעון משתמע - הנשוא מובן מהפקודה עצמה."
+ "אז למה שתרצו ללמוד 6502? זו שפה נכחדת לא? ובכן כך גם לטינית. ועדיין מלמדים אותה. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "אז מה באמת התוכנה הזאת עושה? בואו נצעד דרכה. לחצו על <b>איפוס</b>, ואז השתמשו ב־<b>צעד</b> כדי להריץ את התוכנה פקודה אחת בכל פעם. תצוגת <b>ניפוי שגיאות</b> מראה את האוגרים והזיכרון — בחלון קטן זה לשונית נפרדת, ובחלון רחב זה הלוח שמתחת לקונסולת המשחק. לחצו <b>צעד</b> פעם אחת ותבחינו בתצוגת ניפוי השגיאות ש־<tt>A=</tt> השתנה מ־<tt>$00</tt> ל־<tt>$01</tt>, ו־<tt>PC=</tt> השתנה מ־<tt>$0600</tt> ל־<tt>$0602</tt>."
+ "אז הפקודה <tt>STA $0200</tt> שומרת את הערך של האוגר <tt>A</tt> בנקודת הזכרון <tt>$0200</tt>. לחצו על <b>צעד</b> עוד ארבעה פעמים כדי להריץ את שאר הפקודות, ושימו עין על אוגר <tt>A</tt> לראות איך הוא משתנה."
+ "אז, אם ניקח את <tt>upKey</tt>, אם הכיוון הנוכחי הוא למטה (4), ביט הבדיקה יהיה אפס. <tt>BNE</tt> פירושו \"הסתעף אם דגל האפס אינו מוגדר\", אז במקרה הזה אנחנו נסתעף ל־<tt>illegalMove</tt>, שפשוט חוזר מהתהליכון. אחרת, הכיוון החדש (1 במקרה הזה) נשמר בנקודת הזכרון המתאימה."
+ "אז בואו נתחיל! הישומון הזה מכיל <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">מאסף וסימולטור של 6502 בג\'אווה־סקריפט</a> שהתאמתי למדריך האינטראקטיבי הזה. לחצו על הכפתור <b>העתק</b> במסגרת הקוד למטה כדי להעתיק את דוגמת הקוד לעורך. אחר כך השתמשו ב־<b>הַרְכֵּב</b> כדי להרכיב את הקוד, וב־<b>להריץ</b> כדי להריץ אותו. אתם יכולים למצוא את הפעולות האלו ככפתורים או בתפריט."
+ "בנתיים אנחנו יכולים לכתוב רק תוכנות פשוטות בלי שום הסתעפות לוגית. בואו נשנה את זה."
+ "שימוש בזיכרון של משחק הסנייק"
+ "נתונים של משחק הסנייק ($00-$15)"
+ "משחק סנייק"
+ "אפור"
+ "כשל בהדמיה"
+ "הדמיה"
+ "עכשיו דוגמאות קוד משותפות כוללים מידע על רשיון CC-BY-4.0, כדי להבאיר איך הקהילה יכולה להשתמש ולהתבסס על תרומותכם."
+ "שתפו את הדוגמה שלכם"
+ "שתף דוגמה"
+ "שיתוף"
+ "שלום! אנחנו שמחים לקבל בברכה את התרגום לעברית, שנתרם במלואו על ידי מנחם (naattxx). תודה רבה!"
+ "אבל ברצינות, אני חושב שלהבנת שפת סף יש ערך גדול, שפת סף היא רמת ההפשטה הנמוכה ביותר בעולם המחשבים - הנקודה שבא הקוד עדיין קריא. שפת סף מתורגמת ישירות לבתים שהמעבד במחשב שלכם מריץ. אם אתם מבינים איך היא עובדת, תחל\'ס נהייתם <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">קוסמים</a> במחשבים."
+ "Selamat datang! אנחנו מקבלים בברכה גם את התרגום לאינדונזית, באדיבותו של Arif Budiman. Terima kasih!"
+ "המסך ממופה לטווח הזיכרון <tt>$0200</tt>-<tt>$05FF</tt>"
+ "תגידו שלום להרבה תרגומים טריים: צרפתית, אינטרלינגואה, פורטוגזית, פורטוגזית (ברזילאית), גרמנית, ספרדית, אוקראינית, יפנית וסינית (מופשטת)"
+ "נשמר כ%1$s"
+ "לשמור שינויים?"
+ "שמירה בשם..."
+ "שמור קובץ סף"
+ "שמור"
+ "משחק סנייק פועל"
+ "להריץ"
+ "שכתבו את הדוגמה הראשונה בקטע הזה להשתמש באוגר <tt>Y</tt> במקום באוגר <tt>X</tt>."
+ "בידקו כיצד הדוגמה שלכם תראה לאחרים. לחיצה על <b>שלח</b> תיצור הצעה ב־Github. אתם תצטרכו להכנס עם חשבון ה־Github שלכם כדי להשלים את השליחה."
+ "להמשיך"
+ "איפוס"
+ "ציור המשחק"
+ "יחסי: <tt>$c0</tt> (או תווית)"
+ "מיעון יחסי משמש לפקודות הסתעפות. הפקודות האלה מקבלות בייט בודד, שמשמש כהיסט מהפקודה הבאה."
+ "אוגרים ודגלים"
+ "אוגרים"
+ "הוקטן טווח ברירת המחדל של המנטר ההקסדצימלי לשיפור היעילות"
+ "אדום"
+ "קריאת הקלט"
+ "אקראי/קלט ($FE-$FF)"
+ "צא"
+ "טיפים קצרים"
+ "סגול"
+ "תכנתו קונסולות משחק ישנות"
+ "התוכנית עצרה"
+ "התוכנית הסתיימה. יש לאפס כדי לעבור שוב על התוכנית צעד אחר צעד."
+ "התוכנית סיימה כאשר PC=$%1$s"
+ "התוכנית הסתיימה"
+ "אכסון התוכנה ($0600-$FFFF)"
+ "מצביע התוכנה: מצביע על הפקודה הבאה"
+ "אוגר מצב המעבד"
+ "דגלי המעבד"
+ "מרכזי: צהוב"
+ "מרכזי: טורקיז"
+ "מרכזי: אפור"
+ "מרכזי: אדום"
+ "מרכזי: סגול"
+ "מרכזי: ורוד"
+ "מרכזי: כתום"
+ "מרכזי: ירוק"
+ "מרכזי: כחול"
+ "צבע עיקרי"
+ "הקודם"
+ "תצוגה מקדימה של דוגמתך"
+ "תצוגה מקדימה"
+ "לחצו <b>צעד</b> שוב כדי להריץ את הפקודה הבאה. עכשיו הפיקסל העליון־שמאלי של קונסולת המשחק אמור להיות לבן. הסימולטור הזה משתמש בנקודות הזכרון בין <tt>$0200</tt> ל־<tt>$05ff</tt> כדי לצבוע פיקסלים במסך שלו. הערכים <tt>$00</tt> עד <tt>$0f</tt> מייצגים 16 צבעים שונים (<tt>$00</tt> זה שחור ו־<tt>$01</tt> זה לבן), אז שמירת הערך <tt>$01</tt> בנקודת הזכרון <tt>$0200</tt> צובעת בלבן את הפיקסל העליון־שמאלי. זה יותר פשוט מאיך שמחשב אמיתי מוציא ווידאו, אבל זה יספיק לעכשיו."
+ "קדם עיבוד..."
+ "שחק"
+ "ורוד"
+ "מושלם לחובבנים, סטודנטים, ולכל מי שסקרן איך באמת מחשבים עובדים מאחורי הקלעים!"
+ "הפסקה"
+ "דגל הגלישה: מוגדר כשפעולה אריטמטית מניבה תוצאה שאי אפשר להציג בטווח 8־ביט מסומן (-128 עד +127). משמש לזיהוי שגיאות בחישובים אריטמטים מסומנים."
+ "מבנה כללי"
+ "הסתעפות אל מחוץ לתחום בשורה %1$d (הסתעפויות מוגבלות בין -128 ל־ +127): %2$s"
+ "התוכנה הראשונה שלנו"
+ "מסודר כארבעה רצועות אופקיות של 32×8 פיקסלים"
+ "כתום"
+ "ייעול תצורת Flatpak בהסרת הרשאות מיותרות"
+ "%1$s נפתח"
+ "פתיחה..."
+ "קוד פתוח"
+ "פתח קובץ קוד סף"
+ "לאחר שהערכים זזו במורד הנחש, אנחנו צריכים לחשוב מה לעשות עם הראש. קודם טוענים את הכיוון ל־<tt>A</tt>. <tt>LSR</tt> פירושו \"הוזזה לוגית ימינה\", או \"הוזז את כל הביטים מקום אחד לימין\". הביט השולי זז לדגל הנשא, אז עם הסוכם מכיל <tt>1</tt>, אחרי <tt>LSR</tt> הוא יכיל <tt>0</tt>, ודגל הנשא יוגדר."
+ "לאחר איפוס (סימולטור): <tt>P = $30</tt> (ביט 5 ו־<tt>B</tt> מוגדרים; <tt>D</tt> ו־<tt>I</tt> ריקים)"
+ "בסדר"
+ "עכשיו, באו נמצא שימוש טוב לכל הידע הזה, ונכין משחק! אנחנו הולכים להכין גרסה מאוד פשוטה של המשחק הקלסי \'סנייק\'."
+ "לא נדרש רקע בתכנות. התחילו עם שיעורים אינטראקטיבים וציברו מיומנות שלב אחר שלב."
+ "אין קוד להריץ."
+ "שום כתובת או תווית לא הוזנה"
+ "אחר כך מגיע <tt>drawSnake</tt>. גם זה די פשוט - אנחנו קודם מוחקים את הזנב ואז מציירים את הראש. <tt>X</tt> מוגדר לאורך הנחש, כדי שנוכל לפנות לפיקסל הנכון, ואנו מגדירים את <tt>A</tt> לאפס ואז מבצעים את הכתיבה באמצעות מצב המיעון המאונדקס עקיף. אחר כך אנחנו מאפסים את <tt>X</tt> כדי להפנות אל הראש, מגדירים את <tt>A</tt> לאחד ושומרים אותו ב־<tt>($10,x)</tt>. <tt>$10</tt> שומר את זוג הבתים של כתובת הראש, אז זה מצייר פיקסל לבן במקום הראש הנוכחי. כיוון שרק ראשו וזנבו של הנחש זזים, זה מספיק כדי לשמור על הנחש זז."
+ "כלים חדשים לבדיקת הקוד שלכם, כולל מפענח קוד (דיסאסמבלר) ומציג זיכרון מהיר"
+ "דגל השליליות: מוגדר כשהביט המשמעותי (ביט 7) של התוצאה הוא 1. משמש להשוואת מספרים מסומנים ומציין אם הערך שלילי בייצוג משלים לשתיים."
+ "בליבו של כמעט כל משחק שוכנת לולאה. לכל לולאות המשחק יש את אותה צורה בסיסית: קבלת קלט מהמשתמש, עידכון מצב המשחק, וציור מצב המשחק. לולאה זו אינה שונה."
+ "הודעות"
+ "נקודות הזיכרון <tt>$01</tt> ו־<tt>$02</tt> מכילות את הערכים <tt>$05</tt> ו־<tt>$07</tt> בהתאם. תחשבו על <tt>($00,X)</tt> כ־<tt>($00 + X)</tt>. במקרה הזה <tt>X</tt> שווה ל־<tt>$01</tt>, אז זה פשוט <tt>($01)</tt>. מכאן ממשיכים כמו מיעון עקיף רגיל - שתי הבתים ב־<tt>$01</tt> ו־<tt>$02</tt> (<tt>$05</tt> ו־<tt>$07</tt>) יוצרים את הכתובת <tt>$0705</tt>. זו הכתובת ששמרנו אליה את האוגר <tt>Y</tt> בפקודה הקודמת, אז האוגר <tt>A</tt> מקבל את אותו ערך כמו <tt>Y</tt>, אך דרך מסלול עקלקל ביותר. לא תראו את זה הרבה."
+ "מפת זיכרון"
+ "הרבה באגים קטנים תוקנו לשיפור חווית השימוש הכללית"
+ "שיפורי ממשק גדולים כולל כפתור פעולה צף (FAB) מודרני וגמיש לשליטה נוחה על תוכניות, ומנפה שגיאות שעוצב לגמרי מחדש עם רכיבי Adwaita מודרנים."
+ "Line Buster 6502"
+ "עיצוב בהיר"
+ "לימוד עם דוגמאות מעולם לא היה קל יותר. תצללו אל תוך קוד עובד, תשנו אותו, תהרסו אותו, תתקנו אותו שוב - כך למדו המתכנתים הטובים ביותר באותם ימים!"
+ "לימדו איך להשתמש במחסנית עם הפקודות PHA ו־PLA"
+ "לימדו כיצד לתכנת את ה־6502."
+ "למדו על ההיסטוריה של המחשבים תוך כדי תכנות"
+ "Learn 6502 עכשיו רץ גם על Windows ו־macOS. אם רציתם להפנות אליו חבר שלא משתמש ב־Linux, עכשיו אתם יכולים."
+ "לימוד 6502 עכשיו רץ על GNOME 50! תודה ל־Sabri Ünal על תרומתו לעדכון סביבת ההרצה."
+ "לימוד שפת הסף של 6502"
+ "למידה"
+ "כשל תוויות"
+ "התווית כבר מוגדרת בשורה %1$d: %2$s"
+ "התווית %1$s כבר משמשת כסימן; בבקשה שנו את אחד השמות"
+ "קפיצה היא כמו הסתעפות עם שתי הבדלים עיקריים. ראשית, קפיצות אינן מותנות, ושנית, הם מקבלים כתובת מוחלטת בת שני בתים. לתוכניות קטנות, הפרט השני לא כל־כך חשוב, כי בעיקר תשתמשו בתוויות, והמאסף מוצא את כתובת הזיכרון הנכונה לפי התווית. אבל בתוכנות גדולות, קפיצה זו הדרך היחידה לעבור בין קטע קוד אחד לאחר."
+ "קפיצה"
+ "JSR/RTS"
+ "JMP"
+ "מבוא"
+ "דגל הפסיקה: כאשר מוגדר, ממסך (מבטל) כל פסיקה שניתנת למיסוך (IRQ). רק פסיקות שאינם ניתנות למיסוך (NMI) יכולים עדיין לקרות. משמש לקטעי קוד חשובים שאין להפסיק במהלכם."
+ "גופן הממשק"
+ "מדריכים אינטראקטיבים יובילו אתכם ממתחילים למתקדמים"
+ "מדריך אינטראקטיבי"
+ "פקודות בשפת סף הם כמו סט קטן של פונקציות מוגדרות מראש. כל הפקודות או שלוקחות ארגומנט אחד או שלא. הנה לכם קצת קוד עם הערות שיציג מעט פקודות שונות:"
+ "פקודות"
+ "אתחול"
+ "עקיף: <tt>($c000)</tt>"
+ "עקיף מאוּנדקס: <tt>($c0),Y</tt>"
+ "עקיף מאונדקס זה כמו מאונדקס עקיף אבל פחות משוגע. במקום להוסיף את אוגר <tt>X</tt> לכתובת <i>לפני</i> פיענוחה, כתובת דף האפס מפוענחת, ואוגר <tt>Y</tt> נוסף לכתובת שהתקבלה."
+ "מיעון עקיף משתמש בכתובת קבועה כדי למצוא כתובת אחרת. הכתובת הראשונה נותנת את הבייט השולי של הכתובת, והבייט שלאחריה מביא את הבייט המשמעותי. עלול להיות לכם קשה להחזיק ראש, אז הנה דוגמה:"
+ "מאנדקס תוויות..."
+ "מאוּנדקס עקיף: <tt>($c0,X)</tt>"
+ "אוגר האינדקס Y: משמש למיעון"
+ "אוגר אינדקס X: משמש למיעון"
+ "במדריך הקטנטן הזה אני הולך להראות לכם איך להתחיל בכתיבת שפת סף של 6502. המעבד 6502 היה מאוד פופולרי בשנות השבעים והשמונים, והפעיל מחשבים מפורסמים כמו ה־<a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://he.wikipedia.org/wiki/%%D7%%90%%D7%%98%%D7%%90%%D7%1$A8%%D7%%99_2600\">אטארי 2600</a>, <a href=\"https://he.wikipedia.org/wiki/%%D7%2$A7%%D7%%95%%D7%3$9E%%D7%%95%%D7%%93%%D7%%95%%D7%4$A8_64\">קומודור 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, וה־<a href=\"https://he.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. ל־”בנדר” ב־”פיוצ\'רמה” <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">היה מעבד 6502 בתור מוח</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">אפילו ה”טרמינטור” תוכנת ב־6502</a>."
+ "בדוגמה הזאת, <tt>$f0</tt> מכיל את הערך <tt>$01</tt> ו־<tt>$f1</tt> מכיל את הערך <tt>$cc</tt>. הפקודה <tt>JMP ($f0)</tt> גורמת למעבד להסתכל על שתי הבתים ב־<tt>$f0</tt> ו־<tt>$f1</tt> (<tt>$01</tt> ו־<tt>$cc</tt>) ולהרכיב אותם ביחד כדי ליצור את הכתובת <tt>$cc01</tt>, שהופכת למספר החדש במונה התוכנה. אַספוּ את התוכנה שלעיל וצעדו דרכה כדי לראות מה קורה. אני ירחיב יותר על <tt>JMP</tt> בקטע העוסק ב<a href=\"#jumping\">קפיצה</a>."
+ "במקרה הזה, <tt>($01)</tt> מסתכל על שתי הבתים ב־<tt>$01</tt> וב־<tt>$02</tt>: שהם <tt>$03</tt> ו־<tt>$07</tt>. אלו יוצרים את הכתובת <tt>$0703</tt>. הערך שבאוגר <tt>Y</tt> מתווסף לכתובת הזאת לקבלת הכתובת הסופית <tt>$0704</tt>."
+ "במאסף הזה, אנחנו יכולים להגדיר קבועים עם שמות (או סימנים) שמתארים את המספרים. ואז בשאר הקוד ניתן להשתמש בקבועים במקום במספר עצמו, כך שמיד נדע עם מה אנחנו מתעסקים. בשמות אפשר להשתמש באותיות, ספרות ומקפים־תחתונים."
+ "בעורך <b>הקלידו</b> (בלי להעתיק) את הקוד הבא:"
+ "בשפת סף, בדרך כלל משתמשים בפקודות הסתעפות עם תוויות. אבל לאחר האיסוף, התווית הופכת לבייט בודד של היסט יחסי (מספר הבתים ללכת אחורה או קדימה מהפקודה הבאה) לכן פקודות הסתעפות יכולים ללכת אחורה וקדימה באזור ה־256 בתים. זה אומר שאפשר להשתמש בהם רק ליד קוד מקומי. כדי ללכת רחוק יותר תצטרכו להשתמש בפקודות הקפיצה."
+ "שופרו ביצועי קונסולת המשחק ועכשיו משחקים ירוצו חלק יותר"
+ "המקשים ומסך המשחק שופרו במכשירים ניידים"
+ "התיאור שופר כדי שיהיה יותר מזמין לאדם הפשוט"
+ "עקיף"
+ "מיידי: <tt>#$c0</tt>"
+ "מיעון מיידי לא בהכרח עוסק בכתובות זיכרון - זהו מצב שבו משתמשים בערכים עצמם. לדוגמה, <tt>LDX #$01</tt> טוען את הערך <tt>$01</tt> לתוך אוגר <tt>X</tt>. זה מאוד שונה מפקודת דף האפס <tt>LDX $01</tt> שטוענת את הערך בנקודת הזיכרון <tt>$01</tt> לתוך אוגר <tt>X</tt>."
+ "אם שפת המערכת שלכם היא סינית, היישום שוב מוצג בסינית. עד כה הוא חזר בטעות לאנגלית."
+ "אם הדוגמה שלכם מבוססת על דוגמה אחרת או קיבלתם השראה ממנה, אתם יכולים לציין את ה־URL של המקור."
+ "אם דוברים את אחת מהשפות ברשימה, בבקשה תעזרו להגיה או לשפר את התרגום. אתם יכולים לתרום דרך הקישורים ביישום, מערכת התרגום שלנו, או על ידי פתיחת סוגייה."
+ "אם תוצאת החיבור גדולה מבייט בודד, הכתובת סובבת לאחור. לדוגמה:"
+ "IDE"
+ "אני לא יסביר לעומק איך כל אחד מהכיוונים עובד, אבל ההסבר למעלה אמור לתת לכם מספיק כדי שתוכלו להבין את זה לבד עם קצת מחקר."
+ "מוסתר"
+ "חילוץ הקסדצימלי נוצר."
+ "חילוץ הקסדצימלי"
+ "צג הקסדצימלי"
+ "הנה דוגמה. שימו לב שעדיין מקדימים פעולות מיידיות עם <tt>#</tt>."
+ "עזרה"
+ "עברית היא גם שפת הימין-לשמאל הראשונה שלנו: הודות לבדיקות ולתרומות של מנחם, היישום תומך כעת בפריסות מימין לשמאל ומוכן לשפות RTL נוספות."
+ "ירוק"
+ "התחלה מצוינת – סיימתם את הפרק הראשון!"
+ "יצרתם משהו מגניב עם 6502? שתפו אותו עם הקהילה! עכשיו אתם יכולים לשתף את דוגמאות הקוד שלכם ישר מהיישום. פשוט הקישו על כפתור השיתוף, ואנחנו ניצור אוטומטית סוגיה ובקשת שילוב ב־Github בשבילכם."
+ "יש לכם דוגמה מגניבה עם 6502?\nשתפו אותה עם הקהילה!"
+ "לעבור בין קטעים זה קצת יותר מסובך, כי צריך לקחת בחשבון גם את הבייט המשמעותי. לדוגמה, ירידה מטה מ־<tt>$02e1</tt> אמורה להוביל אל <tt>$0301</tt>. למזלנו, זה די קל לביצוע. כשמוסיפים <tt>$20</tt> ל־<tt>$e1</tt> מקבלים <tt>$01</tt> ודגל הנשא מוגדר. אם דגל הנשא הוגדר, אנחנו יודעים שצריך להגדיל גם את הבייט המשמעותי."
+ "גרמנית וספרדית אומתו על ידי תורמים. שאר השפות הם \'טיוטות\' שנכתבו בעזרת AI וזקוקים לבדיקה אנושית."
+ "עכשיו המשחקים עוצרים אוטומטית כשעוברים בין מסכים"
+ "מקש לוח נלחץ:"
+ "GNOME"
+ "GNOME"
+ "מהדורה מוערת מלאה של משחק הסנייק"
+ "כל הזיכרון ($0000-$FFFF)"
+ "נמצאו %1$d תוויות."
+ "נמצאה תווית %1$d."
+ "ל־Linux יש עכשיו גם AppImage: קובץ אחד, בלי התקנה, שימושי בהפצה שאין לנו חבילה עבורה."
+ "גופן"
+ "השתמש בסגנון המערכת"
+ "תוקנה שגיאת בנייה ב־PostmarketOS, משפר את התאימות לניידים"
+ "תוקנה בעיה שכפתור החזרה באזור הלימוד תמיד היה גלוי במצב שולחן עבודה וטאבלט, גם כששום נושא לא היה פתוח."
+ "ראשית, <tt>readkeys</tt> בודק אם אחד ממקשי הכיוון (W, A, S, D) נלחץ, ואם כן, מגדיר את כיוון הנחש בהתאם. ואז, <tt>checkCollision</tt> בודק עם הנחש התנגש בעצמו או בתפוח. <tt>updateSnake</tt> מעדכן את הייצוג הפנימי של הנחש, לפי הכיוון. לאחר מכן, מציירים את התפוח והנחש. ולבסוף, <tt>spinWheels</tt> נותן למעבד תעסוקה, כדי למנוע מהמשחק לרוץ מהר מידיי. תחשבו על עליו כמו על פקודת sleep. המשחק ממשיך לרוץ עד שהנחש מתנגש בקיר או בעצמו."
+ "קודם אנחנו טוענים את הערך <tt>$08</tt> לאוגר <tt>X</tt>. השורה הבאה היא תווית. תוויות רק מסמנות מקום מסויים בתוכנה כדי שנוכל לחזור אליהם מאוחר יותר. לאחר התווית אנחנו מפחיתים את <tt>X</tt>, שומרים אותו ב־<tt>$0200</tt> (הפיקסל העליון־שמאלי), ואז משווים אותו לערך <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> משווה את הערך באוגר <tt>X</tt> עם ערך אחר. אם שני הערכים שווים, הדגל <tt>Z</tt> מוגדר ל־<tt>1</tt>, אחרת הוא מוגדר ל־<tt>0</tt>."
+ "השורה הראשונה: <tt>$0200</tt>-<tt>$021F</tt>, השורה השנייה: <tt>$0220</tt>-<tt>$023F</tt>, וכו\'."
+ "הגרסה הראשונה של \"לימוד סף ל־6502\" ל־GNOME"
+ "לבסוף, בייט <tt>$03</tt> מכיל את אורכו הנוכחי של הנחש, במושגים של בתים בזיכרון (כך שאורך של 4 פירושו 2 פיקסלים)."
+ "מלאו את הפרטים על דוגמת ה־6502 שלכם כדי לשתף אותה עם הקהילה"
+ "לקובץ \"%1$s\" יש שינויים לא שמורים"
+ "ההעתקה ללוח נכשלה"
+ "תרגילים"
+ "תרגיל"
+ "מריץ פקודות אחד אחד במקום ברצף"
+ "דוגמאות"
+ "הדוגמה נשלחה לבדיקה"
+ "למרות שזו תהיה גרסה פשוטה, הקוד יהיה גדול משמעותית מכל הדוגמאות הקודמות. אנחנו נצתרך לעקוב אחר כמה נקודות זיכרון ביחד בשביל שלל חלקי המשחק. אנחנו עדיין יכולים לרשום ולסדר בעצמינו את כל הפרטים החשובים במהלך התוכנה כמו קודם, אבל בקנה מידה גדול, זה מהר מאוד נהיה מעייף ועלול לגרום לבאגים קשים לאיתור. במקום, אנחנו ניתן עכשיו למאסף לעשות חלק מהעבודה הקשה בשבילנו."
+ "זוגי או אי־זוגי"
+ "עם הידע הזה, אתם תוכלו לראות שהפקודה <tt>LDA #$01</tt> טוענת את הערך ההקסדצימלי <tt>$01</tt> לאוגר <tt>A</tt>. בקטע הבא אני ארחיב יותר על אוגרים."
+ "שופר בורר תווך־הכתובות במנטר ההקסדצימלי, להקל על שינוי ערכים"
+ "שיפורי תצוגה ונגישות"
+ "הפעלת מצב צעידה"
+ "הפעלת מנפה השגיאות"
+ "כל קטע (<tt>upKey</tt>, <tt>rightKey</tt>, וכו\') קודם בודק אם הכיוון הנוכחי הפוך מהכיוון החדש. זה דורש עוד איזה טריק קטן."
+ "בוצע"
+ "ארגון תצוגה"
+ "זיכרון תצוגה ($0200-$05FF)"
+ "גלו את העולם המקסים של תיכנות מחשבים וקונסולות משחקים קלסים! לימדו את שפת הסף 6502 ‐ אותו הקוד שהפעיל מערכות אייקוניות כמו ה־NES, Commodore 64, ו־Apple II."
+ "השלך"
+ "פענוח נוצר."
+ "פענוח"
+ "השבתה תשפר את הביצועים"
+ "Dino Run"
+ "תיאור"
+ "הדגל העשרוני: מאפשר את מצב \"עשרוני בקידוד בינרי\" (BCD) בפעולות אריטמטיות. כאשר מוגדר, פקודות ADC/SBC יתייחסו לערכים כאוסף ספרות עשרוניות (0-9) במקום כ־בינרים. משמש לחישובים פיננסים ואריתמטיקה עשרונית."
+ "עכשיו מנפה השגיאות מתעדכן רק כשרואים אותו, וכך חוסך עיבוד מיותר"
+ "מנפה שגיאות"
+ "נפו שגיאות בתוכנה שלכם עם כלי בדיקה בזמן אמת"
+ "הגדרות ניפוי שגיאות"
+ "ניפוי שגיאות"
+ "עיצוב כהה"
+ "יצירת משחק"
+ "העתק לעורך"
+ "העתק ללוח"
+ "הועתק ללוח"
+ "המשך"
+ "אישור"
+ "פקודות נפוצות"
+ "משחק סנייק מוער"
+ "ערכת צבעים"
+ "עורך קוד וקונסולת משחקים וירטואלית"
+ "הקוד הועתק לעורך"
+ "הקוד הורכב בהצלחה (%1$d בתים)."
+ "קוד"
+ "שנו את אחד מהפיקסלים כך שיצויר בפינה התחתית־ימנית (נקודת זיכרון <tt>$05ff</tt>)."
+ "דגל הנשא: מוגדר כאשר חיבור השאיר נשא (שניתן להעביר לבייט אחר); מנוקה כאשר הפחתה צריכה שאילה (מבייט נוסף). משמש לפעולות אריתמטיות מרובות בתים ולפעולות הוזזה/סיבוב (BCS/BCC)."
+ "ביטול"
+ "שליחת הקוד מבטאת הסכמתך שהדוגמה שלך תורשה תחת רשיון <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "שברו את הלבנים עם המחבט והכדור."
+ "דגל ההפסקה: מוגדר כשמריצים פקודת BRK (Break, הפסקה). משתמשים בו כדי להבדיל בין פסיקות תוכנה (BRK) לפסיקות חומרה. עוזר לזהות את מקור הפסיקה בתהליכי שירות פסיקה."
+ "הסתעפות"
+ "כחול"
+ "בגלל שמצב המשחק נשמר כמקומות של פיקסלים, זה מאוד פשוט לצייר את המשחק. התהליכון הראשון, <tt>drawApple</tt>, הוא נורא פשוט. הוא מגדיר את <tt>Y</tt> ל־0, טוען צבע אקראי לסוכם, ואז שומר את הערך ל־<tt>($00),y</tt>. <tt>$00</tt> זה איפה שמיקום התפוח שמור, אז <tt>($00),y</tt> מפוענח לכתובת הזו. קראו את הקטע \"עקיף מאוּנדקס\" ב<a href=\"#addressing\">מצבי מיעון</a> לפירוט נוסף."
+ "חזרה"
+ "מחבר"
+ "בפרטות, התהליכון הזה קצת יותר מסובך. קודם כל, האורך נטען לאוגר <tt>X</tt>, שלאחר מכן מופחת. הקטע למטה מראה איך הזיכרון של הנחש מתחיל."
+ "קבצי איסוף"
+ "הרכב"
+ "מאסף את הקוד ..."
+ "האיסוף הצליח"
+ "הרכיבו את הקוד דלהלן, ואז פתחו את תצוגת <b>ניפוי שגיאות</b> ובדקו את ה<b>חילוץ ההקסדצימלי</b> כדי לראות את הקוד המוּרכב."
+ "הרכיבו את הקוד, ואז פתחו את תצוגת <b>ניפוי שגיאות</b> וצעדו דרך הקוד, שימו לב לאוגרים <tt>A</tt> ו־<tt>X</tt>. משהו קצת מוזר קורה בשורה <tt>ADC #$c4</tt>. אתם אולי תצפו שהוספת <tt>$c4</tt> ל־<tt>$c0</tt> תניב <tt>$184</tt>, אבל המעבד הביא את התוצאה כ־<tt>$84</tt>. מה זה אמור להביע?"
+ "הרכיבו את הקוד והשתמשו ב־<b>צעד</b> כדי לצעוד דרך שלוש הפקודות האלו. ה<b>צג ההקסדצימלי</b> בתצוגת ניפוי השגיאות מראה קטע מהזיכרון, ויכול לעזור להמחיש את הרצת התוכנות. הפקודה <tt>STA $01</tt> שומרת את הערך שבאוגר <tt>A</tt> בכתובת הזיכרון <tt>$01</tt>, ו־<tt>ADC $01</tt> מוסיף את הערך ששמור בכתובת הזיכרון <tt>$01</tt> לאוגר <tt>A</tt>. <tt>$80 + $80</tt> אמור להיות שווה <tt>$100</tt>, אבל בגלל שזה גדול יותר מבייט, האוגר <tt>A</tt> מוגדר ל־<tt>$00</tt> ודגל הנשא מוגדר. אך בנוסף לכך, דגל האפס מוגדר. דגל האפס מוגדר על ידי כל פקודה שהתוצאה שלה היא אפס."
+ "האיסוף נכשל"
+ "הַרְכֵּב"
+ "כנזכר לעיל, ארבעת הכיוונים מיוצגים אצלנו עם המספרים 1, 2, 4 ו־8. כל אחד מהמספרים האלה הוא חזקה של 2, לכן הם מייוצגים על ידי מספר בינרי עם <tt>1</tt> בודד:"
+ "כל עוד אתם נעים באחד מהרצועות האופקיות הללו, הדברים פשוטים. לדוגמה, כדי לזוז ימינה, פשוט תגדילו את הבייט הפחות משמעותי (למשל <tt>$0200</tt> הופך ל־<tt>$0201</tt>). כדי לרדת למטה, הוסיפו <tt>$20</tt> (למשל <tt>$0200</tt> הופך ל־<tt>$0220</tt>). וההפך לשמאלה ולמעלה."
+ "כמו תמיד, גרסה זו כוללת הרבה תיקונים ושיפורים קטנים."
+ "שיפורי ארכיטקטורה שמאפשרים שיתוף קוד טוב יותר בין פלטפורמות GNOME, הרשת, ואנדרואיד."
+ "הגדרות מראה"
+ "מראה"
+ "בשפת הסף 6502 (ועל כן, בספר זה) כל מספר עם הקידומת <tt>$</tt> הוא בפורמט הקסדצימלי. אם אתם לא רגילים לספרות הקסדצימליות, אני ממליץ לכם לקרוא את <a href=\"https://he.wikipedia.org/wiki/%%D7%%91%%D7%1$A1%%D7%%99%%D7%2$A1_%%D7%%94%%D7%3$A7%%D7%4$A1%%D7%%93%%D7%5$A6%%D7%%99%%D7%6$9E%%D7%%9C%%D7%%99\">דף הוויקיפדיה</a>. כל מספר עם הקידומת <tt>#</tt> הוא הערך הספרתי עצמו. אחרת הוא מתאר כתובת בזיכרון."
+ "פרט חשוב להבחין כאן זה ההבדל בין <tt>ADC #$01</tt> לבין <tt>ADC $01</tt>. הראשון מוסיף את הערך <tt>$01</tt> לאוגר <tt>A</tt>, אבל השני מוסיף את הערך ששמור בנקודת הזיכרון <tt>$01</tt> לאוגר <tt>A</tt>."
+ "גם שימושיים: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "כמעט סיימנו!"
+ "כל הפקודות שתומכות במיעון מוחלט (חוץ מפקודות הקפיצה) יכולים לקבל גם בייט בודד כנמען. לסוג המיעון הזה קוראים ”דף אפס” - ניתן לגשת איתו רק לדף הזיכרון הראשון (256 הבתים הראשונים). הוא יותר מהיר, כי רק בייט אחד נדרש לחיפוש, וגם הוא תופס פחות מקום בקוד המואסף."
+ "כל הקבצים"
+ "אחרי זה, הערך <tt>2</tt> מוסף לסוכם, כדי ליצור את המספר האקראי הסופי בטווח 2-5."
+ "לאחר גוש הערות בהתחלה (השורות שמתחילות בנקודה־פסיק), שתי השורות הראשונות הן:"
+ "אחרי בדיקת ההתנגשויות, אנחנו מעדכנים את מיקום הנחש. בגדול זה נעשה כך: ראשית, מעלים כל זוג בתים של מיקום הגוף מקום אחד בזיכרון. שנית, מעדכנים את מיקום הראש על פי הכיוון הנוכחי. ולבסוף, אם הראש חרג מהגבול, מתיחסים לזה כהתנגשות. אני אצייר את זה עם אותיות. כל זוג סוגריים מכילים נקודת ציון x,y במקום זוג בתים לשם הפשטה."
+ "לאחר תזוזה לכל כיוון, אנחנו גם צריכים לבדוק אם הראש יצא מהגבולות. מטפלים בזה אחרת לכל כיוון. לימין ולשמאל, אנחנו יכולים לבדוק אם הראש פשוט \"הסתובב\". הליכה ימינה מ־<tt>$021f</tt> באמצעות הגדלת הבייט הפחות משמעותי תוביל ל־<tt>$0220</tt>, אבל בעצם קפצנו מהפיקסל האחרון של השורה הראשונה לפיקסל הראשון של השורה השנייה. אז, כל פעם שזזים ימינה, אנחנו צריכים לבדוק אם הבייט הפחות משמעותי הוא כפולה של <tt>$20</tt>. עושים את זה באמצעות השוואת הביטים למסכה <tt>$1f</tt>. מקווה שהדוגמה למטה תבאיר איך מיסוך חמשת הביטים התחתונים מגלה אם מספר הוא כפולה של <tt>$20</tt> או לא."
+ "Adwaita"
+ "מצבי מיעון"
+ "מצבי מיעון"
+ "כתובת %1$s - מספר פקודה לא ידוע"
+ "ישנם גם מקשי קלט נוספים: כפתור A (מקש Enter, קוד ASCII <tt>$0D</tt>) וכפתור B (מקש רווח, קוד ASCII <tt>$20</tt>). אפשר להשתמש בהם כדי להוסיף יותר אינטראקציה למשחק שלכם. לשליטה כיוונית, אפשר להשתמש במקשי החצים או WASD לסרוגין."
+ "נוספה תכונת עזרה כדי להקל על עריכת קוד למתחילים"
+ "נוסף ניהול קבצים לשמירת וטעינת תוכניות"
+ "הוסיפו עוד פקודות כדי לצבוע פיקסל נוסף."
+ "סוכם: האוגר הראשי לחישובים"
+ "צבע מישני: צהוב"
+ "צבע מישני: טורקיז"
+ "צבע מישני: בהיר"
+ "צבע מישני: אדום"
+ "צבע מישני: סגול"
+ "צבע מישני: ורוד"
+ "צבע מישני: כתום"
+ "צבע מישני: ירוק"
+ "צבע מישני: כחול"
+ "צבע מישני"
+ "ערך מוחלט: <tt>$c000</tt>"
+ "מוחלט,X ו־מוחלט,Y: <tt>$c000,X</tt> ו־<tt>$c000,Y</tt>"
+ "אודות \"לימוד שפת הסף של 6502\""
+ "רשימה מלאה של אוסף פקודות ה־6502 <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">זמינה כאן</a> ו<a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">כאן</a> (אני בדרך כלל מציין לשני האתרים כי יש להם חוזקות וחולשות). האתרים האלה מפרטים את הארגומנטים לכל הפקודות, באיזה אוגרים הם משתמשים, ואיזה דגלים הם מגדירים. הם התנ"ך שלכם."
+ "בדפדפן שלכם נפתחה בעיית GitHub. בבקשה תעברו עלייה ותשלחו אותה שם כדי להשלים את תרומתכם. לאחר אישורה, הדוגמה שלכם תוכנס בגרסה הבאה.\n\nלמקרה שהדוגמה שלכם גדולה מידי, כל התוכן יועתק ללוח כדי שתוכלו להדביק ידנית לבעיית ה־GitHub."
+ "<tt>init</tt> ו־<tt>loop</tt> הם תהליכונים. <tt>init</tt> מאתחל את המשחק, ו־<tt>loop</tt> הוא הלולאה הראשית של המשחק."
+ "<tt>checkSnakeCollision</tt> עובר על חלקי גופו של הנחש, משווה כל זוג בתים עם הזוג של הראש. אם יש התאמה, אז המשחק נגמר."
+ "<tt>a9</tt> ו־<tt>c9</tt> הם מספרי הפקודה (opcode) של המעבד ל־<tt>LDA</tt> ו־<tt>CMP</tt> במיעון מיידי (כסדר הופעתם). <tt>01</tt> ו־<tt>02</tt> הם הארגומנטים לפקודות הללו. <tt>d0</tt> הוא מספר הפקודה ל־<tt>BNE</tt>, והארגומנט שלו הוא <tt>02</tt>. זאת אומרת \"דלג על שני הבתים הבאים\" (<tt>85 22</tt>, הגרסה המואספת של <tt>STA $22</tt>). נסו לערוך את הקוד כך ש־<tt>STA</tt> כתובת מוחלטת של שני בתים במקום כתובת דף אפס של בייט אחד (למשל שנו את <tt>STA $22</tt> ל <tt>STA $2222</tt>). אספו מחדש את הקוד והביטו שוב בחילוץ ההקסדצימלי - עכשיו הארגומנט ל־<tt>BNE</tt> אמור להיות <tt>03</tt>, בגלל שעכשיו הפקודה עליה מדלג המעבד היא באורך שלושה בתים."
+ "<tt>X</tt> מחזיק את צבע הפיקסל, ו־<tt>Y</tt> מחזיק את המיקום של הפיקסל הנוכחי. הלולאה הראשונה צובעת פיקסל עם הצבע הראשון (דרך אוגר <tt>A</tt>), דוחפת את הצבע למחסנית, ומגדילה את מספר הצבע והמיקום. הלולאה השנייה מוציאה צבע מהמחסנית, צובעת איתו פיקסל, ואז מגדילה את המיקום. כצפוי, זה יוצר דפוס משוקף."
+ "<tt>SP</tt> הוא מצביע המחסנית. אני לא ייכנס עכשיו למחסנית, אבל בכללות האוגר הזה מופחת כל פעם שבייט נדחף למחסנית, ומוגדל כשמוציאים בייט מהמחסנית."
+ "<tt>PC</tt> הוא מונה התוכנה - כך המעבד יודע באיזו נקודה בתוכנה הוא כרגע נמצא. זה כמו מספר השורה שבה אוחז סקריפט. בהדמייה הקוד מואסף החל מנקודת הזיכרון <tt>$0600</tt>, אז <tt>PC</tt> תמיד מתחיל שם."
+ "<tt>JSR</tt> ו־<tt>RTS</tt> (\"קפוץ לתהליכון\" ו־\"חזור מתהליכון\") הם זוג דינמי שבדרך כלל תראו משמשים יחדיו. <tt>JSR</tt> משמש לקפיצה מהמקום הנוכחי לחלק אחר של הקוד. <tt>RTS</tt> חוזר למקום הקודם. בפשטות זה כמו לקרוא לפונקציה ולחזור ממנה."
+ "<tt>JMP</tt> היא קפיצה לא מותנית. הנה דוגמה ממש פשוטה להראות אותה בפעולה:"
+ "<tt>BCC</tt> ו־<tt>BCS</tt> (\"branch on carry clear\" ו־\"branch on carry set\") משמשים להסתעפות על פי דגל הנשא. כתבו תוכנה שמשתמשת באחת משתיהן."
+ "<b>דף אפס</b>: <tt>$0000</tt>-<tt>$00FF</tt> (256 הבטים הראשונים, גישה מהירה יותר)"
+ "<b>דף אפס</b> (<tt>$c0</tt>): ניגש לנקודות הזכרון <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>דף אפס,X/Y</b> (<tt>$c0,X</tt>): מוסיף את אוגר X/Y לכתובת דף אפס"
+ "<b>Z</b> (Zero, אפס): מוגדר כשהתוצאה היא אפס"
+ "<b>X, Y</b>: אוגרי אינדוּקס לספירה והתייחסות לזיכרון"
+ "<b>W</b> או מקש חץ־למעלה (<tt>$77</tt>)"
+ "<b>V</b> (גלישה): מוגדר כשפעולה אריתמטית גולשת לביט המסמן"
+ "<b>מחסנית</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: לשמור אוגרים בזיכרון"
+ "<b>SP</b> (מצביע המחסנית): מצביע למקום הנוכחי במחסנית (מתחיל ב־<tt>$FF</tt>)"
+ "<b>SBC צריך את הנשא מוגדר</b>: הגדירו את <tt>C</tt> לפני ההפחתה (עובד כמו השאלה הפוכה). <tt>C</tt> נקי אחרי SBC מציין שהשאלה קרתה."
+ "<b>S</b> או מקש חץ־למטה (<tt>$73</tt>)"
+ "<b>יחסי</b> (<tt>תווית</tt>): ההסתעפות משתמשת במספר היסט מסומן של 8 ביט (−128…+127)"
+ "<b>Q</b> או מקש Enter (<tt>$0D</tt>)"
+ "<b>זיכרון התוכנה</b>: מתחיל ב־<tt>$0600</tt>"
+ "<b>PHA/PLA</b>: דוחף את הסוכם אל המחסנית או מושך ממנה"
+ "<b>PC</b> (Program Counter, מונה התוכנה): מצביע לפקודה הבאה לביצוע"
+ "<b>N</b> (Negative, שלילי): מוגדר אם ביט 7 בתוצאה מוגדר"
+ "<b>LDA/LDX/LDY</b>: לטעון אוגרים"
+ "<b>JSR/RTS</b>: קפוץ לתהליך / חזור מתהליך"
+ "<b>JMP</b>: קפיצה לא מותנת"
+ "<b>עקיף</b> (<tt>($c000)</tt>): מחפש בכתובת ששמורה במקום נתון"
+ "<b>מאונדקס עקיף</b> (<tt>($c0),Y</tt>): משתמש בכתובת דף אפס כמצביע לקבלת כתובת בסיס, ואז מוסיף את Y לבסיס הזה"
+ "<b>עקיף מאונדקס</b> (<tt>($c0,X)</tt>): מוסיף את X לכתובת דף אפס, ואז משתמש בתוצאה כמצביע כדי לקבל את הכתובת עצמה"
+ "<b>מיידי</b> (<tt>#$c0</tt>): משתמש בערך עצמו"
+ "<b>INX/INY/DEX/DEY</b>: מגדיל/מקטין אוגרים"
+ "<b>I</b> (Interrupt, פסיקה): מוגדר כשפסיקות מושבתים"
+ "<b>E</b> או מקש רווח (<tt>$20</tt>)"
+ "<b>זיכרון תצוגה</b>: <tt>$0200</tt>-<tt>$05FF</tt> (משמש להצגה על המסך)"
+ "<b>מקשי החיצים</b>:"
+ "<b>D</b> או מקש חץ־שמאלה (<tt>$64</tt>)"
+ "<b>D</b> (Decimal, עשרוני): מוגדר כשהמעבד במצב BCD (Binary Coded Decimal, עשרוני בקידוד בינרי)"
+ "<b>פעולות השוואה</b>: <tt>CMP/CPX/CPY</tt> מגדירים את <tt>N/Z/C</tt> כמו בהפחתה (אוגר − זיכרון) בלי לשמור תוצאה."
+ "<b>C</b> (Carry, נשא): מוגדר כשפעולה חשבונית חורגת מבייט"
+ "<b>BEQ/BNE/BCC/BCS</b>: הסתעף אם שווה/לא שווה/נשא ריק/נשא מוגדר"
+ "<b>B</b> (Break, הפסק): מוגדר כשהוראת BRK מבוצעת"
+ "<b>כפתורי פעולה</b>:"
+ "<b>ערך־מוחלט</b> (<tt>$c000</tt>): ניגש לכתובת זיכרון שרירותית"
+ "<b>ערך־מוחלט,X/Y</b> (<tt>$c000,X</tt>): מוסיף את אוגר X/Y לכתובת מוחלטת"
+ "<b>ADC/SBC</b>: הוספה/הפחתה עם נשא"
+ "<b>A</b> או מקש חץ־שמאלה (<tt>$61</tt>)"
+ "<b>A</b> (Accumulator, סוכם): האוגר הראשי לחישובים וטיפול בנתונים"
+ "<b><tt>$f</tt></b>: אפור בהיר (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: כחול בהיר (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: ירוק בהיר (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: אפור (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: אפור כהה (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: אדום בהיר (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: המקש האחרון שנלחץ (בקוד ASCII)"
+ "<b><tt>$FE</tt></b>: מחולל מספרים אקראיים (נקרא כערך אקראי בין 0 ל־255)"
+ "<b><tt>$9</tt></b>: חום (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: כתום (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: צהוב (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: כחול (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: ירוק (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: סגול (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: כחול ציאן (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: אדום (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: לבן (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: מידע על מיקום הנחש (ראש, חלקי גוף, זנב)"
+ "<b><tt>$0</tt></b>: שחור (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: אורך הנחש"
+ "<b><tt>$02</tt></b>: כיוון הנחש (1=למעלה, 2=ימינה, 4=למטה, 8=שמאלה)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: מקום התפוח"
+ "<a href=\"https://github.com/wkjagt\">וויליאם וואן דער ג'אגט</a> הכין <a href=\"https://gist.github.com/wkjagt/9043907\">תקציר מלא של קוד המקור הזה עם הערות</a>, אז תמשיכו יחד איתו לפירוט נוסף."
+ "לשפת ההרכב של ה־6502 יש כמה פקודות הסתעפות, כולם מסתעפים בהתאם למצבם של דגלים מסוימים, אם הם מוגדרים או לא. בדוגמה זו נסתכל על <tt>BNE</tt>: \"Branch on not equal\" (הסתעף אם לא שווה)."
+ "המחסנית של ה־6502 מלאה! חוזר לראש..."
+ "המחסנית של ה־6502 ריקה! עובר לסופה..."
+ "(למעשה, קבלתי מידע אמין שמעבדי 6502 עדיין מיוצרים על ידי <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> ו<a href=\"https://www.mouser.co.uk/c/?q=65C02\">נמכרים לחובבנים</a>, אז וודאי 6502 <i>אינה</i> שפה נכחדת! מי היה מאמין?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-ia/strings.xml b/packages/app-android/data/Android/src/main/res/values-ia/strings.xml
new file mode 100644
index 00000000..fe94e9cb
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-ia/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Apprender Assemblage 6502"
+ "Apprender Assemblage 6502"
+ "Apprender Assemblage 6502"
+ "வணக்கம்! Nos es felice de dar le benvenita al traduction tamil, contribuite per தமிழ்நேரம். நன்றி!"
+ "que representa le locationes de memoria indirectemente adressate <tt>$0411</tt>, <tt>$0410</tt> e <tt>$040f</tt> (tres pixeles in le medio del schermo). Io labora iste puncto, ma illo es importante pro plenemente comprehender como adressage indirecte functiona."
+ "wdm-output"
+ "programmar"
+ "apprender"
+ "per %1$s"
+ "_Preferentias"
+ "Pagina zero: <tt>$c0</tt>"
+ "Pagina zero,Y: <tt>$c0,Y</tt>"
+ "Pagina zero,X: <tt>$c0,X</tt>"
+ "Usage de pagina zero"
+ "Pagina Zero ($0000-$00FF)"
+ "Bandiera Zero: Definite quando le resultato de un operation es zero. Essential pro ramification conditional - le majoritate de instructiones de salto conditional (BEQ, BNE) verifica iste bandiera pro determinar fluxo de programma basate sur si un valor es zero."
+ "Tu file ha cambiamentos non salvate. Cambiamentos sera perdite si tu non los salva."
+ "Tu ha vidite <tt>TAX</tt>. Tu pote probablement divinar que <tt>TAY</tt>, <tt>TXA</tt> e <tt>TYA</tt> face, ma scribe alcun codice pro testar tu assumptiones."
+ "Tu ha supportate iste projecto de codice aperte per comprar le app. Gratias!"
+ "Tu pote pensar le schermo como quatro bandas horizontal de 32 × 8 pixeles. Iste bandas se mappa a <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> e <tt>$0500-$05ff</tt>. Le prime lineas de pixeles es <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
+ "Jalne"
+ "Scribe e edita codice con un editor de codice integrate"
+ "Con tote iste exemplos tu poterea trovar utile usar le <b>Monitor hex</b> in le vista debug pro reguardar le memoria cambiar. Selige un region de memoria del lista pro vider ille section — pro exemplo, <b>Memoria de schermo ($0200–$05FF)</b> pro reguardar le pixeles del schermo, o <b>Pagina Zero ($0000–$00FF)</b> pro inspectar le prime 256 bytes."
+ "Con adressage absolute, le location de memoria complete es usate como le argumento al instruction. Pro exemplo:"
+ "Benvenite al traduction vietnamese, totalmente contribute per Loc Huynh (hthienloc)."
+ "Benvenite al traduction polonese, initialmente contribute per Micro Wave. Dziękujemy!"
+ "Nos jam habeva un micre regardo al section de stato del processor (le bit con <tt>A</tt>, <tt>PC</tt> etc.), ma que significa toto illo?"
+ "Nos ha addite un nove section de Exemplos al scheda Apprender ubi tu pote explorar e executar programmas 6502 plenmente commentate directemente in le application. Comencia con nostre exemplo del joco Snake e vide como iste pixeles prende vita!"
+ "Valores <tt>$00</tt>-<tt>$0F</tt> representa 16 colores differente (<tt>$00</tt>=negro, <tt>$01</tt>=blanco)"
+ "Usar color primari custom"
+ "Usar color de accento custom"
+ "Actualisar le stato del joco"
+ "Cambiamentos non salvate"
+ "Dissimul a pagina zero,Y, absolute,Y non pote esser usate con <tt>STX</tt> ma pote esser usate con <tt>LDA</tt> e <tt>STA</tt>."
+ "Sub le capote: actualisate a TypeScript 6, Vite 8, e altere actualisationes de dependentias pro meliorate prestation e stabilitate."
+ "Incapace de relocar codice foras de memoria 64k"
+ "Incapace de trovar/analysar le adresse/etiquetta date"
+ "Duo del instructiones de pila es <tt>PHA</tt> e <tt>PLA</tt>, \"push accumulator\" e \"pull accumulator\". Infra es un exemplo de iste duo in action."
+ "Duo nove programmas de exemplo, e ambes veni de vos: Dino Run de Jacob, e Line Buster 6502 de edit12. Illos es le prime exemplos inviate con le button de compartir, e nos volerea reciper plus."
+ "Tutorial <sub>per <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, licentiate sub CC BY 4.0</sub>"
+ "Tutorial"
+ "Tenta scriber fragmentos de codice que usa cata un del modos de adressage 6502. Recorda, tu pote usar le <b>Monitor hex</b> in le vista debug pro reguardar un section de memoria."
+ "Proba programmas de exemplo pro le microprocessor 6502."
+ "Proba programmas de exemplo"
+ "Tenta cambiar le color del tres pixeles."
+ "Commutar barra lateral"
+ "Pro testar si le direction es <tt>1</tt>, <tt>2</tt>, <tt>4</tt> o <tt>8</tt>, le codice continuamente cambia a dextra usque le reporto es definite. Un <tt>LSR</tt> significa \"sursum\", duo significa \"dextra\", e assi via."
+ "Titulo"
+ "Iste liberation porta theming vibrante inspirate per apparatos manual con colores customisabile. Nos ha introducite dispositiones adaptive pro tabletta e scriptorio que mantene toto in vista, perfecte pro ille sessiones de codification marathon quando apprender a disveloppar jocos retro in assemblage. Grande gratias a nostre nove contributor @mmartinortiz pro le grande ideas de disposition de scriptorio. Il ha alcun fresias meliorationes technic tamben, como strictessa TypeScript, schemas de stilo GtkSourceView custom, e controles de debugger meliorate pro disveloppamento plus suave."
+ "Iste es un poc stran. Illo es como un cruce inter pagina zero,X e indirecte. Basicamente, tu prende le adresse de pagina zero, adde le valor del registro <tt>X</tt> a illo, pois usa illo pro recercar un adresse de duo bytes. Pro exemplo:"
+ "Iste carga le valor <tt>$11</tt> in le location de memoria <tt>$10</tt>, le valor <tt>$10</tt> in <tt>$12</tt>, e <tt>$0f</tt> in <tt>$14</tt>. Illo pois carga le valor <tt>$04</tt> in <tt>$11</tt>, <tt>$13</tt> e <tt>$15</tt>. Iste duci a memoria como isto:"
+ "Iste es ubi adressage deveni interessante. In iste modo, un adresse de pagina zero es date, e pois le valor del registro <tt>X</tt> es addite. Ecce un exemplo:"
+ "Iste es le equivalente de pagina zero,X, ma pote solo esser usate con <tt>LDX</tt> e <tt>STX</tt>."
+ "Iste es le versiones de adressage absolute de pagina zero,X e pagina zero,Y. Pro exemplo:"
+ "Il ha tamben un rationamento multo practic: disveloppamento de jocos retro. Le scena homebrew es vive e ben—nove jocos es ancora <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">liberate pro le NES</a> (alcun mesmo como cartuchos physic) e pro multe altere systemas classic; le NES es justo un exemplo. Mesmo si tu objectivo es alcun cosa como le SNES, comenciar con 6502 paga: le CPU SNES (65C816) es retro-compatibile con le 6502, assi le fundamentos que tu apprende hic—registros, modos de adressage, e le collection de instructiones core—se porta directemente."
+ "Alora proque 6502? Proque non un lingua de assemblage <i>utile</i>, como <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Ben, io non pensa que apprender x86 es utile. Io non pensa que tu jammais habera besonio de <i>scriber</i> lingua de assemblage in tu labor diurne - pro alcun personas isto es un exercitio academic, alcun cosa pro expander tu mente e tu pensata. 6502 esseva originalmente scribite in un etate differente, un tempore quando le majoritate de disveloppatores scribeva assemblage directemente, plus tosto que in iste nove linguas de programmation de alte nivello. Assi, illo esseva designate pro esser scribite per humanos. Plus moderne linguas de assemblage es designate pro esser scribite per compilatores, assi lassiamo lo a illes. Plus, 6502 es <i>divertente</i>. Nemo jammais appella x86 <i>divertente</i>."
+ "Le pagina zero de memoria es usate pro immagazinar un numero de variabiles de stato de joco, como notate in le bloco de commentos al initio del joco. Toto in <tt>$00</tt>, <tt>$01</tt> e <tt>$10</tt> in avante es un par de bytes representante un location de memoria de duo bytes que sera recercate usante adressage indirecte. Iste locationes de memoria sera tote inter <tt>$0200</tt> e <tt>$05ff</tt> - le section de memoria correspondente al consola de joco. Pro exemplo, si <tt>$00</tt> e <tt>$01</tt> contineva le valores <tt>$01</tt> e <tt>$02</tt>, illes refererea al secunde pixel del schermo ( <tt>$0201</tt> - recorda, le byte minus significante veni prime in adressage indirecte)."
+ "Le pila in un processor 6502 es justo como qualcunque altere pila - valores es pushate sur illo e poppate (\"pullate\" in parlar 6502) del illo. Le profunditate currente del pila es mesurate per le punctator de pila, un registro special. Le pila vive in memoria inter <tt>$0100</tt> e <tt>$01ff</tt>. Le punctator de pila es initialmente <tt>$ff</tt>, que punta a location de memoria <tt>$01ff</tt>. Quando un byte es pushate sur le pila, le punctator de pila deveni <tt>$fe</tt>, o location de memoria <tt>$01fe</tt>, e assi via."
+ "Le pila"
+ "Le joco Snake del tutorial"
+ "Le resultato de iste subrutina es cargar un byte casual in <tt>$00</tt>, e un numero casual inter 2 e 5 in <tt>$01</tt>. Proque le byte minus significante veni prime con adressage indirecte, iste se traduce in un adresse de memoria inter <tt>$0200</tt> e <tt>$05ff</tt>: le exacte rango usate pro designar le schermo."
+ "Le processor sape ubi retornar proque <tt>JSR</tt> pusha le adresse minus un del proxime instruction sur le pila ante saltar al location date. <tt>RTS</tt> poppa iste location, adde un a illo, e salta a ille location. Un exemplo:"
+ "Le problema es, <tt>$184</tt> es troppo grande pro caber in un sol byte (le maximo es <tt>$FF</tt>), e le registros pote solo mantener un sol byte. Illo es OK tamen; le processor non es actualmente stupide. Si tu reguardava bastante attentemente, tu habera notate que le bandiera de reporto esseva definite a <tt>1</tt> post iste operation. Assi es como tu sape."
+ "Le opposite de <tt>BNE</tt> es <tt>BEQ</tt>. Tenta scriber un programma que usa <tt>BEQ</tt>."
+ "Le opposite de <tt>ADC</tt> es <tt>SBC</tt> (subtraher con reporto). Scribe un programma que usa iste instruction."
+ "Le joco de cursa sin connexion del navigator, in Assemblage 6502"
+ "Le proxime subrutina, <tt>generateApplePosition</tt>, defini le location del pomo a un position casual sur le schermo. Prime, illo carga un byte casual in le accumulator (<tt>$fe</tt> es un generator de numeros casual in iste simulator). Iste es immagazinate in <tt>$00</tt>. Sequente, un differente byte casual es cargate in le accumulator, que es pois <tt>AND</tt>-ed con le valor <tt>$03</tt>. Iste parte require un micre detour."
+ "Le proxime subrutina, <tt>checkCollision</tt>, differe a <tt>checkAppleCollision</tt> e <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> solo verifica si le duo bytes mantenente le location del pomo coincide con le duo bytes mantenente le location del capite. Si illes face, le longitude es augmentate e un nove position de pomo es generate."
+ "Le proxime linea, <tt>BNE decrement</tt>, cambiara execution al etiquetta decrement si le bandiera <tt>Z</tt> es definite a <tt>0</tt> (significante que le duo valores in le comparation <tt>CPX</tt> non esseva equal), alteremente illo non face nihil e nos immagazina <tt>X</tt> a <tt>$0201</tt>, pois termina le programma."
+ "Le proxime bit actualisa le capite del serpente dependente del direction. Iste es probabilmente le parte plus complicate del codice, e illo es tote dependente de como locationes de memoria se mappa al schermo, assi lassiamo reguardar illo in plus detalio."
+ "Le longitude es initialisate a <tt>4</tt>, assi <tt>X</tt> comencia como <tt>3</tt>. <tt>LDA $10,x</tt> carga le valor de <tt>$13</tt> in <tt>A</tt>, pois <tt>STA $12,x</tt> immagazina iste valor in <tt>$15</tt>. <tt>X</tt> es decrementate, e nos itera. Ora <tt>X</tt> es <tt>2</tt>, assi nos carga <tt>$12</tt> e immagazina lo in <tt>$14</tt>. Iste itera durante que <tt>X</tt> es positive (<tt>BPL</tt> significa \"ramificar si positive\")."
+ "Le ultime subrutina, <tt>spinWheels</tt>, es justo ibi proque le joco currerea troppo rapide alteremente. Tote que <tt>spinWheels</tt> face es contar <tt>X</tt> bassum de zero usque illo colide zero de novo. Le prime <tt>dex</tt> se involve, faciente <tt>X</tt> <tt>#$ff</tt>."
+ "Le ultime section monstra le bandieras del processor. Cata bandiera es un bit, assi tote le septe bandieras vive in un sol byte. Le bandieras es definite per le processor pro dar information a proposito del instruction previe. Plus a proposito de illo plus tarde. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lege plus a proposito del registros e bandieras hic</a>."
+ "Le valor hex <tt>$03</tt> es representate in binari como <tt>00000011</tt>. Le opcode <tt>AND</tt> executa un AND bitwise del argumento con le accumulator. Pro exemplo, si le accumulator contine le valor binari <tt>10101010</tt>, pois le resultato de <tt>AND</tt> con <tt>00000011</tt> sera <tt>00000010</tt>."
+ "Le hex deberea reguardar alcuno cosa como isto:"
+ "Le loop del joco"
+ "Le prime duo bytes mantene le location del pomo. Iste es actualisate cata vice que le serpente mangia le pomo. Byte <tt>$02</tt> contine le direction currente. <tt>1</tt> significa sursum, <tt>2</tt> dextra, <tt>4</tt> bassum, e <tt>8</tt> sinistra. Le rationamento detra iste numeros devenira clar plus tarde."
+ "Le prime subrutina, <tt>readKeys</tt>, prende le labor de acceptar entrata de usator. Le location de memoria <tt>$ff</tt> mantene le codice ascii del plus recente clave pressate in iste simulator. Le valor es cargate in le accumulator, pois comparate a <tt>$77</tt> (le codice hex pro W), <tt>$64</tt> (D), <tt>$73</tt> (S) e <tt>$61</tt> (A). Si qualcunque de iste comparationes es successose, le programma ramifica al section appropriate."
+ "Le prime linea monstra le registros <tt>A</tt>, <tt>X</tt> e <tt>Y</tt> (<tt>A</tt> es frequentemente appellate le \"accumulator\"). Cata registro mantene un sol byte. Le majoritate del operationes functiona sur le contento de iste registros."
+ "Le prime instruction causa que execution salta al etiquetta <tt>init</tt>. Iste defini <tt>X</tt>, pois retorna al proxime instruction, <tt>JSR loop</tt>. Iste salta al etiquetta <tt>loop</tt>, que incrementa <tt>X</tt> usque illo es equal a <tt>$05</tt>. Post illo nos retorna al proxime instruction, <tt>JSR end</tt>, que salta al fin del file. Iste illustra como <tt>JSR</tt> e <tt>RTS</tt> pote esser usate insimul pro crear codice modular."
+ "Le effecto de isto es mascar le duo bits minus significante del accumulator, definiente le alteres a zero. Iste converte un numero in le rango de 0–255 a un numero in le rango de 0–3."
+ "Le bloco de codice infra contine tote le codice fonte del joco. Io explicara como illo functiona in le sectiones sequente."
+ "Le schermo nigre del consola de joco ora deberea monstrar tres \"pixeles\" colorate in alto a sinistra."
+ "Le app es designate pro le typo de litteras de interfacie de GNOME. Sur altere systemas, illo es displicate con le typo de litteras de ille systema, que es generalmente plus parve."
+ "Le Registro de indice Y es simile a X e ha nulle functiones special. Communmente usate pro adressage indexate e movimento de datos."
+ "Le Registro de indice X es usate pro modos de adressage indexate e operationes de contation. Illo pote mantener contadores de loop, indices de array, e es essential pro acceder locationes de memoria relative a un adresse base usante X como distantia. Special: TSX/TXS transfer X a/de le punctator de pila."
+ "Le Punctator de pila gere le pila de appella pro subrutinas e interruptiones. Illo comencia a $FF (cima de pila) e cresce bassum. Usate pro operationes PUSH/PULL, appellos JSR/RTS, e maneamento de interruptiones. Critico pro appellos de functiones nidate."
+ "Le Contator de programma contine le adresse de memoria del proxime instruction a executar. Illo automaticamente incrementa post cata instruction e pote esser modificate per saltos, ramificationes, appellos, e retornos. Essential pro controlo de fluxo de programma e debugging."
+ "Le Accumulator (A) es le registro primari pro operationes arithmetic e logic. Tote calculos basic como ADDER, SUBTRAHER, AND, OR, etc. usa iste registro. Illo es le registro plus frequentemente usate in programmation de assemblage 6502."
+ "Le subrutina <tt>loop</tt> mesme solo appella un numero de subrutinas sequentemente, ante de iterar retro sur se mesme:"
+ "Le subrutina <tt>init</tt> differe a duo subrutinas, <tt>initSnake</tt> e <tt>generateApplePosition</tt>. <tt>initSnake</tt> defini le direction del serpente, longitude, e pois carga le locationes initial de memoria del capite del serpente e corpore. Le par de bytes a <tt>$10</tt> contine le location de schermo del capite, le par a <tt>$12</tt> contine le location del sol segmento del corpore, e <tt>$14</tt> contine le location del cauda (le cauda es le ultime segmento del corpore e es designate in negro pro mantener le serpente movente). Iste occurre in le codice sequente:"
+ "Le opcode <tt>BIT</tt> es simile a <tt>AND</tt>, ma le calculation es solo usate pro definir le bandiera de zero - le resultato actual es discardate. Le bandiera de zero es definite solo si le resultato de AND-ing le accumulator con argumento es zero. Quando nos reguarda potentias de duo, le bandiera de zero sera solo definite si le duo numeros non es le mesme. Pro exemplo, <tt>0001 AND 0001</tt> non es zero, ma <tt>0001 AND 0010</tt> es zero."
+ "Le 6502 usa un bus de adresse de 16-bit, significante que il ha 65536 bytes de memoria disponibile al processor. Recorda que un byte es representate per duo characteres hex, assi le locationes de memoria es generalmente representate como <tt>$0000 - $ffff</tt>. Il ha varie manieras de referer a iste locationes de memoria, como detaliate infra."
+ "Gratias pro usar software de codice aperte."
+ "Proba le bit 0 de A con LSR e BCC e pone 1 o 0 in A como resultato"
+ "Testa tu creationes sur un consola de joco virtual"
+ "Tervetuloa! Nos es felice de dar le benvenita al traduction finnese, gentilmente contribute per Jiri Grönroos. Kiitos!"
+ "Turquoise"
+ "Typo de litteras del systema, dimension de GNOME"
+ "Predefinition del systema"
+ "Error de syntaxe linea %1$d: %2$s"
+ "Supportator"
+ "Supportar"
+ "Submitter"
+ "Stilo"
+ "Fermate"
+ "Guida passo a passo al assemblage 6502"
+ "Passo"
+ "Bandieras de stato"
+ "Punctator de pila: Punta a position de pila"
+ "Exemplo de pila"
+ "Pila ($0100-$01FF)"
+ "Locationes special de memoria (in Simulator)"
+ "URL del fonte"
+ "Alcun instructiones non maneja locationes de memoria (p.ex. <tt>INX</tt> - incrementa le registro <tt>X</tt>). Iste es dicite haber adressage implicite - le argumento es implicite per le instruction."
+ "Assi, proque tu volerea apprender 6502? Illo es un lingua morte, non es ver? Ben, assi es Latin. E illes ancora lo insegna. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Assi, que face iste programma actualmente? Passa per illo. Pulsa <b>Reinitialisar</b>, pois usa <b>Passo</b> pro executar le programma un instruction a un vice. Le vista <b>Debug</b> monstra le registros e le memoria — illo es un scheda separate in un fenestra parve, e le pannello sub le consola de joco in un large. Clicca <b>Passo</b> un vice e tu notara in le vista debug que <tt>A=</tt> cambiate de <tt>$00</tt> a <tt>$01</tt>, e <tt>PC=</tt> cambiate de <tt>$0600</tt> a <tt>$0602</tt>."
+ "Assi, le instruction <tt>STA $0200</tt> immagazina le valor del registro <tt>A</tt> a location de memoria <tt>$0200</tt>. Clicca <b>Passo</b> quatro vices plus pro executar le resto del instructiones, reguardante le registro <tt>A</tt> como illo cambia."
+ "Assi, reguardante <tt>upKey</tt>, si le direction currente es bassum (4), le test de bit sera zero. <tt>BNE</tt> significa \"ramificar si le bandiera de zero es clar\", assi in iste caso nos ramificara a <tt>illegalMove</tt>, que solo retorna del subrutina. Alteremente, le nove direction (1 in iste caso) es immagazinate in le location de memoria appropriate."
+ "Assi, immergiamo nos! Iste application contine un <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler e Simulator</a> que io ha adaptate pro iste tutorial interactive. Clicca le button <b>Copiar</b> in le bloco de codice infra pro copiar le codice de exemplo al editor. Pois usa <b>Assemblar</b> pro assemblar le codice, e <b>Executar</b> pro executar lo. Tu pote trovar iste actiones como buttones o in le menu."
+ "Usque ora nos solo pote scriber programmas basic sin logica de ramification. Cambiemos illo."
+ "Usage de memoria del joco Snake"
+ "Datos de joco Snake ($00-$15)"
+ "Executante joco Snake"
+ "Ardesia"
+ "Fallimento de simulator"
+ "Simulator"
+ "Exemplos de codice compartite ora include information de licentia CC-BY-4.0, clarificante como le communitate pote usar e construer super tu contributiones."
+ "Compartir tu exemplo"
+ "Compartir exemplo"
+ "Compartir"
+ "Shalom! Nos es felice de dar le benvenita al traduction hebree, integremente contribuite per Menachem (naattxx). Toda raba!"
+ "Seriosamente tamen, io pensa que es valuable haber un comprension de lingua de assemblage. Lingua de assemblage es le plus basse nivello de abstraction in computatores - le puncto a qual le codice es ancora legibile. Lingua de assemblage se traduce directemente al bytes que es executate per le processor de tu computator. Si tu comprende como illo functiona, tu ha basicamente devenite un <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magiero</a> de computator."
+ "Selamat datang! Nos anque da le benvenita al traduction indonesian, gentilmente contribuite per Arif Budiman. Terima kasih!"
+ "Schermo mappate a rango de memoria <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Saluta multe traductiones fresc: francese, interlingua, portugese, portugese (Brasil), nederlandese, espaniol, ukraino, japonese e chinese (simplificate)"
+ "Salvate como %1$s"
+ "Salvar cambiamentos?"
+ "Salvar como..."
+ "Salvar file de assemblage"
+ "Salvar"
+ "Executante joco Snake"
+ "Executar"
+ "Rescribe le prime exemplo in iste section pro usar le registro <tt>Y</tt> in vice del registro <tt>X</tt>."
+ "Revide como tu exemplo apparera a alteres. Cliccar <b>Submitter</b> creara un issue sur GitHub. Tu debera authenticar te con tu conto GitHub pro completar le submission."
+ "Continuar"
+ "Reinitialisar"
+ "Render le joco"
+ "Relative: <tt>$c0</tt> (o etiquetta)"
+ "Adressage relative es usate pro instructiones de ramification. Iste instructiones prende un sol byte, que es usate como distantia del instruction sequente."
+ "Registros e bandieras"
+ "Registros"
+ "Reducite rango de adresse de monitor hex predefinite pro melior efficacia"
+ "Rubie"
+ "Leger le entrata"
+ "Casual/Entrata ($FE-$FF)"
+ "Quitar"
+ "Consilios rapide"
+ "Purpura"
+ "Programmar consolas de joco vintage"
+ "Programma pausate"
+ "Programma completate. Reinitialisa pro executar le programma passo a passo de novo."
+ "Programma completate a PC=$%1$s"
+ "Programma completate"
+ "Immagazinage de programma ($0600-$FFFF)"
+ "Contator de programma: Punta al proxime instruction"
+ "Registro de stato del processor"
+ "Bandieras del processor"
+ "Primari: Jalne"
+ "Primari: Turquoise"
+ "Primari: Ardesia"
+ "Primari: Rubie"
+ "Primari: Purpura"
+ "Primari: Rosate"
+ "Primari: Orange"
+ "Primari: Verde"
+ "Primari: Blau"
+ "Color primari"
+ "Precedente"
+ "Previsualisar tu exemplo"
+ "Previsualisation"
+ "Pressa <b>Passo</b> de novo pro executar le secunde instruction. Le pixel in alto a sinistra del consola de joco deberea ora esser blanc. Iste simulator usa le locationes de memoria <tt>$0200</tt> a <tt>$05ff</tt> pro designar pixeles sur su schermo. Le valores <tt>$00</tt> a <tt>$0f</tt> representa 16 colores differente (<tt>$00</tt> es negro e <tt>$01</tt> es blanco), assi immagazinar le valor <tt>$01</tt> a location de memoria <tt>$0200</tt> designa un pixel blanc in le angulo in alto a sinistra. Iste es plus simple que como un computator actual outputerea video, ma illo servira pro ora."
+ "Preprocessante..."
+ "Jocar"
+ "Rosate"
+ "Perfecte pro hobbyistas, studentes, e quicunque curiose a proposito de como computatores realmente functiona sub le capote!"
+ "Pausar"
+ "Bandiera de transbordo: Definite quando un operation arithmetic produce un resultato que non pote esser representate in rango signate 8-bit (-128 a +127). Usate pro deteger errores arithmetic signate in calculos."
+ "Structura general"
+ "Ramification foras de rango sur linea %1$d (ramificationes es limitate a -128 a +127): %2$s"
+ "Nostre prime programma"
+ "Organisate como quatro bandas horizontal de 32×8 pixeles"
+ "Orange"
+ "Optimisate configuration Flatpak per remover permissiones non necessari"
+ "Aperite %1$s"
+ "Aperir..."
+ "Codice aperte"
+ "Aperir file de assemblage"
+ "Un vice que le valores ha essite cambiate bassum le serpente, nos debe laborar foras que facer con le capite. Le direction es prime cargate in <tt>A</tt>. <tt>LSR</tt> significa \"cambio logic dextra\", o \"cambiar tote le bits un position a dextra\". Le bit minus significante es cambiate in le bandiera de reporto, assi si le accumulator es <tt>1</tt>, post <tt>LSR</tt> illo es <tt>0</tt>, con le bandiera de reporto definite."
+ "Sur reinitialisar (simulator): <tt>P = $30</tt> (bit5 e <tt>B</tt> definite; <tt>D</tt> e <tt>I</tt> clar)"
+ "OK"
+ "Ora, lassiamo poner tote iste cognoscentia a bon uso, e facer un joco! Nos va facer un version realmente simple del joco classic \'Snake\'."
+ "Nulle experientia de programmation previe necessari. Comencia con lectiones interactive e construe tu habilitates passo a passo."
+ "Nulle codice a executar."
+ "Nulle adresse o etiquetta fornite"
+ "Sequente veni <tt>drawSnake</tt>. Iste es bastante simple tamben - nos prime undraw le cauda e pois designa le capite. <tt>X</tt> es definite a le longitude del serpente, assi nos pote indexar al pixel dextra, e nos defini <tt>A</tt> a zero pois executa le scriptura usante le modo de adressage indirecte indexate. Pois nos recarga <tt>X</tt> pro indexar al capite, defini <tt>A</tt> a un e immagazina lo a <tt>($10,x)</tt>. <tt>$10</tt> immagazina le location de duo bytes del capite, assi iste designa un pixel blanc a le position currente del capite. Proque solo le capite e cauda del serpente se move, iste es sufficiente pro mantener le serpente movente."
+ "Nove instrumentes pro examinar tu codice, includente disassemblator e visor de memoria rapidemente commutabile"
+ "Bandiera negative: Definite quando le bit plus significante (bit 7) del resultato es 1. Usate pro comparationes de numeros signate e indica si un valor es negative in representation de complemento a duo."
+ "Quasi tote jocos ha a lor corde un loop de joco. Tote loops de joco ha le mesme forma basic: acceptar entrata de usator, actualisar le stato del joco, e render le stato del joco. Iste loop non es differente."
+ "Messages"
+ "Locationes de memoria <tt>$01</tt> e <tt>$02</tt> contine le valores <tt>$05</tt> e <tt>$07</tt> respectivemente. Pensa <tt>($00,X)</tt> como <tt>($00 + X)</tt>. In iste caso <tt>X</tt> es <tt>$01</tt>, assi iste se simplifica a <tt>($01)</tt>. De hic cosas procede como adressage indirecte standard - le duo bytes a <tt>$01</tt> e <tt>$02</tt> (<tt>$05</tt> e <tt>$07</tt>) es recercate pro formar le adresse <tt>$0705</tt>. Iste es le adresse in que le registro <tt>Y</tt> esseva immagazinate in le instruction previe, assi le registro <tt>A</tt> obtene le mesme valor como <tt>Y</tt>, ben que per un via multo plus circuitose. Tu non videra isto multo."
+ "Mappa de memoria"
+ "Multe bugs minor ha essite corrigite pro meliorar usabilitate general"
+ "Major meliorationes de UI introducente un moderne Button de Action Flottante con statos dynamic pro controlo de programma intuitive, e un widget de debugger completemente redesignate usante componentes moderne Adwaita."
+ "Line Buster 6502"
+ "Stilo clar"
+ "Apprender per exemplos nunquam ha essite plus facile. Immerse te in codice functionante, modifica lo, rumpe lo, repara lo de novo - assi apprendeva le melior programmatores in le passato!"
+ "Apprende como usar le pila con instructiones PHA e PLA"
+ "Apprende como programmar le microprocessor 6502."
+ "Apprende a proposito de historia de computator durante que tu codifica"
+ "Learn 6502 ora functiona anque sur Windows e macOS. Si tu voleva monstrar lo a un amico qui non usa Linux, ora tu pote facer lo."
+ "Learn 6502 ora functiona sur GNOME 50! Gratias a Sabri Ünal pro contribuer le actualisation del runtime."
+ "Apprender Assemblage 6502"
+ "Apprender"
+ "Fallimento de etiquettas"
+ "Etiquetta jam definite a linea %1$d: %2$s"
+ "Etiquetta %1$s es jam usate como symbolo; per favor renomina un de illes"
+ "Saltar es como ramificar con duo differentias principal. Prime, saltos non es executate conditionalmente, e secunde, illes prende un adresse absolute de duo bytes. Pro programmas micre, iste secunde detalio non es multo importante, proque tu usualmente usa etiquettas, e le assemblator labora foras le correcte location de memoria del etiquetta. Pro programmas plus grande tamen, saltar es le sol via pro mover de un section del codice a un altere."
+ "Saltar"
+ "JSR/RTS"
+ "JMP"
+ "Introduction"
+ "Bandiera de interruption: Quando definite, mascara (dishabilita) tote interruptiones mascabile (IRQ). Solo interruptiones non mascabile (NMI) pote ancora occurer. Usate pro sectiones critical de codice que non debe esser interruptite."
+ "Typo de litteras del interfacie"
+ "Tutoriales interactive te guia de initiator a avantiate"
+ "Tutorial interactive"
+ "Instructiones in lingua de assemblage es como un micre collection de functiones predefinite. Tote instructiones prende zero o un argumentos. Ecce alcun codice fonte annotate pro introducer alcun instructiones differente:"
+ "Instructiones"
+ "Initialisation"
+ "Indirecte: <tt>($c000)</tt>"
+ "Indirecte indexate: <tt>($c0),Y</tt>"
+ "Indirecte indexate es como indirecte indexate ma minus insan. In vice de adder le registro <tt>X</tt> al adresse <i>ante</i> dereferenciar, le adresse de pagina zero es dereferentiate, e le registro <tt>Y</tt> es addite al adresse resultante."
+ "Adressage indirecte usa un adresse absolute pro recercar un altere adresse. Le prime adresse da le byte minus significante del adresse, e le byte sequente da le byte plus significante. Iste pote esser difficile de comprehender, assi ecce un exemplo:"
+ "Indexante etiquettas..."
+ "Indirecte indexate: <tt>($c0,X)</tt>"
+ "Registro de indice Y: Usate pro adressage"
+ "Registro de indice X: Usate pro adressage"
+ "In iste micre tutorial io va monstrar te como comenciar a scriber lingua de assemblage 6502. Le processor 6502 esseva massive in le annos septanta e octanta, alimentante computatores famose como le <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, e le <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender in Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">ha un processor 6502 pro un cerebro</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Mesmo le Terminator esseva programmate in 6502</a>."
+ "In iste exemplo, <tt>$f0</tt> contine le valor <tt>$01</tt> e <tt>$f1</tt> contine le valor <tt>$cc</tt>. Le instruction <tt>JMP ($f0)</tt> causa que le processor recerca le duo bytes a <tt>$f0</tt> e <tt>$f1</tt> (<tt>$01</tt> e <tt>$cc</tt>) e les pone insimul pro formar le adresse <tt>$cc01</tt>, que deveni le nove contator de programma. Assembla e passa per le programma supra pro vider que occurre. Io parlara plus a proposito de <tt>JMP</tt> in le section sur <a href=\"#jumping\">Jumping</a>."
+ "In iste caso, <tt>($01)</tt> recerca le duo bytes a <tt>$01</tt> e <tt>$02</tt>: <tt>$03</tt> e <tt>$07</tt>. Iste forma le adresse <tt>$0703</tt>. Le valor del registro <tt>Y</tt> es addite a iste adresse pro dar le adresse final <tt>$0704</tt>."
+ "In iste assemblator, nos pote definir constantes descriptive (o symbolos) que representa numeros. Le resto del codice pote pois simplemente usar le constantes in vice del numero literal, que immediatemente face obvie que nos maneja. Tu pote usar litteras, digitos e sublineatos in un nomine."
+ "In le editor <b>typa</b> (non colla) le codice sequente:"
+ "In lingua de assemblage, tu usualmente usa etiquettas con instructiones de ramification. Quando assemblate tamen, iste etiquetta es convertite a un distantia relative de un sol byte (un numero de bytes pro ir retro o avante del proxime instruction) assi instructiones de ramification pote solo ir avante e retro circa 256 bytes. Iste significa que illes pote solo esser usate pro mover circum codice local. Pro mover plus longe tu habera besonio de usar le instructiones de salto."
+ "Meliorate le prestation del consola de joco pro joco plus suave"
+ "Meliorate schermo de joco e controles pro dispositivos mobile"
+ "Meliorate descriptiones pro esser plus accogliente pro usatores non technic"
+ "Implicite"
+ "Immediate: <tt>#$c0</tt>"
+ "Adressage immediate non maneja strictemente adresses de memoria - iste es le modo ubi valores actual es usate. Pro exemplo, <tt>LDX #$01</tt> carga le valor <tt>$01</tt> in le registro <tt>X</tt>. Iste es multo differente al instruction de pagina zero <tt>LDX $01</tt> que carga le valor a location de memoria <tt>$01</tt> in le registro <tt>X</tt>."
+ "Si le lingua de tu systema es le chinese, le application appare de novo in chinese. Antea illo passava al anglese per error."
+ "Si tu exemplo es basate sur o inspirate per un altere exemplo, tu pote fornir le URL del fonte."
+ "Si tu parla un del linguas listate, per favor adjuta nos a revisar o meliorar le traductiones. Tu pote contribuer via le ligamines intra le application, in nostre platforma de traduction o per aperir un issue."
+ "Si le resultato del addition es plus grande que un sol byte, le adresse se involve circum. Pro exemplo:"
+ "IDE"
+ "Io non explicara in profunditate como cata un del directiones functiona, ma le explication supra deberea dar te sufficiente pro laborar lo foras con un micre studio."
+ "Celate"
+ "Hexdump generate."
+ "Hexdump"
+ "Monitor hex"
+ "Ecce un exemplo. Nota que operandos immediate es ancora prefixate con un <tt>#</tt>."
+ "Adjuta"
+ "Le hebreo es etiam nostre prime lingua scribite de dextra a sinistra: gratias al tests e contributiones de Menachem, le application ora supporta dispositiones de dextra a sinistra e es preparate pro plus linguas RTL."
+ "Verde"
+ "Bon initio – tu ha finite le prime capitulo!"
+ "Ha tu un proprie creation 6502 interessante? Comparti lo con le communitate! Tu pote ora submitter tu exemplos de codice directemente desde le application. Simplemente preme le button de compartir e nos creara automaticamente un issue e pull request de GitHub pro te."
+ "Ha tu un exemplo de 6502 interessante?\nComparti lo con le communitate!"
+ "Ir inter sectiones es plus complicate, proque nos debe tamben tener in conto le byte plus significante. Pro exemplo, ir bassum de <tt>$02e1</tt> deberea ducer a <tt>$0301</tt>. Felicemente, isto es bastante facile de accomplir. Adder <tt>$20</tt> a <tt>$e1</tt> resulta in <tt>$01</tt> e defini le bit de reporto. Si le bit de reporto esseva definite, nos sape que nos tamben debe incrementar le byte plus significante."
+ "Le german e le espaniol ha essite validate per collaboratores. Le altere linguas es projectos assistite per IA e necessita validation human."
+ "Jocos ora automaticamente pausa quando cambi inter schermos"
+ "Clave de gamepad pressate:"
+ "GNOME"
+ "GNOME"
+ "Version completemente commentate del joco Snake"
+ "Memoria complete ($0000-$FFFF)"
+ "Trovate %1$d etiquettas."
+ "Trovate %1$d etiquetta."
+ "Pro Linux il ha ora anque un AppImage: un sol file, sin installation, utile sur un distribution pro le qual nos non offere un pacchetto."
+ "Typo de litteras"
+ "Sequer stilo de systema"
+ "Corrigite error de construction sur PostmarketOS, meliorante compatibilitate mobile"
+ "Corrigite un problema ubi le button retro in le section de apprender era sempre visibile in modo de scriptorio e tabletta, mesmo quando nulle subpagina era aperite."
+ "Prime, <tt>readkeys</tt> verifica si un del claves de direction (W, A, S, D) esseva pressate, e si assi, defini le direction del serpente accordantemente. Pois, <tt>checkCollision</tt> verifica si le serpente collideva con se mesme o le pomo. <tt>updateSnake</tt> actualisa le representation interne del serpente, basate sur su direction. Sequente, le pomo e serpente es designate. Finalmente, <tt>spinWheels</tt> face le processor facer alcun labor occupate, pro stoppar le joco de currer troppo rapidemente. Pensa lo como un commando de somno. Le joco continua currer usque le serpente collide con le muro o se mesme."
+ "Prime nos carga le valor <tt>$08</tt> in le registro <tt>X</tt>. Le linea sequente es un etiquetta. Etiquettas solo marca certe punctos in un programma assi que nos pote retornar a illes plus tarde. Post le etiquetta nos decrementa <tt>X</tt>, immagazina lo a <tt>$0200</tt> (le pixel in alto a sinistra), e pois compara lo con le valor <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compara le valor in le registro <tt>X</tt> con un altere valor. Si le duo valores es equal, le bandiera <tt>Z</tt> es definite a <tt>1</tt>, alteremente illo es definite a <tt>0</tt>."
+ "Prime linea: <tt>$0200</tt>-<tt>$021F</tt>, secunde linea: <tt>$0220</tt>-<tt>$023F</tt>, etc."
+ "Prime liberation de Learn 6502 Assembly pro GNOME"
+ "Finalmente, byte <tt>$03</tt> contine le longitude currente del serpente, in termines de bytes in memoria (assi un longitude de 4 significa 2 pixeles)."
+ "Compila le information sur tu exemplo 6502 pro compartir lo con le communitate"
+ "File \"%1$s\" ha cambiamentos non salvate"
+ "Fallite copiar al portafolio"
+ "Exercitios"
+ "Exercitio"
+ "Executar instructiones un per un in vice de continuemente"
+ "Exemplos"
+ "Exemplo submittite pro revision"
+ "Ben que iste sera un version simple, le codice sera substantialmente plus grande que tote le exemplos previe. Nos habera besonio de traciar plure locationes de memoria insimul pro le varie aspectos del joco. Nos pote ancora facer le comptabilitate necessari per tote le programma nos mesme, como antea, ma sur un scala plus grande que rapidemente deveni tediose e pote tamben ducer a bugs que es difficile de deteger. In vice nos ora lassara le assemblator facer alcun del labor mundane pro nos."
+ "Par o impar"
+ "Equipate con ille cognoscentia, tu deberea poter vider que le instruction <tt>LDA #$01</tt> carga le valor hex <tt>$01</tt> in le registro <tt>A</tt>. Io entrara in plus detalios sur registros in le section sequente."
+ "Meliorate le entrata de rango de adresse de monitor hex pro plus facile edition de valores"
+ "Meliorate presentation del app e accessibilitate"
+ "Habilitar modo de passo"
+ "Habilitar debugger"
+ "Cata section (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) prime verifica si le direction currente es le opposite del nove direction. Iste require un altere micre detour."
+ "Facite"
+ "Organisation de schermo"
+ "Memoria de schermo ($0200-$05FF)"
+ "Discoperi le mundo fascinante de programmar computatores classic e consolas de joco! Apprende lingua de assemblage 6502 - le mesme codice que alimentava systemas iconic como le NES, Commodore 64, e Apple II."
+ "Abandonar"
+ "Disassemblage generate."
+ "Disassemblate"
+ "Dishabilitar pro meliorar prestation"
+ "Dino Run"
+ "Description"
+ "Bandiera decimal: Habilita modo Binary Coded Decimal (BCD) pro operationes arithmetic. Quando definite, instructiones ADC/SBC tracta valores como digitos decimal (0-9) in vice de binari. Usate pro calculos financiar e arithmetica decimal."
+ "Debugger ora solo actualisa quando visibile, reducente processamento non necessari"
+ "Debugger"
+ "Debug tu programmas con instrumentes de inspection in tempo real"
+ "Configurationes de debug"
+ "Debug"
+ "Stilo obscur"
+ "Crear un joco"
+ "Copiar al editor"
+ "Copiar al portafolio"
+ "Copiate al portafolio"
+ "Continuar"
+ "Confirmar"
+ "Instructiones commun"
+ "Joco Snake Commentate"
+ "Paletta de colores"
+ "Editor de codice e consola de joco virtual"
+ "Codice copiate al editor"
+ "Codice assemblate con successo, %1$d bytes."
+ "Codice"
+ "Cambia un del pixeles pro designar in le angulo in basso a dextra (location de memoria <tt>$05ff</tt>)."
+ "Bandiera de reporto: Definite quando un addition produce un reporto; clar quando un substraction require un prestito. Usate pro arithmetica multi-byte e cambios/rotationes (BCS/BCC)."
+ "Cancellar"
+ "Per submission, tu accepta que tu exemplo essera sub licentia <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Rumpe le blocos con le paletta e le balla."
+ "Bandiera de interruption: Definite quando un instruction BRK (Break) es executate. Usate pro distinguer inter interruptiones de software (BRK) e interruptiones de hardware. Adjuta identificar le fonte de un interruption in rutinas de servicio de interruption."
+ "Ramification"
+ "Blau"
+ "Proque le stato del joco es immagazinate in termines de locationes de pixel, render le joco es multo directe. Le prime subrutina, <tt>drawApple</tt>, es extrememente simple. Illo defini <tt>Y</tt> a zero, carga un color casual in le accumulator, pois immagazina iste valor in <tt>($00),y</tt>. <tt>$00</tt> es ubi le location del pomo es immagazinate, assi <tt>($00),y</tt> dereferencia a iste location de memoria. Lege le section \"Indirect indexed\" in <a href=\"#addressing\">Modos de adressage</a> pro plus detalles."
+ "Retro"
+ "Autor"
+ "A un basse nivello, iste subrutina es ligeramente plus complexe. Prime, le longitude es cargate in le registro <tt>X</tt>, que es pois decrementate. Le fragmento infra monstra le memoria initial pro le serpente."
+ "Files de assemblage"
+ "Assemblage"
+ "Assemblante codice..."
+ "Assemblate con successo"
+ "Assembla le codice sequente, pois aperi le vista <b>Debug</b> e verifica le <b>Hexdump</b> pro vider le codice assemblate."
+ "Assembla le codice, pois aperi le vista <b>Debug</b> e passa per le codice, reguardante le registros <tt>A</tt> e <tt>X</tt>. Alcun cosa ligeramente stran occurre sur le linea <tt>ADC #$c4</tt>. Tu poterea expectar que adder <tt>$c4</tt> a <tt>$c0</tt> darea <tt>$184</tt>, ma iste processor da le resultato como <tt>$84</tt>. Que es lo?"
+ "Assembla le codice e usa <b>Passo</b> pro passar per iste tres instructiones. Le <b>Monitor hex</b> in le vista debug monstra un section de memoria, e pote esser utile pro visualisar le execution de programmas. <tt>STA $01</tt> immagazina le valor del registro <tt>A</tt> a location de memoria <tt>$01</tt>, e <tt>ADC $01</tt> adde le valor immagazinate a le location de memoria <tt>$01</tt> al registro <tt>A</tt>. <tt>$80 + $80</tt> deberea equal <tt>$100</tt>, ma proque isto es plus grande que un byte, le registro <tt>A</tt> es definite a <tt>$00</tt> e le bandiera de reporto es definite. Tamben, le bandiera de zero es definite. Le bandiera de zero es definite per tote instructiones ubi le resultato es zero."
+ "Assemblage fallite"
+ "Assemblar"
+ "Como state antea, le quatro directiones es representate internemente per le numeros 1, 2, 4 e 8. Cata un de iste numeros es un potentia de 2, assi illes es representate per un numero binari con un sol <tt>1</tt>:"
+ "Tant que tu te move intra un de iste bandas horizontal, cosas es simple. Pro exemplo, pro mover dextra, solo incrementa le byte minus significante (p.ex. <tt>$0200</tt> deveni <tt>$0201</tt>). Pro ir bassum, adde <tt>$20</tt> (p.ex. <tt>$0200</tt> deveni <tt>$0220</tt>). Sinistra e sursum es le reverse."
+ "Como sempre, iste version include multe parve correctiones e meliorationes."
+ "Meliorationes de architectura habilita melior participation de codice inter plataformas GNOME, Web, e Android."
+ "Configurationes de apparentia"
+ "Apparentia"
+ "Qualcunque numeros prefixate con <tt>$</tt> in lingua de assemblage 6502 (e per extension, in iste libro) es in formato hexadecimal (hex). Si tu non es familiar con numeros hex, io recommenda leger <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">le articulo de Wikipedia</a>. Qualcunque prefixate con <tt>#</tt> es un valor numeric literal. Qualcunque altere numero refere a un location de memoria."
+ "Un cosa importante a notar hic es le distinction inter <tt>ADC #$01</tt> e <tt>ADC $01</tt>. Le prime adde le valor <tt>$01</tt> al registro <tt>A</tt>, ma le secunde adde le valor immagazinate a location de memoria <tt>$01</tt> al registro <tt>A</tt>."
+ "Tamben utile: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Quasi finite!"
+ "Tote instructiones que supporta adressage absolute (con le exception del instructiones de salto) tamben ha le option de prender un adresse de un sol byte. Iste typo de adressage es appellate \"pagina zero\" - solo le prime pagina (le prime 256 bytes) de memoria es accessibile. Isto es plus rapide, proque solo un byte debe esser recercate, e occupa minus spatio in le codice assemblate tamben."
+ "Tote files"
+ "Post isto, le valor <tt>2</tt> es addite al accumulator, pro crear un numero casual final in le rango 2–5."
+ "Post le bloco initial de commentos (lineas comenciante con semicolos), le prime duo lineas es:"
+ "Post detection de collision, nos actualisa le location del serpente. Isto es facite a un alte nivello assi: Prime, mover cata par de bytes del corpore sursum un position in memoria. Secunde, actualisar le capite secundo le direction currente. Finalmente, si le capite es foras de limites, maneja lo como collision. Io illustrara isto con alcun arte ascii. Cata par de brackets contine un coordinata x,y plus tosto que un par de bytes pro simplicitate."
+ "Post un movimento in cata direction, nos tamben debe verificar si le capite devenirea foras de limites. Isto es maneate differentemente pro cata direction. Pro sinistra e dextra, nos pote verificar si le capite ha effectivemente \"involite circum\". Ir dextra de <tt>$021f</tt> per incrementar le byte minus significante portarea a <tt>$0220</tt>, ma isto es actualmente saltar del ultime pixel del prime linea al prime pixel del secunde linea. Assi, cata vice que nos move dextra, nos debe verificar si le nove byte minus significante es un multiple de <tt>$20</tt>. Isto es facite usante un verification de bit contra le mascara <tt>$1f</tt>. Sperabilemente le illustration infra monstrara te como mascar le plus basse 5 bits revela si un numero es un multiple de <tt>$20</tt> o non."
+ "Adwaita"
+ "Modos de adressage"
+ "Modos de adressage"
+ "Adresse %1$s - opcode incognite"
+ "Additional buttones de entrata es tamben disponibile: button A (clave Enter/Return, codice ASCII <tt>$0D</tt>) e button B (clave spatio, codice ASCII <tt>$20</tt>). Iste pote esser usate pro adder plus interaction a tu jocos. Pro controles directional, ambe claves WASD e claves flecha pote esser usate interchangiabilemente."
+ "Addite function de adjuta pro facer le edition de codice plus facile pro initiantes"
+ "Addite gestion de files pro salvar e cargar tu programmas"
+ "Adde plus instructiones pro designar pixeles extra."
+ "Accumulator: Registro principal pro calculos"
+ "Accento: Jalne"
+ "Accento: Turquoise"
+ "Accento: Ardesia"
+ "Accento: Rubie"
+ "Accento: Purpura"
+ "Accento: Rosate"
+ "Accento: Orange"
+ "Accento: Verde"
+ "Accento: Blau"
+ "Color de accento"
+ "Absolute: <tt>$c000</tt>"
+ "Absolute,X e absolute,Y: <tt>$c000,X</tt> e <tt>$c000,Y</tt>"
+ "A proposito de Learn 6502 Assembly"
+ "Un lista complete del collection de instructiones 6502 es <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">disponibile hic</a> e <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">hic</a> (io usualmente refere a ambe paginas proque illes ha lor fortessas e debilitates). Iste paginas detalia le argumentos a cata instruction, qual registros illes usa, e qual bandieras illes defini. Illes es tu biblia."
+ "Un issue de GitHub ha essite aperite in tu navigator. Per favor revide e submitte lo illac pro completar tu contribution. Un vice approbate, tu exemplo essera includite in le proxime liberation. Si tu exemplo es troppo grande, le contento complete essera copiate a tu area de transferentia pro collage manual in le issue de GitHub."
+ "<tt>init</tt> e <tt>loop</tt> es ambe subrutinas. <tt>init</tt> initialisa le stato del joco, e <tt>loop</tt> es le loop principal del joco."
+ "<tt>checkSnakeCollision</tt> itera per le segmentos del corpore del serpente, verificante cata par de bytes contra le par del capite. Si il ha un coincidentia, pois joco finite."
+ "<tt>a9</tt> e <tt>c9</tt> es le opcodes del processor pro <tt>LDA</tt> e <tt>CMP</tt> immediate-addressate respectivemente. <tt>01</tt> e <tt>02</tt> es le argumentos a iste instructiones. <tt>d0</tt> es le opcode pro <tt>BNE</tt>, e su argumento es <tt>02</tt>. Iste significa \"saltar super le proxime duo bytes\" (<tt>85 22</tt>, le version assemblate de <tt>STA $22</tt>). Tenta editar le codice assi que <tt>STA</tt> prende un adresse absolute de duo bytes plus tosto que un adresse de pagina zero de sol byte (p.ex. cambiar <tt>STA $22</tt> a <tt>STA $2222</tt>). Reassembla le codice e reguarda le hexdump de novo - le argumento a <tt>BNE</tt> deberea ora esser <tt>03</tt>, proque le instruction que le processor salta super es ora tres bytes longe."
+ "<tt>X</tt> mantene le color del pixel, e <tt>Y</tt> mantene le position del pixel currente. Le prime loop designa le color currente como pixel (per le registro <tt>A</tt>), pusha le color al pila, pois incrementa le color e position. Le secunde loop poppa le pila, designa le color poppate como pixel, pois incrementa le position. Como deberea expectar se, isto crea un patron speculare."
+ "<tt>SP</tt> es le punctator de pila. Io non entrara in le pila ancora, ma basicamente iste registro es decrementate cata vice que un byte es pushate sur le pila, e incrementate quando un byte es poppate del pila."
+ "<tt>PC</tt> es le contator de programma - es como le processor sape a qual puncto in le programma illo currentemente es. Es como le numero de linea currente de un script executante. In le simulator le codice es assemblate comenciante a location de memoria <tt>$0600</tt>, assi <tt>PC</tt> sempre comencia ibi."
+ "<tt>JSR</tt> e <tt>RTS</tt> (\"saltar a subrutina\" e \"retornar de subrutina\") es un duo dynamic que tu usualmente vide usate insimul. <tt>JSR</tt> es usate pro saltar del location currente a un altere parte del codice. <tt>RTS</tt> retorna al position previe. Isto es basicamente como appellar un function e retornar."
+ "<tt>JMP</tt> es un salto inconditional. Ecce un exemplo realmente simple pro monstrar lo in action:"
+ "<tt>BCC</tt> e <tt>BCS</tt> (\"ramificar sur reporto clar\" e \"ramificar sur reporto definite\") es usate pro ramificar sur le bandiera de reporto. Scribe un programma que usa un de iste duo."
+ "<b>Pagina zero</b>: <tt>$0000</tt>-<tt>$00FF</tt> (prime 256 bytes, accesso plus rapide)"
+ "<b>Pagina zero</b> (<tt>$c0</tt>): Acceder locationes de memoria <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Pagina zero,X/Y</b> (<tt>$c0,X</tt>): Adder registro X/Y a adresse de pagina zero"
+ "<b>Z</b> (Zero): Definite quando resultato es zero"
+ "<b>X, Y</b>: Registros de indice pro adressage e contation"
+ "<b>W</b> o clave flecha sursum (<tt>$77</tt>)"
+ "<b>V</b> (Transbordo): Definite quando operation arithmetic causa transbordo signate"
+ "<b>Pila</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Immagazinar registros in memoria"
+ "<b>SP</b> (Punctator de pila): Punta a position currente de pila (comencia a <tt>$FF</tt>)"
+ "<b>SBC require reporto definite</b>: Definir <tt>C</tt> ante subtraher (functiona como prestito inverse). <tt>C</tt> clar post SBC indica que un prestito occurreva."
+ "<b>S</b> o clave flecha bassum (<tt>$73</tt>)"
+ "<b>Relative</b> (<tt>label</tt>): Ramification usa 8‑bit signate como distantia del proxime instruction (−128…+127)"
+ "<b>Q</b> o clave Enter/Return (<tt>$0D</tt>)"
+ "<b>Immagazinage de programma</b>: Comenciante a <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Pusher/pullar accumulator a/de pila"
+ "<b>PC</b> (Contator de programma): Punta al proxime instruction a executar"
+ "<b>N</b> (Negative): Definite quando bit 7 del resultato es definite"
+ "<b>LDA/LDX/LDY</b>: Cargar registros"
+ "<b>JSR/RTS</b>: Saltar a subrutina / Retornar de subrutina"
+ "<b>JMP</b>: Salto inconditional"
+ "<b>Indirecte</b> (<tt>($c000)</tt>): Recercar adresse immagazinate a location date"
+ "<b>Indirecte indexate</b> (<tt>($c0),Y</tt>): Usar adresse de pagina zero como punctator pro obtener adresse base, pois adder Y a ille base"
+ "<b>Indirecte indexate</b> (<tt>($c0,X)</tt>): Adder X a adresse de pagina zero, pois usar resultato como punctator pro obtener adresse final"
+ "<b>Immediate</b> (<tt>#$c0</tt>): Usar le valor actual"
+ "<b>INX/INY/DEX/DEY</b>: Incrementar/decrementar registros"
+ "<b>I</b> (Interrupt): Definite quando interruptiones es dishabilitate"
+ "<b>E</b> o clave spatio (<tt>$20</tt>)"
+ "<b>Memoria de schermo</b>: <tt>$0200</tt>-<tt>$05FF</tt> (usate pro output de schermo)"
+ "<b>Controles directional</b>:"
+ "<b>D</b> o clave flecha dextra (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Definite quando le processor es in modo BCD (Binary Coded Decimal)"
+ "<b>Operationes de comparation</b>: <tt>CMP/CPX/CPY</tt> define <tt>N/Z/C</tt> como un substraction (registro − memoria) sin immagazinar un resultato."
+ "<b>C</b> (Reporto): Definite quando operationes arithmetic excede un byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Ramificar si equal/non equal/reporto clar/reporto definite"
+ "<b>B</b> (Interruption): Definite quando instruction BRK es executate"
+ "<b>Buttones de action</b>:"
+ "<b>Absolute</b> (<tt>$c000</tt>): Acceder qualcunque location de memoria"
+ "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Adder registro X/Y a adresse absolute"
+ "<b>ADC/SBC</b>: Adder/subtraher con reporto"
+ "<b>A</b> o clave flecha sinistra (<tt>$61</tt>)"
+ "<b>A</b> (Accumulator): Registro principal pro calculos"
+ "<b><tt>$f</tt></b>: Gris clar (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Blau clar (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Verde clar (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Gris (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Gris obscur (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Rubie clar (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Ultime clave premete (codice ASCII)"
+ "<b><tt>$FE</tt></b>: Generator de numeros aleatori (lege como valor aleatori 0-255)"
+ "<b><tt>$9</tt></b>: Brune (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Orange (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Jalne (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Blau (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Verde (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Purpura (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Cyano (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Rubie (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Blanco (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Datos de position del serpente (capite, segmentos del corpore, cauda)"
+ "<b><tt>$0</tt></b>: Negro (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Longitude del serpente"
+ "<b><tt>$02</tt></b>: Direction del serpente (1=sursum, 2=dextra, 4=deorsum, 8=sinistra)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Position del pomo"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> faceva un <a href=\"https://gist.github.com/wkjagt/9043907\">gist plenemente annotate de iste codice fonte</a>, assi seque insimul con illo pro plus detalles."
+ "Le lingua de assemblage 6502 ha un fascio de instructiones de ramification, tote que ramifica basate sur si certe bandieras es definite o non. In iste exemplo nos reguarda <tt>BNE</tt>: \"Ramificar si non equal\"."
+ "Pila 6502 plenate! In rotation..."
+ "Pila 6502 evacuat! In rotation..."
+ "(In realitate, on me ha informate fidelmente que processatores 6502 es ancora producite per <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> e <a href=\"https://www.mouser.co.uk/c/?q=65C02\">vendite a hobbyistas</a>, assi que clarmente 6502 <i>non es</i> un lingua morte! Qui lo sapeva?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-id/strings.xml b/packages/app-android/data/Android/src/main/res/values-id/strings.xml
new file mode 100644
index 00000000..08f28d8c
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-id/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Pelajari Assembly 6502"
+ "Pelajari Assembly 6502"
+ "Pelajari Assembly 6502"
+ "வணக்கம்! Kami dengan senang hati menyambut terjemahan bahasa Tamil, yang dikontribusikan oleh தமிழ்நேரம். நன்றி!"
+ "yang merepresentasikan lokasi memori beralamat indirect <tt>$0411</tt>, <tt>$0410</tt>, dan <tt>$040f</tt> (tiga piksel di tengah tampilan). Saya menekankan poin ini, tetapi penting untuk benar-benar memahami cara kerja pengalamatan indirect."
+ "wdm-output"
+ "pemrograman"
+ "pembelajaran"
+ "oleh %1$s"
+ "_Preferensi"
+ "Zero page: <tt>$c0</tt>"
+ "Zero page,Y: <tt>$c0,Y</tt>"
+ "Zero page,X: <tt>$c0,X</tt>"
+ "Penggunaan zero page"
+ "Zero Page ($0000-$00FF)"
+ "Flag Zero: Diset saat hasil operasi adalah nol. Penting untuk percabangan kondisional - sebagian besar instruksi lompatan kondisional (BEQ, BNE) memeriksa flag ini untuk menentukan alur program berdasarkan apakah suatu nilai adalah nol."
+ "File Anda memiliki perubahan yang belum disimpan. Perubahan akan hilang jika Anda tidak menyimpannya."
+ "Anda sudah melihat <tt>TAX</tt>. Anda mungkin bisa menebak apa yang dilakukan <tt>TAY</tt>, <tt>TXA</tt>, dan <tt>TYA</tt>, tetapi tulislah beberapa kode untuk menguji asumsi Anda."
+ "Anda telah mendukung proyek sumber terbuka ini dengan membeli aplikasi. Terima kasih!"
+ "Anda dapat membayangkan layar sebagai empat strip horizontal berukuran 32 × 8 piksel. Strip-strip ini dipetakan ke <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt>, dan <tt>$0500-$05ff</tt>. Baris piksel pertama adalah <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, dst."
+ "Kuning"
+ "Tulis dan edit kode dengan editor kode bawaan"
+ "Dengan semua contoh ini, Anda mungkin akan terbantu dengan menggunakan <b>Monitor Hex</b> pada tampilan debug untuk mengamati perubahan memori. Pilih sebuah region memori dari daftar untuk melihat bagian tersebut — misalnya, <b>Memori Tampilan ($0200–$05FF)</b> untuk mengamati piksel layar, atau <b>Zero Page ($0000–$00FF)</b> untuk memeriksa 256 byte pertama."
+ "Dengan pengalamatan absolut, lokasi memori penuh digunakan sebagai argumen untuk instruksi. Misalnya:"
+ "Selamat datang terjemahan bahasa Vietnam, yang sepenuhnya dikontribusikan oleh Loc Huynh (hthienloc)."
+ "Selamat datang terjemahan bahasa Polandia, yang awalnya dikontribusikan oleh Micro Wave. Dziękujemy!"
+ "Kita sudah melihat sekilas bagian status prosesor (bagian dengan <tt>A</tt>, <tt>PC</tt> dll.), tetapi apa artinya semua itu?"
+ "Kami telah menambahkan bagian Contoh baru di tab Pelajari di mana Anda dapat menjelajahi dan menjalankan program 6502 berkomentari lengkap langsung di aplikasi. Mulailah dengan contoh permainan Snake unggulan kami dan lihat bagaimana piksel-piksel itu menjadi hidup!"
+ "Nilai <tt>$00</tt>-<tt>$0F</tt> merepresentasikan 16 warna berbeda (<tt>$00</tt>=hitam, <tt>$01</tt>=putih)"
+ "Gunakan warna primer kustom"
+ "Gunakan warna aksen kustom"
+ "Memperbarui kondisi permainan"
+ "Perubahan yang belum disimpan"
+ "Berbeda dengan zero page,Y, absolute,Y tidak dapat digunakan dengan <tt>STX</tt> tetapi dapat digunakan dengan <tt>LDA</tt> dan <tt>STA</tt>."
+ "Di balik layar: diperbarui ke TypeScript 6, Vite 8, dan peningkatan dependensi lainnya untuk performa dan stabilitas yang lebih baik."
+ "Tidak dapat merelokasi kode di luar memori 64k"
+ "Tidak dapat menemukan/mengurai alamat/label yang diberikan"
+ "Dua instruksi stack adalah <tt>PHA</tt> dan <tt>PLA</tt>, \"push accumulator\" dan \"pull accumulator\". Di bawah ini adalah contoh keduanya dalam aksi."
+ "Dua program contoh baru, dan keduanya datang dari Anda: Dino Run oleh Jacob, dan Line Buster 6502 oleh edit12. Keduanya adalah contoh pertama yang dikirim dengan tombol bagikan, dan kami masih menantikan lebih banyak."
+ "Tutorial <sub>oleh <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, dilisensikan di bawah CC BY 4.0</sub>"
+ "Tutorial"
+ "Coba tulis cuplikan kode yang menggunakan setiap mode pengalamatan 6502. Ingat, Anda dapat menggunakan <b>Monitor Hex</b> pada tampilan debug untuk mengamati sebagian dari memori."
+ "Coba program contoh untuk mikroprosesor 6502."
+ "Coba program contoh"
+ "Coba ubah warna ketiga piksel."
+ "Sembunyikan/Tampilkan Sidebar"
+ "Untuk menguji apakah arahnya adalah <tt>1</tt>, <tt>2</tt>, <tt>4</tt>, atau <tt>8</tt>, kode terus menggeser ke kanan hingga carry diset. Satu <tt>LSR</tt> berarti \"atas\", dua berarti \"kanan\", dan seterusnya."
+ "Judul"
+ "Rilis ini menghadirkan tema terinspirasi handheld yang semarak dengan warna yang dapat dikustomisasi. Kami telah memperkenalkan tata letak tablet dan desktop adaptif yang membuat segalanya tetap terlihat, sempurna untuk sesi coding maraton saat belajar mengembangkan game retro dalam assembly. Terima kasih besar kepada kontributor baru kami @mmartinortiz atas ide tata letak desktop yang bagus. Ada beberapa peningkatan teknis yang keren juga, seperti ketegasan TypeScript, skema gaya GtkSourceView kustom, dan kontrol debugger yang ditingkatkan untuk pengembangan yang lebih lancar."
+ "Yang satu ini agak aneh. Ini seperti perpaduan antara zero page,X dan indirect. Pada dasarnya, Anda mengambil alamat zero page, menambahkan nilai register <tt>X</tt> padanya, lalu menggunakannya untuk mencari alamat dua byte. Misalnya:"
+ "Ini memuat nilai <tt>$11</tt> ke lokasi memori <tt>$10</tt>, nilai <tt>$10</tt> ke <tt>$12</tt>, dan <tt>$0f</tt> ke <tt>$14</tt>. Kemudian memuat nilai <tt>$04</tt> ke <tt>$11</tt>, <tt>$13</tt>, dan <tt>$15</tt>. Ini menghasilkan memori seperti ini:"
+ "Di sinilah pengalamatan menjadi menarik. Dalam mode ini, alamat zero page diberikan, kemudian nilai register <tt>X</tt> ditambahkan. Berikut contohnya:"
+ "Ini adalah setara dari zero page,X, tetapi hanya dapat digunakan dengan <tt>LDX</tt> dan <tt>STX</tt>."
+ "Ini adalah versi pengalamatan absolut dari zero page,X dan zero page,Y. Misalnya:"
+ "Ada juga alasan yang sangat praktis: pengembangan game retro. Scene homebrew masih hidup dan berkembang—game baru masih <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">dirilis untuk NES</a> (beberapa bahkan sebagai katrij fisik) dan untuk banyak sistem klasik lainnya; NES hanya satu contoh. Bahkan jika target Anda adalah sesuatu seperti SNES, memulai dengan 6502 akan membuahkan hasil: CPU SNES (65C816) kompatibel mundur dengan 6502, sehingga dasar-dasar yang Anda pelajari di sini—register, mode pengalamatan, dan set instruksi inti—langsung dapat diterapkan."
+ "Lalu mengapa 6502? Mengapa bukan bahasa assembly yang <i>berguna</i>, seperti <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Saya tidak pikir mempelajari x86 itu berguna. Saya rasa Anda tidak akan pernah harus <i>menulis</i> bahasa assembly dalam pekerjaan sehari-hari - bagi sebagian orang ini adalah latihan akademis, sesuatu untuk memperluas pikiran dan cara berpikir Anda. 6502 awalnya ditulis di era yang berbeda, saat sebagian besar pengembang menulis assembly secara langsung, bukan dalam bahasa pemrograman tingkat tinggi yang baru ini. Jadi, ia dirancang untuk ditulis oleh manusia. Bahasa assembly yang lebih modern dimaksudkan untuk ditulis oleh kompiler, jadi mari kita serahkan kepada mereka. Selain itu, 6502 itu <i>menyenangkan</i>. Tidak ada yang pernah menyebut x86 itu <i>menyenangkan</i>."
+ "Zero page memori digunakan untuk menyimpan sejumlah variabel kondisi permainan, sebagaimana dicatat dalam blok komentar di bagian atas permainan. Segalanya di <tt>$00</tt>, <tt>$01</tt> dan <tt>$10</tt> ke atas adalah pasangan byte yang merepresentasikan lokasi memori dua byte yang akan dicari menggunakan pengalamatan indirect. Lokasi memori ini semuanya akan berada antara <tt>$0200</tt> dan <tt>$05ff</tt> - bagian memori yang sesuai dengan konsol permainan. Misalnya, jika <tt>$00</tt> dan <tt>$01</tt> berisi nilai <tt>$01</tt> dan <tt>$02</tt>, mereka akan merujuk ke piksel kedua dari tampilan (<tt>$0201</tt> - ingat, byte paling tidak signifikan didahulukan dalam pengalamatan indirect)."
+ "Stack dalam prosesor 6502 sama seperti stack lainnya - nilai di-push ke dalamnya dan di-pop (\"pull\" dalam istilah 6502) darinya. Kedalaman stack saat ini diukur oleh stack pointer, sebuah register khusus. Stack berada dalam memori antara <tt>$0100</tt> dan <tt>$01ff</tt>. Stack pointer awalnya adalah <tt>$ff</tt>, yang menunjuk ke lokasi memori <tt>$01ff</tt>. Saat satu byte di-push ke stack, stack pointer menjadi <tt>$fe</tt>, atau lokasi memori <tt>$01fe</tt>, dan seterusnya."
+ "Stack"
+ "Permainan snake dari tutorial"
+ "Hasil dari subrutin ini adalah memuat byte acak ke dalam <tt>$00</tt>, dan bilangan acak antara 2 dan 5 ke dalam <tt>$01</tt>. Karena byte paling tidak signifikan didahulukan dalam pengalamatan indirect, ini diterjemahkan menjadi alamat memori antara <tt>$0200</tt> dan <tt>$05ff</tt>: tepat rentang yang digunakan untuk menggambar tampilan."
+ "Prosesor mengetahui ke mana harus kembali karena <tt>JSR</tt> mendorong alamat dikurangi satu dari instruksi berikutnya ke stack sebelum melompat ke lokasi yang diberikan. <tt>RTS</tt> mengambil lokasi ini, menambahkan satu padanya, dan melompat ke lokasi tersebut. Contohnya:"
+ "Masalahnya adalah, <tt>$184</tt> terlalu besar untuk muat dalam satu byte (maksimumnya adalah <tt>$FF</tt>), dan register hanya dapat menyimpan satu byte. Tidak apa-apa; prosesor sebenarnya tidak bodoh. Jika Anda memperhatikan dengan cukup seksama, Anda akan melihat bahwa flag carry diset ke <tt>1</tt> setelah operasi ini. Jadi begitulah cara Anda mengetahuinya."
+ "Kebalikan dari <tt>BNE</tt> adalah <tt>BEQ</tt>. Coba tulis sebuah program yang menggunakan <tt>BEQ</tt>."
+ "Kebalikan dari <tt>ADC</tt> adalah <tt>SBC</tt> (subtract with carry). Tulislah sebuah program yang menggunakan instruksi ini."
+ "Permainan lari offline dari peramban, dalam Assembly 6502"
+ "Subrutin berikutnya, <tt>generateApplePosition</tt>, mengatur lokasi apel ke posisi acak pada tampilan. Pertama, ia memuat byte acak ke dalam accumulator (<tt>$fe</tt> adalah generator bilangan acak dalam simulator ini). Ini disimpan ke <tt>$00</tt>. Selanjutnya, byte acak yang berbeda dimuat ke dalam accumulator, yang kemudian di-<tt>AND</tt>-kan dengan nilai <tt>$03</tt>. Bagian ini memerlukan sedikit pengalihan."
+ "Subrutin berikutnya, <tt>checkCollision</tt>, mendelegasikan ke <tt>checkAppleCollision</tt> dan <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> hanya memeriksa apakah dua byte yang menyimpan lokasi apel cocok dengan dua byte yang menyimpan lokasi kepala. Jika cocok, panjang ditambah dan posisi apel baru dibuat."
+ "Baris berikutnya, <tt>BNE decrement</tt>, akan mengalihkan eksekusi ke label decrement jika flag <tt>Z</tt> diset ke <tt>0</tt> (yang berarti dua nilai dalam perbandingan <tt>CPX</tt> tidak sama), jika tidak maka tidak melakukan apa-apa dan kita menyimpan <tt>X</tt> ke <tt>$0201</tt>, lalu menyelesaikan program."
+ "Bagian berikutnya memperbarui kepala ular tergantung pada arahnya. Ini mungkin bagian paling rumit dari kode, dan semuanya bergantung pada bagaimana lokasi memori dipetakan ke layar, jadi mari kita lihat lebih detail."
+ "Panjang diinisialisasi ke <tt>4</tt>, sehingga <tt>X</tt> dimulai sebagai <tt>3</tt>. <tt>LDA $10,x</tt> memuat nilai <tt>$13</tt> ke dalam <tt>A</tt>, lalu <tt>STA $12,x</tt> menyimpan nilai ini ke <tt>$15</tt>. <tt>X</tt> dikurangi, dan kita melakukan loop. Sekarang <tt>X</tt> adalah <tt>2</tt>, sehingga kita memuat <tt>$12</tt> dan menyimpannya ke <tt>$14</tt>. Ini berulang selama <tt>X</tt> positif (<tt>BPL</tt> berarti \"branch jika positif\")."
+ "Subrutin terakhir, <tt>spinWheels</tt>, hanya ada karena permainan akan berjalan terlalu cepat jika tidak ada. Yang dilakukan <tt>spinWheels</tt> hanyalah menghitung mundur <tt>X</tt> dari nol hingga mencapai nol lagi. <tt>dex</tt> pertama melingkar balik, membuat <tt>X</tt> menjadi <tt>#$ff</tt>."
+ "Bagian terakhir menampilkan flag prosesor. Setiap flag adalah satu bit, sehingga semua tujuh flag berada dalam satu byte. Flag-flag diset oleh prosesor untuk memberikan informasi tentang instruksi sebelumnya. Lebih lanjut tentang itu nanti. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Baca lebih lanjut tentang register dan flag di sini</a>."
+ "Nilai hex <tt>$03</tt> direpresentasikan dalam biner sebagai <tt>00000011</tt>. Opcode <tt>AND</tt> melakukan operasi AND bitwise antara argumen dengan accumulator. Misalnya, jika accumulator berisi nilai biner <tt>10101010</tt>, maka hasil <tt>AND</tt> dengan <tt>00000011</tt> akan menjadi <tt>00000010</tt>."
+ "Hex-nya seharusnya terlihat seperti ini:"
+ "Game loop"
+ "Dua byte pertama menyimpan lokasi apel. Ini diperbarui setiap kali ular memakan apel. Byte <tt>$02</tt> berisi arah saat ini. <tt>1</tt> berarti atas, <tt>2</tt> kanan, <tt>4</tt> bawah, dan <tt>8</tt> kiri. Alasan di balik angka-angka ini akan menjadi jelas nanti."
+ "Subrutin pertama, <tt>readKeys</tt>, mengambil tugas menerima input pengguna. Lokasi memori <tt>$ff</tt> menyimpan kode ASCII dari penekanan tombol terbaru dalam simulator ini. Nilai dimuat ke dalam accumulator, kemudian dibandingkan dengan <tt>$77</tt> (kode hex untuk W), <tt>$64</tt> (D), <tt>$73</tt> (S), dan <tt>$61</tt> (A). Jika salah satu perbandingan ini berhasil, program melakukan branch ke bagian yang sesuai."
+ "Baris pertama menampilkan register <tt>A</tt>, <tt>X</tt>, dan <tt>Y</tt> (<tt>A</tt> sering disebut \"accumulator\"). Setiap register menyimpan satu byte. Sebagian besar operasi bekerja pada isi register-register ini."
+ "Instruksi pertama menyebabkan eksekusi melompat ke label <tt>init</tt>. Ini mengeset <tt>X</tt>, kemudian kembali ke instruksi berikutnya, <tt>JSR loop</tt>. Ini melompat ke label <tt>loop</tt>, yang menaikkan <tt>X</tt> hingga sama dengan <tt>$05</tt>. Setelah itu kita kembali ke instruksi berikutnya, <tt>JSR end</tt>, yang melompat ke akhir file. Ini mengilustrasikan bagaimana <tt>JSR</tt> dan <tt>RTS</tt> dapat digunakan bersama untuk membuat kode yang modular."
+ "Efek dari ini adalah menutupi dua bit paling tidak signifikan dari accumulator, mengatur yang lainnya ke nol. Ini mengkonversi angka dalam rentang 0–255 menjadi angka dalam rentang 0–3."
+ "Blok kode di bawah berisi seluruh kode sumber permainan. Saya akan menjelaskan cara kerjanya di bagian-bagian berikut."
+ "Layar konsol permainan yang hitam kini seharusnya menampilkan tiga \"piksel\" berwarna di kiri atas."
+ "Aplikasi ini dirancang untuk fon antarmuka GNOME. Pada sistem lain, aplikasi ditampilkan dengan fon sistem tersebut, yang biasanya lebih kecil."
+ "Register Indeks Y mirip dengan X dan tidak memiliki fungsi khusus. Umumnya digunakan untuk pengalamatan terindeks dan perpindahan data."
+ "Register Indeks X digunakan untuk mode pengalamatan terindeks dan operasi penghitungan. Dapat menyimpan penghitung loop, indeks array, dan penting untuk mengakses lokasi memori relatif terhadap alamat dasar menggunakan X sebagai offset. Khusus: TSX/TXS mentransfer X ke/dari stack pointer."
+ "Stack Pointer mengelola call stack untuk subrutin dan interrupt. Dimulai dari $FF (bagian atas stack) dan tumbuh ke bawah. Digunakan untuk operasi PUSH/PULL, panggilan JSR/RTS, dan penanganan interrupt. Kritis untuk panggilan fungsi bersarang."
+ "Program Counter berisi alamat memori dari instruksi berikutnya yang akan dieksekusi. Ia secara otomatis bertambah setelah setiap instruksi dan dapat dimodifikasi oleh lompatan, percabangan, panggilan, dan pengembalian. Penting untuk kontrol alur program dan debugging."
+ "Accumulator (A) adalah register utama untuk operasi aritmatika dan logika. Semua kalkulasi dasar seperti TAMBAH, KURANG, AND, OR, dll. menggunakan register ini. Ini adalah register yang paling sering digunakan dalam pemrograman assembly 6502."
+ "Subrutin <tt>loop</tt> itu sendiri hanya memanggil sejumlah subrutin secara berurutan, sebelum kembali berulang pada dirinya sendiri:"
+ "Subrutin <tt>init</tt> mendelegasikan ke dua subrutin, <tt>initSnake</tt> dan <tt>generateApplePosition</tt>. <tt>initSnake</tt> mengatur arah ular, panjang, lalu memuat lokasi memori awal dari kepala dan badan ular. Pasangan byte di <tt>$10</tt> berisi lokasi layar dari kepala, pasangan di <tt>$12</tt> berisi lokasi segmen badan tunggal, dan <tt>$14</tt> berisi lokasi ekor (ekor adalah segmen terakhir dari badan dan digambar dengan warna hitam agar ular tetap bergerak). Ini terjadi dalam kode berikut:"
+ "Opcode <tt>BIT</tt> mirip dengan <tt>AND</tt>, tetapi kalkulasinya hanya digunakan untuk mengeset flag zero - hasil aktualnya dibuang. Flag zero hanya diset jika hasil operasi AND antara accumulator dan argumen adalah nol. Saat kita melihat pangkat dua, flag zero hanya akan diset jika kedua angka tidak sama. Misalnya, <tt>0001 AND 0001</tt> bukan nol, tetapi <tt>0001 AND 0010</tt> adalah nol."
+ "6502 menggunakan bus alamat 16-bit, yang berarti ada 65536 byte memori yang tersedia untuk prosesor. Ingat bahwa satu byte direpresentasikan oleh dua karakter hex, sehingga lokasi memori umumnya direpresentasikan sebagai <tt>$0000 - $ffff</tt>. Ada berbagai cara untuk merujuk ke lokasi memori ini, seperti yang dijelaskan di bawah."
+ "Terima kasih telah menggunakan perangkat lunak sumber terbuka."
+ "Menguji bit 0 pada A dengan LSR dan BCC, lalu menaruh 1 atau 0 di A sebagai hasilnya"
+ "Uji kreasi Anda pada konsol permainan virtual"
+ "Tervetuloa! Kami dengan senang hati menyambut terjemahan bahasa Finlandia, yang dengan baik hati dikontribusikan oleh Jiri Grönroos. Kiitos!"
+ "Teal"
+ "Fon sistem, ukuran GNOME"
+ "Bawaan sistem"
+ "Kesalahan sintaks baris %1$d: %2$s"
+ "Pendukung"
+ "Dukung"
+ "Kirim"
+ "Gaya"
+ "Dihentikan"
+ "Panduan langkah demi langkah untuk assembly 6502"
+ "Step"
+ "Flag Status"
+ "Stack Pointer: Menunjuk ke posisi stack"
+ "Contoh Stack"
+ "Stack ($0100-$01FF)"
+ "Lokasi Memori Khusus (dalam Simulator)"
+ "URL sumber"
+ "Beberapa instruksi tidak berurusan dengan lokasi memori (misalnya <tt>INX</tt> - naikkan register <tt>X</tt>). Instruksi-instruksi ini dikatakan memiliki pengalamatan implisit - argumennya tersirat oleh instruksi itu sendiri."
+ "Jadi, mengapa Anda ingin belajar 6502? Ini adalah bahasa yang sudah mati, bukan? Memang begitu juga dengan bahasa Latin. Dan mereka masih mengajarkannya. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Jadi, apa yang sebenarnya dilakukan program ini? Mari kita telusuri langkah demi langkah. Tekan <b>Reset</b>, lalu gunakan <b>Step</b> untuk mengeksekusi program satu instruksi sekaligus. Tampilan <b>Debug</b> menampilkan register dan memori — ini adalah tab terpisah pada jendela kecil, dan panel di bawah konsol permainan pada jendela lebar. Klik <b>Step</b> sekali dan Anda akan melihat di tampilan debug bahwa <tt>A=</tt> berubah dari <tt>$00</tt> menjadi <tt>$01</tt>, dan <tt>PC=</tt> berubah dari <tt>$0600</tt> menjadi <tt>$0602</tt>."
+ "Jadi, instruksi <tt>STA $0200</tt> menyimpan nilai register <tt>A</tt> ke lokasi memori <tt>$0200</tt>. Klik <b>Step</b> empat kali lagi untuk mengeksekusi sisa instruksi, sambil mengamati register <tt>A</tt> saat berubah."
+ "Jadi, melihat <tt>upKey</tt>, jika arah saat ini adalah bawah (4), pengujian bit akan menghasilkan nol. <tt>BNE</tt> berarti \"branch jika flag zero clear\", sehingga dalam hal ini kita akan melakukan branch ke <tt>illegalMove</tt>, yang hanya kembali dari subrutin. Jika tidak, arah baru (1 dalam hal ini) disimpan di lokasi memori yang sesuai."
+ "Jadi, mari kita mulai! Aplikasi ini berisi <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">Assembler dan Simulator 6502 berbasis JavaScript</a> yang telah saya adaptasi untuk tutorial interaktif ini. Klik tombol <b>Salin</b> pada blok kode di bawah untuk menyalin contoh kode ke editor. Kemudian gunakan <b>Assemble</b> untuk meng-assemble kode, dan <b>Jalankan</b> untuk menjalankannya. Anda dapat menemukan tindakan-tindakan ini sebagai tombol atau di dalam menu."
+ "Sejauh ini kita hanya dapat menulis program dasar tanpa logika percabangan. Mari kita ubah itu."
+ "Penggunaan Memori Permainan Snake"
+ "Data Permainan Snake ($00-$15)"
+ "Permainan Snake"
+ "Slate"
+ "Kegagalan simulator"
+ "Simulator"
+ "Contoh kode yang dibagikan kini menyertakan informasi lisensi CC-BY-4.0, sehingga jelas bagaimana komunitas dapat menggunakan dan mengembangkan kontribusi Anda."
+ "Bagikan Contoh Anda"
+ "Bagikan Contoh"
+ "Bagikan"
+ "Shalom! Kami dengan senang hati menyambut terjemahan bahasa Ibrani, yang sepenuhnya dikontribusikan oleh Menachem (naattxx). Toda raba!"
+ "Sungguh, saya pikir memiliki pemahaman tentang bahasa assembly itu berharga. Bahasa assembly adalah tingkat abstraksi terendah dalam komputer - titik di mana kode masih dapat dibaca. Bahasa assembly diterjemahkan langsung ke byte yang dieksekusi oleh prosesor komputer Anda. Jika Anda memahami cara kerjanya, Anda pada dasarnya telah menjadi <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">pesulap</a> komputer."
+ "Selamat datang! Kami juga menyambut terjemahan bahasa Indonesia, yang dengan baik hati dikontribusikan oleh Arif Budiman. Terima kasih!"
+ "Layar dipetakan ke rentang memori <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Sambut banyak terjemahan baru: Prancis, Interlingua, Portugis, Portugis (Brasil), Belanda, Spanyol, Ukraina, Jepang, dan Mandarin (Sederhana)"
+ "Disimpan sebagai %1$s"
+ "Simpan perubahan?"
+ "Simpan sebagai..."
+ "Simpan File Assembly"
+ "Simpan"
+ "Menjalankan permainan Snake"
+ "Jalankan"
+ "Tulis ulang contoh pertama di bagian ini untuk menggunakan register <tt>Y</tt> alih-alih register <tt>X</tt>."
+ "Tinjau tampilan contoh Anda bagi orang lain. Mengklik <b>Kirim</b> akan membuat sebuah issue di GitHub. Anda perlu masuk dengan akun GitHub Anda untuk menyelesaikan pengiriman."
+ "Lanjutkan"
+ "Reset"
+ "Merender permainan"
+ "Relative: <tt>$c0</tt> (atau label)"
+ "Pengalamatan relative digunakan untuk instruksi branching. Instruksi ini mengambil satu byte, yang digunakan sebagai offset dari instruksi berikutnya."
+ "Register dan flag"
+ "Register"
+ "Mengurangi rentang alamat monitor hex default untuk efisiensi yang lebih baik"
+ "Merah"
+ "Membaca input"
+ "Acak/Input ($FE-$FF)"
+ "Keluar"
+ "Tips cepat"
+ "Ungu"
+ "Program konsol permainan vintage"
+ "Program dijeda"
+ "Program selesai. Reset untuk menjalankan program langkah demi langkah lagi."
+ "Program selesai di PC=$%1$s"
+ "Program selesai"
+ "Penyimpanan Program ($0600-$FFFF)"
+ "Program Counter: Menunjuk ke instruksi berikutnya"
+ "Register Status Prosesor"
+ "Flag Prosesor"
+ "Primer: Kuning"
+ "Primer: Teal"
+ "Primer: Slate"
+ "Primer: Merah"
+ "Primer: Ungu"
+ "Primer: Merah Muda"
+ "Primer: Oranye"
+ "Primer: Hijau"
+ "Primer: Biru"
+ "Warna primer"
+ "Sebelumnya"
+ "Pratinjau Contoh Anda"
+ "Pratinjau"
+ "Tekan <b>Step</b> lagi untuk mengeksekusi instruksi kedua. Piksel kiri atas konsol permainan sekarang seharusnya berwarna putih. Simulator ini menggunakan lokasi memori <tt>$0200</tt> hingga <tt>$05ff</tt> untuk menggambar piksel pada tampilannya. Nilai <tt>$00</tt> hingga <tt>$0f</tt> mewakili 16 warna berbeda (<tt>$00</tt> adalah hitam dan <tt>$01</tt> adalah putih), sehingga menyimpan nilai <tt>$01</tt> di lokasi memori <tt>$0200</tt> menggambar piksel putih di sudut kiri atas. Ini lebih sederhana dari cara komputer sebenarnya mengeluarkan video, tetapi sudah cukup untuk saat ini."
+ "Memproses..."
+ "Putar"
+ "Merah Muda"
+ "Sempurna untuk penghobi, pelajar, dan siapa pun yang penasaran tentang cara kerja komputer sesungguhnya di balik layar!"
+ "Jeda"
+ "Flag Overflow: Diset saat operasi aritmatika menghasilkan nilai yang tidak dapat direpresentasikan dalam rentang 8-bit bertanda (-128 hingga +127). Digunakan untuk mendeteksi kesalahan aritmatika bertanda dalam kalkulasi."
+ "Struktur keseluruhan"
+ "Branch di luar jangkauan pada baris %1$d (branch dibatasi dari -128 hingga +127): %2$s"
+ "Program pertama kita"
+ "Diorganisir sebagai empat strip horizontal berukuran 32×8 piksel"
+ "Oranye"
+ "Mengoptimalkan konfigurasi Flatpak dengan menghapus izin yang tidak diperlukan"
+ "Dibuka %1$s"
+ "Buka..."
+ "Sumber terbuka"
+ "Buka File Assembly"
+ "Setelah nilai-nilai digeser ke bawah ular, kita harus menentukan apa yang harus dilakukan dengan kepala. Arah pertama-tama dimuat ke <tt>A</tt>. <tt>LSR</tt> berarti \"logical shift right\", atau \"geser semua bit satu posisi ke kanan\". Bit paling tidak signifikan digeser ke flag carry, sehingga jika accumulator adalah <tt>1</tt>, setelah <tt>LSR</tt> nilainya menjadi <tt>0</tt> dengan flag carry diset."
+ "Saat reset (simulator): <tt>P = $30</tt> (bit5 dan <tt>B</tt> diset; <tt>D</tt> dan <tt>I</tt> clear)"
+ "OK"
+ "Sekarang, mari manfaatkan semua pengetahuan ini dengan baik, dan buat sebuah permainan! Kita akan membuat versi sangat sederhana dari permainan klasik \'Snake\'."
+ "Tidak diperlukan pengalaman pemrograman sebelumnya. Mulailah dengan pelajaran interaktif dan bangun keterampilan Anda langkah demi langkah."
+ "Tidak ada kode untuk dijalankan."
+ "Tidak ada alamat atau label yang diberikan"
+ "Berikutnya adalah <tt>drawSnake</tt>. Ini juga cukup sederhana - pertama kita menghapus ekor lalu menggambar kepala. <tt>X</tt> diset ke panjang ular, sehingga kita dapat mengindeks ke piksel yang tepat, dan kita mengeset <tt>A</tt> ke nol lalu melakukan penulisan menggunakan mode pengalamatan indexed indirect. Kemudian kita memuat ulang <tt>X</tt> untuk mengindeks ke kepala, mengeset <tt>A</tt> ke satu dan menyimpannya di <tt>($10,x)</tt>. <tt>$10</tt> menyimpan lokasi dua byte dari kepala, sehingga ini menggambar piksel putih di posisi kepala saat ini. Karena hanya kepala dan ekor ular yang bergerak, ini sudah cukup untuk membuat ular bergerak."
+ "Alat baru untuk memeriksa kode Anda, termasuk disassembler dan penampil memori yang dapat dialihkan dengan cepat"
+ "Flag Negative: Diset saat bit paling signifikan (bit 7) dari hasil adalah 1. Digunakan untuk perbandingan bilangan bertanda dan menandakan apakah suatu nilai negatif dalam representasi komplemen dua."
+ "Hampir semua permainan memiliki game loop sebagai intinya. Semua game loop memiliki bentuk dasar yang sama: terima input pengguna, perbarui kondisi permainan, dan render kondisi permainan. Loop ini tidak berbeda."
+ "Pesan"
+ "Lokasi memori <tt>$01</tt> dan <tt>$02</tt> masing-masing berisi nilai <tt>$05</tt> dan <tt>$07</tt>. Bayangkan <tt>($00,X)</tt> sebagai <tt>($00 + X)</tt>. Dalam hal ini <tt>X</tt> adalah <tt>$01</tt>, sehingga ini disederhanakan menjadi <tt>($01)</tt>. Dari sini proses berlanjut seperti pengalamatan indirect standar - dua byte di <tt>$01</tt> dan <tt>$02</tt> (<tt>$05</tt> dan <tt>$07</tt>) dicari untuk membentuk alamat <tt>$0705</tt>. Ini adalah alamat tempat register <tt>Y</tt> disimpan pada instruksi sebelumnya, sehingga register <tt>A</tt> mendapatkan nilai yang sama dengan <tt>Y</tt>, meskipun melalui jalur yang jauh lebih berputar. Anda tidak akan sering melihat ini."
+ "Peta Memori"
+ "Banyak bug kecil telah diperbaiki untuk meningkatkan kegunaan secara keseluruhan"
+ "Peningkatan UI besar yang memperkenalkan Floating Action Button modern dengan status dinamis untuk kontrol program yang intuitif, dan widget debugger yang sepenuhnya didesain ulang menggunakan komponen Adwaita modern."
+ "Line Buster 6502"
+ "Gaya terang"
+ "Belajar dari contoh tidak pernah semudah ini. Selami kode yang berjalan, ubah, rusak, perbaiki lagi - begitulah cara programmer terbaik belajar dulu!"
+ "Pelajari cara menggunakan stack dengan instruksi PHA dan PLA"
+ "Pelajari cara memprogram mikroprosesor 6502."
+ "Pelajari sejarah komputer sambil coding"
+ "Learn 6502 kini juga berjalan di Windows dan macOS. Jika Anda ingin menunjukkannya kepada teman yang tidak memakai Linux, sekarang Anda bisa."
+ "Learn 6502 kini berjalan di GNOME 50! Terima kasih kepada Sabri Ünal atas kontribusi pembaruan runtime-nya."
+ "Pelajari Assembly 6502"
+ "Pelajari"
+ "Kegagalan label"
+ "Label sudah didefinisikan di baris %1$d: %2$s"
+ "Label %1$s sudah digunakan sebagai simbol; harap ganti nama salah satunya"
+ "Jumping seperti branching dengan dua perbedaan utama. Pertama, lompatan tidak dieksekusi secara kondisional, dan kedua, lompatan mengambil alamat absolut dua byte. Untuk program kecil, detail kedua ini tidak terlalu penting, karena Anda sebagian besar akan menggunakan label, dan assembler menghitung lokasi memori yang benar dari label tersebut. Namun untuk program yang lebih besar, jumping adalah satu-satunya cara untuk berpindah dari satu bagian kode ke bagian lainnya."
+ "Jumping"
+ "JSR/RTS"
+ "JMP"
+ "Pengantar"
+ "Flag Interrupt: Saat diset, menutupi (menonaktifkan) semua interrupt yang dapat di-mask (IRQ). Hanya Non-Maskable Interrupt (NMI) yang masih dapat terjadi. Digunakan untuk bagian kode kritis yang tidak boleh diinterupsi."
+ "Fon antarmuka"
+ "Tutorial interaktif memandu Anda dari pemula hingga mahir"
+ "Tutorial interaktif"
+ "Instruksi dalam bahasa assembly seperti sekumpulan fungsi kecil yang telah ditentukan. Semua instruksi mengambil nol atau satu argumen. Berikut beberapa kode sumber beranotasi untuk memperkenalkan beberapa instruksi yang berbeda:"
+ "Instruksi"
+ "Inisialisasi"
+ "Indirect: <tt>($c000)</tt>"
+ "Indirect indexed: <tt>($c0),Y</tt>"
+ "Indirect indexed seperti indexed indirect tetapi lebih tidak membingungkan. Alih-alih menambahkan register <tt>X</tt> ke alamat <i>sebelum</i> didereferensikan, alamat zero page didereferensikan terlebih dahulu, dan register <tt>Y</tt> ditambahkan ke alamat yang dihasilkan."
+ "Pengalamatan indirect menggunakan alamat absolut untuk mencari alamat lain. Alamat pertama memberikan byte paling tidak signifikan dari alamat tersebut, dan byte berikutnya memberikan byte paling signifikan. Itu mungkin sulit dipahami, jadi berikut contohnya:"
+ "Mengindeks label..."
+ "Indexed indirect: <tt>($c0,X)</tt>"
+ "Register indeks Y: Digunakan untuk pengalamatan"
+ "Register indeks X: Digunakan untuk pengalamatan"
+ "Dalam tutorial kecil ini saya akan menunjukkan cara memulai penulisan bahasa assembly 6502. Prosesor 6502 sangat dominan pada tahun tujuh puluhan dan delapan puluhan, menggerakkan komputer-komputer terkenal seperti <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, dan <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender dalam Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">memiliki prosesor 6502 sebagai otaknya</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Bahkan Terminator diprogram dalam 6502</a>."
+ "Dalam contoh ini, <tt>$f0</tt> berisi nilai <tt>$01</tt> dan <tt>$f1</tt> berisi nilai <tt>$cc</tt>. Instruksi <tt>JMP ($f0)</tt> menyebabkan prosesor mencari dua byte di <tt>$f0</tt> dan <tt>$f1</tt> (<tt>$01</tt> dan <tt>$cc</tt>) dan menggabungkannya untuk membentuk alamat <tt>$cc01</tt>, yang menjadi program counter baru. Assemble dan telusuri program di atas langkah demi langkah untuk melihat apa yang terjadi. Saya akan membahas lebih lanjut tentang <tt>JMP</tt> di bagian <a href=\"#jumping\">Jumping</a>."
+ "Dalam hal ini, <tt>($01)</tt> mencari dua byte di <tt>$01</tt> dan <tt>$02</tt>: <tt>$03</tt> dan <tt>$07</tt>. Ini membentuk alamat <tt>$0703</tt>. Nilai register <tt>Y</tt> ditambahkan ke alamat ini untuk menghasilkan alamat akhir <tt>$0704</tt>."
+ "Dalam assembler ini, kita dapat mendefinisikan konstanta deskriptif (atau simbol) yang mewakili angka. Sisa kode kemudian cukup menggunakan konstanta tersebut alih-alih angka literal, yang langsung memperjelas apa yang sedang kita tangani. Anda dapat menggunakan huruf, digit, dan garis bawah dalam sebuah nama."
+ "Di editor, <b>ketik</b> (jangan tempel) kode berikut:"
+ "Dalam bahasa assembly, Anda biasanya akan menggunakan label dengan instruksi percabangan. Namun saat di-assemble, label ini dikonversi menjadi offset relatif satu byte (sejumlah byte untuk mundur atau maju dari instruksi berikutnya) sehingga instruksi branch hanya dapat melompat maju dan mundur sekitar 256 byte. Ini berarti instruksi tersebut hanya dapat digunakan untuk berpindah di sekitar kode lokal. Untuk berpindah lebih jauh, Anda perlu menggunakan instruksi jumping."
+ "Meningkatkan performa konsol permainan untuk gameplay yang lebih lancar"
+ "Meningkatkan layar permainan dan kontrol untuk perangkat mobile"
+ "Memperbaiki deskripsi agar lebih ramah bagi pengguna non-teknis"
+ "Implisit"
+ "Immediate: <tt>#$c0</tt>"
+ "Pengalamatan immediate secara ketat tidak berurusan dengan alamat memori - ini adalah mode di mana nilai aktual digunakan. Misalnya, <tt>LDX #$01</tt> memuat nilai <tt>$01</tt> ke dalam register <tt>X</tt>. Ini sangat berbeda dengan instruksi zero page <tt>LDX $01</tt> yang memuat nilai di lokasi memori <tt>$01</tt> ke dalam register <tt>X</tt>."
+ "Jika bahasa sistem Anda adalah bahasa Mandarin, aplikasi kembali tampil dalam bahasa Mandarin. Sebelumnya aplikasi keliru beralih ke bahasa Inggris."
+ "Jika contoh Anda didasarkan pada atau terinspirasi dari contoh lain, Anda dapat menyertakan URL sumbernya."
+ "Jika Anda berbicara salah satu bahasa yang tercantum, mohon bantu tinjau atau perbaiki terjemahannya. Anda dapat berkontribusi melalui tautan dalam aplikasi, platform terjemahan kami, atau dengan membuka issue."
+ "Jika hasil penjumlahan lebih besar dari satu byte, alamatnya akan melingkar balik. Misalnya:"
+ "IDE"
+ "Saya tidak akan menjelaskan secara mendalam cara kerja masing-masing arah, tetapi penjelasan di atas seharusnya cukup memberi Anda bekal untuk memahaminya dengan sedikit penelaahan."
+ "Tersembunyi"
+ "Hexdump dibuat."
+ "Hexdump"
+ "Monitor Hex"
+ "Berikut contohnya. Perhatikan bahwa operand immediate masih diawali dengan <tt>#</tt>."
+ "Bantuan"
+ "Bahasa Ibrani juga merupakan bahasa pertama kami yang ditulis dari kanan ke kiri: berkat pengujian dan kontribusi Menachem, aplikasi kini mendukung tata letak kanan-ke-kiri dan siap untuk lebih banyak bahasa RTL."
+ "Hijau"
+ "Awal yang bagus — Anda telah menyelesaikan bab pertama!"
+ "Punya kreasi 6502 yang keren? Bagikan kepada komunitas! Kini Anda dapat mengirimkan contoh kode langsung dari dalam aplikasi. Cukup tekan tombol bagikan, dan kami akan otomatis membuat GitHub issue dan pull request untuk Anda."
+ "Punya contoh 6502 yang keren?\nBagikan kepada komunitas!"
+ "Berpindah antar bagian lebih rumit, karena kita juga harus memperhitungkan byte paling signifikan. Misalnya, bergerak ke bawah dari <tt>$02e1</tt> seharusnya menuju ke <tt>$0301</tt>. Untungnya, ini cukup mudah dilakukan. Menambahkan <tt>$20</tt> ke <tt>$e1</tt> menghasilkan <tt>$01</tt> dan mengeset bit carry. Jika bit carry diset, kita tahu kita juga perlu menaikkan byte paling signifikan."
+ "Bahasa Jerman dan Spanyol telah divalidasi oleh kontributor. Bahasa lain adalah draf berbantuan AI dan memerlukan validasi manusia."
+ "Permainan kini otomatis dijeda saat berpindah antar layar"
+ "Tombol gamepad ditekan:"
+ "GNOME"
+ "GNOME"
+ "Versi permainan Ular yang diberi komentar lengkap"
+ "Memori Penuh ($0000-$FFFF)"
+ "Ditemukan %1$d label."
+ "Ditemukan %1$d label."
+ "Untuk Linux kini tersedia juga AppImage: satu file, tanpa instalasi, berguna pada distribusi yang tidak kami buatkan paketnya."
+ "Fon"
+ "Ikuti gaya sistem"
+ "Memperbaiki error build di PostmarketOS, meningkatkan kompatibilitas mobile"
+ "Memperbaiki masalah di mana tombol kembali di bagian learn selalu terlihat dalam mode desktop dan tablet, bahkan ketika tidak ada subhalaman yang dibuka."
+ "Pertama, <tt>readkeys</tt> memeriksa apakah salah satu tombol arah (W, A, S, D) ditekan, dan jika ya, mengatur arah ular sesuai. Kemudian, <tt>checkCollision</tt> memeriksa apakah ular bertabrakan dengan dirinya sendiri atau apel. <tt>updateSnake</tt> memperbarui representasi internal ular berdasarkan arahnya. Selanjutnya, apel dan ular digambar. Terakhir, <tt>spinWheels</tt> membuat prosesor melakukan beberapa pekerjaan sibuk, agar permainan tidak berjalan terlalu cepat. Bayangkan seperti perintah sleep. Permainan terus berjalan hingga ular bertabrakan dengan dinding atau dirinya sendiri."
+ "Pertama kita memuat nilai <tt>$08</tt> ke dalam register <tt>X</tt>. Baris berikutnya adalah label. Label hanya menandai titik-titik tertentu dalam program sehingga kita dapat kembali ke sana nanti. Setelah label, kita mengurangi <tt>X</tt>, menyimpannya ke <tt>$0200</tt> (piksel kiri atas), lalu membandingkannya dengan nilai <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> membandingkan nilai dalam register <tt>X</tt> dengan nilai lain. Jika kedua nilai sama, flag <tt>Z</tt> diset ke <tt>1</tt>, jika tidak diset ke <tt>0</tt>."
+ "Baris pertama: <tt>$0200</tt>-<tt>$021F</tt>, baris kedua: <tt>$0220</tt>-<tt>$023F</tt>, dst."
+ "Rilis pertama Learn 6502 Assembly untuk GNOME"
+ "Terakhir, byte <tt>$03</tt> berisi panjang ular saat ini, dalam satuan byte dalam memori (sehingga panjang 4 berarti 2 piksel)."
+ "Isi informasi tentang contoh 6502 Anda untuk dibagikan kepada komunitas"
+ "File \"%1$s\" memiliki perubahan yang belum disimpan"
+ "Gagal menyalin ke clipboard"
+ "Latihan-latihan"
+ "Latihan"
+ "Eksekusi instruksi satu per satu alih-alih secara berkelanjutan"
+ "Contoh"
+ "Contoh telah dikirimkan untuk ditinjau"
+ "Meskipun ini akan menjadi versi sederhana, kodenya akan jauh lebih besar dari semua contoh sebelumnya. Kita perlu melacak beberapa lokasi memori secara bersamaan untuk berbagai aspek permainan. Kita masih dapat melakukan pencatatan yang diperlukan di seluruh program sendiri, seperti sebelumnya, tetapi pada skala yang lebih besar hal itu dengan cepat menjadi membosankan dan juga dapat menyebabkan bug yang sulit dideteksi. Sebagai gantinya, sekarang kita akan membiarkan assembler melakukan sebagian pekerjaan yang membosankan itu untuk kita."
+ "Genap Ganjil"
+ "Dengan pengetahuan tersebut, Anda seharusnya dapat melihat bahwa instruksi <tt>LDA #$01</tt> memuat nilai hex <tt>$01</tt> ke dalam register <tt>A</tt>. Saya akan membahas lebih detail tentang register di bagian berikutnya."
+ "Meningkatkan input rentang alamat monitor hex agar lebih mudah mengedit nilai"
+ "Peningkatan presentasi dan aksesibilitas aplikasi"
+ "Aktifkan Mode Stepper"
+ "Aktifkan Debugger"
+ "Setiap bagian (<tt>upKey</tt>, <tt>rightKey</tt>, dll.) pertama-tama memeriksa apakah arah saat ini berlawanan dengan arah baru. Ini memerlukan sedikit pengalihan lagi."
+ "Selesai"
+ "Organisasi Tampilan"
+ "Memori Tampilan ($0200-$05FF)"
+ "Temukan dunia pemrograman komputer klasik dan konsol permainan yang menakjubkan! Pelajari bahasa assembly 6502 - kode yang sama yang menggerakkan sistem ikonik seperti NES, Commodore 64, dan Apple II."
+ "Buang"
+ "Disassembly dibuat."
+ "Telah di-disassemble"
+ "Nonaktifkan untuk meningkatkan performa"
+ "Dino Run"
+ "Deskripsi"
+ "Flag Decimal: Mengaktifkan mode Binary Coded Decimal (BCD) untuk operasi aritmatika. Saat diset, instruksi ADC/SBC memperlakukan nilai sebagai digit desimal (0-9) alih-alih biner. Digunakan untuk kalkulasi keuangan dan aritmatika desimal."
+ "Debugger kini hanya diperbarui saat terlihat, mengurangi pemrosesan yang tidak perlu"
+ "Debugger"
+ "Debug program Anda dengan alat inspeksi real-time"
+ "Pengaturan Debug"
+ "Debug"
+ "Gaya gelap"
+ "Membuat permainan"
+ "Salin ke editor"
+ "Salin ke clipboard"
+ "Disalin ke clipboard"
+ "Lanjutkan"
+ "Konfirmasi"
+ "Instruksi Umum"
+ "Permainan Ular Beranotasi"
+ "Palet Warna"
+ "Editor kode dan konsol permainan virtual"
+ "Kode disalin ke editor"
+ "Kode berhasil di-assemble, %1$d byte."
+ "Kode"
+ "Ubah salah satu piksel untuk digambar di sudut kanan bawah (lokasi memori <tt>$05ff</tt>)."
+ "Flag Carry: Diset saat penjumlahan menghasilkan carry-out; clear saat pengurangan memerlukan borrow. Digunakan untuk aritmatika multi-byte dan operasi shift/rotate (BCS/BCC)."
+ "Batal"
+ "Dengan mengirimkan, Anda menyetujui bahwa contoh Anda akan dilisensikan di bawah <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Pecahkan blok dengan pemukul dan bola."
+ "Flag Break: Diset saat instruksi BRK (Break) dieksekusi. Digunakan untuk membedakan antara interrupt perangkat lunak (BRK) dan interrupt perangkat keras. Membantu mengidentifikasi sumber interrupt dalam rutinitas layanan interrupt."
+ "Percabangan"
+ "Biru"
+ "Karena kondisi permainan disimpan dalam bentuk lokasi piksel, merender permainan sangat mudah. Subrutin pertama, <tt>drawApple</tt>, sangat sederhana. Ini mengeset <tt>Y</tt> ke nol, memuat warna acak ke dalam accumulator, lalu menyimpan nilai ini ke <tt>($00),y</tt>. <tt>$00</tt> adalah tempat lokasi apel disimpan, sehingga <tt>($00),y</tt> didereferensikan ke lokasi memori ini. Baca bagian \"Indirect indexed\" di <a href=\"#addressing\">Mode pengalamatan</a> untuk detail lebih lanjut."
+ "Kembali"
+ "Penulis"
+ "Pada level rendah, subrutin ini sedikit lebih kompleks. Pertama, panjang dimuat ke dalam register <tt>X</tt>, yang kemudian dikurangi. Cuplikan di bawah ini menunjukkan memori awal untuk ular."
+ "File Assembly"
+ "Assembly"
+ "Sedang meng-assemble kode..."
+ "Berhasil di-assemble"
+ "Assemble kode berikut, lalu buka tampilan <b>Debug</b> dan periksa <b>Hexdump</b> untuk melihat kode yang telah di-assemble."
+ "Assemble kodenya, lalu buka tampilan <b>Debug</b> dan telusuri kodenya langkah demi langkah, sambil mengamati register <tt>A</tt> dan <tt>X</tt>. Sesuatu yang sedikit aneh terjadi pada baris <tt>ADC #$c4</tt>. Anda mungkin berharap bahwa menambahkan <tt>$c4</tt> ke <tt>$c0</tt> akan menghasilkan <tt>$184</tt>, tetapi prosesor ini memberikan hasil sebagai <tt>$84</tt>. Ada apa dengan itu?"
+ "Assemble kodenya dan gunakan <b>Step</b> untuk menelusuri ketiga instruksi ini satu per satu. <b>Monitor Hex</b> pada tampilan debug menampilkan bagian dari memori, dan dapat membantu memvisualisasikan eksekusi program. <tt>STA $01</tt> menyimpan nilai register <tt>A</tt> di lokasi memori <tt>$01</tt>, dan <tt>ADC $01</tt> menambahkan nilai yang tersimpan di lokasi memori <tt>$01</tt> ke register <tt>A</tt>. <tt>$80 + $80</tt> seharusnya sama dengan <tt>$100</tt>, tetapi karena ini lebih besar dari satu byte, register <tt>A</tt> diset ke <tt>$00</tt> dan flag carry diset. Selain itu, flag zero juga diset. Flag zero diset oleh semua instruksi yang menghasilkan nilai nol."
+ "Assemble gagal"
+ "Assemble"
+ "Seperti yang disebutkan sebelumnya, empat arah direpresentasikan secara internal dengan angka 1, 2, 4, dan 8. Setiap angka ini adalah pangkat 2, sehingga direpresentasikan oleh bilangan biner dengan satu <tt>1</tt>:"
+ "Selama Anda bergerak dalam salah satu strip horizontal ini, semuanya sederhana. Misalnya, untuk bergerak ke kanan, cukup naikkan byte paling tidak signifikan (misalnya <tt>$0200</tt> menjadi <tt>$0201</tt>). Untuk turun, tambahkan <tt>$20</tt> (misalnya <tt>$0200</tt> menjadi <tt>$0220</tt>). Kiri dan atas adalah kebalikannya."
+ "Seperti biasa, rilis ini mencakup banyak perbaikan dan peningkatan kecil."
+ "Peningkatan arsitektur memungkinkan berbagi kode yang lebih baik antara platform GNOME, Web, dan Android."
+ "Pengaturan tampilan"
+ "Tampilan"
+ "Angka apa pun yang diawali dengan <tt>$</tt> dalam bahasa assembly 6502 (dan secara ekstensi, dalam buku ini) berada dalam format heksadesimal (hex). Jika Anda tidak familiar dengan bilangan hex, saya sarankan Anda membaca <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">artikel Wikipedia</a>. Apa pun yang diawali dengan <tt>#</tt> adalah nilai angka literal. Angka lain mana pun merujuk ke lokasi memori."
+ "Hal penting yang perlu diperhatikan di sini adalah perbedaan antara <tt>ADC #$01</tt> dan <tt>ADC $01</tt>. Yang pertama menambahkan nilai <tt>$01</tt> ke register <tt>A</tt>, tetapi yang kedua menambahkan nilai yang tersimpan di lokasi memori <tt>$01</tt> ke register <tt>A</tt>."
+ "Juga berguna: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Hampir Selesai!"
+ "Semua instruksi yang mendukung pengalamatan absolut (kecuali instruksi lompatan) juga memiliki opsi untuk mengambil alamat satu byte. Jenis pengalamatan ini disebut \"zero page\" - hanya halaman pertama (256 byte pertama) dari memori yang dapat diakses. Ini lebih cepat, karena hanya satu byte yang perlu dicari, dan juga memakan lebih sedikit ruang dalam kode hasil assembly."
+ "Semua File"
+ "Setelah ini, nilai <tt>2</tt> ditambahkan ke accumulator, untuk menghasilkan bilangan acak akhir dalam rentang 2–5."
+ "Setelah blok komentar awal (baris yang dimulai dengan titik koma), dua baris pertama adalah:"
+ "Setelah deteksi tabrakan, kita memperbarui lokasi ular. Ini dilakukan pada level tinggi seperti ini: Pertama, pindahkan setiap pasangan byte badan satu posisi ke atas dalam memori. Kedua, perbarui kepala sesuai arah saat ini. Terakhir, jika kepala keluar batas, tangani sebagai tabrakan. Saya akan mengilustrasikan ini dengan sedikit ASCII art. Setiap pasang tanda kurung berisi koordinat x,y daripada sepasang byte untuk kesederhanaan."
+ "Setelah bergerak ke setiap arah, kita juga perlu memeriksa apakah kepala akan menjadi keluar batas. Ini ditangani secara berbeda untuk setiap arah. Untuk kiri dan kanan, kita dapat memeriksa apakah kepala secara efektif \"melingkar balik\". Bergerak ke kanan dari <tt>$021f</tt> dengan menaikkan byte paling tidak signifikan akan menghasilkan <tt>$0220</tt>, tetapi ini sebenarnya melompat dari piksel terakhir baris pertama ke piksel pertama baris kedua. Jadi, setiap kali kita bergerak ke kanan, kita perlu memeriksa apakah byte paling tidak signifikan yang baru adalah kelipatan dari <tt>$20</tt>. Ini dilakukan menggunakan pemeriksaan bit terhadap mask <tt>$1f</tt>. Semoga ilustrasi di bawah ini akan menunjukkan bagaimana masking pada 5 bit terendah mengungkapkan apakah suatu angka merupakan kelipatan dari <tt>$20</tt> atau tidak."
+ "Adwaita"
+ "Mode pengalamatan"
+ "Mode Pengalamatan"
+ "Alamat %1$s - opcode tidak dikenal"
+ "Input tombol tambahan juga tersedia: tombol A (tombol Enter/Return, kode ASCII <tt>$0D</tt>) dan tombol B (tombol Spasi, kode ASCII <tt>$20</tt>). Ini dapat digunakan untuk menambahkan lebih banyak interaksi pada permainan Anda. Untuk kontrol arah, tombol WASD dan tombol panah dapat digunakan secara bergantian."
+ "Menambahkan fitur bantuan untuk memudahkan pengeditan kode bagi pemula"
+ "Menambahkan manajemen file untuk menyimpan dan memuat program Anda"
+ "Tambahkan lebih banyak instruksi untuk menggambar piksel tambahan."
+ "Accumulator: Register utama untuk kalkulasi"
+ "Aksen: Kuning"
+ "Aksen: Teal"
+ "Aksen: Slate"
+ "Aksen: Merah"
+ "Aksen: Ungu"
+ "Aksen: Merah Muda"
+ "Aksen: Oranye"
+ "Aksen: Hijau"
+ "Aksen: Biru"
+ "Warna aksen"
+ "Absolute: <tt>$c000</tt>"
+ "Absolute,X dan absolute,Y: <tt>$c000,X</tt> dan <tt>$c000,Y</tt>"
+ "Tentang Learn 6502 Assembly"
+ "Daftar lengkap set instruksi 6502 tersedia <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">di sini</a> dan <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">di sini</a> (saya biasanya merujuk ke kedua halaman karena masing-masing memiliki kelebihan dan kekurangannya). Halaman-halaman ini merinci argumen untuk setiap instruksi, register yang digunakan, dan flag yang diset. Inilah kitab suci Anda."
+ "Sebuah GitHub issue telah dibuka di browser Anda. Harap tinjau dan kirimkan di sana untuk menyelesaikan kontribusi Anda. Setelah disetujui, contoh Anda akan disertakan dalam rilis berikutnya.\n\nJika contoh Anda terlalu besar, seluruh kontennya akan disalin ke clipboard Anda untuk ditempel secara manual ke dalam GitHub issue."
+ "<tt>init</tt> dan <tt>loop</tt> keduanya adalah subrutin. <tt>init</tt> menginisialisasi kondisi awal permainan, dan <tt>loop</tt> adalah loop utama permainan."
+ "<tt>checkSnakeCollision</tt> melakukan loop melalui segmen badan ular, memeriksa setiap pasangan byte terhadap pasangan kepala. Jika ada kecocokan, maka game over."
+ "<tt>a9</tt> dan <tt>c9</tt> adalah opcode prosesor untuk <tt>LDA</tt> dan <tt>CMP</tt> beralamat immediate. <tt>01</tt> dan <tt>02</tt> adalah argumen untuk instruksi-instruksi ini. <tt>d0</tt> adalah opcode untuk <tt>BNE</tt>, dan argumennya adalah <tt>02</tt>. Ini berarti \"lewati dua byte berikutnya\" (<tt>85 22</tt>, versi hasil assembly dari <tt>STA $22</tt>). Coba edit kodenya agar <tt>STA</tt> menggunakan alamat absolut dua byte alih-alih alamat zero page satu byte (misalnya ubah <tt>STA $22</tt> menjadi <tt>STA $2222</tt>). Assemble ulang kodenya dan lihat hexdump-nya lagi - argumen untuk <tt>BNE</tt> sekarang seharusnya <tt>03</tt>, karena instruksi yang dilewati prosesor kini memiliki panjang tiga byte."
+ "<tt>X</tt> menyimpan warna piksel, dan <tt>Y</tt> menyimpan posisi piksel saat ini. Loop pertama menggambar warna saat ini sebagai piksel (melalui register <tt>A</tt>), men-push warna ke stack, lalu menaikkan warna dan posisi. Loop kedua men-pop stack, menggambar warna yang di-pop sebagai piksel, lalu menaikkan posisi. Seperti yang diharapkan, ini menghasilkan pola cermin."
+ "<tt>SP</tt> adalah stack pointer. Saya tidak akan membahas stack dulu, tetapi pada dasarnya register ini dikurangi setiap kali satu byte di-push ke stack, dan ditambah saat satu byte di-pop dari stack."
+ "<tt>PC</tt> adalah program counter - inilah cara prosesor mengetahui posisinya saat ini dalam program. Ini seperti nomor baris yang sedang dieksekusi dalam sebuah skrip. Dalam simulator, kode di-assemble mulai dari lokasi memori <tt>$0600</tt>, sehingga <tt>PC</tt> selalu dimulai dari sana."
+ "<tt>JSR</tt> dan <tt>RTS</tt> (\"jump to subroutine\" dan \"return from subroutine\") adalah pasangan yang biasanya digunakan bersama. <tt>JSR</tt> digunakan untuk melompat dari lokasi saat ini ke bagian lain dari kode. <tt>RTS</tt> kembali ke posisi sebelumnya. Ini pada dasarnya seperti memanggil fungsi dan mengembalikannya."
+ "<tt>JMP</tt> adalah lompatan tanpa syarat. Berikut contoh sederhana untuk menunjukkan cara kerjanya:"
+ "<tt>BCC</tt> dan <tt>BCS</tt> (\"branch on carry clear\" dan \"branch on carry set\") digunakan untuk melakukan branch berdasarkan flag carry. Tulislah sebuah program yang menggunakan salah satu dari keduanya."
+ "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (256 byte pertama, akses lebih cepat)"
+ "<b>Zero Page</b> (<tt>$c0</tt>): Mengakses lokasi memori <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): Tambahkan register X/Y ke alamat zero page"
+ "<b>Z</b> (Zero): Diset saat hasil bernilai nol"
+ "<b>X, Y</b>: Register indeks untuk pengalamatan dan penghitungan"
+ "<b>W</b> atau tombol Panah Atas (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Diset saat operasi aritmatika menyebabkan overflow bertanda"
+ "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Simpan register ke memori"
+ "<b>SP</b> (Stack Pointer): Menunjuk ke posisi stack saat ini (dimulai dari <tt>$FF</tt>)"
+ "<b>SBC memerlukan carry yang diset</b>: Set <tt>C</tt> sebelum melakukan pengurangan (berfungsi sebagai inverse borrow). <tt>C</tt> yang clear setelah SBC menandakan terjadi borrow."
+ "<b>S</b> atau tombol Panah Bawah (<tt>$73</tt>)"
+ "<b>Relative</b> (<tt>label</tt>): Branch menggunakan offset 8-bit bertanda dari instruksi berikutnya (−128…+127)"
+ "<b>Q</b> atau tombol Enter/Return (<tt>$0D</tt>)"
+ "<b>Penyimpanan Program</b>: Dimulai dari <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Push/pull accumulator ke/dari stack"
+ "<b>PC</b> (Program Counter): Menunjuk ke instruksi berikutnya yang akan dieksekusi"
+ "<b>N</b> (Negative): Diset saat bit 7 dari hasil diset"
+ "<b>LDA/LDX/LDY</b>: Muat register"
+ "<b>JSR/RTS</b>: Lompat ke subrutin / Kembali dari subrutin"
+ "<b>JMP</b>: Lompatan tanpa syarat"
+ "<b>Indirect</b> (<tt>($c000)</tt>): Mencari alamat yang tersimpan di lokasi yang diberikan"
+ "<b>Indirect Indexed</b> (<tt>($c0),Y</tt>): Gunakan alamat zero page sebagai pointer untuk mendapatkan alamat dasar, lalu tambahkan Y ke dasar tersebut"
+ "<b>Indexed Indirect</b> (<tt>($c0,X)</tt>): Tambahkan X ke alamat zero page, lalu gunakan hasilnya sebagai pointer untuk mendapatkan alamat target yang sebenarnya"
+ "<b>Immediate</b> (<tt>#$c0</tt>): Menggunakan nilai sebenarnya"
+ "<b>INX/INY/DEX/DEY</b>: Increment/decrement register"
+ "<b>I</b> (Interrupt): Diset saat interrupt dinonaktifkan"
+ "<b>E</b> atau tombol Spasi (<tt>$20</tt>)"
+ "<b>Memori Tampilan</b>: <tt>$0200</tt>-<tt>$05FF</tt> (digunakan untuk output layar)"
+ "<b>Kontrol arah</b>:"
+ "<b>D</b> atau tombol Panah Kanan (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Diset saat prosesor berada dalam mode BCD (Binary Coded Decimal)"
+ "<b>Operasi perbandingan</b>: <tt>CMP/CPX/CPY</tt> mengeset <tt>N/Z/C</tt> seperti pengurangan (register − memori) tanpa menyimpan hasilnya."
+ "<b>C</b> (Carry): Diset saat operasi aritmatika meluap satu byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Branch jika sama/tidak sama/carry clear/carry set"
+ "<b>B</b> (Break): Diset saat instruksi BRK dieksekusi"
+ "<b>Tombol aksi</b>:"
+ "<b>Absolute</b> (<tt>$c000</tt>): Mengakses lokasi memori mana pun"
+ "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Tambahkan register X/Y ke alamat absolut"
+ "<b>ADC/SBC</b>: Tambah/kurang dengan carry"
+ "<b>A</b> atau tombol Panah Kiri (<tt>$61</tt>)"
+ "<b>A</b> (Accumulator): Register utama untuk kalkulasi dan manipulasi data"
+ "<b><tt>$f</tt></b>: Abu-abu muda (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Biru muda (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Hijau muda (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Abu-abu (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Abu-abu gelap (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Merah muda (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Tombol terakhir yang ditekan (kode ASCII)"
+ "<b><tt>$FE</tt></b>: Generator bilangan acak (terbaca sebagai nilai acak 0-255)"
+ "<b><tt>$9</tt></b>: Cokelat (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Oranye (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Kuning (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Biru (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Hijau (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Ungu (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Sian (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Merah (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Putih (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Data posisi ular (kepala, segmen badan, ekor)"
+ "<b><tt>$0</tt></b>: Hitam (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Panjang ular"
+ "<b><tt>$02</tt></b>: Arah ular (1=atas, 2=kanan, 4=bawah, 8=kiri)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Posisi apel"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> membuat sebuah <a href=\"https://gist.github.com/wkjagt/9043907\">gist dari kode sumber ini yang telah diberi anotasi lengkap</a>, jadi ikuti itu untuk detail lebih lanjut."
+ "Bahasa assembly 6502 memiliki sejumlah instruksi percabangan, yang semuanya melakukan percabangan berdasarkan apakah flag tertentu diset atau tidak. Dalam contoh ini kita akan melihat <tt>BNE</tt>: \"Branch on not equal\"."
+ "Stack 6502 penuh! Melakukan wrapping..."
+ "Stack 6502 dikosongkan! Melakukan wrapping..."
+ "(Sebenarnya, saya telah diberitahu secara terpercaya bahwa prosesor 6502 masih diproduksi oleh <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> dan <a href=\"https://www.mouser.co.uk/c/?q=65C02\">dijual kepada para penghobi</a>, jadi jelas 6502 <i>bukan</i> bahasa yang sudah mati! Siapa yang tahu?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-ja/strings.xml b/packages/app-android/data/Android/src/main/res/values-ja/strings.xml
new file mode 100644
index 00000000..58fa02ff
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-ja/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "6502アセンブリを学ぶ"
+ "6502アセンブリを学ぶ"
+ "6502アセンブリを学ぶ"
+ "வணக்கம்! タミル語の翻訳が加わりました。翻訳してくださった தமிழ்நேரம் に感謝します。நன்றி!"
+ "これは間接参照で得られる <tt>$0411</tt>、<tt>$0410</tt>、<tt>$040f</tt>(画面中央付近の3ピクセル)を表します。くどいようですが、間接アドレッシングの仕組みをしっかり理解することが重要です。"
+ "wdm-output"
+ "プログラミング"
+ "学習"
+ "作者: %1$s"
+ "_設定"
+ "ゼロページ: <tt>$c0</tt>"
+ "ゼロページ,Y: <tt>$c0,Y</tt>"
+ "ゼロページ,X: <tt>$c0,X</tt>"
+ "ゼロページの使い方"
+ "ゼロページ ($0000-$00FF)"
+ "ゼロフラグ: 演算結果が0のときにセット。条件分岐で重要で、BEQ/BNE など多くの命令が値が0かどうかの判定に用います。"
+ "ファイルに未保存の変更があります。保存しない場合、変更は失われます。"
+ "<tt>TAX</tt> は見ましたね。<tt>TAY</tt>、<tt>TXA</tt>、<tt>TYA</tt> が何をするか想像できるでしょう。コードを書いて確かめてみましょう。"
+ "アプリを購入して、このオープンソースプロジェクトを支援していただきました。ありがとうございます!"
+ "画面は 32×8 ピクセルの水平ストリップ 4 本と考えられます。対応は <tt>$0200-$02ff</tt>、<tt>$0300-$03ff</tt>、<tt>$0400-$04ff</tt>、<tt>$0500-$05ff</tt>。各行の先頭は <tt>$0200-$021f</tt>、<tt>$0220-$023f</tt>、<tt>$0240-$025f</tt>…です。"
+ "黄色"
+ "内蔵コードエディターでコードを作成・編集"
+ "これらの例ではいずれも、デバッグビューの<b>16進モニター</b>でメモリの変化を観察すると理解が進みます。一覧からメモリ領域を選ぶとその部分が表示されます。たとえば<b>表示メモリ ($0200–$05FF)</b>を選ぶと画面のピクセルを、<b>ゼロページ ($0000–$00FF)</b>を選ぶと最初の256バイトを確認できます。"
+ "絶対アドレッシングでは、命令の引数として完全なメモリアドレスを使います。例えば:"
+ "ベトナム語翻訳へようこそ。Loc Huynh (hthienloc) によって全面的に貢献されました。"
+ "ポーランド語翻訳へようこそ。Micro Wave によって最初に貢献されました。Dziękujemy!"
+ "すでにステータス欄(<tt>A</tt> や <tt>PC</tt> など)を少し見ましたが、何を意味するのでしょうか?"
+ "学習タブに新しい「例」セクションを追加しました。ここでは、完全にコメントされた6502プログラムをアプリ内で直接探索して実行できます。特集のスネークゲームの例から始めて、ピクセルが生き生きと動く様子をご覧ください!"
+ "<tt>$00</tt>〜<tt>$0F</tt> は 16 色を表します(<tt>$00</tt>=黒、<tt>$01</tt>=白)"
+ "カスタムのプライマリカラーを使用"
+ "カスタムのアクセントカラーを使用"
+ "ゲーム状態の更新"
+ "未保存の変更"
+ "ゼロページ,Y と違い、absolute,Y は <tt>STX</tt> では使えませんが、<tt>LDA</tt> と <tt>STA</tt> では使えます。"
+ "内部改善: TypeScript 6、Vite 8 へのアップデートをはじめ、パフォーマンスと安定性向上のための依存関係の更新を行いました。"
+ "64K メモリ外へコードを再配置できません"
+ "指定されたアドレス/ラベルを見つける/解析できません"
+ "スタック命令の例として <tt>PHA</tt>(アキュムレータをプッシュ)と <tt>PLA</tt>(プル)があります。以下はその例です。"
+ "新しいサンプルプログラムが2つ、どちらも皆さんからのものです。Jacob による Dino Run と、edit12 による Line Buster 6502 です。共有ボタンから送られてきた最初の例で、これからもお待ちしています。"
+ "チュートリアル <sub>by <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, CC BY 4.0</sub>"
+ "チュートリアル"
+ "6502の各アドレッシングモードを使うコード片を書いてみましょう。デバッグビューの<b>16進モニター</b>でメモリの一部を観察できます。"
+ "6502マイクロプロセッサのサンプルプログラムを試してみましょう。"
+ "サンプルプログラムを試す"
+ "3 つのピクセルの色を変えてみましょう。"
+ "サイドバーを切り替え"
+ "方向が <tt>1</tt>/<tt>2</tt>/<tt>4</tt>/<tt>8</tt> のどれかを調べるには、キャリーが立つまで右シフト(<tt>LSR</tt>)を繰り返します。1 回なら上、2 回なら右…という具合です。"
+ "タイトル"
+ "本リリースでは携帯機風の鮮やかなテーマとカスタムカラー、タブレット/デスクトップ向けのアダプティブなレイアウトを導入し、長時間の学習にも見通しよく作業できます。新規コントリビューター @mmartinortiz に感謝します。TypeScript の厳格化、GtkSourceView のカスタムスタイル、強化されたデバッガー操作など技術面の改善も多数含みます。"
+ "これは少し変わっています。ゼロページ,X と間接の中間のようなものです。ゼロページアドレスに <tt>X</tt> を加え、その結果を使って 2 バイトアドレスを参照します。例:"
+ "これは <tt>$10</tt> に <tt>$11</tt>、<tt>$12</tt> に <tt>$10</tt>、<tt>$14</tt> に <tt>$0f</tt> を書き込み、さらに <tt>$11</tt>、<tt>$13</tt>、<tt>$15</tt> に <tt>$04</tt> を書き込みます。結果のメモリは次のとおりです:"
+ "このあたりからアドレッシングが面白くなります。このモードではゼロページアドレスが与えられ、そこに <tt>X</tt> の値を加えます。例:"
+ "これはゼロページ,X と同等ですが、<tt>LDX</tt> と <tt>STX</tt> にのみ使用できます。"
+ "これはゼロページ,X/Y の絶対アドレッシング版です。例:"
+ "実用的な理由もあります。レトロゲーム開発です。ホームブリューは今も盛んで、<a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">NES 向けの新作</a>をはじめ多くのクラシック機で作品が出ています。SNES のような別機種でも 6502 から始める価値があります。SNES の 65C816 は 6502 と後方互換で、ここで学ぶ基礎(レジスタ、アドレッシング、命令セット)はそのまま活きます。"
+ "ではなぜ 6502 なのか?<a href=\"https://ja.wikipedia.org/wiki/X86\">x86</a> のような<i>実用的</i>なアセンブリでは?私は x86 を学ぶ必要性は高くないと思います。仕事でアセンブリを<i>書く</i>機会はほぼありません。これは思考を広げる学術的な練習でもあります。6502 は多くの開発者が高級言語ではなく直接アセンブリを書いていた時代に、人間が書く前提で設計されました。現代のアセンブリはコンパイラが出力するためのものです。しかも 6502 は<i>楽しい</i>。x86 を<i>楽しい</i>と言う人はいません。"
+ "ゼロページには、ゲーム状態の変数がいくつか格納されます。<tt>$00</tt>、<tt>$01</tt>、<tt>$10</tt> 以降にあるものは、間接アドレッシングで参照される 2 バイトのアドレスを表します。これらは表示用の <tt>$0200</tt>〜<tt>$05ff</tt> の範囲に対応します。例えば <tt>$00</tt>=<tt>$01</tt>、<tt>$01</tt>=<tt>$02</tt> なら、表示の2番目のピクセル <tt>$0201</tt> を指します(間接では下位バイトが先)。"
+ "6502 のスタックは一般的なスタックと同じで、値をプッシュし、(6502 では「プル」と呼ぶ)ポップします。深さはスタックポインタという特別なレジスタで管理されます。スタックは <tt>$0100</tt>〜<tt>$01ff</tt> にあり、スタックポインタの初期値は <tt>$ff</tt>(<tt>$01ff</tt> を指す)です。1 バイトをプッシュすると <tt>$fe</tt>(<tt>$01fe</tt>)になり…と続きます。"
+ "スタック"
+ "チュートリアルのスネークゲーム"
+ "このサブルーチンの結果、<tt>$00</tt> に乱数バイト、<tt>$01</tt> に 2〜5 の乱数が入ります。間接アドレッシングでは下位バイトが先なので、表示に使う <tt>$0200</tt>〜<tt>$05ff</tt> の範囲のアドレスになります。"
+ "<tt>JSR</tt> はジャンプ前に「次の命令のアドレス−1」をスタックに積むため、処理系は戻り先を知っています。<tt>RTS</tt> はそれを取り出して +1 し、そこへ戻ります。例:"
+ "問題は <tt>$184</tt> が 1 バイトに収まりません(最大 <tt>$FF</tt>)。レジスタは 1 バイトしか保持できません。ただし処理系は賢く、この演算後にキャリーフラグが <tt>1</tt> に立っていたのに気付くでしょう。つまりそういうことです。"
+ "<tt>BNE</tt> の逆は <tt>BEQ</tt> です。<tt>BEQ</tt> を使うプログラムを書いてみましょう。"
+ "<tt>ADC</tt> の反対は <tt>SBC</tt>(キャリー付き減算)です。これを使うプログラムを書いてみましょう。"
+ "6502アセンブリで作られた、ブラウザのオフラインのランゲーム"
+ "次の <tt>generateApplePosition</tt> はりんごの位置をランダムに設定します。まず乱数バイトをアキュムレータへ読み込み(このシミュレーターでは <tt>$fe</tt> が乱数源)、<tt>$00</tt> に保存。次に別の乱数を読み込み、<tt>$03</tt> と <tt>AND</tt> します。ここで少し寄り道が必要です。"
+ "次の <tt>checkCollision</tt> は <tt>checkAppleCollision</tt> と <tt>checkSnakeCollision</tt> に委ねます。<tt>checkAppleCollision</tt> はりんご位置の2バイトと頭位置の2バイトが一致するかを確認し、一致すれば長さを伸ばして新しいりんご位置を生成します。"
+ "次の <tt>BNE decrement</tt> は、<tt>Z</tt> が <tt>0</tt>(<tt>CPX</tt> で等しくなかった)なら <tt>decrement</tt> へ。そうでなければ何もせず <tt>X</tt> を <tt>$0201</tt> に保存して終了します。"
+ "次の部分は方向に応じて蛇の頭を更新します。ここはおそらく最も複雑で、メモリアドレスが画面にどう対応するかに依存します。詳しく見ていきましょう。"
+ "長さは <tt>4</tt> なので <tt>X</tt> は <tt>3</tt> から開始します。<tt>LDA $10,x</tt> で <tt>$13</tt> を <tt>A</tt> に、<tt>STA $12,x</tt> でそれを <tt>$15</tt> に保存。<tt>X</tt> をデクリメントしてループします。次に <tt>X</tt> は <tt>2</tt> なので <tt>$12</tt> を読み <tt>$14</tt> に保存します。<tt>X</tt> が正の間(<tt>BPL</tt>)ループします。"
+ "最後の <tt>spinWheels</tt> はゲームが速すぎないようにするための遅延です。<tt>spinWheels</tt> は <tt>X</tt> を 0 から減らし 0 に戻るまで数えるだけです。最初の <tt>dex</tt> はラップして <tt>X</tt> は <tt>#$ff</tt> になります。"
+ "最後のセクションはプロセッサフラグです。各フラグは1ビットなので7つすべてが1バイトに収まります。フラグは直前の命令結果を示すために設定されます。詳細は後ほど。<a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">こちらでレジスタとフラグの解説を参照</a>。"
+ "16進 <tt>$03</tt> は 2 進で <tt>00000011</tt> です。<tt>AND</tt> は引数とアキュムレータのビット AND を行います。例えばアキュムレータが <tt>10101010</tt> なら、<tt>00000011</tt> との <tt>AND</tt> 結果は <tt>00000010</tt> です。"
+ "16進表示は次のようになります:"
+ "ゲームループ"
+ "先頭の2バイトはりんごの位置です。スネークがりんごを食べるたび更新されます。バイト <tt>$02</tt> には現在の方向が入り、<tt>1</tt>=上、<tt>2</tt>=右、<tt>4</tt>=下、<tt>8</tt>=左です。数値の理由は後ほど明らかになります。"
+ "最初のサブルーチン <tt>readKeys</tt> は入力受付を担当します。このシミュレーターではメモリ <tt>$ff</tt> に直近のキーの ASCII コードが入ります。これを読み込んで <tt>$77</tt>(W)、<tt>$64</tt>(D)、<tt>$73</tt>(S)、<tt>$61</tt>(A) と比較し、一致すれば該当セクションに分岐します。"
+ "最初の行には <tt>A</tt>、<tt>X</tt>、<tt>Y</tt> の各レジスタ(<tt>A</tt> はアキュムレータ)を示します。各レジスタは1バイトを保持し、多くの操作はこれらの内容に対して行われます。"
+ "最初の命令で実行は <tt>init</tt> にジャンプします。ここで <tt>X</tt> を設定して次の命令 <tt>JSR loop</tt> に戻ります。<tt>loop</tt> では <tt>X</tt> を <tt>$05</tt> になるまでインクリメントし、続いて <tt>JSR end</tt> でファイル末尾へ。<tt>JSR</tt> と <tt>RTS</tt> を組み合わせてモジュール化できることを示します。"
+ "これによりアキュムレータの下位2ビットがマスクされ、それ以外は 0 になります。0〜255 の数を 0〜3 の範囲に変換します。"
+ "以下のコードブロックにはゲーム全体のソースコードが含まれています。以降のセクションでその仕組みを説明します。"
+ "黒いゲーム画面の左上に色付きの「ピクセル」が3つ表示されているはずです。"
+ "このアプリはGNOMEのインターフェースフォント向けに設計されています。他のシステムではそのシステムのフォントで描画されるため、通常は小さく表示されます。"
+ "Y インデックスレジスタは X と同様で特別な機能はありません。主にインデックス付きアドレッシングやデータ移動に使われます。"
+ "X インデックスレジスタはインデックス付きアドレッシングやカウントに使用します。ループカウンタや配列インデックスを保持し、基底アドレスに対する X オフセットでのメモリアクセスに必須です。特例: TSX/TXS で X とスタックポインタを相互に転送します。"
+ "スタックポインタはサブルーチンや割り込みのコールスタックを管理します。初期値は $FF(スタック頂点)で下方向に伸びます。PUSH/PULL、JSR/RTS、割り込み処理で用いられ、入れ子呼び出しで重要です。"
+ "プログラムカウンタは次に実行する命令のアドレスを保持します。各命令後に自動インクリメントされ、ジャンプや分岐、呼び出しや復帰で変更されます。フロー制御やデバッグに不可欠です。"
+ "アキュムレータ(A)は算術・論理演算の主レジスタです。ADD、SUBTRACT、AND、OR などの基本計算で使用され、6502 アセンブリで最も頻用されます。"
+ "<tt>loop</tt> サブルーチンは複数のサブルーチンを順に呼び出し、その後自分自身に戻ります:"
+ "<tt>init</tt> は <tt>initSnake</tt> と <tt>generateApplePosition</tt> の2つに分かれます。<tt>initSnake</tt> は方向と長さを設定し、頭部と胴体の初期位置を読み込みます。<tt>$10</tt> は頭、<tt>$12</tt> は単一の胴体セグメント、<tt>$14</tt> は尾の画面位置を保持します(尾は最後のセグメントで黒で描画し、動きを表現します)。次のコードで行われます。"
+ "<tt>BIT</tt> は <tt>AND</tt> に似ていますが、計算はゼロフラグの設定にのみ使われ、結果自体は破棄されます。アキュムレータと引数の AND が 0 のときのみゼロフラグが立ちます。2 の冪を扱う場合、2 つの数が異なるときだけゼロになります(例: <tt>0001 AND 0001</tt> は 0 ではなく、<tt>0001 AND 0010</tt> は 0)。"
+ "6502 は 16 ビットのアドレスバスを使用し、プロセッサは 65536 バイトのメモリにアクセスできます。1 バイトは 2 桁の16進で表すため、メモリアドレスは一般に <tt>$0000 - $ffff</tt> と表記します。以下に代表的な参照方法を示します。"
+ "オープンソースソフトウェアをご利用いただきありがとうございます。"
+ "LSRとBCCでAのビット0を調べ、結果として1または0をAに格納します"
+ "仮想ゲームコンソールで作品をテスト"
+ "Tervetuloa! フィンランド語の翻訳が加わりました。Jiri Grönroos氏のご協力に感謝します。Kiitos!"
+ "ティール"
+ "システムフォント(GNOMEのサイズ)"
+ "システムデフォルト"
+ "構文エラー 行 %1$d: %2$s"
+ "サポーター"
+ "支援する"
+ "送信"
+ "スタイル"
+ "停止"
+ "6502アセンブリのステップバイステップガイド"
+ "ステップ実行"
+ "ステータスフラグ"
+ "スタックポインタ: スタック位置を指す"
+ "スタックの例"
+ "スタック ($0100-$01FF)"
+ "特別なメモリ位置(シミュレーター)"
+ "ソースURL"
+ "一部の命令はメモリアドレスを扱いません(例: <tt>INX</tt> は <tt>X</tt> をインクリメント)。これは暗黙アドレッシングと呼ばれ、引数は命令に暗黙的に含まれます。"
+ "ところで、なぜ 6502 を学ぶのでしょう?廃れた言語では?ラテン語も同じですが今も教えられています。<a href=\"https://ja.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "ではこのプログラムは何をしているのでしょう?ステップ実行して見てみましょう。<b>リセット</b>を押し、続いて<b>ステップ実行</b>でプログラムを1命令ずつ実行します。<b>デバッグ</b>ビューはレジスタとメモリを表示します。小さなウィンドウでは別タブに、広いウィンドウではゲームコンソール下のパネルに表示されます。<b>ステップ実行</b>を1回押すと、デバッグビューで<tt>A=</tt>が<tt>$00</tt>から<tt>$01</tt>に、<tt>PC=</tt>が<tt>$0600</tt>から<tt>$0602</tt>へ変わるのが分かります。"
+ "つまり <tt>STA $0200</tt> は <tt>A</tt> の値を <tt>$0200</tt> に保存します。<b>ステップ</b>をさらに4回押して残りを実行し、<tt>A</tt> の変化に注目してください。"
+ "<tt>upKey</tt> を見ると、現在の方向が下(4)ならビットテストは 0 になります。<tt>BNE</tt> は「ゼロフラグがクリアなら分岐」を意味するので、この場合は <tt>illegalMove</tt> に分岐し、サブルーチンから単に戻ります。そうでなければ新しい方向(この場合は 1)を適切なメモリ位置に保存します。"
+ "それでは始めましょう!このアプリには、このインタラクティブチュートリアル向けに調整した<a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 アセンブラとシミュレーター</a>が含まれています。下のコードブロックにある<b>コピー</b>ボタンを押して例のコードをエディターへコピーし、<b>アセンブル</b>でコードをアセンブルし、<b>実行</b>で実行します。これらの操作はボタンまたはメニューから行えます。"
+ "これまでは分岐のない基本的なプログラムしか書けませんでした。ここから変えていきましょう。"
+ "スネークゲームのメモリ使用"
+ "スネークゲームデータ ($00-$15)"
+ "スネークゲーム"
+ "スレート"
+ "シミュレーターのエラー"
+ "シミュレーター"
+ "共有されたコード例には、CC-BY-4.0 ライセンス情報が含まれるようになり、コミュニティがあなたの貢献を利用して構築する方法が明確になります。"
+ "例を共有"
+ "例を共有"
+ "共有"
+ "Shalom! ヘブライ語の翻訳が加わりました。全文を翻訳してくださった Menachem (naattxx) に感謝します。Toda raba!"
+ "しかし真剣に言うと、アセンブリ言語を理解することは非常に価値があります。アセンブリ言語はコンピュータにおける最も低い抽象化レベルであり、コードがまだ読み取れる状態にあるポイントです。アセンブリ言語は、コンピュータのプロセッサによって実行されるバイトに直接変換されます。その仕組みを理解すれば、あなたは基本的にコンピュータの<a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">魔法使い</a>になったようなものです。"
+ "Selamat datang! インドネシア語の翻訳も加わりました。Arif Budiman のご協力に感謝します。Terima kasih!"
+ "画面はメモリ範囲<tt>$0200</tt>-<tt>$05FF</tt>にマッピングされます"
+ "多数の新規翻訳が加わりました:フランス語、インターリングア、ポルトガル語、ポルトガル語(ブラジル)、オランダ語、スペイン語、ウクライナ語、日本語、中国語(簡体字)"
+ "%1$s として保存しました"
+ "変更を保存しますか?"
+ "名前を付けて保存..."
+ "アセンブリファイルを保存"
+ "保存"
+ "実行中のスネークゲーム"
+ "実行"
+ "このセクションの最初の例を、<tt>X</tt>レジスタの代わりに<tt>Y</tt>レジスタを使用するように書き換えてください。"
+ "例がどのように表示されるかを確認してください。<b>送信</b>をクリックすると、GitHubでissueが作成されます。送信を完了するには、GitHubアカウントでサインインする必要があります。"
+ "再開"
+ "リセット"
+ "ゲームの描画"
+ "相対: <tt>$c0</tt>(またはラベル)"
+ "相対アドレッシングは分岐命令に使用されます。これらの命令は1バイトを取り、それを次の命令からのオフセットとして使用します。"
+ "レジスタとフラグ"
+ "レジスタ"
+ "既定の16進モニターのアドレス範囲を縮小し効率を向上"
+ "赤"
+ "入力の読み取り"
+ "乱数/入力 ($FE-$FF)"
+ "終了"
+ "クイックヒント"
+ "紫"
+ "レトロなゲーム機をプログラミング"
+ "プログラムを一時停止しました"
+ "プログラムが完了しました。もう一度ステップ実行するにはリセットしてください。"
+ "プログラムは PC=$%1$s で完了しました"
+ "プログラムが完了しました"
+ "プログラム領域 ($0600-$FFFF)"
+ "プログラムカウンタ: 次の命令を指す"
+ "プロセッサステータスレジスタ"
+ "プロセッサフラグ"
+ "プライマリ: 黄色"
+ "プライマリ: ティール"
+ "プライマリ: スレート"
+ "プライマリ: 赤"
+ "プライマリ: 紫"
+ "プライマリ: ピンク"
+ "プライマリ: オレンジ"
+ "プライマリ: 緑"
+ "プライマリ: 青"
+ "プライマリカラー"
+ "前へ"
+ "例のプレビュー"
+ "プレビュー"
+ "<b>ステップ</b> をもう一度押して2つ目の命令を実行します。画面左上のピクセルが白になるはずです。このシミュレーターは <tt>$0200</tt>〜<tt>$05ff</tt> のメモリを表示に使います。<tt>$00</tt>〜<tt>$0f</tt> は16色(<tt>$00</tt>=黒、<tt>$01</tt>=白)なので、<tt>$0200</tt> に <tt>$01</tt> を書けば左上が白になります。実機の映像出力より簡略ですが、ここでは十分です。"
+ "前処理中…"
+ "プレイ"
+ "ピンク"
+ "趣味の開発者、学生、そしてコンピュータの仕組みに興味があるすべての人に最適です!"
+ "一時停止"
+ "オーバーフローフラグ: 演算結果が符号付き8ビット(-128〜+127)の範囲に収まらない場合にセット。符号付き演算のエラー検出に使用します。"
+ "全体構造"
+ "分岐が範囲外です(行 %1$d、分岐は -128〜+127 に制限): %2$s"
+ "最初のプログラム"
+ "32×8 ピクセルの水平ストリップ4本で構成"
+ "オレンジ"
+ "不要な権限を削除して Flatpak 設定を最適化"
+ "%1$s を開きました"
+ "開く..."
+ "オープンソース"
+ "アセンブリファイルを開く"
+ "値がスネークの体に沿ってシフトダウンされた後、頭部をどうするかを決定する必要があります。まず方向を<tt>A</tt>にロードします。<tt>LSR</tt>は「論理右シフト」を意味し、「すべてのビットを1ビット右にシフト」します。最下位ビットはキャリーフラグにシフトされるため、アキュムレータが<tt>1</tt>の場合、<tt>LSR</tt>の後は<tt>0</tt>になり、キャリーフラグがセットされます。"
+ "リセット時(シミュレーター): <tt>P = $30</tt>(bit5 と <tt>B</tt> セット、<tt>D</tt> と <tt>I</tt> クリア)"
+ "OK"
+ "さあ、学んだことを使ってゲームを作りましょう。古典『スネーク』のごく簡単な版を作成します。"
+ "事前のプログラミング経験は不要。インタラクティブなレッスンで一歩ずつスキルを身につけましょう。"
+ "実行するコードがありません。"
+ "アドレスまたはラベルが指定されていません"
+ "次は <tt>drawSnake</tt> です。これも単純で、まず尾を消し、その後頭を描きます。<tt>X</tt> に長さを設定して正しいピクセルを指し、<tt>A</tt> を 0 にしてインデックス間接で書き込みます。続いて頭にインデックスするために <tt>X</tt> を再ロードし、<tt>A</tt> を 1 にして <tt>($10,x)</tt> へ保存します。<tt>$10</tt> は頭の2バイト位置を持つため、現在の頭位置に白いピクセルを描きます。動くのは頭と尾だけなので、これで十分に動作します。"
+ "コード検査用の新ツール(逆アセンブラーと高速切替可能なメモリビューア)を追加"
+ "ネガティブフラグ: 演算結果の最上位ビット(ビット7)が1のときセット。符号付き比較に用い、2の補数表現で負かどうかを示します。"
+ "ほぼすべてのゲームはゲームループが核にあります。基本形は同じで、入力の受付→状態更新→描画を繰り返します。本ループも同様です。"
+ "メッセージ"
+ "メモリ <tt>$01</tt> と <tt>$02</tt> にはそれぞれ <tt>$05</tt> と <tt>$07</tt> が入っています。<tt>($00,X)</tt> は <tt>($00 + X)</tt> と考えられ、ここでは <tt>X</tt> が <tt>$01</tt> なので <tt>($01)</tt> になります。以降は通常の間接参照と同様で、<tt>$01</tt> と <tt>$02</tt> の2バイト(<tt>$05</tt> と <tt>$07</tt>)から <tt>$0705</tt> を形成します。これは直前の命令で <tt>Y</tt> を格納したアドレスなので、回り道ながら <tt>A</tt> は <tt>Y</tt> と同じ値になります。実際にはあまり見かけません。"
+ "メモリマップ"
+ "多数の軽微な不具合を修正し、全体の使い勝手を向上"
+ "動的状態を備えたモダンなフローティングアクションボタンを導入し直感的な操作を実現。さらに Adwaita コンポーネントでデバッガーウィジェットを全面刷新しました。"
+ "Line Buster 6502"
+ "ライトスタイル"
+ "例から学ぶことがこれほど簡単になったことはありません。動作するコードに飛び込んで、調整し、壊して、また直す――かつて最高のプログラマーたちはそうやって学んだのです!"
+ "PHA命令とPLA命令でスタックを扱う方法を学びましょう"
+ "6502 マイクロプロセッサのプログラミングを学びましょう。"
+ "コーディングしながらコンピュータの歴史も学べます"
+ "Learn 6502 は Windows と macOS でも動作するようになりました。Linux を使っていない友人にすすめたいと思っていた方は、これで紹介できます。"
+ "Learn 6502 が GNOME 50 で動作するようになりました!ランタイムの更新に貢献してくださった Sabri Ünal 氏に感謝します。"
+ "6502アセンブリを学ぶ"
+ "学習"
+ "ラベル処理に失敗しました"
+ "ラベルは行 %1$d ですでに定義されています: %2$s"
+ "ラベル %1$s は既にシンボルとして使用されています。いずれかの名前を変更してください"
+ "ジャンプは分岐に似ていますが2点異なります。1つ目は条件付きではないこと、2つ目は2バイトの絶対アドレスを取ることです。小規模なプログラムでは主にラベルを使うため重要ではありませんが、大規模になるとセクション間の移動はジャンプが唯一の手段になります。"
+ "ジャンプ"
+ "JSR/RTS"
+ "JMP"
+ "導入"
+ "割り込み禁止フラグ: セット時はマスク可能な割り込み(IRQ)をすべて無効化します。NMI(不可マスク割り込み)のみ発生します。割り込み不可のクリティカル区間で使用します。"
+ "インターフェースフォント"
+ "インタラクティブチュートリアルで初心者から上級者までガイド"
+ "インタラクティブチュートリアル"
+ "アセンブリの命令は小さな事前定義関数の集合のようなものです。すべての命令は引数0個または1個を取ります。いくつかの命令を注釈付きコードで紹介します:"
+ "命令"
+ "初期化"
+ "間接: <tt>($c000)</tt>"
+ "間接インデックス: <tt>($c0),Y</tt>"
+ "間接インデックスはインデックス間接に似ていますが、参照の手順が逆です。参照<i>前</i>に <tt>X</tt> を足す代わりに、ゼロページアドレスを参照して得たアドレスに <tt>Y</tt> を足します。"
+ "間接アドレッシングは絶対アドレスを使って別のアドレスを参照します。先頭のアドレスが下位バイト、次のバイトが上位バイトです。分かりづらいので例を示します:"
+ "ラベルをインデックス作成中..."
+ "インデックス間接: <tt>($c0,X)</tt>"
+ "インデックスレジスタ Y: アドレッシングに使用"
+ "インデックスレジスタ X: アドレッシングに使用"
+ "この短いチュートリアルでは、6502アセンブリ言語の書き方を始めることを紹介します。6502プロセッサは1970年代から1980年代にかけて非常に普及し、<a href=\"https://ja.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>、<a href=\"https://ja.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>、<a href=\"https://ja.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>、<a href=\"https://ja.wikipedia.org/wiki/Apple_II\">Apple II</a>、<a href=\"https://ja.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>などの有名なコンピュータを駆動していました。FuturamaのBenderは<a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">脳として6502プロセッサを使用</a>しています。<a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">ターミネーターでさえも6502でプログラミングされていた</a>のです。"
+ "この例では、<tt>$f0</tt>には値<tt>$01</tt>が、<tt>$f1</tt>には値<tt>$cc</tt>が格納されています。命令<tt>JMP ($f0)</tt>は、プロセッサに<tt>$f0</tt>と<tt>$f1</tt>(<tt>$01</tt>と<tt>$cc</tt>)の2バイトをルックアップさせ、それらを組み合わせてアドレス<tt>$cc01</tt>を形成し、これが新しいプログラムカウンタになります。上記のプログラムをアセンブルしてステップ実行し、何が起こるかを確認してください。<tt>JMP</tt>については<a href=\"#jumping\">ジャンプ</a>のセクションでさらに詳しく説明します。"
+ "この場合、<tt>($01)</tt> は <tt>$01</tt> と <tt>$02</tt> の2バイト(<tt>$03</tt> と <tt>$07</tt>)を参照してアドレス <tt>$0703</tt> を構成します。さらに <tt>Y</tt> の値を加えて最終アドレス <tt>$0704</tt> を得ます。"
+ "このアセンブラでは、数値を表す説明的な定数(またはシンボル)を定義できます。以降のコードはリテラルの代わりに定数を使えるため、意図が明確になります。名前には英字、数字、アンダースコアを使用できます。"
+ "エディターで次のコードを<b>入力</b>(貼り付け不可)してください:"
+ "アセンブリでは分岐命令とラベルを併用するのが一般的です。アセンブル時、ラベルは1バイトの相対オフセット(次の命令から前後に進むバイト数)に変換されるため、分岐は約256バイトの範囲内でしか移動できません。つまり局所的な移動に限られ、遠くへ移動するにはジャンプ命令を使います。"
+ "ゲームコンソールの性能を改善し、より滑らかなプレイに"
+ "モバイル向けにゲーム画面と操作性を改善"
+ "非技術ユーザーにも分かりやすい説明に改善"
+ "暗黙"
+ "即値: <tt>#$c0</tt>"
+ "即値アドレッシングは厳密にはメモリアドレスを扱いません。値そのものを使う方式です。例えば <tt>LDX #$01</tt> は値 <tt>$01</tt> を <tt>X</tt> にロードします。これは <tt>LDX $01</tt>(メモリ <tt>$01</tt> の値を <tt>X</tt> にロード)とは全く異なります。"
+ "システムの言語が中国語の場合、アプリは再び中国語で表示されます。これまでは誤って英語で表示されていました。"
+ "例が別の例に基づいている、またはインスピレーションを受けている場合は、ソースURLを入力できます。"
+ "記載のいずれかの言語を話す方は、翻訳のレビューや改善にご協力ください。アプリ内リンク、翻訳プラットフォーム、またはIssueの作成から参加できます。"
+ "加算結果が1バイトを超えると、アドレスは折り返します。例えば:"
+ "IDE"
+ "各方向の詳細な仕組みは深入りしませんが、上の説明で少し練習すれば理解できるはずです。"
+ "非表示"
+ "ヘックスダンプを生成しました。"
+ "ヘックスダンプ"
+ "16進モニター"
+ "例です。即値オペランドには <tt>#</tt> が付く点に注意してください。"
+ "ヘルプ"
+ "ヘブライ語は、右から左に書く初めての言語でもあります。Menachem のテストと貢献のおかげで、アプリは右から左へのレイアウトに対応し、さらなるRTL言語への準備が整いました。"
+ "緑"
+ "好スタートです!最初の章を修了しました!"
+ "独自のクールな6502作品をお持ちですか?コミュニティと共有しましょう!アプリから直接コード例を投稿できるようになりました。共有ボタンを押すだけで、GitHubのissueとプルリクエストが自動的に作成されます。"
+ "クールな6502の例はありますか?\nコミュニティと共有しましょう!"
+ "セクション間の移動は、上位バイトも考慮する必要があるため少し複雑です。たとえば <tt>$02e1</tt> から下へは <tt>$0301</tt> になります。幸い、これは比較的簡単です。<tt>$e1</tt> に <tt>$20</tt> を加えると <tt>$01</tt> となりキャリービットが立ちます。キャリーが立ったなら、上位バイトもインクリメントすべきだと分かります。"
+ "ドイツ語とスペイン語はコントリビューターにより検証済みです。その他の言語はAI支援の下書きであり、人による検証が必要です。"
+ "画面切り替え時にゲームが自動一時停止するようになりました"
+ "ゲームパッドのキーが押されました:"
+ "GNOME"
+ "GNOME"
+ "完全コメント付きのスネークゲーム"
+ "全メモリ ($0000-$FFFF)"
+ "ラベルを %1$d 件見つけました。"
+ "ラベルを %1$d 件見つけました。"
+ "Linux 向けには AppImage も用意しました。ファイルは1つだけ、インストールは不要で、パッケージを提供していないディストリビューションでも使えます。"
+ "フォント"
+ "システムのスタイルに従う"
+ "PostmarketOS のビルドエラーを修正し、モバイル互換性を向上"
+ "学習セクションの戻るボタンが、サブページが開かれていない状態でもデスクトップモードおよびタブレットモードで常に表示されていた問題を修正しました。"
+ "まず <tt>readkeys</tt> が方向キー(W/A/S/D)の入力を確認し、押されていれば進行方向を設定します。続いて <tt>checkCollision</tt> が自己衝突やりんごとの衝突を確認します。<tt>updateSnake</tt> は方向に基づいて内部表現を更新し、その後りんごとスネークを描画します。最後に <tt>spinWheels</tt> が処理に遅延を入れて、ゲームが速過ぎないようにします。スネークが壁か自身に衝突するまでゲームは続きます。"
+ "まず、値<tt>$08</tt>を<tt>X</tt>レジスタにロードします。次の行はラベルです。ラベルはプログラム内の特定のポイントをマークするだけで、後でそれらに戻ることができます。ラベルの後で<tt>X</tt>をデクリメントし、<tt>$0200</tt>(左上ピクセル)に格納してから、値<tt>$03</tt>と比較します。<a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a>は<tt>X</tt>レジスタの値と別の値を比較します。2つの値が等しい場合、<tt>Z</tt>フラグが<tt>1</tt>にセットされ、そうでない場合は<tt>0</tt>にセットされます。"
+ "1 行目: <tt>$0200</tt>-<tt>$021F</tt>、2 行目: <tt>$0220</tt>-<tt>$023F</tt>、以降同様。"
+ "6502アセンブリを学ぶ for GNOME の初期リリース"
+ "最後に、バイト <tt>$03</tt> にはスネークの現在の長さがメモリ上のバイト数で入っています (長さ 4 は 2 ピクセルを意味します)。"
+ "6502の例についての情報を記入して、コミュニティと共有してください"
+ "ファイル「%1$s」には未保存の変更があります"
+ "クリップボードへのコピーに失敗しました"
+ "練習問題"
+ "練習"
+ "連続実行の代わりに1命令ずつ実行します"
+ "例"
+ "例がレビュー用に送信されました"
+ "簡易版とはいえ、コード量はこれまでの例より大幅に増えます。ゲームの様々な要素のために複数のメモリアドレスをまとめて管理する必要があります。従来どおり手作業で管理することもできますが、規模が大きくなると煩雑で見落としやすい不具合の原因になります。そこで、単純作業はアセンブラに任せることにします。"
+ "偶数・奇数"
+ "この知識があれば、命令 <tt>LDA #$01</tt> が 16進の <tt>$01</tt> をレジスタ <tt>A</tt> にロードすることが分かるはずです。レジスタの詳細は次の節で説明します。"
+ "16進モニターのアドレス範囲入力を改善し、値の編集を容易に"
+ "アプリの見た目とアクセシビリティを改善"
+ "ステッパーモードを有効化"
+ "デバッガーを有効化"
+ "各セクション (<tt>upKey</tt>、<tt>rightKey</tt> など) は、まず現在の方向が新しい方向と正反対かを確認します。ここで少し寄り道が必要です。"
+ "完了"
+ "表示の構成"
+ "表示メモリ ($0200-$05FF)"
+ "クラシックなコンピューターやゲーム機のプログラミングの世界へ!6502 アセンブリ言語を学びましょう。これは NES、Commodore 64、Apple II などを動かしたコードです。"
+ "破棄"
+ "逆アセンブルを生成しました。"
+ "逆アセンブル"
+ "無効にするとパフォーマンスが向上します"
+ "Dino Run"
+ "説明"
+ "デシマルフラグ: 算術演算をBCD (十進化) モードにします。セット時は ADC/SBC が値を2進ではなく0〜9の十進として扱います。金額計算などの十進演算で使用します。"
+ "デバッガーは表示時のみ更新されるようになり、不要な処理が減りました"
+ "デバッガー"
+ "リアルタイム検査ツールでプログラムをデバッグ"
+ "デバッグ設定"
+ "デバッグ"
+ "ダークスタイル"
+ "ゲームを作る"
+ "エディターにコピー"
+ "クリップボードにコピー"
+ "クリップボードにコピーしました"
+ "続行"
+ "確認"
+ "よく使う命令"
+ "コメント付きスネークゲーム"
+ "カラーパレット"
+ "コードエディターと仮想ゲームコンソール"
+ "コードをエディターにコピーしました"
+ "コードを正常にアセンブルしました (%1$d バイト)。"
+ "コード"
+ "右下隅 (メモリアドレス <tt>$05ff</tt>) に描画されるよう、いずれかのピクセルを変更してみましょう。"
+ "キャリーフラグ: 加算でキャリーが発生するとセット、減算で借りが必要な場合はクリア。多バイト演算やシフト/ローテート(BCS/BCC)に使用します。"
+ "キャンセル"
+ "送信することで、あなたの例が <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a> の下でライセンスされることに同意します。"
+ "パドルとボールでブロックを崩しましょう。"
+ "ブレークフラグ: BRK(ブレーク)命令実行時にセット。ソフトウェア割り込み(BRK)とハードウェア割り込みの区別に用いられ、割り込みサービスルーチンで発生源の特定に役立ちます。"
+ "分岐"
+ "青"
+ "ゲーム状態がピクセル位置として格納されているため、ゲームのレンダリングは非常に簡単です。最初のサブルーチン<tt>drawApple</tt>は極めて単純です。<tt>Y</tt>を0に設定し、乱数の色をアキュムレータにロードしてから、その値を<tt>($00),y</tt>に格納します。<tt>$00</tt>はりんごの位置が格納されている場所なので、<tt>($00),y</tt>はこのメモリアドレスを間接参照します。詳細については<a href=\"#addressing\">アドレッシングモード</a>の「間接インデックス」のセクションを参照してください。"
+ "戻る"
+ "著者"
+ "低レベルではこのサブルーチンはやや複雑です。まず長さを <tt>X</tt> にロードしてデクリメントします。以下はスネークの初期メモリです。"
+ "アセンブリファイル"
+ "アセンブリ"
+ "コードをアセンブル中…"
+ "アセンブルに成功しました"
+ "次のコードをアセンブルし、<b>デバッグ</b>ビューを開いて<b>ヘックスダンプ</b>でアセンブル結果を確認しましょう。"
+ "コードをアセンブルし、<b>デバッグ</b>ビューを開いて<tt>A</tt>と<tt>X</tt>レジスタを観察しながらコードをステップ実行します。<tt>ADC #$c4</tt>の行で少し奇妙なことが起こります。<tt>$c0</tt>に<tt>$c4</tt>を足すと<tt>$184</tt>になりそうですが、このプロセッサは結果を<tt>$84</tt>とします。なぜでしょう?"
+ "コードをアセンブルし、<b>ステップ実行</b>を使ってこれら3つの命令を順に実行します。デバッグビューの<b>16進モニター</b>はメモリの一部を表示し、プログラムの実行を可視化するのに役立ちます。<tt>STA $01</tt>は<tt>A</tt>レジスタの値をメモリアドレス<tt>$01</tt>に保存し、<tt>ADC $01</tt>はメモリアドレス<tt>$01</tt>に格納された値を<tt>A</tt>レジスタに加算します。<tt>$80 + $80</tt>は<tt>$100</tt>になるはずですが、これは1バイトを超えるため、<tt>A</tt>レジスタは<tt>$00</tt>になり、キャリーフラグがセットされます。さらにゼロフラグもセットされます。結果が0になるすべての命令でゼロフラグがセットされます。"
+ "アセンブルに失敗しました"
+ "アセンブル"
+ "前述のとおり、4つの方向は内部的には 1, 2, 4, 8 で表されます。いずれも 2 の冪なので、<tt>1</tt> がひとつだけ立った2進数になります:"
+ "これらの横帯の中で動く限りは簡単です。右へは下位バイトをインクリメント (例: <tt>$0200</tt> → <tt>$0201</tt>)、下へは <tt>$20</tt> を加算 (例: <tt>$0200</tt> → <tt>$0220</tt>)。左と上は逆方向です。"
+ "いつものように、このリリースには多くの小さな修正と改善が含まれています。"
+ "アーキテクチャを強化し、GNOME・Web・Android 間のコード共有を改善"
+ "外観設定"
+ "外観"
+ "6502アセンブリ言語 (および本書) では、<tt>$</tt>で始まる数値は16進数 (hex) 形式です。16進数に不慣れな場合は、<a href=\"https://ja.wikipedia.org/wiki/%1$E5%%8D%%81%2$E5%%85%3$AD%4$E9%%80%%B2%5$E6%%B3%%95\">Wikipediaの記事</a>を読むことをお勧めします。<tt>#</tt>で始まるものはリテラル数値 (即値) です。それ以外の数値はメモリアドレスを指します。"
+ "ここで重要なのは <tt>ADC #$01</tt> と <tt>ADC $01</tt> の違いです。前者は値 <tt>$01</tt> を <tt>A</tt> レジスタに加算し、後者はメモリアドレス <tt>$01</tt> にある値を <tt>A</tt> に加算します。"
+ "これも有用: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "もう少しです!"
+ "絶対アドレッシングをサポートするすべての命令 (ジャンプ命令を除く) は、1バイトのアドレスも使用できます。このアドレッシング方式は「ゼロページ」と呼ばれます。メモリの最初のページ (最初の256バイト) のみにアクセスできます。これは1バイトのみをルックアップする必要があるため高速で、アセンブルされたコードでもより少ないスペースを占めます。"
+ "すべてのファイル"
+ "この後、値 <tt>2</tt> をアキュムレータに加算し、最終的に 2〜5 の範囲の乱数を作ります。"
+ "最初の注釈ブロック (行頭がセミコロン) に続いて、最初の2行は次のとおりです:"
+ "衝突判定の後、スネークの位置を更新します。高レベルの流れは次のとおりです。① 胴体の各バイトペアをメモリ上で1つ上にずらす。② 現在の方向に従って頭を更新する。③ 頭が範囲外なら衝突として処理する。以下の ASCII 図で説明します。簡単のため各括弧は2バイトではなく x,y 座標の組を表します。"
+ "各方向への移動後、頭部が範囲外になるかどうかを確認する必要があります。各方向で処理方法が異なります。左右方向では、頭部が実際に「折り返し」していないかを確認できます。<tt>$021f</tt>から右に移動して最下位バイトをインクリメントすると<tt>$0220</tt>になりますが、これは実際には1行目の最後のピクセルから2行目の最初のピクセルへのジャンプです。したがって、右に移動するたびに、新しい最下位バイトが<tt>$20</tt>の倍数かどうかを確認する必要があります。これはマスク<tt>$1f</tt>に対するビットチェックで行います。以下の図が、下位5ビットをマスクすることで数値が<tt>$20</tt>の倍数かどうかを判別できることを示してくれるでしょう。"
+ "Adwaita"
+ "アドレッシングモード"
+ "アドレッシングモード"
+ "アドレス %1$s - 不明なオペコード"
+ "追加のボタン入力も利用できます。A ボタン (Enter/Return、ASCII <tt>$0D</tt>) と B ボタン (スペース、ASCII <tt>$20</tt>) です。ゲームにより多くの操作性を加えられます。方向操作は WASD と矢印キーのどちらでも同様に使えます。"
+ "ヘルプ機能を追加し、初心者のコード編集を支援"
+ "ファイル管理を追加し、プログラムの保存と読み込みに対応"
+ "ピクセルを増やす指令をさらに追加してみましょう。"
+ "アキュムレータ: 計算の主レジスタ"
+ "アクセント: 黄色"
+ "アクセント: ティール"
+ "アクセント: スレート"
+ "アクセント: 赤"
+ "アクセント: 紫"
+ "アクセント: ピンク"
+ "アクセント: オレンジ"
+ "アクセント: 緑"
+ "アクセント: 青"
+ "アクセントカラー"
+ "絶対: <tt>$c000</tt>"
+ "絶対 (X/Y): <tt>$c000,X</tt> と <tt>$c000,Y</tt>"
+ "6502アセンブリを学ぶについて"
+ "6502命令セットの完全なリストは<a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">こちら</a>と<a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">こちら</a>で参照できます (通常は両方のページを参照します。それぞれ長所と短所があるためです)。これらのページには各命令の引数、使用するレジスタ、設定するフラグの詳細が記載されています。これらはあなたの聖典となるでしょう。"
+ "GitHub issueがブラウザで開かれました。内容を確認して送信し、投稿を完了してください。承認されると、次のリリースに含まれます。\n\n例が大きすぎる場合は、すべての内容がクリップボードにコピーされますので、手動でGitHub issueに貼り付けてください。"
+ "<tt>init</tt> と <tt>loop</tt> はどちらもサブルーチンです。<tt>init</tt> はゲーム状態を初期化し、<tt>loop</tt> はメインのゲームループです。"
+ "<tt>checkSnakeCollision</tt> は胴体の各バイトペアを走査し、頭のペアと一致するかを確認します。一致すればゲームオーバーです。"
+ "<tt>a9</tt> と <tt>c9</tt> は即値アドレッシングの <tt>LDA</tt> と <tt>CMP</tt> のオペコードです。<tt>01</tt> と <tt>02</tt> はそれぞれの引数です。<tt>d0</tt> は <tt>BNE</tt> のオペコードで、その引数は <tt>02</tt> です。これは「次の2バイトを飛ばす」(<tt>85 22</tt>、<tt>STA $22</tt> のアセンブル結果) という意味です。<tt>STA</tt> を1バイトのゼロページではなく2バイトの絶対アドレスを取るように編集してみてください (例: <tt>STA $22</tt> を <tt>STA $2222</tt> に)。再アセンブルしてヘックスダンプを見ると、<tt>BNE</tt> の引数は <tt>03</tt> になります。スキップ対象の命令が3バイトになったためです。"
+ "<tt>X</tt> はピクセルの色、<tt>Y</tt> は現在のピクセル位置を持ちます。最初のループは (<tt>A</tt> レジスタ経由で) 現在の色を描き、その色をスタックへプッシュし、色と位置をインクリメントします。2つ目のループはスタックをポップしてその色を描き、位置をインクリメントします。結果として対称パターンになります。"
+ "<tt>SP</tt> はスタックポインタです。詳細は後述しますが、基本的に1バイトをスタックへプッシュすると減少し、ポップすると増加します。"
+ "<tt>PC</tt> はプログラムカウンタで、プロセッサがプログラムのどの位置にいるかを示します。実行中スクリプトの現在行番号のようなものです。シミュレーターでは <tt>$0600</tt> からコードをアセンブルするため、<tt>PC</tt> は常にそこから始まります。"
+ "<tt>JSR</tt> と <tt>RTS</tt> (サブルーチンへジャンプ/サブルーチンから戻る) はセットで使われることが多い組み合わせです。<tt>JSR</tt> は現在位置から別のコードへジャンプし、<tt>RTS</tt> は元の位置へ戻ります。関数の呼び出しと戻りに相当します。"
+ "<tt>JMP</tt>は無条件ジャンプです。動作を確認するための非常に簡単な例を以下に示します:"
+ "<tt>BCC</tt> と <tt>BCS</tt> (「キャリークリアで分岐」「キャリーセットで分岐」) はキャリーフラグで分岐します。どちらかを使うプログラムを書いてみましょう。"
+ "<b>ゼロページ</b>: <tt>$0000</tt>-<tt>$00FF</tt> (最初の256バイトでアクセスが高速)"
+ "<b>ゼロページ</b> (<tt>$c0</tt>): <tt>$00</tt>-<tt>$FF</tt> のメモリにアクセス"
+ "<b>ゼロページ (X/Y)</b> (<tt>$c0,X</tt>): ゼロページアドレスに X/Y レジスタを加算"
+ "<b>Z</b> (ゼロ): 結果が0のときセット"
+ "<b>X, Y</b>: アドレッシングとカウント用のインデックスレジスタ"
+ "<b>W</b> または上矢印キー (<tt>$77</tt>)"
+ "<b>V</b> (オーバーフロー): 算術で符号付きオーバーフロー時にセット"
+ "<b>スタック</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: レジスタをメモリに格納"
+ "<b>SP</b> (スタックポインタ): 現在のスタック位置を指します (<tt>$FF</tt>から開始)"
+ "<b>SBC は事前にキャリーが必要</b>: 減算前に <tt>C</tt> をセット (逆借位として機能)。SBC 後に <tt>C</tt> がクリアなら借位が発生"
+ "<b>S</b> または下矢印キー (<tt>$73</tt>)"
+ "<b>相対</b> (<tt>label</tt>): 次の命令からの符号付き8ビットオフセット (−128〜+127) で分岐"
+ "<b>Q</b> または Enter/Return キー (<tt>$0D</tt>)"
+ "<b>プログラム領域</b>: <tt>$0600</tt> から開始"
+ "<b>PHA/PLA</b>: アキュムレータをスタックへプッシュ/スタックからプル"
+ "<b>PC</b> (プログラムカウンタ): 次に実行する命令を指す"
+ "<b>N</b> (ネガティブ): 結果のビット7が1のときセット"
+ "<b>LDA/LDX/LDY</b>: レジスタをロード"
+ "<b>JSR/RTS</b>: サブルーチンへジャンプ / サブルーチンから戻る"
+ "<b>JMP</b>: 無条件ジャンプ"
+ "<b>間接</b> (<tt>($c000)</tt>): 指定位置に格納されたアドレスを参照"
+ "<b>間接インデックス</b> (<tt>($c0),Y</tt>): ゼロページアドレスをポインタとして基底を取り、その上に Y を加算"
+ "<b>インデックス間接</b> (<tt>($c0,X)</tt>): ゼロページアドレスに X を加算し、その結果をポインタとして実アドレスを取得"
+ "<b>即値</b> (<tt>#$c0</tt>): 値そのものを使用"
+ "<b>INX/INY/DEX/DEY</b>: レジスタのインクリメント/デクリメント"
+ "<b>I</b> (割り込み禁止): 割り込みが無効のときセット"
+ "<b>E</b> またはスペースキー (<tt>$20</tt>)"
+ "<b>表示メモリ</b>: <tt>$0200</tt>-<tt>$05FF</tt> (画面出力に使用)"
+ "<b>方向操作</b>:"
+ "<b>D</b> または右矢印キー (<tt>$64</tt>)"
+ "<b>D</b> (デシマル): プロセッサが BCD モードのときセット"
+ "<b>比較系</b>: <tt>CMP/CPX/CPY</tt> は結果を保存せず (レジスタ−メモリ) の減算と同様に <tt>N/Z/C</tt> を設定"
+ "<b>C</b> (キャリー): 算術で1バイトを超えたときにセット"
+ "<b>BEQ/BNE/BCC/BCS</b>: 等しい/等しくない/キャリークリア/キャリーセットで分岐"
+ "<b>B</b> (ブレーク): BRK 命令実行時にセット"
+ "<b>アクションボタン</b>:"
+ "<b>絶対</b> (<tt>$c000</tt>): 任意のメモリアドレスにアクセス"
+ "<b>絶対アドレッシング (X/Y)</b> (<tt>$c000,X</tt>): 絶対アドレスに X/Y レジスタを加算"
+ "<b>ADC/SBC</b>: キャリー付き加算/減算"
+ "<b>A</b> または左矢印キー (<tt>$61</tt>)"
+ "<b>A</b> (アキュムレータ): 計算とデータ操作の主レジスタ"
+ "<b><tt>$f</tt></b>: 明るい灰 (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: 明るい青 (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: 明るい緑 (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: 灰 (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: 濃い灰 (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: 明るい赤 (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: 最後に押されたキー (ASCII コード)"
+ "<b><tt>$FE</tt></b>: 乱数生成器 (0〜255 の乱数として読み取れる)"
+ "<b><tt>$9</tt></b>: 茶 (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: オレンジ (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: 黄 (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: 青 (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: 緑 (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: 紫 (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: シアン (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: 赤 (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: 白 (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: スネークの位置データ (頭、胴体、しっぽ)"
+ "<b><tt>$0</tt></b>: 黒 (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: スネークの長さ"
+ "<b><tt>$02</tt></b>: スネークの方向 (1=上, 2=右, 4=下, 8=左)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: りんごの位置"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a>氏が<a href=\"https://gist.github.com/wkjagt/9043907\">このソースコードの完全な注釈付きgist</a>を作成しました。詳細はそちらを参照してください。"
+ "6502アセンブリ言語には複数の分岐命令があり、これらはすべて特定のフラグの状態に基づいて分岐します。この例では<tt>BNE</tt> (「等しくない場合に分岐」) を見ていきます。"
+ "6502 スタックが一杯です!折り返します…"
+ "6502 スタックが空になりました!折り返します…"
+ "(実際のところ、6502プロセッサは現在も<a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a>によって製造されており、<a href=\"https://www.mouser.co.uk/c/?q=65C02\">趣味の開発者向けに販売</a>されているという確実な情報があります。つまり6502は明らかに<i>死語ではない</i>のです!誰が知っていたでしょう?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-nl/strings.xml b/packages/app-android/data/Android/src/main/res/values-nl/strings.xml
new file mode 100644
index 00000000..3a18d030
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-nl/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Learn 6502 Assembly"
+ "Learn 6502 Assembly"
+ "Learn 6502 Assembly"
+ "வணக்கம்! We zijn blij met de Tamil-vertaling, bijgedragen door தமிழ்நேரம். நன்றி!"
+ "dit vertegenwoordigt de indirect geadresseerde geheugenlocaties <tt>$0411</tt>, <tt>$0410</tt> en <tt>$040f</tt> (drie pixels in het midden van het scherm). Ik ham er op door, maar het is belangrijk om volledig te begrijpen hoe indirecte adressering werkt."
+ "wdm‑output"
+ "programmeren"
+ "leren"
+ "door %1$s"
+ "_Voorkeuren"
+ "Nulpagina: <tt>$c0</tt>"
+ "Nulpagina,Y: <tt>$c0,Y</tt>"
+ "Nulpagina,X: <tt>$c0,X</tt>"
+ "Gebruik van de nulpagina"
+ "Nulpagina ($0000-$00FF)"
+ "Zero‑vlag: gezet wanneer het resultaat van een bewerking nul is. Essentieel voor voorwaardelijke vertakkingen – de meeste voorwaardelijke spronginstructies (BEQ, BNE) controleren deze vlag om de programmapath te bepalen op basis van of een waarde nul is."
+ "Je bestand heeft niet‑opgeslagen wijzigingen. Wijzigingen gaan verloren als je ze niet opslaat."
+ "Je hebt <tt>TAX</tt> gezien. Je kunt waarschijnlijk raden wat <tt>TAY</tt>, <tt>TXA</tt> en <tt>TYA</tt> doen, maar schrijf wat code om je aannames te testen."
+ "Je hebt dit open-sourceproject gesteund door de app te kopen. Bedankt!"
+ "Je kunt het scherm zien als vier horizontale stroken van 32 × 8 pixels. Deze stroken mappen naar <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> en <tt>$0500-$05ff</tt>. De eerste pixelrijen zijn <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, enz."
+ "Geel"
+ "Schrijf en bewerk code met een ingebouwde code‑editor"
+ "Bij al deze voorbeelden kan het handig zijn om de <b>Hexmonitor</b> in de Debug-weergave te gebruiken om het geheugen te zien veranderen. Kies een geheugengebied uit de lijst om dat gedeelte te bekijken — bijvoorbeeld <b>Beeldgeheugen ($0200–$05FF)</b> om de schermpixels te bekijken, of <b>Nulpagina ($0000–$00FF)</b> om de eerste 256 bytes te inspecteren."
+ "Bij absolute adressering wordt de volledige geheugenlocatie als argument voor de instructie gebruikt. Bijvoorbeeld:"
+ "Welkom bij de Vietnamese vertaling, volledig bijgedragen door Loc Huynh (hthienloc)."
+ "Welkom bij de Poolse vertaling, aanvankelijk bijgedragen door Micro Wave. Dziękujemy!"
+ "We hebben al kort naar de processorstatus gekeken (het deel met <tt>A</tt>, <tt>PC</tt> enz.), maar wat betekent het allemaal?"
+ "We hebben een nieuwe sectie Voorbeelden toegevoegd aan het tabblad Leren, waar je volledig geannoteerde 6502-programma\'s direct in de app kunt verkennen en uitvoeren. Begin met ons Snake-spelvoorbeeld en zie hoe die pixels tot leven komen!"
+ "Waarden <tt>$00</tt>-<tt>$0F</tt> vertegenwoordigen 16 verschillende kleuren (<tt>$00</tt>=zwart, <tt>$01</tt>=wit)"
+ "Aangepaste primaire kleur gebruiken"
+ "Aangepaste accentkleur gebruiken"
+ "De spelstatus bijwerken"
+ "Niet‑opgeslagen wijzigingen"
+ "In tegenstelling tot zero page,Y kan absolute,Y niet met <tt>STX</tt> worden gebruikt maar wel met <tt>LDA</tt> en <tt>STA</tt>."
+ "Onder de motorkap: bijgewerkt naar TypeScript 6, Vite 8 en andere afhankelijkheidsupdates voor betere prestaties en stabiliteit."
+ "Kan code niet verplaatsen buiten 64k geheugen"
+ "Kan opgegeven adres/label niet vinden/parseren"
+ "Twee stack‑instructies zijn <tt>PHA</tt> en <tt>PLA</tt>, \"push accumulator\" en \"pull accumulator\". Hieronder een voorbeeld waarin beide voorkomen."
+ "Twee nieuwe voorbeeldprogramma\'s, en ze komen allebei van jullie: Dino Run van Jacob en Line Buster 6502 van edit12. Het zijn de eerste voorbeelden die via de deelknop zijn ingestuurd, en we ontvangen er graag meer."
+ "Tutorial <sub>door <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, gelicenseerd onder CC BY 4.0</sub>"
+ "Tutorial"
+ "Probeer codefragmenten te schrijven die elk van de 6502‑adresseringsmodi gebruiken. Onthoud: je kunt de <b>Hexmonitor</b> in de Debug-weergave gebruiken om een geheugensectie te bekijken."
+ "Probeer voorbeeldprogramma\'s voor de 6502-microprocessor."
+ "Probeer voorbeeldprogramma\'s"
+ "Probeer de kleur van de drie pixels te veranderen."
+ "Zijbalk wisselen"
+ "Om te testen of de richting <tt>1</tt>, <tt>2</tt>, <tt>4</tt> of <tt>8</tt> is, verschuift de code steeds naar rechts totdat carry is gezet. Eén <tt>LSR</tt> betekent \"omhoog\", twee betekent \"rechts\", enzovoort."
+ "Titel"
+ "Deze release brengt levendige handheld-geïnspireerde thema\'s met aanpasbare kleuren. We hebben adaptieve tablet- en desktop-layouts geïntroduceerd die alles in beeld houden, perfect voor die marathon-codingsessies bij het leren ontwikkelen van retro-games in assembly. Grote dank aan onze nieuwe bijdrager @mmartinortiz voor de geweldige desktop-layout-ideeën. Er zijn ook enkele coole technische verbeteringen, zoals TypeScript-striktheid, aangepaste GtkSourceView-stijlschema\'s en verbeterde debugger-besturingen voor soepelere ontwikkeling."
+ "Deze is een beetje vreemd. Het lijkt op een kruising tussen zero page,X en indirect. Je neemt het nulpagina‑adres, telt de waarde van het <tt>X</tt>-register erbij op en gebruikt dat vervolgens om een tweebyte‑adres op te zoeken. Bijvoorbeeld:"
+ "Dit laadt de waarde <tt>$11</tt> in geheugenlocatie <tt>$10</tt>, de waarde <tt>$10</tt> in <tt>$12</tt> en <tt>$0f</tt> in <tt>$14</tt>. Vervolgens wordt de waarde <tt>$04</tt> geladen in <tt>$11</tt>, <tt>$13</tt> en <tt>$15</tt>. Dit leidt tot geheugen zoals dit:"
+ "Hier wordt adressering interessant. In deze modus wordt een nulpagina‑adres gegeven en daarna wordt de waarde van het <tt>X</tt>-register opgeteld. Hier is een voorbeeld:"
+ "Dit is het equivalent van zero page,X, maar kan alleen met <tt>LDX</tt> en <tt>STX</tt> worden gebruikt."
+ "Dit zijn de absolute‑adresseringsvarianten van zero page,X en zero page,Y. Bijvoorbeeld:"
+ "Er is ook een heel praktische reden: retro‑gameontwikkeling. De homebrew‑scene leeft en is gezond—er verschijnen nog steeds <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">nieuwe games voor de NES</a> (sommige zelfs als fysieke cartridges) en voor veel andere klassieke systemen; de NES is slechts een voorbeeld. Zelfs als je doel iets als de SNES is, loont beginnen met 6502: de SNES‑CPU (65C816) is achterwaarts compatibel met de 6502, dus de fundamenten die je hier leert—registers, adresseringsmodi en de kerninstructieset—neem je direct mee."
+ "Waarom dan 6502? Waarom niet een <i>nuttige</i> assembleertaal, zoals <a href=\"https://nl.wikipedia.org/wiki/X86-instructieset\">x86</a>? Ik denk niet dat x86 leren nuttig is. Ik denk niet dat je ooit assembleertaal zult hoeven <i>schrijven</i> in je dagelijkse werk – voor sommigen is dit een academische oefening, iets om je geest en denken te verruimen. 6502 is oorspronkelijk geschreven in een andere tijd, toen de meeste ontwikkelaars rechtstreeks assembly schreven in plaats van in die nieuwmodische hoog‑niveau programmeertalen. Het is dus ontworpen om door mensen geschreven te worden. Modernere assembleertalen zijn bedoeld om door compilers geschreven te worden, laten we het aan hen overlaten. Bovendien is 6502 <i>leuk</i>. Niemand noemde x86 ooit <i>leuk</i>."
+ "De nulpagina van het geheugen wordt gebruikt om een aantal spelstatusvariabelen op te slaan, zoals vermeld in het commentaarblok bovenaan het spel. Alles in <tt>$00</tt>, <tt>$01</tt> en vanaf <tt>$10</tt> is een bytepaar dat een tweebyte geheugenlocatie vertegenwoordigt die via indirecte adressering wordt opgezocht. Deze locaties liggen allemaal tussen <tt>$0200</tt> en <tt>$05ff</tt> – het geheugengebied van de spelconsole. Als <tt>$00</tt> en <tt>$01</tt> bijvoorbeeld de waarden <tt>$01</tt> en <tt>$02</tt> bevatten, verwijzen ze naar de tweede pixel van het scherm (<tt>$0201</tt> – onthoud dat bij indirecte adressering het minst significante byte eerst komt)."
+ "De stack in een 6502‑processor is zoals elke andere stack: waarden worden erop gepusht en eraf gepopt (\"pulled\" in 6502‑termen). De huidige diepte van de stack wordt gemeten door de stackpointer, een speciaal register. De stack bevindt zich in het geheugen tussen <tt>$0100</tt> en <tt>$01ff</tt>. De stackpointer is aanvankelijk <tt>$ff</tt>, wat wijst naar <tt>$01ff</tt>. Wanneer een byte op de stack wordt geplaatst, wordt de stackpointer <tt>$fe</tt> (dus <tt>$01fe</tt>), enzovoort."
+ "De stack"
+ "Het snake-spel uit de tutorial"
+ "Het resultaat van deze subroutine is dat een willekeurige byte in <tt>$00</tt> wordt geladen en een willekeurig getal tussen 2 en 5 in <tt>$01</tt>. Omdat bij indirecte adressering het minst significante byte eerst komt, resulteert dit in een geheugenadres tussen <tt>$0200</tt> en <tt>$05ff</tt>: precies het bereik dat wordt gebruikt om het scherm te tekenen."
+ "De processor weet waarnaar hij moet terugkeren omdat <tt>JSR</tt> vóór de sprong het adres min één van de volgende instructie op de stack zet. <tt>RTS</tt> haalt deze locatie eraf, telt er één bij op en springt naar die locatie. Een voorbeeld:"
+ "Het probleem is dat <tt>$184</tt> te groot is voor één byte (maximaal is <tt>$FF</tt>) en de registers slechts één byte kunnen bevatten. Het is echter prima: de processor is niet dom. Als je goed keek, zag je dat de carry‑vlag na deze operatie op <tt>1</tt> stond. Daaraan herken je het."
+ "Het tegenovergestelde van <tt>BNE</tt> is <tt>BEQ</tt>. Probeer een programma te schrijven dat <tt>BEQ</tt> gebruikt."
+ "Het tegenovergestelde van <tt>ADC</tt> is <tt>SBC</tt> (aftrekken met carry). Schrijf een programma dat deze instructie gebruikt."
+ "Het offline renspel uit de browser, in 6502-assembly"
+ "De volgende subroutine, <tt>generateApplePosition</tt>, zet de applocatie op een willekeurige positie op het scherm. Eerst wordt een willekeurige byte in de accumulator geladen (<tt>$fe</tt> is in deze simulator een willekeurigegetal‑generator). Deze wordt opgeslagen in <tt>$00</tt>. Vervolgens wordt een andere willekeurige byte geladen en met <tt>$03</tt> ge‑<tt>AND</tt>. Dit deel vergt een kleine omweg."
+ "De volgende subroutine, <tt>checkCollision</tt>, verwijst naar <tt>checkAppleCollision</tt> en <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> controleert alleen of de twee bytes met de locatie van de appel overeenkomen met de twee bytes met de locatie van de kop. Zo ja, dan wordt de lengte verhoogd en een nieuwe appelpositie gegenereerd."
+ "De volgende regel, <tt>BNE decrement</tt>, laat de uitvoering naar het label decrement springen als de <tt>Z</tt>-vlag <tt>0</tt> is (wat betekent dat de twee waarden in de <tt>CPX</tt>-vergelijking niet gelijk waren); anders doet het niets en slaan we <tt>X</tt> op naar <tt>$0201</tt> en eindigen het programma."
+ "Het volgende deel werkt de kop van de slang bij afhankelijk van de richting. Dit is waarschijnlijk het meest complexe deel van de code en hangt volledig af van hoe geheugenlocaties op het scherm worden afgebeeld; laten we dat in meer detail bekijken."
+ "De lengte wordt geïnitialiseerd op <tt>4</tt>, dus <tt>X</tt> begint als <tt>3</tt>. <tt>LDA $10,x</tt> laadt de waarde van <tt>$13</tt> in <tt>A</tt>, vervolgens slaat <tt>STA $12,x</tt> deze waarde op in <tt>$15</tt>. <tt>X</tt> wordt verlaagd en we herhalen. Nu is <tt>X</tt> <tt>2</tt>, dus we laden <tt>$12</tt> en slaan dit op in <tt>$14</tt>. Dit herhaalt zolang <tt>X</tt> positief is (<tt>BPL</tt> betekent \"vertak als positief\")."
+ "De laatste subroutine, <tt>spinWheels</tt>, is er alleen omdat het spel anders te snel zou lopen. <tt>spinWheels</tt> telt <tt>X</tt> terug vanaf nul totdat het weer nul is. De eerste <tt>dex</tt> rolt rond, waardoor <tt>X</tt> <tt>#$ff</tt> wordt."
+ "Het laatste gedeelte toont de processorvlaggen. Elke vlag is één bit, dus alle zeven vlaggen passen in één byte. De vlaggen worden door de processor gezet om informatie te geven over de vorige instructie. Later meer. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lees hier meer over de registers en vlaggen</a>."
+ "De hexwaarde <tt>$03</tt> wordt binair weergegeven als <tt>00000011</tt>. De opcode <tt>AND</tt> voert een bitgewijze AND uit van het argument met de accumulator. Als de accumulator bijvoorbeeld de binaire waarde <tt>10101010</tt> bevat, dan is het resultaat van <tt>AND</tt> met <tt>00000011</tt> <tt>00000010</tt>."
+ "De hex zou er ongeveer zo uit moeten zien:"
+ "De game‑lus"
+ "De eerste twee bytes bevatten de locatie van de appel. Dit wordt elke keer bijgewerkt wanneer de slang de appel eet. Byte <tt>$02</tt> bevat de huidige richting. <tt>1</tt> is omhoog, <tt>2</tt> rechts, <tt>4</tt> omlaag en <tt>8</tt> links. De reden achter deze getallen wordt later duidelijk."
+ "De eerste subroutine, <tt>readKeys</tt>, accepteert de gebruikersinvoer. De geheugenlocatie <tt>$ff</tt> bevat in deze simulator de ASCII‑code van de meest recente toetsaanslag. De waarde wordt in de accumulator geladen en vervolgens vergeleken met <tt>$77</tt> (hex voor W), <tt>$64</tt> (D), <tt>$73</tt> (S) en <tt>$61</tt> (A). Als een van deze vergelijkingen slaagt, vertakt het programma naar het juiste gedeelte."
+ "De eerste regel toont de registers <tt>A</tt>, <tt>X</tt> en <tt>Y</tt> (<tt>A</tt> wordt vaak de \"accumulator\" genoemd). Elk register bevat één byte. De meeste bewerkingen werken op de inhoud van deze registers."
+ "De eerste instructie laat de uitvoering springen naar het label <tt>init</tt>. Deze zet <tt>X</tt> en keert dan terug naar de volgende instructie, <tt>JSR loop</tt>. Dat springt naar het label <tt>loop</tt>, dat <tt>X</tt> verhoogt totdat het gelijk is aan <tt>$05</tt>. Daarna keren we terug naar de volgende instructie, <tt>JSR end</tt>, die naar het einde van het bestand springt. Dit laat zien hoe <tt>JSR</tt> en <tt>RTS</tt> samen kunnen worden gebruikt om modulaire code te maken."
+ "Het effect hiervan is dat de twee minst significante bits van de accumulator worden gemaskeerd en de overige op nul worden gezet. Dit zet een getal in het bereik 0–255 om naar een getal in het bereik 0–3."
+ "Het onderstaande codeblok bevat de volledige broncode van het spel. In de volgende secties leg ik uit hoe het werkt."
+ "Het zwarte scherm van de spelconsole zou nu drie gekleurde \"pixels\" linksboven moeten tonen."
+ "De app is ontworpen voor het GNOME-interfacelettertype. Op andere systemen wordt de app getekend met het lettertype van dat systeem, dat meestal kleiner is."
+ "Het Y‑indexregister lijkt op X en heeft geen speciale functies. Wordt vaak gebruikt voor geïndexeerde adressering en gegevensverplaatsing."
+ "Het X‑indexregister wordt gebruikt voor geïndexeerde adresseringsmodi en telbewerkingen. Het kan lus‑tellers en array‑indices bevatten en is essentieel om geheugenlocaties relatief tot een basisadres te benaderen met X als offset. Speciaal: TSX/TXS zet X naar/van de stackpointer."
+ "De Stackpointer beheert de aanroepstack voor subroutines en interrupts. Hij start op $FF (bovenkant van de stack) en groeit naar beneden. Gebruikt voor PUSH/PULL‑operaties, JSR/RTS‑aanroepen en afhandeling van interrupts. Kritisch voor geneste functieaanroepen."
+ "De Programmateller bevat het geheugenadres van de volgende uit te voeren instructie. Hij wordt automatisch verhoogd na elke instructie en kan worden gewijzigd door sprongen, vertakkingen, aanroepen en returns. Essentieel voor programmaprocesbesturing en debugging."
+ "De Accumulator (A) is het primaire register voor rekenkundige en logische bewerkingen. Alle basisbewerkingen zoals ADD, SUBTRACT, AND, OR, enz. gebruiken dit register. Het is het meest gebruikte register in 6502‑assembleerprogrammering."
+ "De subroutine <tt>loop</tt> roept zelf achtereenvolgens een aantal subroutines aan, voordat zij terug naar zichzelf springt:"
+ "De subroutine <tt>init</tt> verwijst naar twee subroutines, <tt>initSnake</tt> en <tt>generateApplePosition</tt>. <tt>initSnake</tt> stelt de richting en lengte van de slang in en laadt vervolgens de initiële geheugenlocaties van de slangkop en het lichaam. Het bytepaar op <tt>$10</tt> bevat de schermlocatie van de kop, het paar op <tt>$12</tt> bevat de locatie van het enkele lichaamssegment en <tt>$14</tt> bevat de locatie van de staart (de staart is het laatste segment van het lichaam en wordt zwart getekend om de slang te laten bewegen). Dit gebeurt in de volgende code:"
+ "De opcode <tt>BIT</tt> lijkt op <tt>AND</tt>, maar de berekening wordt alleen gebruikt om de zero‑vlag te zetten – het resultaat zelf wordt weggegooid. De zero‑vlag wordt alleen gezet als het resultaat van AND tussen de accumulator en het argument nul is. Bij machten van twee wordt de zero‑vlag alleen gezet als de twee getallen niet hetzelfde zijn. Bijvoorbeeld: <tt>0001 AND 0001</tt> is niet nul, maar <tt>0001 AND 0010</tt> is nul."
+ "De 6502 gebruikt een 16‑bit adresbus, wat betekent dat er 65536 bytes geheugen beschikbaar zijn voor de processor. Onthoud dat een byte wordt weergegeven door twee hex‑tekens, dus geheugenlocaties worden doorgaans weergegeven als <tt>$0000 - $ffff</tt>. Er zijn verschillende manieren om naar deze geheugenlocaties te verwijzen, zoals hieronder beschreven."
+ "Bedankt voor het gebruik van open-sourcesoftware."
+ "Test bit 0 van A met LSR en BCC en zet 1 of 0 in A als resultaat"
+ "Test je creaties op een virtuele spelconsole"
+ "Tervetuloa! We verwelkomen met plezier de Finse vertaling, vriendelijk bijgedragen door Jiri Grönroos. Kiitos!"
+ "Teal"
+ "Systeemlettertype, GNOME-grootte"
+ "Systeemstandaard"
+ "Syntaxisfout regel %1$d: %2$s"
+ "Supporter"
+ "Steunen"
+ "Indienen"
+ "Stijl"
+ "Gestopt"
+ "Stap-voor-stap handleiding voor 6502 assembly"
+ "Stap"
+ "Statusvlaggen"
+ "Stackpointer: Wijst naar stackpositie"
+ "Stackvoorbeeld"
+ "Stack ($0100-$01FF)"
+ "Speciale geheugenlocaties (in simulator)"
+ "Bron-URL"
+ "Sommige instructies werken niet met geheugenlocaties (bijv. <tt>INX</tt> – verhoog het <tt>X</tt>-register). Deze hebben impliciete adressering: het argument wordt door de instructie geïmpliceerd."
+ "Waarom zou je 6502 willen leren? Het is toch een dode taal? Nou, dat geldt ook voor Latijn. En dat wordt nog steeds onderwezen. <a href=\"https://nl.wikipedia.org/wiki/Quod_erat_demonstrandum\">Q.E.D.</a>"
+ "Wat doet dit programma eigenlijk? Laten we het stap voor stap doorlopen. Klik op <b>Resetten</b> en gebruik vervolgens <b>Stap</b> om het programma instructie voor instructie uit te voeren. De <b>Debug</b>-weergave toont de registers en het geheugen — het is een apart tabblad in een klein venster en het paneel onder de spelconsole in een breed venster. Klik één keer op <b>Stap</b> en je ziet in de Debug-weergave dat <tt>A=</tt> veranderde van <tt>$00</tt> naar <tt>$01</tt>, en <tt>PC=</tt> van <tt>$0600</tt> naar <tt>$0602</tt>."
+ "De instructie <tt>STA $0200</tt> slaat de waarde van het <tt>A</tt>-register op in geheugenlocatie <tt>$0200</tt>. Klik nog vier keer op <b>Stap</b> om de rest van de instructies uit te voeren en houd het <tt>A</tt>-register in de gaten terwijl het verandert."
+ "Kijkend naar <tt>upKey</tt>: als de huidige richting omlaag (4) is, zal de bittest nul zijn. <tt>BNE</tt> betekent \"vertak als de zero‑vlag niet gezet is\", dus in dit geval vertakken we naar <tt>illegalMove</tt>, dat simpelweg uit de subroutine terugkeert. Anders wordt de nieuwe richting (hier 1) opgeslagen op de juiste geheugenlocatie."
+ "Dus, laten we erin duiken! Deze applicatie bevat een <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler en Simulator</a> die ik voor deze interactieve tutorial heb aangepast. Klik op de knop <b>Kopiëren</b> in het codeblok hieronder om de voorbeeldcode naar de editor te kopiëren. Gebruik vervolgens <b>Assembleren</b> om de code te assembleren en <b>Uitvoeren</b> om hem uit te voeren. Je vindt deze acties als knoppen of in het menu."
+ "Tot nu toe kunnen we alleen basisprogramma\'s schrijven zonder vertakkingslogica. Laten we dat veranderen."
+ "Geheugengebruik van Snake‑spel"
+ "Snake‑spelgegevens ($00-$15)"
+ "Snake-spel"
+ "Leisteen"
+ "Simulatorfout"
+ "Simulator"
+ "Gedeelde codevoorbeelden bevatten nu CC-BY-4.0 licentie-informatie, waardoor duidelijk wordt hoe de gemeenschap uw bijdragen kan gebruiken en daarop kan voortbouwen."
+ "Deel je voorbeeld"
+ "Voorbeeld delen"
+ "Delen"
+ "Shalom! We zijn blij met de Hebreeuwse vertaling, volledig bijgedragen door Menachem (naattxx). Toda raba!"
+ "Alle gekheid op een stokje: inzicht in assembleertaal is waardevol. Assembleertaal is het laagste abstractieniveau in computers – het punt waarop de code nog leesbaar is. Assembleertaal vertaalt direct naar de bytes die door de processor van je computer worden uitgevoerd. Als je begrijpt hoe het werkt, ben je in feite een computer‑<a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magiër</a>."
+ "Selamat datang! We verwelkomen ook de Indonesische vertaling, vriendelijk bijgedragen door Arif Budiman. Terima kasih!"
+ "Scherm komt overeen met geheugenbereik <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Maak kennis met veel nieuwe vertalingen: Frans, Interlingua, Portugees, Portugees (Brazilië), Nederlands, Spaans, Oekraïens, Japans en Vereenvoudigd Chinees"
+ "Opgeslagen als %1$s"
+ "Wijzigingen opslaan?"
+ "Opslaan als..."
+ "Assembly‑bestand opslaan"
+ "Opslaan"
+ "Snake-spel dat draait"
+ "Uitvoeren"
+ "Herschrijf het eerste voorbeeld in deze sectie om het <tt>Y</tt>-register te gebruiken in plaats van het <tt>X</tt>-register."
+ "Bekijk hoe je voorbeeld voor anderen zal verschijnen. Als je op <b>Indienen</b> klikt, wordt er een issue op GitHub aangemaakt. Je moet inloggen met je GitHub-account om de inzending te voltooien."
+ "Hervatten"
+ "Resetten"
+ "Het spel renderen"
+ "Relatief: <tt>$c0</tt> (of label)"
+ "Relatieve adressering wordt gebruikt voor vertakkingsinstructies. Deze instructies nemen één byte, die wordt gebruikt als een offset vanaf de volgende instructie."
+ "Registers en vlaggen"
+ "Registers"
+ "Standaard adresbereik van de hexmonitor verkleind voor betere efficiëntie"
+ "Rood"
+ "De invoer lezen"
+ "Willekeurig/Invoer ($FE-$FF)"
+ "Afsluiten"
+ "Snelle tips"
+ "Paars"
+ "Programmeer vintage spelconsoles"
+ "Programma gepauzeerd"
+ "Programma voltooid. Reset om het programma opnieuw stap voor stap te doorlopen."
+ "Programma voltooid op PC=$%1$s"
+ "Programma voltooid"
+ "Programmaopslag ($0600-$FFFF)"
+ "Programmateller: Wijst naar de volgende instructie"
+ "Processorstatusregister"
+ "Processor‑vlaggen"
+ "Primair: Geel"
+ "Primair: Blauwgroen"
+ "Primair: Leisteen"
+ "Primair: Rood"
+ "Primair: Paars"
+ "Primair: Roze"
+ "Primair: Oranje"
+ "Primair: Groen"
+ "Primair: Blauw"
+ "Primaire kleur"
+ "Vorige"
+ "Bekijk je voorbeeld"
+ "Voorbeeld"
+ "Druk nogmaals op <b>Stap</b> om de tweede instructie uit te voeren. De linkerbovenpixel van de spelconsole zou nu wit moeten zijn. Deze simulator gebruikt de geheugenlocaties <tt>$0200</tt> tot <tt>$05ff</tt> om pixels op het scherm te tekenen. De waarden <tt>$00</tt> tot <tt>$0f</tt> vertegenwoordigen 16 verschillende kleuren (<tt>$00</tt> is zwart en <tt>$01</tt> is wit), dus het opslaan van de waarde <tt>$01</tt> op geheugenlocatie <tt>$0200</tt> tekent een witte pixel in de linkerbovenhoek. Dit is eenvoudiger dan hoe een echte computer video zou weergeven, maar voor nu is het voldoende."
+ "Voorbewerken ..."
+ "Spelen"
+ "Roze"
+ "Perfect voor hobbyisten, studenten en iedereen die nieuwsgierig is hoe computers onder de motorkap echt werken!"
+ "Pauzeren"
+ "Overflow‑vlag: Ingesteld wanneer een rekenkundige bewerking een resultaat produceert dat niet binnen het getekende 8‑bit‑bereik (−128 tot +127) kan worden weergegeven. Gebruikt om fouten in getekende rekenkunde te detecteren."
+ "Algemene structuur"
+ "Branch buiten bereik op regel %1$d (branches zijn beperkt tot −128 tot +127): %2$s"
+ "Ons eerste programma"
+ "Georganiseerd als vier horizontale stroken van 32×8 pixels"
+ "Oranje"
+ "Flatpak‑configuratie geoptimaliseerd door onnodige permissies te verwijderen"
+ "%1$s geopend"
+ "Openen..."
+ "Open source"
+ "Assembly‑bestand openen"
+ "Zodra de waarden door de slang naar beneden zijn verschoven, moeten we bepalen wat we met de kop doen. De richting wordt eerst in <tt>A</tt> geladen. <tt>LSR</tt> betekent \"logical shift right\" ofwel \"schuif alle bits één positie naar rechts\". Het minst significante bit wordt naar de carry‑vlag geschoven, dus als de accumulator <tt>1</tt> is, is die na <tt>LSR</tt> <tt>0</tt>, met de carry‑vlag gezet."
+ "Bij reset (simulator): <tt>P = $30</tt> (bit5 en <tt>B</tt> gezet; <tt>D</tt> en <tt>I</tt> gewist)"
+ "OK"
+ "Laten we al deze kennis nu goed gebruiken en een spel maken! We gaan een heel eenvoudige versie maken van het klassieke spel \'Snake\'."
+ "Geen programmeerervaring vereist. Begin met interactieve lessen en bouw je vaardigheden stap voor stap op."
+ "Geen code om uit te voeren."
+ "Geen adres of label opgegeven"
+ "Daarna komt <tt>drawSnake</tt>. Dit is ook vrij eenvoudig – we verwijderen eerst de staart en tekenen dan de kop. <tt>X</tt> wordt ingesteld op de lengte van de slang, zodat we naar de juiste pixel kunnen indexeren, en we zetten <tt>A</tt> op nul en schrijven met de geïndexeerd‑indirecte adresseringsmodus. Vervolgens herladen we <tt>X</tt> om naar de kop te indexeren, zetten <tt>A</tt> op één en slaan het op bij <tt>($10,x)</tt>. <tt>$10</tt> slaat de tweebyte‑locatie van de kop op, dus dit tekent een witte pixel op de huidige koppositie. Omdat alleen de kop en de staart van de slang bewegen, is dit genoeg om de slang te laten bewegen."
+ "Nieuwe tools om je code te onderzoeken, inclusief disassembler en snel schakelbare geheugenviewer"
+ "Negatief‑vlag: Ingesteld wanneer het meest significante bit (bit 7) van het resultaat 1 is. Gebruikt voor vergelijkingen van getekende getallen en geeft aan of een waarde negatief is in twee‑aanvulling representatie."
+ "Bijna alle games hebben in de kern een game‑lus. Alle game‑lussen hebben dezelfde basisvorm: gebruikersinvoer accepteren, de spelstatus bijwerken en de spelstatus renderen. Deze lus is niet anders."
+ "Berichten"
+ "Geheugenlocaties <tt>$01</tt> en <tt>$02</tt> bevatten respectievelijk de waarden <tt>$05</tt> en <tt>$07</tt>. Zie <tt>($00,X)</tt> als <tt>($00 + X)</tt>. In dit geval is <tt>X</tt> <tt>$01</tt>, dus dit vereenvoudigt naar <tt>($01)</tt>. Vanaf hier verloopt het zoals standaard indirecte adressering – de twee bytes op <tt>$01</tt> en <tt>$02</tt> (<tt>$05</tt> en <tt>$07</tt>) worden opgezocht om het adres <tt>$0705</tt> te vormen. Dit is het adres waarin het <tt>Y</tt>-register in de vorige instructie werd opgeslagen, dus het <tt>A</tt>-register krijgt dezelfde waarde als <tt>Y</tt>, zij het via een veel kronkeliger route. Dit zie je niet vaak."
+ "Geheugenkaart"
+ "Veel kleine bugs verholpen om de algehele bruikbaarheid te verbeteren"
+ "Grote UI‑verbeteringen met een moderne Floating Action Button met dynamische toestanden voor intuïtieve programmacontrole en een volledig herontworpen debugger‑widget met moderne Adwaita‑componenten."
+ "Line Buster 6502"
+ "Lichte stijl"
+ "Leren aan de hand van voorbeelden is nog nooit zo eenvoudig geweest. Duik in werkende code, pas het aan, maak het kapot, repareer het weer - zo leerden de beste programmeurs vroeger!"
+ "Leer hoe je de stack gebruikt met PHA- en PLA-instructies"
+ "Leer hoe je de 6502‑microprocessor programmeert."
+ "Leer over computerhistorie tijdens het programmeren"
+ "Learn 6502 draait nu ook op Windows en macOS. Als je het aan iemand wilde laten zien die geen Linux gebruikt, kan dat nu."
+ "Learn 6502 draait nu op GNOME 50! Met dank aan Sabri Ünal voor het bijdragen van de runtime-update."
+ "Learn 6502 Assembly"
+ "Leren"
+ "Labels‑fout"
+ "Label al gedefinieerd op regel %1$d: %2$s"
+ "Label %1$s wordt al gebruikt als symbool; hernoem er een van beiden"
+ "Springen lijkt op vertakken met twee belangrijke verschillen. Ten eerste worden sprongen niet voorwaardelijk uitgevoerd en ten tweede nemen ze een tweebyte absoluut adres. Voor kleine programma\'s is dit tweede detail niet zo belangrijk, omdat je meestal labels gebruikt en de assembler de juiste geheugenlocatie uit het label afleidt. Voor grotere programma\'s is springen echter de enige manier om van het ene codegedeelte naar het andere te gaan."
+ "Springen"
+ "JSR/RTS"
+ "JMP"
+ "Inleiding"
+ "Interrupt‑vlag: Wanneer gezet, maskeert (deactiveert) alle maskeerbare interrupts (IRQ). Alleen niet‑maskeerbare interrupts (NMI) kunnen nog optreden. Gebruikt voor kritieke code‑secties die niet mogen worden onderbroken."
+ "Interfacelettertype"
+ "Interactieve tutorials begeleiden je van beginner tot gevorderd"
+ "Interactieve tutorial"
+ "Instructies in assembleertaal lijken op een kleine set vooraf gedefinieerde functies. Alle instructies nemen nul of één argument. Hier is wat geannoteerde broncode om een paar verschillende instructies te introduceren:"
+ "Instructies"
+ "Initialisatie"
+ "Indirect: <tt>($c000)</tt>"
+ "Indirect geïndexeerd: <tt>($c0),Y</tt>"
+ "Indirect geïndexeerd lijkt op geïndexeerd indirect maar is minder gek. In plaats van het <tt>X</tt>-register aan het adres toe te voegen <i>vóór</i> dereferentie, wordt het nulpagina‑adres gedereferentieerd en wordt het <tt>Y</tt>-register bij het resulterende adres opgeteld."
+ "Indirecte adressering gebruikt een absoluut adres om een ander adres op te zoeken. Het eerste adres geeft het minst significante byte van het adres en de volgende byte geeft het meest significante byte. Dat kan lastig te bevatten zijn, dus hier is een voorbeeld:"
+ "Labels indexeren..."
+ "Geïndexeerd indirect: <tt>($c0,X)</tt>"
+ "Indexregister Y: Gebruikt voor adressering"
+ "Indexregister X: Gebruikt voor adressering"
+ "In deze korte tutorial laat ik je zien hoe je begint met het schrijven van 6502‑assembleertaal. De 6502‑processor was enorm populair in de jaren zeventig en tachtig en dreef beroemde computers aan zoals de <a href=\"https://nl.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://nl.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://nl.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://nl.wikipedia.org/wiki/Apple_II-familie\">Apple II</a> en het <a href=\"https://nl.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender in Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">heeft een 6502‑processor als brein</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Zelfs de Terminator werd in 6502 geprogrammeerd</a>."
+ "In dit voorbeeld bevat <tt>$f0</tt> de waarde <tt>$01</tt> en <tt>$f1</tt> de waarde <tt>$cc</tt>. De instructie <tt>JMP ($f0)</tt> zorgt ervoor dat de processor de twee bytes bij <tt>$f0</tt> en <tt>$f1</tt> (<tt>$01</tt> en <tt>$cc</tt>) opzoekt en samenvoegt tot het adres <tt>$cc01</tt>, dat de nieuwe programmateller wordt. Assembleer en doorloop het bovenstaande programma om te zien wat er gebeurt. Ik ga later in op <tt>JMP</tt> in de sectie <a href=\"#jumping\">Jumping</a>."
+ "In dit geval zoekt <tt>($01)</tt> de twee bytes op bij <tt>$01</tt> en <tt>$02</tt>: <tt>$03</tt> en <tt>$07</tt>. Deze vormen samen het adres <tt>$0703</tt>. De waarde van het <tt>Y</tt>-register wordt bij dit adres opgeteld om het uiteindelijke adres <tt>$0704</tt> te krijgen."
+ "In deze assembler kunnen we beschrijvende constanten (of symbolen) definiëren die getallen vertegenwoordigen. De rest van de code kan vervolgens eenvoudig de constanten gebruiken in plaats van het letterlijke getal, wat meteen duidelijk maakt waar we mee te maken hebben. Je kunt letters, cijfers en underscores gebruiken in een naam."
+ "Typ in de editor <b>de volgende code</b> (niet plakken):"
+ "In assembleertaal gebruik je meestal labels met vertakkingsinstructies. Bij het assembleren wordt dit label echter omgezet in een éénbyte relatieve offset (een aantal bytes om vanaf de volgende instructie achteruit of vooruit te gaan), dus vertakkingsinstructies kunnen alleen ongeveer 256 bytes vooruit en terug. Dat betekent dat ze alleen kunnen worden gebruikt om lokaal door de code te bewegen. Voor grotere sprongen moet je spronginstructies gebruiken."
+ "Prestaties van de spelconsole verbeterd voor soepelere gameplay"
+ "Spelscherm en besturing voor mobiele apparaten verbeterd"
+ "Verbeterde beschrijvingen om niet‑technische gebruikers beter te verwelkomen"
+ "Impliciet"
+ "Onmiddellijk: <tt>#$c0</tt>"
+ "Onmiddellijke adressering werkt niet strikt met geheugenadressen – dit is de modus waarin letterlijke waarden worden gebruikt. <tt>LDX #$01</tt> laadt bijvoorbeeld de waarde <tt>$01</tt> in het <tt>X</tt>-register. Dit is heel anders dan de nulpagina‑instructie <tt>LDX $01</tt>, die de waarde op geheugenlocatie <tt>$01</tt> in het <tt>X</tt>-register laadt."
+ "Als je systeemtaal Chinees is, verschijnt de app weer in het Chinees. Hij viel per ongeluk terug op het Engels."
+ "Als je voorbeeld gebaseerd is op of geïnspireerd door een ander voorbeeld, kun je de bron-URL opgeven."
+ "Spreek je een van de genoemde talen? Help dan de vertalingen te beoordelen of te verbeteren. Je kunt bijdragen via de links in de app, ons vertaalplatform of door een issue te openen."
+ "Als het resultaat van de optelling groter is dan één byte, loopt het adres rond. Bijvoorbeeld:"
+ "IDE"
+ "Ik zal niet diep ingaan op hoe elke richting werkt, maar de bovenstaande uitleg zou genoeg moeten zijn om het met een beetje studie zelf uit te werken."
+ "Verborgen"
+ "Hexdump gegenereerd."
+ "Hexdump"
+ "Hexmonitor"
+ "Hier is een voorbeeld. Let op dat onmiddellijke operanden nog steeds een <tt>#</tt> als prefix hebben."
+ "Hulp"
+ "Hebreeuws is ook onze eerste taal die van rechts naar links wordt geschreven: dankzij het testen en de bijdragen van Menachem ondersteunt de app nu lay-outs van rechts naar links en is ze voorbereid op meer RTL-talen."
+ "Groen"
+ "Goed begin – je hebt het eerste hoofdstuk afgerond!"
+ "Heb je je eigen coole 6502-creatie? Deel het met de gemeenschap! Je kunt nu je codevoorbeelden direct vanuit de app indienen. Druk gewoon op de deelknop en we maken automatisch een GitHub-issue en pull request voor je aan."
+ "Heb je een vet 6502-voorbeeld?\nDeel het met de gemeenschap!"
+ "Tussen secties gaan is ingewikkelder, omdat we ook met het meest significante byte rekening moeten houden. Van <tt>$02e1</tt> naar beneden gaan moet bijvoorbeeld <tt>$0301</tt> opleveren. Gelukkig is dit vrij eenvoudig te bereiken. <tt>$20</tt> optellen bij <tt>$e1</tt> resulteert in <tt>$01</tt> en zet de carry‑bit. Als de carry‑bit was gezet, weten we dat we ook het meest significante byte moeten verhogen."
+ "Duits en Spaans zijn door bijdragers gevalideerd. De overige talen zijn AI‑ondersteunde conceptversies en hebben menselijke validatie nodig."
+ "Games pauzeren nu automatisch bij het wisselen tussen schermen"
+ "Gamepad‑toets ingedrukt:"
+ "GNOME"
+ "GNOME"
+ "Volledig van commentaar voorziene versie van het Snake-spel"
+ "Volledig geheugen ($0000-$FFFF)"
+ "%1$d labels gevonden."
+ "%1$d label gevonden."
+ "Voor Linux is er nu ook een AppImage: één bestand, geen installatie, handig op een distributie waarvoor we geen pakket maken."
+ "Lettertype"
+ "Systeemstijl volgen"
+ "Buildfout op PostmarketOS verholpen, mobiele compatibiliteit verbeterd"
+ "Een probleem verholpen waarbij de terugknop in het leergedeelte altijd zichtbaar was in desktop- en tabletmodus, zelfs wanneer er geen subpagina geopend was."
+ "Eerst controleert <tt>readkeys</tt> of een van de richtings‑toetsen (W, A, S, D) is ingedrukt en stelt, indien zo, de richting van de slang dienovereenkomstig in. Vervolgens controleert <tt>checkCollision</tt> of de slang met zichzelf of de appel is gebotst. <tt>updateSnake</tt> werkt de interne representatie van de slang bij op basis van zijn richting. Daarna worden de appel en de slang getekend. Tot slot zorgt <tt>spinWheels</tt> ervoor dat de processor even bezig blijft, om te voorkomen dat het spel te snel loopt. Zie het als een sleep‑opdracht. Het spel loopt door totdat de slang tegen de muur of tegen zichzelf botst."
+ "Eerst laden we de waarde <tt>$08</tt> in het <tt>X</tt>-register. De volgende regel is een label. Labels markeren gewoon bepaalde punten in een programma zodat we er later naar kunnen terugkeren. Na het label verlagen we <tt>X</tt>, slaan het op naar <tt>$0200</tt> (de linkerbovenpixel) en vergelijken het vervolgens met de waarde <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> vergelijkt de waarde in het <tt>X</tt>-register met een andere waarde. Als de twee waarden gelijk zijn, wordt de <tt>Z</tt>-vlag op <tt>1</tt> gezet, anders op <tt>0</tt>."
+ "Eerste rij: <tt>$0200</tt>-<tt>$021F</tt>, tweede rij: <tt>$0220</tt>-<tt>$023F</tt>, enz."
+ "Eerste release van Learn 6502 Assembly voor GNOME"
+ "Ten slotte bevat byte <tt>$03</tt> de huidige lengte van de slang, uitgedrukt in bytes in het geheugen (dus een lengte van 4 betekent 2 pixels)."
+ "Vul de informatie over je 6502-voorbeeld in om het met de gemeenschap te delen"
+ "Bestand \"%1$s\" heeft niet‑opgeslagen wijzigingen"
+ "Kopiëren naar klembord mislukt"
+ "Oefeningen"
+ "Oefening"
+ "Voer instructies één voor één uit in plaats van continu"
+ "Voorbeelden"
+ "Voorbeeld ingediend ter beoordeling"
+ "Ook al wordt dit een eenvoudige versie, de code zal aanzienlijk groter zijn dan alle vorige voorbeelden. We moeten meerdere geheugenlocaties samen bijhouden voor de verschillende aspecten van het spel. We kunnen het nodige bijhouden nog steeds zelf in het programma doen, zoals eerder, maar op grotere schaal wordt dat snel saai en kan het leiden tot lastig te vinden bugs. In plaats daarvan laten we de assembler nu een deel van het routinewerk voor ons doen."
+ "Even of oneven"
+ "Met die kennis zie je dat de instructie <tt>LDA #$01</tt> de hexwaarde <tt>$01</tt> in register <tt>A</tt> laadt. Ik ga in het volgende deel dieper in op registers."
+ "Adresbereik‑invoer van de hexmonitor verbeterd voor eenvoudiger waardebewerking"
+ "Verbeterde app‑presentatie en toegankelijkheid"
+ "Stapmodus inschakelen"
+ "Debugger inschakelen"
+ "Elk gedeelte (<tt>upKey</tt>, <tt>rightKey</tt>, enz.) controleert eerst of de huidige richting het tegenovergestelde is van de nieuwe richting. Dit vereist nog een kleine omweg."
+ "Klaar"
+ "Beeldindeling"
+ "Beeldgeheugen ($0200-$05FF)"
+ "Ontdek de fascinerende wereld van het programmeren van klassieke computers en spelconsoles! Leer 6502‑assembleertaal – dezelfde code die iconische systemen als de NES, Commodore 64 en Apple II aandreef."
+ "Verwerpen"
+ "Gedisassembleerde code gegenereerd."
+ "Gedisassembleerd"
+ "Uitschakelen om de prestaties te verbeteren"
+ "Dino Run"
+ "Beschrijving"
+ "Decimaal‑vlag: Schakelt Binary Coded Decimal (BCD)‑modus in voor rekenkundige bewerkingen. Wanneer gezet, behandelen ADC/SBC‑instructies waarden als decimale cijfers (0–9) in plaats van binair. Gebruikt voor financiële berekeningen en decimale rekenkunde."
+ "Debugger werkt nu alleen bij wanneer zichtbaar, wat onnodige verwerking vermindert"
+ "Debugger"
+ "Debug je programma\'s met inspectietools in real‑time"
+ "Debug-instellingen"
+ "Debug"
+ "Donkere stijl"
+ "Een spel maken"
+ "Kopiëren naar editor"
+ "Kopiëren naar klembord"
+ "Gekopieerd naar klembord"
+ "Doorgaan"
+ "Bevestigen"
+ "Veelgebruikte instructies"
+ "Snake-spel met Commentaar"
+ "Kleurenpalet"
+ "Code-editor en virtuele spelconsole"
+ "Code naar editor gekopieerd"
+ "Code succesvol geassembleerd, %1$d bytes."
+ "Code"
+ "Verander een van de pixels om te tekenen in de rechterbenedenhoek (geheugenlocatie <tt>$05ff</tt>)."
+ "Carry‑vlag: Ingesteld wanneer optellen een carry‑out produceert; gewist wanneer aftrekken een borrow vereist. Gebruikt voor meerbyte‑rekenwerk en shifts/rotaties (BCS/BCC)."
+ "Annuleren"
+ "Door in te dienen, ga je ermee akkoord dat je voorbeeld onder <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a> wordt gelicentieerd."
+ "Breek de blokken met het batje en de bal."
+ "Break‑vlag: Ingesteld wanneer een BRK‑instructie (Break) wordt uitgevoerd. Gebruikt om software‑interrupts (BRK) van hardware‑interrupts te onderscheiden. Helpt de bron van een interrupt te identificeren in interrupt‑serviceroutines."
+ "Vertakken"
+ "Blauw"
+ "Omdat de spelstatus wordt opgeslagen als pixellocaties, is het renderen van het spel heel eenvoudig. De eerste subroutine, <tt>drawApple</tt>, is extreem simpel. Deze zet <tt>Y</tt> op nul, laadt een willekeurige kleur in de accumulator en slaat deze waarde vervolgens op in <tt>($00),y</tt>. <tt>$00</tt> is waar de positie van de appel is opgeslagen, dus <tt>($00),y</tt> dereferentieert naar deze geheugenlocatie. Lees de sectie \"Indirect geïndexeerd\" in <a href=\"#addressing\">Adresseringsmodi</a> voor meer details."
+ "Terug"
+ "Auteur"
+ "Op laag niveau is deze subroutine iets complexer. Eerst wordt de lengte in het <tt>X</tt>-register geladen, dat vervolgens wordt verlaagd. Het fragment hieronder toont het startgeheugen voor de slang."
+ "Assembly-bestanden"
+ "Assembly"
+ "Code assembleren ..."
+ "Succesvol geassembleerd"
+ "Assembleer de volgende code, open vervolgens de <b>Debug</b>-weergave en bekijk de <b>Hexdump</b> om de geassembleerde code te zien."
+ "Assembleer de code, open vervolgens de <b>Debug</b>-weergave en loop stap voor stap door de code terwijl je de registers <tt>A</tt> en <tt>X</tt> bekijkt. Er gebeurt iets vreemds op de regel <tt>ADC #$c4</tt>. Je zou verwachten dat <tt>$c4</tt> optellen bij <tt>$c0</tt> <tt>$184</tt> oplevert, maar deze processor geeft <tt>$84</tt> als resultaat. Hoe zit dat?"
+ "Assembleer de code en gebruik <b>Stap</b> om deze drie instructies stap voor stap door te lopen. De <b>Hexmonitor</b> in de Debug-weergave toont een gedeelte van het geheugen en kan helpen om de uitvoering van programma\'s te visualiseren. <tt>STA $01</tt> slaat de waarde van het <tt>A</tt>-register op op geheugenlocatie <tt>$01</tt>, en <tt>ADC $01</tt> telt de waarde die is opgeslagen op geheugenlocatie <tt>$01</tt> op bij het <tt>A</tt>-register. <tt>$80 + $80</tt> zou <tt>$100</tt> moeten zijn, maar omdat dit groter is dan één byte, wordt het <tt>A</tt>-register op <tt>$00</tt> gezet en wordt de carry‑vlag gezet. Bovendien wordt de zero‑vlag gezet. De zero‑vlag wordt gezet door alle instructies waarbij het resultaat nul is."
+ "Assembleren mislukt"
+ "Assembleren"
+ "Zoals eerder vermeld, worden de vier richtingen intern weergegeven door de getallen 1, 2, 4 en 8. Elk van deze getallen is een macht van 2 en wordt dus weergegeven door een binair getal met één enkele <tt>1</tt>:"
+ "Zolang je je binnen een van deze horizontale banden beweegt, is het eenvoudig. Om bijvoorbeeld naar rechts te gaan, verhoog je gewoon het minst significante byte (bijv. <tt>$0200</tt> wordt <tt>$0201</tt>). Om naar beneden te gaan, tel je <tt>$20</tt> op (bijv. <tt>$0200</tt> wordt <tt>$0220</tt>). Links en omhoog zijn het omgekeerde."
+ "Zoals altijd bevat deze versie veel kleine foutoplossingen en verbeteringen."
+ "Architectuurverbeteringen maken betere code‑deling tussen GNOME‑, web‑ en Android‑platforms mogelijk."
+ "Uiterlijk-instellingen"
+ "Vormgeving"
+ "Alle getallen met het voorvoegsel <tt>$</tt> in 6502‑assembleertaal (en dus ook in dit boek) zijn in hexadecimaal (hex) formaat. Als je niet vertrouwd bent met hex‑getallen, lees dan <a href=\"https://nl.wikipedia.org/wiki/Hexadecimaal_talstelsel\">het Wikipedia‑artikel</a>. Alles met het voorvoegsel <tt>#</tt> is een letterlijk getal. Elk ander getal verwijst naar een geheugenlocatie."
+ "Belangrijk om hier op te merken is het onderscheid tussen <tt>ADC #$01</tt> en <tt>ADC $01</tt>. De eerste voegt de waarde <tt>$01</tt> toe aan het <tt>A</tt>-register, maar de tweede voegt de waarde toe die is opgeslagen op geheugenlocatie <tt>$01</tt> aan het <tt>A</tt>-register."
+ "Ook nuttig: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Bijna klaar!"
+ "Alle instructies die absolute adressering ondersteunen (met uitzondering van de spronginstructies) kunnen ook een eenbyte‑adres nemen. Dit type adressering heet \"nulpagina\" – alleen de eerste pagina (de eerste 256 bytes) van het geheugen is toegankelijk. Dit is sneller, omdat slechts één byte hoeft te worden opgezocht, en neemt ook minder ruimte in in de geassembleerde code."
+ "Alle bestanden"
+ "Daarna wordt de waarde <tt>2</tt> aan de accumulator toegevoegd om een uiteindelijke willekeurige waarde in het bereik 2–5 te creëren."
+ "Na het eerste blok opmerkingen (regels die met puntkomma\'s beginnen) zijn de eerste twee regels:"
+ "Na de botsingsdetectie werken we de positie van de slang bij. Dit gebeurt op hoog niveau als volgt: verplaats eerst elk byte‑paar van het lichaam één positie omhoog in het geheugen. Werk vervolgens de kop bij volgens de huidige richting. Ten slotte, als de kop buiten het bereik ligt, behandel dit als een botsing. Ik illustreer dit met wat ASCII‑kunst. Elk haakjespaar bevat ter vereenvoudiging een x,y‑coördinaat in plaats van een byte‑paar."
+ "Na een beweging in elke richting moeten we ook controleren of de kop buiten het bereik komt. Dit wordt voor elke richting anders afgehandeld. Voor links en rechts kunnen we controleren of de kop effectief heeft \"teruggeslagen\". Van <tt>$021f</tt> naar rechts gaan door het minst significante byte te verhogen leidt tot <tt>$0220</tt>, maar dat is feitelijk een sprong van de laatste pixel van de eerste rij naar de eerste pixel van de tweede rij. Dus elke keer dat we naar rechts gaan, moeten we controleren of het nieuwe minst significante byte een veelvoud van <tt>$20</tt> is. Dit gebeurt met een bit‑controle tegen het masker <tt>$1f</tt>. Hopelijk laat de onderstaande illustratie zien hoe het maskeren van de laagste 5 bits onthult of een getal een veelvoud van <tt>$20</tt> is of niet."
+ "Adwaita"
+ "Adresseringsmodi"
+ "Adresseringsmodi"
+ "Adres %1$s - onbekende opcode"
+ "Aanvullende knopinvoer is ook beschikbaar: knop A (Enter/Return‑toets, ASCII‑code <tt>$0D</tt>) en knop B (spatiebalk, ASCII‑code <tt>$20</tt>). Deze kunnen worden gebruikt om meer interactie aan je games toe te voegen. Voor de richtingsbesturing kunnen zowel WASD‑toetsen als pijltjestoetsen door elkaar worden gebruikt."
+ "Hulpfunctie toegevoegd om het bewerken van code voor beginners te vereenvoudigen"
+ "Bestandsbeheer toegevoegd om je programma\'s op te slaan en te laden"
+ "Voeg meer instructies toe om extra pixels te tekenen."
+ "Accumulator: Hoofdregister voor berekeningen"
+ "Accent: Geel"
+ "Accent: Blauwgroen"
+ "Accent: Leisteen"
+ "Accent: Rood"
+ "Accent: Paars"
+ "Accent: Roze"
+ "Accent: Oranje"
+ "Accent: Groen"
+ "Accent: Blauw"
+ "Accentkleur"
+ "Absoluut: <tt>$c000</tt>"
+ "Absoluut,X en absoluut,Y: <tt>$c000,X</tt> en <tt>$c000,Y</tt>"
+ "Over Learn 6502 Assembly"
+ "Een volledige lijst van de 6502‑instructieset is <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">hier</a> en <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">hier</a> beschikbaar (ik raadpleeg meestal beide pagina\'s, omdat ze hun sterke en zwakke punten hebben). Deze pagina\'s geven de argumenten van elke instructie, welke registers ze gebruiken en welke vlaggen ze zetten. Dit zijn je bijbels."
+ "Er is een GitHub-issue geopend in je browser. Bekijk het daar en dien het in om je bijdrage te voltooien. Na goedkeuring wordt je voorbeeld opgenomen in de volgende release.\n\nMocht je voorbeeld te groot zijn, dan wordt de volledige inhoud naar je klembord gekopieerd om handmatig in het GitHub-issue te plakken."
+ "<tt>init</tt> en <tt>loop</tt> zijn beide subroutines. <tt>init</tt> initialiseert de spelstatus en <tt>loop</tt> is de hoofdspel‑lus."
+ "<tt>checkSnakeCollision</tt> loopt door de lichaamssegmenten van de slang en vergelijkt elk bytepaar met het kop‑paar. Als er een overeenkomst is, dan is het game over."
+ "<tt>a9</tt> en <tt>c9</tt> zijn de processor‑opcodes voor respectievelijk onmiddellijk geadresseerde <tt>LDA</tt> en <tt>CMP</tt>. <tt>01</tt> en <tt>02</tt> zijn de argumenten voor deze instructies. <tt>d0</tt> is de opcode voor <tt>BNE</tt>, en het argument is <tt>02</tt>. Dit betekent \"sla de volgende twee bytes over\" (<tt>85 22</tt>, de geassembleerde versie van <tt>STA $22</tt>). Probeer de code zo te wijzigen dat <tt>STA</tt> een tweebyte absoluut adres gebruikt in plaats van een eenbyte nulpagina‑adres (bijv. verander <tt>STA $22</tt> in <tt>STA $2222</tt>). Assembleer de code opnieuw en bekijk de hexdump – het argument voor <tt>BNE</tt> zou nu <tt>03</tt> moeten zijn, omdat de instructie waar de processor overheen springt nu drie bytes lang is."
+ "<tt>X</tt> bevat de pixelkleur en <tt>Y</tt> bevat de positie van de huidige pixel. De eerste lus tekent de huidige kleur als een pixel (via het <tt>A</tt>-register), duwt de kleur op de stack en verhoogt vervolgens de kleur en positie. De tweede lus haalt de stack leeg, tekent de gepopte kleur als een pixel en verhoogt daarna de positie. Zoals verwacht ontstaat hierdoor een gespiegeld patroon."
+ "<tt>SP</tt> is de stackpointer. Ik ga nog niet in op de stack, maar in hoofdlijnen wordt dit register verlaagd telkens wanneer een byte op de stack wordt geplaatst en verhoogd wanneer een byte van de stack wordt gehaald."
+ "<tt>PC</tt> is de programmateller (program counter) – hiermee weet de processor waar hij zich momenteel in het programma bevindt. Het is als het huidige regelnummer van een uitgevoerd script. In de simulator wordt de code geassembleerd vanaf geheugenlocatie <tt>$0600</tt>, dus <tt>PC</tt> begint altijd daar."
+ "<tt>JSR</tt> en <tt>RTS</tt> (\"jump to subroutine\" en \"return from subroutine\") zijn een dynamisch duo dat je meestal samen gebruikt ziet. <tt>JSR</tt> wordt gebruikt om van de huidige locatie naar een ander deel van de code te springen. <tt>RTS</tt> keert terug naar de vorige positie. Dit is in feite alsof je een functie aanroept en terugkeert."
+ "<tt>JMP</tt> is een onvoorwaardelijke sprong. Hier is een heel eenvoudig voorbeeld om het in actie te laten zien:"
+ "<tt>BCC</tt> en <tt>BCS</tt> (\"branch on carry clear\" en \"branch on carry set\") worden gebruikt om te vertakken op basis van de carry‑vlag. Schrijf een programma dat een van deze twee gebruikt."
+ "<b>Nulpagina</b>: <tt>$0000</tt>-<tt>$00FF</tt> (eerste 256 bytes, snellere toegang)"
+ "<b>Nulpagina</b> (<tt>$c0</tt>): Toegang tot geheugenlocaties <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Nulpagina,X/Y</b> (<tt>$c0,X</tt>): Tel X/Y‑register op bij het nulpagina‑adres"
+ "<b>Z</b> (Zero): Ingesteld wanneer het resultaat nul is"
+ "<b>X, Y</b>: Indexregisters voor adressering en tellen"
+ "<b>W</b> of pijl omhoog (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Ingesteld wanneer een rekenkundige bewerking een gesigneerde overloop veroorzaakt"
+ "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Registers in het geheugen opslaan"
+ "<b>SP</b> (Stack Pointer): Wijst naar de huidige stackpositie (begint bij <tt>$FF</tt>)"
+ "<b>SBC vereist dat carry gezet is</b>: Stel <tt>C</tt> in vóór het aftrekken (werkt als inverse borrow). <tt>C</tt> gewist na SBC betekent dat er een borrow optrad."
+ "<b>S</b> of pijl omlaag (<tt>$73</tt>)"
+ "<b>Relatief</b> (<tt>label</tt>): Vertakking gebruikt gesigneerde 8‑bit offset vanaf de volgende instructie (−128…+127)"
+ "<b>Q</b> of Enter/Return-toets (<tt>$0D</tt>)"
+ "<b>Programmaopslag</b>: Beginnend bij <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Accumulator naar de stack duwen/van de stack halen"
+ "<b>PC</b> (Program Counter): Wijst naar de volgende uit te voeren instructie"
+ "<b>N</b> (Negatief): Ingesteld wanneer bit 7 van het resultaat is gezet"
+ "<b>LDA/LDX/LDY</b>: Registers laden"
+ "<b>JSR/RTS</b>: Sprong naar subroutine / Terugkeer uit subroutine"
+ "<b>JMP</b>: Onvoorwaardelijke sprong"
+ "<b>Indirect</b> (<tt>($c000)</tt>): Zoek het adres op dat op de gegeven locatie is opgeslagen"
+ "<b>Indirect geïndexeerd</b> (<tt>($c0),Y</tt>): Gebruik nulpagina-adres als pointer om het basisadres te verkrijgen en tel vervolgens Y bij die basis op"
+ "<b>Geïndexeerd indirect</b> (<tt>($c0,X)</tt>): Tel X op bij het nulpagina-adres en gebruik het resultaat als pointer om het werkelijke doeladres te verkrijgen"
+ "<b>Onmiddellijk</b> (<tt>#$c0</tt>): Gebruik de letterlijke waarde"
+ "<b>INX/INY/DEX/DEY</b>: Registers verhogen/verlagen"
+ "<b>I</b> (Interrupt): Ingesteld wanneer interrupts zijn uitgeschakeld"
+ "<b>E</b> of spatiebalk (<tt>$20</tt>)"
+ "<b>Beeldgeheugen</b>: <tt>$0200</tt>-<tt>$05FF</tt> (voor schermuitvoer)"
+ "<b>Richtingbesturing</b>:"
+ "<b>D</b> of rechterpijl (<tt>$64</tt>)"
+ "<b>D</b> (Decimaal): Ingesteld wanneer de processor in BCD-modus (Binary Coded Decimal) staat"
+ "<b>Vergelijkingsoperaties</b>: <tt>CMP/CPX/CPY</tt> zetten <tt>N/Z/C</tt> zoals bij een aftrekking (register − geheugen) zonder een resultaat op te slaan."
+ "<b>C</b> (Carry): Ingesteld wanneer rekenkundige bewerkingen een byte overlopen"
+ "<b>BEQ/BNE/BCC/BCS</b>: Vertak als gelijk/ongelijk/carry gewist/carry gezet"
+ "<b>B</b> (Break): Ingesteld wanneer de BRK-instructie wordt uitgevoerd"
+ "<b>Actieknoppen</b>:"
+ "<b>Absoluut</b> (<tt>$c000</tt>): Toegang tot elke geheugenlocatie"
+ "<b>Absoluut,X/Y</b> (<tt>$c000,X</tt>): Tel X/Y-register bij het absolute adres op"
+ "<b>ADC/SBC</b>: Optellen/aftrekken met carry"
+ "<b>A</b> of linkerpijl (<tt>$61</tt>)"
+ "<b>A</b> (Accumulator): Hoofdregister voor berekeningen en gegevensmanipulatie"
+ "<b><tt>$f</tt></b>: Lichtgrijs (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Lichtblauw (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Lichtgroen (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Grijs (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Donkergrijs (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Lichtrood (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Laatst ingedrukte toets (ASCII-code)"
+ "<b><tt>$FE</tt></b>: Generator voor willekeurige getallen (leest als een willekeurige waarde 0–255)"
+ "<b><tt>$9</tt></b>: Bruin (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Oranje (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Geel (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Blauw (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Groen (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Paars (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Cyaan (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Rood (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Wit (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Slang-positiegegevens (kop, lichaamssegmenten, staart)"
+ "<b><tt>$0</tt></b>: Zwart (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Slanglengte"
+ "<b><tt>$02</tt></b>: Slangrichting (1=omhoog, 2=rechts, 4=omlaag, 8=links)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Appelpositie"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> heeft een <a href=\"https://gist.github.com/wkjagt/9043907\">volledig becommentarieerde gist van deze broncode</a> gemaakt; volg die voor meer details."
+ "De 6502-assembleertaal heeft een aantal vertakkingsinstructies die allemaal vertakken op basis van of bepaalde vlaggen gezet zijn of niet. In dit voorbeeld bekijken we <tt>BNE</tt>: \"Branch on not equal\" (vertak bij ongelijk)."
+ "6502-stack vol! Doorrollen..."
+ "6502-stack leeg! Doorrollen..."
+ "(Eigenlijk is mij betrouwbaar verteld dat 6502-processors nog steeds worden geproduceerd door <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> en <a href=\"https://www.mouser.co.uk/c/?q=65C02\">aan hobbyisten worden verkocht</a>, dus 6502 is duidelijk <i>geen</i> dode taal! Wie had dat gedacht?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-pl/strings.xml b/packages/app-android/data/Android/src/main/res/values-pl/strings.xml
new file mode 100644
index 00000000..f73aef14
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-pl/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Naucz się Asemblera 6502"
+ "Naucz się Asemblera 6502"
+ "Naucz się Asemblera 6502"
+ "வணக்கம்! Z radością witamy tamilskie tłumaczenie, którego autorem jest தமிழ்நேரம். நன்றி!"
+ "co reprezentuje pośrednio adresowane lokalizacje pamięci <tt>$0411</tt>, <tt>$0410</tt> i <tt>$040f</tt> (trzy piksele w środku wyświetlacza). Pracuję nad tym punktem, ale ważne jest, aby w pełni zrozumieć, jak działa adresowanie pośrednie."
+ "wdm-output"
+ "programowanie"
+ "nauka"
+ "autorstwa %1$s"
+ "_Preferencje"
+ "Zero page: <tt>$c0</tt>"
+ "Zero page,Y: <tt>$c0,Y</tt>"
+ "Zero page,X: <tt>$c0,X</tt>"
+ "Użycie strony zerowej"
+ "Zero Page ($0000-$00FF)"
+ "Flaga Zero: Ustawiana gdy wynik operacji jest zerem. Niezbędna do warunkowego rozgałęziania - większość instrukcji warunkowych skoków (BEQ, BNE) sprawdza tę flagę, aby określić przepływ programu na podstawie tego, czy wartość jest zerem."
+ "Twój plik ma niezapisane zmiany. Zmiany zostaną utracone, jeśli ich nie zapiszesz."
+ "Widziałeś <tt>TAX</tt>. Prawdopodobnie możesz zgadnąć, co robią <tt>TAY</tt>, <tt>TXA</tt> i <tt>TYA</tt>, ale napisz jakiś kod, aby przetestować swoje założenia."
+ "Dzięki zakupowi aplikacji wspierasz ten projekt open source. Dziękujemy!"
+ "Możesz pomyśleć o ekranie jako o czterech poziomych pasach 32 × 8 pikseli. Te pasy mapują się na <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> i <tt>$0500-$05ff</tt>. Pierwsze wiersze pikseli to <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, itd."
+ "Żółty"
+ "Pisz i edytuj kod z wbudowanym edytorem kodu"
+ "Przy wszystkich tych przykładach pomocne może okazać się użycie <b>Monitora heksadecymalnego</b> w widoku debuguj, aby obserwować zmiany pamięci. Wybierz region pamięci z listy, aby zobaczyć tę sekcję — na przykład <b>Pamięć wyświetlacza ($0200–$05FF)</b>, aby obserwować piksele ekranu, lub <b>Zero Page ($0000–$00FF)</b>, aby zbadać pierwsze 256 bajtów."
+ "Przy adresowaniu absolutnym pełna lokalizacja pamięci jest używana jako argument instrukcji. Na przykład:"
+ "Witamy tłumaczenie na język wietnamski, w pełni wniesione przez Loc Huynh (hthienloc)."
+ "Witamy tłumaczenie na język polski, początkowo wniesione przez Micro Wave. Dziękujemy!"
+ "Już trochę przyjrzeliśmy się sekcji statusu procesora (tej z <tt>A</tt>, <tt>PC</tt> itp.), ale co to wszystko oznacza?"
+ "Dodaaliśmy nową sekcję Przykłady do karty Ucz się, gdzie możesz eksplorować i uruchamiać w pełni skomentowane programy 6502 bezpośrednio w aplikacji. Zacznij od naszego wyróżnionego przykładu gry Snake i zobacz, jak te piksele ożywają!"
+ "Wartości <tt>$00</tt>-<tt>$0F</tt> reprezentują 16 różnych kolorów (<tt>$00</tt>=czarny, <tt>$01</tt>=biały)"
+ "Użyj niestandardowego koloru głównego"
+ "Użyj niestandardowego koloru akcentu"
+ "Aktualizowanie stanu gry"
+ "Niezapisane zmiany"
+ "W przeciwieństwie do zero page,Y, absolute,Y nie może być używany z <tt>STX</tt>, ale może być używany z <tt>LDA</tt> i <tt>STA</tt>."
+ "Pod maską: zaktualizowano do TypeScript 6, Vite 8 i innych zależności w celu poprawy wydajności i stabilności."
+ "Nie można relokować kodu poza pamięcią 64k"
+ "Nie można znaleźć/przeanalizować podanego adresu/etykiety"
+ "Dwie z instrukcji stosu to <tt>PHA</tt> i <tt>PLA</tt>, \"włóż akumulator\" i \"pobierz akumulator\". Poniżej jest przykład tych dwóch w akcji."
+ "Dwa nowe przykładowe programy i oba pochodzą od was: Dino Run autorstwa Jacob oraz Line Buster 6502 autorstwa edit12. To pierwsze przykłady nadesłane przyciskiem udostępniania i chętnie zobaczymy więcej."
+ "Tutorial <sub>autorstwa <a href=\"https://www.skilldrick.co.uk/\">Nicka Morgana</a>, na licencji CC BY 4.0</sub>"
+ "Tutorial"
+ "Spróbuj napisać fragmenty kodu, które używają każdego z trybów adresowania 6502. Pamiętaj, możesz użyć <b>Monitora heksadecymalnego</b> w widoku debuguj, aby obserwować sekcję pamięci."
+ "Wypróbuj przykładowe programy dla mikroprocesora 6502."
+ "Wypróbuj przykładowe programy"
+ "Spróbuj zmienić kolor trzech pikseli."
+ "Przełącz pasek boczny"
+ "Aby przetestować, czy kierunek to <tt>1</tt>, <tt>2</tt>, <tt>4</tt> lub <tt>8</tt>, kod ciągle przesuwa w prawo, dopóki carry nie zostanie ustawione. Jedno <tt>LSR</tt> oznacza \"górę\", dwa oznacza \"prawo\", i tak dalej."
+ "Tytuł"
+ "To wydanie przynosi żywe motywy inspirowane handheldami z konfigurowalnymi kolorami. Wprowadziliśmy adaptacyjne układy tabletów i desktopów, które utrzymują wszystko w widoku, idealne na te maratony kodowania podczas nauki tworzenia retro gier w asemblerze. Duże podziękowania dla naszego nowego współtwórcy @mmartinortiz za świetne pomysły na układ desktop. Są też fajne ulepszenia techniczne, jak ścisłość TypeScript, niestandardowe schematy stylów GtkSourceView i ulepszone kontrole debuggera dla płynniejszego rozwoju."
+ "Ten jest trochę dziwny. To jak krzyżówka między zero page,X a pośrednim. Zasadniczo bierzesz adres strony zerowej, dodajesz wartość rejestru <tt>X</tt> do niego, następnie używasz tego do wyszukania dwubajtowego adresu. Na przykład:"
+ "To ładuje wartość <tt>$11</tt> do lokalizacji pamięci <tt>$10</tt>, wartość <tt>$10</tt> do <tt>$12</tt> i <tt>$0f</tt> do <tt>$14</tt>. Następnie ładuje wartość <tt>$04</tt> do <tt>$11</tt>, <tt>$13</tt> i <tt>$15</tt>. To prowadzi do pamięci takiej jak ta:"
+ "Tutaj adresowanie staje się interesujące. W tym trybie podawany jest adres strony zerowej, a następnie dodawana jest wartość rejestru <tt>X</tt>. Oto przykład:"
+ "To jest równoważnik zero page,X, ale może być używany tylko z <tt>LDX</tt> i <tt>STX</tt>."
+ "To są wersje adresowania absolutnego zero page,X i zero page,Y. Na przykład:"
+ "Jest też bardzo praktyczny powód: rozwój retro gier. Scena homebrew jest żywa i zdrowa—nowe gry są nadal <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">wydawane dla NES</a> (niektóre nawet jako fizyczne kartridże) i dla wielu innych klasycznych systemów; NES jest tylko przykładem. Nawet jeśli Twoim celem jest coś jak SNES, rozpoczęcie od 6502 się opłaca: CPU SNES (65C816) jest wstecznie kompatybilny z 6502, więc podstawy, których się tutaj uczysz—rejestry, tryby adresowania i podstawowy zestaw instrukcji—przenoszą się bezpośrednio."
+ "Dlaczego więc 6502? Dlaczego nie <i>użyteczny</i> język asemblera, jak <a href=\"https://pl.wikipedia.org/wiki/X86\">x86</a>? Cóż, nie myślę, że nauka x86 jest użyteczna. Nie myślę, że kiedykolwiek będziesz musiał <i>pisać</i> język asemblera w swojej codziennej pracy - dla niektórych ludzi to ćwiczenie akademickie, coś, co rozszerza umysł i myślenie. 6502 został pierwotnie napisany w innej epoce, czasie, gdy większość programistów pisała asembler bezpośrednio, zamiast w tych nowych językach programowania wysokiego poziomu. Tak więc, został zaprojektowany do pisania przez ludzi. Bardziej nowoczesne języki asemblera są przeznaczone do pisania przez kompilatory, więc zostawmy to im. Dodatkowo, 6502 jest <i>zabawny</i>. Nikt nigdy nie nazwał x86 <i>zabawnym</i>."
+ "Strona zerowa pamięci jest używana do przechowywania szeregu zmiennych stanu gry, jak zaznaczono w bloku komentarza na górze gry. Wszystko w <tt>$00</tt>, <tt>$01</tt> i <tt>$10</tt> w górę to para bajtów reprezentująca dwubajtową lokalizację pamięci, która będzie wyszukana używając adresowania pośredniego. Wszystkie te lokalizacje pamięci będą między <tt>$0200</tt> a <tt>$05ff</tt> - sekcja pamięci odpowiadająca konsoli do gier. Na przykład, jeśli <tt>$00</tt> i <tt>$01</tt> zawierały wartości <tt>$01</tt> i <tt>$02</tt>, odnosiłyby się do drugiego piksela wyświetlacza ( <tt>$0201</tt> - pamiętaj, najmniej znaczący bajt przychodzi pierwszy przy adresowaniu pośrednim)."
+ "Stos w procesorze 6502 jest jak każdy inny stos - wartości są wkładane na niego i zdejmowane (\"ciągnięte\" w terminologii 6502) z niego. Bieżąca głębokość stosu jest mierzona przez wskaźnik stosu, specjalny rejestr. Stos żyje w pamięci między <tt>$0100</tt> a <tt>$01ff</tt>. Wskaźnik stosu jest początkowo <tt>$ff</tt>, który wskazuje na lokalizację pamięci <tt>$01ff</tt>. Gdy bajt jest wkładany na stos, wskaźnik stosu staje się <tt>$fe</tt>, lub lokalizacja pamięci <tt>$01fe</tt>, i tak dalej."
+ "Stos"
+ "Gra Snake z tutorialu"
+ "Wynikiem tej podprogram jest załadowanie losowego bajtu do <tt>$00</tt> i losowej liczby między 2 a 5 do <tt>$01</tt>. Ponieważ najmniej znaczący bajt przychodzi pierwszy przy adresowaniu pośrednim, to tłumaczy się na adres pamięci między <tt>$0200</tt> a <tt>$05ff</tt>: dokładny zakres używany do rysowania wyświetlacza."
+ "Procesor wie, gdzie powrócić, ponieważ <tt>JSR</tt> wkłada adres minus jeden następnej instrukcji na stos przed skokiem do podanej lokalizacji. <tt>RTS</tt> zdejmuje tę lokalizację, dodaje jeden do niej i skacze do tej lokalizacji. Przykład:"
+ "Problem polega na tym, że <tt>$184</tt> jest zbyt duże, aby zmieścić się w pojedynczym bajcie (maksimum to <tt>$FF</tt>), a rejestry mogą przechowywać tylko pojedynczy bajt. Jest OK jednak; procesor nie jest naprawdę głupi. Jeśli patrzyłeś wystarczająco uważnie, zauważyłeś, że flaga carry została ustawiona na <tt>1</tt> po tej operacji. Tak więc wiesz."
+ "Przeciwieństwem <tt>BNE</tt> jest <tt>BEQ</tt>. Spróbuj napisać program, który używa <tt>BEQ</tt>."
+ "Przeciwieństwem <tt>ADC</tt> jest <tt>SBC</tt> (odejmij z przeniesieniem). Napisz program, który używa tej instrukcji."
+ "Przeglądarkowa gra offline o bieganiu, w asemblerze 6502"
+ "Następna podprogram, <tt>generateApplePosition</tt>, ustawia lokalizację jabłka na losową pozycję na wyświetlaczu. Najpierw ładuje losowy bajt do akumulatora (<tt>$fe</tt> to generator liczb losowych w tym symulatorze). Jest to przechowywane w <tt>$00</tt>. Następnie inny losowy bajt jest ładowany do akumulatora, który następnie jest <tt>AND</tt>-owany z wartością <tt>$03</tt>. Ta część wymaga małego objazdu."
+ "Następna podprogram, <tt>checkCollision</tt>, odwołuje się do <tt>checkAppleCollision</tt> i <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> po prostu sprawdza, czy dwa bajty przechowujące lokalizację jabłka pasują do dwóch bajtów przechowujących lokalizację głowy. Jeśli tak, długość jest zwiększana i generowana jest nowa pozycja jabłka."
+ "Następna linia, <tt>BNE decrement</tt>, przesunie wykonanie do etykiety decrement, jeśli flaga <tt>Z</tt> jest ustawiona na <tt>0</tt> (co oznacza, że dwie wartości w porównaniu <tt>CPX</tt> nie były równe), w przeciwnym razie nic nie robi i przechowujemy <tt>X</tt> w <tt>$0201</tt>, następnie kończymy program."
+ "Następny bit aktualizuje głowę węża w zależności od kierunku. To prawdopodobnie najbardziej skomplikowana część kodu, i wszystko zależy od tego, jak lokalizacje pamięci mapują się na ekran, więc przyjrzyjmy się temu bardziej szczegółowo."
+ "Długość jest inicjalizowana na <tt>4</tt>, więc <tt>X</tt> rozpoczyna się od <tt>3</tt>. <tt>LDA $10,x</tt> ładuje wartość <tt>$13</tt> do <tt>A</tt>, następnie <tt>STA $12,x</tt> przechowuje tę wartość w <tt>$15</tt>. <tt>X</tt> jest zmniejszane, i pętlimy. Teraz <tt>X</tt> to <tt>2</tt>, więc ładujemy <tt>$12</tt> i przechowujemy w <tt>$14</tt>. To pętl się, dopóki <tt>X</tt> jest dodatnie (<tt>BPL</tt> oznacza \"rozgałęź, jeśli dodatnie\")."
+ "Ostatnia podprogram, <tt>spinWheels</tt>, jest tam tylko dlatego, że gra działałaby zbyt szybko w przeciwnym razie. Wszystko, co robi <tt>spinWheels</tt>, to liczy <tt>X</tt> w dół od zera, dopóki nie trafi ponownie na zero. Pierwsze <tt>dex</tt> zawija, czyniąc <tt>X</tt> <tt>#$ff</tt>."
+ "Ostatnia sekcja pokazuje flagi procesora. Każda flaga to jeden bit, więc wszystkie siedem flag żyje w pojedynczym bajcie. Flag są ustawiane przez procesor, aby dać informacje o poprzedniej instrukcji. Więcej na ten temat później. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Przeczytaj więcej o rejestrach i flagach tutaj</a>."
+ "Wartość heksadecymalna <tt>$03</tt> jest reprezentowana w binarnym jako <tt>00000011</tt>. Opkod <tt>AND</tt> wykonuje bitowe AND argumentu z akumulatorem. Na przykład, jeśli akumulator zawiera wartość binarną <tt>10101010</tt>, to wynik <tt>AND</tt> z <tt>00000011</tt> będzie <tt>00000010</tt>."
+ "Hex powinien wyglądać jakoś tak:"
+ "Pętla gry"
+ "Pierwsze dwa bajty przechowują lokalizację jabłka. Jest to aktualizowane za każdym razem, gdy wąż zje jabłko. Bajt <tt>$02</tt> zawiera bieżący kierunek. <tt>1</tt> oznacza górę, <tt>2</tt> prawo, <tt>4</tt> dół, a <tt>8</tt> lewo. Powód za tymi liczbami stanie się jasny później."
+ "Pierwsza podprogram, <tt>readKeys</tt>, zajmuje się akceptowaniem wejścia użytkownika. Lokalizacja pamięci <tt>$ff</tt> przechowuje kod ASCII ostatniego naciśnięcia klawisza w tym symulatorze. Wartość jest ładowana do akumulatora, następnie porównywana z <tt>$77</tt> (kod heksadecymalny dla W), <tt>$64</tt> (D), <tt>$73</tt> (S) i <tt>$61</tt> (A). Jeśli któreś z tych porównań jest udane, program rozgałęzia się do odpowiedniej sekcji."
+ "Pierwsza linia pokazuje rejestry <tt>A</tt>, <tt>X</tt> i <tt>Y</tt> (<tt>A</tt> jest często nazywany \"akumulatorem\"). Każdy rejestr przechowuje pojedynczy bajt. Większość operacji działa na zawartości tych rejestrów."
+ "Pierwsza instrukcja powoduje, że wykonanie skacze do etykiety <tt>init</tt>. To ustawia <tt>X</tt>, następnie powraca do następnej instrukcji, <tt>JSR loop</tt>. To skacze do etykiety <tt>loop</tt>, która zwiększa <tt>X</tt>, dopóki nie jest równa <tt>$05</tt>. Po tym powracamy do następnej instrukcji, <tt>JSR end</tt>, która skacze do końca pliku. To ilustruje, jak <tt>JSR</tt> i <tt>RTS</tt> mogą być używane razem do tworzenia modularnego kodu."
+ "Efektem tego jest zamaskowanie dwóch najmniej znaczących bitów akumulatora, ustawienie pozostałych na zero. To konwertuje liczbę w zakresie 0–255 na liczbę w zakresie 0–3."
+ "Blok kodu poniżej zawiera cały kod źródłowy gry. Wyjaśnię, jak to działa w następnych sekcjach."
+ "Czarny ekran konsoli do gier powinien teraz pokazać trzy kolorowe \"piksele\" w lewym górnym rogu."
+ "Aplikacja została zaprojektowana z myślą o czcionce interfejsu GNOME. W innych systemach jest wyświetlana czcionką tego systemu, która zwykle jest mniejsza."
+ "Rejestr indeksowy Y jest podobny do X i nie ma specjalnych funkcji. Powszechnie używany do adresowania indeksowanego i ruchu danych."
+ "Rejestr indeksowy X jest używany do trybów adresowania indeksowanego i operacji liczenia. Może przechowywać liczniki pętli, indeksy tablic i jest niezbędny do dostępu do lokalizacji pamięci względem adresu bazowego używając X jako offsetu. Specjalne: TSX/TXS transferuje X do/z wskaźnika stosu."
+ "Wskaźnik stosu zarządza stosem wywołań dla podprogramów i przerwań. Rozpoczyna się od $FF (szczyt stosu) i rośnie w dół. Używany do operacji PUSH/PULL, wywołań JSR/RTS i obsługi przerwań. Krytyczny dla zagnieżdżonych wywołań funkcji."
+ "Licznik programu zawiera adres pamięci następnej instrukcji do wykonania. Automatycznie zwiększa się po każdej instrukcji i może być modyfikowany przez skoki, rozgałęzienia, wywołania i powroty. Niezbędny do kontroli przepływu programu i debugowania."
+ "Akumulator (A) to główny rejestr do operacji arytmetycznych i logicznych. Wszystkie podstawowe obliczenia jak ADD, SUBTRACT, AND, OR itp. używają tego rejestru. Jest to najczęściej używany rejestr w programowaniu asemblera 6502."
+ "Sama podprogram <tt>loop</tt> po prostu wywołuje szereg podprogramów sekwencyjnie, przed powrotem do siebie:"
+ "Podprogram <tt>init</tt> odwołuje się do dwóch podprogramów, <tt>initSnake</tt> i <tt>generateApplePosition</tt>. <tt>initSnake</tt> ustawia kierunek węża, długość, a następnie ładuje początkowe lokalizacje pamięci głowy i ciała węża. Para bajtów na <tt>$10</tt> zawiera lokalizację ekranową głowy, para na <tt>$12</tt> zawiera lokalizację pojedynczego segmentu ciała, a <tt>$14</tt> zawiera lokalizację ogona (ogon jest ostatnim segmentem ciała i jest rysowany na czarno, aby utrzymać węża w ruchu). Dzieje się to w następującym kodzie:"
+ "Opkod <tt>BIT</tt> jest podobny do <tt>AND</tt>, ale obliczenie jest używane tylko do ustawienia flagi zero - rzeczywisty wynik jest odrzucany. Flaga zero jest ustawiana tylko wtedy, gdy wynik AND między akumulatorem a argumentem jest zerem. Gdy patrzymy na potęgi dwójki, flaga zero będzie ustawiana tylko wtedy, gdy dwie liczby nie są takie same. Na przykład, <tt>0001 AND 0001</tt> nie jest zerem, ale <tt>0001 AND 0010</tt> jest zerem."
+ "6502 używa 16-bitowej magistrali adresowej, co oznacza, że procesor ma dostęp do 65536 bajtów pamięci. Pamiętaj, że bajt jest reprezentowany przez dwa znaki heksadecymalne, więc lokalizacje pamięci są ogólnie reprezentowane jako <tt>$0000 - $ffff</tt>. Istnieją różne sposoby odwoływania się do tych lokalizacji pamięci, jak szczegółowo opisano poniżej."
+ "Dziękujemy za korzystanie z oprogramowania open source."
+ "Sprawdza bit 0 rejestru A za pomocą LSR i BCC i umieszcza w A wynik: 1 lub 0"
+ "Testuj swoje kreacje na wirtualnej konsoli do gier"
+ "Tervetuloa! Z przyjemnością witamy fińskie tłumaczenie, udostępnione dzięki uprzejmości Jiri Grönroos. Kiitos!"
+ "Cyjanowy"
+ "Czcionka systemowa, rozmiar GNOME"
+ "Domyślna systemowa"
+ "Błąd składni w linii %1$d: %2$s"
+ "Wspierający"
+ "Wesprzyj"
+ "Prześlij"
+ "Styl"
+ "Zatrzymany"
+ "Przewodnik krok po kroku po asemblerze 6502"
+ "Krok"
+ "Flagi statusu"
+ "Wskaźnik stosu: Wskazuje pozycję stosu"
+ "Przykład stosu"
+ "Stos ($0100-$01FF)"
+ "Specjalne lokalizacje pamięci (w symulatorze)"
+ "Adres źródłowy (URL)"
+ "Niektóre instrukcje nie zajmują się lokalizacjami pamięci (np. <tt>INX</tt> - zwiększ rejestr <tt>X</tt>). Mówi się, że mają adresowanie implikowane - argument jest implikowany przez instrukcję."
+ "Dlaczego więc chciałbyś nauczyć się 6502? To martwy język, prawda? Cóż, łacina też jest martwa. A wciąż się ją naucza. <a href=\"https://pl.wikipedia.org/wiki/Q.e.d.\">Q.e.d.</a>"
+ "Co więc tak naprawdę robi ten program? Przejdźmy przez niego krok po kroku. Naciśnij <b>Resetuj</b>, następnie użyj <b>Krok</b>, aby wykonać program jedną instrukcję na raz. Widok <b>Debuguj</b> pokazuje rejestry i pamięć — w małym oknie jest osobną kartą, a w szerokim panelem pod konsolą gry. Kliknij <b>Krok</b> raz, a zauważysz w widoku debuguj, że <tt>A=</tt> zmieniło się z <tt>$00</tt> na <tt>$01</tt>, a <tt>PC=</tt> zmieniło się z <tt>$0600</tt> na <tt>$0602</tt>."
+ "Instrukcja <tt>STA $0200</tt> więc przechowuje wartość rejestru <tt>A</tt> w lokalizacji pamięci <tt>$0200</tt>. Kliknij <b>Krok</b> cztery razy więcej, aby wykonać resztę instrukcji, obserwując rejestr <tt>A</tt>, jak się zmienia."
+ "Patrząc więc na <tt>upKey</tt>, jeśli bieżący kierunek to dół (4), test bitu będzie zerem. <tt>BNE</tt> oznacza \"rozgałęź, jeśli flaga zero jest wyczyszczona\", więc w tym przypadku rozgałęzimy do <tt>illegalMove</tt>, które po prostu powraca z podprogramu. W przeciwnym razie nowy kierunek (1 w tym przypadku) jest przechowywany w odpowiedniej lokalizacji pamięci."
+ "Zacznijmy więc! Ta aplikacja zawiera <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler and Simulator</a>, który zaadoptowałem do tego interaktywnego tutorialu. Kliknij przycisk <b>Kopiuj</b> w bloku kodu poniżej, aby skopiować przykładowy kod do edytora. Następnie użyj <b>Złóż</b>, aby złożyć kod, oraz <b>Uruchom</b>, aby go uruchomić. Te akcje znajdziesz jako przyciski lub w menu."
+ "Do tej pory potrafimy pisać tylko podstawowe programy bez jakiejkolwiek logiki rozgałęzień. Zmieńmy to."
+ "Użycie pamięci w grze Snake"
+ "Dane gry Snake ($00-$15)"
+ "Gra Snake"
+ "Łupkowy"
+ "Błąd symulatora"
+ "Symulator"
+ "Udostępnione przykłady kodu zawierają teraz informacje o licencji CC-BY-4.0, co wyjaśnia, w jaki sposób społeczność może korzystać z Twoich wkładów i na nich budować."
+ "Udostępnij swój przykład"
+ "Udostępnij przykład"
+ "Udostępnij"
+ "Shalom! Z radością witamy hebrajskie tłumaczenie, którego autorem w całości jest Menachem (naattxx). Toda raba!"
+ "Poważnie jednak, myślę, że warto rozumieć język asemblera. Język asemblera to najniższy poziom abstrakcji w komputerach - punkt, w którym kod jest nadal czytelny. Język asemblera tłumaczy się bezpośrednio na bajty wykonywane przez procesor komputera. Jeśli rozumiesz, jak to działa, stałeś się zasadniczo komputerowym <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magikiem</a>."
+ "Selamat datang! Witamy również indonezyjskie tłumaczenie, którego autorem jest Arif Budiman. Terima kasih!"
+ "Ekran mapuje się na zakres pamięci <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Powiedz cześć wielu świeżym tłumaczeniom: francuski, interlingua, portugalski, portugalski (Brazylia), holenderski, hiszpański, ukraiński, japoński i chiński (uproszczony)"
+ "Zapisane jako %1$s"
+ "Zapisać zmiany?"
+ "Zapisz jako..."
+ "Zapisz plik asemblera"
+ "Zapisz"
+ "Uruchomiona gra Snake"
+ "Uruchom"
+ "Przepisz pierwszy przykład w tej sekcji, aby używał rejestru <tt>Y</tt> zamiast rejestru <tt>X</tt>."
+ "Przejrzyj, jak Twój przykład będzie wyglądał dla innych. Kliknięcie <b>Prześlij</b> utworzy zgłoszenie na GitHub. Będziesz musiał zalogować się na swoje konto GitHub, aby ukończyć przesłanie."
+ "Wznów"
+ "Resetuj"
+ "Renderowanie gry"
+ "Relative: <tt>$c0</tt> (lub etykieta)"
+ "Adresowanie względne jest używane dla instrukcji rozgałęziania. Te instrukcje przyjmują pojedynczy bajt, który jest używany jako offset od następnej instrukcji."
+ "Rejestry i flagi"
+ "Rejestry"
+ "Zmniejszono domyślny zakres adresów monitora heksadecymalnego dla lepszej wydajności"
+ "Czerwony"
+ "Odczytywanie wejścia"
+ "Losowe/Wejście ($FE-$FF)"
+ "Wyjdź"
+ "Szybkie wskazówki"
+ "Fioletowy"
+ "Programuj klasyczne konsole do gier"
+ "Program wstrzymany"
+ "Program ukończony. Zresetuj, aby ponownie wykonać program krok po kroku."
+ "Program ukończony przy PC=$%1$s"
+ "Program ukończony"
+ "Przechowywanie programu ($0600-$FFFF)"
+ "Licznik programu: Wskazuje następną instrukcję"
+ "Rejestr stanu procesora"
+ "Flagi procesora"
+ "Główny: Żółty"
+ "Główny: Cyjanowy"
+ "Główny: Łupkowy"
+ "Główny: Czerwony"
+ "Główny: Fioletowy"
+ "Główny: Różowy"
+ "Główny: Pomarańczowy"
+ "Główny: Zielony"
+ "Główny: Niebieski"
+ "Kolor główny"
+ "Poprzedni"
+ "Podgląd Twojego przykładu"
+ "Podgląd"
+ "Naciśnij ponownie <b>Krok</b>, aby wykonać drugą instrukcję. Lewy górny piksel konsoli do gier powinien teraz być biały. Ten symulator używa lokalizacji pamięci <tt>$0200</tt> do <tt>$05ff</tt> do rysowania pikseli na swoim wyświetlaczu. Wartości <tt>$00</tt> do <tt>$0f</tt> reprezentują 16 różnych kolorów (<tt>$00</tt> to czarny, a <tt>$01</tt> to biały), więc przechowywanie wartości <tt>$01</tt> w lokalizacji pamięci <tt>$0200</tt> rysuje biały piksel w lewym górnym rogu. To jest prostsze niż to, jak rzeczywisty komputer wyprowadzałby wideo, ale na razie wystarczy."
+ "Przetwarzanie wstępne ..."
+ "Graj"
+ "Różowy"
+ "Idealny dla hobbystów, studentów i wszystkich, którzy są ciekawi, jak naprawdę działają komputery pod maską!"
+ "Pauza"
+ "Flaga Overflow: Ustawiana gdy operacja arytmetyczna produkuje wynik, który nie może być reprezentowany w zakresie signed 8-bit (-128 do +127). Używana do wykrywania błędów arytmetyki signed w obliczeniach."
+ "Ogólna struktura"
+ "Rozgałęzienie poza zakresem w linii %1$d (rozgałęzienia są ograniczone do -128 do +127): %2$s"
+ "Nasz pierwszy program"
+ "Zorganizowane jako cztery poziome pasy 32×8 pikseli"
+ "Pomarańczowy"
+ "Zoptymalizowano konfigurację Flatpak poprzez usunięcie niepotrzebnych uprawnień"
+ "Otworzono %1$s"
+ "Otwórz..."
+ "Open source"
+ "Otwórz plik asemblera"
+ "Gdy wartości zostały przesunięte w dół węża, musimy wymyślić, co zrobić z głową. Kierunek jest najpierw ładowany do <tt>A</tt>. <tt>LSR</tt> oznacza \"logiczne przesunięcie w prawo\", lub \"przesuń wszystkie bity o jedną pozycję w prawo\". Najmniej znaczący bit jest przesuwany do flagi carry, więc jeśli akumulator to <tt>1</tt>, po <tt>LSR</tt> jest <tt>0</tt>, z ustawioną flagą carry."
+ "Przy resecie (symulator): <tt>P = $30</tt> (bit5 i <tt>B</tt> ustawione; <tt>D</tt> i <tt>I</tt> wyczyszczone)"
+ "OK"
+ "Teraz wykorzystajmy całą tę wiedzę w dobrym celu i zróbmy grę! Będziemy robić naprawdę prostą wersję klasycznej gry „Snake\"."
+ "Nie potrzeba wcześniejszego doświadczenia w programowaniu. Zacznij od interaktywnych lekcji i buduj swoje umiejętności krok po kroku."
+ "Brak kodu do uruchomienia."
+ "Nie podano adresu ani etykiety"
+ "Następnie przychodzi <tt>drawSnake</tt>. To też jest dość proste - najpierw usuwamy ogon, a następnie rysujemy głowę. <tt>X</tt> jest ustawiany na długość węża, więc możemy indeksować do właściwego piksela, ustawiamy <tt>A</tt> na zero, a następnie wykonujemy zapis używając trybu adresowania indeksowanego pośredniego. Następnie przeładowujemy <tt>X</tt>, aby indeksować do głowy, ustawiamy <tt>A</tt> na jeden i przechowujemy w <tt>($10,x)</tt>. <tt>$10</tt> przechowuje dwubajtową lokalizację głowy, więc to rysuje biały piksel na bieżącej pozycji głowy. Ponieważ tylko głowa i ogon węża się poruszają, to wystarczy, aby utrzymać węża w ruchu."
+ "Nowe narzędzia do badania kodu, włączając deasembler i szybki przełączalny przeglądarkę pamięci"
+ "Flaga Negative: Ustawiana gdy najbardziej znaczący bit (bit 7) wyniku jest 1. Używana do porównań liczb ze znakiem i wskazuje, czy wartość jest ujemna w reprezentacji dopełnienia do dwóch."
+ "Prawie wszystkie gry mają w sercu pętlę gry. Wszystkie pętle gry mają tę samą podstawową formę: akceptuj wejście użytkownika, aktualizuj stan gry i renderuj stan gry. Ta pętla nie jest inna."
+ "Wiadomości"
+ "Lokalizacje pamięci <tt>$01</tt> i <tt>$02</tt> zawierają odpowiednio wartości <tt>$05</tt> i <tt>$07</tt>. Pomyśl o <tt>($00,X)</tt> jako o <tt>($00 + X)</tt>. W tym przypadku <tt>X</tt> to <tt>$01</tt>, więc to upraszcza się do <tt>($01)</tt>. Stąd rzeczy postępują jak standardowe adresowanie pośrednie - dwa bajty na <tt>$01</tt> i <tt>$02</tt> (<tt>$05</tt> i <tt>$07</tt>) są wyszukiwane, aby utworzyć adres <tt>$0705</tt>. To jest adres, do którego rejestr <tt>Y</tt> został zapisany w poprzedniej instrukcji, więc rejestr <tt>A</tt> dostaje tę samą wartość co <tt>Y</tt>, choć przez znacznie bardziej okrężną drogę. Nie zobaczysz tego dużo."
+ "Mapa pamięci"
+ "Naprawiono wiele drobnych błędów, aby poprawić ogólną użyteczność"
+ "Główne ulepszenia UI wprowadzające nowoczesny przycisk Floating Action Button ze stanami dynamicznymi do intuicyjnej kontroli programu oraz całkowicie przeprojektowany widget debuggera używający nowoczesnych komponentów Adwaita."
+ "Line Buster 6502"
+ "Jasny styl"
+ "Uczenie się przez przykłady nigdy nie było łatwiejsze. Zanurz się w działającym kodzie, dostosuj go, zepsuj, napraw ponownie - tak uczyli się najlepsi programiści kiedyś!"
+ "Naucz się używać stosu z instrukcjami PHA i PLA"
+ "Naucz się programować mikroprocesor 6502."
+ "Poznaj historię komputerów podczas kodowania"
+ "Learn 6502 działa teraz także na Windowsie i macOS. Jeśli chcesz polecić go znajomemu, który nie korzysta z Linuxa, teraz jest to możliwe."
+ "Learn 6502 działa teraz na GNOME 50! Podziękowania dla Sabri Ünal za wniesienie aktualizacji środowiska uruchomieniowego."
+ "Naucz się Asemblera 6502"
+ "Ucz się"
+ "Błąd etykiet"
+ "Etykieta już zdefiniowana w linii %1$d: %2$s"
+ "Etykieta %1$s jest już używana jako symbol; proszę zmienić nazwę jednej z nich"
+ "Skakanie jest jak rozgałęzianie z dwiema głównymi różnicami. Po pierwsze, skoki nie są wykonywane warunkowo, a po drugie, przyjmują dwubajtowy adres absolutny. Dla małych programów ten drugi szczegół nie jest bardzo ważny, ponieważ zwykle będziesz używać etykiet, a asembler wyliczy prawidłową lokalizację pamięci z etykiety. Dla większych programów jednak skakanie jest jedynym sposobem na przejście z jednej sekcji kodu do innej."
+ "Skakanie"
+ "JSR/RTS"
+ "JMP"
+ "Wprowadzenie"
+ "Flaga Interrupt: Gdy ustawiona, maskuje (wyłącza) wszystkie maskowalne przerwania (IRQ). Mogą nadal występować tylko niemaskowalne przerwania (NMI). Używana do krytycznych sekcji kodu, które nie mogą być przerwane."
+ "Czcionka interfejsu"
+ "Interaktywne tutoriale prowadzą Cię od początkującego do zaawansowanego"
+ "Interaktywny tutorial"
+ "Instrukcje w języku asemblera są jak mały zestaw predefiniowanych funkcji. Wszystkie instrukcje przyjmują zero lub jeden argument. Oto trochę anotowanego kodu źródłowego, aby wprowadzić kilka różnych instrukcji:"
+ "Instrukcje"
+ "Inicjalizacja"
+ "Indirect: <tt>($c000)</tt>"
+ "Indirect indexed: <tt>($c0),Y</tt>"
+ "Indirect indexed jest jak indexed indirect, ale mniej szalony. Zamiast dodawać rejestr <tt>X</tt> do adresu <i>przed</i> dereferencją, adres strony zerowej jest dereferowany, a rejestr <tt>Y</tt> jest dodawany do wynikowego adresu."
+ "Adresowanie pośrednie używa adresu absolutnego do wyszukania innego adresu. Pierwszy adres daje najmniej znaczący bajt adresu, a następny bajt daje najbardziej znaczący bajt. To może być trudne do ogarnięcia, więc oto przykład:"
+ "Indeksowanie etykiet..."
+ "Indexed indirect: <tt>($c0,X)</tt>"
+ "Rejestr indeksowy Y: Używany do adresowania"
+ "Rejestr indeksowy X: Używany do adresowania"
+ "W tym małym tutorialu pokażę Ci, jak zacząć pisać język asemblera 6502. Procesor 6502 był masywny w latach siedemdziesiątych i osiemdziesiątych, zasilając słynne komputery jak <a href=\"https://pl.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://pl.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://pl.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://pl.wikipedia.org/wiki/Apple_II\">Apple II</a> i <a href=\"https://pl.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender w Futuramie <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">ma procesor 6502 za mózg</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Nawet Terminator był zaprogramowany w 6502</a>."
+ "W tym przykładzie <tt>$f0</tt> zawiera wartość <tt>$01</tt>, a <tt>$f1</tt> zawiera wartość <tt>$cc</tt>. Instrukcja <tt>JMP ($f0)</tt> powoduje, że procesor wyszukuje dwa bajty na <tt>$f0</tt> i <tt>$f1</tt> (<tt>$01</tt> i <tt>$cc</tt>) i łączy je, aby utworzyć adres <tt>$cc01</tt>, który staje się nowym licznikiem programu. Złóż i przejdź przez program powyżej, aby zobaczyć, co się dzieje. Będę mówił więcej o <tt>JMP</tt> w sekcji na temat <a href=\"#jumping\">Skakania</a>."
+ "W tym przypadku <tt>($01)</tt> wyszukuje dwa bajty na <tt>$01</tt> i <tt>$02</tt>: <tt>$03</tt> i <tt>$07</tt>. Tworzą one adres <tt>$0703</tt>. Wartość rejestru <tt>Y</tt> jest dodawana do tego adresu, aby dać ostateczny adres <tt>$0704</tt>."
+ "W tym asemblerze możemy definiować opisowe stałe (lub symbole), które reprezentują liczby. Reszta kodu może wtedy po prostu używać stałych zamiast literalnej liczby, co natychmiast czyni oczywistym, z czym mamy do czynienia. Możesz używać liter, cyfr i podkreślników w nazwie."
+ "W edytorze <b>wpisz</b> (nie wklejaj) następujący kod:"
+ "W języku asemblera zwykle używa się etykiet z instrukcjami rozgałęziania. Gdy jednak są składane, ta etykieta jest konwertowana na jednobajtowe względne offset (liczbę bajtów do przejścia do tyłu lub do przodu od następnej instrukcji), więc instrukcje rozgałęziania mogą tylko iść do przodu i do tyłu około 256 bajtów. To oznacza, że mogą być używane tylko do poruszania się po lokalnym kodzie. Do poruszania się dalej będziesz potrzebować instrukcji skoku."
+ "Poprawiono wydajność konsoli gry dla płynniejszej rozgrywki"
+ "Poprawiony ekran gry i sterowanie dla urządzeń mobilnych"
+ "Poprawione opisy, aby były bardziej przyjazne dla użytkowników nietechnicznych"
+ "Implicit"
+ "Immediate: <tt>#$c0</tt>"
+ "Adresowanie natychmiastowe nie odnosi się ściśle do adresów pamięci — w tym trybie używane są rzeczywiste wartości. Na przykład <tt>LDX #$01</tt> ładuje wartość <tt>$01</tt> do rejestru <tt>X</tt>. To zupełnie co innego niż instrukcja zero page <tt>LDX $01</tt>, która ładuje do rejestru <tt>X</tt> wartość zlokalizowaną pod adresem pamięci <tt>$01</tt>."
+ "Jeśli językiem systemu jest chiński, aplikacja znów wyświetla się po chińsku. Wcześniej przez pomyłkę wracała do angielskiego."
+ "Jeśli Twój przykład jest oparty na lub inspirowany innym przykładem, możesz podać adres źródłowy (URL)."
+ "Jeśli mówisz jednym z wymienionych języków, pomóż przejrzeć lub poprawić tłumaczenia. Możesz przyczynić się poprzez linki w aplikacji, naszą platformę tłumaczeń lub otwierając zgłoszenie."
+ "Jeśli wynik dodawania jest większy niż pojedynczy bajt, adres zawija się. Na przykład:"
+ "IDE"
+ "Nie będę wyjaśniać w głębi, jak działa każdy z kierunków, ale powyższe wyjaśnienie powinno dać Ci wystarczająco dużo, aby to rozgryźć przy odrobinie studiowania."
+ "Ukryty"
+ "Wygenerowano hexdump."
+ "Hexdump"
+ "Monitor heksadecymalny"
+ "Oto przykład. Zauważ, że natychmiastowe operandy są nadal poprzedzone <tt>#</tt>."
+ "Pomoc"
+ "Hebrajski to także nasz pierwszy język pisany od prawej do lewej: dzięki testom i wkładowi Menachema aplikacja obsługuje teraz układy od prawej do lewej i jest przygotowana na kolejne języki RTL."
+ "Zielony"
+ "Świetny początek – pierwszy rozdział masz już za sobą!"
+ "Masz swoją własną fajną kreację 6502? Podziel się nią ze społecznością! Możesz teraz przesyłać przykłady kodu bezpośrednio z aplikacji. Wystarczy nacisnąć przycisk udostępniania, a automatycznie utworzymy dla Ciebie zgłoszenie i pull request na GitHub."
+ "Masz fajny przykład 6502?\nPodziel się nim ze społecznością!"
+ "Przechodzenie między sekcjami jest bardziej skomplikowane, ponieważ musimy również wziąć pod uwagę najbardziej znaczący bajt. Na przykład, schodzenie w dół z <tt>$02e1</tt> powinno prowadzić do <tt>$0301</tt>. Na szczęście jest to dość łatwe do wykonania. Dodanie <tt>$20</tt> do <tt>$e1</tt> daje <tt>$01</tt> i ustawia bit przeniesienia. Jeśli bit przeniesienia był ustawiony, wiemy, że musimy również zwiększyć najbardziej znaczący bajt."
+ "Niemiecki i hiszpański zostały zatwierdzone przez współtwórców. Inne języki to szkice wspomagane przez AI i wymagają walidacji ludzkiej."
+ "Gry automatycznie pauzują przy przełączaniu między ekranami"
+ "Naciśnięto klawisz gamepada:"
+ "GNOME"
+ "GNOME"
+ "W pełni skomentowana wersja gry Snake"
+ "Pełna pamięć ($0000-$FFFF)"
+ "Znaleziono %1$d etykiet."
+ "Znaleziono %1$d etykietę."
+ "Dla Linuxa jest teraz także AppImage: jeden plik, bez instalacji, przydatny w dystrybucji, dla której nie przygotowujemy pakietu."
+ "Czcionka"
+ "Podążaj za stylem systemu"
+ "Naprawiono błąd kompilacji na PostmarketOS, poprawiając kompatybilność mobilną"
+ "Naprawiono problem, w którym przycisk wstecz w sekcji nauki był zawsze widoczny w trybie desktopowym i tabletowym, nawet gdy żadna podstrona nie była otwarta."
+ "Po pierwsze, <tt>readkeys</tt> sprawdza, czy został naciśnięty jeden z klawiszy kierunkowych (W, A, S, D) i jeśli tak, odpowiednio ustawia kierunek węża. Następnie, <tt>checkCollision</tt> sprawdza, czy wąż zderzył się z sobą lub jabłkiem. <tt>updateSnake</tt> aktualizuje wewnętrzną reprezentację węża, na podstawie jego kierunku. Następnie jabłko i wąż są rysowane. Na koniec <tt>spinWheels</tt> sprawia, że procesor wykonuje jakąś pracę, aby gra nie działała zbyt szybko. Pomyśl o tym jak o komendzie sleep. Gra działa dalej, dopóki wąż nie zderzy się ze ścianą lub sobą."
+ "Najpierw ładujemy wartość <tt>$08</tt> do rejestru <tt>X</tt>. Następna linia to etykieta. Etykiety po prostu oznaczają pewne punkty w programie, abyśmy mogli do nich wrócić później. Po etykiecie zmniejszamy <tt>X</tt>, przechowujemy w <tt>$0200</tt> (lewy górny piksel), a następnie porównujemy z wartością <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> porównuje wartość w rejestrze <tt>X</tt> z inną wartością. Jeśli dwie wartości są równe, flaga <tt>Z</tt> jest ustawiana na <tt>1</tt>, w przeciwnym razie na <tt>0</tt>."
+ "Pierwszy wiersz: <tt>$0200</tt>-<tt>$021F</tt>, drugi wiersz: <tt>$0220</tt>-<tt>$023F</tt>, itd."
+ "Pierwsze wydanie Learn 6502 Assembly dla GNOME"
+ "Na koniec bajt <tt>$03</tt> zawiera bieżącą długość węża, w kategoriach bajtów w pamięci (więc długość 4 oznacza 2 piksele)."
+ "Wypełnij informacje o Twoim przykładzie 6502, aby podzielić się nim ze społecznością"
+ "Plik \"%1$s\" ma niezapisane zmiany"
+ "Nie udało się skopiować do schowka"
+ "Ćwiczenia"
+ "Ćwiczenie"
+ "Wykonuj instrukcje jedna po drugiej zamiast ciągle"
+ "Przykłady"
+ "Przykład przesłany do recenzji"
+ "Chociaż będzie to prosta wersja, kod będzie znacznie większy niż wszystkie poprzednie przykłady. Będziemy musieli śledzić kilka lokalizacji pamięci razem dla różnych aspektów gry. Możemy nadal robić niezbędną księgowość w całym programie sami, jak wcześniej, ale na większą skalę staje się to szybko nużące i może również prowadzić do błędów, które trudno zauważyć. Zamiast tego pozwolimy teraz asemblerowi zrobić część nudnej pracy za nas."
+ "Parzysta czy nieparzysta"
+ "Wyposażony w tę wiedzę, powinieneś być w stanie zobaczyć, że instrukcja <tt>LDA #$01</tt> ładuje wartość heksadecymalną <tt>$01</tt> do rejestru <tt>A</tt>. W następnej sekcji wejdę w więcej szczegółów na temat rejestrów."
+ "Ulepszono wejście zakresu adresów monitora heksadecymalnego dla łatwiejszej edycji wartości"
+ "Ulepszona prezentacja aplikacji i dostępność"
+ "Włącz tryb krokowy"
+ "Włącz debugger"
+ "Każda sekcja (<tt>upKey</tt>, <tt>rightKey</tt> itp.) najpierw sprawdza, czy bieżący kierunek jest przeciwny do nowego kierunku. Wymaga to kolejnego małego objazdu."
+ "Gotowe"
+ "Organizacja wyświetlacza"
+ "Pamięć wyświetlacza ($0200-$05FF)"
+ "Odkryj fascynujący świat programowania klasycznych komputerów i konsol do gier! Naucz się języka asemblera 6502 - tego samego kodu, który napędzał ikoniczne systemy jak NES, Commodore 64 i Apple II."
+ "Odrzuć"
+ "Wygenerowano deasemblację."
+ "Zdeasemblowane"
+ "Wyłącz, aby poprawić wydajność"
+ "Dino Run"
+ "Opis"
+ "Flaga Decimal: Włącza tryb Binary Coded Decimal (BCD) dla operacji arytmetycznych. Gdy ustawiona, instrukcje ADC/SBC traktują wartości jako cyfry dziesiętne (0-9) zamiast binarne. Używana do obliczeń finansowych i arytmetyki dziesiętnej."
+ "Debugger aktualizuje się teraz tylko gdy jest widoczny, zmniejszając niepotrzebne przetwarzanie"
+ "Debugger"
+ "Debuguj swoje programy za pomocą narzędzi inspekcji w czasie rzeczywistym"
+ "Ustawienia debugowania"
+ "Debuguj"
+ "Ciemny styl"
+ "Tworzenie gry"
+ "Kopiuj do edytora"
+ "Kopiuj do schowka"
+ "Skopiowane do schowka"
+ "Kontynuuj"
+ "Potwierdź"
+ "Częste instrukcje"
+ "Skomentowana gra Snake"
+ "Paleta kolorów"
+ "Edytor kodu i wirtualna konsola gry"
+ "Kod skopiowany do edytora"
+ "Kod złożony pomyślnie, %1$d bajtów."
+ "Kod"
+ "Zmień jeden z pikseli, aby rysować w prawym dolnym rogu (lokalizacja pamięci <tt>$05ff</tt>)."
+ "Flaga przeniesienia (carry): Ustawiana, gdy dodawanie powoduje przeniesienie; czyszczona, gdy odejmowanie wymaga pożyczki. Używana do arytmetyki wielobajtowej i przesunięć/obrotów (BCS/BCC)."
+ "Anuluj"
+ "Przesyłając, zgadzasz się, że Twój przykład będzie objęty licencją <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Rozbij bloki paletką i piłką."
+ "Flaga Break: Ustawiana gdy wykonywana jest instrukcja BRK (Break). Używana do rozróżnienia między przerwaniem programowym (BRK) a przerwaniem sprzętowym. Pomaga zidentyfikować źródło przerwania w procedurach obsługi przerwań."
+ "Rozgałęzianie"
+ "Niebieski"
+ "Ponieważ stan gry jest przechowywany w kategoriach lokalizacji pikseli, renderowanie gry jest bardzo proste. Pierwsza podprogram, <tt>drawApple</tt>, jest niezwykle prosta. Ustawia <tt>Y</tt> na zero, ładuje losowy kolor do akumulatora, następnie przechowuje tę wartość w <tt>($00),y</tt>. <tt>$00</tt> to miejsce, gdzie przechowywana jest lokalizacja jabłka, więc <tt>($00),y</tt> dereferuje do tej lokalizacji pamięci. Przeczytaj sekcję \"Indirect indexed\" w <a href=\"#addressing\">Trybach adresowania</a> po więcej szczegółów."
+ "Wstecz"
+ "Autor"
+ "Na niskim poziomie ta podprogram jest nieco bardziej złożona. Najpierw długość jest ładowana do rejestru <tt>X</tt>, który następnie jest zmniejszany. Fragment poniżej pokazuje początkową pamięć dla węża."
+ "Pliki asemblera"
+ "Asembler"
+ "Składanie kodu ..."
+ "Złożono pomyślnie"
+ "Złóż następujący kod, następnie otwórz widok <b>Debuguj</b> i sprawdź <b>Hexdump</b>, aby zobaczyć złożony kod."
+ "Złóż kod, następnie otwórz widok <b>Debuguj</b> i przejdź przez kod krok po kroku, obserwując rejestry <tt>A</tt> i <tt>X</tt>. Coś trochę dziwnego dzieje się w linii <tt>ADC #$c4</tt>. Mogłeś oczekiwać, że dodanie <tt>$c4</tt> do <tt>$c0</tt> da <tt>$184</tt>, ale ten procesor daje wynik jako <tt>$84</tt>. Co się dzieje?"
+ "Złóż kod i użyj <b>Krok</b>, aby przejść przez te trzy instrukcje. <b>Monitor heksadecymalny</b> w widoku debuguj pokazuje sekcję pamięci i może pomóc wizualizować wykonywanie programów. <tt>STA $01</tt> przechowuje wartość rejestru <tt>A</tt> w lokalizacji pamięci <tt>$01</tt>, a <tt>ADC $01</tt> dodaje wartość przechowywaną w lokalizacji pamięci <tt>$01</tt> do rejestru <tt>A</tt>. <tt>$80 + $80</tt> powinno równać się <tt>$100</tt>, ale ponieważ jest to większe niż bajt, rejestr <tt>A</tt> jest ustawiany na <tt>$00</tt> i flaga carry jest ustawiana. Oprócz tego jednak ustawiana jest też flaga zero. Flaga zero jest ustawiana przez wszystkie instrukcje, gdzie wynik jest zerem."
+ "Złożenie nie powiodło się"
+ "Złóż"
+ "Jak wspomniano wcześniej, cztery kierunki są wewnętrznie reprezentowane przez liczby 1, 2, 4 i 8. Każda z tych liczb jest potęgą 2, zatem są reprezentowane przez liczbę binarną z pojedynczym <tt>1</tt>:"
+ "Dopóki poruszasz się w obrębie jednego z tych poziomych pasów, sprawy są proste. Na przykład, aby przesunąć się w prawo, po prostu zwiększ najmniej znaczący bajt (np. <tt>$0200</tt> staje się <tt>$0201</tt>). Aby pójść w dół, dodaj <tt>$20</tt> (np. <tt>$0200</tt> staje się <tt>$0220</tt>). Lewo i góra są odwrotnością."
+ "Jak zawsze, to wydanie zawiera wiele drobnych poprawek i usprawnień."
+ "Ulepszenia architektury umożliwiają lepszy podział kodu między platformami GNOME, Web i Android."
+ "Ustawienia wyglądu"
+ "Wygląd"
+ "Wszystkie liczby poprzedzone <tt>$</tt> w języku asemblera 6502 (i przez rozszerzenie, w tej książce) są w formacie heksadecymalnym (hex). Jeśli nie jesteś zaznajomiony z liczbami hex, polecam przeczytać <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">artykuł na Wikipedii</a>. Wszystko poprzedzone <tt>#</tt> jest literalną wartością liczbową. Każda inna liczba odnosi się do lokalizacji pamięci."
+ "Ważną rzeczą do zauważenia tutaj jest rozróżnienie między <tt>ADC #$01</tt> a <tt>ADC $01</tt>. Pierwsza dodaje wartość <tt>$01</tt> do rejestru <tt>A</tt>, ale druga dodaje wartość przechowywaną w lokalizacji pamięci <tt>$01</tt> do rejestru <tt>A</tt>."
+ "Również przydatne: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Prawie gotowe!"
+ "Wszystkie instrukcje obsługujące adresowanie absolutne (z wyjątkiem instrukcji skoku) mają również opcję przyjmowania jednobajtowego adresu. Ten typ adresowania nazywa się \"zero page\" - dostępna jest tylko pierwsza strona (pierwsze 256 bajtów) pamięci. Jest to szybsze, ponieważ trzeba wyszukać tylko jeden bajt, i zajmuje również mniej miejsca w złożonym kodzie."
+ "Wszystkie pliki"
+ "Po tym wartość <tt>2</tt> jest dodawana do akumulatora, aby utworzyć ostateczną liczbę losową w zakresie 2–5."
+ "Po początkowym bloku komentarzy (linie zaczynające się od średników), pierwsze dwie linie to:"
+ "Po wykryciu kolizji aktualizujemy lokalizację węża. Robi się to na wysokim poziomie w następujący sposób: Po pierwsze, przesuń każdą parę bajtów ciała o jedną pozycję w górę w pamięci. Po drugie, zaktualizuj głowę zgodnie z bieżącym kierunkiem. Na koniec, jeśli głowa jest poza granicami, obsłuż to jako kolizję. Ilustruję to trochę ascii art. Każda para nawiasów zawiera współrzędne x,y zamiast pary bajtów dla uproszczenia."
+ "Po ruchu w każdym kierunku musimy również sprawdzić, czy głowa nie wyjdzie poza granice. Jest to obsługiwane inaczej dla każdego kierunku. Dla lewej i prawej strony możemy sprawdzić, czy głowa skutecznie \"zawróciła\". Przechodzenie w prawo z <tt>$021f</tt> poprzez zwiększenie najmniej znaczącego bajtu doprowadziłoby do <tt>$0220</tt>, ale tak naprawdę jest to skok z ostatniego piksela pierwszego wiersza do pierwszego piksela drugiego wiersza. Tak więc, za każdym razem gdy poruszamy się w prawo, musimy sprawdzić, czy nowy najmniej znaczący bajt jest wielokrotnością <tt>$20</tt>. Robi się to za pomocą sprawdzenia bitów względem maski <tt>$1f</tt>. Mam nadzieję, że ilustracja poniżej pokaże Ci, jak maskowanie najniższych 5 bitów ujawnia, czy liczba jest wielokrotnością <tt>$20</tt> czy nie."
+ "Adwaita"
+ "Tryby adresowania"
+ "Tryby adresowania"
+ "Adres %1$s - nieznany opkod"
+ "Dostępne są również dodatkowe wejścia przycisków: przycisk A (klawisz Enter/Return, kod ASCII <tt>$0D</tt>) i przycisk B (klawisz spacji, kod ASCII <tt>$20</tt>). Mogą być używane do dodania większej interaktywności do Twoich gier. Do sterowania kierunkiem można używać zarówno klawiszy WASD, jak i klawiszy strzałek zamiennie."
+ "Dodano funkcję pomocy, aby ułatwić edycję kodu początkującym"
+ "Dodano zarządzanie plikami do zapisywania i ładowania Twoich programów"
+ "Dodaj więcej instrukcji, aby rysować dodatkowe piksele."
+ "Akumulator: Główny rejestr do obliczeń"
+ "Akcent: Żółty"
+ "Akcent: Cyjanowy"
+ "Akcent: Łupkowy"
+ "Akcent: Czerwony"
+ "Akcent: Fioletowy"
+ "Akcent: Różowy"
+ "Akcent: Pomarańczowy"
+ "Akcent: Zielony"
+ "Akcent: Niebieski"
+ "Kolor akcentu"
+ "Absolute: <tt>$c000</tt>"
+ "Absolute,X i absolute,Y: <tt>$c000,X</tt> i <tt>$c000,Y</tt>"
+ "O Learn 6502 Assembly"
+ "Pełna lista zestawu instrukcji 6502 jest <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">dostępna tutaj</a> i <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">tutaj</a> (zwykle odwołuję się do obu stron, ponieważ mają swoje mocne i słabe strony). Te strony szczegółowo opisują argumenty każdej instrukcji, których rejestrów używają i które flagi ustawiają. Są Twoją biblią."
+ "W Twojej przeglądarce otwarto zgłoszenie na GitHub. Przejrzyj i prześlij je tam, aby ukończyć swój wkład. Po zatwierdzeniu Twój przykład zostanie uwzględniony w następnej wersji.\n\nJeśli Twój przykład jest zbyt duży, kompletna zawartość zostanie skopiowana do schowka do ręcznego wklejenia w zgłoszenie na GitHub."
+ "<tt>init</tt> i <tt>loop</tt> to oba podprogramy. <tt>init</tt> inicjalizuje stan gry, a <tt>loop</tt> to główna pętla gry."
+ "<tt>checkSnakeCollision</tt> przechodzi przez segmenty ciała węża, sprawdzając każdą parę bajtów względem pary głowy. Jeśli jest dopasowanie, to koniec gry."
+ "<tt>a9</tt> i <tt>c9</tt> to opkody procesora dla natychmiastowo adresowanych <tt>LDA</tt> i <tt>CMP</tt> odpowiednio. <tt>01</tt> i <tt>02</tt> to argumenty tych instrukcji. <tt>d0</tt> to opkod dla <tt>BNE</tt>, a jego argument to <tt>02</tt>. To oznacza \"pomiń następne dwa bajty\" (<tt>85 22</tt>, złożona wersja <tt>STA $22</tt>). Spróbuj edytować kod tak, aby <tt>STA</tt> przyjmował dwubajtowy adres absolutny zamiast jednobajtowego adresu strony zerowej (np. zmień <tt>STA $22</tt> na <tt>STA $2222</tt>). Złóż ponownie kod i spójrz na hexdump - argument do <tt>BNE</tt> powinien teraz być <tt>03</tt>, ponieważ instrukcja, którą procesor pomija, jest teraz trzy bajty długa."
+ "<tt>X</tt> przechowuje kolor piksela, a <tt>Y</tt> przechowuje pozycję bieżącego piksela. Pierwsza pętla rysuje bieżący kolor jako piksel (przez rejestr <tt>A</tt>), wkłada kolor na stos, następnie zwiększa kolor i pozycję. Druga pętla zdejmuje ze stosu, rysuje zdjęty kolor jako piksel, następnie zwiększa pozycję. Jak można się spodziewać, tworzy to wzór lustrzany."
+ "<tt>SP</tt> to wskaźnik stosu. Jeszcze nie będę wchodzić w szczegóły stosu, ale zasadniczo ten rejestr jest zmniejszany za każdym razem, gdy bajt jest wkładany na stos, i zwiększany gdy bajt jest zdejmowany ze stosu."
+ "<tt>PC</tt> to licznik programu - w ten sposób procesor wie, w którym punkcie programu aktualnie się znajduje. To jak bieżący numer linii wykonywanego skryptu. W symulatorze kod jest składany rozpoczynając od lokalizacji pamięci <tt>$0600</tt>, więc <tt>PC</tt> zawsze tam się rozpoczyna."
+ "<tt>JSR</tt> i <tt>RTS</tt> (\"skok do podprogramu\" i \"powrót z podprogramu\") to dynamiczny duet, który zwykle zobaczysz używany razem. <tt>JSR</tt> jest używany do skoku z bieżącej lokalizacji do innej części kodu. <tt>RTS</tt> powraca do poprzedniej pozycji. To jest zasadniczo jak wywołanie funkcji i powrót."
+ "<tt>JMP</tt> to bezwarunkowy skok. Oto naprawdę prosty przykład, aby pokazać go w działaniu:"
+ "<tt>BCC</tt> i <tt>BCS</tt> (\"rozgałęzienie przy wyczyszczonym carry\" i \"rozgałęzienie przy ustawionym carry\") są używane do rozgałęzienia na fladze carry. Napisz program, który używa jednej z tych dwóch."
+ "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (pierwsze 256 bajtów, szybszy dostęp)"
+ "<b>Zero Page</b> (<tt>$c0</tt>): Dostęp do lokalizacji pamięci <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): Dodaj rejestr X/Y do adresu strony zerowej"
+ "<b>Z</b> (Zero): Ustawiana gdy wynik jest zerem"
+ "<b>X, Y</b>: Rejestry indeksowe do adresowania i liczenia"
+ "<b>W</b> lub klawisz strzałki w górę (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Ustawiana gdy operacja arytmetyczna powoduje signed overflow"
+ "<b>Stos</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Przechowaj rejestry w pamięci"
+ "<b>SP</b> (Stack Pointer): Wskazuje bieżącą pozycję stosu (rozpoczyna się od <tt>$FF</tt>)"
+ "<b>SBC wymaga ustawionego carry</b>: Ustaw <tt>C</tt> przed odejmowaniem (działa jak odwrotne pożyczanie). Wyczyszczona flaga <tt>C</tt> po SBC wskazuje, że wystąpiło pożyczanie."
+ "<b>S</b> lub klawisz strzałki w dół (<tt>$73</tt>)"
+ "<b>Relative</b> (<tt>label</tt>): Rozgałęzienie używa signed 8-bitowego offsetu od następnej instrukcji (−128…+127)"
+ "<b>Q</b> lub klawisz Enter/Return (<tt>$0D</tt>)"
+ "<b>Przechowywanie programu</b>: Rozpoczyna się od <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Włóż/pobierz akumulator na/z stosu"
+ "<b>PC</b> (Program Counter): Wskazuje następną instrukcję do wykonania"
+ "<b>N</b> (Negative): Ustawiana gdy bit 7 wyniku jest ustawiony"
+ "<b>LDA/LDX/LDY</b>: Załaduj rejestry"
+ "<b>JSR/RTS</b>: Skok do podprogramu / Powrót z podprogramu"
+ "<b>JMP</b>: Bezwarunkowy skok"
+ "<b>Indirect</b> (<tt>($c000)</tt>): Wyszukaj adres przechowywany w podanej lokalizacji"
+ "<b>Indirect Indexed</b> (<tt>($c0),Y</tt>): Użyj adresu strony zerowej jako wskaźnika do pobrania adresu bazowego, następnie dodaj Y do tej bazy"
+ "<b>Indexed Indirect</b> (<tt>($c0,X)</tt>): Dodaj X do adresu strony zerowej, następnie użyj wyniku jako wskaźnika do pobrania rzeczywistego adresu docelowego"
+ "<b>Immediate</b> (<tt>#$c0</tt>): Użyj rzeczywistej wartości"
+ "<b>INX/INY/DEX/DEY</b>: Zwiększ/zmniejsz rejestry"
+ "<b>I</b> (Interrupt): Ustawiana gdy przerwania są wyłączone"
+ "<b>E</b> lub klawisz spacji (<tt>$20</tt>)"
+ "<b>Pamięć wyświetlacza</b>: <tt>$0200</tt>-<tt>$05FF</tt> (używana do wyjścia ekranowego)"
+ "<b>Sterowanie kierunkiem</b>:"
+ "<b>D</b> lub klawisz strzałki w prawo (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Ustawiana gdy procesor jest w trybie BCD (Binary Coded Decimal)"
+ "<b>Operacje porównania</b>: <tt>CMP/CPX/CPY</tt> ustawiają <tt>N/Z/C</tt> jak odejmowanie (rejestr − pamięć) bez przechowywania wyniku."
+ "<b>C</b> (Carry): Ustawiana, gdy operacje arytmetyczne przepełniają bajt"
+ "<b>BEQ/BNE/BCC/BCS</b>: Rozgałęzienie jeśli równe/nie równe/przeniesienie wyczyszczone/przeniesienie ustawione"
+ "<b>B</b> (Break): Ustawiana gdy wykonana jest instrukcja BRK"
+ "<b>Przyciski akcji</b>:"
+ "<b>Absolute</b> (<tt>$c000</tt>): Dostęp do dowolnej lokalizacji pamięci"
+ "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Dodaj rejestr X/Y do adresu absolutnego"
+ "<b>ADC/SBC</b>: Dodaj/odejmij z przeniesieniem"
+ "<b>A</b> lub klawisz strzałki w lewo (<tt>$61</tt>)"
+ "<b>A</b> (Akumulator): Główny rejestr do obliczeń i manipulacji danymi"
+ "<b><tt>$f</tt></b>: Jasny szary (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Jasny niebieski (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Jasny zielony (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Szary (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Ciemny szary (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Jasny czerwony (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Ostatnio naciśnięty klawisz (kod ASCII)"
+ "<b><tt>$FE</tt></b>: Generator liczb losowych (czyta jako losową wartość 0-255)"
+ "<b><tt>$9</tt></b>: Brązowy (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Pomarańczowy (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Żółty (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Niebieski (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Zielony (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Fioletowy (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Cyjan (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Czerwony (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Biały (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Dane pozycji węża (głowa, segmenty ciała, ogon)"
+ "<b><tt>$0</tt></b>: Czarny (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Długość węża"
+ "<b><tt>$02</tt></b>: Kierunek węża (1=góra, 2=prawo, 4=dół, 8=lewo)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Pozycja jabłka"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> stworzył <a href=\"https://gist.github.com/wkjagt/9043907\">w pełni anotowany gist tego kodu źródłowego</a>, więc skorzystaj z niego, aby uzyskać więcej szczegółów."
+ "Język asemblera 6502 zawiera wiele instrukcji rozgałęziania, które wszystkie rozgałęziają się w zależności od tego, czy pewne flagi są ustawione czy nie. W tym przykładzie przyjrzymy się <tt>BNE</tt>: „Rozgałęzienie przy nie równości\"."
+ "Stos 6502 jest zapełniony! Zawracanie..."
+ "Wyczyszczono stos 6502! Zawracanie..."
+ "(W sumie, wiarygodne źródła mnie poinformowały, że procesory 6502 są jeszcze produkowane przez <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> i <a href=\"https://www.mouser.co.uk/c/?q=65C02\">sprzedawane do hobbystów</a>, zatem 6502 <i>nie</i> jest martwym językiem! Któż to mógł wiedzieć?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-pt-rBR/strings.xml b/packages/app-android/data/Android/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 00000000..25b01796
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Aprenda Assembly 6502"
+ "Aprenda Assembly 6502"
+ "Aprenda Assembly 6502"
+ "வணக்கம்! Estamos felizes em dar as boas-vindas à tradução em tâmil, contribuída por தமிழ்நேரம். நன்றி!"
+ "que representa as endereços de memória endereçadas indiretamente <tt>$0411</tt>, <tt>$0410</tt> e <tt>$040f</tt> (três pixels no meio da tela). Estou a insistir neste ponto, mas é importante compreender completamente como o endereçamento indireto funciona."
+ "wdm-output"
+ "programação"
+ "aprendizagem"
+ "por %1$s"
+ "_Preferências"
+ "Página zero: <tt>$c0</tt>"
+ "Página zero,Y: <tt>$c0,Y</tt>"
+ "Página zero,X: <tt>$c0,X</tt>"
+ "Utilização da página zero"
+ "Página Zero ($0000-$00FF)"
+ "Flag Zero: Definida quando o resultado de uma operação é zero. Essencial para ramificação condicional - a maioria das instruções de salto condicional (BEQ, BNE) verifique esta flag para determinar o fluxo do programa baseado se um valor é zero."
+ "seu arquivo tem alterações não salvas. As alterações serão perdidas se não as salvares."
+ "Já viste <tt>TAX</tt>. Provavelmente consegues adivinhar o que <tt>TAY</tt>, <tt>TXA</tt> e <tt>TYA</tt> fazem, mas escreve algum código para testar as suas suposições."
+ "Você apoiou este projeto de código aberto ao comprar o aplicativo. Obrigado!"
+ "Você pode pensar na tela como quatro faixas horizontais de 32 × 8 pixels. Estas faixas mapeiam-se para <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> e <tt>$0500-$05ff</tt>. As primeiras linhas de pixels são <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
+ "Amarelo"
+ "Escreva e edita código com um editor de código integrado"
+ "Em todos esses exemplos você pode achar útil usar o <b>Monitor Hex</b> na visão de depuração para observar a mudança da memória. Escolha uma região de memória na lista para ver essa seção — por exemplo, <b>Memória de Vídeo ($0200–$05FF)</b> para observar os pixels da tela, ou <b>Página Zero ($0000–$00FF)</b> para inspecionar os primeiros 256 bytes."
+ "Com endereçamento absoluto, a localização completa de memória é usada como argumento da instrução. Por exemplo:"
+ "Bem-vindo à tradução vietnamita, totalmente contribuída por Loc Huynh (hthienloc)."
+ "Bem-vindo à tradução polonesa, inicialmente contribuída por Micro Wave. Dziękujemy!"
+ "Já demos uma pequena olhada na seção de estado do processador (a parte com <tt>A</tt>, <tt>PC</tt>, etc.), mas o que é que tudo isso significa?"
+ "Adicionamos uma nova seção de Exemplos na aba Aprender, onde você pode explorar e executar programas 6502 totalmente comentados diretamente no aplicativo. Comece com nosso exemplo do jogo Snake e veja como esses pixels ganham vida!"
+ "Os valores <tt>$00</tt>-<tt>$0F</tt> representam 16 cores diferentes (<tt>$00</tt>=preto, <tt>$01</tt>=branco)"
+ "Usar cor primária personalizada"
+ "Usar cor de destaque personalizada"
+ "Atualizando o estado do jogo"
+ "Alterações não salvas"
+ "Ao contrário da página zero,Y, absoluto,Y não pode ser usado com <tt>STX</tt> mas pode ser usado com <tt>LDA</tt> e <tt>STA</tt>."
+ "Por baixo do capô: atualização para TypeScript 6, Vite 8 e outras atualizações de dependências para melhor desempenho e estabilidade."
+ "Impossível realocar código fora da memória de 64k"
+ "Impossível encontrar/analisar o endereço/etiqueta fornecido"
+ "Duas das instruções da pilha são <tt>PHA</tt> e <tt>PLA</tt>, \"push accumulator\" e \"pull accumulator\". Abaixo há um exemplo destas duas em ação."
+ "Dois novos programas de exemplo, e os dois vieram de vocês: Dino Run, de Jacob, e Line Buster 6502, de edit12. São os primeiros exemplos enviados pelo botão de compartilhar, e adoraríamos receber mais."
+ "Tutorial <sub>por <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, licenciado sob CC BY 4.0</sub>"
+ "Tutorial"
+ "Tente escrever trechos de código que usem cada um dos modos de endereçamento do 6502. Lembre-se: você pode usar o <b>Monitor Hex</b> na visão de depuração para observar uma seção da memória."
+ "Experimente programas de exemplo para o microprocessador 6502."
+ "Experimente programas de exemplo"
+ "Tente mudar a cor dos três pixels."
+ "Alternar Barra Lateral"
+ "Para testar se a direção é <tt>1</tt>, <tt>2</tt>, <tt>4</tt> ou <tt>8</tt>, o código desloca continuamente para a direita até que o transporte seja definido. Um <tt>LSR</tt> significa \"cima\", dois significa \"direita\", e assim por diante."
+ "Título"
+ "Esta versão traz temas vibrantes inspirados em dispositivos portáteis com cores personalizáveis. Introduzimos layouts adaptativos para tablet e computador que mantêm tudo à vista, perfeitos para aquelas sessões maratona de programação ao aprender a desenvolver jogos retro em assembly. Um grande agradecimento ao nosso novo colaborador @mmartinortiz pelas excelentes ideias de layout para computador. Também há algumas melhorias técnicas interessantes, como rigor TypeScript, esquemas de estilo GtkSourceView personalizados e controles de depuração melhorados para um desenvolvimento mais suave."
+ "Este é um pouco estranho. É como um cruzamento entre página zero,X e indireto. Basicamente, pegas no endereço de página zero, adicionas o valor do registro <tt>X</tt> a ele, depois usas isso para procurar um endereço de dois bytes. Por exemplo:"
+ "Isto carrega o valor <tt>$11</tt> no endereço de memória <tt>$10</tt>, o valor <tt>$10</tt> em <tt>$12</tt>, e <tt>$0f</tt> em <tt>$14</tt>. Depois carrega o valor <tt>$04</tt> em <tt>$11</tt>, <tt>$13</tt> e <tt>$15</tt>. Isto leva a memória a ficar assim:"
+ "É aqui que o endereçamento se torna interessante. Neste modo, é fornecido um endereço de página zero, e depois o valor do registro <tt>X</tt> é adicionado. Aqui está um exemplo:"
+ "Este é o equivalente de página zero,X, mas só pode ser usado com <tt>LDX</tt> e <tt>STX</tt>."
+ "Estas são as versões de endereçamento absoluto de página zero,X e página zero,Y. Por exemplo:"
+ "Há também uma razão muito prática: o desenvolvimento de jogos retro. A cena homebrew está viva e recomenda-se — novos jogos ainda são <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">lançados para o NES</a> (alguns até como cartuchos físicos) e para muitos outros sistemas clássicos; o NES é apenas um exemplo. Mesmo que o seu alvo seja algo como o SNES, começar com 6502 compensa: a CPU do SNES (65C816) é compatível com o 6502, por isso os fundamentos que aprende aqui — registros, modos de endereçamento e o conjunto de instruções principal — transitam diretamente."
+ "Então porquê 6502? Porque não uma linguagem assembly <i>útil</i>, como <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Bem, não acho que aprender x86 seja útil. Não acho que alguma vez tenha de <i>escrever</i> linguagem assembly no trabalho diário — para algumas pessoas é um exercício académico, algo para expandir a mente e o pensamento. O 6502 foi originalmente escrito numa era diferente, numa altura em que a maioria dos programadores escrevia assembly diretamente, em vez destas novas linguagens de alto nível. Por isso, foi concebido para ser escrito por humanos. As linguagens assembly mais modernas destinam-se a ser escritas por compiladores, então deixemos isso para eles. Além disso, o 6502 é <i>divertido</i>. Ninguém alguma vez chamou ao x86 <i>divertido</i>."
+ "A página zero da memória é usada para armazenar um número de variáveis de estado do jogo, conforme observado no bloco de comentários no topo do jogo. Tudo em <tt>$00</tt>, <tt>$01</tt> e <tt>$10</tt> para cima é um par de bytes que representa uma endereço de memória de dois bytes que será procurada usando endereçamento indireto. Estas endereços de memória serão todas entre <tt>$0200</tt> e <tt>$05ff</tt> - a seção de memória correspondente à console de jogo. Por exemplo, se <tt>$00</tt> e <tt>$01</tt> contivessem os valores <tt>$01</tt> e <tt>$02</tt>, estariam a referir-se ao segundo pixel da tela (<tt>$0201</tt> - lembre-se, o byte menos significativo vem primeiro no endereçamento indireto)."
+ "A pilha num processador 6502 é como qualquer outra pilha - os valores são empurrados para ela e retirados (\"puxados\" na terminologia 6502) dela. A profundidade atual da pilha é medida pelo ponteiro da pilha, um registro especial. A pilha vive na memória entre <tt>$0100</tt> e <tt>$01ff</tt>. O ponteiro da pilha é inicialmente <tt>$ff</tt>, que aponta para a endereço de memória <tt>$01ff</tt>. Quando um byte é empurrado para a pilha, o ponteiro da pilha torna-se <tt>$fe</tt>, ou endereço de memória <tt>$01fe</tt>, e assim por diante."
+ "A pilha"
+ "O jogo da cobrinha do tutorial"
+ "O resultado desta sub-rotina é carregar um byte aleatório em <tt>$00</tt> e um número aleatório entre 2 e 5 em <tt>$01</tt>. Como o byte menos significativo vem primeiro com endereçamento indireto, isto traduz-se num endereço de memória entre <tt>$0200</tt> e <tt>$05ff</tt>: o intervalo exato usado para desenhar a tela."
+ "O processador sabe para onde retornar porque <tt>JSR</tt> coloca o endereço menos um da próxima instrução na pilha antes de saltar para a localização fornecida. <tt>RTS</tt> retira esta localização, adiciona um a ela e salta para essa localização. Um exemplo:"
+ "O problema é que <tt>$184</tt> é demasiado grande para caber num único byte (o máximo é <tt>$FF</tt>), e os registros só podem conter um único byte. Mas não há problema; o processador não é realmente estúpido. Se estivesses a observar com atenção suficiente, terias notado que a flag de transporte foi definida como <tt>1</tt> após esta operação. É assim que sabes."
+ "O oposto de <tt>BNE</tt> é <tt>BEQ</tt>. Tente escrever um programa que use <tt>BEQ</tt>."
+ "O oposto de <tt>ADC</tt> é <tt>SBC</tt> (subtração com transporte). Escreva um programa que use esta instrução."
+ "O jogo de corrida offline do navegador, em Assembly 6502"
+ "A próxima sub-rotina, <tt>generateApplePosition</tt>, define a localização da maçã numa posição aleatória na tela. Primeiro, carrega um byte aleatório no acumulador (<tt>$fe</tt> é um gerador de números aleatórios neste simulador). Isto é armazenado em <tt>$00</tt>. Em seguida, um byte aleatório diferente é carregado no acumulador, que é então submetido a uma operação <tt>AND</tt> com o valor <tt>$03</tt>. Esta parte requer um pequeno desvio."
+ "A próxima sub-rotina, <tt>checkCollision</tt>, delega para <tt>checkAppleCollision</tt> e <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> apenas verifique se os dois bytes que contêm a localização da maçã correspondem aos dois bytes que contêm a localização da cabeça. Se corresponderem, o comprimento é aumentado e uma nova posição da maçã é gerada."
+ "A próxima linha, <tt>BNE decrement</tt>, deslocará a execução para a etiqueta decrement se a flag <tt>Z</tt> estiver definida como <tt>0</tt> (significando que os dois valores na comparação <tt>CPX</tt> não eram iguais), caso contrário não faz nada e armazenamos <tt>X</tt> em <tt>$0201</tt>, depois terminamos o programa."
+ "A próxima parte atualiza a cabeça da cobra dependendo da direção. Esta é provavelmente a parte mais complicada do código, e depende totalmente de como as endereços de memória são mapeadas para a tela, então vamos analisar isso com mais detalhe."
+ "O comprimento é inicializado para <tt>4</tt>, então <tt>X</tt> começa como <tt>3</tt>. <tt>LDA $10,x</tt> carrega o valor de <tt>$13</tt> em <tt>A</tt>, depois <tt>STA $12,x</tt> armazena este valor em <tt>$15</tt>. <tt>X</tt> é decrementado e repetimos o ciclo. Agora <tt>X</tt> é <tt>2</tt>, então carregamos <tt>$12</tt> e armazenamo-lo em <tt>$14</tt>. Isto repete-se enquanto <tt>X</tt> for positivo (<tt>BPL</tt> significa \"ramificar se positivo\")."
+ "A última sub-rotina, <tt>spinWheels</tt>, está lá apenas porque o jogo correria demasiado rápido de outra forma. Tudo o que <tt>spinWheels</tt> faz é contar <tt>X</tt> para baixo a partir de zero até atingir zero novamente. O primeiro <tt>dex</tt> dá a volta, fazendo <tt>X</tt> ficar <tt>#$ff</tt>."
+ "A última seção mostra as flags do processador. Cada flag é um bit, por isso todas as sete flags vivem num único byte. As flags são definidas pelo processador para dar informação sobre a instrução anterior. Mais sobre isso depois. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Leia mais sobre os registros e flags aqui</a>."
+ "O valor hexadecimal <tt>$03</tt> é representado em binário como <tt>00000011</tt>. O código de operação <tt>AND</tt> realiza um AND bit a bit do argumento com o acumulador. Por exemplo, se o acumulador contiver o valor binário <tt>10101010</tt>, então o resultado de <tt>AND</tt> com <tt>00000011</tt> será <tt>00000010</tt>."
+ "O hexadecimal deve parecer-se com isto:"
+ "O ciclo do jogo"
+ "Os primeiros dois bytes contêm a localização da maçã. Isto é atualizado sempre que a cobra come a maçã. O byte <tt>$02</tt> contém a direção atual. <tt>1</tt> significa para cima, <tt>2</tt> direita, <tt>4</tt> baixo e <tt>8</tt> esquerda. O raciocínio por detrás destes números ficará claro mais tarde."
+ "A primeira sub-rotina, <tt>readKeys</tt>, tem a tarefa de aceitar a entrada do usuário. A endereço de memória <tt>$ff</tt> contém o código ASCII da tecla mais recentemente pressionada neste simulador. O valor é carregado no acumulador e depois comparado com <tt>$77</tt> (o código hexadecimal para W), <tt>$64</tt> (D), <tt>$73</tt> (S) e <tt>$61</tt> (A). Se alguma destas comparações for bem-sucedida, o programa ramifica para a seção apropriada."
+ "A primeira linha mostra os registros <tt>A</tt>, <tt>X</tt> e <tt>Y</tt> (<tt>A</tt> é frequentemente chamado o \"acumulador\"). Cada registro contém um único byte. A maioria das operações trabalha com o conteúdo destes registros."
+ "A primeira instrução faz com que a execução salte para a etiqueta <tt>init</tt>. Isto define <tt>X</tt>, depois retorna para a próxima instrução, <tt>JSR loop</tt>. Isto salta para a etiqueta <tt>loop</tt>, que incrementa <tt>X</tt> até ser igual a <tt>$05</tt>. Depois disso, retornamos à próxima instrução, <tt>JSR end</tt>, que salta para o fim do arquivo. Isto ilustra como <tt>JSR</tt> e <tt>RTS</tt> podem ser usados em conjunto para criar código modular."
+ "O efeito disto é mascarar os dois bits menos significativos do acumulador, definindo os outros como zero. Isto converte um número no intervalo de 0–255 para um número no intervalo de 0–3."
+ "O bloco de código abaixo contém todo o código-fonte do jogo. Vou explicar como funciona nas seções seguintes."
+ "A tela preta do console de jogo deve agora mostrar três \"pixels\" coloridos no canto superior esquerdo."
+ "O aplicativo foi projetado para a fonte de interface do GNOME. Em outros sistemas, ele é desenhado com a fonte desse sistema, que geralmente é menor."
+ "O registro de Índice Y é similar a X e não tem funções especiais. Comumente usado para endereçamento indexado e movimento de dados."
+ "O registro de Índice X é usado para modos de endereçamento indexados e operações de contagem. Pode conter contadores de ciclo, índices de array, e é essencial para acessar endereços de memória relativas a um endereço base usando X como deslocamento. Especial: TSX/TXS transferem X para/de o ponteiro da pilha."
+ "O Ponteiro da Pilha gere a pilha de chamadas para sub-rotinas e interrupções. Começa em $FF (topo da pilha) e cresce para baixo. Usado para operações PUSH/PULL, chamadas JSR/RTS, e tratamento de interrupções. Crítico para chamadas de funções aninhadas."
+ "O Contador de Programa contém o endereço de memória da próxima instrução a executar. Incrementa automaticamente após cada instrução e pode ser modificado por saltos, ramificações, chamadas e retornos. Essencial para controle do fluxo do programa e depuração."
+ "O Acumulador (A) é o registro principal para operações aritméticas e lógicas. Todos os cálculos básicos como ADD, SUBTRACT, AND, OR, etc. usam este registro. É o registro mais frequentemente usado na programação assembly 6502."
+ "A própria sub-rotina <tt>loop</tt> apenas chama um número de sub-rotinas sequencialmente, antes de voltar a si própria:"
+ "A sub-rotina <tt>init</tt> adia para duas sub-rotinas, <tt>initSnake</tt> e <tt>generateApplePosition</tt>. <tt>initSnake</tt> define a direção da cobra, comprimento, e depois carrega as endereços de memória iniciais da cabeça da cobra e do corpo. O par de bytes em <tt>$10</tt> contém a localização da tela da cabeça, o par em <tt>$12</tt> contém a localização do segmento único do corpo, e <tt>$14</tt> contém a localização da cauda (a cauda é o último segmento do corpo e é desenhada a preto para manter a cobra a mover-se). Isto acontece no seguinte código:"
+ "O opcode <tt>BIT</tt> é similar a <tt>AND</tt>, mas o cálculo é apenas usado para definir a flag zero - o resultado real é descartado. A flag zero é definida apenas se o resultado de fazer AND do acumulador com o argumento for zero. Quando estamos a olhar para potências de dois, a flag zero só será definida se os dois números não forem os mesmos. Por exemplo, <tt>0001 AND 0001</tt> não é zero, mas <tt>0001 AND 0010</tt> é zero."
+ "O 6502 usa um barramento de endereços de 16-bit, o que significa que há 65536 bytes de memória disponíveis para o processador. Lembre-se que um byte é representado por dois caracteres hexadecimais, por isso as endereços de memória são geralmente representadas como <tt>$0000 - $ffff</tt>. Há várias formas de se referir a estas endereços de memória, como detalhado abaixo."
+ "Obrigado por usar software de código aberto."
+ "Testa o bit 0 de A com LSR e BCC e coloca 1 ou 0 em A como resultado"
+ "Teste suas criações no console de jogos virtual"
+ "Tervetuloa! Temos o prazer de dar as boas-vindas à tradução finlandesa, gentilmente contribuída por Jiri Grönroos. Kiitos!"
+ "Azul-petróleo"
+ "Fonte do sistema, tamanho do GNOME"
+ "Padrão do sistema"
+ "Erro de sintaxe na linha %1$d: %2$s"
+ "Apoiador"
+ "Apoiar"
+ "Enviar"
+ "Estilo"
+ "Parado"
+ "Guia passo a passo de assembly 6502"
+ "Passo"
+ "Flags de Estado"
+ "Ponteiro da Pilha: Aponta para a posição da pilha"
+ "Exemplo de Pilha"
+ "Pilha ($0100-$01FF)"
+ "Localizações Especiais de Memória (no Simulador)"
+ "URL de origem"
+ "Algumas instruções não lidam com endereços de memória (por exemplo, <tt>INX</tt> - incrementar o registro <tt>X</tt>). Diz-se que estas têm endereçamento implícito - o argumento está implícito na instrução."
+ "Então, por que quererias aprender 6502? É uma linguagem morta, não é? Bem, o latim também é. E ainda o ensinam. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Então, o que esse programa está fazendo de fato? Vamos percorrê-lo passo a passo. Clique em <b>Reiniciar</b> e depois use <b>Passo</b> para executar o programa uma instrução de cada vez. A visão <b>Depurar</b> mostra os registros e a memória — é uma aba separada em uma janela pequena e o painel abaixo do console do jogo em uma janela larga. Clique em <b>Passo</b> uma vez e você notará na visão de depuração que <tt>A=</tt> mudou de <tt>$00</tt> para <tt>$01</tt>, e <tt>PC=</tt> mudou de <tt>$0600</tt> para <tt>$0602</tt>."
+ "Assim, a instrução <tt>STA $0200</tt> armazena o valor do registro <tt>A</tt> no endereço de memória <tt>$0200</tt>. Clique em <b>Step</b> mais quatro vezes para executar o resto das instruções, mantendo o olho no registro <tt>A</tt> à medida que muda."
+ "Assim, olhando para <tt>upKey</tt>, se a direção atual é para baixo (4), o teste de bits será zero. <tt>BNE</tt> significa \"ramificar se a flag zero estiver limpa\", então neste caso ramificaremos para <tt>illegalMove</tt>, que simplesmente retorna da sub-rotina. Caso contrário, a nova direção (1 neste caso) é armazenada no endereço de memória apropriada."
+ "Vamos mergulhar! Este aplicativo contém um <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">Assemblador e Simulador 6502 em JavaScript</a> que adaptei para este tutorial interativo. Clique no botão <b>Copiar</b> no bloco de código abaixo para copiar o código de exemplo para o editor. Depois use <b>Montar</b> para montar o código e <b>Executar</b> para executá-lo. Você encontra essas ações como botões ou no menu."
+ "Até agora só conseguimos escrever programas básicos sem qualquer lógica de ramificação. Vamos mudar isso."
+ "Uso de Memória do Jogo Snake"
+ "Dados do Jogo Snake ($00-$15)"
+ "Jogo da Cobrinha"
+ "Cinza"
+ "Falha do simulador"
+ "Simulador"
+ "Os exemplos de código compartilhados agora incluem informações de licença CC-BY-4.0, esclarecendo como a comunidade pode usar e construir sobre suas contribuições."
+ "Compartilhe seu exemplo"
+ "Compartilhar exemplo"
+ "Compartilhar"
+ "Shalom! Estamos felizes em dar as boas-vindas à tradução em hebraico, totalmente contribuída por Menachem (naattxx). Toda raba!"
+ "Falando sério, acho que é valioso ter uma compreensão da linguagem assembly. A linguagem assembly é o nível mais baixo de abstração nos computadores - o ponto em que o código ainda é legível. A linguagem assembly traduz-se diretamente nos bytes que são executados pelo processador do seu computador. Se você entende como funciona, basicamente você se tornou um <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">mago</a> da computação."
+ "Selamat datang! Também damos as boas-vindas à tradução em indonésio, gentilmente contribuída por Arif Budiman. Terima kasih!"
+ "Tela mapeia para a faixa de memória <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Conheça muitas traduções novas: Francês, Interlíngua, Português, Português (Brasil), Holandês, Espanhol, Ucraniano, Japonês e Chinês (Simplificado)"
+ "Salvo como %1$s"
+ "Salvar alterações?"
+ "Salvar como..."
+ "Salvar Arquivo Assembly"
+ "Salvar"
+ "Executando jogo Snake"
+ "Executar"
+ "Reescreva o primeiro exemplo nesta seção para usar o registro <tt>Y</tt> em vez do registro <tt>X</tt>."
+ "Veja como seu exemplo aparecerá para os outros. Clicar em <b>Enviar</b> criará um issue no GitHub. Você precisará fazer login com sua conta do GitHub para completar o envio."
+ "Continuar"
+ "Reiniciar"
+ "Renderizando o jogo"
+ "Relativo: <tt>$c0</tt> (ou rótulo)"
+ "O endereçamento relativo é usado para instruções de ramificação. Estas instruções tomam um único byte, que é usado como um deslocamento a partir da instrução seguinte."
+ "registros e flags"
+ "registros"
+ "Reduzida a faixa de endereços padrão do monitor hex para melhor eficiência"
+ "Vermelho"
+ "Lendo a entrada"
+ "Aleatório/Entrada ($FE-$FF)"
+ "Sair"
+ "Dicas Rápidas"
+ "Roxo"
+ "Programa consoles de jogos vintage"
+ "Programa pausado"
+ "Programa concluído. Reinicie para percorrer o programa passo a passo novamente."
+ "Programa concluído em PC=$%1$s"
+ "Programa concluído"
+ "Armazenamento de Programa ($0600-$FFFF)"
+ "Contador de Programa: Aponta para a próxima instrução"
+ "registro de Estado do Processador"
+ "Flags do Processador"
+ "Primária: Amarelo"
+ "Primária: Azul-petróleo"
+ "Primária: Cinza"
+ "Primária: Vermelho"
+ "Primária: Roxo"
+ "Primária: Rosa"
+ "Primária: Laranja"
+ "Primária: Verde"
+ "Primária: Azul"
+ "Cor primária"
+ "Anterior"
+ "Visualizar seu exemplo"
+ "Visualizar"
+ "Pressione <b>Step</b> novamente para executar a segunda instrução. O pixel superior esquerdo do console de jogo deve agora ser branco. Este simulador usa as endereços de memória <tt>$0200</tt> a <tt>$05ff</tt> para desenhar pixels no seu tela. Os valores <tt>$00</tt> a <tt>$0f</tt> representam 16 cores diferentes (<tt>$00</tt> é preto e <tt>$01</tt> é branco), por isso armazenar o valor <tt>$01</tt> no endereço de memória <tt>$0200</tt> desenha um pixel branco no canto superior esquerdo. É mais simples do que como um computador real emitiria vídeo, mas serve por agora."
+ "Pré-processamento..."
+ "Jogar"
+ "Rosa"
+ "Perfeito para hobbistas, estudantes, e qualquer pessoa curiosa sobre como os computadores realmente funcionam por baixo!"
+ "Pausar"
+ "Flag Overflow: Definida quando uma operação aritmética produz um resultado que não pode ser representado na faixa de 8 bits com sinal (-128 a +127). Usada para detetar erros aritméticos com sinal nos cálculos."
+ "Estrutura geral"
+ "Ramificação fora do alcance na linha %1$d (ramificações estão limitadas a -128 a +127): %2$s"
+ "O nosso primeiro programa"
+ "Organizado como quatro tiras horizontais de 32×8 pixels"
+ "Laranja"
+ "Configuração Flatpak otimizada removendo permissões desnecessárias"
+ "Aberto %1$s"
+ "Abrir..."
+ "Código aberto"
+ "Abrir Arquivo Assembly"
+ "Uma vez que os valores foram deslocados para baixo na cobra, temos de descobrir o que fazer com a cabeça. A direção é primeiro carregada em <tt>A</tt>. <tt>LSR</tt> significa \"deslocamento lógico para a direita\", ou \"deslocar todos os bits uma posição para a direita\". O bit menos significativo é deslocado para a flag carry, então se o acumulador for <tt>1</tt>, após <tt>LSR</tt> é <tt>0</tt>, com a flag carry definida."
+ "No reset (simulador): <tt>P = $30</tt> (bit5 e <tt>B</tt> definidos; <tt>D</tt> e <tt>I</tt> limpos)"
+ "OK"
+ "Agora, vamos pôr todo este conhecimento em bom uso, e fazer um jogo! Vamos fazer uma versão muito simples do jogo clássico \'Snake\'."
+ "Não é necessária experiência prévia em programação. Comece com lições interativas e desenvolva as suas competências passo a passo."
+ "Nenhum código para executar."
+ "Nenhum endereço ou rótulo fornecido"
+ "Em seguida vem <tt>drawSnake</tt>. Isto também é bastante simples - primeiro retiramos a cauda e depois desenhamos a cabeça. <tt>X</tt> é definido para o comprimento da cobra, então podemos indexar para o pixel correto, e definimos <tt>A</tt> para zero e depois realizamos a escrita usando o modo de endereçamento indireto indexado. Depois recarregamos <tt>X</tt> para indexar para a cabeça, definimos <tt>A</tt> para um e armazenamo-lo em <tt>($10,x)</tt>. <tt>$10</tt> armazena a localização de dois bytes da cabeça, então isto desenha um pixel branco na posição atual da cabeça. Como apenas a cabeça e a cauda da cobra se movem, isto é suficiente para manter a cobra a mover-se."
+ "Novas ferramentas para examinar seu código, incluindo desmontador e visualizador de memória alternável rápido"
+ "Flag Negativa: Definida quando o bit mais significativo (bit 7) do resultado é 1. Usada para comparações de números com sinal e indica se um valor é negativo na representação de complemento de dois."
+ "Quase todos os jogos têm no seu coração um ciclo de jogo. Todos os ciclos de jogo têm a mesma forma básica: aceitar entrada do usuário, atualizar o estado do jogo, e renderizar o estado do jogo. Este ciclo não é diferente."
+ "Mensagens"
+ "As endereços de memória <tt>$01</tt> e <tt>$02</tt> contêm os valores <tt>$05</tt> e <tt>$07</tt> respectivamente. Pense em <tt>($00,X)</tt> como <tt>($00 + X)</tt>. Neste caso <tt>X</tt> é <tt>$01</tt>, então isto simplifica para <tt>($01)</tt>. A partir daqui as coisas procedem como o endereçamento indireto padrão - os dois bytes em <tt>$01</tt> e <tt>$02</tt> (<tt>$05</tt> e <tt>$07</tt>) são procurados para formar o endereço <tt>$0705</tt>. Este é o endereço onde o registro <tt>Y</tt> foi armazenado na instrução anterior, então o registro <tt>A</tt> recebe o mesmo valor que <tt>Y</tt>, embora através de uma rota muito mais tortuosa. Você não verá isso com frequência."
+ "Mapa de Memória"
+ "Muitos bugs menores foram corrigidos para melhorar a usabilidade geral"
+ "Principais melhorias na UI introduzindo um moderno Botão de Ação Flutuante com estados dinâmicos para controle intuitivo do programa, e um widget de depuração completamente redesenhado usando componentes Adwaita modernos."
+ "Line Buster 6502"
+ "Estilo claro"
+ "Aprender com exemplos nunca foi tão fácil. Mergulhe em código funcional, modifique-o, quebre-o, conserte-o novamente - foi assim que os melhores programadores aprenderam antigamente!"
+ "Aprenda a usar a pilha com as instruções PHA e PLA"
+ "Aprenda a programar o microprocessador 6502."
+ "Aprenda sobre a história dos computadores enquanto programa"
+ "O Learn 6502 agora roda também no Windows e no macOS. Se você queria indicá-lo a um amigo que não usa Linux, agora pode."
+ "O Learn 6502 agora roda no GNOME 50! Obrigado a Sabri Ünal por contribuir com a atualização do runtime."
+ "Aprenda Assembly 6502"
+ "Aprender"
+ "Falha nos rótulos"
+ "Rótulo já definido na linha %1$d: %2$s"
+ "O rótulo %1$s já está a ser usado como símbolo; por favor renomeia um deles"
+ "Saltar é como ramificar com duas diferenças principais. Primeiro, os saltos não são executados condicionalmente, e segundo, eles tomam um endereço absoluto de dois bytes. Para programas pequenos, este segundo detalhe não é muito importante, pois você vai usar principalmente rótulos, e o assemblador calcula a endereço de memória correta a partir do rótulo. Para programas maiores, porém, saltar é a única forma de se mover de uma seção do código para outra."
+ "Saltando"
+ "JSR/RTS"
+ "JMP"
+ "Introdução"
+ "Flag de Interrupção: Quando definida, mascara (desativa) todas as interrupções mascaráveis (IRQ). Apenas as Interrupções Não-Mascaráveis (NMI) podem ainda ocorrer. Usada para seções críticas de código que não devem ser interrompidas."
+ "Fonte da interface"
+ "Tutoriais interativos guiam você do iniciante ao avançado"
+ "Tutorial interativo"
+ "As instruções na linguagem assembly são como um pequeno conjunto de funções predefinidas. Todas as instruções tomam zero ou um argumento. Aqui está algum código fonte anotado para introduzir algumas instruções diferentes:"
+ "Instruções"
+ "Inicialização"
+ "Indireto: <tt>($c000)</tt>"
+ "Indireto indexado: <tt>($c0),Y</tt>"
+ "Indireto indexado é como indexado indireto mas menos louco. Em vez de adicionar o registro <tt>X</tt> ao endereço <i>antes</i> da dereferência, o endereço da página zero é dereferenciado, e o registro <tt>Y</tt> é adicionado ao endereço resultante."
+ "O endereçamento indireto usa um endereço absoluto para procurar outro endereço. O primeiro endereço dá o byte menos significativo do endereço, e o byte seguinte dá o byte mais significativo. Isso pode ser difícil de compreender, por isso aqui está um exemplo:"
+ "Indexando rótulos..."
+ "Indexado indireto: <tt>($c0,X)</tt>"
+ "registro de índice Y: Usado para endereçamento"
+ "registro de índice X: Usado para endereçamento"
+ "Neste pequeno tutorial vou mostrar a você como começar a escrever linguagem assembly 6502. O processador 6502 foi um gigante nos anos 70 e 80, alimentando computadores famosos como o <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a> e o <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. O Bender do Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">tem um processador 6502 como cérebro</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Até o Exterminador foi programado em 6502</a>."
+ "Neste exemplo, <tt>$f0</tt> contém o valor <tt>$01</tt> e <tt>$f1</tt> contém o valor <tt>$cc</tt>. A instrução <tt>JMP ($f0)</tt> faz com que o processador procure os dois bytes em <tt>$f0</tt> e <tt>$f1</tt> (<tt>$01</tt> e <tt>$cc</tt>) e os junte para formar o endereço <tt>$cc01</tt>, que se torna o novo contador de programa. Monte e percorre passo a passo o programa acima para ver o que acontece. Falarei mais sobre <tt>JMP</tt> na seção sobre <a href=\"#jumping\">Saltar</a>."
+ "Neste caso, <tt>($01)</tt> procura os dois bytes em <tt>$01</tt> e <tt>$02</tt>: <tt>$03</tt> e <tt>$07</tt>. Estes formam o endereço <tt>$0703</tt>. O valor do registro <tt>Y</tt> é adicionado a este endereço para dar o endereço final <tt>$0704</tt>."
+ "Neste assembler, podemos definir constantes descritivas (ou símbolos) que representam números. O resto do código pode então simplesmente usar as constantes em vez do número literal, o que imediatamente torna óbvio com o que estamos a lidar. Você pode usar letras, dígitos e underscores num nome."
+ "No editor <b>escreve</b> (não coles) o seguinte código:"
+ "Na linguagem assembly, normalmente você vai usar rótulos com instruções de ramificação. Quando montado, no entanto, este rótulo é convertido num deslocamento relativo de um byte (um número de bytes para ir para trás ou para a frente a partir da próxima instrução) pelo que as instruções de ramificação só podem ir para a frente e para trás cerca de 256 bytes. Isto significa que só podem ser usadas para se moverem em torno do código local. Para ir mais longe precisarás de usar as instruções de salto."
+ "Melhorado o desempenho do console de jogos para uma jogabilidade mais suave"
+ "Melhorada a tela do jogo e os controles para dispositivos móveis"
+ "Melhoradas as descrições para serem mais acolhedoras para usuários não técnicos"
+ "Implícito"
+ "Imediato: <tt>#$c0</tt>"
+ "O endereçamento imediato não trata estritamente de endereços de memória - este é o modo onde valores reais são usados. Por exemplo, <tt>LDX #$01</tt> carrega o valor <tt>$01</tt> no registro <tt>X</tt>. Isto é muito diferente da instrução da página zero <tt>LDX $01</tt> que carrega o valor no endereço de memória <tt>$01</tt> no registro <tt>X</tt>."
+ "Se o idioma do seu sistema for chinês, o aplicativo volta a aparecer em chinês. Antes ele caía para o inglês por engano."
+ "Se seu exemplo for baseado ou inspirado em outro exemplo, você pode fornecer a URL de origem."
+ "Se você fala uma das línguas listadas, por favor ajude a revisar ou melhorar as traduções. Você pode contribuir pelos links no aplicativo, pela nossa plataforma de tradução ou abrindo uma issue."
+ "Se o resultado da adição for maior do que um único byte, o endereço dá a volta. Por exemplo:"
+ "IDE"
+ "Não vou explicar em profundidade como cada uma das direções funciona, mas a explicação acima deveria dar-te o suficiente para o trabalhares com um pouco de estudo."
+ "Oculto"
+ "Hexdump gerado."
+ "Hexdump"
+ "Monitor Hex"
+ "Aqui está um exemplo. Observe que os operandos imediatos ainda são precedidos por um <tt>#</tt>."
+ "Ajuda"
+ "O hebraico também é nosso primeiro idioma escrito da direita para a esquerda: graças aos testes e contribuições de Menachem, o aplicativo agora oferece suporte a layouts da direita para a esquerda, preparando-o para mais idiomas RTL."
+ "Verde"
+ "Ótimo começo — você concluiu o primeiro capítulo!"
+ "Tem sua própria criação 6502 legal? Compartilhe com a comunidade! Agora você pode enviar seus exemplos de código diretamente do aplicativo. Basta apertar o botão de compartilhar e criaremos automaticamente uma issue e pull request no GitHub para você."
+ "Tem um exemplo 6502 legal?\nCompartilhe com a comunidade!"
+ "Ir entre seções é mais complicado, pois temos de levar em conta também o byte mais significativo. Por exemplo, ir para baixo de <tt>$02e1</tt> deveria levar a <tt>$0301</tt>. Felizmente, isto é bastante fácil de conseguir. Adicionar <tt>$20</tt> a <tt>$e1</tt> resulta em <tt>$01</tt> e define o bit carry. Se o bit carry foi definido, sabemos que também precisamos de incrementar o byte mais significativo."
+ "Alemão e Espanhol foram validados por colaboradores. As demais línguas são rascunhos assistidos por IA e precisam de validação humana."
+ "Os jogos agora param automaticamente ao alternar entre telas"
+ "Tecla do comando de jogos pressionada:"
+ "GNOME"
+ "GNOME"
+ "Versão totalmente comentada do jogo da cobrinha"
+ "Memória Completa ($0000-$FFFF)"
+ "Encontrados %1$d rótulos."
+ "Encontrado %1$d rótulo."
+ "Para Linux também há um AppImage agora: um único arquivo, sem instalação, útil em uma distribuição para a qual não geramos pacotes."
+ "Fonte"
+ "Seguir estilo do sistema"
+ "Corrigido erro de compilação no PostmarketOS, melhorando a compatibilidade móvel"
+ "Corrigido um problema onde o botão Voltar na seção de aprendizagem estava sempre visível no modo desktop e tablet, mesmo quando nenhuma subpágina estava aberta."
+ "Primeiro, <tt>readkeys</tt> verifica se uma das teclas de direção (W, A, S, D) foi pressionada, e se sim, define a direção da cobra em conformidade. Depois, <tt>checkCollision</tt> verifica se a cobra colidiu consigo própria ou com a maçã. <tt>updateSnake</tt> atualiza a representação interna da cobra, baseada na sua direção. Em seguida, a maçã e a cobra são desenhadas. Finalmente, <tt>spinWheels</tt> faz o processador fazer algum trabalho ocupado, para impedir que o jogo corra demasiado depressa. Pense nisso como um comando sleep. O jogo continua a correr até a cobra colidir com a parede ou consigo própria."
+ "Primeiro carregamos o valor <tt>$08</tt> no registro <tt>X</tt>. A linha seguinte é um rótulo. Os rótulos apenas marcam certos pontos num programa para que possamos voltar a eles mais tarde. Depois do rótulo decrementamos <tt>X</tt>, armazenamo-lo em <tt>$0200</tt> (o pixel superior esquerdo), e depois comparamo-lo com o valor <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compara o valor no registro <tt>X</tt> com outro valor. Se os dois valores forem iguais, a flag <tt>Z</tt> é definida como <tt>1</tt>, caso contrário é definida como <tt>0</tt>."
+ "Primeira linha: <tt>$0200</tt>-<tt>$021F</tt>, segunda linha: <tt>$0220</tt>-<tt>$023F</tt>, etc."
+ "Primeira versão do Learn 6502 Assembly para GNOME"
+ "Finalmente, o byte <tt>$03</tt> contém o comprimento atual da cobra, em termos de bytes na memória (portanto, um comprimento de 4 significa 2 pixels)."
+ "Preencha as informações sobre seu exemplo 6502 para compartilhar com a comunidade"
+ "O arquivo \"%1$s\" tem alterações não salvas"
+ "Falhou ao copiar para a área de transferência"
+ "Exercícios"
+ "Exercício"
+ "Execute instruções uma a uma em vez de continuamente"
+ "Exemplos"
+ "Exemplo enviado para revisão"
+ "Embora esta seja uma versão simples, o código será substancialmente maior do que todos os exemplos anteriores. Teremos de acompanhar várias endereços de memória em conjunto para os vários aspetos do jogo. Podemos ainda fazer a contabilidade necessária ao longo do programa nós mesmos, como antes, mas numa escala maior isso torna-se rapidamente tedioso e também pode levar a bugs difíceis de detetar. Em vez disso, vamos agora deixar o assembler fazer parte do trabalho mundano por nós."
+ "Par ou Ímpar"
+ "Equipado com esse conhecimento, você deve ser capaz de ver que a instrução <tt>LDA #$01</tt> carrega o valor hexadecimal <tt>$01</tt> no registro <tt>A</tt>. Vou entrar em mais detalhes sobre os registros na próxima seção."
+ "Melhorada a entrada de faixa de endereços do monitor hex para facilitar a edição de valores"
+ "Melhorada a apresentação da aplicativo e acessibilidade"
+ "Ativar Modo Passo a Passo"
+ "Ativar Depurador"
+ "Cada seção (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) Primeiro, verifique se a direção atual é o oposto da nova direção. Isto requer outro pequeno desvio."
+ "Concluído"
+ "Organização da Tela"
+ "Memória de Vídeo ($0200-$05FF)"
+ "Descubra o fascinante mundo da programação de computadores clássicos e consoles de jogos! Aprenda a linguagem assembly 6502 - o mesmo código que alimentou sistemas icónicos como o NES, Commodore 64 e Apple II."
+ "Descartar"
+ "Desmontagem gerada."
+ "Desmontado"
+ "Desative para melhorar o desempenho"
+ "Dino Run"
+ "Descrição"
+ "Flag Decimal: Ative o modo Binary Coded Decimal (BCD) para operações aritméticas. Quando definida, as instruções ADC/SBC tratam valores como dígitos decimais (0-9) em vez de binário. Usada para cálculos financeiros e aritmética decimal."
+ "O depurador agora só atualiza quando visível, reduzindo o processamento desnecessário"
+ "Depurador"
+ "Depure seus programas com ferramentas de inspeção em tempo real"
+ "Configurações de depuração"
+ "Depurar"
+ "Estilo escuro"
+ "Criar um jogo"
+ "Copiar para o editor"
+ "Copiar para a área de transferência"
+ "Copiado para a área de transferência"
+ "Continuar"
+ "Confirmar"
+ "Instruções Comuns"
+ "Jogo da Cobrinha Comentado"
+ "Paleta de Cores"
+ "Editor de código e console de jogo virtual"
+ "Código copiado para o editor"
+ "Código montado com sucesso, %1$d bytes."
+ "Código"
+ "Mude um dos pixels para desenhar no canto inferior direito (endereço de memória <tt>$05ff</tt>)."
+ "Flag Carry: Definida quando uma adição produz um carry-out; limpa quando uma subtração requer um borrow. Usada para aritmética multi-byte e shifts/rotates (BCS/BCC)."
+ "Cancelar"
+ "Ao enviar, você concorda que seu exemplo será licenciado sob <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Quebre os blocos com a raquete e a bola."
+ "Flag Break: Definida quando uma instrução BRK (Break) é executada. Usada para distinguir entre interrupções de software (BRK) e interrupções de hardware. Ajuda a identificar a origem de uma interrupção nas rotinas de serviço de interrupção."
+ "Ramificação"
+ "Azul"
+ "Como o estado do jogo é armazenado em termos de localizações de pixels, a renderização do jogo é bastante direta. A primeira sub-rotina, <tt>drawApple</tt>, é extremamente simples. Define <tt>Y</tt> como zero, carrega uma cor aleatória no acumulador e, em seguida, armazena este valor em <tt>($00),y</tt>. <tt>$00</tt> é onde a localização da maçã está armazenada, então <tt>($00),y</tt> desreferencia para esta endereço de memória. Leia a seção \"Indexação indireta\" em <a href=\"#addressing\">Modos de endereçamento</a> para mais detalhes."
+ "Voltar"
+ "Autor"
+ "A um nível mais baixo, esta sub-rotina é um pouco mais complexa. Primeiro, o comprimento é carregado no registro <tt>X</tt>, que é então decrementado. O excerto abaixo mostra a memória inicial para a cobra."
+ "Arquivos Assembly"
+ "Assembly"
+ "Montando código ..."
+ "Montado com sucesso"
+ "Monte o código a seguir, depois abra a visão <b>Depurar</b> e confira o <b>Hexdump</b> para ver o código montado."
+ "Monte o código, depois abra a visão <b>Depurar</b> e percorra o código passo a passo, observando os registros <tt>A</tt> e <tt>X</tt>. Algo um pouco estranho acontece na linha <tt>ADC #$c4</tt>. Você pode esperar que adicionar <tt>$c4</tt> a <tt>$c0</tt> resulte em <tt>$184</tt>, mas este processador dá o resultado como <tt>$84</tt>. O que está acontecendo aí?"
+ "Monte o código e use <b>Passo</b> para percorrer essas três instruções passo a passo. O <b>Monitor Hex</b> na visão de depuração mostra uma seção da memória e pode ser útil para visualizar a execução dos programas. <tt>STA $01</tt> armazena o valor do registro <tt>A</tt> no endereço de memória <tt>$01</tt>, e <tt>ADC $01</tt> adiciona o valor armazenado no endereço de memória <tt>$01</tt> ao registro <tt>A</tt>. <tt>$80 + $80</tt> deveria ser igual a <tt>$100</tt>, mas como isso é maior do que um byte, o registro <tt>A</tt> é definido como <tt>$00</tt> e a flag carry é definida. Além disso, a flag zero é definida. A flag zero é definida por todas as instruções em que o resultado é zero."
+ "Montagem falhou"
+ "Montar"
+ "Como referido anteriormente, as quatro direções são representadas internamente pelos números 1, 2, 4 e 8. Cada um destes números é uma potência de 2, pelo que são representados por um número binário com um único <tt>1</tt>:"
+ "Enquanto você se move dentro de uma destas tiras horizontais, as coisas são simples. Por exemplo, para você se mover para a direita, apenas incrementa o byte menos significativo (por exemplo, <tt>$0200</tt> torna-se <tt>$0201</tt>). Para ir para baixo, adiciona <tt>$20</tt> (por exemplo, <tt>$0200</tt> torna-se <tt>$0220</tt>). Esquerda e cima são o reverso."
+ "Como sempre, esta versão inclui muitas pequenas correções e melhorias."
+ "Melhorias de arquitetura permitem uma melhor partilha de código entre as plataformas GNOME, Web e Android."
+ "Configurações de aparência"
+ "Aparência"
+ "Qualquer número precedido de <tt>$</tt> na linguagem assembly 6502 (e por extensão, neste livro) está no formato hexadecimal (hex). Se não estás familiarizado com números hexadecimais, recomendo que leias <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">o artigo da Wikipédia</a>. Qualquer coisa precedida de <tt>#</tt> é um valor numérico literal. Qualquer outro número refere-se a uma endereço de memória."
+ "Uma coisa importante a notar aqui é a distinção entre <tt>ADC #$01</tt> e <tt>ADC $01</tt>. O primeiro adiciona o valor <tt>$01</tt> ao registro <tt>A</tt>, mas o segundo adiciona o valor armazenado no endereço de memória <tt>$01</tt> ao registro <tt>A</tt>."
+ "Também útil: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Quase pronto!"
+ "Todas as instruções que suportam endereçamento absoluto (com a exceção das instruções de salto) também têm a opção de tomar um endereço de um byte. Este tipo de endereçamento chama-se \"página zero\" - apenas a primeira página (os primeiros 256 bytes) da memória são acessíveis. Isto é mais rápido, pois apenas um byte precisa de ser procurado, e também ocupa menos espaço no código montado."
+ "Todos os arquivos"
+ "Após isto, o valor <tt>2</tt> é adicionado ao acumulador, para criar um número aleatório final na faixa 2–5."
+ "Após o bloco inicial de comentários (linhas começando com ponto e vírgula), as primeiras duas linhas são:"
+ "Após a deteção de colisão, atualizamos a localização da cobra. Isto é feito a um nível alto da seguinte forma: Primeiro, move cada par de bytes do corpo uma posição para cima na memória. Segundo, atualiza a cabeça de acordo com a direção atual. Finalmente, se a cabeça estiver fora dos limites, trata como uma colisão. Vou ilustrar isto com alguma arte ASCII. Cada par de parênteses contém uma coordenada x,y em vez de um par de bytes para simplicidade."
+ "Após um movimento em cada direção, também precisamos verificar se a cabeça ficaria fora dos limites. Isto é tratado de forma diferente para cada direção. Para a esquerda e direita, podemos verificar se a cabeça efetivamente \"deu a volta\". Ao mover para a direita a partir de <tt>$021f</tt>, incrementando o byte menos significativo, chegaríamos a <tt>$0220</tt>, mas isto na verdade significa saltar do último pixel da primeira linha para o primeiro pixel da segunda linha. Assim, sempre que nos movemos para a direita, precisamos verificar se o novo byte menos significativo é um múltiplo de <tt>$20</tt>. Isto é feito usando uma verificação de bits contra a máscara <tt>$1f</tt>. A ilustração abaixo mostrará como mascarar os 5 bits menos significativos revela se um número é múltiplo de <tt>$20</tt> ou não."
+ "Adwaita"
+ "Modos de endereçamento"
+ "Modos de Endereçamento"
+ "Endereço %1$s - opcode desconhecido"
+ "Entradas de botão adicionais também estão disponíveis: botão A (tecla Enter/Return, código ASCII <tt>$0D</tt>) e botão B (tecla espaço, código ASCII <tt>$20</tt>). Podem ser usadas para adicionar mais interação aos seus jogos. Para controles direcionais, tanto as teclas WASD como as teclas de seta podem ser usadas de forma intercambiável."
+ "Adicionada funcionalidade de ajuda para tornar a edição de código mais fácil para iniciantes"
+ "Adicionada gerenciamento de arquivos para salvar e carregar seus programas"
+ "Adicione mais instruções para desenhar pixels extra."
+ "Acumulador: registro principal para cálculos"
+ "Destaque: Amarelo"
+ "Destaque: Verde-azulado"
+ "Destaque: Ardósia"
+ "Destaque: Vermelho"
+ "Destaque: Roxo"
+ "Destaque: Rosa"
+ "Destaque: Laranja"
+ "Destaque: Verde"
+ "Destaque: Azul"
+ "Cor de destaque"
+ "Absoluto: <tt>$c000</tt>"
+ "Absoluto,X e absoluto,Y: <tt>$c000,X</tt> e <tt>$c000,Y</tt>"
+ "Sobre Learn 6502 Assembly"
+ "Uma lista completa do conjunto de instruções 6502 está <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">disponível aqui</a> e <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">aqui</a> (normalmente refiro-me a ambas as páginas, pois têm os seus pontos fortes e fracos). Estas páginas detalham os argumentos de cada instrução, quais os registros que usam e quais as flags que definem. São a sua bíblia."
+ "Um issue do GitHub foi aberto no seu navegador. Por favor, revise e envie-o lá para completar sua contribuição. Após aprovação, seu exemplo será incluído na próxima versão.\n\nSe seu exemplo for muito grande, o conteúdo completo será copiado para a área de transferência para colagem manual no issue do GitHub."
+ "<tt>init</tt> e <tt>loop</tt> são ambas sub-rotinas. <tt>init</tt> inicializa o estado do jogo, e <tt>loop</tt> é o ciclo principal do jogo."
+ "<tt>checkSnakeCollision</tt> percorre os segmentos do corpo da cobra, verificando cada par de bytes contra o par da cabeça. Se houver uma correspondência, então o jogo acabou."
+ "<tt>a9</tt> e <tt>c9</tt> são os códigos de operação do processador para <tt>LDA</tt> e <tt>CMP</tt> endereçados imediatamente, respectivamente. <tt>01</tt> e <tt>02</tt> são os argumentos para estas instruções. <tt>d0</tt> é o código de operação para <tt>BNE</tt>, e o seu argumento é <tt>02</tt>. Isto significa \"saltar sobre os próximos dois bytes\" (<tt>85 22</tt>, a versão montada de <tt>STA $22</tt>). Tente editar o código para que <tt>STA</tt> use um endereço absoluto de dois bytes em vez de um endereço da página zero de um byte (por exemplo, mude <tt>STA $22</tt> para <tt>STA $2222</tt>). Monte novamente o código e observe o hexdump — o argumento para <tt>BNE</tt> deve agora ser <tt>03</tt>, porque a instrução que o processador está a saltar tem agora três bytes."
+ "<tt>X</tt> contém a cor do pixel, e <tt>Y</tt> contém a posição do pixel atual. O primeiro ciclo desenha a cor atual como um pixel (através do registro <tt>A</tt>), empurra a cor para a pilha, depois incrementa a cor e a posição. O segundo ciclo retira da pilha, desenha a cor retirada como um pixel, depois incrementa a posição. Como seria de esperar, isto cria um padrão espelhado."
+ "<tt>SP</tt> é o ponteiro da pilha. Ainda não vou falar da pilha, mas basicamente este registro é decrementado sempre que um byte é empurrado para a pilha, e incrementado quando um byte é retirado da pilha."
+ "<tt>PC</tt> é o contador de programa - é como o processador sabe em que ponto do programa se encontra atualmente. É como o número da linha atual de um script em execução. No simulador o código é montado começando no endereço de memória <tt>$0600</tt>, por isso <tt>PC</tt> começa sempre aí."
+ "<tt>JSR</tt> e <tt>RTS</tt> (\"salto para sub-rotina\" e \"retorno de sub-rotina\") são um duo dinâmico que você vai ver normalmente usados juntos. <tt>JSR</tt> é usado para saltar da localização atual para outra parte do código. <tt>RTS</tt> retorna à posição anterior. Isto é basicamente como chamar uma função e retornar."
+ "<tt>JMP</tt> é um salto incondicional. Aqui está um exemplo muito simples para o mostrar em ação:"
+ "<tt>BCC</tt> e <tt>BCS</tt> (\"ramificar se carry limpo\" e \"ramificar se carry definido\") são usados para ramificar com base na flag carry. Escreva um programa que use uma destas duas."
+ "<b>Página Zero</b>: <tt>$0000</tt>-<tt>$00FF</tt> (primeiros 256 bytes, acesso mais rápido)"
+ "<b>Página Zero</b> (<tt>$c0</tt>): Acessar endereços de memória <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Página Zero,X/Y</b> (<tt>$c0,X</tt>): Adicionar registro X/Y ao endereço da página zero"
+ "<b>Z</b> (Zero): Definido quando o resultado é zero"
+ "<b>X, Y</b>: registros de índice para endereçamento e contagem"
+ "<b>W</b> ou tecla seta para cima (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Definido quando operação aritmética causa overflow assinado"
+ "<b>Pilha</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Armazenar registros na memória"
+ "<b>SP</b> (Ponteiro da Pilha): Aponta para a posição atual da pilha (começa em <tt>$FF</tt>)"
+ "<b>SBC precisa carry definido</b>: Define <tt>C</tt> antes de subtrair (funciona como borrow inverso). <tt>C</tt> limpo após SBC indica que um borrow ocorreu."
+ "<b>S</b> ou tecla seta para baixo (<tt>$73</tt>)"
+ "<b>Relativo</b> (<tt>label</tt>): Ramificação usa deslocamento de 8 bits com sinal a partir da próxima instrução (−128…+127)"
+ "<b>Q</b> ou tecla Enter/Return (<tt>$0D</tt>)"
+ "<b>Armazenamento de programa</b>: Começando em <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Empurrar/puxar acumulador para/da pilha"
+ "<b>PC</b> (Program Counter): Aponta para a próxima instrução a executar"
+ "<b>N</b> (Negative): Definido quando o bit 7 do resultado está definido"
+ "<b>LDA/LDX/LDY</b>: Carregar registros"
+ "<b>JSR/RTS</b>: Salto para sub-rotina / Retorno de sub-rotina"
+ "<b>JMP</b>: Salto incondicional"
+ "<b>Indireto</b> (<tt>($c000)</tt>): Procurar endereço armazenado na localização dada"
+ "<b>Indireto indexado</b> (<tt>($c0),Y</tt>): Usar endereço da página zero como ponteiro para obter endereço base, depois adicionar Y a essa base"
+ "<b>Indexado indireto</b> (<tt>($c0,X)</tt>): Adicionar X ao endereço da página zero, depois usar o resultado como ponteiro para obter o endereço alvo real"
+ "<b>Imediato</b> (<tt>#$c0</tt>): Usar o valor atual"
+ "<b>INX/INY/DEX/DEY</b>: Incrementar/decrementar registros"
+ "<b>I</b> (Interrupt): Definido quando as interrupções estão desativadas"
+ "<b>E</b> ou tecla espaço (<tt>$20</tt>)"
+ "<b>Memória de Vídeo</b>: <tt>$0200</tt>-<tt>$05FF</tt> (usada para saída de tela)"
+ "<b>Controles direcionais</b>:"
+ "<b>D</b> ou tecla seta direita (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Definido quando o processador está em modo BCD (Decimal Codificado Binário)"
+ "<b>Operações de comparação</b>: <tt>CMP/CPX/CPY</tt> definem <tt>N/Z/C</tt> como uma subtração (registro − memória) sem armazenar o resultado."
+ "<b>C</b> (Carry): Definido quando operações aritméticas ultrapassam um byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Ramificar se igual/diferente/carry limpo/carry definido"
+ "<b>B</b> (Break): Definido quando a instrução BRK é executada"
+ "<b>Botões de ação</b>:"
+ "<b>Absoluto</b> (<tt>$c000</tt>): Acessar a qualquer endereço de memória"
+ "<b>Absoluto,X/Y</b> (<tt>$c000,X</tt>): Adicionar registro X/Y ao endereço absoluto"
+ "<b>ADC/SBC</b>: Adicionar/subtrair com carry"
+ "<b>A</b> ou tecla seta esquerda (<tt>$61</tt>)"
+ "<b>A</b> (Acumulador): registro principal para cálculos e manipulação de dados"
+ "<b><tt>$f</tt></b>: cinza claro (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Azul claro (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Verde claro (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: cinza (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: cinza escuro (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Vermelho claro (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Última tecla pressionada (código ASCII)"
+ "<b><tt>$FE</tt></b>: Gerador de números aleatórios (lê como um valor aleatório 0-255)"
+ "<b><tt>$9</tt></b>: marrom (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Laranja (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Amarelo (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Azul (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Verde (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Roxo (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Ciano (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Vermelho (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Branco (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Dados de posição da cobra (cabeça, segmentos do corpo, cauda)"
+ "<b><tt>$0</tt></b>: Preto (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Comprimento da cobra"
+ "<b><tt>$02</tt></b>: Direção da cobra (1=cima, 2=direita, 4=baixo, 8=esquerda)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Posição da maçã"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> criou um <a href=\"https://gist.github.com/wkjagt/9043907\">gist totalmente anotado deste código fonte</a>, por isso acompanhe-o para mais detalhes."
+ "A linguagem assembly 6502 tem um monte de instruções de ramificação, todas as quais ramificam com base em se certas flags estão definidas ou não. Neste exemplo vamos ver <tt>BNE</tt>: \"Ramificar se não igual\"."
+ "Pilha 6502 cheia! A dar a volta..."
+ "Pilha 6502 esvaziada! A dar a volta..."
+ "(Na verdade, fui informado de forma fiável que os processadores 6502 ainda são produzidos pela <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> e <a href=\"https://www.mouser.co.uk/c/?q=65C02\">vendidos a hobbistas</a>, por isso claramente o 6502 <i>não é</i> uma linguagem morta! Quem diria?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-pt/strings.xml b/packages/app-android/data/Android/src/main/res/values-pt/strings.xml
new file mode 100644
index 00000000..45eefc01
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-pt/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Aprenda Assembly 6502"
+ "Aprenda Assembly 6502"
+ "Aprenda Assembly 6502"
+ "வணக்கம்! Temos o prazer de dar as boas-vindas à tradução em tâmil, contribuída por தமிழ்நேரம். நன்றி!"
+ "que representa as localizações de memória endereçadas indiretamente <tt>$0411</tt>, <tt>$0410</tt> e <tt>$040f</tt> (três píxeis no meio do ecrã). Estou a insistir neste ponto, mas é importante compreender completamente como o endereçamento indireto funciona."
+ "wdm-output"
+ "programação"
+ "aprendizagem"
+ "por %1$s"
+ "_Preferências"
+ "Página zero: <tt>$c0</tt>"
+ "Página zero,Y: <tt>$c0,Y</tt>"
+ "Página zero,X: <tt>$c0,X</tt>"
+ "Utilização da página zero"
+ "Página Zero ($0000-$00FF)"
+ "Flag Zero: Definida quando o resultado de uma operação é zero. Essencial para ramificação condicional - a maioria das instruções de salto condicional (BEQ, BNE) verifica esta flag para determinar o fluxo do programa baseado se um valor é zero."
+ "O teu ficheiro tem alterações não guardadas. As alterações serão perdidas se não as guardares."
+ "Já viste <tt>TAX</tt>. Provavelmente consegues adivinhar o que <tt>TAY</tt>, <tt>TXA</tt> e <tt>TYA</tt> fazem, mas escreve algum código para testar as tuas suposições."
+ "Apoiou este projeto de código aberto ao comprar a aplicação. Obrigado!"
+ "Podes pensar no ecrã como quatro faixas horizontais de 32 × 8 píxeis. Estas faixas mapeiam-se para <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> e <tt>$0500-$05ff</tt>. As primeiras linhas de píxeis são <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
+ "Amarelo"
+ "Escreve e edita código com um editor de código integrado"
+ "Com todos estes exemplos pode ser útil usar o <b>Monitor Hex</b> na vista de depuração para observar a memória a mudar. Escolhe uma região de memória da lista para ver essa secção — por exemplo, <b>Memória de Visualização ($0200–$05FF)</b> para observar os píxeis do ecrã, ou <b>Página Zero ($0000–$00FF)</b> para inspecionar os primeiros 256 bytes."
+ "Com endereçamento absoluto, a localização completa de memória é usada como argumento da instrução. Por exemplo:"
+ "Bem-vindo à tradução vietnamita, totalmente contribuída por Loc Huynh (hthienloc)."
+ "Bem-vindo à tradução polaca, inicialmente contribuída por Micro Wave. Dziękujemy!"
+ "Já demos uma pequena olhada na secção de estado do processador (a parte com <tt>A</tt>, <tt>PC</tt>, etc.), mas o que é que tudo isso significa?"
+ "Adicionámos uma nova secção de Exemplos no separador Aprender onde pode explorar e executar programas 6502 totalmente comentados diretamente na aplicação. Comece com o nosso exemplo do jogo Snake e veja como os píxeis ganham vida!"
+ "Os valores <tt>$00</tt>-<tt>$0F</tt> representam 16 cores diferentes (<tt>$00</tt>=preto, <tt>$01</tt>=branco)"
+ "Usar cor primária personalizada"
+ "Usar cor de destaque personalizada"
+ "Atualizando o estado do jogo"
+ "Alterações não guardadas"
+ "Ao contrário da página zero,Y, absoluto,Y não pode ser usado com <tt>STX</tt> mas pode ser usado com <tt>LDA</tt> e <tt>STA</tt>."
+ "Nos bastidores: atualização para TypeScript 6, Vite 8 e outras atualizações de dependências para melhor desempenho e estabilidade."
+ "Impossível realocar código fora da memória de 64k"
+ "Impossível encontrar/analisar o endereço/etiqueta fornecido"
+ "Duas das instruções da pilha são <tt>PHA</tt> e <tt>PLA</tt>, \"push accumulator\" e \"pull accumulator\". Abaixo há um exemplo destas duas em ação."
+ "Dois novos programas de exemplo, e ambos vieram de vocês: Dino Run, de Jacob, e Line Buster 6502, de edit12. São os primeiros exemplos enviados através do botão de partilha, e gostaríamos de receber mais."
+ "Tutorial <sub>por <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, licenciado sob CC BY 4.0</sub>"
+ "Tutorial"
+ "Tenta escrever excertos de código que usem cada um dos modos de endereçamento do 6502. Lembra-te, podes usar o <b>Monitor Hex</b> na vista de depuração para observar uma secção de memória."
+ "Experimente programas de exemplo para o microprocessador 6502."
+ "Experimente programas de exemplo"
+ "Tenta mudar a cor dos três píxeis."
+ "Alternar Barra Lateral"
+ "Para testar se a direção é <tt>1</tt>, <tt>2</tt>, <tt>4</tt> ou <tt>8</tt>, o código desloca continuamente para a direita até que o transporte seja definido. Um <tt>LSR</tt> significa \"cima\", dois significa \"direita\", e assim por diante."
+ "Título"
+ "Esta versão traz temas vibrantes inspirados em dispositivos portáteis com cores personalizáveis. Introduzimos layouts adaptativos para tablet e computador que mantêm tudo à vista, perfeitos para aquelas sessões maratona de programação ao aprender a desenvolver jogos retro em assembly. Um grande agradecimento ao nosso novo colaborador @mmartinortiz pelas excelentes ideias de layout para computador. Também há algumas melhorias técnicas interessantes, como rigor TypeScript, esquemas de estilo GtkSourceView personalizados e controlos de depuração melhorados para um desenvolvimento mais suave."
+ "Este é um pouco estranho. É como um cruzamento entre página zero,X e indireto. Basicamente, pegas no endereço de página zero, adicionas o valor do registo <tt>X</tt> a ele, depois usas isso para procurar um endereço de dois bytes. Por exemplo:"
+ "Isto carrega o valor <tt>$11</tt> na localização de memória <tt>$10</tt>, o valor <tt>$10</tt> em <tt>$12</tt>, e <tt>$0f</tt> em <tt>$14</tt>. Depois carrega o valor <tt>$04</tt> em <tt>$11</tt>, <tt>$13</tt> e <tt>$15</tt>. Isto leva a memória a ficar assim:"
+ "É aqui que o endereçamento se torna interessante. Neste modo, é fornecido um endereço de página zero, e depois o valor do registo <tt>X</tt> é adicionado. Aqui está um exemplo:"
+ "Este é o equivalente de página zero,X, mas só pode ser usado com <tt>LDX</tt> e <tt>STX</tt>."
+ "Estas são as versões de endereçamento absoluto de página zero,X e página zero,Y. Por exemplo:"
+ "Há também uma razão muito prática: o desenvolvimento de jogos retro. A cena homebrew está viva e recomenda-se — novos jogos ainda são <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">lançados para o NES</a> (alguns até como cartuchos físicos) e para muitos outros sistemas clássicos; o NES é apenas um exemplo. Mesmo que o seu alvo seja algo como o SNES, começar com 6502 compensa: a CPU do SNES (65C816) é compatível com o 6502, por isso os fundamentos que aprende aqui — registos, modos de endereçamento e o conjunto de instruções principal — transitam diretamente."
+ "Então porquê 6502? Porque não uma linguagem assembly <i>útil</i>, como <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Bem, não penso que aprender x86 seja útil. Não penso que alguma vez tenha de <i>escrever</i> linguagem assembly no trabalho diário — para algumas pessoas é um exercício académico, algo para expandir a mente e o pensamento. O 6502 foi originalmente escrito numa era diferente, numa altura em que a maioria dos programadores escrevia assembly diretamente, em vez destas novas linguagens de alto nível. Por isso, foi concebido para ser escrito por humanos. As linguagens assembly mais modernas destinam-se a ser escritas por compiladores, então deixemos isso para eles. Além disso, o 6502 é <i>divertido</i>. Ninguém alguma vez chamou ao x86 <i>divertido</i>."
+ "A página zero da memória é usada para armazenar um número de variáveis de estado do jogo, conforme observado no bloco de comentários no topo do jogo. Tudo em <tt>$00</tt>, <tt>$01</tt> e <tt>$10</tt> para cima é um par de bytes que representa uma localização de memória de dois bytes que será procurada usando endereçamento indireto. Estas localizações de memória serão todas entre <tt>$0200</tt> e <tt>$05ff</tt> - a secção de memória correspondente à consola de jogo. Por exemplo, se <tt>$00</tt> e <tt>$01</tt> contivessem os valores <tt>$01</tt> e <tt>$02</tt>, estariam a referir-se ao segundo píxel do ecrã (<tt>$0201</tt> - lembra-te, o byte menos significativo vem primeiro no endereçamento indireto)."
+ "A pilha num processador 6502 é como qualquer outra pilha - os valores são empurrados para ela e retirados (\"puxados\" na terminologia 6502) dela. A profundidade atual da pilha é medida pelo ponteiro da pilha, um registo especial. A pilha vive na memória entre <tt>$0100</tt> e <tt>$01ff</tt>. O ponteiro da pilha é inicialmente <tt>$ff</tt>, que aponta para a localização de memória <tt>$01ff</tt>. Quando um byte é empurrado para a pilha, o ponteiro da pilha torna-se <tt>$fe</tt>, ou localização de memória <tt>$01fe</tt>, e assim por diante."
+ "A pilha"
+ "O jogo da cobra do tutorial"
+ "O resultado desta sub-rotina é carregar um byte aleatório em <tt>$00</tt> e um número aleatório entre 2 e 5 em <tt>$01</tt>. Como o byte menos significativo vem primeiro com endereçamento indireto, isto traduz-se num endereço de memória entre <tt>$0200</tt> e <tt>$05ff</tt>: o intervalo exato usado para desenhar o ecrã."
+ "O processador sabe para onde retornar porque <tt>JSR</tt> coloca o endereço menos um da próxima instrução na pilha antes de saltar para a localização fornecida. <tt>RTS</tt> retira esta localização, adiciona um a ela e salta para essa localização. Um exemplo:"
+ "O problema é que <tt>$184</tt> é demasiado grande para caber num único byte (o máximo é <tt>$FF</tt>), e os registos só podem conter um único byte. Mas não há problema; o processador não é realmente estúpido. Se estivesses a observar com atenção suficiente, terias notado que a flag de transporte foi definida como <tt>1</tt> após esta operação. É assim que sabes."
+ "O oposto de <tt>BNE</tt> é <tt>BEQ</tt>. Tenta escrever um programa que use <tt>BEQ</tt>."
+ "O oposto de <tt>ADC</tt> é <tt>SBC</tt> (subtração com transporte). Escreve um programa que use esta instrução."
+ "O jogo de corrida offline do navegador, em Assembly 6502"
+ "A próxima sub-rotina, <tt>generateApplePosition</tt>, define a localização da maçã numa posição aleatória no ecrã. Primeiro, carrega um byte aleatório no acumulador (<tt>$fe</tt> é um gerador de números aleatórios neste simulador). Isto é armazenado em <tt>$00</tt>. Em seguida, um byte aleatório diferente é carregado no acumulador, que é então submetido a uma operação <tt>AND</tt> com o valor <tt>$03</tt>. Esta parte requer um pequeno desvio."
+ "A próxima sub-rotina, <tt>checkCollision</tt>, delega para <tt>checkAppleCollision</tt> e <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> apenas verifica se os dois bytes que contêm a localização da maçã correspondem aos dois bytes que contêm a localização da cabeça. Se corresponderem, o comprimento é aumentado e uma nova posição da maçã é gerada."
+ "A próxima linha, <tt>BNE decrement</tt>, deslocará a execução para a etiqueta decrement se a flag <tt>Z</tt> estiver definida como <tt>0</tt> (significando que os dois valores na comparação <tt>CPX</tt> não eram iguais), caso contrário não faz nada e armazenamos <tt>X</tt> em <tt>$0201</tt>, depois terminamos o programa."
+ "A próxima parte atualiza a cabeça da cobra dependendo da direção. Esta é provavelmente a parte mais complicada do código, e depende totalmente de como as localizações de memória são mapeadas para o ecrã, então vamos analisar isso com mais detalhe."
+ "O comprimento é inicializado para <tt>4</tt>, então <tt>X</tt> começa como <tt>3</tt>. <tt>LDA $10,x</tt> carrega o valor de <tt>$13</tt> em <tt>A</tt>, depois <tt>STA $12,x</tt> armazena este valor em <tt>$15</tt>. <tt>X</tt> é decrementado e repetimos o ciclo. Agora <tt>X</tt> é <tt>2</tt>, então carregamos <tt>$12</tt> e armazenamo-lo em <tt>$14</tt>. Isto repete-se enquanto <tt>X</tt> for positivo (<tt>BPL</tt> significa \"ramificar se positivo\")."
+ "A última sub-rotina, <tt>spinWheels</tt>, está lá apenas porque o jogo correria demasiado rápido de outra forma. Tudo o que <tt>spinWheels</tt> faz é contar <tt>X</tt> para baixo a partir de zero até atingir zero novamente. O primeiro <tt>dex</tt> dá a volta, fazendo <tt>X</tt> ficar <tt>#$ff</tt>."
+ "A última secção mostra as flags do processador. Cada flag é um bit, por isso todas as sete flags vivem num único byte. As flags são definidas pelo processador para dar informação sobre a instrução anterior. Mais sobre isso depois. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Lê mais sobre os registos e flags aqui</a>."
+ "O valor hexadecimal <tt>$03</tt> é representado em binário como <tt>00000011</tt>. O código de operação <tt>AND</tt> realiza um AND bit a bit do argumento com o acumulador. Por exemplo, se o acumulador contiver o valor binário <tt>10101010</tt>, então o resultado de <tt>AND</tt> com <tt>00000011</tt> será <tt>00000010</tt>."
+ "O hexadecimal deve parecer-se com isto:"
+ "O ciclo do jogo"
+ "Os primeiros dois bytes contêm a localização da maçã. Isto é atualizado sempre que a cobra come a maçã. O byte <tt>$02</tt> contém a direção atual. <tt>1</tt> significa para cima, <tt>2</tt> direita, <tt>4</tt> baixo e <tt>8</tt> esquerda. O raciocínio por detrás destes números ficará claro mais tarde."
+ "A primeira sub-rotina, <tt>readKeys</tt>, tem a tarefa de aceitar a entrada do utilizador. A localização de memória <tt>$ff</tt> contém o código ASCII da tecla mais recentemente pressionada neste simulador. O valor é carregado no acumulador e depois comparado com <tt>$77</tt> (o código hexadecimal para W), <tt>$64</tt> (D), <tt>$73</tt> (S) e <tt>$61</tt> (A). Se alguma destas comparações for bem-sucedida, o programa ramifica para a secção apropriada."
+ "A primeira linha mostra os registos <tt>A</tt>, <tt>X</tt> e <tt>Y</tt> (<tt>A</tt> é frequentemente chamado o \"acumulador\"). Cada registo contém um único byte. A maioria das operações trabalha com o conteúdo destes registos."
+ "A primeira instrução faz com que a execução salte para a etiqueta <tt>init</tt>. Isto define <tt>X</tt>, depois retorna para a próxima instrução, <tt>JSR loop</tt>. Isto salta para a etiqueta <tt>loop</tt>, que incrementa <tt>X</tt> até ser igual a <tt>$05</tt>. Depois disso, retornamos à próxima instrução, <tt>JSR end</tt>, que salta para o fim do ficheiro. Isto ilustra como <tt>JSR</tt> e <tt>RTS</tt> podem ser usados em conjunto para criar código modular."
+ "O efeito disto é mascarar os dois bits menos significativos do acumulador, definindo os outros como zero. Isto converte um número no intervalo de 0–255 para um número no intervalo de 0–3."
+ "O bloco de código abaixo contém todo o código-fonte do jogo. Vou explicar como funciona nas secções seguintes."
+ "O ecrã preto da consola de jogo deve agora mostrar três \"píxeis\" coloridos no canto superior esquerdo."
+ "A aplicação foi concebida para o tipo de letra de interface do GNOME. Noutros sistemas, é desenhada com o tipo de letra desse sistema, que costuma ser menor."
+ "O Registo de Índice Y é similar a X e não tem funções especiais. Comumente usado para endereçamento indexado e movimento de dados."
+ "O Registo de Índice X é usado para modos de endereçamento indexados e operações de contagem. Pode conter contadores de ciclo, índices de array, e é essencial para aceder a localizações de memória relativas a um endereço base usando X como deslocamento. Especial: TSX/TXS transferem X para/de o ponteiro da pilha."
+ "O Ponteiro da Pilha gere a pilha de chamadas para sub-rotinas e interrupções. Começa em $FF (topo da pilha) e cresce para baixo. Usado para operações PUSH/PULL, chamadas JSR/RTS, e tratamento de interrupções. Crítico para chamadas de funções aninhadas."
+ "O Contador de Programa contém o endereço de memória da próxima instrução a executar. Incrementa automaticamente após cada instrução e pode ser modificado por saltos, ramificações, chamadas e retornos. Essencial para controlo do fluxo do programa e depuração."
+ "O Acumulador (A) é o registo principal para operações aritméticas e lógicas. Todos os cálculos básicos como ADD, SUBTRACT, AND, OR, etc. usam este registo. É o registo mais frequentemente usado na programação assembly 6502."
+ "A própria sub-rotina <tt>loop</tt> apenas chama um número de sub-rotinas sequencialmente, antes de voltar a si própria:"
+ "A sub-rotina <tt>init</tt> adia para duas sub-rotinas, <tt>initSnake</tt> e <tt>generateApplePosition</tt>. <tt>initSnake</tt> define a direção da cobra, comprimento, e depois carrega as localizações de memória iniciais da cabeça da cobra e do corpo. O par de bytes em <tt>$10</tt> contém a localização do ecrã da cabeça, o par em <tt>$12</tt> contém a localização do segmento único do corpo, e <tt>$14</tt> contém a localização da cauda (a cauda é o último segmento do corpo e é desenhada a preto para manter a cobra a mover-se). Isto acontece no seguinte código:"
+ "O opcode <tt>BIT</tt> é similar a <tt>AND</tt>, mas o cálculo é apenas usado para definir a flag zero - o resultado real é descartado. A flag zero é definida apenas se o resultado de fazer AND do acumulador com o argumento for zero. Quando estamos a olhar para potências de dois, a flag zero só será definida se os dois números não forem os mesmos. Por exemplo, <tt>0001 AND 0001</tt> não é zero, mas <tt>0001 AND 0010</tt> é zero."
+ "O 6502 usa um barramento de endereços de 16-bit, o que significa que há 65536 bytes de memória disponíveis para o processador. Lembra-te que um byte é representado por dois caracteres hexadecimais, por isso as localizações de memória são geralmente representadas como <tt>$0000 - $ffff</tt>. Há várias formas de se referir a estas localizações de memória, como detalhado abaixo."
+ "Obrigado por utilizar software de código aberto."
+ "Testa o bit 0 de A com LSR e BCC e coloca 1 ou 0 em A como resultado"
+ "Testa as tuas criações numa consola de jogos virtual"
+ "Tervetuloa! Temos o prazer de dar as boas-vindas à tradução finlandesa, gentilmente contribuída por Jiri Grönroos. Kiitos!"
+ "Azul-petróleo"
+ "Tipo de letra do sistema, tamanho do GNOME"
+ "Padrão do sistema"
+ "Erro de sintaxe na linha %1$d: %2$s"
+ "Apoiante"
+ "Apoiar"
+ "Submeter"
+ "Estilo"
+ "Parado"
+ "Guia passo a passo de assembly 6502"
+ "Passo"
+ "Flags de Estado"
+ "Ponteiro da Pilha: Aponta para a posição da pilha"
+ "Exemplo de Pilha"
+ "Pilha ($0100-$01FF)"
+ "Localizações Especiais de Memória (no Simulador)"
+ "URL de origem"
+ "Algumas instruções não lidam com localizações de memória (por exemplo, <tt>INX</tt> - incrementar o registo <tt>X</tt>). Diz-se que estas têm endereçamento implícito - o argumento está implícito na instrução."
+ "Então, por que quererias aprender 6502? É uma linguagem morta, não é? Bem, o latim também é. E ainda o ensinam. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Então, o que é que este programa está realmente a fazer? Vamos percorrê-lo passo a passo. Carrega em <b>Reiniciar</b> e, de seguida, usa <b>Passo</b> para executar o programa uma instrução de cada vez. A vista <b>Depurar</b> mostra os registos e a memória — é um separador à parte numa janela pequena, e o painel abaixo da consola de jogo numa janela larga. Clica em <b>Passo</b> uma vez e notarás na vista de depuração que <tt>A=</tt> mudou de <tt>$00</tt> para <tt>$01</tt>, e <tt>PC=</tt> mudou de <tt>$0600</tt> para <tt>$0602</tt>."
+ "Assim, a instrução <tt>STA $0200</tt> armazena o valor do registo <tt>A</tt> na localização de memória <tt>$0200</tt>. Clica em <b>Step</b> mais quatro vezes para executar o resto das instruções, mantendo o olho no registo <tt>A</tt> à medida que muda."
+ "Assim, olhando para <tt>upKey</tt>, se a direção atual é para baixo (4), o teste de bits será zero. <tt>BNE</tt> significa \"ramificar se a flag zero estiver limpa\", então neste caso ramificaremos para <tt>illegalMove</tt>, que simplesmente retorna da sub-rotina. Caso contrário, a nova direção (1 neste caso) é armazenada na localização de memória apropriada."
+ "Vamos mergulhar! Esta aplicação contém um <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">Assemblador e Simulador 6502 em JavaScript</a> que adaptei para este tutorial interativo. Clica no botão <b>Copiar</b> no bloco de código abaixo para copiar o código de exemplo para o editor. De seguida usa <b>Montar</b> para montar o código, e <b>Executar</b> para o executar. Podes encontrar estas ações como botões ou no menu."
+ "Até agora só conseguimos escrever programas básicos sem qualquer lógica de ramificação. Vamos mudar isso."
+ "Uso de Memória do Jogo Snake"
+ "Dados do Jogo Snake ($00-$15)"
+ "Jogo da Cobra"
+ "Cinza"
+ "Falha do simulador"
+ "Simulador"
+ "Os exemplos de código partilhados agora incluem informações de licença CC-BY-4.0, esclarecendo como a comunidade pode usar e construir sobre as suas contribuições."
+ "Partilhe o seu exemplo"
+ "Partilhar exemplo"
+ "Partilhar"
+ "Shalom! Temos o prazer de dar as boas-vindas à tradução em hebraico, integralmente contribuída por Menachem (naattxx). Toda raba!"
+ "A sério, penso que é valioso ter uma compreensão da linguagem assembly. A linguagem assembly é o nível mais baixo de abstração nos computadores - o ponto em que o código ainda é legível. A linguagem assembly traduz-se diretamente nos bytes que são executados pelo processador do teu computador. Se entendes como funciona, basicamente tornaste-te num <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">mago</a> da computação."
+ "Selamat datang! Damos também as boas-vindas à tradução em indonésio, gentilmente contribuída por Arif Budiman. Terima kasih!"
+ "Ecrã mapeia para a gama de memória <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Apresentamos muitas novas traduções: Francês, Interlíngua, Português, Português (Brasil), Neerlandês, Espanhol, Ucraniano, Japonês e Chinês (Simplificado)"
+ "Guardado como %1$s"
+ "Guardar alterações?"
+ "Guardar como..."
+ "Guardar Ficheiro Assembly"
+ "Guardar"
+ "Executando jogo Snake"
+ "Executar"
+ "Reescreve o primeiro exemplo nesta secção para usar o registo <tt>Y</tt> em vez do registo <tt>X</tt>."
+ "Veja como o seu exemplo irá aparecer aos outros. Clicar em <b>Submeter</b> criará um issue no GitHub. Precisará de iniciar sessão com a sua conta GitHub para completar a submissão."
+ "Continuar"
+ "Reiniciar"
+ "Renderizando o jogo"
+ "Relativo: <tt>$c0</tt> (ou rótulo)"
+ "O endereçamento relativo é usado para instruções de ramificação. Estas instruções tomam um único byte, que é usado como um deslocamento a partir da instrução seguinte."
+ "Registos e flags"
+ "Registos"
+ "Reduzida a gama de endereços padrão do monitor hex para melhor eficiência"
+ "Vermelho"
+ "Lendo a entrada"
+ "Aleatório/Entrada ($FE-$FF)"
+ "Sair"
+ "Dicas Rápidas"
+ "Roxo"
+ "Programa consolas de jogos vintage"
+ "Programa pausado"
+ "Programa concluído. Reinicie para percorrer o programa passo a passo novamente."
+ "Programa concluído em PC=$%1$s"
+ "Programa concluído"
+ "Armazenamento de Programa ($0600-$FFFF)"
+ "Contador de Programa: Aponta para a próxima instrução"
+ "Registo de Estado do Processador"
+ "Flags do Processador"
+ "Primária: Amarelo"
+ "Primária: Azul-petróleo"
+ "Primária: Cinza"
+ "Primária: Vermelho"
+ "Primária: Roxo"
+ "Primária: Rosa"
+ "Primária: Laranja"
+ "Primária: Verde"
+ "Primária: Azul"
+ "Cor primária"
+ "Anterior"
+ "Pré-visualizar o seu exemplo"
+ "Pré-visualizar"
+ "Carrega em <b>Step</b> novamente para executar a segunda instrução. O píxel superior esquerdo da consola de jogo deve agora ser branco. Este simulador usa as localizações de memória <tt>$0200</tt> a <tt>$05ff</tt> para desenhar píxeis no seu ecrã. Os valores <tt>$00</tt> a <tt>$0f</tt> representam 16 cores diferentes (<tt>$00</tt> é preto e <tt>$01</tt> é branco), por isso armazenar o valor <tt>$01</tt> na localização de memória <tt>$0200</tt> desenha um píxel branco no canto superior esquerdo. É mais simples do que como um computador real emitiria vídeo, mas serve por agora."
+ "Pré-processamento..."
+ "Jogar"
+ "Rosa"
+ "Perfeito para amadores, estudantes, e qualquer pessoa curiosa sobre como os computadores realmente funcionam por baixo!"
+ "Pausar"
+ "Flag Overflow: Definida quando uma operação aritmética produz um resultado que não pode ser representado na gama de 8 bits com sinal (-128 a +127). Usada para detetar erros aritméticos com sinal nos cálculos."
+ "Estrutura geral"
+ "Ramificação fora do alcance na linha %1$d (ramificações estão limitadas a -128 a +127): %2$s"
+ "O nosso primeiro programa"
+ "Organizado como quatro tiras horizontais de 32×8 pixels"
+ "Laranja"
+ "Configuração Flatpak otimizada removendo permissões desnecessárias"
+ "Aberto %1$s"
+ "Abrir..."
+ "Código aberto"
+ "Abrir Ficheiro Assembly"
+ "Uma vez que os valores foram deslocados para baixo na cobra, temos de descobrir o que fazer com a cabeça. A direção é primeiro carregada em <tt>A</tt>. <tt>LSR</tt> significa \"deslocamento lógico para a direita\", ou \"deslocar todos os bits uma posição para a direita\". O bit menos significativo é deslocado para a flag carry, então se o acumulador for <tt>1</tt>, após <tt>LSR</tt> é <tt>0</tt>, com a flag carry definida."
+ "No reset (simulador): <tt>P = $30</tt> (bit5 e <tt>B</tt> definidos; <tt>D</tt> e <tt>I</tt> limpos)"
+ "OK"
+ "Agora, vamos pôr todo este conhecimento em bom uso, e fazer um jogo! Vamos fazer uma versão muito simples do jogo clássico \'Snake\'."
+ "Não é necessária experiência prévia em programação. Comece com lições interativas e desenvolva as suas competências passo a passo."
+ "Nenhum código para executar."
+ "Nenhum endereço ou rótulo fornecido"
+ "Em seguida vem <tt>drawSnake</tt>. Isto também é bastante simples - primeiro retiramos a cauda e depois desenhamos a cabeça. <tt>X</tt> é definido para o comprimento da cobra, então podemos indexar para o pixel correto, e definimos <tt>A</tt> para zero e depois realizamos a escrita usando o modo de endereçamento indireto indexado. Depois recarregamos <tt>X</tt> para indexar para a cabeça, definimos <tt>A</tt> para um e armazenamo-lo em <tt>($10,x)</tt>. <tt>$10</tt> armazena a localização de dois bytes da cabeça, então isto desenha um pixel branco na posição atual da cabeça. Como apenas a cabeça e a cauda da cobra se movem, isto é suficiente para manter a cobra a mover-se."
+ "Novas ferramentas para examinar o teu código, incluindo desmontador e visualizador de memória alternável rápido"
+ "Flag Negativa: Definida quando o bit mais significativo (bit 7) do resultado é 1. Usada para comparações de números com sinal e indica se um valor é negativo na representação de complemento de dois."
+ "Quase todos os jogos têm no seu coração um ciclo de jogo. Todos os ciclos de jogo têm a mesma forma básica: aceitar entrada do utilizador, atualizar o estado do jogo, e renderizar o estado do jogo. Este ciclo não é diferente."
+ "Mensagens"
+ "As localizações de memória <tt>$01</tt> e <tt>$02</tt> contêm os valores <tt>$05</tt> e <tt>$07</tt> respetivamente. Pensa em <tt>($00,X)</tt> como <tt>($00 + X)</tt>. Neste caso <tt>X</tt> é <tt>$01</tt>, então isto simplifica para <tt>($01)</tt>. A partir daqui as coisas procedem como o endereçamento indireto padrão - os dois bytes em <tt>$01</tt> e <tt>$02</tt> (<tt>$05</tt> e <tt>$07</tt>) são procurados para formar o endereço <tt>$0705</tt>. Este é o endereço onde o registo <tt>Y</tt> foi armazenado na instrução anterior, então o registo <tt>A</tt> recebe o mesmo valor que <tt>Y</tt>, embora através de uma rota muito mais tortuosa. Não verás isto muito."
+ "Mapa de Memória"
+ "Muitos bugs menores foram corrigidos para melhorar a usabilidade geral"
+ "Principais melhorias na UI introduzindo um moderno Botão de Ação Flutuante com estados dinâmicos para controlo intuitivo do programa, e um widget de depuração completamente redesenhado usando componentes Adwaita modernos."
+ "Line Buster 6502"
+ "Estilo claro"
+ "Aprender através de exemplos nunca foi tão fácil. Mergulhe em código funcional, modifique-o, quebre-o, corrija-o novamente - foi assim que os melhores programadores aprenderam antigamente!"
+ "Aprenda a usar a pilha com as instruções PHA e PLA"
+ "Aprenda a programar o microprocessador 6502."
+ "Aprenda sobre a história dos computadores enquanto programa"
+ "Learn 6502 corre agora também no Windows e no macOS. Se queria mostrá-lo a alguém que não usa Linux, já o pode fazer."
+ "Learn 6502 agora corre no GNOME 50! Obrigado a Sabri Ünal por contribuir com a atualização do runtime."
+ "Aprenda Assembly 6502"
+ "Aprender"
+ "Falha nos rótulos"
+ "Rótulo já definido na linha %1$d: %2$s"
+ "O rótulo %1$s já está a ser usado como símbolo; por favor renomeia um deles"
+ "Saltar é como ramificar com duas diferenças principais. Primeiro, os saltos não são executados condicionalmente, e segundo, eles tomam um endereço absoluto de dois bytes. Para programas pequenos, este segundo detalhe não é muito importante, pois vais usar principalmente rótulos, e o assemblador calcula a localização de memória correta a partir do rótulo. Para programas maiores, porém, saltar é a única forma de se mover de uma secção do código para outra."
+ "Saltando"
+ "JSR/RTS"
+ "JMP"
+ "Introdução"
+ "Flag de Interrupção: Quando definida, mascara (desativa) todas as interrupções mascaráveis (IRQ). Apenas as Interrupções Não-Mascaráveis (NMI) podem ainda ocorrer. Usada para secções críticas de código que não devem ser interrompidas."
+ "Tipo de letra da interface"
+ "Tutorials interativos guiam-te do principiante ao avançado"
+ "Tutorial interativo"
+ "As instruções na linguagem assembly são como um pequeno conjunto de funções predefinidas. Todas as instruções tomam zero ou um argumento. Aqui está algum código fonte anotado para introduzir algumas instruções diferentes:"
+ "Instruções"
+ "Inicialização"
+ "Indireto: <tt>($c000)</tt>"
+ "Indireto indexado: <tt>($c0),Y</tt>"
+ "Indireto indexado é como indexado indireto mas menos louco. Em vez de adicionar o registo <tt>X</tt> ao endereço <i>antes</i> da dereferência, o endereço da página zero é dereferenciado, e o registo <tt>Y</tt> é adicionado ao endereço resultante."
+ "O endereçamento indireto usa um endereço absoluto para procurar outro endereço. O primeiro endereço dá o byte menos significativo do endereço, e o byte seguinte dá o byte mais significativo. Isso pode ser difícil de compreender, por isso aqui está um exemplo:"
+ "Indexando rótulos..."
+ "Indexado indireto: <tt>($c0,X)</tt>"
+ "Registo de índice Y: Usado para endereçamento"
+ "Registo de índice X: Usado para endereçamento"
+ "Neste pequeno tutorial vou mostrar-te como começar a escrever linguagem assembly 6502. O processador 6502 foi um gigante nos anos 70 e 80, alimentando computadores famosos como o <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a> e o <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. O Bender do Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">tem um processador 6502 como cérebro</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Até o Exterminador foi programado em 6502</a>."
+ "Neste exemplo, <tt>$f0</tt> contém o valor <tt>$01</tt> e <tt>$f1</tt> contém o valor <tt>$cc</tt>. A instrução <tt>JMP ($f0)</tt> faz com que o processador procure os dois bytes em <tt>$f0</tt> e <tt>$f1</tt> (<tt>$01</tt> e <tt>$cc</tt>) e os junte para formar o endereço <tt>$cc01</tt>, que se torna o novo contador de programa. Monta e percorre passo a passo o programa acima para ver o que acontece. Falarei mais sobre <tt>JMP</tt> na secção sobre <a href=\"#jumping\">Saltar</a>."
+ "Neste caso, <tt>($01)</tt> procura os dois bytes em <tt>$01</tt> e <tt>$02</tt>: <tt>$03</tt> e <tt>$07</tt>. Estes formam o endereço <tt>$0703</tt>. O valor do registo <tt>Y</tt> é adicionado a este endereço para dar o endereço final <tt>$0704</tt>."
+ "Neste assembler, podemos definir constantes descritivas (ou símbolos) que representam números. O resto do código pode então simplesmente usar as constantes em vez do número literal, o que imediatamente torna óbvio com o que estamos a lidar. Podes usar letras, dígitos e underscores num nome."
+ "No editor <b>escreve</b> (não coles) o seguinte código:"
+ "Na linguagem assembly, normalmente usarás rótulos com instruções de ramificação. Quando montado, no entanto, este rótulo é convertido num deslocamento relativo de um byte (um número de bytes para ir para trás ou para a frente a partir da próxima instrução) pelo que as instruções de ramificação só podem ir para a frente e para trás cerca de 256 bytes. Isto significa que só podem ser usadas para se moverem em torno do código local. Para ir mais longe precisarás de usar as instruções de salto."
+ "Melhorado o desempenho da consola de jogos para uma jogabilidade mais suave"
+ "Melhorado o ecrã do jogo e os controlos para dispositivos móveis"
+ "Melhoradas as descrições para serem mais acolhedoras para utilizadores não técnicos"
+ "Implícito"
+ "Imediato: <tt>#$c0</tt>"
+ "O endereçamento imediato não trata estritamente de endereços de memória - este é o modo onde valores reais são usados. Por exemplo, <tt>LDX #$01</tt> carrega o valor <tt>$01</tt> no registo <tt>X</tt>. Isto é muito diferente da instrução da página zero <tt>LDX $01</tt> que carrega o valor na localização de memória <tt>$01</tt> no registo <tt>X</tt>."
+ "Se o idioma do seu sistema for chinês, a aplicação volta a aparecer em chinês. Por engano, estava a recorrer ao inglês."
+ "Se o seu exemplo for baseado ou inspirado em outro exemplo, pode fornecer o URL de origem."
+ "Se fala uma das línguas listadas, por favor ajude a rever ou melhorar as traduções. Pode contribuir através das ligações na aplicação, da nossa plataforma de tradução ou abrindo um issue."
+ "Se o resultado da adição for maior do que um único byte, o endereço dá a volta. Por exemplo:"
+ "IDE"
+ "Não vou explicar em profundidade como cada uma das direções funciona, mas a explicação acima deveria dar-te o suficiente para o trabalhares com um pouco de estudo."
+ "Oculto"
+ "Hexdump gerado."
+ "Hexdump"
+ "Monitor Hex"
+ "Aqui está um exemplo. Nota que os operandos imediatos ainda são precedidos por um <tt>#</tt>."
+ "Ajuda"
+ "O hebraico é também a nossa primeira língua escrita da direita para a esquerda: graças aos testes e contribuições de Menachem, a aplicação suporta agora disposições da direita para a esquerda, ficando preparada para mais línguas RTL."
+ "Verde"
+ "Ótimo começo — concluiu o primeiro capítulo!"
+ "Tem a sua própria criação 6502? Partilhe-a com a comunidade! Agora pode submeter os seus exemplos de código diretamente da aplicação. Basta premir o botão de partilha e criaremos automaticamente um issue e pull request no GitHub para si."
+ "Tem um exemplo 6502 interessante?\nPartilhe-o com a comunidade!"
+ "Ir entre secções é mais complicado, pois temos de levar em conta também o byte mais significativo. Por exemplo, ir para baixo de <tt>$02e1</tt> deveria levar a <tt>$0301</tt>. Felizmente, isto é bastante fácil de conseguir. Adicionar <tt>$20</tt> a <tt>$e1</tt> resulta em <tt>$01</tt> e define o bit carry. Se o bit carry foi definido, sabemos que também precisamos de incrementar o byte mais significativo."
+ "Alemão e Espanhol foram validados por colaboradores. As restantes línguas são rascunhos assistidos por IA e necessitam de validação humana."
+ "Os jogos agora param automaticamente ao alternar entre ecrãs"
+ "Tecla do comando de jogos pressionada:"
+ "GNOME"
+ "GNOME"
+ "Versão totalmente comentada do jogo da cobra"
+ "Memória Completa ($0000-$FFFF)"
+ "Encontrados %1$d rótulos."
+ "Encontrado %1$d rótulo."
+ "Para Linux existe agora também uma AppImage: um ficheiro, sem instalação, útil numa distribuição para a qual não criamos pacotes."
+ "Tipo de letra"
+ "Seguir estilo do sistema"
+ "Corrigido erro de compilação no PostmarketOS, melhorando a compatibilidade móvel"
+ "Corrigido um problema onde o botão Voltar na secção de aprendizagem estava sempre visível no modo de computador e tablet, mesmo quando não havia subpágina aberta."
+ "Primeiro, <tt>readkeys</tt> verifica se uma das teclas de direção (W, A, S, D) foi pressionada, e se sim, define a direção da cobra em conformidade. Depois, <tt>checkCollision</tt> verifica se a cobra colidiu consigo própria ou com a maçã. <tt>updateSnake</tt> atualiza a representação interna da cobra, baseada na sua direção. Em seguida, a maçã e a cobra são desenhadas. Finalmente, <tt>spinWheels</tt> faz o processador fazer algum trabalho ocupado, para impedir que o jogo corra demasiado depressa. Pensa nisso como um comando sleep. O jogo continua a correr até a cobra colidir com a parede ou consigo própria."
+ "Primeiro carregamos o valor <tt>$08</tt> no registo <tt>X</tt>. A linha seguinte é um rótulo. Os rótulos apenas marcam certos pontos num programa para que possamos voltar a eles mais tarde. Depois do rótulo decrementamos <tt>X</tt>, armazenamo-lo em <tt>$0200</tt> (o pixel superior esquerdo), e depois comparamo-lo com o valor <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compara o valor no registo <tt>X</tt> com outro valor. Se os dois valores forem iguais, a flag <tt>Z</tt> é definida como <tt>1</tt>, caso contrário é definida como <tt>0</tt>."
+ "Primeira linha: <tt>$0200</tt>-<tt>$021F</tt>, segunda linha: <tt>$0220</tt>-<tt>$023F</tt>, etc."
+ "Primeira versão do Learn 6502 Assembly para GNOME"
+ "Finalmente, o byte <tt>$03</tt> contém o comprimento atual da cobra, em termos de bytes na memória (portanto, um comprimento de 4 significa 2 pixels)."
+ "Preencha as informações sobre o seu exemplo 6502 para partilhar com a comunidade"
+ "O ficheiro \"%1$s\" tem alterações não guardadas"
+ "Falhou ao copiar para a área de transferência"
+ "Exercícios"
+ "Exercício"
+ "Executa instruções uma a uma em vez de continuamente"
+ "Exemplos"
+ "Exemplo submetido para revisão"
+ "Embora esta seja uma versão simples, o código será substancialmente maior do que todos os exemplos anteriores. Teremos de acompanhar várias localizações de memória em conjunto para os vários aspetos do jogo. Podemos ainda fazer a contabilidade necessária ao longo do programa nós mesmos, como antes, mas numa escala maior isso torna-se rapidamente tedioso e também pode levar a bugs difíceis de detetar. Em vez disso, vamos agora deixar o assembler fazer parte do trabalho mundano por nós."
+ "Par ou Ímpar"
+ "Equipado com esse conhecimento, deverás ser capaz de ver que a instrução <tt>LDA #$01</tt> carrega o valor hexadecimal <tt>$01</tt> no registo <tt>A</tt>. Vou entrar em mais detalhes sobre os registos na próxima secção."
+ "Melhorada a entrada de gama de endereços do monitor hex para facilitar a edição de valores"
+ "Melhorada a apresentação da aplicação e acessibilidade"
+ "Ativar Modo Passo a Passo"
+ "Ativar Depurador"
+ "Cada secção (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) primeiro verifica se a direção atual é o oposto da nova direção. Isto requer outro pequeno desvio."
+ "Concluído"
+ "Organização do Ecrã"
+ "Memória de Visualização ($0200-$05FF)"
+ "Descobre o fascinante mundo da programação de computadores clássicos e consolas de jogos! Aprende a linguagem assembly 6502 - o mesmo código que alimentou sistemas icónicos como o NES, Commodore 64 e Apple II."
+ "Descartar"
+ "Desmontagem gerada."
+ "Desmontado"
+ "Desativa para melhorar o desempenho"
+ "Dino Run"
+ "Descrição"
+ "Flag Decimal: Ativa o modo Binary Coded Decimal (BCD) para operações aritméticas. Quando definida, as instruções ADC/SBC tratam valores como dígitos decimais (0-9) em vez de binário. Usada para cálculos financeiros e aritmética decimal."
+ "O depurador agora só atualiza quando visível, reduzindo o processamento desnecessário"
+ "Depurador"
+ "Depure os seus programas com ferramentas de inspeção em tempo real"
+ "Definições de depuração"
+ "Depurar"
+ "Estilo escuro"
+ "Criar um jogo"
+ "Copiar para o editor"
+ "Copiar para a área de transferência"
+ "Copiado para a área de transferência"
+ "Continuar"
+ "Confirmar"
+ "Instruções Comuns"
+ "Jogo da Cobra Comentado"
+ "Paleta de Cores"
+ "Editor de código e consola de jogo virtual"
+ "Código copiado para o editor"
+ "Código montado com sucesso, %1$d bytes."
+ "Código"
+ "Muda um dos pixels para desenhar no canto inferior direito (localização de memória <tt>$05ff</tt>)."
+ "Flag Carry: Definida quando uma adição produz um carry-out; limpa quando uma subtração requer um borrow. Usada para aritmética multi-byte e shifts/rotates (BCS/BCC)."
+ "Cancelar"
+ "Ao submeter, concorda que o seu exemplo será licenciado sob <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Parte os blocos com a raquete e a bola."
+ "Flag Break: Definida quando uma instrução BRK (Break) é executada. Usada para distinguir entre interrupções de software (BRK) e interrupções de hardware. Ajuda a identificar a origem de uma interrupção nas rotinas de serviço de interrupção."
+ "Ramificação"
+ "Azul"
+ "Como o estado do jogo é armazenado em termos de localizações de píxeis, a renderização do jogo é bastante direta. A primeira sub-rotina, <tt>drawApple</tt>, é extremamente simples. Define <tt>Y</tt> como zero, carrega uma cor aleatória no acumulador e, em seguida, armazena este valor em <tt>($00),y</tt>. <tt>$00</tt> é onde a localização da maçã está armazenada, então <tt>($00),y</tt> desreferencia para esta localização de memória. Leia a secção \"Indexação indireta\" em <a href=\"#addressing\">Modos de endereçamento</a> para mais detalhes."
+ "Voltar"
+ "Autor"
+ "A um nível mais baixo, esta sub-rotina é um pouco mais complexa. Primeiro, o comprimento é carregado no registo <tt>X</tt>, que é então decrementado. O excerto abaixo mostra a memória inicial para a cobra."
+ "Ficheiros Assembly"
+ "Assembly"
+ "A montar código..."
+ "Montado com sucesso"
+ "Monta o seguinte código, depois abre a vista <b>Depurar</b> e verifica o <b>Hexdump</b> para ver o código montado."
+ "Monta o código, depois abre a vista <b>Depurar</b> e percorre o código passo a passo, observando os registos <tt>A</tt> e <tt>X</tt>. Algo ligeiramente estranho acontece na linha <tt>ADC #$c4</tt>. Poderias esperar que adicionar <tt>$c4</tt> a <tt>$c0</tt> desse <tt>$184</tt>, mas este processador dá o resultado como <tt>$84</tt>. O que se passa com isso?"
+ "Monta o código e usa <b>Passo</b> para percorrer passo a passo estas três instruções. O <b>Monitor Hex</b> na vista de depuração mostra uma secção da memória, e pode ser útil para visualizar a execução dos programas. <tt>STA $01</tt> armazena o valor do registo <tt>A</tt> na localização de memória <tt>$01</tt>, e <tt>ADC $01</tt> adiciona o valor armazenado na localização de memória <tt>$01</tt> ao registo <tt>A</tt>. <tt>$80 + $80</tt> deveria ser igual a <tt>$100</tt>, mas como isso é maior do que um byte, o registo <tt>A</tt> é definido como <tt>$00</tt> e a flag carry é definida. Além disso, a flag zero é definida. A flag zero é definida por todas as instruções onde o resultado é zero."
+ "Montagem falhou"
+ "Montar"
+ "Como referido anteriormente, as quatro direções são representadas internamente pelos números 1, 2, 4 e 8. Cada um destes números é uma potência de 2, pelo que são representados por um número binário com um único <tt>1</tt>:"
+ "Enquanto te moves dentro de uma destas tiras horizontais, as coisas são simples. Por exemplo, para te moveres para a direita, apenas incrementa o byte menos significativo (por exemplo, <tt>$0200</tt> torna-se <tt>$0201</tt>). Para ir para baixo, adiciona <tt>$20</tt> (por exemplo, <tt>$0200</tt> torna-se <tt>$0220</tt>). Esquerda e cima são o reverso."
+ "Como sempre, esta versão inclui muitas pequenas correções e melhorias."
+ "Melhorias de arquitetura permitem uma melhor partilha de código entre as plataformas GNOME, Web e Android."
+ "Definições de aparência"
+ "Aparência"
+ "Qualquer número precedido de <tt>$</tt> na linguagem assembly 6502 (e por extensão, neste livro) está no formato hexadecimal (hex). Se não estás familiarizado com números hexadecimais, recomendo que leias <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">o artigo da Wikipédia</a>. Qualquer coisa precedida de <tt>#</tt> é um valor numérico literal. Qualquer outro número refere-se a uma localização de memória."
+ "Uma coisa importante a notar aqui é a distinção entre <tt>ADC #$01</tt> e <tt>ADC $01</tt>. O primeiro adiciona o valor <tt>$01</tt> ao registo <tt>A</tt>, mas o segundo adiciona o valor armazenado na localização de memória <tt>$01</tt> ao registo <tt>A</tt>."
+ "Também útil: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Quase pronto!"
+ "Todas as instruções que suportam endereçamento absoluto (com a exceção das instruções de salto) também têm a opção de tomar um endereço de um byte. Este tipo de endereçamento chama-se \"página zero\" - apenas a primeira página (os primeiros 256 bytes) da memória são acessíveis. Isto é mais rápido, pois apenas um byte precisa de ser procurado, e também ocupa menos espaço no código montado."
+ "Todos os ficheiros"
+ "Após isto, o valor <tt>2</tt> é adicionado ao acumulador, para criar um número aleatório final na gama 2–5."
+ "Após o bloco inicial de comentários (linhas começando com ponto e vírgula), as primeiras duas linhas são:"
+ "Após a deteção de colisão, atualizamos a localização da cobra. Isto é feito a um nível alto da seguinte forma: Primeiro, move cada par de bytes do corpo uma posição para cima na memória. Segundo, atualiza a cabeça de acordo com a direção atual. Finalmente, se a cabeça estiver fora dos limites, trata como uma colisão. Vou ilustrar isto com alguma arte ASCII. Cada par de parênteses contém uma coordenada x,y em vez de um par de bytes para simplicidade."
+ "Após um movimento em cada direção, também precisamos verificar se a cabeça ficaria fora dos limites. Isto é tratado de forma diferente para cada direção. Para a esquerda e direita, podemos verificar se a cabeça efetivamente \"deu a volta\". Ao mover para a direita a partir de <tt>$021f</tt>, incrementando o byte menos significativo, chegaríamos a <tt>$0220</tt>, mas isto na verdade significa saltar do último píxel da primeira linha para o primeiro píxel da segunda linha. Assim, sempre que nos movemos para a direita, precisamos verificar se o novo byte menos significativo é um múltiplo de <tt>$20</tt>. Isto é feito usando uma verificação de bits contra a máscara <tt>$1f</tt>. A ilustração abaixo mostrará como mascarar os 5 bits menos significativos revela se um número é múltiplo de <tt>$20</tt> ou não."
+ "Adwaita"
+ "Modos de endereçamento"
+ "Modos de Endereçamento"
+ "Endereço %1$s - opcode desconhecido"
+ "Entradas de botão adicionais também estão disponíveis: botão A (tecla Enter/Return, código ASCII <tt>$0D</tt>) e botão B (tecla espaço, código ASCII <tt>$20</tt>). Podem ser usadas para adicionar mais interação aos seus jogos. Para controlos direcionais, tanto as teclas WASD como as teclas de seta podem ser usadas de forma intercambiável."
+ "Adicionada funcionalidade de ajuda para tornar a edição de código mais fácil para principiantes"
+ "Adicionada gestão de ficheiros para guardar e carregar os seus programas"
+ "Adiciona mais instruções para desenhar pixels extra."
+ "Acumulador: Registo principal para cálculos"
+ "Destaque: Amarelo"
+ "Destaque: Verde-azulado"
+ "Destaque: Ardósia"
+ "Destaque: Vermelho"
+ "Destaque: Roxo"
+ "Destaque: Rosa"
+ "Destaque: Laranja"
+ "Destaque: Verde"
+ "Destaque: Azul"
+ "Cor de destaque"
+ "Absoluto: <tt>$c000</tt>"
+ "Absoluto,X e absoluto,Y: <tt>$c000,X</tt> e <tt>$c000,Y</tt>"
+ "Sobre Learn 6502 Assembly"
+ "Uma lista completa do conjunto de instruções 6502 está <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">disponível aqui</a> e <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">aqui</a> (normalmente refiro-me a ambas as páginas, pois têm os seus pontos fortes e fracos). Estas páginas detalham os argumentos de cada instrução, quais os registos que usam e quais as flags que definem. São a sua bíblia."
+ "Foi aberto um issue do GitHub no seu navegador. Revise e envie-o lá para completar a sua contribuição. Após aprovação, o seu exemplo será incluído na próxima versão.\n\nSe o seu exemplo for muito grande, o conteúdo completo será copiado para a área de transferência para colagem manual no issue do GitHub."
+ "<tt>init</tt> e <tt>loop</tt> são ambas sub-rotinas. <tt>init</tt> inicializa o estado do jogo, e <tt>loop</tt> é o ciclo principal do jogo."
+ "<tt>checkSnakeCollision</tt> percorre os segmentos do corpo da cobra, verificando cada par de bytes contra o par da cabeça. Se houver uma correspondência, então o jogo acabou."
+ "<tt>a9</tt> e <tt>c9</tt> são os códigos de operação do processador para <tt>LDA</tt> e <tt>CMP</tt> endereçados imediatamente, respetivamente. <tt>01</tt> e <tt>02</tt> são os argumentos para estas instruções. <tt>d0</tt> é o código de operação para <tt>BNE</tt>, e o seu argumento é <tt>02</tt>. Isto significa \"saltar sobre os próximos dois bytes\" (<tt>85 22</tt>, a versão montada de <tt>STA $22</tt>). Tente editar o código para que <tt>STA</tt> use um endereço absoluto de dois bytes em vez de um endereço da página zero de um byte (por exemplo, mude <tt>STA $22</tt> para <tt>STA $2222</tt>). Monte novamente o código e observe o hexdump — o argumento para <tt>BNE</tt> deve agora ser <tt>03</tt>, porque a instrução que o processador está a saltar tem agora três bytes."
+ "<tt>X</tt> contém a cor do pixel, e <tt>Y</tt> contém a posição do pixel atual. O primeiro ciclo desenha a cor atual como um pixel (através do registo <tt>A</tt>), empurra a cor para a pilha, depois incrementa a cor e a posição. O segundo ciclo retira da pilha, desenha a cor retirada como um pixel, depois incrementa a posição. Como seria de esperar, isto cria um padrão espelhado."
+ "<tt>SP</tt> é o ponteiro da pilha. Ainda não vou falar da pilha, mas basicamente este registo é decrementado sempre que um byte é empurrado para a pilha, e incrementado quando um byte é retirado da pilha."
+ "<tt>PC</tt> é o contador de programa - é como o processador sabe em que ponto do programa se encontra atualmente. É como o número da linha atual de um script em execução. No simulador o código é montado começando na localização de memória <tt>$0600</tt>, por isso <tt>PC</tt> começa sempre aí."
+ "<tt>JSR</tt> e <tt>RTS</tt> (\"salto para sub-rotina\" e \"retorno de sub-rotina\") são um duo dinâmico que vais ver normalmente usados juntos. <tt>JSR</tt> é usado para saltar da localização atual para outra parte do código. <tt>RTS</tt> retorna à posição anterior. Isto é basicamente como chamar uma função e retornar."
+ "<tt>JMP</tt> é um salto incondicional. Aqui está um exemplo muito simples para o mostrar em ação:"
+ "<tt>BCC</tt> e <tt>BCS</tt> (\"ramificar se carry limpo\" e \"ramificar se carry definido\") são usados para ramificar com base na flag carry. Escreve um programa que use uma destas duas."
+ "<b>Página Zero</b>: <tt>$0000</tt>-<tt>$00FF</tt> (primeiros 256 bytes, acesso mais rápido)"
+ "<b>Página Zero</b> (<tt>$c0</tt>): Aceder a localizações de memória <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Página Zero,X/Y</b> (<tt>$c0,X</tt>): Adicionar registo X/Y ao endereço da página zero"
+ "<b>Z</b> (Zero): Definido quando o resultado é zero"
+ "<b>X, Y</b>: Registos de índice para endereçamento e contagem"
+ "<b>W</b> ou tecla seta para cima (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Definido quando operação aritmética causa overflow assinado"
+ "<b>Pilha</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Armazenar registos na memória"
+ "<b>SP</b> (Ponteiro da Pilha): Aponta para a posição atual da pilha (começa em <tt>$FF</tt>)"
+ "<b>SBC precisa carry definido</b>: Define <tt>C</tt> antes de subtrair (funciona como borrow inverso). <tt>C</tt> limpo após SBC indica que um borrow ocorreu."
+ "<b>S</b> ou tecla seta para baixo (<tt>$73</tt>)"
+ "<b>Relativo</b> (<tt>label</tt>): Ramificação usa deslocamento de 8 bits com sinal a partir da próxima instrução (−128…+127)"
+ "<b>Q</b> ou tecla Enter/Return (<tt>$0D</tt>)"
+ "<b>Armazenamento de programa</b>: Começando em <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Empurrar/puxar acumulador para/da pilha"
+ "<b>PC</b> (Program Counter): Aponta para a próxima instrução a executar"
+ "<b>N</b> (Negative): Definido quando o bit 7 do resultado está definido"
+ "<b>LDA/LDX/LDY</b>: Carregar registos"
+ "<b>JSR/RTS</b>: Salto para sub-rotina / Retorno de sub-rotina"
+ "<b>JMP</b>: Salto incondicional"
+ "<b>Indireto</b> (<tt>($c000)</tt>): Procurar endereço armazenado na localização dada"
+ "<b>Indireto indexado</b> (<tt>($c0),Y</tt>): Usar endereço da página zero como ponteiro para obter endereço base, depois adicionar Y a essa base"
+ "<b>Indexado indireto</b> (<tt>($c0,X)</tt>): Adicionar X ao endereço da página zero, depois usar o resultado como ponteiro para obter o endereço alvo real"
+ "<b>Imediato</b> (<tt>#$c0</tt>): Usar o valor atual"
+ "<b>INX/INY/DEX/DEY</b>: Incrementar/decrementar registos"
+ "<b>I</b> (Interrupt): Definido quando as interrupções estão desativadas"
+ "<b>E</b> ou tecla espaço (<tt>$20</tt>)"
+ "<b>Memória de visualização</b>: <tt>$0200</tt>-<tt>$05FF</tt> (usada para saída de ecrã)"
+ "<b>Controlos direcionais</b>:"
+ "<b>D</b> ou tecla seta direita (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Definido quando o processador está em modo BCD (Decimal Codificado Binário)"
+ "<b>Operações de comparação</b>: <tt>CMP/CPX/CPY</tt> definem <tt>N/Z/C</tt> como uma subtração (registo − memória) sem armazenar o resultado."
+ "<b>C</b> (Carry): Definido quando operações aritméticas ultrapassam um byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Ramificar se igual/diferente/carry limpo/carry definido"
+ "<b>B</b> (Break): Definido quando a instrução BRK é executada"
+ "<b>Botões de ação</b>:"
+ "<b>Absoluto</b> (<tt>$c000</tt>): Aceder a qualquer localização de memória"
+ "<b>Absoluto,X/Y</b> (<tt>$c000,X</tt>): Adicionar registo X/Y ao endereço absoluto"
+ "<b>ADC/SBC</b>: Adicionar/subtrair com carry"
+ "<b>A</b> ou tecla seta esquerda (<tt>$61</tt>)"
+ "<b>A</b> (Acumulador): Registo principal para cálculos e manipulação de dados"
+ "<b><tt>$f</tt></b>: Cinzento claro (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Azul claro (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Verde claro (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Cinzento (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Cinzento escuro (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Vermelho claro (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Última tecla pressionada (código ASCII)"
+ "<b><tt>$FE</tt></b>: Gerador de números aleatórios (lê como um valor aleatório 0-255)"
+ "<b><tt>$9</tt></b>: Castanho (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Laranja (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Amarelo (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Azul (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Verde (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Roxo (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Ciano (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Vermelho (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Branco (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Dados de posição da cobra (cabeça, segmentos do corpo, cauda)"
+ "<b><tt>$0</tt></b>: Preto (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Comprimento da cobra"
+ "<b><tt>$02</tt></b>: Direção da cobra (1=cima, 2=direita, 4=baixo, 8=esquerda)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Posição da maçã"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> criou um <a href=\"https://gist.github.com/wkjagt/9043907\">gist totalmente anotado deste código fonte</a>, por isso acompanhe-o para mais detalhes."
+ "A linguagem assembly 6502 tem um monte de instruções de ramificação, todas as quais ramificam com base em se certas flags estão definidas ou não. Neste exemplo vamos ver <tt>BNE</tt>: \"Ramificar se não igual\"."
+ "Pilha 6502 cheia! A dar a volta..."
+ "Pilha 6502 esvaziada! A dar a volta..."
+ "(Na verdade, fui informado de forma fiável que os processadores 6502 ainda são produzidos pela <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> e <a href=\"https://www.mouser.co.uk/c/?q=65C02\">vendidos a amadores</a>, por isso claramente o 6502 <i>não é</i> uma linguagem morta! Quem diria?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-ta/strings.xml b/packages/app-android/data/Android/src/main/res/values-ta/strings.xml
new file mode 100644
index 00000000..f0f33985
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-ta/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "6502 அசெம்பிளியைக் கற்றுக்கொள்"
+ "6502 அசெம்பிளியைக் கற்றுக்கொள்"
+ "6502 அசெம்பிளியைக் கற்றுக்கொள்"
+ "வணக்கம்! தமிழ்நேரம் அவர்கள் பங்களித்த தமிழ் மொழிபெயர்ப்புகளை வரவேற்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம். நன்றி!"
+ "இது மறைமுகமாக முகவரியிடப்பட்ட நினைவக இருப்பிடங்களைக் குறிக்கிறது <tt>$0411</tt>, <tt>$0410</tt> மற்றும் <tt>$040f</tt> (காட்சியின் நடுவில் மூன்று பிக்சல்கள்). நான் இந்த கட்டத்தில் உழைக்கிறேன், ஆனால் மறைமுக முகவரி எவ்வாறு செயல்படுகிறது என்பதை முழுமையாக புரிந்துகொள்வது முதன்மை."
+ "wdm-வெளியீடு"
+ "நிரலாக்கம்"
+ "கற்றல்"
+ "%1$s மூலம்"
+ "விருப்பங்கள்"
+ "சுழிய பக்கம்: <tt>$c0</tt>"
+ "சுழிய பக்கம்,ஒய்: <tt>$c0,Y</tt>"
+ "சுழிய பக்கம், X: <tt>$c0,X</tt>"
+ "சுழிய பக்க பயன்பாடு"
+ "சுழிய பக்கம் ($0000-$00FF)"
+ "பூச்சியக் கொடி: செயல்பாட்டின் முடிவு பூச்சியமாக இருக்கும்போது அமைக்கவும். நிபந்தனைக்குட்பட்ட கிளைகளுக்கு இன்றியமையாதது - மிகவும் நிபந்தனைக்குட்பட்ட சம்ப் வழிமுறைகள் (BEQ, BNE) மதிப்பானது பூச்சியமா என்பதை அடிப்படையாகக் கொண்டு நிரல் ஓட்டத்தைத் தீர்மானிக்க இந்தக் கொடியைச் சரிபார்க்கவும்."
+ "உங்கள் கோப்பில் சேமிக்கப்படாத மாற்றங்கள் உள்ளன. நீங்கள் அவற்றைச் சேமிக்கவில்லை என்றால் மாற்றங்கள் இழக்கப்படும்."
+ "நீங்கள் <tt>TAX</tt> பார்த்திருக்கிறீர்கள். <tt>TAY</tt>, <tt>TXA</tt> மற்றும் <tt>TYA</tt> என்ன செய்வது என்று நீங்கள் யூகிக்கலாம், ஆனால் உங்கள் அனுமானங்களைச் சோதிக்க சில குறியீட்டை எழுதுங்கள்."
+ "பயன்பாட்டை வாங்குவதன் மூலம் இந்தத் திறந்த மூலத் திட்டத்தை ஆதரித்துள்ளீர்கள். நன்றி!"
+ "திரையை 32 × 8 படப்புள்ளிகள் கொண்ட நான்கு கிடைமட்ட பட்டைகளாக நீங்கள் நினைக்கலாம். இந்த கீற்றுகள் <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> மற்றும் <tt>$0500-$05ff</tt>. பிக்சல்களின் முதல் வரிசைகள் <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt> போன்றவை."
+ "மஞ்சள்"
+ "உள்ளமைக்கப்பட்ட குறியீடு திருத்தி மூலம் குறியீட்டை எழுதி திருத்தவும்"
+ "இந்த எல்லா உதாரணங்களுடனும் நினைவக மாற்றத்தைக் காண பிழைத்திருத்தக் காட்சியில் <b>Hex Monitor</b> ஐப் பயன்படுத்துவது உங்களுக்கு உதவியாக இருக்கும். அந்தப் பிரிவைப் பார்க்க, பட்டியலிலிருந்து நினைவகப் பகுதியைத் தேர்ந்தெடுக்கவும் - எடுத்துக்காட்டாக, திரை பிக்சல்களைப் பார்க்க <b>டிச்ப்ளே நினைவக ($0200–$05FF)</b> அல்லது முதல் 256 பைட்டுகளை ஆய்வு செய்ய <b>சீரோ பேச் ($0000–$00FF)</b>."
+ "முழுமையான முகவரியுடன், முழு நினைவக இருப்பிடம் அறிவுறுத்தலுக்கான வாதமாகப் பயன்படுத்தப்படுகிறது. உதாரணமாக:"
+ "வியட்நாமிய மொழிபெயர்ப்பை வரவேற்கிறோம், மக்கள் உய்ன் (hthienloc) மூலம் முழுமையாகப் பங்களித்தார்."
+ "போலிச் மொழிபெயர்ப்பை வரவேற்கிறோம், ஆரம்பத்தில் மைக்ரோ வேவ் பங்களித்தது. Dziękujemy!"
+ "செயலி நிலைப் பிரிவை (<tt>A</tt>, <tt>PC</tt> போன்றவற்றுடன் கூடிய பிட்) நாங்கள் ஏற்கனவே கொஞ்சம் பார்த்துவிட்டோம், ஆனால் இதன் பொருள் என்ன?"
+ "கற்றல் தாவலில் ஒரு புதிய எடுத்துக்காட்டுகள் பகுதியைச் சேர்த்துள்ளோம், அங்கு நீங்கள் பயன்பாட்டில் உள்ள 6502 நிரல்களை முழுவதுமாக ஆராய்ந்து இயக்கலாம். எங்களின் பிரத்யேக பாம்பு கேம் உதாரணத்துடன் தொடங்கி, அந்த படப்புள்ளிகள் எவ்வாறு உயிர் பெறுகின்றன என்பதைப் பாருங்கள்!"
+ "<tt>$00</tt>-<tt>$0F</tt> மதிப்புகள் 16 வெவ்வேறு வண்ணங்களைக் குறிக்கின்றன (<tt>$00</tt>=கருப்பு, <tt>$01</tt>=வெள்ளை)"
+ "தனிப்பயன் முதன்மை வண்ணத்தைப் பயன்படுத்தவும்"
+ "தனிப்பயன் உச்சரிப்பு வண்ணத்தைப் பயன்படுத்தவும்"
+ "விளையாட்டின் நிலையைப் புதுப்பிக்கிறது"
+ "சேமிக்கப்படாத மாற்றங்கள்"
+ "சுழிய பக்கம், Y, absolute,Y போன்றவற்றை <tt>STX</tt> உடன் பயன்படுத்த முடியாது, ஆனால் <tt>LDA</tt> மற்றும் <tt>STA</tt> ஆகியவற்றைப் பயன்படுத்தலாம்."
+ "ஊட்டின் கீழ்: மேம்படுத்தப்பட்ட செயல்திறன் மற்றும் நிலைத்தன்மைக்காக டைப்ச்கிரிப்ட் 6, வைட் 8 மற்றும் பிற சார்பு மேம்படுத்தல்கள்."
+ "64k நினைவகத்திற்கு வெளியே குறியீட்டை இடமாற்ற முடியவில்லை"
+ "கொடுக்கப்பட்ட முகவரி/லேபிளைக் கண்டறிய/பாகுபடுத்த முடியவில்லை"
+ "இரண்டு அடுக்கு வழிமுறைகள் <tt>PHA</tt> மற்றும் <tt>PLA</tt>, \"புச் அக்யூமுலேட்டர்\" மற்றும் \"புல் அக்முலேட்டர்\". இந்த இரண்டு செயல்பாட்டின் சான்று கீழே உள்ளது."
+ "இரண்டு புதிய எடுத்துக்காட்டு நிரல்கள், இரண்டுமே உங்களிடமிருந்து வந்தவை: Jacob எழுதிய Dino Run, edit12 எழுதிய Line Buster 6502. பகிர் பொத்தான் மூலம் அனுப்பப்பட்ட முதல் எடுத்துக்காட்டுகள் இவை; இன்னும் பல வர வேண்டும் என்று விரும்புகிறோம்."
+ "<a href=\"https://www.skilldrick.co.uk/\">நிக் மோர்கன்</a> மூலம் <sub>டுடோரியல், CC BY 4.0</sub> இன் கீழ் உரிமம் பெற்றது"
+ "பயிற்சி"
+ "6502 முகவரி முறைகள் ஒவ்வொன்றையும் பயன்படுத்தும் குறியீடு துணுக்குகளை எழுத முயற்சிக்கவும். நினைவகத்தின் ஒரு பகுதியைக் காண பிழைத்திருத்தக் காட்சியில் <b>Hex Monitor</b>ஐப் பயன்படுத்தலாம் என்பதை நினைவில் கொள்ளவும்."
+ "6502 நுண்செயலிக்கான எடுத்துக்காட்டு நிரல்களை முயற்சிக்கவும்."
+ "எடுத்துக்காட்டு நிரல்களை முயற்சிக்கவும்"
+ "மூன்று பிக்சல்களின் நிறத்தை மாற்ற முயற்சிக்கவும்."
+ "பக்கப்பட்டியை மாற்று"
+ "திசை <tt>1</tt>, <tt>2</tt>, <tt>4</tt> அல்லது <tt>8</tt> என்பதைச் சோதிக்க, கேரி அமைக்கப்படும் வரை குறியீடு தொடர்ந்து வலதுபுறமாக மாறுகிறது. ஒன்று <tt>LSR</tt> என்றால் \"மேல்\", இரண்டு என்றால் \"வலது\", மற்றும் பல."
+ "தலைப்பு"
+ "இந்த வெளியீடு தனிப்பயனாக்கக்கூடிய வண்ணங்களுடன் துடிப்பான கையடக்க-ஈர்க்கப்பட்ட தீமிங்கைக் கொண்டுவருகிறது. அடாப்டிவ் டேப்லெட் மற்றும் டெச்க்டாப் தளவமைப்புகளை நாங்கள் அறிமுகப்படுத்தியுள்ளோம், அவை அனைத்தையும் பார்வைக்கு வைத்திருக்கின்றன, அவை அசெம்பிளியில் ரெட்ரோ கேம்களை உருவாக்க கற்றுக்கொள்ளும் போது அந்த மராத்தான் குறியீட்டு அமர்வுகளுக்கு ஏற்றது. சிறந்த டெச்க்டாப் தளவமைப்பு யோசனைகளுக்கு எங்கள் புதிய பங்களிப்பாளரான @mmartinortiz க்கு மிக்க நன்றி. டைப்ச்கிரிப்ட் கண்டிப்பு, தனிப்பயன் GtkSourceView பாணி திட்டங்கள் மற்றும் மென்மையான வளர்ச்சிக்கான மேம்படுத்தப்பட்ட பிழைத்திருத்தக் கட்டுப்பாடுகள் போன்ற சில சிறந்த தொழில்நுட்ப மேம்பாடுகள் உள்ளன."
+ "இது சற்று வித்தியாசமானது. இது சுழிய பக்கம், ஃச் மற்றும் மறைமுக இடையே குறுக்கு போன்றது. அடிப்படையில், நீங்கள் சுழிய பக்க முகவரியை எடுத்து, அதில் <tt>X</tt> பதிவின் மதிப்பைச் சேர்த்து, இரண்டு பைட் முகவரியைப் பார்க்க அதைப் பயன்படுத்தவும். உதாரணமாக:"
+ "இது <tt>$11</tt> மதிப்பை <tt>$10</tt> நினைவக இடத்திலும், <tt>$10</tt> <tt>$12</tt> ஆகவும், <tt>$0f</tt> <tt>$14</tt> இல் ஏற்றப்படும். இது <tt>$04</tt> மதிப்பை <tt>$11</tt>, <tt>$13</tt> மற்றும் <tt>$15</tt> இல் ஏற்றுகிறது. இது இதுபோன்ற நினைவகத்திற்கு வழிவகுக்கிறது:"
+ "இங்குதான் உரையாற்றுவது சுவாரச்யமானது. இந்த பயன்முறையில், சுழிய பக்க முகவரி கொடுக்கப்பட்டுள்ளது, பின்னர் <tt>X</tt> பதிவேட்டின் மதிப்பு சேர்க்கப்படும். இங்கே ஒரு உதாரணம்:"
+ "இது சுழிய பக்கம்,X க்கு சமமானதாகும், ஆனால் <tt>LDX</tt> மற்றும் <tt>STX</tt> உடன் மட்டுமே பயன்படுத்த முடியும்."
+ "இவை சுழிய பக்கம், ஃச் மற்றும் சுழிய பக்கம், ஒய் ஆகியவற்றின் முழுமையான முகவரி பதிப்புகள். உதாரணமாக:"
+ "மிகவும் நடைமுறை காரணமும் உள்ளது: ரெட்ரோ கேம் மேம்பாடு. ஓம்ப்ரூ காட்சி உயிருடன் இருக்கிறது—புதிய கேம்கள் இன்னும் <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">என்இஎச்க்காகவும்</a> (சில இயற்பியல் பொதியுறைகளாகவும்) மற்றும் பல கிளாசிக் சிச்டங்களுக்காக வெளியிடப்படுகின்றன; NES ஒரு சான்று மட்டுமே. உங்கள் இலக்கு SNES போன்றதாக இருந்தாலும், 6502 இல் தொடங்கி பலனளிக்கும்: SNES சிபியு (65C816) 6502 உடன் பின்தங்கிய-இணக்கமானது, எனவே நீங்கள் இங்கே கற்றுக் கொள்ளும் அடிப்படைகள்-பதிவு, முகவரி முறைகள் மற்றும் முக்கிய அறிவுறுத்தல் தொகுப்பு-நேரடியாக செயல்படுத்தப்படும்."
+ "பிறகு ஏன் 6502? <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a> போன்ற <i>பயனுள்ள</i> அசெம்பிளி மொழி ஏன் இல்லை? சரி, x86 கற்பது பயனுள்ளது என்று நான் நினைக்கவில்லை. உங்கள் அன்றாட வேலையில் நீங்கள் எப்போதாவது அசெம்பிளி மொழியை <i>எழுத</i> வேண்டியிருக்கும் என்றும் நான் நினைக்கவில்லை — சிலருக்கு இது ஒரு கல்விப் பயிற்சி, மனதையும் சிந்தனையையும் விரிவுபடுத்தும் ஒன்று. 6502 வேறொரு காலகட்டத்தில் உருவாக்கப்பட்டது; அப்போது பெரும்பாலான உருவாக்குநர்கள் இந்தப் புதிய உயர்நிலை நிரலாக்க மொழிகளில் அல்லாமல், நேரடியாக அசெம்பிளி எழுதிக்கொண்டிருந்தார்கள். எனவே இது மனிதர்கள் எழுதுவதற்கென வடிவமைக்கப்பட்டது. நவீன அசெம்பிளி மொழிகள் தொகுப்பிகள் எழுதுவதற்கானவை; எனவே அதை அவற்றிடமே விட்டுவிடுவோம். மேலும், 6502 <i>வேடிக்கையானது</i>. x86 ஐ <i>வேடிக்கையானது</i> என்று யாரும் சொன்னதில்லை."
+ "நினைவகத்தின் பூச்சியப் பக்கம் பல விளையாட்டு நிலை மாறிகளைச் சேமிக்கப் பயன்படுகிறது, இது விளையாட்டின் மேற்பகுதியில் உள்ள கருத்துத் தொகுதியில் குறிப்பிடப்பட்டுள்ளது. <tt>$00</tt>, <tt>$01</tt> மற்றும் <tt>$10</tt> மேலே உள்ள அனைத்தும் இரண்டு பைட் நினைவக இருப்பிடத்தைக் குறிக்கும் ஒரு இணை பைட்டுகள், அவை மறைமுக முகவரிகளைப் பயன்படுத்தி பார்க்கப்படும். இந்த நினைவக இருப்பிடங்கள் அனைத்தும் <tt>$0200</tt> மற்றும் <tt>$05ff</tt> - கேம் கன்சோலுடன் தொடர்புடைய நினைவகப் பகுதி. எடுத்துக்காட்டாக, <tt>$00</tt> மற்றும் <tt>$01</tt> <tt>$01</tt> மற்றும் <tt>$02</tt> மதிப்புகளைக் கொண்டிருந்தால், அவை காட்சியின் இரண்டாவது பிக்சலைக் குறிக்கும் (<tt>$0201</tt> - நினைவில் கொள்ளுங்கள், மறைமுக முகவரியில் குறைந்தபட்சம் குறிப்பிடத்தக்க பைட் முதலில் வருகிறது)."
+ "6502 செயலியில் உள்ள ச்டாக் மற்ற ச்டாக் போன்றது - மதிப்புகள் அதன் மீது தள்ளப்பட்டு பாப் (6502 மொழியில் \"இழுக்கப்பட்டது\"). அடுக்கின் தற்போதைய ஆழம் ச்டாக் பாயிண்டரால் அளவிடப்படுகிறது, ஒரு சிறப்பு பதிவேடு. <tt>$0100</tt> மற்றும் <tt>$01ff</tt> இடையே ச்டாக் நினைவகத்தில் உள்ளது. ச்டாக் பாயிண்டர் ஆரம்பத்தில் <tt>$ff</tt> ஆகும், இது நினைவக இருப்பிடத்தை <tt>$01ff</tt> குறிக்கிறது. ஒரு பைட்டை அடுக்கின் மீது தள்ளும் போது, ச்டாக் பாயிண்டர் <tt>$fe</tt> அல்லது நினைவக இருப்பிடம் <tt>$01fe</tt>, மற்றும் பல."
+ "ச்டாக்"
+ "டுடோரியலில் இருந்து பாம்பு விளையாட்டு"
+ "இந்த சப்ரூட்டினின் விளைவாக, ஒரு சீரற்ற பைட்டை <tt>$00</tt> ஆகவும், 2 மற்றும் 5க்கு இடையே உள்ள சீரற்ற எண்ணை <tt>$01</tt> ஆகவும் ஏற்ற வேண்டும். குறைந்த முக்கியத்துவம் வாய்ந்த பைட் முதலில் மறைமுக முகவரியுடன் வருவதால், இது <tt>$0200</tt> மற்றும் <tt>$05ff</tt> இடையே நினைவக முகவரியாக மொழிபெயர்க்கப்படுகிறது: காட்சியை வரைவதற்குப் பயன்படுத்தப்படும் சரியான வரம்பு."
+ "<tt>JSR</tt>, கொடுக்கப்பட்ட இடத்திற்குச் செல்வதற்கு முன், அடுத்த அறிவுறுத்தல்களில் ஒன்றைக் கழிக்கும் முகவரியை அடுக்கின் மீது தள்ளுவதால், எங்கு திரும்புவது என்பது செயலிக்குத் தெரியும். <tt>RTS</tt> இந்த இடத்தைப் பாப் செய்து, அதில் ஒன்றைச் சேர்த்து, அந்த இடத்திற்குத் தாவுகிறது. ஒரு உதாரணம்:"
+ "சிக்கல் என்னவென்றால், <tt>$184</tt> என்பது ஒரு பைட்டில் பொருத்த முடியாத அளவுக்கு பெரியதாக உள்ளது (அதிகபட்சம் <tt>$FF</tt>), மற்றும் பதிவேடுகள் ஒரு பைட்டை மட்டுமே வைத்திருக்க முடியும். இருந்தாலும் பரவாயில்லை; செயலி உண்மையில் ஊமை அல்ல. நீங்கள் கவனமாகப் பார்த்துக் கொண்டிருந்தால், இந்தச் செயல்பாட்டிற்குப் பிறகு கேரிக் கொடி <tt>1</tt> என அமைக்கப்பட்டிருப்பதைக் கவனித்திருப்பீர்கள். அப்படித்தான் தெரியும்."
+ "<tt>BNE</tt> க்கு எதிரானது <tt>BEQ</tt>. <tt>BEQ</tt> பயன்படுத்தும் நிரலை எழுத முயற்சிக்கவும்."
+ "<tt>ADC</tt> க்கு எதிரானது <tt>SBC</tt> (கேரியுடன் கழிக்கவும்). இந்த அறிவுறுத்தலைப் பயன்படுத்தும் நிரலை எழுதவும்."
+ "உலாவியின் ஆஃப்லைன் ஓட்ட விளையாட்டு, 6502 அசெம்பிளியில்"
+ "அடுத்த சப்ரூட்டின், <tt>generateApplePosition</tt>, ஆப்பிளின் இருப்பிடத்தைக் காட்சியில் ஒரு சீரற்ற நிலைக்கு அமைக்கிறது. முதலில், இது ஒரு சீரற்ற பைட்டைத் திரட்டியில் ஏற்றுகிறது (<tt>$fe</tt> என்பது இந்த சிமுலேட்டரில் உள்ள சீரற்ற எண் உருவாக்கி). இது <tt>$00</tt> இல் சேமிக்கப்படுகிறது. அடுத்து, வேறொரு சீரற்ற பைட் திரட்டியில் ஏற்றப்பட்டு, அது <tt>$03</tt> மதிப்புடன் <tt>AND</tt> செய்யப்படுகிறது. இந்தப் பகுதிக்குச் சற்று மாற்றுப்பாதை தேவைப்படுகிறது."
+ "அடுத்த சப்ரூட்டீன், <tt>checkCollision</tt>, <tt>checkAppleCollision</tt> மற்றும் <tt>checkSnakeCollision</tt> ஆகியவற்றை ஒத்திவைக்கிறது. <tt>checkAppleCollision</tt> ஆப்பிளின் இருப்பிடத்தை வைத்திருக்கும் இரண்டு பைட்டுகள் தலையின் இருப்பிடத்தை வைத்திருக்கும் இரண்டு பைட்டுகளுடன் பொருந்துகிறதா என்பதைப் பார்க்கவும். அவர்கள் செய்தால், நீளம் அதிகரிக்கப்பட்டு புதிய ஆப்பிள் நிலை உருவாக்கப்படும்."
+ "அடுத்த வரி, <tt>BNE decrement</tt>, <tt>Z</tt> கொடி <tt>0</tt> ஆக அமைக்கப்பட்டிருந்தால் (அதாவது <tt>CPX</tt> ஒப்பீட்டில் உள்ள இரண்டு மதிப்புகளும் சமமாக இல்லை என்றால்) இயக்கத்தை decrement லேபிளுக்கு மாற்றும்; இல்லையெனில் அது ஒன்றும் செய்யாது, நாம் <tt>X</tt> ஐ <tt>$0201</tt> இல் சேமித்துவிட்டு நிரலை முடிக்கிறோம்."
+ "அடுத்த பிட் திசையைப் பொறுத்து பாம்பின் தலையை புதுப்பிக்கிறது. இது குறியீட்டின் மிகவும் சிக்கலான பகுதியாக இருக்கலாம், மேலும் இவை அனைத்தும் நினைவக இருப்பிடங்கள் திரையில் எவ்வாறு வரைபடமாக்கப்படுகின்றன என்பதைப் பொறுத்தது, எனவே அதை இன்னும் விரிவாகப் பார்ப்போம்."
+ "நீளம் <tt>4</tt> க்கு துவக்கப்பட்டது, எனவே <tt>X</tt> <tt>3</tt> என தொடங்குகிறது. <tt>LDA $10,x</tt> <tt>$13</tt> இன் மதிப்பை <tt>A</tt> இல் ஏற்றுகிறது, பின்னர் <tt>STA $12,x</tt> இந்த மதிப்பை <tt>$15</tt> இல் சேமிக்கிறது. <tt>X</tt> குறைக்கப்பட்டது, நாங்கள் லூப் செய்கிறோம். இப்போது <tt>X</tt> என்பது <tt>2</tt>, எனவே நாம் <tt>$12</tt>ஐ ஏற்றி <tt>$14</tt> இல் சேமிக்கிறோம். <tt>X</tt> நேர்மறையாக இருக்கும்போது இது சுழல்கிறது (<tt>BPL</tt> என்றால் \"நேர்மறையாக இருந்தால் கிளை\")."
+ "கடைசி சப்ரூட்டீன், <tt>spinWheels</tt> உள்ளது, ஏனெனில் கேம் மிக வேகமாக இயங்கும். அனைத்து <tt>spinWheels</tt> மீண்டும் பூச்சியத்தைத் தாக்கும் வரை பூச்சியத்திலிருந்து <tt>X</tt> எண்ணுவதுதான். முதல் <tt>dex</tt> மடக்கு, <tt>X</tt> <tt>#$ff</tt>."
+ "கடைசி பகுதி செயலி கொடிகளைக் காட்டுகிறது. ஒவ்வொரு கொடியும் ஒரு பிட், எனவே ஏழு கொடிகளும் ஒரே பைட்டில் வாழ்கின்றன. கொடிகள் செயலி மூலம் முந்தைய அறிவுறுத்தல் பற்றிய தகவல்களை வழங்க அமைக்கப்பட்டுள்ளன. அதைப் பற்றி பின்னர். <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">பதிவேடுகள் மற்றும் கொடிகள் பற்றி இங்கு மேலும் படிக்கவும்</a>."
+ "ஃச் மதிப்பு <tt>$03</tt> பைனரியில் <tt>00000011</tt> என குறிப்பிடப்படுகிறது. <tt>AND</tt> ஆப்கோடு திரட்டியுடன் ஒரு பிட்வைச் மற்றும் வாதத்தை செய்கிறது. எடுத்துக்காட்டாக, திரட்டியில் பைனரி மதிப்பு <tt>10101010</tt> இருந்தால், <tt>00000011</tt> உடன் <tt>AND</tt> முடிவு <tt>00000010</tt> ஆக இருக்கும்."
+ "ஃச் இப்படி இருக்க வேண்டும்:"
+ "விளையாட்டு வளையம்"
+ "முதல் இரண்டு பைட்டுகள் ஆப்பிளின் இருப்பிடத்தை வைத்திருக்கின்றன. பாம்பு ஆப்பிளை சாப்பிடும் ஒவ்வொரு முறையும் இது புதுப்பிக்கப்படும். பைட் <tt>$02</tt> தற்போதைய திசையைக் கொண்டுள்ளது. <tt>1</tt> என்றால் மேலே, <tt>2</tt> வலது, <tt>4</tt> கீழே, மற்றும் <tt>8</tt> இடது. இந்த எண்களுக்குப் பின்னால் உள்ள காரணம் பின்னர் தெளிவாகத் தெரியும்."
+ "முதல் சப்ரூட்டீன், <tt>readKeys</tt>, பயனர் உள்ளீட்டை ஏற்கும் வேலையைச் செய்கிறது. நினைவக இருப்பிடம் <tt>$ff</tt> இந்த சிமுலேட்டரில் அண்மைக் கால விசை அழுத்தத்தின் ascii குறியீட்டைக் கொண்டுள்ளது. மதிப்பு திரட்டியில் ஏற்றப்பட்டது, பின்னர் <tt>$77</tt> (W க்கான ஃச் குறியீடு), <tt>$64</tt> (D), <tt>$73</tt> (S) மற்றும் <tt>$61</tt> (A) உடன் ஒப்பிடப்படுகிறது. இந்த ஒப்பீடுகளில் ஏதேனும் வெற்றிகரமாக இருந்தால், நிரல் பொருத்தமான பகுதிக்கு செல்கிறது."
+ "முதல் வரி <tt>A</tt>, <tt>X</tt> மற்றும் <tt>Y</tt> பதிவேடுகளைக் காட்டுகிறது (<tt>A</tt> பெரும்பாலும் \"திரட்சி\" என்று அழைக்கப்படுகிறது). ஒவ்வொரு பதிவேட்டிலும் ஒரு பைட் உள்ளது. பெரும்பாலான செயல்பாடுகள் இந்த பதிவேடுகளின் உள்ளடக்கத்தில் வேலை செய்கின்றன."
+ "முதல் வழிமுறை, இயக்கத்தை <tt>init</tt> லேபிளுக்குத் தாவச் செய்கிறது. இது <tt>X</tt> ஐ அமைத்துவிட்டு, அடுத்த வழிமுறையான <tt>JSR loop</tt> க்குத் திரும்புகிறது. இது <tt>loop</tt> லேபிளுக்குத் தாவுகிறது; அது <tt>X</tt> ஐ <tt>$05</tt> க்குச் சமமாகும் வரை அதிகரிக்கிறது. அதன் பிறகு நாம் அடுத்த வழிமுறையான <tt>JSR end</tt> க்குத் திரும்புகிறோம்; அது கோப்பின் இறுதிக்குத் தாவுகிறது. தொகுதி வாரியான குறியீட்டை உருவாக்க <tt>JSR</tt> மற்றும் <tt>RTS</tt> ஆகியவற்றை எவ்வாறு சேர்த்துப் பயன்படுத்தலாம் என்பதை இது விளக்குகிறது."
+ "இதன் விளைவு, திரட்டியின் மிகக் குறைவான குறிப்பிடத்தக்க இரண்டு பிட்களை மறைத்து, மற்றவற்றை பூச்சியத்திற்கு அமைப்பதாகும். இது 0–255 வரம்பில் உள்ள எண்ணை 0–3 வரம்பில் உள்ள எண்ணாக மாற்றுகிறது."
+ "கீழே உள்ள குறியீடு தொகுதி விளையாட்டின் முழு மூலக் குறியீட்டையும் கொண்டுள்ளது. இது எவ்வாறு செயல்படுகிறது என்பதை பின்வரும் பிரிவுகளில் விளக்குகிறேன்."
+ "கருப்பு கேம் கன்சோல் திரை இப்போது மேல் இடதுபுறத்தில் மூன்று வண்ண \"பிக்சல்களை\" காட்ட வேண்டும்."
+ "இந்தப் பயன்பாடு GNOME இடைமுக எழுத்துருவுக்காக வடிவமைக்கப்பட்டுள்ளது. பிற அமைப்புகளில் அந்த அமைப்பின் எழுத்துருவில் வரையப்படும், அது பொதுவாகச் சிறியதாக இருக்கும்."
+ "ஒய் குறியீட்டுப் பதிவு ஃச் ஐப் போன்றது மற்றும் சிறப்பு செயல்பாடுகள் இல்லை. குறியீட்டு முகவரி மற்றும் தரவு இயக்கத்திற்கு பொதுவாகப் பயன்படுத்தப்படுகிறது."
+ "ஃச் குறியீட்டுப் பதிவேடு குறியீட்டு முகவரி முறைகள் மற்றும் எண்ணும் செயல்பாடுகளுக்குப் பயன்படுத்தப்படுகிறது. இது லூப் கவுண்டர்கள், வரிசை குறியீடுகளை வைத்திருக்க முடியும், மேலும் X ஐ ஆஃப்செட்டாகப் பயன்படுத்தி அடிப்படை முகவரியுடன் தொடர்புடைய நினைவக இருப்பிடங்களை அணுகுவதற்கு இது தேவை. சிறப்பு: TSX/TXS ஃச் ஐ ச்டாக் பாயிண்டருக்கு/இருந்து பரிமாற்றம்."
+ "ச்டாக் பாயிண்டர் சப்ரூட்டின்கள் மற்றும் குறுக்கீடுகளுக்கான அழைப்பு அடுக்கை நிர்வகிக்கிறது. இது $FF (ச்டாக்கின் மேல்) தொடங்கி கீழ்நோக்கி வளரும். புச்/புல் செயல்பாடுகள், சேஎச்ஆர்/ஆர்டிஎச் அழைப்புகள் மற்றும் குறுக்கீடு கையாளுதல் ஆகியவற்றுக்குப் பயன்படுத்தப்படுகிறது. உள்ளமை செயல்பாடு அழைப்புகளுக்கு முக்கியமானது."
+ "நிரல் கவுண்டரில் அடுத்த இயக்க வழிமுறையின் நினைவக முகவரி உள்ளது. ஒவ்வொரு அறிவுறுத்தலுக்குப் பிறகும் இது தானாகவே அதிகரிக்கிறது மற்றும் தாவல்கள், கிளைகள், அழைப்புகள் மற்றும் வருமானம் மூலம் மாற்றியமைக்கப்படலாம். நிரல் ஓட்டம் கட்டுப்பாடு மற்றும் பிழைத்திருத்தத்திற்கு தேவை."
+ "திரட்டி (A) என்பது எண்கணித மற்றும் தருக்கச் செயல்பாடுகளுக்கான முதன்மைப் பதிவு. ADD, SUBTRACT, AND, OR போன்ற அனைத்து அடிப்படைக் கணக்கீடுகளும் இந்தப் பதிவைப் பயன்படுத்துகின்றன. 6502 அசெம்பிளி நிரலாக்கத்தில் மிக அடிக்கடி பயன்படுத்தப்படும் பதிவு இதுவே."
+ "<tt>loop</tt> சப்ரூட்டின், தன்னைத்தானே மீண்டும் அழைப்பதற்கு முன், தொடர்ச்சியாகப் பல சப்ரூட்டின்களை அழைக்கிறது:"
+ "<tt>init</tt> சப்ரூட்டின், <tt>initSnake</tt> மற்றும் <tt>generateApplePosition</tt> ஆகிய இரண்டு சப்ரூட்டின்களிடம் வேலையை ஒப்படைக்கிறது. <tt>initSnake</tt> பாம்பின் திசையையும் நீளத்தையும் அமைத்து, பின்னர் பாம்பின் தலை மற்றும் உடலின் தொடக்க நினைவக இடங்களை ஏற்றுகிறது. <tt>$10</tt> இல் உள்ள பைட் சோடி தலையின் திரை இருப்பிடத்தைக் கொண்டுள்ளது, <tt>$12</tt> இல் உள்ள சோடி ஒற்றை உடல் பகுதியின் இருப்பிடத்தைக் கொண்டுள்ளது, <tt>$14</tt> வாலின் இருப்பிடத்தைக் கொண்டுள்ளது (வால் என்பது உடலின் கடைசிப் பகுதி; பாம்பு நகர்ந்துகொண்டே இருப்பதற்காக அது கருப்பு நிறத்தில் வரையப்படுகிறது). இது பின்வரும் குறியீட்டில் நிகழ்கிறது:"
+ "<tt>BIT</tt> ஆப்கோட் <tt>AND</tt> ஐப் போன்றது, ஆனால் கணக்கீடு பூச்சியக் கொடியை அமைக்க மட்டுமே பயன்படுகிறது — உண்மையான முடிவு நிராகரிக்கப்படுகிறது. திரட்டியை வாதத்துடன் AND செய்த முடிவு பூச்சியமாக இருந்தால் மட்டுமே பூச்சியக் கொடி அமைக்கப்படும். இரண்டின் அடுக்குகளைப் பார்க்கும்போது, இரண்டு எண்களும் ஒன்றாக இல்லாவிட்டால் மட்டுமே பூச்சியக் கொடி அமைக்கப்படும். எடுத்துக்காட்டாக, <tt>0001 AND 0001</tt> பூச்சியம் அல்ல, ஆனால் <tt>0001 AND 0010</tt> பூச்சியம்."
+ "6502 ஆனது 16-பிட் முகவரி பச்சைப் பயன்படுத்துகிறது, அதாவது செயலிக்கு 65536 பைட்டுகள் நினைவகம் உள்ளது. ஒரு பைட் இரண்டு ஃச் எழுத்துகளால் குறிக்கப்படுகிறது என்பதை நினைவில் கொள்ளுங்கள், எனவே நினைவக இருப்பிடங்கள் பொதுவாக <tt>$0000 - $ffff</tt> எனக் குறிப்பிடப்படுகின்றன. கீழே விவரிக்கப்பட்டுள்ளபடி, இந்த நினைவக இருப்பிடங்களைக் குறிப்பிட பல்வேறு வழிகள் உள்ளன."
+ "திறந்த மூல மென்பொருளைப் பயன்படுத்தியதற்கு நன்றி."
+ "LSR மற்றும் BCC மூலம் A இன் பிட் 0-ஐ சோதித்து, முடிவாக A-இல் 1 அல்லது 0-ஐ வைக்கிறது"
+ "உங்கள் படைப்புகளை மெய்நிகர் கேம் கன்சோலில் சோதிக்கவும்"
+ "வருக! பின்னிச் மொழிபெயர்ப்புகளை வரவேற்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம், அன்புடன் சிரி க்ரோன்ரூச் பங்களித்தார். நன்றி!"
+ "டீல்"
+ "கணினி எழுத்துரு, GNOME அளவு"
+ "கணினி இயல்புநிலை"
+ "தொடரியல் பிழை வரி %1$d: %2$s"
+ "ஆதரவாளர்"
+ "ஆதரவு"
+ "சமர்ப்பிக்கவும்"
+ "சூல் தண்டு"
+ "நிறுத்தப்பட்டது"
+ "6502 அசெம்பிளிக்கான படிப்படியான வழிகாட்டி"
+ "படி"
+ "நிலை கொடிகள்"
+ "ச்டாக் பாயிண்டர்: புள்ளிகளை அடுக்கி வைக்கும் நிலை"
+ "அடுக்கு சான்று"
+ "அடுக்கு ($0100-$01FF)"
+ "சிறப்பு நினைவக இருப்பிடங்கள் (சிமுலேட்டரில்)"
+ "மூல முகவரி"
+ "சில வழிமுறைகள் நினைவக இருப்பிடங்களைக் கையாள்வதில்லை (எ.கா. <tt>INX</tt> - <tt>X</tt> பதிவேட்டை அதிகரிக்கவும்). இவை மறைமுகமான முகவரிகளைக் கொண்டிருப்பதாகக் கூறப்படுகிறது - உரையாடல் அறிவுறுத்தலால் மறைமுகமாக உள்ளது."
+ "எனவே, நீங்கள் ஏன் 6502 ஐக் கற்றுக்கொள்ள விரும்புகிறீர்கள்? இது இறந்த மொழி, இல்லையா? சரி, லத்தீன் மொழியும் அப்படித்தான். அவர்கள் இன்னும் அதை கற்பிக்கிறார்கள். <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "எனவே, இந்த திட்டம் உண்மையில் என்ன செய்கிறது? அதை கடந்து செல்லலாம். <b>மீட்டமை</b> என்பதை அழுத்தி, பின்னர் <b>படி</b> பயன்படுத்தி நிரலை ஒரு நேரத்தில் ஒரு அறிவுறுத்தலை இயக்கவும். <b>பிழைத்திருத்தம்</b> காட்சி பதிவேடுகள் மற்றும் நினைவகத்தைக் காட்டுகிறது - இது ஒரு சிறிய சாளரத்தில் ஒரு தனித் தாவலாகும், மேலும் கேம் கன்சோலுக்குக் கீழே உள்ள பேனல் பரந்த ஒன்றில் உள்ளது. <b>படி</b> ஒருமுறை சொடுக்கு செய்யவும், பிழைத்திருத்தக் காட்சியில் <tt>A=</tt> <tt>$00</tt> இலிருந்து <tt>$01</tt> ஆகவும், <tt>PC=</tt> <tt>$0600</tt> இலிருந்து <tt>$0602</tt> ஆகவும் மாறியிருப்பதைக் காண்பீர்கள்."
+ "எனவே, அறிவுறுத்தல் <tt>STA $0200</tt> <tt>A</tt> பதிவின் மதிப்பை நினைவக இருப்பிடமான <tt>$0200</tt> இல் சேமிக்கிறது. மீதமுள்ள வழிமுறைகளை இயக்க, <b>படி</b> நான்கு முறை சொடுக்கு செய்யவும், அது மாறும் போது <tt>A</tt> பதிவைக் கண்காணிக்கவும்."
+ "எனவே <tt>upKey</tt> ஐப் பாருங்கள்: தற்போதைய திசை கீழ்நோக்கி (4) இருந்தால், பிட் சோதனை பூச்சியமாக இருக்கும். <tt>BNE</tt> என்பது \"பூச்சியக் கொடி அமைக்கப்படவில்லை என்றால் கிளை பிரி\" என்று பொருள்படும். எனவே இந்த விசயத்தில் நாம் <tt>illegalMove</tt> க்குக் கிளை பிரிவோம்; அது சப்ரூட்டினிலிருந்து வெறுமனே திரும்பிவிடும். இல்லையெனில், புதிய திசை (இங்கே 1) உரிய நினைவக இடத்தில் சேமிக்கப்படும்."
+ "எனவே, உள்ளே நுழைவோம்! இந்தப் பயன்பாட்டில் <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler மற்றும் Simulator</a> இந்த ஊடாடும் பயிற்சிக்காக நான் மாற்றியமைத்துள்ளேன். எடுத்துக்காட்டுக் குறியீட்டை எடிட்டருக்கு நகலெடுக்க கீழே உள்ள குறியீட்டுத் தொகுதியில் உள்ள <b>நகலெடு</b> பொத்தானைக் சொடுக்கு செய்யவும். குறியீட்டை அசெம்பிள் செய்ய <b>அசெம்பிள்</b> பயன்படுத்தவும், அதை இயக்க <b>ரன்</b>. இந்த செயல்களை பொத்தான்களாக அல்லது பட்டியலில் காணலாம்."
+ "இதுவரை எங்களால் எந்த கிளை தர்க்கமும் இல்லாமல் அடிப்படை நிரல்களை மட்டுமே எழுத முடிந்தது. அதை மாற்றுவோம்."
+ "பாம்பு விளையாட்டு நினைவக பயன்பாடு"
+ "பாம்பு விளையாட்டு தரவு ($00- $15)"
+ "பாம்பு விளையாட்டு"
+ "ச்லேட்"
+ "சிமுலேட்டர் தோல்வி"
+ "பாவிப்பி"
+ "பகிரப்பட்ட குறியீடு எடுத்துக்காட்டுகளில் இப்போது CC-BY-4.0 உரிமத் செய்தி அடங்கும், உங்கள் பங்களிப்புகளை சமூகம் எவ்வாறு பயன்படுத்தலாம் மற்றும் உருவாக்கலாம் என்பதைத் தெளிவாக்குகிறது."
+ "உங்கள் உதாரணத்தைப் பகிரவும்"
+ "பகிர் சான்று"
+ "பங்கு"
+ "சாலோம்! Menachem (naattxx) மூலம் முழுமையாகப் பங்களித்த ஈப்ரு மொழிபெயர்ப்புகளை வரவேற்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம். தோடா ரபா!"
+ "நகைச்சுவை ஒருபுறம் இருக்க, அசெம்பிளி மொழியைப் புரிந்துகொள்வது மதிப்புமிக்கது என்று நான் நினைக்கிறேன். அசெம்பிளி மொழி என்பது கணினிகளில் சுருக்கத்தின் மிகக் கீழ் நிலை — குறியீடு இன்னும் படிக்கக்கூடியதாக இருக்கும் புள்ளி. அசெம்பிளி மொழி, உங்கள் கணினியின் செயலி இயக்கும் பைட்டுகளுக்கு நேரடியாக மொழிபெயர்க்கப்படுகிறது. இது எவ்வாறு செயல்படுகிறது என்பதை நீங்கள் புரிந்துகொண்டால், நீங்கள் அடிப்படையில் ஒரு கணினி <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">வித்தைக்காரர்</a> ஆகிவிடுவீர்கள்."
+ "வரவேற்கிறோம்! இந்தோனேசிய மொழிபெயர்ப்புகளையும் வரவேற்கிறோம், அன்புடன் ஆரிஃப் புடிமான் பங்களித்தார். நன்றி!"
+ "நினைவக வரம்பிற்கு திரை வரைபடங்கள் <tt>$0200</tt>-<tt>$05FF</tt>"
+ "பல புதிய மொழிபெயர்ப்புகளுக்கு வணக்கம் சொல்லுங்கள்: பிரஞ்சு, இண்டர்லிங்வா, போர்த்துகீசியம், போர்த்துகீசியம் (பிரேசில்), டச்சு, ச்பானிச், உக்ரைனியன், சப்பானியம் மற்றும் சீனம் (எளிமைப்படுத்தப்பட்டது)"
+ "%1$s ஆக சேமிக்கப்பட்டது"
+ "மாற்றங்களைச் சேமிக்கவா?"
+ "இவ்வாறு சேமி..."
+ "அசெம்பிளி கோப்பைச் சேமிக்கவும்"
+ "சேமி"
+ "ஓடும் பாம்பு விளையாட்டு"
+ "ஓடு"
+ "<tt>X</tt> பதிவிற்குப் பதிலாக <tt>Y</tt> பதிவேட்டைப் பயன்படுத்த இந்தப் பிரிவில் முதல் உதாரணத்தை மீண்டும் எழுதவும்."
+ "உங்கள் சான்று மற்றவர்களுக்கு எவ்வாறு தோன்றும் என்பதை மதிப்பாய்வு செய்யவும். <b>சமர்ப்பி</b> என்பதைக் சொடுக்கு செய்வது GitHub இல் சிக்கலை உருவாக்கும். சமர்ப்பிப்பை முடிக்க உங்கள் GitHub கணக்கில் உள்நுழைய வேண்டும்."
+ "ரெச்யூம்"
+ "மீட்டமை"
+ "விளையாட்டை வழங்குதல்"
+ "உறவினர்: <tt>$c0</tt> (அல்லது லேபிள்)"
+ "கிளை வழிமுறைகளுக்கு உறவினர் முகவரி பயன்படுத்தப்படுகிறது. இந்த அறிவுறுத்தல்கள் ஒற்றை பைட்டை எடுத்துக் கொள்கின்றன, இது பின்வரும் அறிவுறுத்தலில் இருந்து ஆஃப்செட்டாகப் பயன்படுத்தப்படுகிறது."
+ "பதிவுகள் மற்றும் கொடிகள்"
+ "பதிவுகள்"
+ "சிறந்த செயல்திறனுக்காக குறைக்கப்பட்ட இயல்புநிலை ஃச் மானிட்டர் முகவரி வரம்பு"
+ "சிவப்பு"
+ "உள்ளீட்டைப் படித்தல்"
+ "சீரற்ற/உள்ளீடு ($FE-$FF)"
+ "வெளியேறு"
+ "விரைவான குறிப்புகள்"
+ "ஊதா"
+ "நிரல் விண்டேச் கேம் கன்சோல்கள்"
+ "நிரல் இடைநிறுத்தப்பட்டது"
+ "திட்டம் முடிந்தது. நிரலை மீண்டும் படிப்பதற்கு மீட்டமைக்கவும்."
+ "PC=$%1$s இல் நிரல் முடிந்தது"
+ "திட்டம் முடிந்தது"
+ "நிரல் சேமிப்பு ($0600-$FFFF)"
+ "நிரல் கவுண்டர்: அடுத்த அறிவுறுத்தலுக்கான புள்ளிகள்"
+ "செயலி நிலைப் பதிவு"
+ "செயலி கொடிகள்"
+ "முதன்மை: மஞ்சள்"
+ "முதன்மை: டீல்"
+ "முதன்மை: ச்லேட்"
+ "முதன்மை: சிவப்பு"
+ "முதன்மை: ஊதா"
+ "முதன்மை: இளஞ்சிவப்பு"
+ "முதன்மை: ஆரஞ்சு"
+ "முதன்மை: பச்சை"
+ "முதன்மை: நீலம்"
+ "முதன்மை நிறம்"
+ "முந்தைய"
+ "உங்கள் உதாரணத்தை முன்னோட்டமிடுங்கள்"
+ "முன்னோட்டம்"
+ "இரண்டாவது வழிமுறையை இயக்க மீண்டும் <b>படி</b> அழுத்தவும். கேம் கன்சோலின் மேல் இடது படப்புள்ளி இப்போது வெண்மையாக இருக்க வேண்டும். இந்த சிமுலேட்டர் அதன் காட்சியில் பிக்சல்களை வரைவதற்கு நினைவக இருப்பிடங்களை <tt>$0200</tt> முதல் <tt>$05ff</tt> வரை பயன்படுத்துகிறது. <tt>$00</tt> முதல் <tt>$0f</tt> வரையிலான மதிப்புகள் 16 வெவ்வேறு வண்ணங்களைக் குறிக்கின்றன (<tt>$00</tt> கருப்பு மற்றும் <tt>$01</tt> வெள்ளை), எனவே <tt>$01</tt> மதிப்பை நினைவக இடத்தில் <tt>$0200</tt> சேமிப்பது மேல் இடது மூலையில் ஒரு வெள்ளை படப்புள்ளி வரையப்படும். உண்மையான கணினி எப்படி வீடியோவை வெளியிடும் என்பதை விட இது எளிமையானது, ஆனால் அது இப்போதைக்கு செய்யும்."
+ "முன் செயலாக்கம்..."
+ "விளையாடு"
+ "இளஞ்சிவப்பு"
+ "பொழுதுபோக்காளர்கள், மாணவர்கள் மற்றும் கணினிகள் உண்மையில் எவ்வாறு வேலை செய்கின்றன என்பதைப் பற்றி ஆர்வமுள்ள எவருக்கும் ஏற்றது!"
+ "இடைநிறுத்தம்"
+ "ஓவர்ஃப்ளோ ஃபிளாக்: எண்கணித செயல்பாடு கையொப்பமிடப்பட்ட 8-பிட் வரம்பில் (-128 முதல் +127 வரை) குறிப்பிட முடியாத முடிவை உருவாக்கும் போது அமைக்கவும். கணக்கீடுகளில் கையொப்பமிடப்பட்ட எண்கணிதப் பிழைகளைக் கண்டறியப் பயன்படுகிறது."
+ "ஒட்டுமொத்த அமைப்பு"
+ "%1$d வரியில் வரம்பிற்கு வெளியே உள்ள கிளை (கிளைகள் -128 முதல் +127 வரை வரையறுக்கப்பட்டுள்ளது): %2$s"
+ "எங்கள் முதல் திட்டம்"
+ "32×8 படப்புள்ளிகள் கொண்ட நான்கு கிடைமட்ட கீற்றுகளாக ஒழுங்கமைக்கப்பட்டது"
+ "ஆரஞ்சு"
+ "தேவையற்ற அனுமதிகளை அகற்றுவதன் மூலம் உகந்த Flatpak உள்ளமைவு"
+ "%1$s திறக்கப்பட்டது"
+ "திற..."
+ "திறந்த மூல"
+ "அசெம்பிளி கோப்பைத் திறக்கவும்"
+ "மதிப்புகள் பாம்புக்கு கீழே மாற்றப்பட்டவுடன், தலையை என்ன செய்வது என்று நாம் வேலை செய்ய வேண்டும். திசை முதலில் <tt>A</tt> இல் ஏற்றப்படும். <tt>LSR</tt> என்றால் \"லாசிக்கல் சிப்ட் வலப்பக்கம்\" அல்லது \"அனைத்து பிட்களையும் ஒரு நிலைக்கு வலப்புறமாக மாற்றவும்\". குறைந்த முக்கியத்துவம் வாய்ந்த பிட் கேரிக் கொடியில் மாற்றப்படுகிறது, எனவே திரட்டி <tt>1</tt> எனில், <tt>LSR</tt> க்குப் பிறகு அது <tt>0</tt>, கேரி ஃபிளாக் செட் ஆகும்."
+ "மீட்டமைப்பில் (சிமுலேட்டர்): <tt>P = $30</tt> (bit5 மற்றும் <tt>B</tt> set; <tt>D</tt> மற்றும் <tt>I</tt> தெளிவானது)"
+ "சரி"
+ "இப்போது, இந்த அறிவை நன்றாகப் பயன்படுத்துவோம், மேலும் ஒரு விளையாட்டை உருவாக்குவோம்! கிளாசிக் கேம் \'ச்னேக்\' இன் மிகவும் எளிமையான பதிப்பை நாங்கள் உருவாக்கப் போகிறோம்."
+ "முன் நிரலாக்க பட்டறிவு தேவையில்லை. ஊடாடும் பாடங்களுடன் தொடங்கி, படிப்படியாக உங்கள் திறமைகளை வளர்த்துக் கொள்ளுங்கள்."
+ "இயக்க குறியீடு இல்லை."
+ "முகவரி அல்லது சிட்டை வழங்கப்படவில்லை"
+ "அடுத்து <tt>drawSnake</tt> வருகிறது. இதுவும் மிகவும் எளிமையானது - முதலில் வாலை அவிழ்த்துவிட்டு தலையை வரைகிறோம். <tt>X</tt> பாம்பின் நீளத்திற்கு அமைக்கப்பட்டுள்ளது, எனவே நாம் வலது பிக்சலுக்கு அட்டவணையிடலாம், மேலும் <tt>A</tt> ஐ பூச்சியமாக அமைத்து பின்னர் குறியீட்டு மறைமுக முகவரி பயன்முறையைப் பயன்படுத்தி எழுதவும். பிறகு <tt>X</tt>ஐ தலைக்கு அட்டவணைப்படுத்த, <tt>A</tt> ஒன்றை அமைத்து, <tt>($10,x)</tt> இல் சேமிக்கிறோம். <tt>$10</tt> தலையின் இரண்டு பைட் இருப்பிடத்தை சேமிக்கிறது, எனவே இது தற்போதைய தலை நிலையில் ஒரு வெள்ளை பிக்சலை வரைகிறது. பாம்பின் தலையும், வாலும் மட்டும் அசைவதால், பாம்பு அசையாமல் இருக்க இதுவே போதுமானது."
+ "பிரித்தெடுத்தல் மற்றும் வேகமாக மாறக்கூடிய நினைவக பார்வையாளர் உட்பட உங்கள் குறியீட்டை ஆய்வு செய்வதற்கான புதிய கருவிகள்"
+ "எதிர்மறைக் கொடி: முடிவின் மிக முக்கியமான பிட் (பிட் 7) 1 ஆக இருக்கும் போது அமைக்கவும். கையொப்பமிடப்பட்ட எண் ஒப்பீடுகளுக்குப் பயன்படுத்தப்படுகிறது மற்றும் இரண்டின் நிரப்பு பிரதிநிதித்துவத்தில் மதிப்பு எதிர்மறையாக உள்ளதா என்பதைக் குறிக்கிறது."
+ "ஏறக்குறைய எல்லா விளையாட்டுகளும் அவற்றின் இதயத்தில் ஒரு கேம் லூப்பைக் கொண்டுள்ளன. அனைத்து கேம் லூப்களும் ஒரே அடிப்படை வடிவத்தைக் கொண்டுள்ளன: பயனர் உள்ளீட்டை ஏற்கவும், கேம் நிலையை மேம்படுத்தவும் மற்றும் கேம் நிலையை வழங்கவும். இந்த வளையம் வேறுபட்டதல்ல."
+ "செய்திகள்"
+ "நினைவக இருப்பிடங்கள் <tt>$01</tt> மற்றும் <tt>$02</tt> முறையே <tt>$05</tt> மற்றும் <tt>$07</tt> மதிப்புகள் உள்ளன. <tt>($00,X)</tt> ஐ <tt>($00 + X)</tt> என்று நினைத்துப் பாருங்கள். இந்த வழக்கில் <tt>X</tt> என்பது <tt>$01</tt>, எனவே இது <tt>($01)</tt> என எளிமைப்படுத்தப்படுகிறது. இங்கிருந்து விசயங்கள் நிலையான மறைமுக முகவரி போன்றது - <tt>$01</tt> மற்றும் <tt>$02</tt> (<tt>$05</tt> மற்றும் <tt>$07</tt>) இல் உள்ள இரண்டு பைட்டுகள் <tt>$0705</tt> என்ற முகவரியை உருவாக்க பார்க்கப்படுகின்றன. முந்தைய அறிவுறுத்தலில் <tt>Y</tt> பதிவேட்டில் சேமிக்கப்பட்ட முகவரி இதுவாகும், எனவே <tt>A</tt> பதிவானது <tt>Y</tt> போன்ற அதே மதிப்பைப் பெறுகிறது, இருப்பினும் மிகவும் சுற்றுப்பாதையில். நீங்கள் இதை அதிகம் பார்க்க மாட்டீர்கள்."
+ "நினைவக வரைபடம்"
+ "ஒட்டுமொத்த உபயோகத்தை மேம்படுத்த பல சிறிய பிழைகள் சரி செய்யப்பட்டுள்ளன"
+ "உள்ளுணர்வு நிரல் கட்டுப்பாட்டுக்கான மாறும் நிலைகளுடன் கூடிய நவீன மிதக்கும் செயல் பட்டன் மற்றும் நவீன அத்வைதா கூறுகளைப் பயன்படுத்தி முற்றிலும் மறுவடிவமைப்பு செய்யப்பட்ட பிழைத்திருத்த விட்செட்டை அறிமுகப்படுத்தும் முக்கிய இடைமுகம் மேம்பாடுகள்."
+ "Line Buster 6502"
+ "ஒளி பாணி"
+ "சான்று மூலம் கற்றல் எப்போதும் எளிதாக இருந்ததில்லை. வேலை செய்யும் குறியீட்டில் மூழ்கி, அதை மாற்றவும், அதை உடைக்கவும், அதை மீண்டும் சரிசெய்யவும் - அந்த நாளில் சிறந்த புரோகிராமர்கள் கற்றுக்கொண்டது இதுதான்!"
+ "PHA மற்றும் PLA வழிமுறைகளுடன் அடுக்கை எவ்வாறு பயன்படுத்துவது என்பதை அறிக"
+ "6502 நுண்செயலியை எவ்வாறு நிரல் செய்வது என்பதை அறிக."
+ "குறியீட்டு முறையின் போது கணினி வரலாற்றைப் பற்றி அறிந்து கொள்ளுங்கள்"
+ "Learn 6502 இப்போது Windows மற்றும் macOS இலும் இயங்குகிறது. Linux பயன்படுத்தாத ஒரு நண்பருக்கு இதை அறிமுகப்படுத்த நினைத்திருந்தால், இப்போது அதைச் செய்யலாம்."
+ "Learn 6502 இப்போது GNOME 50 இல் இயங்குகிறது! இயக்க நேர புதுப்பிப்புக்கு பங்களித்த சப்ரி Ünalக்கு நன்றி."
+ "6502 அசெம்பிளியைக் கற்றுக்கொள்"
+ "கற்றுக்கொள்ளுங்கள்"
+ "லேபிள்கள் தோல்வி"
+ "%1$d: %2$s வரியில் சிட்டை ஏற்கனவே வரையறுக்கப்பட்டுள்ளது"
+ "%1$s சிட்டை ஏற்கனவே குறியீடாகப் பயன்படுத்தப்பட்டது; அவற்றில் ஒன்றை மறுபெயரிடவும்"
+ "குதித்தல் என்பது இரண்டு முக்கிய வேறுபாடுகளுடன் கிளைகளைப் போன்றது. முதலில், தாவல்கள் நிபந்தனையுடன் செயல்படுத்தப்படவில்லை, இரண்டாவதாக, அவை இரண்டு பைட் முழுமையான முகவரியை எடுத்துக்கொள்கின்றன. சிறிய நிரல்களுக்கு, இந்த இரண்டாவது விவரம் மிகவும் முக்கியமல்ல, ஏனெனில் நீங்கள் பெரும்பாலும் லேபிள்களைப் பயன்படுத்துவீர்கள், மேலும் அசெம்பிளர் லேபிளில் இருந்து சரியான நினைவக இருப்பிடத்தை உருவாக்குகிறது. பெரிய நிரல்களுக்கு, குறியீட்டின் ஒரு பகுதியிலிருந்து மற்றொரு பகுதிக்குச் செல்வதற்கான ஒரே வழி சம்பிங் ஆகும்."
+ "குதித்தல்"
+ "JSR/RTS"
+ "சேஎம்பி"
+ "அறிமுகம்"
+ "குறுக்கீடு கொடி: அமைக்கப்படும் போது, அனைத்து மாச்க் செய்யக்கூடிய குறுக்கீடுகளையும் (IRQ) முகமூடிகள் (முடக்குகிறது). மாச்கபிள் அல்லாத குறுக்கீடுகள் (NMI) மட்டுமே இன்னும் ஏற்படலாம். குறுக்கீடு செய்யாத குறியீட்டின் முக்கியமான பிரிவுகளுக்குப் பயன்படுத்தப்படுகிறது."
+ "இடைமுக எழுத்துரு"
+ "இன்டராக்டிவ் டுடோரியல்கள் தொடக்கநிலையிலிருந்து மேம்பட்ட வரை உங்களுக்கு வழிகாட்டும்"
+ "ஊடாடும் பயிற்சி"
+ "அசெம்பிளி மொழியில் உள்ள வழிமுறைகள் முன் வரையறுக்கப்பட்ட செயல்பாடுகளின் சிறிய தொகுப்பைப் போன்றது. அனைத்து வழிமுறைகளும் பூச்சியம் அல்லது ஒரு வாதங்களை எடுக்கும். சில வேறுபட்ட வழிமுறைகளை அறிமுகப்படுத்த சில சிறுகுறிப்பு மூலக் குறியீடு இங்கே:"
+ "வழிமுறைகள்"
+ "முன்னமைவு"
+ "மறைமுக: <tt>($c000)</tt>"
+ "மறைமுக அட்டவணை: <tt>($c0),Y</tt>"
+ "மறைமுக அட்டவணையிடல் என்பது அட்டவணையிடப்பட்ட மறைமுகத்தைப் போன்றது, ஆனால் அவ்வளவு சிக்கலானது அல்ல. மறைமுகமாக அணுகுவதற்கு <i>முன்</i> முகவரியுடன் <tt>X</tt> பதிவைச் சேர்ப்பதற்குப் பதிலாக, பூச்சியப் பக்க முகவரி முதலில் அணுகப்படுகிறது, பின்னர் அதன் விளைவாக வரும் முகவரியுடன் <tt>Y</tt> பதிவு சேர்க்கப்படுகிறது."
+ "மறைமுக முகவரியானது மற்றொரு முகவரியைப் பார்க்க முழுமையான முகவரியைப் பயன்படுத்துகிறது. முதல் முகவரியானது முகவரியின் குறைவான குறிப்பிடத்தக்க பைட்டைக் கொடுக்கிறது, மேலும் பின்வரும் பைட் மிகவும் குறிப்பிடத்தக்க பைட்டைக் கொடுக்கிறது. உங்கள் தலையைச் சுற்றிக் கொள்வது கடினமாக இருக்கலாம், எனவே இங்கே ஒரு எடுத்துக்காட்டு:"
+ "குறியீட்டு லேபிள்கள்..."
+ "குறியிடப்பட்ட மறைமுகம்: <tt>($c0,X)</tt>"
+ "குறியீட்டு பதிவு Y: முகவரியிட பயன்படுகிறது"
+ "குறியீட்டு பதிவு X: முகவரியிட பயன்படுகிறது"
+ "இந்த சிறிய டுடோரியலில், 6502 அசெம்பிளி மொழியை எழுதத் தொடங்குவது எப்படி என்பதை உங்களுக்குக் காண்பிக்கப் போகிறேன். 6502 செயலி எழுபதுகளிலும் எண்பதுகளிலும் மிகவும் பரவலாக இருந்தது; <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a> போன்ற புகழ்பெற்ற கணினிகளை இயக்கியது. Futurama இல் வரும் Bender இன் <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">மூளையாக ஒரு 6502 செயலி உள்ளது</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Terminator கூட 6502 இல் நிரலாக்கப்பட்டிருந்தது</a>."
+ "இந்த எடுத்துக்காட்டில், <tt>$f0</tt> <tt>$01</tt> மதிப்பையும் <tt>$f1</tt> <tt>$cc</tt> மதிப்பையும் கொண்டுள்ளது. <tt>JMP ($f0)</tt> என்ற வழிமுறையானது, <tt>$f0</tt> மற்றும் <tt>$f1</tt> (<tt>$01</tt> மற்றும் <tt>$cc</tt>) ஆகிய இரண்டு பைட்டுகளையும் செயலி பார்க்கச் செய்து, அவற்றை ஒன்றாக இணைத்து <tt>$cc01</tt> என்ற முகவரியை உருவாக்குகிறது, இது புதிய நிரல் கவுண்டராக மாறும். என்ன நடக்கிறது என்பதைப் பார்க்க மேலே உள்ள நிரலின் மூலம் அசெம்பிள் செய்து படி. <a href=\"#jumping\">குதித்தல்</a> பிரிவில் <tt>JMP</tt> பற்றி மேலும் பேசுவேன்."
+ "இந்த நிலையில், <tt>($01)</tt> இரண்டு பைட்டுகளை <tt>$01</tt> மற்றும் <tt>$02</tt>: <tt>$03</tt> மற்றும் <tt>$07</tt> இல் பார்க்கிறது. இவை <tt>$0703</tt> என்ற முகவரியை உருவாக்குகின்றன. இறுதி முகவரியை <tt>$0704</tt> வழங்க, <tt>Y</tt> பதிவேட்டின் மதிப்பு இந்த முகவரியில் சேர்க்கப்பட்டது."
+ "இந்த அசெம்பிளரில், எண்களைக் குறிக்கும் விளக்க மாறிலிகளை (அல்லது குறியீடுகள்) வரையறுக்கலாம். மீதமுள்ள குறியீடானது, நேரடி எண்ணுக்குப் பதிலாக மாறிலிகளைப் பயன்படுத்தலாம், இது நாம் எதைக் கையாளுகிறோம் என்பதை உடனடியாகத் தெளிவாக்குகிறது. நீங்கள் ஒரு பெயரில் எழுத்துக்கள், இலக்கங்கள் மற்றும் அடிக்கோடிட்டுகளைப் பயன்படுத்தலாம்."
+ "எடிட்டரில் <b>வகை</b> (ஒட்ட வேண்டாம்) பின்வரும் குறியீடு:"
+ "அசெம்பிளி மொழியில், நீங்கள் வழக்கமாகக் கிளை வழிமுறைகளுடன் லேபிள்களைப் பயன்படுத்துவீர்கள். இருப்பினும், அசெம்பிள் செய்யும் போது, இந்த லேபிள் ஒற்றை-பைட் ரிலேடிவ் ஆஃப்செட்டாக மாற்றப்படுகிறது (அடுத்த வழிமுறையிலிருந்து பின்னோக்கி அல்லது முன்னோக்கிச் செல்ல வேண்டிய பைட்டுகளின் எண்ணிக்கை). எனவே கிளை வழிமுறைகள் சுமார் 256 பைட்டுகள் மட்டுமே முன்னோக்கியும் பின்னோக்கியும் செல்ல முடியும். அதாவது, அவற்றை உள்ளக குறியீட்டினுள் நகர்வதற்கு மட்டுமே பயன்படுத்த முடியும். அதற்கு மேல் செல்ல, நீங்கள் தாவல் வழிமுறைகளைப் பயன்படுத்த வேண்டும்."
+ "மென்மையான விளையாட்டுக்காக கேம் கன்சோல் செயல்திறன் மேம்படுத்தப்பட்டது"
+ "மொபைல் சாதனங்களுக்கான மேம்படுத்தப்பட்ட கேம் திரை மற்றும் கட்டுப்பாடுகள்"
+ "தொழில்நுட்பம் அல்லாத பயனர்களுக்கு அதிக வரவேற்பு அளிக்கும் வகையில் மேம்படுத்தப்பட்ட விளக்கங்கள்"
+ "மறைமுகமானது"
+ "உடனடி: <tt>#$c0</tt>"
+ "உடனடி முகவரியிடல் நினைவக முகவரிகளை கண்டிப்பாக கையாளாது - இது உண்மையான மதிப்புகள் பயன்படுத்தப்படும் பயன்முறையாகும். எடுத்துக்காட்டாக, <tt>LDX #$01</tt> <tt>$01</tt> மதிப்பை <tt>X</tt> பதிவேட்டில் ஏற்றுகிறது. இது பூச்சியப் பக்க அறிவுறுத்தலுக்கு மிகவும் வேறுபட்டது <tt>LDX $01</tt> இது நினைவக இருப்பிடமான <tt>$01</tt> மதிப்பை <tt>X</tt> பதிவேட்டில் ஏற்றுகிறது."
+ "உங்கள் கணினியின் மொழி சீனமாக இருந்தால், பயன்பாடு மீண்டும் சீனத்தில் காட்டப்படும். இதுவரை அது தவறுதலாக ஆங்கிலத்திற்கு மாறி வந்தது."
+ "உங்கள் சான்று வேறொரு உதாரணத்தை அடிப்படையாகக் கொண்டதாக இருந்தால் அல்லது ஊக்கம் பெற்றிருந்தால், நீங்கள் மூல முகவரி ஐ வழங்கலாம்."
+ "பட்டியலிடப்பட்ட மொழிகளில் ஏதேனும் ஒன்றை நீங்கள் பேசினால், மொழிபெயர்ப்புகளை மதிப்பாய்வு செய்ய அல்லது மேம்படுத்த உதவவும். பயன்பாட்டு இணைப்புகள், எங்கள் மொழிபெயர்ப்பு தளம் அல்லது சிக்கலைத் திறப்பதன் மூலம் நீங்கள் பங்களிக்கலாம்."
+ "கூட்டல் முடிவு ஒரு பைட்டை விட பெரியதாக இருந்தால், முகவரி சுற்றி இருக்கும். உதாரணமாக:"
+ "IDE"
+ "ஒவ்வொரு திசைகளும் எவ்வாறு செயல்படுகின்றன என்பதை நான் ஆழமாக விளக்கமாட்டேன், ஆனால் மேலே உள்ள விளக்கம், சிறிது ஆய்வுடன் அதைச் செய்ய போதுமானதாக இருக்கும்."
+ "மறைக்கப்பட்டது"
+ "எக்ச்டம்ப் உருவாக்கப்பட்டது."
+ "எக்ச்டம்ப்"
+ "ஃச் மானிட்டர்"
+ "இதோ ஒரு சான்று. உடனடி மதிப்புகள் இன்னும் <tt>#</tt> முன்னொட்டுடன் இருப்பதைக் கவனிக்கவும்."
+ "உதவி"
+ "எங்களின் முதல் வலமிருந்து இடமாக ஈப்ரு மொழியும் உள்ளது: மெனாகெமின் சோதனை மற்றும் பங்களிப்புகளுக்கு நன்றி, ஆப்ச் இப்போது வலமிருந்து இடமாக தளவமைப்புகளை ஆதரிக்கிறது, மேலும் RTL மொழிகளுக்கு அதை ஆயத்தம் செய்கிறது."
+ "பச்சை"
+ "சிறந்த தொடக்கம் — முதல் அத்தியாயத்தை முடித்துவிட்டீர்கள்!"
+ "உங்களுடைய சொந்த 6502 படைப்பு ஏதேனும் உள்ளதா? அதைச் சமூகத்துடன் பகிருங்கள்! இப்போது உங்கள் குறியீட்டு எடுத்துக்காட்டுகளை நேரடியாகப் பயன்பாட்டிற்குள்ளிருந்தே சமர்ப்பிக்கலாம். பகிர் பொத்தானை அழுத்தினால் போதும் — உங்களுக்காக GitHub சிக்கலையும் இழுக்கக் கோரிக்கையையும் நாங்கள் தானாகவே உருவாக்கிவிடுவோம்."
+ "கூல் 6502 சான்று கிடைத்ததா? \nசமூகத்துடன் பகிர்ந்து கொள்ளுங்கள்!"
+ "பிரிவுகளுக்கு இடையே நகர்வது இன்னும் சிக்கலானது, ஏனெனில் உயர் வரிசைப் பைட்டையும் கணக்கில் கொள்ள வேண்டும். எடுத்துக்காட்டாக, <tt>$02e1</tt> இலிருந்து கீழே செல்வது <tt>$0301</tt> க்கு இட்டுச்செல்ல வேண்டும். நல்லவேளையாக, இதைச் செய்வது மிகவும் எளிது. <tt>$e1</tt> உடன் <tt>$20</tt> ஐச் சேர்த்தால் <tt>$01</tt> கிடைக்கும், மேலும் கேரி பிட் அமைக்கப்படும். கேரி பிட் அமைக்கப்பட்டிருந்தால், உயர் வரிசைப் பைட்டையும் அதிகரிக்க வேண்டும் என்பது நமக்குத் தெரியும்."
+ "செர்மன், ச்பானிச் மொழிகள் பங்களிப்பாளர்களால் சரிபார்க்கப்பட்டுள்ளன. மற்ற மொழிகள் AI உதவியுடன் உருவாக்கப்பட்ட வரைவுகள்; அவற்றுக்கு மனிதர்களின் சரிபார்ப்பு தேவை."
+ "திரைகளுக்கு இடையே மாறும்போது கேம்கள் இப்போது தானாகவே இடைநிறுத்தப்படும்"
+ "கேம்பேட் விசை அழுத்தப்பட்டது:"
+ "க்னோம்"
+ "க்னோம்"
+ "ச்னேக் கேமின் முழுமையாக கருத்துரைக்கப்பட்ட பதிப்பு"
+ "முழு நினைவகம் ($0000-$FFFF)"
+ "%1$d லேபிள்கள் உள்ளன."
+ "%1$d சிட்டை கிடைத்தது."
+ "Linux-க்கு இப்போது ஒரு AppImage-ம் உள்ளது: ஒரே கோப்பு, நிறுவல் தேவையில்லை, நாங்கள் தொகுப்பு வழங்காத விநியோகங்களிலும் இது பயன்படும்."
+ "எழுத்துரு"
+ "கணினி பாணியைப் பின்பற்றவும்"
+ "PostmarketOS இல் நிலையான உருவாக்க பிழை, மொபைல் இணக்கத்தன்மையை மேம்படுத்துகிறது"
+ "எந்த துணைப் பக்கமும் திறக்கப்படாவிட்டாலும், கற்றல் பிரிவில் உள்ள பின் பொத்தான் எப்போதும் டெச்க்டாப் மற்றும் டேப்லெட் பயன்முறையில் காணக்கூடிய சிக்கல் சரி செய்யப்பட்டது."
+ "முதலில், <tt>readkeys</tt> திசை விசைகளில் ஒன்று (W, A, S, D) அழுத்தப்பட்டதா என்பதைச் சரிபார்த்து, அப்படியானால், பாம்பின் திசையை அதற்கேற்ப அமைக்கிறது. பின்னர், <tt>checkCollision</tt> பாம்பு தன்னுடன் மோதியதா அல்லது ஆப்பிளின் மீது மோதியதா என்பதை சரிபார்க்கிறது. <tt>updateSnake</tt> அதன் திசையின் அடிப்படையில் பாம்பின் உள் பிரதிநிதித்துவத்தைப் புதுப்பிக்கிறது. அடுத்து, ஆப்பிள் மற்றும் பாம்பு வரையப்படுகின்றன. இறுதியாக, <tt>spinWheels</tt> கேம் வேகமாக இயங்குவதை நிறுத்த, செயலியை சில பிசியான வேலைகளைச் செய்கிறது. தூக்கக் கட்டளையைப் போல நினைத்துப் பாருங்கள். பாம்பு சுவரில் அல்லது தன்னுடன் மோதும் வரை விளையாட்டு ஓடிக்கொண்டே இருக்கும்."
+ "முதலில் <tt>$08</tt> மதிப்பை <tt>X</tt> பதிவேட்டில் ஏற்றுவோம். அடுத்த வரி ஒரு சிட்டை. லேபிள்கள் ஒரு நிரலில் சில புள்ளிகளைக் குறிக்கின்றன, எனவே அவற்றை நாங்கள் பின்னர் திரும்பப் பெறலாம். லேபிளுக்குப் பிறகு <tt>X</tt>ஐக் குறைத்து, அதை <tt>$0200</tt> (மேல்-இடது பிக்சல்) இல் சேமித்து, அதை <tt>$03</tt> மதிப்புடன் ஒப்பிடுவோம். <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> <tt>X</tt> பதிவேட்டில் உள்ள மதிப்பை மற்றொரு மதிப்புடன் ஒப்பிடுகிறது. இரண்டு மதிப்புகளும் சமமாக இருந்தால், <tt>Z</tt> கொடி <tt>1</tt> என அமைக்கப்படும், இல்லையெனில் அது <tt>0</tt> ஆக அமைக்கப்படும்."
+ "முதல் வரிசை: <tt>$0200</tt>-<tt>$021F</tt>, இரண்டாவது வரிசை: <tt>$0220</tt>-<tt>$023F</tt>, முதலியன."
+ "க்னோமிற்கான 6502 அசெம்பிளியைக் கற்றுக்கொள் இன் முதல் வெளியீடு"
+ "இறுதியாக, பைட் <tt>$03</tt> என்பது பாம்பின் தற்போதைய நீளத்தைக் கொண்டுள்ளது, நினைவகத்தில் உள்ள பைட்டுகளின் அடிப்படையில் (எனவே 4 இன் நீளம் 2 பிக்சல்களைக் குறிக்கிறது)."
+ "சமூகத்துடன் பகிர்ந்து கொள்ள உங்களின் 6502 உதாரணத்தைப் பற்றிய தகவலை நிரப்பவும்"
+ "\"%1$s\" கோப்பு சேமிக்கப்படாத மாற்றங்களைக் கொண்டுள்ளது"
+ "இடைநிலைப்பலகைக்கு நகலெடுக்க முடியவில்லை"
+ "பயிற்சிகள்"
+ "உடற்பயிற்சி"
+ "அறிவுறுத்தல்களைத் தொடர்ச்சியாகச் செயல்படுத்துவதற்குப் பதிலாக ஒவ்வொன்றாகச் செயல்படுத்தவும்"
+ "எடுத்துக்காட்டுகள்"
+ "சான்று மதிப்பாய்வுக்காக சமர்ப்பிக்கப்பட்டது"
+ "இது ஒரு எளிய பதிப்பாக இருந்தாலும், குறியீடு முந்தைய எல்லா எடுத்துக்காட்டுகளையும் விட கணிசமாக பெரியதாக இருக்கும். விளையாட்டின் பல்வேறு அம்சங்களுக்காக நாம் பல நினைவக இருப்பிடங்களை ஒன்றாகக் கண்காணிக்க வேண்டும். முன்பைப் போலவே, நிரல் முழுவதும் தேவையான புத்தக பராமரிப்பை நாமே இன்னும் செய்யலாம், ஆனால் பெரிய அளவில் அது விரைவாக சோர்வாக மாறும் மற்றும் கண்டறிய கடினமாக இருக்கும் பிழைகளுக்கு வழிவகுக்கும். அதற்கு பதிலாக, அசெம்பிளரை நமக்காக சில சாதாரண வேலைகளைச் செய்ய அனுமதிப்போம்."
+ "இரட்டை ஒற்றை"
+ "அந்த அறிவைப் பெற்றிருந்தால், <tt>LDA #$01</tt> என்ற ஃச் மதிப்பை <tt>$01</tt> பதிவேட்டில் <tt>A</tt> ஏற்றுகிறது என்பதை நீங்கள் பார்க்க முடியும். அடுத்த பகுதியில் பதிவேடுகளைப் பற்றி மேலும் விரிவாகப் பேசுகிறேன்."
+ "எளிதாக மதிப்பு திருத்துதல் செய்ய ஃச் மானிட்டர் முகவரி வரம்பு உள்ளீடு மேம்படுத்தப்பட்டது"
+ "மேம்படுத்தப்பட்ட பயன்பாட்டு விளக்கக்காட்சி மற்றும் அணுகல்தன்மை"
+ "ச்டெப்பர் பயன்முறையை இயக்கவும்"
+ "பிழைத்திருத்தியை இயக்கு"
+ "ஒவ்வொரு பகுதியும் (<tt>upKey</tt>, <tt>rightKey</tt>, முதலியன) தற்போதைய திசையானது புதிய திசைக்கு நேர்மாறாக உள்ளதா என்பதை முதலில் சரிபார்க்கிறது. இதற்கு மற்றொரு சிறிய மாற்றுப்பாதை தேவைப்படுகிறது."
+ "முடிந்தது"
+ "காட்சி அமைப்பு"
+ "காட்சி நினைவகம் ($0200-$05FF)"
+ "கிளாசிக் கம்ப்யூட்டர்கள் மற்றும் கேம் கன்சோல்களின் கண்கவர் உலகத்தைக் கண்டறியவும்! 6502 அசெம்பிளி மொழியைக் கற்றுக்கொள்ளுங்கள் - NES, Commodore 64 மற்றும் அரத்திப்பழம், குமளிப்பழம் II போன்ற சின்னச் சின்ன அமைப்புகளை இயக்கும் அதே குறியீடு."
+ "நிராகரிக்கவும்"
+ "பிரித்தெடுத்தல் உருவாக்கப்பட்டது."
+ "பிரிக்கப்பட்டது"
+ "செயல்திறனை மேம்படுத்த முடக்கவும்"
+ "Dino Run"
+ "விவரம்"
+ "தசமக் கொடி: எண்கணித செயல்பாடுகளுக்கு பைனரி குறியிடப்பட்ட தசம (BCD) பயன்முறையை இயக்குகிறது. அமைக்கப்படும் போது, ADC/SBC அறிவுறுத்தல்கள் பைனரிக்கு பதிலாக மதிப்புகளை தசம இலக்கங்களாக (0-9) கருதுகின்றன. பொருள் கணக்கீடுகள் மற்றும் தசம எண்கணிதத்திற்கு பயன்படுத்தப்படுகிறது."
+ "பிழைத்திருத்தம் இப்போது தெரியும் போது மட்டுமே புதுப்பிக்கிறது, தேவையற்ற செயலாக்கத்தைக் குறைக்கிறது"
+ "பிழைத்திருத்தி"
+ "நிகழ்நேர ஆய்வுக் கருவிகள் மூலம் உங்கள் நிரல்களை பிழைத்திருத்தம் செய்யவும்"
+ "பிழைத்திருத்த அமைப்புகள்"
+ "பிழைத்திருத்தம்"
+ "இருண்ட பாணி"
+ "ஒரு விளையாட்டை உருவாக்குதல்"
+ "எடிட்டருக்கு நகலெடுக்கவும்"
+ "இடைநிலைப்பலகைக்கு நகலெடுக்கவும்"
+ "இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது"
+ "தொடரவும்"
+ "உறுதிப்படுத்தவும்"
+ "பொதுவான வழிமுறைகள்"
+ "பாம்பு விளையாட்டு என்று கருத்து தெரிவித்தார்"
+ "வண்ண தட்டு"
+ "குறியீடு எடிட்டர் மற்றும் மெய்நிகர் கேம் கன்சோல்"
+ "குறியீடு எடிட்டருக்கு நகலெடுக்கப்பட்டது"
+ "குறியீடு வெற்றிகரமாக ஒருங்கிணைக்கப்பட்டது, %1$d பைட்டுகள்."
+ "குறியீடு"
+ "கீழ் வலது மூலையில் வரைவதற்கு பிக்சல்களில் ஒன்றை மாற்றவும் (நினைவக இடம் <tt>$05ff</tt>)."
+ "கொடியை எடுத்துச் செல்லுங்கள்: கூடுதலாக ஒரு கேரி-அவுட்டை உருவாக்கும் போது அமைக்கவும்; ஒரு கழித்தல் கடன் தேவைப்படும் போது தெளிவாக. மல்டி-பைட் எண்கணிதம் மற்றும் சிப்ட்கள்/சுழல்களுக்கு (BCS/BCC) பயன்படுத்தப்படுகிறது."
+ "ரத்துசெய்"
+ "சமர்ப்பிப்பதன் மூலம், உங்கள் எடுத்துக்காட்டு <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a> இன் கீழ் உரிமம் பெறப்படும் என்பதை ஒப்புக்கொள்கிறீர்கள்."
+ "மட்டையாலும் பந்தாலும் கட்டைகளை உடைக்கவும்."
+ "பிரேக் ஃபிளாக்: BRK (பிரேக்) அறிவுறுத்தல் செயல்படுத்தப்படும் போது அமைக்கவும். மென்பொருள் குறுக்கீடுகள் (BRK) மற்றும் வன்பொருள் குறுக்கீடுகளை வேறுபடுத்திப் பார்க்கப் பயன்படுகிறது. குறுக்கீடு பணி நடைமுறைகளில் குறுக்கீட்டின் மூலத்தைக் கண்டறிய உதவுகிறது."
+ "கிளையிடுதல்"
+ "நீலம்"
+ "கேம் நிலை படப்புள்ளி இருப்பிடங்களின் அடிப்படையில் சேமிக்கப்படுவதால், விளையாட்டை வழங்குவது மிகவும் நேரடியானது. முதல் சப்ரூட்டீன், <tt>drawApple</tt>, மிகவும் எளிமையானது. இது <tt>Y</tt> ஐ பூச்சியமாக அமைக்கிறது, ஒரு சீரற்ற நிறத்தை திரட்டியில் ஏற்றுகிறது, பின்னர் இந்த மதிப்பை <tt>($00),y</tt> இல் சேமிக்கிறது. <tt>$00</tt> என்பது ஆப்பிளின் இருப்பிடம் சேமிக்கப்பட்டுள்ளது, எனவே இந்த நினைவக இருப்பிடத்தை <tt>($00),y</tt> குறிப்பிடுகிறது. மேலும் விவரங்களுக்கு <a href=\"#addressing\">முகவரி முறைகளில்</a> \"மறைமுக அட்டவணையிடப்பட்ட\" பகுதியைப் படிக்கவும்."
+ "பின்"
+ "நூலாசிரியர்"
+ "குறைந்த அளவில், இந்த சப்ரூட்டீன் சற்று சிக்கலானது. முதலில், நீளம் <tt>X</tt> பதிவேட்டில் ஏற்றப்படும், பின்னர் அது குறைக்கப்படுகிறது. கீழே உள்ள துணுக்கு பாம்புக்கான தொடக்க நினைவகத்தைக் காட்டுகிறது."
+ "அசெம்பிளி கோப்புகள்"
+ "அசெம்பிளி"
+ "குறியீட்டை அசெம்பிள் செய்கிறது..."
+ "வெற்றிகரமாக கூடியது"
+ "பின்வரும் குறியீட்டை அசெம்பிள் செய்து, <b>பிழைத்திருத்தம்</b> காட்சியைத் திறந்து, அசெம்பிள் செய்யப்பட்ட குறியீட்டைப் பார்க்க <b>Hexdump</b>ஐச் சரிபார்க்கவும்."
+ "குறியீட்டை அசெம்பிள் செய்து, <b>பிழைத்திருத்தம்</b> காட்சியைத் திறந்து, குறியீட்டின் மூலம் படி, <tt>A</tt> மற்றும் <tt>X</tt> பதிவேடுகளைப் பார்க்கவும். <tt>ADC #$c4</tt> என்ற வரியில் சற்று வித்தியாசமானது. <tt>$c4</tt> ஐ <tt>$c0</tt> இல் சேர்த்தால் <tt>$184</tt> கிடைக்கும் என்று நீங்கள் எதிர்பார்க்கலாம், ஆனால் இந்தச் செயலி <tt>$84</tt> என்ற முடிவை அளிக்கிறது. அதுக்கு என்னாச்சு?"
+ "குறியீட்டை அசெம்பிள் செய்து, இந்த மூன்று வழிமுறைகளைப் படிக்க <b>படி</b> பயன்படுத்தவும். பிழைத்திருத்தக் காட்சியில் உள்ள <b>Hex Monitor</b> நினைவகத்தின் ஒரு பகுதியைக் காட்டுகிறது, மேலும் நிரல்களின் செயல்பாட்டைக் காட்சிப்படுத்த உதவியாக இருக்கும். <tt>STA $01</tt> <tt>A</tt> பதிவின் மதிப்பை <tt>$01</tt> இல் சேமிக்கிறது, மேலும் <tt>ADC $01</tt> நினைவக இடத்தில் <tt>$01</tt> சேமிக்கப்பட்ட மதிப்பை <tt>A</tt> பதிவேட்டில் சேர்க்கிறது. <tt>$80 + $80</tt> <tt>$100</tt> க்கு சமமாக இருக்க வேண்டும், ஆனால் இது ஒரு பைட்டை விட பெரியதாக இருப்பதால், <tt>A</tt> பதிவு <tt>$00</tt> ஆக அமைக்கப்பட்டு, கேரி ஃபிளாக் அமைக்கப்பட்டுள்ளது. அதே போல் இது இருந்தாலும், பூச்சியக் கொடி அமைக்கப்பட்டுள்ளது. பூச்சியக் கொடியானது பூச்சியமாக இருக்கும் அனைத்து வழிமுறைகளாலும் அமைக்கப்படுகிறது."
+ "அசெம்பிள் தோல்வியடைந்தது"
+ "அசெம்பிள்"
+ "முன்பு கூறியது போல், நான்கு திசைகளும் 1, 2, 4 மற்றும் 8 ஆகிய எண்களால் உள்நாட்டில் குறிப்பிடப்படுகின்றன. இந்த எண்கள் ஒவ்வொன்றும் 2 இன் சக்தியாகும், எனவே அவை ஒற்றை <tt>1</tt> கொண்ட பைனரி எண்ணால் குறிப்பிடப்படுகின்றன:"
+ "இந்த கிடைமட்ட கீற்றுகளில் ஒன்றில் நீங்கள் நகரும் வரை, விசயங்கள் எளிமையானவை. எடுத்துக்காட்டாக, வலப்புறம் நகர்த்த, குறைந்தபட்சம் குறிப்பிடத்தக்க பைட்டை அதிகரிக்கவும் (எ.கா. <tt>$0200</tt> <tt>$0201</tt>). கீழே செல்ல, <tt>$20</tt>ஐச் சேர்க்கவும் (எ.கா. <tt>$0200</tt> என்பது <tt>$0220</tt>). இடது மற்றும் மேல் என்பது தலைகீழ்."
+ "எப்போதும் போல, இந்த வெளியீட்டில் பல சிறிய திருத்தங்கள் மற்றும் மேம்பாடுகள் உள்ளன."
+ "கட்டிடக்கலை மேம்பாடுகள் க்னோம், வெப் மற்றும் ஆண்ட்ராய்டு இயங்குதளங்களுக்கு இடையே சிறந்த குறியீடு பகிர்வை செயல்படுத்துகின்றன."
+ "தோற்ற அமைப்புகள்"
+ "தோற்றம்"
+ "6502 அசெம்பிளி மொழியில் <tt>$</tt> முன்னொட்டப்பட்ட எந்த எண்களும் (இந்தப் புத்தகத்தில் நீட்டிப்பு மூலம்) எக்சாடெசிமல் (எக்ச்) வடிவத்தில் இருக்கும். ஃச் எண்கள் உங்களுக்குத் தெரியாவிட்டால், <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">விக்கிபீடியா கட்டுரையைப்</a> படிக்க பரிந்துரைக்கிறேன். <tt>#</tt> உடன் முன்னொட்டாக உள்ள அனைத்தும் ஒரு நேரடி எண் மதிப்பாகும். வேறு எந்த எண்ணும் நினைவக இருப்பிடத்தைக் குறிக்கிறது."
+ "இங்கே கவனிக்க வேண்டிய முக்கியமான சேதி <tt>ADC #$01</tt> மற்றும் <tt>ADC $01</tt> இடையே உள்ள வேறுபாடு. முதலாவது <tt>A</tt> பதிவேட்டில் <tt>$01</tt> மதிப்பைச் சேர்க்கிறது, ஆனால் இரண்டாவது நினைவக இடத்தில் <tt>$01</tt> சேமிக்கப்பட்ட மதிப்பை <tt>A</tt> பதிவேட்டில் சேர்க்கிறது."
+ "மேலும் பயனுள்ளவை: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "கிட்டத்தட்ட முடிந்தது!"
+ "முழுமையான முகவரியிடலை ஆதரிக்கும் அனைத்து வழிமுறைகளும் (சம்ப் வழிமுறைகளைத் தவிர) ஒற்றை-பைட் முகவரியை எடுக்கும் விருப்பத்தையும் கொண்டுள்ளது. இந்த வகையான முகவரி \"சுழிய பக்கம்\" என்று அழைக்கப்படுகிறது - நினைவகத்தின் முதல் பக்கம் (முதல் 256 பைட்டுகள்) மட்டுமே அணுகக்கூடியது. இது வேகமானது, ஏனெனில் ஒரே ஒரு பைட்டை மட்டுமே பார்க்க வேண்டும், மேலும் அசெம்பிள் செய்யப்பட்ட குறியீட்டிலும் குறைந்த இடத்தை எடுத்துக்கொள்கிறது."
+ "அனைத்து கோப்புகள்"
+ "இதற்குப் பிறகு, 2–5 வரம்பில் இறுதி சீரற்ற எண்ணை உருவாக்க, <tt>2</tt> மதிப்பு திரட்டியில் சேர்க்கப்படும்."
+ "கருத்துகளின் ஆரம்ப தொகுதிக்குப் பிறகு (அரைப்புள்ளிகளுடன் தொடங்கும் வரிகள்), முதல் இரண்டு வரிகள்:"
+ "மோதலை கண்டறிந்த பிறகு, பாம்பின் இருப்பிடத்தைப் புதுப்பிக்கிறோம். இது போன்ற உயர் மட்டத்தில் செய்யப்படுகிறது: முதலில், உடலின் ஒவ்வொரு பைட் சோடியையும் நினைவகத்தில் ஒரு நிலைக்கு நகர்த்தவும். இரண்டாவதாக, தற்போதைய திசைக்கு ஏற்ப தலையை புதுப்பிக்கவும். இறுதியாக, தலை எல்லைக்கு வெளியே இருந்தால், அதை மோதலாகக் கையாளவும். இதை சில தபஅஇகு கலை மூலம் விளக்குகிறேன். ஒவ்வொரு இணை அடைப்புக்குறிகளிலும் எளிமைக்காக ஒரு இணை பைட்டுகளைக் காட்டிலும் x,y ஒருங்கிணைப்பு உள்ளது."
+ "ஒவ்வொரு திசையிலும் ஒரு நகர்வுக்குப் பிறகு, தலை வரம்பிற்கு அப்பாற்பட்டதா என்பதையும் நாம் சரிபார்க்க வேண்டும். இது ஒவ்வொரு திசைக்கும் வித்தியாசமாக கையாளப்படுகிறது. இடது மற்றும் வலதுபுறத்தில், தலை திறம்பட \"சுற்றப்பட்டதா\" என்பதை நாம் சரிபார்க்கலாம். குறைவான குறிப்பிடத்தக்க பைட்டை அதிகரிப்பதன் மூலம் <tt>$021f</tt> இலிருந்து வலதுபுறம் செல்வது <tt>$0220</tt>க்கு வழிவகுக்கும், ஆனால் இது உண்மையில் முதல் வரிசையின் கடைசி பிக்சலில் இருந்து இரண்டாவது வரிசையின் முதல் பிக்சலுக்குத் தாண்டுகிறது. எனவே, ஒவ்வொரு முறையும் நாம் வலதுபுறம் நகரும் போது, புதிய குறைந்தபட்சம் குறிப்பிடத்தக்க பைட் <tt>$20</tt> இன் பெருக்கமா என்பதைச் சரிபார்க்க வேண்டும். <tt>$1f</tt> முகமூடிக்கு எதிராக ஒரு பிட் சரிபார்ப்பைப் பயன்படுத்தி இது செய்யப்படுகிறது. குறைந்த 5 பிட்களை மறைப்பது, ஒரு எண் <tt>$20</tt> இன் பெருக்கமா இல்லையா என்பதை எப்படி வெளிப்படுத்துகிறது என்பதை கீழே உள்ள விளக்கப்படம் காண்பிக்கும் என்று நம்புகிறோம்."
+ "அத்வைதா"
+ "முகவரி முறைகள்"
+ "முகவரி முறைகள்"
+ "முகவரி %1$s - அறியப்படாத ஆப்கோட்"
+ "கூடுதல் பொத்தான் உள்ளீடுகளும் கிடைக்கின்றன: பொத்தான் A (Enter/Return key, ASCII குறியீடு <tt>$0D</tt>) மற்றும் பொத்தான் B (Space key, ASCII குறியீடு <tt>$20</tt>). உங்கள் கேம்களில் கூடுதல் தொடர்புகளைச் சேர்க்க இவை பயன்படுத்தப்படலாம். திசைக் கட்டுப்பாடுகளுக்கு, WASD விசைகள் மற்றும் அம்புக்குறி விசைகள் இரண்டையும் ஒன்றுக்கொன்று மாற்றாகப் பயன்படுத்தலாம்."
+ "தொடக்கநிலையாளர்களுக்கு குறியீட்டைத் திருத்துவதை எளிதாக்க உதவி நற்பொருத்தம் சேர்க்கப்பட்டது"
+ "உங்கள் நிரல்களைச் சேமிக்கவும் ஏற்றவும் கோப்பு மேலாண்மை சேர்க்கப்பட்டது"
+ "கூடுதல் பிக்சல்களை வரைய கூடுதல் வழிமுறைகளைச் சேர்க்கவும்."
+ "குவிப்பான்: கணக்கீடுகளுக்கான முதன்மையான பதிவு"
+ "உச்சரிப்பு: மஞ்சள்"
+ "உச்சரிப்பு: டீல்"
+ "உச்சரிப்பு: ச்லேட்"
+ "உச்சரிப்பு: சிவப்பு"
+ "உச்சரிப்பு: ஊதா"
+ "உச்சரிப்பு: இளஞ்சிவப்பு"
+ "உச்சரிப்பு: ஆரஞ்சு"
+ "உச்சரிப்பு: பச்சை"
+ "உச்சரிப்பு: நீலம்"
+ "உச்சரிப்பு நிறம்"
+ "முழுமையானது: <tt>$c000</tt>"
+ "முழுமையான, ஃச் மற்றும் முழுமையான, Y: <tt>$c000,X</tt> மற்றும் <tt>$c000,Y</tt>"
+ "6502 அசெம்பிளியைக் கற்றுக்கொள் பற்றி"
+ "6502 அறிவுறுத்தல் தொகுப்பின் முழுப் பட்டியல் <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">இங்கே கிடைக்கும்</a> மற்றும் <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">இங்கே</a> (நான் பொதுவாக இரண்டு பக்கங்களையும் அவற்றின் வலிமை மற்றும் பலவீனங்களைக் குறிப்பிடுகிறேன்). இந்தப் பக்கங்கள் ஒவ்வொரு அறிவுறுத்தலுக்குமான வாதங்களை விவரிக்கின்றன, அவை எந்தப் பதிவுகளைப் பயன்படுத்துகின்றன, எந்தக் கொடிகளை அமைக்கின்றன. அவை உங்கள் பைபிள்."
+ "உங்கள் உலாவியில் GitHub சிக்கல் திறக்கப்பட்டுள்ளது. உங்கள் பங்களிப்பை நிறைவுசெய்ய, மதிப்பாய்வு செய்து அதைச் சமர்ப்பிக்கவும். அங்கீகரிக்கப்பட்டதும், உங்கள் சான்று அடுத்த வெளியீட்டில் சேர்க்கப்படும். \n\nஉங்கள் சான்று மிகப் பெரியதாக இருந்தால், GitHub சிக்கலில் கைமுறையாக ஒட்டுவதற்கு முழுமையான உள்ளடக்கம் உங்கள் இடைநிலைப்பலகைக்கு நகலெடுக்கப்படும்."
+ "<tt>init</tt> மற்றும் <tt>loop</tt> இரண்டும் சப்ரூட்டின்கள். <tt>init</tt> ஆட்ட நிலையைத் துவக்குகிறது, <tt>loop</tt> என்பது முதன்மையான ஆட்ட வளையம் ஆகும்."
+ "<tt>checkSnakeCollision</tt> பாம்பின் உடல் பகுதிகள் வழியாகச் சுழன்று, ஒவ்வொரு பைட் சோடியையும் தலைச் சோடியுடன் ஒப்பிடுகிறது. பொருத்தம் இருந்தால், ஆட்டம் முடிந்தது."
+ "<tt>a9</tt> மற்றும் <tt>c9</tt> ஆகியவை முறையே <tt>LDA</tt> மற்றும் <tt>CMP</tt> க்கான செயலி ஆப்கோடுகள் ஆகும். <tt>01</tt> மற்றும் <tt>02</tt> ஆகியவை இந்த வழிமுறைகளுக்கான வாதங்கள். <tt>d0</tt> என்பது <tt>BNE</tt>க்கான ஆப்கோடு மற்றும் அதன் உரையாடல் <tt>02</tt>. இதன் பொருள் \"அடுத்த இரண்டு பைட்டுகளைத் தவிர்\" (<tt>85 22</tt>, <tt>STA $22</tt> இன் அசெம்பிள் செய்யப்பட்ட பதிப்பு). குறியீட்டைத் திருத்த முயற்சிக்கவும், இதன் மூலம் <tt>STA</tt> ஒற்றை-பைட் சுழிய பக்க முகவரியைக் காட்டிலும் இரண்டு-பைட் முழுமையான முகவரியை எடுக்கும் (எ.கா. <tt>STA $22</tt> என்பதை <tt>STA $2222</tt> ஆக மாற்றவும்). குறியீட்டை மீண்டும் இணைத்து மீண்டும் எக்ச்டம்பைப் பார்க்கவும் - <tt>BNE</tt>க்கான உரையாடல் இப்போது <tt>03</tt> ஆக இருக்க வேண்டும், ஏனெனில் செயலி கடந்ததைத் தவிர்க்கும் அறிவுறுத்தல் இப்போது மூன்று பைட்டுகள் நீளமாக உள்ளது."
+ "<tt>X</tt> படப்புள்ளி நிறத்தையும், <tt>Y</tt> தற்போதைய பிக்சலின் நிலையையும் வைத்திருக்கிறது. முதல் வளையமானது தற்போதைய நிறத்தை பிக்சலாக வரைகிறது (<tt>A</tt> பதிவு வழியாக), வண்ணத்தை அடுக்கிற்குத் தள்ளுகிறது, பின்னர் நிறம் மற்றும் நிலையை அதிகரிக்கிறது. இரண்டாவது லூப் அடுக்கை பாப் செய்து, பாப் செய்யப்பட்ட நிறத்தை ஒரு பிக்சலாக வரைந்து, பின்னர் நிலையை அதிகரிக்கிறது. எதிர்பார்த்தபடி, இது ஒரு பிரதிபலிப்பு வடிவத்தை உருவாக்குகிறது."
+ "<tt>SP</tt> என்பது ச்டாக் பாயிண்டர் ஆகும். நான் இன்னும் ச்டேக்கிற்குள் வரமாட்டேன், ஆனால் அடிப்படையில் இந்த பதிவு ஒவ்வொரு முறையும் ச்டேக்கில் ஒரு பைட் தள்ளப்படும்போது குறைக்கப்படும், மேலும் ஒரு பைட் ச்டேக்கில் இருந்து வெளியேறும் போது அதிகரிக்கும்."
+ "<tt>PC</tt> என்பது நிரல் கவுண்டர் - இது தற்போது நிரலில் எந்த கட்டத்தில் உள்ளது என்பதை செயலி எவ்வாறு அறிந்து கொள்கிறது. இது செயல்படுத்தும் ச்கிரிப்ட்டின் தற்போதைய வரி எண் போன்றது. சிமுலேட்டரில் குறியீடு <tt>$0600</tt> நினைவக இடத்தில் தொடங்கி, <tt>PC</tt> எப்போதும் அங்கேயே தொடங்கும்."
+ "<tt>JSR</tt> மற்றும் <tt>RTS</tt> (\"சப்ரூட்டினுக்குத் தாவி\" மற்றும் \"சப்ரூட்டினிலிருந்து திரும்புதல்\") ஆகியவை நீங்கள் வழக்கமாக ஒன்றாகப் பயன்படுத்துவதைக் காணக்கூடிய ஒரு மாறும் இரட்டையர். தற்போதைய இடத்திலிருந்து குறியீட்டின் மற்றொரு பகுதிக்கு செல்ல <tt>JSR</tt> பயன்படுத்தப்படுகிறது. <tt>RTS</tt> முந்தைய நிலைக்குத் திரும்புகிறது. இது அடிப்படையில் ஒரு செயல்பாட்டை அழைத்து திரும்புவது போன்றது."
+ "<tt>JMP</tt> என்பது நிபந்தனையற்ற சம்ப் ஆகும். அதை செயலில் காட்ட ஒரு எளிய உதாரணம்:"
+ "<tt>BCC</tt> மற்றும் <tt>BCS</tt> (\"கிளியர் ஆன் கேரி கிளியர்\" மற்றும் \"கிரேரி செட்டில் உள்ள கிளை\") கேரி ஃபிளாசில் கிளை செய்ய பயன்படுத்தப்படுகிறது. இந்த இரண்டில் ஒன்றைப் பயன்படுத்தும் நிரலை எழுதவும்."
+ "<b>பூச்சிய பக்கம்</b>: <tt>$0000</tt>-<tt>$00FF</tt> (முதல் 256 பைட்டுகள், விரைவான அணுகல்)"
+ "<b>சீரோ பக்கம்</b> (<tt>$c0</tt>): நினைவக இருப்பிடங்களை அணுகவும் <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): X/Y பதிவை சுழிய பக்க முகவரியில் சேர்க்கவும்"
+ "<b>Z</b> (பூச்யம்): முடிவு பூச்சியமாக இருக்கும்போது அமைக்கவும்"
+ "<b>X, Y</b>: முகவரியிடுவதற்கும் எண்ணுவதற்கும் குறியீட்டு பதிவுகள்"
+ "<b>W</b> அல்லது மேல் அம்புக்குறி விசை (<tt>$77</tt>)"
+ "<b>V</b> (ஓவர்ஃப்ளோ): எண்கணித செயல்பாடு கையொப்பமிடப்பட்ட மேலோட்டத்தை ஏற்படுத்தும் போது அமைக்கவும்"
+ "<b>ச்டாக்</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: பதிவுகளை நினைவகத்தில் சேமிக்கவும்"
+ "<b>SP</b> (ச்டாக் பாயிண்டர்): தற்போதைய ச்டாக் நிலைக்குச் சுட்டிகள் (<tt>$FF</tt> இல் தொடங்குகிறது)"
+ "<b>SBC தேவைகள் கேரி செட்</b>: கழிப்பதற்கு முன் <tt>C</tt> அமைக்கவும் (தலைகீழ் கடனாக வேலை செய்கிறது). SBCக்குப் பிறகு <tt>C</tt> தெளிவானது கடன் வாங்கியதைக் குறிக்கிறது."
+ "<b>S</b> அல்லது கீழ் அம்புக்குறி விசை (<tt>$73</tt>)"
+ "<b>உறவினர்</b> (<tt>லேபிள்</tt>): கிளை அடுத்த அறிவுறுத்தலில் இருந்து கையொப்பமிடப்பட்ட 8‑பிட் ஆஃப்செட்டைப் பயன்படுத்துகிறது (−128…+127)"
+ "<b>Q</b> அல்லது Enter/Return விசை (<tt>$0D</tt>)"
+ "<b>நிரல் சேமிப்பு</b>: <tt>$0600</tt> இல் தொடங்குகிறது"
+ "<b>PHA/PLA</b>: குவியலுக்கு/இருந்து தள்ளு/இழுக்க"
+ "<b>PC</b> (Program Counter): செயல்படுத்துவதற்கான அடுத்த வழிமுறையை சுட்டிக்காட்டுகிறது"
+ "<b>N</b> (எதிர்மறை): முடிவு பிட் 7 அமைக்கப்படும் போது அமைக்கவும்"
+ "<b>LDA/LDX/LDY</b>: பதிவுகளை ஏற்றவும்"
+ "<b>JSR/RTS</b>: சப்ரூட்டினுக்குச் செல்லவும் / சப்ரூட்டினிலிருந்து திரும்பவும்"
+ "<b>JMP</b>: நிபந்தனையற்ற சம்ப்"
+ "<b>மறைமுக</b> (<tt>($c000)</tt>): கொடுக்கப்பட்ட இடத்தில் சேமிக்கப்பட்டுள்ள முகவரியைப் பார்க்கவும்"
+ "<b>மறைமுக அட்டவணையிடப்பட்டது</b> (<tt>($c0),Y</tt>): அடிப்படை முகவரியைப் பெற, சுழிய பக்க முகவரியை சுட்டியாகப் பயன்படுத்தவும், பின்னர் அந்த அடிப்படையில் Yஐச் சேர்க்கவும்"
+ "<b>குறியீடு செய்யப்பட்ட மறைமுகம்</b> (<tt>($c0,X)</tt>): சுழிய பக்க முகவரிக்கு Xஐச் சேர்த்து, உண்மையான இலக்கு முகவரியைப் பெற, முடிவைச் சுட்டிக்காட்டியாகப் பயன்படுத்தவும்"
+ "<b>உடனடி</b> (<tt>#$c0</tt>): உண்மையான மதிப்பைப் பயன்படுத்தவும்"
+ "<b>INX/INY/DEX/DEY</b>: அதிகரிப்பு/குறைவு பதிவுகள்"
+ "<b>I</b> (குறுக்கீடு): குறுக்கீடுகள் முடக்கப்படும் போது அமைக்கவும்"
+ "<b>E</b> அல்லது ச்பேச் கீ (<tt>$20</tt>)"
+ "<b>காட்சி நினைவகம்</b>: <tt>$0200</tt>-<tt>$05FF</tt> (திரை வெளியீட்டிற்குப் பயன்படுத்தப்பட்டது)"
+ "<b>திசைக் கட்டுப்பாடுகள்</b>:"
+ "<b>D</b> அல்லது வலது அம்புக்குறி விசை (<tt>$64</tt>)"
+ "<b>D</b> (தசமம்): செயலி BCD (பைனரி குறியிடப்பட்ட தசம) பயன்முறையில் இருக்கும்போது அமைக்கவும்"
+ "<b>ஒப்பீடு ops</b>: <tt>CMP/CPX/CPY</tt> <tt>N/Z/C</tt> ஒரு முடிவைச் சேமிக்காமல் கழித்தல் (பதிவு − நினைவகம்) போன்று அமைக்கவும்."
+ "<b>C</b> (கேரி): எண்கணித செயல்பாடுகள் ஒரு பைட்டைக் கடந்து செல்லும் போது அமைக்கவும்"
+ "<b>BEQ/BNE/BCC/BCS</b>: கிளை என்றால் சமம்/சமமாக இல்லை/தெளிவான/கேரி செட் இருந்தால்"
+ "<b>B</b> (பிரேக்): BRK அறிவுறுத்தல் செயல்படுத்தப்படும் போது அமைக்கவும்"
+ "<b>செயல் பொத்தான்கள்</b>:"
+ "<b>முழுமை</b> (<tt>$c000</tt>): எந்த நினைவக இருப்பிடத்தையும் அணுகவும்"
+ "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): X/Y பதிவை முழுமையான முகவரியில் சேர்க்கவும்"
+ "<b>ADC/SBC</b>: கேரியுடன் சேர்/கழித்தல்"
+ "<b>A</b> அல்லது இடது அம்புக்குறி விசை (<tt>$61</tt>)"
+ "<b>A</b> (அக்யூமுலேட்டர்): கணக்கீடுகள் மற்றும் தரவு கையாளுதலுக்கான முதன்மைப் பதிவு"
+ "<b><tt>$f</tt></b>: வெளிர் சாம்பல் (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: வெளிர் நீலம் (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: வெளிர் பச்சை (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: சாம்பல் (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: அடர் சாம்பல் (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: வெளிர் சிவப்பு (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: கடைசியாக அழுத்திய விசை (ASCII குறியீடு)"
+ "<b><tt>$FE</tt></b>: ரேண்டம் எண் செனரேட்டர் (சீரற்ற மதிப்பு 0-255 ஆகப் படிக்கிறது)"
+ "<b><tt>$9</tt></b>: பிரவுன் (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: ஆரஞ்சு (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: மஞ்சள் (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: நீலம் (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: பச்சை (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: ஊதா (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: சியான் (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: சிவப்பு (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: வெள்ளை (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: பாம்பின் இருப்பிடத் தரவு (தலை, உடல் பகுதிகள், வால்)"
+ "<b><tt>$0</tt></b>: கருப்பு (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: பாம்பு நீளம்"
+ "<b><tt>$02</tt></b>: பாம்பு திசை (1=மேலே, 2=வலது, 4=கீழ், 8=இடது)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: ஆப்பிள் நிலை"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> இந்த மூலக் குறியீட்டிற்கு <a href=\"https://gist.github.com/wkjagt/9043907\">முழுமையாக விளக்கமளிக்கப்பட்ட ஒரு gist</a> உருவாக்கியுள்ளார்; மேலும் விவரங்களுக்கு அதைப் பின்தொடரவும்."
+ "6502 அசெம்பிளி மொழியில் பல கிளை வழிமுறைகள் உள்ளன, இவை அனைத்தும் குறிப்பிட்ட கொடிகள் அமைக்கப்பட்டுள்ளதா இல்லையா என்பதை அடிப்படையாகக் கொண்டது. இந்த எடுத்துக்காட்டில் நாம் <tt>BNE</tt> ஐப் பார்ப்போம்: \"சமமாக இல்லாத கிளை\"."
+ "6502 அடுக்கு நிரப்பப்பட்டது! போர்த்தி..."
+ "6502 அடுக்கு காலியாகிவிட்டது! போர்த்தி..."
+ "(உண்மையில், 6502 செயலிகளை <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> இன்னும் தயாரித்து வருகிறது என்றும், அவை <a href=\"https://www.mouser.co.uk/c/?q=65C02\">பொழுதுபோக்கு ஆர்வலர்களுக்கு விற்கப்படுகின்றன</a> என்றும் எனக்கு நம்பத்தகுந்த தகவல் கிடைத்துள்ளது. எனவே 6502 ஒரு செத்த மொழி <i>அல்ல</i> என்பது தெளிவு! யாருக்குத் தெரியும்?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-uk/strings.xml b/packages/app-android/data/Android/src/main/res/values-uk/strings.xml
new file mode 100644
index 00000000..74a7ac6b
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-uk/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Вивчення асемблера 6502"
+ "Вивчення асемблера 6502"
+ "Вивчення асемблера 6502"
+ "வணக்கம்! Ми раді вітати тамільський переклад, наданий தமிழ்நேரம். நன்றி!"
+ "що відповідає непрямим адресам <tt>$0411</tt>, <tt>$0410</tt> і <tt>$040f</tt> (три пікселі посеред екрана). Я наголошую на цьому, бо важливо повністю зрозуміти, як працює непряма адресація."
+ "wdm-output"
+ "програмування"
+ "навчання"
+ "автор: %1$s"
+ "_Параметри"
+ "Zero page: <tt>$c0</tt>"
+ "Zero page,Y: <tt>$c0,Y</tt>"
+ "Zero page,X: <tt>$c0,X</tt>"
+ "Використання нульової сторінки"
+ "Нульова сторінка ($0000-$00FF)"
+ "Нульовий прапорець: встановлюється, коли результат операції дорівнює нулю. Критично важливий для умовних переходів — більшість інструкцій (BEQ, BNE) перевіряють його, щоб визначати потік виконання."
+ "У вашому файлі є незбережені зміни. Зміни буде втрачено, якщо ви їх не збережете."
+ "Ви вже бачили <tt>TAX</tt>. Можете здогадатися, що роблять <tt>TAY</tt>, <tt>TXA</tt> і <tt>TYA</tt>, але напишіть трохи коду, щоб перевірити здогадки."
+ "Ви підтримали цей проєкт з відкритим кодом, купивши застосунок. Дякуємо!"
+ "Екран можна уявити як чотири горизонтальні смуги по 32 × 8 пікселів. Вони відповідають діапазонам <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> і <tt>$0500-$05ff</tt>. Перші рядки пікселів: <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt> тощо."
+ "Жовтий"
+ "Пишіть і редагуйте код у вбудованому редакторі"
+ "У всіх цих прикладах вам може стати в пригоді <b>Hex-монітор</b> у вкладці налагодження, щоб спостерігати за змінами в пам’яті. Виберіть зі списку ділянку пам’яті, щоб побачити цей фрагмент, — наприклад, <b>Пам\'ять дисплея ($0200–$05FF)</b>, щоб стежити за пікселями екрана, або <b>Нульова сторінка ($0000–$00FF)</b>, щоб переглянути перші 256 байтів."
+ "За абсолютної адресації повна адреса пам’яті використовується як аргумент інструкції. Наприклад:"
+ "Ласкаво просимо в\'єтнамський переклад, повністю наданий Loc Huynh (hthienloc)."
+ "Ласкаво просимо польський переклад, спочатку наданий Micro Wave. Dziękujemy!"
+ "Ми вже побіжно глянули на розділ стану процесора (де <tt>A</tt>, <tt>PC</tt> тощо), але що це все означає?"
+ "Ми додали новий розділ «Приклади» на вкладці «Навчання», де ви можете досліджувати та запускати повністю прокоментовані програми 6502 безпосередньо в додатку. Почніть із нашого прикладу гри Snake і побачте, як оживають пікселі!"
+ "Значення <tt>$00</tt>-<tt>$0F</tt> представляють 16 різних кольорів (<tt>$00</tt>=чорний, <tt>$01</tt>=білий)"
+ "Використовувати власний основний колір"
+ "Використовувати власний акцентний колір"
+ "Оновлення стану гри"
+ "Незбережені зміни"
+ "На відміну від zero page,Y, absolute,Y не працює з <tt>STX</tt>, але підходить для <tt>LDA</tt> і <tt>STA</tt>."
+ "Під капотом: оновлено до TypeScript 6, Vite 8 та інших оновлень залежностей для покращення продуктивності та стабільності."
+ "Не вдалося перемістити код за межі 64K пам’яті"
+ "Не вдалося знайти/розібрати вказану адресу/мітку"
+ "Дві стекові інструкції — це <tt>PHA</tt> і <tt>PLA</tt> («покласти акумулятор» і «зняти акумулятор»). Нижче наведено приклад їх роботи."
+ "Дві нові програми-приклади, і обидві надійшли від вас: Dino Run від Jacob і Line Buster 6502 від edit12. Це перші приклади, надіслані кнопкою «Поділитися», і ми будемо раді новим."
+ "Посібник <sub>авторства <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, ліцензія CC BY 4.0</sub>"
+ "Посібник"
+ "Спробуйте написати фрагменти коду з кожним режимом адресації 6502. Пам’ятайте: ви можете скористатися <b>Hex-монітором</b> у вкладці налагодження, щоб спостерігати за ділянкою пам’яті."
+ "Спробуйте приклади програм для мікропроцесора 6502."
+ "Спробуйте приклади програм"
+ "Спробуйте змінити колір трьох пікселів."
+ "Перемкнути бічну панель"
+ "Щоб визначити, чи напрямок дорівнює <tt>1</tt>, <tt>2</tt>, <tt>4</tt> або <tt>8</tt>, код багаторазово зсуває вправо, доки не встановиться перенесення. Один <tt>LSR</tt> означає «вгору», два — «вправо» і так далі."
+ "Назва"
+ "У цьому випуску — яскрава тема в стилі портативних пристроїв із настроюваними кольорами. Ми додали адаптивні макети для планшетів і робочих станцій, які тримають усе в полі зору — ідеально для довгих сесій навчання розробці ретроігор на асемблері. Величезна подяка нашому новому контриб’ютору @mmartinortiz за класні ідеї десктопного макета. Є й технічні покращення: посилена строгість TypeScript, власні схеми стилів GtkSourceView та розширені елементи керування налагоджувачем для плавнішої роботи."
+ "Цей варіант трохи дивний — ніби суміш zero page,X і непрямої адресації. Берете адресу нульової сторінки, додаєте до неї значення <tt>X</tt>, а тоді використовуєте результат, щоб зчитати двобайтну адресу. Наприклад:"
+ "Це завантажує значення <tt>$11</tt> у комірку <tt>$10</tt>, значення <tt>$10</tt> — у <tt>$12</tt>, а <tt>$0f</tt> — у <tt>$14</tt>. Потім значення <tt>$04</tt> записується в <tt>$11</tt>, <tt>$13</tt> і <tt>$15</tt>. У підсумку пам’ять матиме такий вигляд:"
+ "Тут адресація стає цікавою: задається адреса нульової сторінки, а потім до неї додається значення регістра <tt>X</tt>. Наприклад:"
+ "Це еквівалент zero page,X, але його можна використовувати лише з <tt>LDX</tt> і <tt>STX</tt>."
+ "Це варіанти абсолютної адресації для zero page,X і zero page,Y. Наприклад:"
+ "Є й суто практична причина: розробка ретроігор. Сцена homebrew жива — <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">нові ігри для NES</a> виходять досі (деякі навіть на фізичних картриджах), так само і для інших класичних систем; NES — лише приклад. Навіть якщо ваша ціль — SNES, починати з 6502 варто: процесор SNES (65C816) сумісний назад із 6502, тож засади, які ви тут опануєте — регістри, режими адресації та базові інструкції — напряму переносяться."
+ "Чому саме 6502? Чому не якась <i>корисна</i> мова асемблера на кшталт <a href=\"https://uk.wikipedia.org/wiki/X86\">x86</a>? Насправді вивчення x86 навряд чи стане в пригоді — у повсякденній роботі вам навряд чи доведеться <i>писати</i> асемблер. Для багатьох це радше академічна вправа, що розширює мислення. 6502 створювали в іншу епоху, коли більшість розробників писали асемблер напряму, а не цими новомодними мовами високого рівня, тож його проектували для людей. Сучасні асемблери здебільшого для компіляторів — хай цим займаються вони. До того ж 6502 — це <i>весело</i>. Ніхто ніколи не називав x86 <i>веселим</i>."
+ "Нульова сторінка пам’яті використовується для зберігання кількох змінних стану гри (див. коментар на початку). Усе в <tt>$00</tt>, <tt>$01</tt> і починаючи з <tt>$10</tt> — це пари байтів, що представляють двобайтні адреси, які зчитуються у режимі непрямої адресації. Усі ці адреси лежать між <tt>$0200</tt> і <tt>$05ff</tt> — ділянкою пам’яті, що відповідає екрану консолі. Наприклад, якщо в <tt>$00</tt> і <tt>$01</tt> значення <tt>$01</tt> і <tt>$02</tt>, це посилання на другий піксель дисплея (<tt>$0201</tt> — пам’ятайте, при непрямій адресації молодший байт перший)."
+ "Стек у процесорі 6502 як і будь‑який інший: значення додаються (push) і знімаються (pull). Поточну глибину стека відстежує вказівник стека — спеціальний регістр. Стек розміщено в пам’яті між <tt>$0100</tt> і <tt>$01ff</tt>. Спочатку вказівник має значення <tt>$ff</tt>, що вказує на <tt>$01ff</tt>. Коли байт додають у стек, вказівник стає <tt>$fe</tt> (тобто <tt>$01fe</tt>) і так далі."
+ "Стек"
+ "Гра «Змійка» з посібника"
+ "У підсумку ця підпрограма завантажує випадковий байт у <tt>$00</tt> і випадкове число від 2 до 5 у <tt>$01</tt>. Оскільки при непрямій адресації молодший байт іде першим, це задає адресу між <tt>$0200</tt> і <tt>$05ff</tt> — саме той діапазон, що використовується для виведення на екран."
+ "Процесор знає, куди повертатися, тому що <tt>JSR</tt> перед переходом кладе в стек адресу наступної інструкції мінус один. <tt>RTS</tt> виймає цю адресу, додає один і переходить туди. Наприклад:"
+ "Проблема в тому, що <tt>$184</tt> завелике для одного байта (максимум — <tt>$FF</tt>), а регістри вміщують лише один байт. Але все гаразд: процесор «не дурний». Якщо придивитись, видно, що після цієї операції прапорець перенесення встановлено в <tt>1</tt>. Саме так це визначають."
+ "Протилежність <tt>BNE</tt> — <tt>BEQ</tt>. Спробуйте написати програму з використанням <tt>BEQ</tt>."
+ "Протилежність <tt>ADC</tt> — <tt>SBC</tt> (віднімання з перенесенням). Напишіть програму, що використовує цю інструкцію."
+ "Гра-біганина з офлайн-режиму браузера, на асемблері 6502"
+ "Підпрограма <tt>generateApplePosition</tt> встановлює випадкове розташування яблука. Спершу вона завантажує випадковий байт в акумулятор (<tt>$fe</tt> у цьому симуляторі — генератор випадкових чисел) і зберігає його в <tt>$00</tt>. Потім завантажує інший випадковий байт і виконує над ним <tt>AND</tt> зі значенням <tt>$03</tt>. Тут потрібне невелике пояснення."
+ "Підпрограма <tt>checkCollision</tt> делегує <tt>checkAppleCollision</tt> і <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> перевіряє, чи збігаються два байти адреси яблука з двома байтами адреси голови. Якщо так, довжина збільшується і генерується нове місце для яблука."
+ "Наступний рядок, <tt>BNE decrement</tt>, переносить виконання до мітки зменшення, якщо прапорець <tt>Z</tt> дорівнює <tt>0</tt> (тобто значення в порівнянні <tt>CPX</tt> не рівні); інакше нічого не робить, ми записуємо <tt>X</tt> у <tt>$0201</tt> і завершуємо програму."
+ "Далі оновлюється положення голови залежно від напрямку. Це, мабуть, найскладніша частина коду й цілком залежить від того, як адреси пам’яті відображаються на екран — розгляньмо це детальніше."
+ "Довжину ініціалізовано як <tt>4</tt>, тож <tt>X</tt> починає з <tt>3</tt>. <tt>LDA $10,x</tt> завантажує значення з <tt>$13</tt> у <tt>A</tt>, а <tt>STA $12,x</tt> записує його в <tt>$15</tt>. <tt>X</tt> зменшується, і цикл повторюється. Тепер <tt>X</tt> дорівнює <tt>2</tt>, тож завантажуємо <tt>$12</tt> і записуємо в <tt>$14</tt>. Цикл триває, доки <tt>X</tt> додатний (<tt>BPL</tt> — «перехід, якщо додатний»)."
+ "Остання підпрограма, <tt>spinWheels</tt>, потрібна, бо інакше гра працюватиме занадто швидко. <tt>spinWheels</tt> просто зменшує <tt>X</tt> від нуля, доки той знову не стане нулем. Перший <tt>dex</tt> спричиняє «обгортання», роблячи <tt>X</tt> рівним <tt>#$ff</tt>."
+ "Останній розділ показує прапорці процесора. Кожен прапорець — це один біт, тож усі сім прапорців уміщуються в одному байті. Процесор встановлює прапорці, щоб повідомити про результат попередньої інструкції. Докладніше — <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">тут</a>."
+ "Шістнадцяткове <tt>$03</tt> у двійковому поданні — це <tt>00000011</tt>. Операція <tt>AND</tt> виконує побітове І між аргументом та акумулятором. Наприклад, якщо акумулятор містить <tt>10101010</tt>, то результат <tt>AND</tt> з <tt>00000011</tt> буде <tt>00000010</tt>."
+ "Шістнадцятковий дамп має виглядати приблизно так:"
+ "Ігровий цикл"
+ "Перші два байти зберігають адресу яблука. Її оновлюють щоразу, коли змійка з’їдає яблуко. Байт <tt>$02</tt> містить поточний напрямок: <tt>1</tt> — вгору, <tt>2</tt> — вправо, <tt>4</tt> — вниз, <tt>8</tt> — вліво. Чому саме так — стане зрозуміло згодом."
+ "Перша підпрограма, <tt>readKeys</tt>, відповідає за введення. Комірка <tt>$ff</tt> містить ASCII‑код останньої натисненої клавіші в симуляторі. Значення завантажується в акумулятор і порівнюється з <tt>$77</tt> (W), <tt>$64</tt> (D), <tt>$73</tt> (S) і <tt>$61</tt> (A). Якщо порівняння успішне, програма переходить до відповідного розділу."
+ "Перший рядок показує регістри <tt>A</tt>, <tt>X</tt> і <tt>Y</tt> (<tt>A</tt> часто називають «акумулятором»). Кожен регістр містить один байт. Більшість операцій працюють із вмістом цих регістрів."
+ "Перша інструкція переносить виконання до мітки <tt>init</tt>. Це встановлює <tt>X</tt>, а потім повертається до наступної інструкції <tt>JSR loop</tt>. Вона переходить до мітки <tt>loop</tt>, де <tt>X</tt> інкрементується, доки не стане <tt>$05</tt>. Далі повертаємося до наступної інструкції <tt>JSR end</tt>, яка переходить у кінець файлу. Це показує, як <tt>JSR</tt> і <tt>RTS</tt> працюють разом для модульності коду."
+ "У результаті маскуються два молодші біти акумулятора, інші обнуляються. Це перетворює число з діапазону 0–255 на число в діапазоні 0–3."
+ "Блок коду нижче містить повний вихідний код гри. Далі я поясню, як він працює."
+ "Тепер на чорному екрані консолі має бути три кольорові «пікселі» у верхньому лівому куті."
+ "Застосунок розроблено для шрифту інтерфейсу GNOME. В інших системах він відображається шрифтом цієї системи, який зазвичай менший."
+ "Індексний регістр Y подібний до X і не має спеціальних функцій. Зазвичай використовується для індексної адресації та переміщення даних."
+ "Індексний регістр X використовується для режимів індексної адресації та операцій підрахунку. Він може зберігати лічильники циклів, індекси масивів і є необхідним для доступу до комірок пам\'яті відносно базової адреси, використовуючи X як зміщення. Особливе: TSX/TXS передають X до/з вказівника стека."
+ "Вказівник стека керує стеком викликів для підпрограм і переривань. Він починається з $FF (вершина стека) і зростає вниз. Використовується для операцій PUSH/PULL, викликів JSR/RTS та обробки переривань. Критично важливий для вкладених викликів функцій."
+ "Лічильник команд містить адресу пам\'яті наступної інструкції для виконання. Він автоматично збільшується після кожної інструкції і може бути змінений переходами, розгалуженнями, викликами та поверненнями. Необхідний для керування потоком програми та налагодження."
+ "Акумулятор (A) — це основний регістр для арифметичних і логічних операцій. Усі базові обчислення, такі як ADD, SUBTRACT, AND, OR тощо, використовують цей регістр. Це найчастіше використовуваний регістр у програмуванні на асемблері 6502."
+ "Підпрограма <tt>loop</tt> послідовно викликає низку підпрограм, а потім повертається на початок:"
+ "Підпрограма <tt>init</tt> делегує двом підпрограмам: <tt>initSnake</tt> і <tt>generateApplePosition</tt>. <tt>initSnake</tt> встановлює напрямок і довжину змійки, а також завантажує початкові адреси голови та тіла. Пара байтів у <tt>$10</tt> містить екранну адресу голови, пара в <tt>$12</tt> — адресу єдиного сегмента тіла, а <tt>$14</tt> — адресу хвоста (хвіст — останній сегмент тіла і малюється чорним, щоб змійка рухалась). Це виглядає так:"
+ "Операція <tt>BIT</tt> подібна до <tt>AND</tt>, але обчислення використовується лише для встановлення нульового прапорця — фактичний результат відкидається. Нульовий прапорець встановлюється тільки якщо результат <tt>AND</tt> акумулятора з аргументом дорівнює нулю. Для степенів двійки нульовий прапорець встановлюється лише тоді, коли біти не збігаються. Наприклад, <tt>0001 AND 0001</tt> не дорівнює нулю, а <tt>0001 AND 0010</tt> — нуль."
+ "6502 має 16‑бітну шину адреси, тобто процесору доступні 65536 байтів пам’яті. Пам’ятайте: байт записується двома шістнадцятковими символами, тож адреси зазвичай подають як <tt>$0000 - $ffff</tt>. Нижче описано різні способи посилання на ці адреси."
+ "Дякуємо, що користуєтеся програмним забезпеченням з відкритим кодом."
+ "Перевіряє біт 0 регістра A за допомогою LSR і BCC та записує в A результат: 1 або 0"
+ "Тестуйте свої творіння на віртуальній ігровій консолі"
+ "Tervetuloa! Ми раді вітати фінський переклад, люб\'язно наданий Jiri Grönroos. Kiitos!"
+ "Бірюзовий"
+ "Системний шрифт, розмір GNOME"
+ "Системне за замовчуванням"
+ "Синтаксична помилка в рядку %1$d: %2$s"
+ "Прихильник"
+ "Підтримати"
+ "Надіслати"
+ "Стиль"
+ "Зупинено"
+ "Покроковий посібник з асемблера 6502"
+ "Крок"
+ "Прапорці стану"
+ "Вказівник стека: Вказує на позицію стека"
+ "Приклад стека"
+ "Стек ($0100-$01FF)"
+ "Спеціальні комірки пам\'яті (у симуляторі)"
+ "URL джерела"
+ "Деякі інструкції не працюють з адресами пам’яті (напр., <tt>INX</tt> — інкремент регістра <tt>X</tt>). Кажуть, що вони мають неявну адресацію — аргумент визначається самою інструкцією."
+ "Навіщо вивчати 6502? Це ж «мертва» мова, чи не так? Латина теж «мертва», але її все одно викладають. <a href=\"https://uk.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "То що ж робить ця програма? Пройдімо її крок за кроком. Натисніть <b>Скинути</b>, потім скористайтеся кнопкою <b>Крок</b>, щоб виконувати програму по одній інструкції за раз. Вкладка <b>Налагодження</b> показує регістри та пам’ять — це окрема вкладка на малому вікні та панель під ігровою консоллю на широкому. Натисніть <b>Крок</b> один раз, і ви помітите у вкладці налагодження, що <tt>A=</tt> змінився з <tt>$00</tt> на <tt>$01</tt>, а <tt>PC=</tt> — з <tt>$0600</tt> на <tt>$0602</tt>."
+ "Отже, інструкція <tt>STA $0200</tt> зберігає значення регістра <tt>A</tt> у комірку пам’яті <tt>$0200</tt>. Натисніть <b>Крок</b> ще чотири рази, щоб виконати решту інструкцій, стежачи за змінами регістра <tt>A</tt>."
+ "Розгляньмо <tt>upKey</tt>: якщо поточний напрямок — вниз (4), перевірка біта дасть нуль. <tt>BNE</tt> означає «перейти, якщо нульовий прапорець не встановлено», тож у цьому разі відбудеться перехід до <tt>illegalMove</tt>, яка просто повертається з підпрограми. Інакше новий напрямок (тут 1) зберігається у відповідній комірці пам’яті."
+ "Отже, почнемо! У застосунку є <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">асемблер і симулятор 6502 на JavaScript</a>, які адаптовано для цього інтерактивного посібника. Натисніть кнопку <b>Копіювати</b> в блоці коду нижче, щоб скопіювати приклад у редактор. Потім скористайтеся дією <b>Зібрати</b>, щоб зібрати код, і <b>Запустити</b>, щоб виконати його. Ці дії доступні у вигляді кнопок або в меню."
+ "Поки що ми пишемо лише базові програми без розгалужень. Змінимо це."
+ "Використання пам\'яті грою «Змійка»"
+ "Дані гри «Змійка» ($00-$15)"
+ "Гра «Змійка»"
+ "Сланцевий"
+ "Помилка симулятора"
+ "Симулятор"
+ "Поділені приклади коду тепер містять інформацію про ліцензію CC-BY-4.0, що робить зрозумілим, як спільнота може використовувати та будувати на основі ваших внесків."
+ "Поділіться своїм прикладом"
+ "Поділитися прикладом"
+ "Поділитися"
+ "Shalom! Ми раді вітати переклад на іврит, повністю наданий Menachem (naattxx). Toda raba!"
+ "Серйозно, розуміння мови асемблера — цінне. Асемблер — це найнижчий рівень абстракції, на якому код ще читабельний, і він безпосередньо відображається у байти, що виконує процесор. Зрозумівши, як це працює, ви фактично стаєте <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">маґом</a> у програмуванні."
+ "Selamat datang! Ми також вітаємо індонезійський переклад, люб\'язно наданий Arif Budiman. Terima kasih!"
+ "Екран відповідає діапазону пам\'яті <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Зустрічайте багато нових перекладів: французька, інтерлінгва, португальська, португальська (Бразилія), нідерландська, іспанська, українська, японська та китайська (спрощена)"
+ "Збережено як %1$s"
+ "Зберегти зміни?"
+ "Зберегти як..."
+ "Зберегти файл асемблера"
+ "Зберегти"
+ "Гра «Змійка» запущена"
+ "Запустити"
+ "Перепишіть перший приклад цього розділу, використавши регістр <tt>Y</tt> замість <tt>X</tt>."
+ "Перегляньте, як ваш приклад відображатиметься для інших. Натиснувши <b>Надіслати</b>, буде створено issue на GitHub. Вам потрібно буде увійти за допомогою свого облікового запису GitHub, щоб завершити подання."
+ "Продовжити"
+ "Скинути"
+ "Візуалізація гри"
+ "Relative: <tt>$c0</tt> (або мітка)"
+ "Відносна адресація використовується для інструкцій розгалуження. Ці інструкції приймають один байт, який використовується як зміщення від наступної інструкції."
+ "Регістри та прапорці"
+ "Регістри"
+ "Зменшено типовий діапазон адрес hex-монітора для кращої ефективності"
+ "Червоний"
+ "Читання введення"
+ "Випадкове/Введення ($FE-$FF)"
+ "Вийти"
+ "Швидкі поради"
+ "Фіолетовий"
+ "Програмуйте вінтажні ігрові консолі"
+ "Програму призупинено"
+ "Програму завершено. Скиньте, щоб знову пройти програму крок за кроком."
+ "Програму завершено на PC=$%1$s"
+ "Програму завершено"
+ "Збереження програми ($0600-$FFFF)"
+ "Лічильник команд: Вказує на наступну інструкцію"
+ "Регістр стану процесора"
+ "Прапорці процесора"
+ "Основний: Жовтий"
+ "Основний: Бірюзовий"
+ "Основний: Сланцевий"
+ "Основний: Червоний"
+ "Основний: Фіолетовий"
+ "Основний: Рожевий"
+ "Основний: Помаранчевий"
+ "Основний: Зелений"
+ "Основний: Синій"
+ "Основний колір"
+ "Назад"
+ "Попередній перегляд вашого прикладу"
+ "Попередній перегляд"
+ "Натисніть <b>Крок</b> знову, щоб виконати другу інструкцію. Верхній лівий піксель ігрової консолі тепер має бути білим. Цей симулятор використовує комірки пам\'яті <tt>$0200</tt> до <tt>$05ff</tt> для малювання пікселів на дисплеї. Значення від <tt>$00</tt> до <tt>$0f</tt> представляють 16 різних кольорів (<tt>$00</tt> — чорний, а <tt>$01</tt> — білий), тому збереження значення <tt>$01</tt> у комірці пам\'яті <tt>$0200</tt> малює білий піксель у верхньому лівому куті. Це простіше, ніж те, як справжній комп\'ютер виводить відео, але поки що це підійде."
+ "Попередня обробка..."
+ "Грати"
+ "Рожевий"
+ "Ідеально для любителів, студентів і всіх, хто цікавиться тим, як насправді працюють комп\'ютери!"
+ "Призупинити"
+ "Прапорець Overflow: Встановлюється, коли арифметична операція створює результат, який не може бути представлений у знаковому 8-бітному діапазоні (-128 до +127). Використовується для виявлення помилок знакової арифметики в обчисленнях."
+ "Загальна структура"
+ "Розгалуження поза діапазоном на рядку %1$d (розгалуження обмежені діапазоном від -128 до +127): %2$s"
+ "Наша перша програма"
+ "Організовано як чотири горизонтальні смуги по 32×8 пікселів"
+ "Помаранчевий"
+ "Оптимізовано конфігурацію Flatpak шляхом видалення непотрібних дозволів"
+ "Відкрито %1$s"
+ "Відкрити..."
+ "Відкритий код"
+ "Відкрити файл асемблера"
+ "Після зсуву значень уздовж тіла змійки треба вирішити, що робити з головою. Спочатку напрямок завантажується в <tt>A</tt>. <tt>LSR</tt> означає «логічний зсув праворуч», тобто зсув усіх бітів на одну позицію вправо. Молодший біт переходить у прапорець перенесення, тому якщо акумулятор дорівнює <tt>1</tt>, після <tt>LSR</tt> він стане <tt>0</tt>, а прапорець перенесення буде встановлено."
+ "Після скидання (симулятор): <tt>P = $30</tt> (встановлені bit5 і <tt>B</tt>; <tt>D</tt> та <tt>I</tt> скинуті)"
+ "Гаразд"
+ "Тепер застосуймо ці знання на практиці та створімо гру! Зробимо дуже просту версію класичної «Змійки»."
+ "Попередній досвід програмування не потрібен. Почніть з інтерактивних уроків і розвивайте навички крок за кроком."
+ "Немає коду для виконання."
+ "Адресу або мітку не вказано"
+ "Далі йде <tt>drawSnake</tt>. Це також доволі просто: спершу «стираємо» хвіст, потім малюємо голову. <tt>X</tt> дорівнює довжині змійки, тож ми індексуємося до потрібного пікселя; встановлюємо <tt>A</tt> у нуль і записуємо значення в режимі індексованої непрямої адресації. Потім знову завантажуємо <tt>X</tt>, щоб індексувати голову, встановлюємо <tt>A</tt> в одиницю і записуємо у <tt>($10,x)</tt>. У <tt>$10</tt> зберігається двобайтна адреса голови, тому це малює білий піксель у поточному положенні голови. Оскільки рухаються лише голова й хвіст, цього достатньо, щоб змійка рухалася."
+ "Нові інструменти для аналізу коду, зокрема дизасемблер і швидкий переглядач пам’яті"
+ "Прапорець негативу: встановлюється, коли старший біт (біт 7) результату дорівнює 1. Використовується для порівняння знакових чисел і вказує, чи значення від’ємне в поданні двійкового доповнення."
+ "Майже в усіх іграх у центрі — ігровий цикл. Усі ігрові цикли мають одну форму: прийняти введення, оновити стан гри та відобразити стан. Цей цикл не виняток."
+ "Повідомлення"
+ "Комірки пам\'яті <tt>$01</tt> і <tt>$02</tt> містять значення <tt>$05</tt> і <tt>$07</tt> відповідно. Думайте про <tt>($00,X)</tt> як про <tt>($00 + X)</tt>. У цьому випадку <tt>X</tt> дорівнює <tt>$01</tt>, тому це спрощується до <tt>($01)</tt>. Звідси все відбувається як при стандартній непрямій адресації — шукаються два байти в <tt>$01</tt> і <tt>$02</tt> (<tt>$05</tt> і <tt>$07</tt>) для формування адреси <tt>$0705</tt>. Це адреса, в яку регістр <tt>Y</tt> був збережений у попередній інструкції, тому регістр <tt>A</tt> отримує те саме значення, що й <tt>Y</tt>, хоча й більш обхідним шляхом. Ви не часто побачите це."
+ "Карта пам\'яті"
+ "Виправлено багато дрібних помилок для підвищення загальної зручності використання"
+ "Суттєві поліпшення інтерфейсу: сучасна плаваюча кнопка дії з динамічними станами для інтуїтивного керування програмою та повністю перероблений віджет налагоджувача на сучасних компонентах Adwaita."
+ "Line Buster 6502"
+ "Світлий стиль"
+ "Навчання на прикладах ще ніколи не було таким простим. Занурюйтесь у робочий код, змінюйте його, ламайте, виправляйте знову — саме так навчалися найкращі програмісти колись!"
+ "Навчіться використовувати стек за допомогою інструкцій PHA та PLA"
+ "Навчіться програмувати мікропроцесор 6502."
+ "Дізнавайтеся про історію комп\'ютерів під час написання коду"
+ "Learn 6502 тепер працює також на Windows і macOS. Якщо ви хотіли порадити його другові, який не користується Linux, тепер це можливо."
+ "Learn 6502 тепер працює на GNOME 50! Дякуємо Sabri Ünal за внесок в оновлення середовища виконання."
+ "Вивчення асемблера 6502"
+ "Навчання"
+ "Помилка обробки міток"
+ "Мітку вже визначено в рядку %1$d: %2$s"
+ "Мітка %1$s вже використовується як символ; перейменуйте одну з них"
+ "Переходи схожі на розгалуження з двома головними відмінностями. По‑перше, переходи не є умовними, а по‑друге, вони приймають двобайтову абсолютну адресу. Для невеликих програм це не дуже важливо, адже здебільшого використовуються мітки, і асемблер визначає правильну адресу за міткою. Для більших програм переходи — єдиний спосіб перейти від однієї частини коду до іншої."
+ "Переходи"
+ "JSR/RTS"
+ "JMP"
+ "Вступ"
+ "Прапорець переривань: коли встановлений, маскує (вимикає) всі масковані переривання (IRQ). Можливі лише немасковані переривання (NMI). Використовується для критичних ділянок коду, які не можна переривати."
+ "Шрифт інтерфейсу"
+ "Інтерактивні посібники ведуть вас від початківця до просунутого рівня"
+ "Інтерактивний посібник"
+ "Інструкції в асемблері — це невеликий набір наперед визначених операцій. Кожна інструкція має нуль або один аргумент. Нижче — анотований код, що показує кілька різних інструкцій:"
+ "Інструкції"
+ "Ініціалізація"
+ "Непряма: <tt>($c000)</tt>"
+ "Непряма індексована: <tt>($c0),Y</tt>"
+ "Непряма індексована схожа на індексовану непряму, але простіша: замість додавання регістра <tt>X</tt> до адреси <i>перед</i> розіменуванням спочатку розіменовується адреса нульової сторінки, а потім до отриманої адреси додається регістр <tt>Y</tt>."
+ "Непряма адресація використовує абсолютну адресу, щоб знайти іншу адресу. Перший байт задає молодший байт адреси, наступний — старший. Це може бути не інтуїтивно, тож ось приклад:"
+ "Індексація міток..."
+ "Індексована непряма: <tt>($c0,X)</tt>"
+ "Індексний регістр Y: Використовується для адресації"
+ "Індексний регістр X: Використовується для адресації"
+ "У цьому короткому посібнику я покажу, як почати писати код мовою асемблера 6502. Процесор 6502 був дуже популярний у 70–80‑х роках, працюючи у відомих комп’ютерах, як‑от <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://uk.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://uk.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://uk.wikipedia.org/wiki/Apple_II\">Apple II</a> і <a href=\"https://uk.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. У Футурамі Бендер <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">має процесор 6502 як мозок</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Навіть Термінатора програмували на 6502</a>."
+ "У цьому прикладі <tt>$f0</tt> містить значення <tt>$01</tt>, а <tt>$f1</tt> — <tt>$cc</tt>. Інструкція <tt>JMP ($f0)</tt> змушує процесор зчитати два байти за адресами <tt>$f0</tt> і <tt>$f1</tt> (<tt>$01</tt> і <tt>$cc</tt>) і скласти з них адресу <tt>$cc01</tt>, яка стає новим лічильником команд. Зберіть і покроково виконайте програму вище, щоб побачити, що відбувається. Більше про <tt>JMP</tt> — у розділі <a href=\"#jumping\">Переходи</a>."
+ "У цьому випадку <tt>($01)</tt> зчитує два байти за адресами <tt>$01</tt> і <tt>$02</tt>: <tt>$03</tt> і <tt>$07</tt>. Вони утворюють адресу <tt>$0703</tt>. До цієї адреси додається значення регістра <tt>Y</tt>, утворюючи кінцеву адресу <tt>$0704</tt>."
+ "У цьому асемблері можна визначати описові константи (або символи), що представляють числа. Потім решта коду може використовувати ці константи замість літералів, що одразу робить зміст очевиднішим. У назвах можна використовувати літери, цифри та підкреслення."
+ "У редакторі <b>наберіть</b> (не вставляйте) такий код:"
+ "В асемблері зазвичай використовують мітки з інструкціями розгалуження. Під час збирання мітка перетворюється на однобайтне відносне зміщення (кількість байтів назад або вперед від наступної інструкції), тож розгалуження можуть рухатися приблизно в межах 256 байтів. Це означає, що вони підходять лише для локальних переходів. Для дальших переходів потрібні інструкції переходу."
+ "Покращено продуктивність ігрової консолі для плавнішого геймплею"
+ "Покращено ігровий екран і керування для мобільних пристроїв"
+ "Покращено описи, щоб бути привітнішими для нетехнічних користувачів"
+ "Неявна"
+ "Immediate: <tt>#$c0</tt>"
+ "Безпосередня адресація не працює напряму з адресами пам’яті — у цьому режимі використовуються реальні значення. Наприклад, <tt>LDX #$01</tt> завантажує значення <tt>$01</tt> у регістр <tt>X</tt>. Це відрізняється від інструкції нульової сторінки <tt>LDX $01</tt>, яка завантажує значення з комірки <tt>$01</tt> у регістр <tt>X</tt>."
+ "Якщо мова системи — китайська, застосунок знову показується китайською. Раніше він помилково повертався до англійської."
+ "Якщо ваш приклад базується на іншому прикладі або натхненний ним, ви можете вказати URL джерела."
+ "Якщо ви володієте однією з указаних мов, допоможіть, будь ласка, переглянути або покращити переклади. Ви можете зробити внесок через посилання в застосунку, на нашій платформі перекладу або створивши issue."
+ "Якщо результат додавання перевищує один байт, адреса «обгортається» по колу. Наприклад:"
+ "IDE"
+ "Я не заглиблюватимуся в деталі роботи кожного напряму, але наведене вище пояснення має бути достатнім, щоб розібратися з невеликою практикою."
+ "Прихований"
+ "Hexdump згенеровано."
+ "Hexdump"
+ "Hex-монітор"
+ "Ось приклад. Зверніть увагу, що безпосередні операнди все ще мають префікс <tt>#</tt>."
+ "Допомога"
+ "Іврит — це також наша перша мова з письмом справа наліво: завдяки тестуванню та внескам Menachem застосунок тепер підтримує розташування справа наліво й готовий до нових мов RTL."
+ "Зелений"
+ "Чудовий початок — ви завершили перший розділ!"
+ "Є власна класна розробка на 6502? Поділіться нею зі спільнотою! Тепер ви можете надсилати свої приклади коду безпосередньо з додатку. Просто натисніть кнопку «Поділитися», і ми автоматично створимо для вас issue та pull request на GitHub."
+ "Є класний приклад 6502?\nПоділіться ним зі спільнотою!"
+ "Перехід між смугами складніший, бо треба враховувати і старший байт. Наприклад, перехід донизу з <tt>$02e1</tt> має привести до <tt>$0301</tt>. На щастя, це легко реалізувати: додавання <tt>$20</tt> до <tt>$e1</tt> дає <tt>$01</tt> і встановлює біт перенесення. Якщо біт перенесення встановлено, треба також інкрементувати старший байт."
+ "Німецьку та іспанську перевірили учасники проєкту. Інші мови — це чернетки з підтримкою ШІ, яким потрібна перевірка людьми."
+ "Ігри тепер автоматично призупиняються при перемиканні між екранами"
+ "Натиснута клавіша геймпада:"
+ "GNOME"
+ "GNOME"
+ "Повністю прокоментована версія гри «Змійка»"
+ "Вся пам\'ять ($0000-$FFFF)"
+ "Знайдено %1$d міток."
+ "Знайдено %1$d мітку."
+ "Для Linux тепер є й AppImage: один файл, без встановлення, стане в пригоді на дистрибутиві, для якого ми не збираємо пакунок."
+ "Шрифт"
+ "Дотримуватися системного стилю"
+ "Виправлено помилку збірки на PostmarketOS, покращуючи сумісність з мобільними пристроями"
+ "Виправлено проблему, через яку кнопка «Назад» у розділі навчання була завжди видимою в режимі робочого столу та планшета, навіть коли жодна підсторінка не була відкрита."
+ "Спершу <tt>readkeys</tt> перевіряє, чи натиснуто одну з клавіш напрямку (W, A, S, D), і якщо так — встановлює напрямок змійки відповідно. Далі <tt>checkCollision</tt> перевіряє зіткнення змійки з собою або яблуком. <tt>updateSnake</tt> оновлює внутрішнє представлення змійки залежно від її напрямку. Потім малюються яблуко й змійка. Нарешті, <tt>spinWheels</tt> завантажує процесор «марною» роботою, щоб гра не працювала надто швидко — уявіть це як команду sleep. Гра триває, доки змійка не вріжеться в стіну або в себе."
+ "Спершу завантажуємо значення <tt>$08</tt> у регістр <tt>X</tt>. Наступний рядок — мітка. Мітки лише позначають місця в програмі, щоб можна було до них повернутися. Після мітки зменшуємо <tt>X</tt>, записуємо його в <tt>$0200</tt> (верхній лівий піксель), а потім порівнюємо зі значенням <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> порівнює значення в регістрі <tt>X</tt> з іншим значенням. Якщо вони рівні, прапорець <tt>Z</tt> стає <tt>1</tt>, інакше — <tt>0</tt>."
+ "Перший рядок: <tt>$0200</tt>-<tt>$021F</tt>, другий рядок: <tt>$0220</tt>-<tt>$023F</tt> і т.д."
+ "Перший випуск «Вивчення асемблера 6502» для GNOME"
+ "Нарешті, байт <tt>$03</tt> містить поточну довжину змійки у байтах пам’яті (тобто довжина 4 означає 2 пікселі)."
+ "Заповніть інформацію про ваш приклад 6502, щоб поділитися ним зі спільнотою"
+ "Файл \"%1$s\" має незбережені зміни"
+ "Не вдалося скопіювати в буфер обміну"
+ "Вправи"
+ "Вправа"
+ "Виконувати інструкції по одній замість безперервного виконання"
+ "Приклади"
+ "Приклад надіслано на перевірку"
+ "Хоча це буде спрощена версія, код буде значно більший за попередні приклади. Потрібно відстежувати кілька комірок пам’яті для різних аспектів гри. Ми могли б і надалі виконувати потрібний облік вручну по всій програмі, як раніше, але в більшому масштабі це швидко стає виснажливим і веде до важковиявних помилок. Тож доручимо частину рутинної роботи асемблеру."
+ "Парне чи непарне"
+ "Озброєні цими знаннями, ви маєте побачити, що інструкція <tt>LDA #$01</tt> завантажує шістнадцяткове значення <tt>$01</tt> у регістр <tt>A</tt>. Докладніше про регістри — у наступному розділі."
+ "Покращено введення діапазону адрес hex-монітора для легшого редагування значень"
+ "Покращено представлення застосунку та доступність"
+ "Увімкнути покроковий режим"
+ "Увімкнути налагоджувач"
+ "Кожен розділ (<tt>upKey</tt>, <tt>rightKey</tt> тощо) спочатку перевіряє, чи не є поточний напрямок протилежним новому. Для цього потрібен ще один невеликий відступ."
+ "Готово"
+ "Організація дисплея"
+ "Пам\'ять дисплея ($0200-$05FF)"
+ "Відкрийте для себе захоплюючий світ програмування класичних комп\'ютерів і ігрових консолей! Вивчайте мову асемблера 6502 — той самий код, що живив легендарні системи, такі як NES, Commodore 64 і Apple II."
+ "Відкинути"
+ "Дизасемблювання згенеровано."
+ "Дизасембльовано"
+ "Вимкніть для покращення продуктивності"
+ "Dino Run"
+ "Опис"
+ "Прапорець Decimal: Вмикає режим двійково-десяткового коду (BCD) для арифметичних операцій. Коли встановлений, інструкції ADC/SBC обробляють значення як десяткові цифри (0-9) замість двійкових. Використовується для фінансових обчислень і десяткової арифметики."
+ "Налагоджувач тепер оновлюється лише коли видимий, зменшуючи зайву обробку"
+ "Налагоджувач"
+ "Налагоджуйте свої програми за допомогою інструментів інспекції в реальному часі"
+ "Налаштування налагодження"
+ "Налагодження"
+ "Темний стиль"
+ "Створення гри"
+ "Копіювати в редактор"
+ "Копіювати в буфер обміну"
+ "Скопійовано в буфер обміну"
+ "Продовжити"
+ "Підтвердити"
+ "Поширені інструкції"
+ "Гра «Змійка» з коментарями"
+ "Колірна палітра"
+ "Редактор коду та віртуальна ігрова консоль"
+ "Код скопійовано в редактор"
+ "Код успішно зібрано, %1$d байт."
+ "Код"
+ "Змініть один із пікселів, щоб намалювати в нижньому правому куті (комірка пам\'яті <tt>$05ff</tt>)."
+ "Прапорець перенесення: Встановлюється, коли додавання спричиняє перенесення; скидається, коли віднімання потребує позики. Використовується для багатобайтової арифметики та зсувів/обертів (BCS/BCC)."
+ "Скасувати"
+ "Надсилаючи, ви погоджуєтеся, що ваш приклад буде ліцензовано під <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Розбивайте блоки ракеткою та м’ячем."
+ "Прапорець Break: Встановлюється при виконанні інструкції BRK (Break). Використовується для розрізнення програмних переривань (BRK) і апаратних переривань. Допомагає ідентифікувати джерело переривання в підпрограмах обробки переривань."
+ "Розгалуження"
+ "Синій"
+ "Оскільки стан гри зберігається як розташування пікселів, візуалізація дуже проста. Перша підпрограма, <tt>drawApple</tt>, надзвичайно проста: встановлює <tt>Y</tt> у нуль, завантажує випадковий колір в акумулятор і зберігає це значення в <tt>($00),y</tt>. У <tt>$00</tt> зберігається розташування яблука, тож <tt>($00),y</tt> розіменовується в цю адресу пам’яті. Докладніше див. розділ «Indirect indexed» у <a href=\"#addressing\">Режимах адресації</a>."
+ "Назад"
+ "Автор"
+ "На низькому рівні ця підпрограма трохи складніша. Спочатку довжина завантажується в регістр <tt>X</tt>, після чого зменшується. Фрагмент нижче показує початковий вміст пам’яті для змійки."
+ "Файли асемблера"
+ "Асемблер"
+ "Збираємо код..."
+ "Успішно зібрано"
+ "Зберіть наведений нижче код, потім відкрийте вкладку <b>Налагодження</b> і подивіться на <b>Hexdump</b>, щоб побачити зібраний код."
+ "Зберіть код, потім відкрийте вкладку <b>Налагодження</b> і покроково пройдіть код, спостерігаючи за регістрами <tt>A</tt> і <tt>X</tt>. На рядку <tt>ADC #$c4</tt> відбувається дещо дивне: можна очікувати, що додавання <tt>$c4</tt> до <tt>$c0</tt> дасть <tt>$184</tt>, але цей процесор повертає результат <tt>$84</tt>. Чому так?"
+ "Зберіть код і скористайтеся кнопкою <b>Крок</b>, щоб пройти ці три інструкції крок за кроком. <b>Hex-монітор</b> у вкладці налагодження показує ділянку пам’яті й допомагає візуалізувати виконання програм. <tt>STA $01</tt> зберігає значення регістра <tt>A</tt> у комірці пам’яті <tt>$01</tt>, а <tt>ADC $01</tt> додає значення з комірки <tt>$01</tt> до регістра <tt>A</tt>. <tt>$80 + $80</tt> мало б дорівнювати <tt>$100</tt>, але оскільки це більше за байт, регістр <tt>A</tt> встановлюється в <tt>$00</tt>, а прапорець перенесення встановлюється. Крім того, встановлюється нульовий прапорець. Нульовий прапорець встановлюють усі інструкції, результат яких дорівнює нулю."
+ "Збірка не вдалася"
+ "Зібрати"
+ "Як зазначалося раніше, чотири напрямки представлені внутрішньо числами 1, 2, 4 і 8. Кожне з цих чисел є степенем 2, тому вони представлені двійковим числом з однією <tt>1</tt>:"
+ "Поки ви рухаєтеся в межах однієї з цих горизонтальних смуг, все просто. Наприклад, щоб рухатися вправо, просто збільште молодший байт (наприклад, <tt>$0200</tt> стає <tt>$0201</tt>). Щоб рухатися вниз, додайте <tt>$20</tt> (наприклад, <tt>$0200</tt> стає <tt>$0220</tt>). Вліво та вгору — навпаки."
+ "Як завжди, цей випуск містить багато дрібних виправлень і вдосконалень."
+ "Поліпшення архітектури забезпечують кращий обмін кодом між платформами GNOME, Web та Android."
+ "Налаштування вигляду"
+ "Вигляд"
+ "Будь-які числа з префіксом <tt>$</tt> у мові асемблера 6502 (і, відповідно, у цьому посібнику) мають шістнадцятковий (hex) формат. Якщо ви не знайомі з шістнадцятковими числами, рекомендую прочитати <a href=\"https://uk.wikipedia.org/wiki/%%D0%1$A8%%D1%%96%%D1%%81%%D1%%82%%D0%%BD%%D0%%B0%%D0%%B4%%D1%%86%%D1%2$8F%%D1%%82%%D0%%BA%%D0%%BE%%D0%%B2%%D0%%B0_%%D1%%81%%D0%%B8%%D1%%81%%D1%%82%%D0%%B5%%D0%%BC%%D0%%B0_%%D1%%87%%D0%%B8%%D1%%81%%D0%%BB%%D0%%B5%%D0%%BD%%D0%%BD%%D1%3$8F\">статтю Вікіпедії</a>. Все, що має префікс <tt>#</tt>, є літеральним числовим значенням. Будь-яке інше число вказує на комірку пам\'яті."
+ "Важливо зауважити відмінність між <tt>ADC #$01</tt> і <tt>ADC $01</tt>. Перша додає значення <tt>$01</tt> до регістра <tt>A</tt>, але друга додає значення, збережене в комірці пам\'яті <tt>$01</tt>, до регістра <tt>A</tt>."
+ "Також корисні: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Майже готово!"
+ "Усі інструкції, що підтримують абсолютну адресацію (за винятком інструкцій переходу), також можуть приймати однобайтову адресу. Цей тип адресації називається \"нульова сторінка\" — доступна лише перша сторінка (перші 256 байтів) пам\'яті. Це швидше, оскільки потрібно знайти лише один байт, і займає менше місця в зібраному коді."
+ "Усі файли"
+ "Після цього значення <tt>2</tt> додається до акумулятора, щоб створити остаточне випадкове число в діапазоні 2–5."
+ "Після початкового блоку коментарів (рядки, що починаються з крапки з комою), перші два рядки є:"
+ "Після виявлення зіткнення ми оновлюємо розташування змійки. На високому рівні це виглядає так: Спочатку переміщуємо кожну пару байтів тіла на одну позицію вгору в пам\'яті. По-друге, оновлюємо голову відповідно до поточного напрямку. Нарешті, якщо голова виходить за межі, обробляємо це як зіткнення. Я проілюструю це за допомогою ASCII-графіки. Кожна пара дужок містить координату x,y, а не пару байтів для простоти."
+ "Після руху в кожному напрямку нам також потрібно перевірити, чи голова не вийде за межі. Це обробляється по-різному для кожного напрямку. Для лівого та правого напрямків ми можемо перевірити, чи голова фактично \"переходить по колу\". Рух вправо з <tt>$021f</tt> шляхом інкременту молодшого байта призведе до <tt>$0220</tt>, але насправді це перехід з останнього пікселя першого рядка до першого пікселя другого рядка. Тому щоразу, коли ми рухаємося вправо, нам потрібно перевіряти, чи новий молодший байт є кратним <tt>$20</tt>. Це робиться за допомогою перевірки бітів на маску <tt>$1f</tt>. Сподіваюся, ілюстрація нижче покаже вам, як маскування найнижчих 5 бітів показує, чи число є кратним <tt>$20</tt>, чи ні."
+ "Adwaita"
+ "Режими адресації"
+ "Режими адресації"
+ "Адреса %1$s — невідомий опкод"
+ "Також доступні додаткові кнопки введення: кнопка A (клавіша Enter/Return, код ASCII <tt>$0D</tt>) та кнопка B (клавіша пробілу, код ASCII <tt>$20</tt>). Їх можна використовувати для додаткової взаємодії у ваших іграх. Для керування напрямком можна взаємозамінно використовувати як клавіші WASD, так і стрілки."
+ "Додано функцію допомоги, щоб полегшити редагування коду для початківців"
+ "Додано керування файлами для збереження та завантаження ваших програм"
+ "Додайте більше інструкцій для малювання додаткових пікселів."
+ "Акумулятор: Основний регістр для обчислень"
+ "Акцент: Жовтий"
+ "Акцент: Бірюзовий"
+ "Акцент: Сланцевий"
+ "Акцент: Червоний"
+ "Акцент: Фіолетовий"
+ "Акцент: Рожевий"
+ "Акцент: Помаранчевий"
+ "Акцент: Зелений"
+ "Акцент: Синій"
+ "Акцентний колір"
+ "Absolute: <tt>$c000</tt>"
+ "Absolute,X і absolute,Y: <tt>$c000,X</tt> і <tt>$c000,Y</tt>"
+ "Про «Вивчення асемблера 6502»"
+ "Повний список набору інструкцій 6502 <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">доступний тут</a> та <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">тут</a> (зазвичай я звертаюся до обох сторінок, оскільки вони мають свої сильні та слабкі сторони). Ці сторінки детально описують аргументи до кожної інструкції, які регістри вони використовують і які прапорці встановлюють. Вони — ваша біблія."
+ "У вашому браузері відкрито issue на GitHub. Перегляньте та надішліть його там, щоб завершити свій внесок. Після схвалення ваш приклад буде включено в наступний реліз.\n\nЯкщо ваш приклад занадто великий, весь вміст буде скопійовано в буфер обміну для ручного вставлення в issue на GitHub."
+ "<tt>init</tt> і <tt>loop</tt> — обидві підпрограми. <tt>init</tt> ініціалізує стан гри, а <tt>loop</tt> — це основний ігровий цикл."
+ "<tt>checkSnakeCollision</tt> проходить через сегменти тіла змійки, перевіряючи кожну пару байтів з парою голови. Якщо є збіг, то гра закінчена."
+ "<tt>a9</tt> і <tt>c9</tt> — це опкоди процесора для <tt>LDA</tt> і <tt>CMP</tt> з безпосередньою адресацією відповідно. <tt>01</tt> і <tt>02</tt> — це аргументи цих інструкцій. <tt>d0</tt> — це опкод для <tt>BNE</tt>, а його аргумент — <tt>02</tt>. Це означає \"пропустити наступні два байти\" (<tt>85 22</tt>, зібрана версія <tt>STA $22</tt>). Спробуйте відредагувати код так, щоб <tt>STA</tt> приймала двобайтову абсолютну адресу замість однобайтової адреси нульової сторінки (наприклад, змініть <tt>STA $22</tt> на <tt>STA $2222</tt>). Зберіть код заново та подивіться на hexdump знову — аргумент для <tt>BNE</tt> тепер має бути <tt>03</tt>, оскільки інструкція, яку процесор пропускає, тепер має три байти."
+ "<tt>X</tt> зберігає колір пікселя, а <tt>Y</tt> зберігає позицію поточного пікселя. Перший цикл малює поточний колір як піксель (через регістр <tt>A</tt>), поміщає колір у стек, потім збільшує колір і позицію. Другий цикл виймає зі стека, малює витягнутий колір як піксель, потім збільшує позицію. Як і очікується, це створює дзеркальний візерунок."
+ "<tt>SP</tt> — це вказівник стека. Я поки не буду заглиблюватися у стек, але в основному цей регістр зменшується щоразу, коли байт поміщається в стек, і збільшується, коли байт виймається зі стека."
+ "<tt>PC</tt> — це лічильник команд; він показує процесору, на якій точці програми він зараз знаходиться. Це як номер поточного рядка виконуваного скрипту. У симуляторі код збирається починаючи з комірки пам\'яті <tt>$0600</tt>, тому <tt>PC</tt> завжди починається звідти."
+ "<tt>JSR</tt> і <tt>RTS</tt> (\"перехід до підпрограми\" та \"повернення з підпрограми\") — це динамічний дует, який зазвичай використовується разом. <tt>JSR</tt> використовується для переходу з поточного місця до іншої частини коду. <tt>RTS</tt> повертається до попередньої позиції. По суті це як виклик функції та повернення з неї."
+ "<tt>JMP</tt> — це безумовний перехід. Ось дуже простий приклад, щоб побачити його в дії:"
+ "<tt>BCC</tt> і <tt>BCS</tt> (\"розгалуження при скинутому перенесенні\" та \"розгалуження при встановленому перенесенні\") використовуються для розгалуження на основі прапорця перенесення. Напишіть програму, яка використовує одну з цих двох інструкцій."
+ "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (перші 256 байтів, швидший доступ)"
+ "<b>Zero Page</b> (<tt>$c0</tt>): Доступ до комірок пам\'яті <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): Додати регістр X/Y до адреси нульової сторінки"
+ "<b>Z</b> (Zero): Встановлюється, коли результат дорівнює нулю"
+ "<b>X, Y</b>: Індексні регістри для адресації та підрахунку"
+ "<b>W</b> або стрілка вгору (<tt>$77</tt>)"
+ "<b>V</b> (Overflow): Встановлюється, коли арифметична операція спричиняє переповнення зі знаком"
+ "<b>Стек</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Зберегти регістри в пам\'ять"
+ "<b>SP</b> (Stack Pointer): Вказує на поточну позицію стека (починається з <tt>$FF</tt>)"
+ "<b>SBC потребує встановленого перенесення</b>: Встановіть <tt>C</tt> перед відніманням (працює як інверсна позика). Скинутий <tt>C</tt> після SBC означає, що відбулася позика."
+ "<b>S</b> або стрілка вниз (<tt>$73</tt>)"
+ "<b>Relative</b> (<tt>label</tt>): Розгалуження використовує 8-бітне зміщення зі знаком від наступної інструкції (−128…+127)"
+ "<b>Q</b> або Enter/Return (<tt>$0D</tt>)"
+ "<b>Збереження програми</b>: Починаючи з <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Покласти/взяти акумулятор у/зі стеку"
+ "<b>PC</b> (Program Counter): Вказує на наступну інструкцію для виконання"
+ "<b>N</b> (Negative): Встановлюється, коли біт 7 результату встановлений"
+ "<b>LDA/LDX/LDY</b>: Завантажити регістри"
+ "<b>JSR/RTS</b>: Перехід до підпрограми / Повернення з підпрограми"
+ "<b>JMP</b>: Безумовний перехід"
+ "<b>Indirect</b> (<tt>($c000)</tt>): Знайти адресу, збережену у вказаній комірці"
+ "<b>Indirect Indexed</b> (<tt>($c0),Y</tt>): Використати адресу нульової сторінки як вказівник для отримання базової адреси, потім додати Y до цієї бази"
+ "<b>Indexed Indirect</b> (<tt>($c0,X)</tt>): Додати X до адреси нульової сторінки, потім використати результат як вказівник для отримання цільової адреси"
+ "<b>Immediate</b> (<tt>#$c0</tt>): Використовувати фактичне значення"
+ "<b>INX/INY/DEX/DEY</b>: Інкремент/декремент регістрів"
+ "<b>I</b> (Interrupt): Встановлюється, коли переривання вимкнені"
+ "<b>E</b> або пробіл (<tt>$20</tt>)"
+ "<b>Пам\'ять дисплея</b>: <tt>$0200</tt>-<tt>$05FF</tt> (використовується для виведення на екран)"
+ "<b>Керування напрямком</b>:"
+ "<b>D</b> або стрілка вправо (<tt>$64</tt>)"
+ "<b>D</b> (Decimal): Встановлюється, коли процесор у режимі BCD (двійково-десятковий код)"
+ "<b>Операції порівняння</b>: <tt>CMP/CPX/CPY</tt> встановлюють <tt>N/Z/C</tt> як при відніманні (регістр − пам\'ять), але без збереження результату."
+ "<b>C</b> (Carry): Встановлюється при переповненні байта в арифметичних операціях"
+ "<b>BEQ/BNE/BCC/BCS</b>: Розгалуження, якщо дорівнює/не дорівнює/перенесення скинуте/перенесення встановлене"
+ "<b>B</b> (Break): Встановлюється при виконанні інструкції BRK"
+ "<b>Кнопки дій</b>:"
+ "<b>Absolute</b> (<tt>$c000</tt>): Доступ до будь-якої комірки пам\'яті"
+ "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Додати регістр X/Y до абсолютної адреси"
+ "<b>ADC/SBC</b>: Додавання/віднімання з перенесенням"
+ "<b>A</b> або стрілка вліво (<tt>$61</tt>)"
+ "<b>A</b> (Акумулятор): Основний регістр для обчислень і маніпуляцій з даними"
+ "<b><tt>$f</tt></b>: Світло-сірий (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Світло-синій (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Світло-зелений (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Сірий (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Темно-сірий (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Світло-червоний (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Остання натиснута клавіша (код ASCII)"
+ "<b><tt>$FE</tt></b>: Генератор випадкових чисел (читається як випадкове значення 0-255)"
+ "<b><tt>$9</tt></b>: Коричневий (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Помаранчевий (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Жовтий (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Синій (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Зелений (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Фіолетовий (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Бірюзовий (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Червоний (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Білий (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Дані про позицію змійки (голова, сегменти тіла, хвіст)"
+ "<b><tt>$0</tt></b>: Чорний (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Довжина змійки"
+ "<b><tt>$02</tt></b>: Напрямок змійки (1=вгору, 2=вправо, 4=вниз, 8=вліво)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Позиція яблука"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> створив <a href=\"https://gist.github.com/wkjagt/9043907\">повністю анотований gist цього вихідного коду</a>, тож перегляньте його для детальної інформації."
+ "Мова асемблера 6502 має багато інструкцій розгалуження, усі вони виконуються залежно від того, чи встановлені певні прапорці. У цьому прикладі ми розглянемо <tt>BNE</tt>: \"Розгалуження, якщо не дорівнює\" (Branch on not equal)."
+ "Стек 6502 заповнений! Перехід по колу..."
+ "Стек 6502 спорожнів! Перехід по колу..."
+ "(Насправді, мені достовірно повідомили, що процесори 6502 досі випускаються компанією <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> і <a href=\"https://www.mouser.co.uk/c/?q=65C02\">продаються любителям</a>, тож очевидно, що 6502 <i>не є</i> мертвою мовою! Хто б міг подумати?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-vi/strings.xml b/packages/app-android/data/Android/src/main/res/values-vi/strings.xml
new file mode 100644
index 00000000..f7927d01
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-vi/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "Học Hợp Ngữ 6502"
+ "Học Hợp Ngữ 6502"
+ "Học Hợp Ngữ 6502"
+ "வணக்கம்! Chúng tôi vui mừng chào đón bản dịch tiếng Tamil, được đóng góp bởi தமிழ்நேரம். நன்றி!"
+ "đại diện cho các vị trí bộ nhớ được đánh địa chỉ gián tiếp <tt>$0411</tt>, <tt>$0410</tt> và <tt>$040f</tt> (ba pixel ở giữa màn hình). Tôi đang nghiên cứu vấn đề này, nhưng điều quan trọng là phải hiểu rõ cách thức hoạt động của địa chỉ gián tiếp."
+ "wdm-output"
+ "lập trình"
+ "học"
+ "bởi %1$s"
+ "_Tùy Chọn"
+ "Trang không: <tt>$c0</tt>"
+ "Trang không,Y: <tt>$c0,Y</tt>"
+ "Trang không,X: <tt>$c0,X</tt>"
+ "Sử dụng Trang Không"
+ "Trang Không ($0000-$00FF)"
+ "Cờ 0: Đặt khi kết quả của thao tác bằng 0. Cần thiết cho việc phân nhánh có điều kiện - hầu hết các lệnh nhảy có điều kiện (BEQ, BNE) đều kiểm tra cờ này để xác định luồng chương trình dựa trên việc giá trị có bằng 0 hay không."
+ "Tệp của bạn có những thay đổi chưa được lưu. Các thay đổi sẽ bị mất nếu bạn không lưu chúng."
+ "Bạn đã xem <tt>TAX</tt>. Bạn có thể đoán <tt>TAY</tt>, <tt>TXA</tt> và <tt>TYA</tt> làm gì, nhưng hãy viết một số mã để kiểm tra giả định của bạn."
+ "Bạn đã ủng hộ dự án mã nguồn mở này bằng cách mua ứng dụng. Cảm ơn bạn!"
+ "Bạn có thể coi màn hình là bốn dải ngang 32 × 8 pixel. Các dải này ánh xạ tới <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> và <tt>$0500-$05ff</tt>. Các hàng pixel đầu tiên là <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, v.v."
+ "Vàng"
+ "Viết và chỉnh sửa code bằng trình chỉnh sửa code tích hợp"
+ "Với tất cả các ví dụ này, bạn có thể thấy hữu ích khi sử dụng <b>Hex Monitor</b> trong khung gỡ lỗi để theo dõi bộ nhớ thay đổi. Chọn một vùng bộ nhớ từ danh sách để xem phần đó — ví dụ, <b>Bộ Nhớ Hiển Thị ($0200–$05FF)</b> để theo dõi các pixel màn hình, hoặc <b>Trang Không ($0000–$00FF)</b> để kiểm tra 256 byte đầu tiên."
+ "Với địa chỉ tuyệt đối, vị trí bộ nhớ đầy đủ được sử dụng làm đối số cho lệnh. Ví dụ:"
+ "Chào mừng bản dịch tiếng Việt, được đóng góp hoàn toàn bởi Loc Huynh (hthienloc)."
+ "Chào mừng bản dịch tiếng Ba Lan, ban đầu được đóng góp bởi Micro Wave. Dziękujemy!"
+ "Chúng ta đã xem qua một chút phần trạng thái bộ xử lý (phần có <tt>A</tt>, <tt>PC</tt>, v.v.), nhưng tất cả những điều đó có nghĩa là gì?"
+ "Chúng tôi đã thêm phần Ví Dụ mới vào tab Tìm hiểu nơi bạn có thể khám phá và chạy các chương trình 6502 được nhận xét đầy đủ ngay trong ứng dụng. Hãy bắt đầu với ví dụ về trò chơi Rắn Săn Mồi nổi bật của chúng tôi và xem những pixel đó trở nên sống động như thế nào!"
+ "Giá trị <tt>$00</tt>-<tt>$0F</tt> đại diện cho 16 màu khác nhau (<tt>$00</tt>=đen, <tt>$01</tt>=trắng)"
+ "Sử dụng màu chính tùy chỉnh"
+ "Sử dụng màu nhấn tùy chỉnh"
+ "Cập nhật trạng thái trò chơi"
+ "Những thay đổi chưa được lưu"
+ "Không giống như trang không,Y, tuyệt đối,Y không thể được sử dụng với <tt>STX</tt> nhưng có thể được sử dụng với <tt>LDA</tt> và <tt>STA</tt>."
+ "Bên trong: đã cập nhật lên TypeScript 6, Vite 8 và các nâng cấp phụ thuộc khác để cải thiện hiệu suất và độ ổn định."
+ "Không thể di chuyển code ra ngoài bộ nhớ 64k"
+ "Không thể tìm/phân tích địa chỉ/nhãn đã cho"
+ "Hai trong số các lệnh ngăn xếp là <tt>PHA</tt> và <tt>PLA</tt>, \"bộ tích lũy đẩy\" và \"bộ tích lũy kéo\". Dưới đây là một ví dụ về hai hoạt động này."
+ "Hai chương trình ví dụ mới, và cả hai đều đến từ các bạn: Dino Run của Jacob, và Line Buster 6502 của edit12. Đây là những ví dụ đầu tiên được gửi bằng nút chia sẻ, và chúng tôi rất mong nhận thêm."
+ "Hướng dẫn <sub>của <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, được cấp phép theo CC BY 4.0</sub>"
+ "Hướng dẫn"
+ "Hãy thử viết các đoạn mã sử dụng từng chế độ địa chỉ của 6502. Hãy nhớ rằng, bạn có thể sử dụng <b>Hex Monitor</b> trong khung gỡ lỗi để xem một phần bộ nhớ."
+ "Hãy thử các chương trình ví dụ cho bộ vi xử lý 6502."
+ "Hãy thử các chương trình ví dụ"
+ "Hãy thử thay đổi màu của ba pixel."
+ "Bật/Tắt Thanh Bên"
+ "Để kiểm tra xem hướng là <tt>1</tt>, <tt>2</tt>, <tt>4</tt> hay <tt>8</tt>, mã liên tục dịch chuyển sang phải cho đến khi số nhớ được đặt. Một <tt>LSR</tt> có nghĩa là \"lên\", hai có nghĩa là \"phải\", v.v."
+ "Tiêu Đề"
+ "Bản phát hành này mang đến chủ đề sống động lấy cảm hứng từ thiết bị cầm tay với màu sắc có thể tùy chỉnh. Chúng tôi đã giới thiệu bố cục máy tính để bàn và máy tính bảng thích ứng giúp giữ mọi thứ trong tầm nhìn, hoàn hảo cho những buổi viết mã kéo dài khi học cách phát triển các trò chơi cổ điển trong tổ hợp. Xin chân thành cảm ơn cộng tác viên mới của chúng tôi @mmartinortiz về những ý tưởng bố cục máy tính tuyệt vời. Ngoài ra còn có một số cải tiến kỹ thuật thú vị, như độ nghiêm ngặt của TypeScript, lược đồ kiểu GtkSourceView tùy chỉnh và các điều khiển trình gỡ lỗi nâng cao để phát triển mượt mà hơn."
+ "Cái này hơi lạ. Nó giống như sự giao thoa giữa trang không, trang X và trang gián tiếp. Về cơ bản, bạn lấy địa chỉ trang số 0, thêm giá trị của thanh ghi <tt>X</tt> vào đó, sau đó sử dụng địa chỉ đó để tra cứu địa chỉ hai byte. Ví dụ:"
+ "Thao tác này sẽ tải giá trị <tt>$11</tt> vào vị trí bộ nhớ <tt>$10</tt>, giá trị <tt>$10</tt> vào <tt>$12</tt> và <tt>$0f</tt> vào <tt>$14</tt>. Sau đó, nó tải giá trị <tt>$04</tt> vào <tt>$11</tt>, <tt>$13</tt> và <tt>$15</tt>. Điều này dẫn đến bộ nhớ như thế này:"
+ "Đây là nơi việc giải quyết trở nên thú vị. Trong chế độ này, địa chỉ trang không được cung cấp và sau đó giá trị của thanh ghi <tt>X</tt> được thêm vào. Đây là một ví dụ:"
+ "Điều này tương đương với trang không,X, nhưng chỉ có thể được sử dụng với <tt>LDX</tt> và <tt>STX</tt>."
+ "Đây là các phiên bản địa chỉ tuyệt đối của trang không, X và trang không, Y. Ví dụ:"
+ "Ngoài ra còn có một lý do rất thực tế: phát triển trò chơi cổ điển. Bối cảnh homebrew vẫn tồn tại và phát triển—các trò chơi mới vẫn <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">được phát hành cho NES</a> (một số trò chơi thậm chí còn ở dạng hộp vật lý) và cho nhiều hệ thống cổ điển khác; NES chỉ là một ví dụ. Ngay cả khi mục tiêu của bạn giống như SNES, thì việc bắt đầu với 6502 sẽ mang lại hiệu quả: CPU SNES (65C816) tương thích ngược với 6502, do đó, những kiến thức cơ bản mà bạn tìm hiểu ở đây—các thanh ghi, chế độ đánh địa chỉ và tập lệnh cốt lõi—sẽ được áp dụng ngay."
+ "Vậy tại sao lại là 6502? Tại sao không phải là một ngôn ngữ hợp ngữ <i>hữu ích</i>, như <a href=\"https://vi.wikipedia.org/wiki/X86\">x86</a>? Chà, tôi không nghĩ việc học x86 là hữu ích. Tôi không nghĩ bạn sẽ phải <i>viết</i> ngôn ngữ hợp ngữ trong công việc hàng ngày của mình - đối với một số người, đây là một bài tập học thuật, một thứ giúp mở rộng trí óc và suy nghĩ của bạn. 6502 ban đầu được viết ở một thời đại khác, thời điểm mà phần lớn các nhà phát triển đang viết hợp ngữ một cách trực tiếp, thay vì bằng các ngôn ngữ lập trình cấp cao mới mẻ này. Vì vậy, nó được thiết kế để được viết bởi con người. Các ngôn ngữ hợp ngữ hiện đại hơn được viết bởi các trình biên dịch, vì vậy hãy để việc đó cho chúng. Ngoài ra, 6502 còn <i>thú vị</i>. Chưa có ai gọi x86 là <i>vui</i>."
+ "Trang không của bộ nhớ được sử dụng để lưu trữ một số biến trạng thái trò chơi, như được ghi chú trong khối nhận xét ở đầu trò chơi. Mọi thứ trong <tt>$00</tt>, <tt>$01</tt> và <tt>$10</tt> trở lên là một cặp byte biểu thị vị trí bộ nhớ hai byte sẽ được tra cứu bằng cách sử dụng địa chỉ gián tiếp. Tất cả các vị trí bộ nhớ này sẽ nằm trong khoảng từ <tt>$0200</tt> đến <tt>$05ff</tt> - phần bộ nhớ tương ứng với bảng điều khiển trò chơi. Ví dụ: nếu <tt>$00</tt> và <tt>$01</tt> chứa các giá trị <tt>$01</tt> và <tt>$02</tt>, thì chúng sẽ đề cập đến pixel thứ hai của màn hình ( <tt>$0201</tt> - hãy nhớ, byte ít quan trọng nhất sẽ xuất hiện trước trong cách đánh địa chỉ gián tiếp)."
+ "Ngăn xếp trong bộ xử lý 6502 cũng giống như bất kỳ ngăn xếp nào khác - các giá trị được đẩy lên nó và bật ra (\"kéo\" theo cách nói của 6502). Độ sâu hiện tại của ngăn xếp được đo bằng con trỏ ngăn xếp, một thanh ghi đặc biệt. Ngăn xếp tồn tại trong bộ nhớ giữa <tt>$0100</tt> và <tt>$01ff</tt>. Con trỏ ngăn xếp ban đầu là <tt>$ff</tt>, trỏ đến vị trí bộ nhớ <tt>$01ff</tt>. Khi một byte được đẩy lên ngăn xếp, con trỏ ngăn xếp sẽ trở thành <tt>$fe</tt> hoặc vị trí bộ nhớ <tt>$01fe</tt>, v.v."
+ "Ngăn xếp"
+ "Trò chơi rắn săn mồi từ hướng dẫn"
+ "Kết quả của chương trình con này là tải một byte ngẫu nhiên vào <tt>$00</tt> và một số ngẫu nhiên từ 2 đến 5 vào <tt>$01</tt>. Vì byte ít quan trọng nhất xuất hiện trước với địa chỉ gián tiếp nên địa chỉ này sẽ chuyển thành địa chỉ bộ nhớ nằm giữa <tt>$0200</tt> và <tt>$05ff</tt>: phạm vi chính xác được sử dụng để vẽ màn hình."
+ "Bộ xử lý biết nơi cần quay lại vì <tt>JSR</tt> đẩy địa chỉ trừ một trong các lệnh tiếp theo vào ngăn xếp trước khi nhảy đến vị trí đã cho. <tt>RTS</tt> bật vị trí này, thêm một vị trí vào vị trí đó và chuyển đến vị trí đó. Một ví dụ:"
+ "Vấn đề là <tt>$184</tt> quá lớn để có thể chứa vừa một byte đơn (tối đa là <tt>$FF</tt>) và các thanh ghi chỉ có thể chứa một byte đơn. Mặc dù vậy cũng không sao; bộ xử lý không thực sự ngu ngốc. Nếu bạn để ý kỹ, bạn sẽ nhận thấy rằng cờ mang được đặt thành <tt>1</tt> sau thao tác này. Vậy là bạn đã biết rồi."
+ "Ngược lại với <tt>BNE</tt> là <tt>BEQ</tt>. Hãy thử viết chương trình sử dụng <tt>BEQ</tt>."
+ "Ngược lại với <tt>ADC</tt> là <tt>SBC</tt> (trừ có nhớ). Viết chương trình sử dụng lệnh này."
+ "Trò chơi chạy offline của trình duyệt, viết bằng hợp ngữ 6502"
+ "Chương trình con tiếp theo, <tt>generateApplePosition</tt>, đặt vị trí quả táo ở một vị trí ngẫu nhiên trên màn hình. Đầu tiên, nó tải một byte ngẫu nhiên vào bộ tích lũy (<tt>$fe</tt> là bộ tạo số ngẫu nhiên trong trình mô phỏng này). Số tiền này được lưu trữ trong <tt>$00</tt>. Tiếp theo, một byte ngẫu nhiên khác được tải vào bộ tích lũy, sau đó được <tt>AND</tt>-ed với giá trị <tt>$03</tt>. Phần này cần đi đường vòng một chút."
+ "Chương trình con tiếp theo, <tt>checkCollision</tt>, chuyển sang <tt>checkAppleCollision</tt> và <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> chỉ kiểm tra xem liệu hai byte giữ vị trí của quả táo có khớp với hai byte giữ vị trí của phần đầu hay không. Nếu đúng như vậy, chiều dài sẽ tăng lên và vị trí quả táo mới sẽ được tạo ra."
+ "Dòng tiếp theo, <tt>BNE decrement</tt>, sẽ chuyển việc thực thi sang nhãn decrement nếu cờ <tt>Z</tt> được đặt thành <tt>0</tt> (có nghĩa là hai giá trị trong so sánh <tt>CPX</tt> không bằng nhau), nếu không thì không làm gì cả và chúng tôi lưu trữ <tt>X</tt> thành <tt>$0201</tt>, sau đó kết thúc chương trình."
+ "Bit tiếp theo cập nhật phần đầu của con rắn tùy theo hướng. Đây có lẽ là phần phức tạp nhất của mã và tất cả đều phụ thuộc vào cách ánh xạ vị trí bộ nhớ tới màn hình, vì vậy hãy xem xét phần đó chi tiết hơn."
+ "Độ dài được khởi tạo là <tt>4</tt>, vì vậy <tt>X</tt> bắt đầu là <tt>3</tt>. <tt>LDA $10,x</tt> tải giá trị của <tt>$13</tt> vào <tt>A</tt>, sau đó <tt>STA $12,x</tt> lưu giá trị này vào <tt>$15</tt>. <tt>X</tt> bị giảm đi và chúng ta lặp lại. Bây giờ <tt>X</tt> là <tt>2</tt>, vì vậy chúng tôi tải <tt>$12</tt> và lưu trữ nó vào <tt>$14</tt>. Vòng lặp này xảy ra khi <tt>X</tt> dương (<tt>BPL</tt> có nghĩa là \"nhánh nếu dương\")."
+ "Chương trình con cuối cùng, <tt>spinWheels</tt>, vẫn ở đó vì nếu không thì trò chơi sẽ chạy quá nhanh. Tất cả <tt>spinWheels</tt> thực hiện đều được đếm <tt>X</tt> từ 0 cho đến khi chạm 0 lần nữa. <tt>dex</tt> đầu tiên kết thúc, tạo thành <tt>X</tt> <tt>#$ff</tt>."
+ "Phần cuối cùng hiển thị các cờ của bộ xử lý. Mỗi cờ là một bit, vì vậy tất cả bảy cờ đều tồn tại trong một byte đơn. Các cờ được bộ xử lý đặt để cung cấp thông tin về lệnh trước đó. Thêm về điều đó sau. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Đọc thêm về sổ đăng ký và cờ tại đây</a>."
+ "Giá trị hex <tt>$03</tt> được biểu diễn dưới dạng nhị phân dưới dạng <tt>00000011</tt>. Mã hoạt động <tt>AND</tt> thực hiện AND theo bit của đối số với bộ tích lũy. Ví dụ: nếu bộ tích lũy chứa giá trị nhị phân <tt>10101010</tt> thì kết quả của <tt>AND</tt> với <tt>00000011</tt> sẽ là <tt>00000010</tt>."
+ "Hex sẽ trông giống như thế này:"
+ "Vòng lặp trò chơi"
+ "Hai byte đầu tiên giữ vị trí của quả táo. Điều này được cập nhật mỗi khi con rắn ăn quả táo. Byte <tt>$02</tt> chứa hướng hiện tại. <tt>1</tt> có nghĩa là lên, <tt>2</tt> phải, <tt>4</tt> xuống và <tt>8</tt> trái. Lý do đằng sau những con số này sẽ trở nên rõ ràng sau này."
+ "Chương trình con đầu tiên, <tt>readKeys</tt>, đảm nhận công việc chấp nhận dữ liệu đầu vào của người dùng. Vị trí bộ nhớ <tt>$ff</tt> chứa mã ascii của lần nhấn phím gần đây nhất trong trình mô phỏng này. Giá trị được tải vào bộ tích lũy, sau đó được so sánh với <tt>$77</tt> (mã hex cho W), <tt>$64</tt> (D), <tt>$73</tt> (S) và <tt>$61</tt> (A). Nếu bất kỳ so sánh nào trong số này thành công, chương trình sẽ chuyển sang phần thích hợp."
+ "Dòng đầu tiên hiển thị các thanh ghi <tt>A</tt>, <tt>X</tt> và <tt>Y</tt> (<tt>A</tt> thường được gọi là \"bộ tích lũy\"). Mỗi thanh ghi chứa một byte đơn. Hầu hết các hoạt động đều hoạt động trên nội dung của các thanh ghi này."
+ "Lệnh đầu tiên khiến việc thực thi nhảy tới nhãn <tt>init</tt>. Lệnh này đặt <tt>X</tt>, sau đó quay lại lệnh tiếp theo, <tt>JSR loop</tt>. Điều này chuyển tới nhãn <tt>loop</tt>, nhãn này tăng dần <tt>X</tt> cho đến khi bằng <tt>$05</tt>. Sau đó, chúng ta quay lại lệnh tiếp theo, <tt>JSR end</tt>, lệnh này sẽ nhảy xuống cuối tệp. Điều này minh họa cách <tt>JSR</tt> và <tt>RTS</tt> có thể được sử dụng cùng nhau để tạo mã mô-đun."
+ "ác dụng của việc này là che giấu hai bit có ý nghĩa nhỏ nhất của bộ tích lũy, đặt các bit còn lại về 0. Điều này chuyển đổi một số trong phạm vi 0–255 thành một số trong phạm vi 0–3."
+ "Khối mã bên dưới chứa toàn bộ mã nguồn của trò chơi. Tôi sẽ giải thích cách nó hoạt động trong các phần sau."
+ "Màn hình bảng điều khiển trò chơi màu đen bây giờ sẽ hiển thị ba \"pixel\" màu ở trên cùng bên trái."
+ "Ứng dụng được thiết kế cho phông chữ giao diện của GNOME. Trên các hệ thống khác, ứng dụng được hiển thị bằng phông chữ của hệ thống đó, thường nhỏ hơn."
+ "Thanh ghi chỉ số Y tương tự như X và không có chức năng đặc biệt. Thường được sử dụng để đánh địa chỉ và di chuyển dữ liệu."
+ "Thanh Ghi Chỉ Mục X được sử dụng cho các chế độ đánh địa chỉ được lập chỉ mục và các hoạt động đếm. Nó có thể chứa bộ đếm vòng lặp, chỉ mục mảng và rất cần thiết để truy cập các vị trí bộ nhớ liên quan đến địa chỉ cơ sở bằng cách sử dụng X làm phần bù. Đặc biệt: TSX/TXS truyền X đến/từ con trỏ ngăn xếp."
+ "Con Trỏ Ngăn Xếp quản lý ngăn xếp cuộc gọi cho các chương trình con và các ngắt. Nó bắt đầu ở $FF (đỉnh ngăn xếp) và tăng dần xuống dưới. Được sử dụng cho các hoạt động PUSH/PULL, lệnh gọi JSR/RTS và xử lý ngắt. Quan trọng đối với các lệnh gọi hàm lồng nhau."
+ "Bộ Đếm Chương Trình chứa địa chỉ bộ nhớ của lệnh tiếp theo sẽ thực thi. Nó tự động tăng sau mỗi lệnh và có thể được sửa đổi bằng cách nhảy, rẽ nhánh, gọi và trả về. Cần thiết cho việc kiểm soát và gỡ lỗi luồng chương trình."
+ "Bộ tích lũy (A) là thanh ghi chính cho các phép toán số học và logic. Tất cả các phép tính cơ bản như THÊM, TRỪ, VÀ, HOẶC, v.v. đều sử dụng thanh ghi này. Đây là thanh ghi được sử dụng thường xuyên nhất trong lập trình hợp ngữ 6502."
+ "Bản thân chương trình con <tt>loop</tt> chỉ gọi một số chương trình con một cách tuần tự trước khi lặp lại chính nó:"
+ "Chương trình con <tt>init</tt> bao gồm hai chương trình con, <tt>initSnake</tt> và <tt>generateApplePosition</tt>. <tt>initSnake</tt> đặt hướng, chiều dài của con rắn, sau đó tải các vị trí bộ nhớ ban đầu của đầu và thân con rắn. Cặp byte tại <tt>$10</tt> chứa vị trí màn hình của phần đầu, cặp tại <tt>$12</tt> chứa vị trí của một đoạn cơ thể và <tt>$14</tt> chứa vị trí của đuôi (đuôi là đoạn cuối cùng của cơ thể và được vẽ màu đen để giữ cho con rắn chuyển động). Điều này xảy ra trong đoạn mã sau:"
+ "Mã hoạt động <tt>BIT</tt> tương tự như <tt>AND</tt>, nhưng phép tính chỉ được sử dụng để đặt cờ 0 - kết quả thực tế sẽ bị loại bỏ. Cờ 0 chỉ được đặt nếu kết quả của AND-ing bộ tích lũy với đối số bằng 0. Khi chúng ta xét lũy thừa của hai, cờ số 0 sẽ chỉ được đặt nếu hai số không giống nhau. Ví dụ: <tt>0001 AND 0001</tt> không phải là 0, nhưng <tt>0001 AND 0010</tt> là 0."
+ "6502 sử dụng bus địa chỉ 16 bit, nghĩa là có 65536 byte bộ nhớ dành cho bộ xử lý. Hãy nhớ rằng một byte được biểu thị bằng hai ký tự hex, do đó vị trí bộ nhớ thường được biểu thị dưới dạng <tt>$0000 - $ffff</tt>. Có nhiều cách khác nhau để đề cập đến các vị trí bộ nhớ này, như được trình bày chi tiết bên dưới."
+ "Cảm ơn bạn đã sử dụng phần mềm mã nguồn mở."
+ "Kiểm tra bit 0 của A bằng LSR và BCC, đặt 1 hoặc 0 vào A làm kết quả"
+ "Kiểm tra sự sáng tạo của bạn trên bảng điều khiển trò chơi ảo"
+ "Tervetuloa! Chúng tôi vui mừng chào đón bản dịch tiếng Phần Lan, được đóng góp bởi Jiri Grönroos. Kiitos!"
+ "Xanh Mòng Két"
+ "Phông chữ hệ thống, cỡ GNOME"
+ "Mặc định hệ thống"
+ "Dòng lỗi cú pháp %1$d: %2$s"
+ "Người ủng hộ"
+ "Ủng hộ"
+ "Nộp"
+ "Phong Cách"
+ "Đã Dừng"
+ "Hướng dẫn từng bước hợp ngữ 6502"
+ "Bước"
+ "Cờ Trạng Thái"
+ "Con Trỏ Ngăn Xếp: Trỏ tới vị trí ngăn xếp"
+ "Ví Dụ Ngăn Xếp"
+ "Ngăn Xếp ($0100-$01FF)"
+ "Vị Trí Bộ Nhớ Đặc Biệt (trong Trình Mô Phỏng)"
+ "URL Nguồn"
+ "Một số hướng dẫn không xử lý các vị trí bộ nhớ (ví dụ: <tt>INX</tt> - tăng thanh ghi <tt>X</tt>). Chúng được cho là có địa chỉ ngầm - đối số được ngụ ý bởi hướng dẫn."
+ "Vậy tại sao bạn lại muốn học 6502? Đó là ngôn ngữ chết phải không? Ồ, tiếng Latin cũng vậy. Và họ vẫn dạy điều đó. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "Vậy thực chất chương trình này đang làm gì? Hãy xem qua từng bước. Nhấn <b>Đặt Lại</b>, sau đó dùng <b>Bước</b> để thực hiện từng lệnh một của chương trình. Khung <b>Gỡ lỗi</b> hiển thị các thanh ghi và bộ nhớ — đó là một tab riêng trên cửa sổ nhỏ, và là khung bên dưới console trò chơi trên cửa sổ rộng. Nhấp <b>Bước</b> một lần và bạn sẽ nhận thấy trong khung gỡ lỗi rằng <tt>A=</tt> đã thay đổi từ <tt>$00</tt> thành <tt>$01</tt>, và <tt>PC=</tt> đã thay đổi từ <tt>$0600</tt> thành <tt>$0602</tt>."
+ "Vì vậy, lệnh <tt>STA $0200</tt> lưu trữ giá trị của thanh ghi <tt>A</tt> vào vị trí bộ nhớ <tt>$0200</tt>. Nhấp vào <b>Bước</b> bốn lần nữa để thực hiện phần còn lại của hướng dẫn, chú ý đến thanh ghi <tt>A</tt> khi nó thay đổi."
+ "Vì vậy, nhìn vào <tt>upKey</tt>, nếu hướng hiện tại hướng xuống (4), kiểm tra bit sẽ bằng 0. <tt>BNE</tt> có nghĩa là \"phân nhánh nếu cờ 0 rõ ràng\", vì vậy trong trường hợp này chúng ta sẽ phân nhánh thành <tt>illegalMove</tt>, vốn chỉ trả về từ chương trình con. Ngược lại, hướng mới (1 trong trường hợp này) được lưu ở vị trí bộ nhớ thích hợp."
+ "Vì vậy, hãy đi sâu vào! Ứng dụng này chứa <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">Trình biên dịch và Trình mô phỏng JavaScript 6502</a> mà tôi đã điều chỉnh cho phù hợp với hướng dẫn tương tác này. Nhấp vào nút <b>Sao Chép</b> trong khối mã bên dưới để sao chép mã mẫu vào trình chỉnh sửa. Sau đó dùng <b>Tập Hợp</b> để lắp ráp mã, và <b>Chạy</b> để chạy nó. Bạn có thể tìm thấy các hành động này dưới dạng nút bấm hoặc trong menu."
+ "Cho đến nay chúng ta chỉ có thể viết các chương trình cơ bản mà không có bất kỳ logic phân nhánh nào. Hãy thay đổi điều đó."
+ "Sử Dụng Bộ Nhớ Trò Chơi Rắn Săn Mồi"
+ "Dữ Liệu Trò Chơi Rắn Săn Mồi($00-$15)"
+ "Trò Chơi Rắn Săn Mồi"
+ "Đá Phiến"
+ "Lỗi mô phỏng"
+ "Trình Mô Phỏng"
+ "Các ví dụ về mã được chia sẻ hiện bao gồm thông tin giấy phép CC-BY-4.0, làm rõ cách cộng đồng có thể sử dụng và xây dựng dựa trên những đóng góp của bạn."
+ "Chia Sẻ Ví Dụ Của Bạn"
+ "Chia Sẻ Ví Dụ"
+ "Chia Sẻ"
+ "Shalom! Chúng tôi vui mừng chào đón bản dịch tiếng Do Thái, được đóng góp hoàn toàn bởi Menachem (naattxx). Toda raba!"
+ "Nghiêm túc mà nói, tôi nghĩ việc hiểu biết về hợp ngữ là điều có giá trị. Hợp ngữ là mức độ trừu tượng thấp nhất trong máy tính - điểm mà mã vẫn có thể đọc được. Hợp ngữ dịch trực tiếp sang các byte được bộ xử lý máy tính của bạn thực thi. Nếu bạn hiểu cách thức hoạt động của nó thì về cơ bản bạn đã trở thành một <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">ảo thuật gia</a> máy tính."
+ "Selamat datang! Chúng tôi cũng chào đón bản dịch tiếng Indonesia, được Arif Budiman nhiệt tình đóng góp. Terima kasih!"
+ "Ánh xạ màn hình tới phạm vi bộ nhớ <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Chào nhiều bản dịch mới: tiếng Pháp, tiếng Interlingua, tiếng Bồ Đào Nha, tiếng Bồ Đào Nha (Brazil), tiếng Hà Lan, tiếng Tây Ban Nha, tiếng Ukraina, tiếng Nhật và tiếng Trung (Giản thể)"
+ "Đã lưu dưới dạng %1$s"
+ "Lưu thay đổi?"
+ "Lưu dưới dạng..."
+ "Lưu Tệp Hợp Ngữ"
+ "Lưu"
+ "Đang chạy trò chơi Rắn Săn Mồi"
+ "Chạy"
+ "Viết lại ví dụ đầu tiên trong phần này để sử dụng thanh ghi <tt>Y</tt> thay vì thanh ghi <tt>X</tt>."
+ "Xem lại ví dụ của bạn sẽ xuất hiện như thế nào đối với người khác. Nhấn vào <b>Gửi</b> sẽ gây ra sự cố trên GitHub. Bạn sẽ cần đăng nhập bằng tài khoản GitHub của mình để hoàn tất việc gửi."
+ "Tiếp Tục"
+ "Đặt Lại"
+ "Kết xuất trò chơi"
+ "Tương Đối: <tt>$c0</tt> (hoặc nhãn)"
+ "Địa chỉ tương đối được sử dụng cho các lệnh phân nhánh. Các lệnh này lấy một byte đơn, được sử dụng làm phần bù cho lệnh sau."
+ "Đăng ký và cờ"
+ "Thanh ghi"
+ "Giảm phạm vi địa chỉ màn hình hex mặc định để có hiệu quả tốt hơn"
+ "Đỏ"
+ "Đọc đầu vào"
+ "Ngẫu Nhiên/Đầu Vào ($FE-$FF)"
+ "Thoát"
+ "Mẹo nhanh"
+ "Tím"
+ "Chương trình máy chơi game cổ điển"
+ "Chương trình đã tạm dừng"
+ "Chương trình đã hoàn thành. Đặt lại để chạy từng bước qua chương trình lần nữa."
+ "Chương trình hoàn thành tại PC=$%1$s"
+ "Chương trình đã hoàn thành"
+ "Lưu Trữ Chương Trình ($0600-$FFFF)"
+ "Bộ Đếm Chương Trình: Trỏ tới lệnh tiếp theo"
+ "Thanh ghi Trạng Thái Bộ Xử Lý"
+ "Cờ Bộ Xử Lý"
+ "Cơ Bản: Vàng"
+ "Cơ Bản: Xanh Mòng Két"
+ "Cơ Bản: Đen Xám"
+ "Cơ Bản: Đỏ"
+ "Cơ Bản: Tím"
+ "Cơ Bản: Hồng"
+ "Cơ Bản: Cam"
+ "Cơ Bản: Xanh Lá"
+ "Cơ Bản: Xanh Dương"
+ "Màu cơ bản"
+ "Trước"
+ "Xem Trước Ví Dụ Của Bạn"
+ "Xem Trước"
+ "Nhấn <b>Bước</b> để thực hiện lệnh thứ hai. Pixel trên cùng bên trái của bảng điều khiển trò chơi bây giờ sẽ có màu trắng. Trình mô phỏng này sử dụng các vị trí bộ nhớ <tt>$0200</tt> đến <tt>$05ff</tt> để vẽ các pixel trên màn hình của nó. Các giá trị <tt>$00</tt> đến <tt>$0f</tt> đại diện cho 16 màu khác nhau (<tt>$00</tt> là màu đen và <tt>$01</tt> là màu trắng), do đó việc lưu trữ giá trị <tt>$01</tt> tại vị trí bộ nhớ <tt>$0200</tt> sẽ vẽ một pixel màu trắng ở góc trên cùng bên trái. Việc này đơn giản hơn cách máy tính thực tế xuất video nhưng hiện tại nó vẫn có thể thực hiện được."
+ "Đang Tiền Xử Lý ..."
+ "Chơi"
+ "Hồng"
+ "Hoàn hảo cho những người có sở thích, sinh viên và bất kỳ ai tò mò về cách thức hoạt động thực sự của máy tính!"
+ "Tạm dừng"
+ "Cờ Tràn: Đặt khi một phép toán số học tạo ra kết quả không thể biểu thị trong phạm vi 8 bit có dấu (-128 đến +127). Được sử dụng để phát hiện các lỗi số học có dấu trong phép tính."
+ "Cấu trúc tổng thể"
+ "Nhánh ngoài phạm vi trên dòng %1$d (các nhánh được giới hạn ở -128 đến +127): %2$s"
+ "Chương trình đầu tiên của chúng ta"
+ "Được tổ chức thành bốn dải ngang 32×8 pixel"
+ "Cam"
+ "Cấu hình Flatpak được tối ưu hóa bằng cách loại bỏ các quyền không cần thiết"
+ "Đã Mở %1$s"
+ "Mở..."
+ "Mã nguồn mở"
+ "Mở Tệp Hợp Ngữ"
+ "Khi các giá trị đã được chuyển xuống con rắn, chúng ta phải tìm ra những việc cần làm với phần đầu. Hướng đầu tiên được tải vào <tt>A</tt>. <tt>LSR</tt> có nghĩa là \"dịch chuyển logic sang phải\" hoặc \"dịch chuyển tất cả các bit sang phải một vị trí\". Bit ít quan trọng nhất được chuyển sang cờ nhớ, vì vậy nếu bộ tích lũy là <tt>1</tt> thì sau <tt>LSR</tt> thì đó là <tt>0</tt>, với cờ nhớ được đặt."
+ "Khi đặt lại (trình mô phỏng): <tt>P = $30</tt> (bit5 và <tt>B</tt> được đặt; <tt>D</tt> và <tt>I</tt> xóa)"
+ "OK"
+ "Bây giờ, hãy vận dụng tốt tất cả kiến thức này và tạo ra một trò chơi! Chúng tôi sẽ tạo một phiên bản thực sự đơn giản của trò chơi cổ điển \'Rắn Săn Mồi\'."
+ "Không cần kinh nghiệm lập trình trước đó. Bắt đầu với các bài học tương tác và từng bước xây dựng kỹ năng của bạn."
+ "Không có mã để chạy."
+ "Không có địa chỉ hoặc nhãn được cung cấp"
+ "Tiếp theo là <tt>drawSnake</tt>. Điều này cũng khá đơn giản - đầu tiên chúng ta vẽ phần đuôi và sau đó vẽ phần đầu. <tt>X</tt> được đặt theo chiều dài của con rắn, vì vậy chúng tôi có thể lập chỉ mục cho đúng pixel và chúng tôi đặt <tt>A</tt> thành 0 sau đó thực hiện ghi bằng chế độ địa chỉ gián tiếp được lập chỉ mục. Sau đó, chúng tôi tải lại <tt>X</tt> để lập chỉ mục cho phần đầu, đặt <tt>A</tt> thành một và lưu trữ nó tại <tt>($10,x)</tt>. <tt>$10</tt> lưu trữ vị trí hai byte của phần đầu, do đó, thao tác này sẽ vẽ một pixel màu trắng ở vị trí phần đầu hiện tại. Vì chỉ có đầu và đuôi rắn chuyển động nên điều này đủ để giữ cho con rắn chuyển động."
+ "Các công cụ mới để kiểm tra mã của bạn, bao gồm trình dịch ngược và trình xem bộ nhớ có thể chuyển đổi nhanh"
+ "Cờ Âm: Đặt khi bit có ý nghĩa nhất (bit 7) của kết quả là 1. Được sử dụng để so sánh số có dấu và cho biết liệu một giá trị có âm trong biểu diễn phần bù hai hay không."
+ "Gần như tất cả các trò chơi đều có vòng lặp trò chơi. Tất cả các vòng lặp trò chơi đều có dạng cơ bản giống nhau: chấp nhận đầu vào của người dùng, cập nhật trạng thái trò chơi và hiển thị trạng thái trò chơi. Vòng lặp này cũng không khác."
+ "Tin nhắn"
+ "Vị trí bộ nhớ <tt>$01</tt> và <tt>$02</tt> lần lượt chứa các giá trị <tt>$05</tt> và <tt>$07</tt>. Hãy coi <tt>($00,X)</tt> là <tt>($00 + X)</tt>. Trong trường hợp này <tt>X</tt> là <tt>$01</tt>, vì vậy điều này đơn giản hóa thành <tt>($01)</tt>. Từ đây mọi thứ diễn ra giống như việc đánh địa chỉ gián tiếp tiêu chuẩn - hai byte tại <tt>$01</tt> và <tt>$02</tt> (<tt>$05</tt> và <tt>$07</tt>) được tra cứu để tạo thành địa chỉ <tt>$0705</tt>. Đây là địa chỉ mà thanh ghi <tt>Y</tt> được lưu trữ trong lệnh trước, vì vậy thanh ghi <tt>A</tt> có cùng giá trị với <tt>Y</tt>, mặc dù thông qua một lộ trình phức tạp hơn nhiều. Bạn sẽ không thấy điều này nhiều."
+ "Bản đồ bộ nhớ"
+ "Nhiều lỗi nhỏ đã được sửa để cải thiện khả năng sử dụng tổng thể"
+ "Các cải tiến chính về giao diện người dùng giới thiệu Nút Hành Động Nổi hiện đại với các trạng thái động để điều khiển chương trình trực quan và tiện ích trình gỡ lỗi được thiết kế lại hoàn toàn bằng cách sử dụng các thành phần Adwaita hiện đại."
+ "Line Buster 6502"
+ "Phong cách sáng"
+ "Học bằng ví dụ chưa bao giờ dễ dàng hơn thế. Đi sâu vào mã đang hoạt động, chỉnh sửa, phá vỡ nó, sửa lại - đó là cách các lập trình viên giỏi nhất đã học ngày xưa!"
+ "Tìm hiểu cách sử dụng ngăn xếp với hướng dẫn PHA và PLA"
+ "Tìm hiểu cách lập trình bộ vi xử lý 6502."
+ "Tìm hiểu về lịch sử máy tính khi code"
+ "Learn 6502 hiện cũng chạy trên Windows và macOS. Nếu bạn muốn giới thiệu nó cho một người bạn không dùng Linux, bây giờ bạn có thể làm điều đó."
+ "Learn 6502 hiện chạy trên GNOME 50! Cảm ơn Sabri Ünal đã đóng góp bản cập nhật runtime."
+ "Học Hợp Ngữ 6502"
+ "Học"
+ "Lỗi nhãn"
+ "Nhãn đã được xác định tại dòng %1$d: %2$s"
+ "Nhãn %1$s đã được sử dụng làm biểu tượng; vui lòng đổi tên một trong số chúng"
+ "Nhảy cũng giống như phân nhánh với hai điểm khác biệt chính. Đầu tiên, các bước nhảy không được thực hiện có điều kiện và thứ hai, chúng lấy địa chỉ tuyệt đối hai byte. Đối với các chương trình nhỏ, chi tiết thứ hai này không quan trọng lắm vì bạn sẽ chủ yếu sử dụng các nhãn và trình biên dịch mã sẽ tìm ra vị trí bộ nhớ chính xác từ nhãn. Tuy nhiên, đối với các chương trình lớn hơn, nhảy là cách duy nhất để chuyển từ phần này sang phần khác."
+ "Nhảy"
+ "JSR/RTS"
+ "JMP"
+ "Giới thiệu"
+ "Cờ Ngắt: Khi được đặt, sẽ che dấu (vô hiệu hóa) tất cả các ngắt có thể che được (IRQ). Chỉ các ngắt không thể che giấu (NMI) vẫn có thể xảy ra. Được sử dụng cho các phần mã quan trọng không được bị gián đoạn."
+ "Phông chữ giao diện"
+ "Hướng dẫn tương tác hướng dẫn bạn từ cơ bản đến nâng cao"
+ "Hướng dẫn tương tác"
+ "Các hướng dẫn trong hợp ngữ giống như một tập hợp nhỏ các hàm được xác định trước. Tất cả các hướng dẫn đều có 0 hoặc một đối số. Dưới đây là một số mã nguồn có chú thích để giới thiệu một số hướng dẫn khác nhau:"
+ "Hướng dẫn"
+ "Khởi tạo"
+ "Gián tiếp: <tt>($c000)</tt>"
+ "Được lập chỉ mục gián tiếp: <tt>($c0),Y</tt>"
+ "Được lập chỉ mục gián tiếp giống như được lập chỉ mục gián tiếp nhưng ít điên rồ hơn. Thay vì thêm thanh ghi <tt>X</tt> vào địa chỉ <i>trước</i> hội thảo, địa chỉ trang không sẽ bị hủy tham chiếu và thanh ghi <tt>Y</tt> được thêm vào địa chỉ kết quả."
+ "Địa chỉ gián tiếp sử dụng một địa chỉ tuyệt đối để tra cứu một địa chỉ khác. Địa chỉ đầu tiên cung cấp byte có ý nghĩa nhỏ nhất của địa chỉ và byte tiếp theo cung cấp byte có ý nghĩa nhất. Điều đó có thể khiến bạn khó hiểu, vì vậy đây là một ví dụ:"
+ "Lập chỉ mục nhãn..."
+ "Được lập chỉ mục gián tiếp: <tt>($c0,X)</tt>"
+ "Thanh ghi chỉ số Y: Dùng để đánh địa chỉ"
+ "Thanh ghi chỉ số X: Dùng để đánh địa chỉ"
+ "Trong hướng dẫn nhỏ này, tôi sẽ chỉ cho bạn cách bắt đầu viết hợp ngữ 6502. Bộ xử lý 6502 rất lớn vào những năm 70 và 80, cung cấp năng lượng cho các máy tính nổi tiếng như <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://vi.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://vi.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://vi.wikipedia.org/wiki/Apple_II\">Apple II</a> và <a href=\"https://vi.wikipedia.org/wiki/Nintendo_Entertainment_System\">Hệ thống giải trí Nintendo</a>. Bender trong Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">có bộ xử lý 6502 cho bộ não</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Ngay cả Terminator cũng được lập trình vào năm 6502</a>."
+ "Trong ví dụ này, <tt>$f0</tt> chứa giá trị <tt>$01</tt> và <tt>$f1</tt> chứa giá trị <tt>$cc</tt>. Lệnh <tt>JMP ($f0)</tt> khiến bộ xử lý tra cứu hai byte tại <tt>$f0</tt> và <tt>$f1</tt> (<tt>$01</tt> và <tt>$cc</tt>) và ghép chúng lại với nhau để tạo thành địa chỉ <tt>$cc01</tt>, trở thành bộ đếm chương trình mới. Lắp ráp và duyệt qua chương trình trên để xem điều gì sẽ xảy ra. Tôi sẽ nói nhiều hơn về <tt>JMP</tt> trong phần <a href=\"#jumping\">Nhảy</a>."
+ "Trong trường hợp này, <tt>($01)</tt> tra cứu hai byte tại <tt>$01</tt> và <tt>$02</tt>: <tt>$03</tt> và <tt>$07</tt>. Chúng tạo thành địa chỉ <tt>$0703</tt>. Giá trị của thanh ghi <tt>Y</tt> được thêm vào địa chỉ này để tạo ra địa chỉ cuối cùng <tt>$0704</tt>."
+ "Trong trình biên dịch mã này, chúng ta có thể định nghĩa các hằng số mô tả (hoặc ký hiệu) đại diện cho các số. Sau đó, phần còn lại của mã có thể chỉ cần sử dụng các hằng số thay vì số bằng chữ, điều này ngay lập tức cho thấy rõ chúng ta đang xử lý vấn đề gì. Bạn có thể sử dụng các chữ cái, chữ số và dấu gạch dưới trong tên."
+ "Trong trình soạn thảo <b>gõ</b> (không dán) đoạn code sau:"
+ "Trong hợp ngữ, bạn thường sử dụng nhãn có hướng dẫn phân nhánh. Tuy nhiên, khi được lắp ráp, nhãn này được chuyển đổi thành độ lệch tương đối một byte (một số byte để lùi hoặc tiến từ lệnh tiếp theo) nên các lệnh nhánh chỉ có thể tiến và lùi khoảng 256 byte. Điều này có nghĩa là chúng chỉ có thể được sử dụng để di chuyển xung quanh mã địa phương. Để di chuyển xa hơn, bạn sẽ cần sử dụng hướng dẫn nhảy."
+ "Cải thiện hiệu suất bảng điều khiển trò chơi để chơi game mượt mà hơn"
+ "Cải thiện màn hình và điều khiển trò chơi cho thiết bị di động"
+ "Cải thiện mô tả để thân thiện hơn với người dùng không rành về kỹ thuật"
+ "Ngầm định"
+ "Ngay lập tức: <tt>#$c0</tt>"
+ "Địa chỉ ngay lập tức không xử lý nghiêm ngặt các địa chỉ bộ nhớ - đây là chế độ sử dụng các giá trị thực. Ví dụ: <tt>LDX #$01</tt> tải giá trị <tt>$01</tt> vào thanh ghi <tt>X</tt>. Điều này rất khác với lệnh trang không <tt>LDX $01</tt> tải giá trị tại vị trí bộ nhớ <tt>$01</tt> vào thanh ghi <tt>X</tt>."
+ "Nếu ngôn ngữ hệ thống của bạn là tiếng Trung, ứng dụng hiển thị lại bằng tiếng Trung. Trước đây nó đã nhầm lẫn quay về tiếng Anh."
+ "Nếu ví dụ của bạn dựa trên hoặc lấy cảm hứng từ một ví dụ khác, bạn có thể cung cấp URL nguồn."
+ "Nếu bạn nói một trong những ngôn ngữ được liệt kê, vui lòng giúp xem xét hoặc cải thiện bản dịch. Bạn có thể đóng góp thông qua các liên kết trong ứng dụng, nền tảng dịch thuật của chúng tôi hoặc bằng cách mở một số báo."
+ "Nếu kết quả của phép cộng lớn hơn một byte đơn thì địa chỉ sẽ bao quanh. Ví dụ:"
+ "IDE"
+ "Tôi sẽ không giải thích sâu về cách thức hoạt động của từng hướng dẫn, nhưng lời giải thích ở trên sẽ giúp bạn hiểu rõ điều đó sau khi nghiên cứu một chút."
+ "Ẩn"
+ "Đã tạo hexdump."
+ "Hexdump"
+ "Hex Monitor"
+ "Đây là một ví dụ. Lưu ý rằng các toán hạng ngay lập tức vẫn có tiền tố <tt>#</tt>."
+ "Trợ giúp"
+ "Tiếng Do Thái cũng là ngôn ngữ viết từ phải sang trái đầu tiên của chúng tôi: nhờ việc kiểm thử và những đóng góp của Menachem, ứng dụng hiện đã hỗ trợ bố cục từ phải sang trái, sẵn sàng cho nhiều ngôn ngữ RTL khác."
+ "Xanh lá"
+ "Khởi đầu tuyệt vời — bạn đã hoàn thành chương đầu tiên!"
+ "Bạn có sáng tạo 6502 thú vị của riêng mình không? Hãy chia sẻ nó với cộng đồng! Bây giờ bạn có thể gửi ví dụ mã của mình trực tiếp từ trong ứng dụng. Chỉ cần nhấn nút chia sẻ và chúng tôi sẽ tự động tạo issue GitHub và pull request cho bạn."
+ "Bạn có một ví dụ thú vị về 6502?\nHãy chia sẻ nó với cộng đồng!"
+ "Việc chuyển đổi giữa các phần phức tạp hơn vì chúng ta cũng phải tính đến byte quan trọng nhất. Ví dụ: giảm từ <tt>$02e1</tt> sẽ dẫn đến <tt>$0301</tt>. May mắn thay, điều này khá dễ thực hiện. Việc thêm <tt>$20</tt> vào <tt>$e1</tt> sẽ tạo ra <tt>$01</tt> và đặt cờ nhớ. Nếu cờ nhớ được đặt, chúng ta biết rằng chúng ta cũng cần tăng byte quan trọng nhất."
+ "Tiếng Đức và tiếng Tây Ban Nha đã được xác nhận bởi những người đóng góp. Các ngôn ngữ khác là bản nháp được AI hỗ trợ và cần con người xác nhận."
+ "Trò chơi hiện tự động tạm dừng khi chuyển đổi giữa các màn hình"
+ "Phím gamepad được nhấn:"
+ "GNOME"
+ "GNOME"
+ "Phiên bản game Rắn Săn Mồi được bình luận đầy đủ"
+ "Bộ Nhớ Đầy ($0000-$FFFF)"
+ "Đã tìm thấy nhãn %1$d."
+ "Đã tìm thấy nhãn %1$d."
+ "Với Linux hiện cũng có AppImage: một tệp duy nhất, không cần cài đặt, hữu ích trên bản phân phối mà chúng tôi không đóng gói sẵn."
+ "Phông chữ"
+ "Theo phong cách hệ thống"
+ "Đã sửa lỗi xây dựng trên PostmarketOS, cải thiện khả năng tương thích với thiết bị di động"
+ "Đã sửa lỗi nút Lui lại trong phần học luôn hiển thị ở chế độ máy tính để bàn và máy tính bảng, ngay cả khi không có trang con nào được mở."
+ "Đầu tiên, <tt>readkeys</tt> kiểm tra xem liệu một trong các phím chỉ hướng (W, A, S, D) có được nhấn hay không và nếu có, hãy đặt hướng của con rắn cho phù hợp. Sau đó, <tt>checkCollision</tt> kiểm tra xem con rắn có va chạm với chính nó hay quả táo hay không. <tt>updateSnake</tt> cập nhật hình ảnh bên trong của con rắn, dựa trên hướng của nó. Tiếp theo, quả táo và con rắn được vẽ. Cuối cùng, <tt>spinWheels</tt> khiến bộ xử lý thực hiện một số công việc bận rộn để ngăn trò chơi chạy quá nhanh. Hãy nghĩ về nó như một mệnh lệnh đi ngủ. Trò chơi tiếp tục chạy cho đến khi con rắn va vào tường hoặc chính nó."
+ "Đầu tiên chúng ta nạp giá trị <tt>$08</tt> vào thanh ghi <tt>X</tt>. Dòng tiếp theo là nhãn. Nhãn chỉ đánh dấu một số điểm nhất định trong chương trình để chúng ta có thể quay lại sau. Sau nhãn, chúng ta giảm <tt>X</tt>, lưu nó vào <tt>$0200</tt> (pixel trên cùng bên trái), sau đó so sánh nó với giá trị <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> so sánh giá trị trong sổ đăng ký <tt>X</tt> với một giá trị khác. Nếu hai giá trị bằng nhau, cờ <tt>Z</tt> được đặt thành <tt>1</tt>, nếu không thì nó được đặt thành <tt>0</tt>."
+ "Hàng đầu tiên: <tt>$0200</tt>-<tt>$021F</tt>, hàng thứ hai: <tt>$0220</tt>-<tt>$023F</tt>, v.v."
+ "Bản phát hành đầu tiên của Học Hợp Ngữ 6502cho GNOME"
+ "Cuối cùng, byte <tt>$03</tt> chứa độ dài hiện tại của con rắn, tính theo byte trong bộ nhớ (vì vậy độ dài 4 có nghĩa là 2 pixel)."
+ "Điền thông tin về ví dụ 6502 của bạn để chia sẻ với cộng đồng"
+ "Tệp \"%1$s\" có những thay đổi chưa được lưu"
+ "Không sao chép được vào bộ nhớ tạm"
+ "Bài tập"
+ "Bài tập"
+ "Thực hiện từng lệnh một thay vì liên tục"
+ "Ví dụ"
+ "Ví dụ được gửi để xem xét"
+ "Mặc dù đây sẽ là một phiên bản đơn giản nhưng mã sẽ lớn hơn đáng kể so với tất cả các ví dụ trước đó. Chúng ta sẽ cần phải theo dõi nhiều vị trí bộ nhớ cùng nhau cho các khía cạnh khác nhau của trò chơi. Chúng tôi vẫn có thể tự mình thực hiện các công việc ghi sổ cần thiết trong suốt chương trình như trước đây, nhưng ở quy mô lớn hơn, việc này nhanh chóng trở nên tẻ nhạt và cũng có thể dẫn đến các lỗi khó phát hiện. Thay vào đó, bây giờ chúng ta sẽ để trình biên dịch mã thực hiện một số công việc tầm thường cho chúng ta."
+ "Chẵn Lẻ"
+ "Được trang bị kiến thức đó, bạn sẽ có thể thấy rằng lệnh <tt>LDA #$01</tt> tải giá trị hex <tt>$01</tt> vào thanh ghi <tt>A</tt>. Tôi sẽ đi vào chi tiết hơn về sổ đăng ký trong phần tiếp theo."
+ "Cải tiến đầu vào phạm vi địa chỉ màn hình hex để chỉnh sửa giá trị dễ dàng hơn"
+ "Khả năng truy cập và trình bày ứng dụng nâng cao"
+ "Bật Chế Độ Từng Bước"
+ "Bật Trình Gỡ Lỗi"
+ "Mỗi phần (<tt>upKey</tt>, <tt>rightKey</tt>, v.v.) trước tiên sẽ kiểm tra xem hướng hiện tại có ngược lại với hướng mới hay không. Điều này đòi hỏi một đường vòng nhỏ khác."
+ "Xong"
+ "Bộ Nhớ Hiển Thị"
+ "Bộ Nhớ Hiển Thị ($0200-$05FF)"
+ "Khám phá thế giới hấp dẫn của việc lập trình máy tính cổ điển và máy chơi game! Tìm hiểu ngôn ngữ hợp ngữ 6502 - cùng mã hỗ trợ các hệ thống mang tính biểu tượng như NES, Commodore 64 và Apple II."
+ "Loại bỏ"
+ "Đã tạo mã tháo rời."
+ "Đã tháo rời"
+ "Vô hiệu hóa để cải thiện hiệu suất"
+ "Dino Run"
+ "Mô tả"
+ "Cờ Thập Phân: Bật chế độ Thập phân được mã hóa nhị phân (BCD) cho các phép tính số học. Khi được đặt, các lệnh ADC/SBC xử lý các giá trị dưới dạng chữ số thập phân (0-9) thay vì nhị phân. Được sử dụng để tính toán tài chính và số học thập phân."
+ "Trình gỡ lỗi hiện chỉ cập nhật khi hiển thị, giảm việc xử lý không cần thiết"
+ "Trình gỡ lỗi"
+ "Gỡ lỗi chương trình của bạn bằng các công cụ kiểm tra thời gian thực"
+ "Cài đặt gỡ lỗi"
+ "Gỡ lỗi"
+ "Phong cách tối"
+ "Tạo một trò chơi"
+ "Sao chép vào trình chỉnh sửa"
+ "Sao chép vào bộ nhớ tạm"
+ "Đã sao chép vào bộ nhớ tạm"
+ "Tiếp Tục"
+ "Xác Nhận"
+ "Hướng Dẫn Chung"
+ "Trò Chơi Rắn Săn Mồi Đã Bình Luận"
+ "Bảng Màu"
+ "Trình chỉnh sửa mã và bảng điều khiển trò chơi ảo"
+ "Code được sao chép vào trình chỉnh sửa"
+ "Code được lắp ráp thành công, %1$d byte."
+ "Code"
+ "Thay đổi một trong các pixel để vẽ ở góc dưới bên phải (vị trí bộ nhớ <tt>$05ff</tt>)."
+ "Cờ Mang: Đặt khi phép cộng tạo ra số mang; rõ ràng khi phép trừ yêu cầu vay mượn. Được sử dụng cho số học nhiều byte và dịch chuyển/xoay (BCS/BCC)."
+ "Hủy"
+ "Bằng việc gửi, bạn đồng ý rằng ví dụ của bạn sẽ được cấp phép theo <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Phá các khối bằng thanh đỡ và bóng."
+ "Cờ ngắt: Đặt khi lệnh BRK (Ngắt) được thực thi. Được sử dụng để phân biệt giữa ngắt phần mềm (BRK) và ngắt phần cứng. Giúp xác định nguồn gây gián đoạn trong quy trình dịch vụ ngắt."
+ "Phân nhánh"
+ "Xanh Dương"
+ "Vì trạng thái trò chơi được lưu trữ dưới dạng vị trí pixel nên việc hiển thị trò chơi rất đơn giản. Chương trình con đầu tiên, <tt>drawApple</tt>, cực kỳ đơn giản. Nó đặt <tt>Y</tt> thành 0, tải một màu ngẫu nhiên vào bộ tích lũy, sau đó lưu giá trị này vào <tt>($00),y</tt>. <tt>$00</tt> là nơi lưu trữ vị trí của quả táo, vì vậy <tt>($00),y</tt> sẽ hủy tham chiếu đến vị trí bộ nhớ này. Đọc phần \"Được lập chỉ mục gián tiếp\" trong <a href=\"#addressing\">Chế độ địa chỉ</a> để biết thêm chi tiết."
+ "Lui lại"
+ "Tác giả"
+ "Ở mức độ thấp, chương trình con này phức tạp hơn một chút. Đầu tiên, độ dài được tải vào thanh ghi <tt>X</tt>, sau đó được giảm dần. Đoạn mã dưới đây hiển thị bộ nhớ bắt đầu cho con rắn."
+ "Tệp Hợp Ngữ"
+ "Hợp ngữ"
+ "Đang lắp ráp mã ..."
+ "Đã lắp ráp thành công"
+ "Lắp ráp mã sau đây, sau đó mở khung <b>Gỡ lỗi</b> và kiểm tra <b>Hexdump</b> để xem mã đã được lắp ráp."
+ "Lắp ráp mã, sau đó mở khung <b>Gỡ lỗi</b> và xem qua từng bước mã, theo dõi các thanh ghi <tt>A</tt> và <tt>X</tt>. Có điều gì đó hơi kỳ lạ xảy ra trên dòng <tt>ADC #$c4</tt>. Bạn có thể mong đợi rằng việc thêm <tt>$c4</tt> vào <tt>$c0</tt> sẽ cho ra <tt>$184</tt>, nhưng bộ xử lý này cho kết quả là <tt>$84</tt>. Có chuyện gì vậy?"
+ "Lắp ráp mã và dùng <b>Bước</b> để xem qua ba lệnh này. <b>Hex Monitor</b> trong khung gỡ lỗi hiển thị một phần bộ nhớ và có thể hữu ích để trực quan hóa việc thực thi chương trình. <tt>STA $01</tt> lưu trữ giá trị của thanh ghi <tt>A</tt> tại vị trí bộ nhớ <tt>$01</tt>, và <tt>ADC $01</tt> thêm giá trị được lưu trữ tại vị trí bộ nhớ <tt>$01</tt> vào thanh ghi <tt>A</tt>. <tt>$80 + $80</tt> phải bằng <tt>$100</tt>, nhưng vì giá trị này lớn hơn một byte nên thanh ghi <tt>A</tt> được đặt thành <tt>$00</tt> và cờ nhớ được đặt. Tuy nhiên, ngoài ra cờ số 0 cũng được đặt. Cờ 0 được đặt bởi tất cả các lệnh có kết quả bằng 0."
+ "Tập hợp thất bại"
+ "Tập Hợp"
+ "Như đã nêu trước đó, bốn hướng được thể hiện bên trong bằng các số 1, 2, 4 và 8. Mỗi số này là lũy thừa của 2, do đó chúng được biểu thị bằng số nhị phân có một <tt>1</tt> duy nhất:"
+ "Miễn là bạn đang di chuyển trong một trong những dải ngang này, mọi thứ đều đơn giản. Ví dụ: để di chuyển sang phải, chỉ cần tăng byte có ý nghĩa nhỏ nhất (ví dụ: <tt>$0200</tt> trở thành <tt>$0201</tt>). Để đi xuống, hãy thêm <tt>$20</tt> (ví dụ: <tt>$0200</tt> trở thành <tt>$0220</tt>). Trái và trên là ngược lại."
+ "Như thường lệ, bản phát hành này bao gồm nhiều sửa lỗi và cải tiến nhỏ."
+ "Những cải tiến về kiến trúc cho phép chia sẻ mã tốt hơn giữa các nền tảng Gnome, Web và Android."
+ "Cài đặt giao diện"
+ "Giao Diện"
+ "Bất kỳ số nào có tiền tố <tt>$</tt> trong hợp ngữ 6502 (và theo phần mở rộng, trong cuốn sách này) đều có định dạng thập lục phân (hex). Nếu bạn không quen với số hex, tôi khuyên bạn nên đọc <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">bài viết trên Wikipedia</a>. Bất cứ thứ gì có tiền tố <tt>#</tt> đều là giá trị số bằng chữ. Bất kỳ số nào khác đều đề cập đến một vị trí bộ nhớ."
+ "Điều quan trọng cần lưu ý ở đây là sự khác biệt giữa <tt>ADC #$01</tt> và <tt>ADC $01</tt>. Cái đầu tiên thêm giá trị <tt>$01</tt> vào thanh ghi <tt>A</tt>, nhưng cái thứ hai thêm giá trị được lưu trữ tại vị trí bộ nhớ <tt>$01</tt> vào thanh ghi <tt>A</tt>."
+ "Cũng hữu ích: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Gần Xong!"
+ "Tất cả các lệnh hỗ trợ địa chỉ tuyệt đối (ngoại trừ các lệnh nhảy) cũng có tùy chọn lấy địa chỉ một byte. Kiểu địa chỉ này được gọi là \"trang không\" - chỉ có thể truy cập được trang đầu tiên (256 byte đầu tiên) của bộ nhớ. Việc này nhanh hơn vì chỉ cần tra cứu một byte và cũng chiếm ít không gian hơn trong mã được tập hợp."
+ "Tất Cả Các Tệp"
+ "Sau đó, giá trị <tt>2</tt> được thêm vào bộ tích lũy để tạo số ngẫu nhiên cuối cùng trong phạm vi 2–5."
+ "Sau khối nhận xét ban đầu (các dòng bắt đầu bằng dấu chấm phẩy), hai dòng đầu tiên là:"
+ "Sau khi phát hiện va chạm, chúng tôi cập nhật vị trí của con rắn. Việc này được thực hiện ở mức cao như sau: Đầu tiên, di chuyển từng cặp byte của phần thân lên một vị trí trong bộ nhớ. Thứ hai, cập nhật phần đầu theo hướng hiện tại. Cuối cùng, nếu phần đầu vượt quá giới hạn thì hãy xử lý như một vụ va chạm. Tôi sẽ minh họa điều này bằng một số nghệ thuật ascii. Mỗi cặp dấu ngoặc chứa tọa độ x, y thay vì một cặp byte để đơn giản."
+ "Sau khi di chuyển theo từng hướng, chúng ta cũng cần kiểm tra xem liệu đầu có đi ra ngoài giới hạn hay không. Điều này được xử lý khác nhau cho mỗi hướng. Đối với bên trái và bên phải, chúng ta có thể kiểm tra xem đầu đã được \"quấn quanh\" một cách hiệu quả hay chưa. Đi thẳng từ <tt>$021f</tt> bằng cách tăng byte có ý nghĩa nhỏ nhất sẽ dẫn đến <tt>$0220</tt>, nhưng điều này thực sự là chuyển từ pixel cuối cùng của hàng đầu tiên sang pixel đầu tiên của hàng thứ hai. Vì vậy, mỗi khi di chuyển sang phải, chúng ta cần kiểm tra xem byte mới có ý nghĩa nhỏ nhất có phải là bội số của <tt>$20</tt> hay không. Điều này được thực hiện bằng cách kiểm tra một chút đối với mặt nạ <tt>$1f</tt>. Hy vọng hình minh họa bên dưới sẽ chỉ cho bạn cách che đi 5 bit thấp nhất cho biết một số có phải là bội số của <tt>$20</tt> hay không."
+ "Adwaita"
+ "Chế độ địa chỉ"
+ "Chế Độ Địa Chỉ"
+ "Địa chỉ %1$s - mã opcode không xác định"
+ "Cũng có sẵn các đầu vào nút bổ sung: nút A (phím Enter/Return, mã ASCII <tt>$0D</tt>) và nút B (Phím dấu cách, mã ASCII <tt>$20</tt>). Những thứ này có thể được sử dụng để tăng thêm tương tác cho trò chơi của bạn. Đối với điều khiển định hướng, cả phím WASD và phím mũi tên đều có thể được sử dụng thay thế cho nhau."
+ "Đã thêm tính năng trợ giúp để giúp người mới bắt đầu chỉnh sửa mã dễ dàng hơn"
+ "Đã thêm quản lý tệp để lưu và tải chương trình của bạn"
+ "Thêm nhiều hướng dẫn để vẽ thêm pixel."
+ "Bộ tích lũy: Thanh ghi chính để tính toán"
+ "Nhấn: Vàng"
+ "Nhấn: Teal"
+ "Nhấn: Đá Phiến"
+ "Nhấn: Đỏ"
+ "Nhấn: Tím"
+ "Nhấn: Hồng"
+ "Nhấn: Màu cam"
+ "Nhấn: Xanh lục"
+ "Nhấn: Xanh lam"
+ "Màu nhấn"
+ "Tuyệt đối: <tt>$c000</tt>"
+ "Tuyệt đối,X và tuyệt đối,Y: <tt>$c000,X</tt> và <tt>$c000,Y</tt>"
+ "Giới Thiệu Về Học Hợp Ngữ 6502"
+ "Danh sách đầy đủ của tập lệnh 6502 <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">có tại đây</a> và <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">tại đây</a> (Tôi thường tham khảo cả hai trang vì chúng có điểm mạnh và điểm yếu). Các trang này trình bày chi tiết các đối số cho từng lệnh, các thanh ghi chúng sử dụng và các cờ nào chúng đặt. Chúng là kinh thánh của bạn."
+ "Issue GitHub đã được mở trong trình duyệt của bạn. Vui lòng xem lại và gửi nó ở đó để hoàn thành đóng góp của bạn. Sau khi được phê duyệt, ví dụ của bạn sẽ được đưa vào bản phát hành tiếp theo.\n\nNếu ví dụ của bạn quá lớn, toàn bộ nội dung sẽ được sao chép vào bộ nhớ tạm để dán thủ công vào issue GitHub."
+ "<tt>init</tt> và <tt>loop</tt> đều là chương trình con. <tt>init</tt> khởi tạo trạng thái trò chơi và <tt>loop</tt> là vòng lặp trò chơi chính."
+ "<tt>checkSnakeCollision</tt> lặp qua các đoạn cơ thể của con rắn, kiểm tra từng cặp byte so với cặp đầu. Nếu có sự trùng khớp thì trò chơi kết thúc."
+ "<tt>a9</tt> và <tt>c9</tt> lần lượt là các mã bộ xử lý dành cho <tt>LDA</tt> và <tt>CMP</tt> có địa chỉ tức thời. <tt>01</tt> và <tt>02</tt> là đối số của các hướng dẫn này. <tt>d0</tt> là mã hoạt động cho <tt>BNE</tt> và đối số của nó là <tt>02</tt>. Điều này có nghĩa là \"bỏ qua hai byte tiếp theo\" (<tt>85 22</tt>, phiên bản tập hợp của <tt>STA $22</tt>). Hãy thử chỉnh sửa mã để <tt>STA</tt> lấy địa chỉ tuyệt đối 2 byte thay vì địa chỉ trang không byte đơn (ví dụ: thay đổi <tt>STA $22</tt> thành <tt>STA $2222</tt>). Tập hợp lại mã và xem lại kết xuất hex - đối số của <tt>BNE</tt> bây giờ phải là <tt>03</tt>, vì lệnh mà bộ xử lý bỏ qua hiện dài 3 byte."
+ "<tt>X</tt> giữ màu pixel và <tt>Y</tt> giữ vị trí của pixel hiện tại. Vòng lặp đầu tiên vẽ màu hiện tại dưới dạng pixel (thông qua thanh ghi <tt>A</tt>), đẩy màu vào ngăn xếp, sau đó tăng màu và vị trí. Vòng lặp thứ hai sẽ bật ngăn xếp, vẽ màu được bật lên dưới dạng pixel, sau đó tăng vị trí. Đúng như mong đợi, điều này tạo ra một mô hình được phản chiếu."
+ "<tt>SP</tt> là con trỏ ngăn xếp. Tôi chưa vào ngăn xếp, nhưng về cơ bản, thanh ghi này sẽ giảm đi mỗi khi một byte được đẩy lên ngăn xếp và tăng lên khi một byte được lấy ra khỏi ngăn xếp."
+ "<tt>PC</tt> là bộ đếm chương trình - đó là cách bộ xử lý biết nó hiện đang ở điểm nào trong chương trình. Nó giống như số dòng hiện tại của tập lệnh thực thi. Trong trình mô phỏng, mã được tập hợp bắt đầu từ vị trí bộ nhớ <tt>$0600</tt>, vì vậy <tt>PC</tt> luôn bắt đầu ở đó."
+ "<tt>JSR</tt> và <tt>RTS</tt> (\"chuyển tới chương trình con\" và \"trở về từ chương trình con\") là một bộ đôi năng động mà bạn thường thấy được sử dụng cùng nhau. <tt>JSR</tt> được sử dụng để chuyển từ vị trí hiện tại sang phần khác của mã. <tt>RTS</tt> trở về vị trí trước đó. Về cơ bản, điều này giống như gọi một hàm và trả về."
+ "<tt>JMP</tt> là bước nhảy không điều kiện. Đây là một ví dụ thực sự đơn giản để hiển thị nó trong thực tế:"
+ "<tt>BCC</tt> và <tt>BCS</tt> (\"rẽ nhánh khi cờ nhớ xóa\" và \"rẽ nhánh khi cờ nhớ đặt\") được sử dụng để rẽ nhánh dựa trên cờ nhớ. Viết chương trình sử dụng một trong hai."
+ "<b>Trang Không</b>: <tt>$0000</tt>-<tt>$00FF</tt> (256 byte đầu tiên, truy cập nhanh hơn)"
+ "<b>Trang Không</b> (<tt>$c0</tt>): Truy cập các vị trí bộ nhớ <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Trang Không,X/Y</b> (<tt>$c0,X</tt>): Thêm thanh ghi X/Y vào địa chỉ trang 0"
+ "<b>Z</b> (Không): Đặt khi kết quả bằng 0"
+ "<b>X, Y</b>: Thanh ghi chỉ mục để đánh địa chỉ và đếm"
+ "<b>W</b> hoặc Phím mũi tên lên (<tt>$77</tt>)"
+ "<b>V</b> (Tràn): Đặt khi phép tính số học gây ra tràn có dấu"
+ "<b>Ngăn xếp</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Lưu trữ các thanh ghi vào bộ nhớ"
+ "<b>SP</b> (Con trỏ ngăn xếp): Trỏ đến vị trí ngăn xếp hiện tại (bắt đầu tại <tt>$FF</tt>)"
+ "<b>SBC cần tập nhớ</b>: Đặt <tt>C</tt> trước khi trừ (hoạt động như mượn nghịch đảo). <tt>C</tt> xóa sau khi SBC cho biết đã xảy ra khoản vay."
+ "<b>S</b> hoặc phím Mũi tên xuống (<tt>$73</tt>)"
+ "<b>Tương đối</b> (<tt>nhãn</tt>): Nhánh sử dụng độ lệch 8 bit đã ký từ lệnh tiếp theo (−128…+127)"
+ "<b>Q</b> hoặc phím Enter/Return (<tt>$0D</tt>)"
+ "<b>Bộ nhớ chương trình</b>: Bắt đầu từ <tt>$0600</tt>"
+ "<b>PHA/PLA</b>: Đẩy/kéo bộ tích lũy vào/từ ngăn xếp"
+ "<b>PC</b> (Bộ đếm chương trình): Trỏ tới lệnh tiếp theo để thực thi"
+ "<b>N</b> (Phủ định): Đặt khi bit 7 của kết quả được đặt"
+ "<b>LDA/LDX/LDY</b>: Tải thanh ghi"
+ "<b>JSR/RTS</b>: Chuyển tới chương trình con/Trở về từ chương trình con"
+ "<b>JMP</b>: Nhảy vô điều kiện"
+ "<b>Gián tiếp</b> (<tt>($c000)</tt>: Tra cứu địa chỉ được lưu trữ tại vị trí nhất định"
+ "<b>Được Lập Chỉ Mục Gián Tiếp</b> (<tt>($c0),Y</tt>): Sử dụng địa chỉ trang không làm con trỏ để lấy địa chỉ cơ sở, sau đó thêm Y vào cơ sở đó"
+ "<b>Gián Tiếp Được Lập Chỉ Mục</b> (<tt>($c0,X)</tt>): Thêm X vào địa chỉ trang không, sau đó sử dụng kết quả làm con trỏ để lấy địa chỉ đích thực tế"
+ "<b>Ngay lập tức</b> (<tt>#$c0</tt>): Sử dụng giá trị thực tế"
+ "<b>INX/INY/DEX/DEY</b>: Thanh ghi tăng/giảm"
+ "<b>I</b> (Ngắt): Đặt khi ngắt bị tắt"
+ "<b>E</b> hoặc phím Space (<tt>$20</tt>)"
+ "<b>Bộ nhớ hiển thị</b>: <tt>$0200</tt>-<tt>$05FF</tt> (dùng cho đầu ra màn hình)"
+ "<b>Điều khiển hướng</b>:"
+ "<b>D</b> hoặc phím Mũi tên phải (<tt>$64</tt>)"
+ "<b>D</b> (Thập phân): Đặt khi bộ xử lý ở chế độ BCD (Binary Coded Decimal)"
+ "<b>So sánh ops</b>: <tt>CMP/CPX/CPY</tt> đặt <tt>N/Z/C</tt> giống như một phép trừ (thanh ghi − bộ nhớ) mà không lưu trữ kết quả."
+ "<b>C</b> (Carry): Đặt khi các phép tính số học tràn một byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Phân nhánh nếu bằng/không bằng/xóa mang/tập mang"
+ "<b>B</b> (Ngắt): Đặt khi lệnh BRK được thực thi"
+ "<b>Các nút hành động</b>:"
+ "<b>Tuyệt đối</b> (<tt>$c000</tt>): Truy cập bất kỳ vị trí bộ nhớ nào"
+ "<b>Tuyệt đối,X/Y</b> (<tt>$c000,X</tt>): Thêm thanh ghi X/Y vào địa chỉ tuyệt đối"
+ "<b>ADC/SBC</b>: Cộng/trừ có nhớ"
+ "<b>A</b> hoặc phím Mũi tên trái (<tt>$61</tt>)"
+ "<b>A</b> (Bộ tích lũy): Thanh ghi chính để tính toán và thao tác dữ liệu"
+ "<b><tt>$f</tt></b>: Màu xám nhạt (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: Xanh nhạt (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: Xanh nhạt (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: Xám (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: Xám đậm (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: Đỏ nhạt (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Phím được nhấn lần cuối (mã ASCII)"
+ "<b><tt>$FE</tt></b>: Trình tạo số ngẫu nhiên (đọc dưới dạng giá trị ngẫu nhiên 0-255)"
+ "<b><tt>$9</tt></b>: Nâu (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: Cam (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: Vàng (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: Xanh dương (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: Xanh lá (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: Màu tím (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: Màu lục lam (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: Đỏ (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: Trắng (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Dữ liệu vị trí con rắn (đầu, các đoạn thân, đuôi)"
+ "<b><tt>$0</tt></b>: Đen (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: Chiều dài con rắn"
+ "<b><tt>$02</tt></b>: Hướng rắn (1=lên, 2=phải, 4=xuống, 8=trái)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Vị trí của Apple"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> đã tạo <a href=\"https://Gist.github.com/wkjagt/9043907\">ý chính được chú thích đầy đủ của mã nguồn này</a>, vì vậy hãy theo dõi nội dung đó để biết thêm chi tiết."
+ "Ngôn ngữ hợp ngữ 6502 có một loạt các hướng dẫn phân nhánh, tất cả đều dựa trên việc các cờ nhất định có được đặt hay không. Trong ví dụ này, chúng ta sẽ xem xét <tt>BNE</tt>: \"Rẽ nhánh khi không bằng nhau\"."
+ "6502 Ngăn xếp đầy! Quay vòng..."
+ "6502 Ngăn xếp trống rỗng! Quay vòng..."
+ "(Trên thực tế, tôi có thông tin đáng tin cậy rằng bộ xử lý 6502 vẫn đang được <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> sản xuất và <a href=\"https://www.mouser.co.uk/c/?q=65C02\">bán cho những người có sở thích</a>, vậy nên rõ ràng 6502 <i>không</i> là ngôn ngữ chết! Ai biết?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values-zh/strings.xml b/packages/app-android/data/Android/src/main/res/values-zh/strings.xml
new file mode 100644
index 00000000..84d1d5f8
--- /dev/null
+++ b/packages/app-android/data/Android/src/main/res/values-zh/strings.xml
@@ -0,0 +1,485 @@
+
+
+ "学习 6502 汇编"
+ "学习 6502 汇编"
+ "学习 6502 汇编"
+ "வணக்கம்! 我们很高兴迎来泰米尔语翻译,由 தமிழ்நேரம் 贡献。நன்றி!"
+ "其表示间接寻址到的内存位置 <tt>$0411</tt>、<tt>$0410</tt> 与 <tt>$040f</tt>(显示中部的三个像素)。之所以反复强调,是因为完全理解间接寻址的工作方式非常重要。"
+ "wdm-output"
+ "编程"
+ "学习"
+ "作者:%1$s"
+ "_首选项"
+ "零页:<tt>$c0</tt>"
+ "零页,Y:<tt>$c0,Y</tt>"
+ "零页,X:<tt>$c0,X</tt>"
+ "零页内存使用"
+ "零页($0000–$00FF)"
+ "零标志(Z):当运算结果为零时置位。对条件分支至关重要——大多数条件跳转(BEQ、BNE)会检查该标志以依据是否为零来决定流程。"
+ "你的文件有未保存的更改。如不保存,这些更改将会丢失。"
+ "你已经看过 <tt>TAX</tt> 了。你大概能猜到 <tt>TAY</tt>、<tt>TXA</tt> 和 <tt>TYA</tt> 的作用,但请编写代码来验证你的假设。"
+ "你购买了这款应用,从而支持了这个开源项目。谢谢!"
+ "可以将屏幕看作 4 个横向条,每个条 32 × 8 像素。它们映射到 <tt>$0200-$02ff</tt>、<tt>$0300-$03ff</tt>、<tt>$0400-$04ff</tt> 和 <tt>$0500-$05ff</tt>。第一行像素是 <tt>$0200-$021f</tt>、<tt>$0220-$023f</tt>、<tt>$0240-$025f</tt> 等。"
+ "黄色"
+ "使用内置代码编辑器编写与编辑代码"
+ "在所有这些示例中,你可能会发现使用 <b>调试</b> 视图中的 <b>十六进制监视器</b> 观察内存变化很有帮助。从列表中选择一个内存区域即可查看该段——例如选择 <b>显示内存($0200–$05FF)</b> 观察屏幕像素,或选择 <b>零页($0000–$00FF)</b> 检查前 256 字节。"
+ "采用绝对寻址时,完整的内存位置作为指令的参数。例如:"
+ "欢迎越南语翻译,完全由 Loc Huynh (hthienloc) 贡献。"
+ "欢迎波兰语翻译,最初由 Micro Wave 贡献。Dziękujemy!"
+ "我们已经简单了解了处理器状态部分(包括 <tt>A</tt>、<tt>PC</tt> 等),但这些都是什么意思呢?"
+ "我们在学习标签中添加了新的示例部分,您可以直接在应用程序中探索和运行带有完整注释的6502程序。从我们精选的贪吃蛇游戏示例开始,看看这些像素如何焕发生机!"
+ "数值 <tt>$00</tt>-<tt>$0F</tt> 代表 16 种颜色(<tt>$00</tt>=黑,<tt>$01</tt>=白)"
+ "使用自定义主色"
+ "使用自定义强调色"
+ "更新游戏状态"
+ "未保存的更改"
+ "与零页,Y 不同,绝对,Y 不能与 <tt>STX</tt> 配合使用,但可用于 <tt>LDA</tt> 与 <tt>STA</tt>。"
+ "底层更新:升级至 TypeScript 6、Vite 8,以及其他依赖升级,以提升性能和稳定性。"
+ "无法将代码重定位到 64K 内存之外"
+ "无法找到/解析给定的地址/标签"
+ "两条与栈有关的指令是 <tt>PHA</tt> 与 <tt>PLA</tt>,分别是\"压栈累加器\"和\"出栈累加器\"。下面是它们的示例。"
+ "两个新的示例程序,都来自大家:Jacob 的 Dino Run 和 edit12 的 Line Buster 6502。它们是通过分享按钮提交的首批示例,我们希望收到更多。"
+ "教程 <sub>作者 <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>,基于 CC BY 4.0 许可</sub>"
+ "教程"
+ "试着编写分别使用 6502 各种寻址模式的代码片段。记得,你可以使用 <b>调试</b> 视图中的 <b>十六进制监视器</b> 观察一段内存。"
+ "试用6502微处理器的示例程序。"
+ "尝试示例程序"
+ "试着修改前三个像素的颜色。"
+ "切换侧边栏"
+ "为了判断方向是否为 <tt>1</tt>、<tt>2</tt>、<tt>4</tt> 或 <tt>8</tt>,代码会持续右移直到进位被置位。一次 <tt>LSR</tt> 表示\"上\",两次表示\"右\",依此类推。"
+ "标题"
+ "本次发布带来了充满掌机灵感的主题与可自定义配色;引入了自适应的平板与桌面布局,让一切尽在眼前,非常适合学习汇编开发复古游戏时的长时间编码。特别感谢新贡献者 @mmartinortiz 提供的优秀桌面布局思路。还包括多项技术改进,如更严格的 TypeScript 设置、自定义 GtkSourceView 样式方案,以及增强的调试器控件,以获得更顺畅的开发体验。"
+ "这个有点奇怪,像是零页 X 与间接寻址的结合。基本做法是取零页地址,加上 <tt>X</tt> 的值,然后用结果去查找一个双字节地址。例如:"
+ "这将值 <tt>$11</tt> 写入内存位置 <tt>$10</tt>,将 <tt>$10</tt> 写入 <tt>$12</tt>,将 <tt>$0f</tt> 写入 <tt>$14</tt>。随后将值 <tt>$04</tt> 写入 <tt>$11</tt>、<tt>$13</tt> 与 <tt>$15</tt>。得到的内存如下所示:"
+ "这是寻址开始变得有趣的地方。在此模式下,给定一个零页地址,然后将 <tt>X</tt> 寄存器的值加到该地址上。示例如下:"
+ "这等价于零页 X,但只能与 <tt>LDX</tt> 与 <tt>STX</tt> 配合使用。"
+ "这些是零页 X、零页 Y 的绝对寻址版本。例如:"
+ "还有一个非常实际的理由:复古游戏开发。自制游戏圈依然活跃——新游戏仍在<a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">为 NES 发布</a>(有些甚至做成实体卡带),以及许多其他经典系统;NES 只是一个例子。即使你的目标是 SNES 之类的系统,从 6502 开始也很值得:SNES 的 CPU(65C816)向后兼容 6502,所以你在这里学到的基础——寄存器、寻址模式和核心指令集——可以直接应用。"
+ "那么为什么选择 6502?为什么不是像 <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a> 这样<i>有用的</i>汇编语言?其实我认为学习 x86 并不那么有用。你的日常工作中可能永远不需要<i>编写</i>汇编语言——对某些人来说这是学术练习,是拓展思维的方式。6502 诞生于不同的时代,那时大多数开发者直接编写汇编,而非使用这些新兴的高级编程语言。因此它被设计为对人类友好。更现代的汇编语言是为编译器设计的,所以交给它们吧。而且,6502 很<i>有趣</i>。从来没人说过 x86<i>有趣</i>。"
+ "零页内存用于存储若干游戏状态变量,如游戏顶部注释所示。从 <tt>$00</tt>、<tt>$01</tt> 与 <tt>$10</tt> 起的内容均为表示两字节内存位置的字节对,将通过间接寻址查找。这些内存位置都在 <tt>$0200</tt> 到 <tt>$05ff</tt> 之间——对应游戏主机的显示区。例如,若 <tt>$00</tt> 与 <tt>$01</tt> 的值分别为 <tt>$01</tt> 与 <tt>$02</tt>,则它们指向显示的第二个像素(<tt>$0201</tt>——记住,间接寻址低位在前)。"
+ "6502 处理器中的栈与其他栈一样——值被压入栈,然后弹出(6502 术语中称为\"拉出\")。栈的当前深度由栈指针(一个特殊寄存器)测量。栈位于内存的 <tt>$0100</tt> 到 <tt>$01ff</tt> 之间。栈指针初始为 <tt>$ff</tt>,指向内存位置 <tt>$01ff</tt>。当有字节压入栈时,栈指针变为 <tt>$fe</tt>,即内存位置 <tt>$01fe</tt>,依此类推。"
+ "调用栈"
+ "教程中的贪吃蛇游戏"
+ "该子程序的结果是在 <tt>$00</tt> 中放入一个随机字节,在 <tt>$01</tt> 中放入 2 到 5 之间的随机数。由于间接寻址低位在前,这对应于 <tt>$0200</tt> 到 <tt>$05ff</tt> 之间的内存地址——正好是用于绘制显示的范围。"
+ "处理器之所以知道返回位置,是因为 <tt>JSR</tt> 在跳转前会将\"下一条指令地址减一\"压入栈中;<tt>RTS</tt> 弹出该地址,加一后跳转到该位置。示例:"
+ "问题在于 <tt>$184</tt> 太大,无法放入单字节(最大为 <tt>$FF</tt>),而寄存器只能保存单字节。不过没关系,处理器并不\"笨\"。如果你足够仔细,会注意到该运算后进位标志被置为 <tt>1</tt>。这就是判断依据。"
+ "<tt>BNE</tt> 的相反指令是 <tt>BEQ</tt>。试着编写一个使用 <tt>BEQ</tt> 的程序。"
+ "<tt>ADC</tt> 的相反指令是 <tt>SBC</tt>(带借位减)。编写一个使用该指令的程序。"
+ "浏览器断网时的跑酷游戏,用 6502 汇编写成"
+ "接下来的子程序 <tt>generateApplePosition</tt> 将苹果位置设置为屏幕上的随机位置。首先,将一个随机字节载入累加器(本模拟器中 <tt>$fe</tt> 为随机数生成器),并存入 <tt>$00</tt>。随后再载入一个不同的随机字节,与 <tt>$03</tt> 进行 <tt>AND</tt> 运算。此处需要一点额外说明。"
+ "接下来的子程序 <tt>checkCollision</tt> 进一步调用 <tt>checkAppleCollision</tt> 与 <tt>checkSnakeCollision</tt>。<tt>checkAppleCollision</tt> 仅检查保存苹果位置的两个字节是否与保存蛇头位置的两个字节相同;若相同,则增长长度并生成新的苹果位置。"
+ "下一行 <tt>BNE decrement</tt> 若 <tt>Z</tt> 标志为 <tt>0</tt>(表示 <tt>CPX</tt> 比较的两个值不相等)则跳转到 decrement 标签,否则不做任何事并将 <tt>X</tt> 存入 <tt>$0201</tt>,随后结束程序。"
+ "接下来的部分根据方向更新蛇头。这可能是代码中最复杂的部分,完全依赖于内存位置如何映射到屏幕,因此我们详细看一下。"
+ "长度初始化为 <tt>4</tt>,因此 <tt>X</tt> 起始为 <tt>3</tt>。<tt>LDA $10,x</tt> 将 <tt>$13</tt> 的值载入 <tt>A</tt>,随后 <tt>STA $12,x</tt> 将该值存入 <tt>$15</tt>。<tt>X</tt> 递减并循环。此时 <tt>X</tt> 为 <tt>2</tt>,于是载入 <tt>$12</tt> 并存入 <tt>$14</tt>。当 <tt>X</tt> 为正时循环(<tt>BPL</tt> 表示\"为正则分支\")。"
+ "最后一个子程序 <tt>spinWheels</tt> 用于避免游戏运行过快。<tt>spinWheels</tt> 仅将 <tt>X</tt> 从零向下计数,直到再次回到零。第一次 <tt>dex</tt> 会回绕,使 <tt>X</tt> 变为 <tt>#$ff</tt>。"
+ "最后一部分展示处理器标志。每个标志占一位,因此七个标志共占一个字节。处理器通过设置标志来描述上一条指令的信息。稍后会详细说明。<a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">在此了解更多寄存器与标志</a>。"
+ "十六进制值 <tt>$03</tt> 的二进制表示为 <tt>00000011</tt>。<tt>AND</tt> 指令对参数与累加器执行按位与。例如,若累加器为 <tt>10101010</tt>,与 <tt>00000011</tt> 进行 <tt>AND</tt> 的结果为 <tt>00000010</tt>。"
+ "十六进制应类似如下:"
+ "游戏循环"
+ "前两个字节保存苹果的位置;每次蛇吃到苹果都会更新。字节 <tt>$02</tt> 保存当前方向:<tt>1</tt> 表示上,<tt>2</tt> 右,<tt>4</tt> 下,<tt>8</tt> 左。为何使用这些数值稍后会解释。"
+ "第一个子程序 <tt>readKeys</tt> 负责接收用户输入。本模拟器中,内存位置 <tt>$ff</tt> 保存最近一次按键的 ASCII 码。该值被载入累加器后,与 <tt>$77</tt>(W)、<tt>$64</tt>(D)、<tt>$73</tt>(S)与 <tt>$61</tt>(A)比较。若任一比较成立,程序跳转到相应分支。"
+ "第一行展示了 <tt>A</tt>、<tt>X</tt> 与 <tt>Y</tt> 寄存器(<tt>A</tt> 常称为\"累加器\")。每个寄存器保存一个字节。大多数操作都作用于这些寄存器的内容。"
+ "第一条指令使执行跳转到 <tt>init</tt> 标签。它设置 <tt>X</tt>,然后返回到下一条指令 <tt>JSR loop</tt>。这会跳到 <tt>loop</tt> 标签,并递增 <tt>X</tt> 直到等于 <tt>$05</tt>。之后返回到下一条指令 <tt>JSR end</tt>,跳转到文件结尾。这说明了如何组合使用 <tt>JSR</tt> 与 <tt>RTS</tt> 来编写模块化代码。"
+ "其效果是屏蔽累加器的最低两位,其余位置零。这样可将 0–255 的数值转换为 0–3 的范围。"
+ "下面的代码块包含整个游戏的源代码。我会在接下来的部分解释其工作原理。"
+ "黑色的游戏控制台屏幕现在应该在左上角显示三个彩色\"像素\"。"
+ "该应用是专为GNOME界面字体设计的。在其他系统上,本应用使用所在系统的字体绘制,字体通常较小。"
+ "Y 索引寄存器与 X 类似,无特殊功能。常用于索引寻址与数据移动。"
+ "X 索引寄存器用于索引寻址与计数操作。可保存循环计数器、数组索引,且在以基址加 X 偏移访问内存时至关重要。特殊:TSX/TXS 在 X 与栈指针之间传送。"
+ "栈指针管理子程序与中断的调用栈。其初值为 $FF(栈顶),并向下增长。用于 PUSH/PULL 操作、JSR/RTS 调用与中断处理。对嵌套调用至关重要。"
+ "程序计数器包含下一条待执行指令的内存地址。每条指令后自动递增,可被跳转、分支、调用与返回修改。对程序流程控制与调试至关重要。"
+ "累加器(A)是算术与逻辑运算的主要寄存器。ADD、SUBTRACT、AND、OR 等基本计算都使用该寄存器。它是 6502 汇编中最常用的寄存器。"
+ "<tt>loop</tt> 子程序本身只是按顺序调用多个子程序,然后循环回到自身:"
+ "<tt>init</tt> 子程序调用两个子程序:<tt>initSnake</tt> 和 <tt>generateApplePosition</tt>。<tt>initSnake</tt> 设置蛇的方向和长度,然后加载蛇头与身体的初始内存位置。<tt>$10</tt> 处的字节对包含蛇头的屏幕位置,<tt>$12</tt> 处的字节对包含唯一身体段的位置,<tt>$14</tt> 包含尾部位置(尾部是身体的最后一段,用黑色绘制以保持蛇的移动)。这在以下代码中实现:"
+ "<tt>BIT</tt> 指令与 <tt>AND</tt> 相似,但计算结果仅用于设置零标志——实际结果会被丢弃。仅当累加器与参数进行 AND 运算的结果为零时,零标志才会置位。对于 2 的幂,仅当两个数不相同时零标志才会置位。例如,<tt>0001 AND 0001</tt> 不为零,但 <tt>0001 AND 0010</tt> 为零。"
+ "6502 使用 16 位地址总线,这意味着处理器可以访问 65536 字节的内存。请记住一个字节用两个十六进制字符表示,因此内存位置通常表示为 <tt>$0000 - $ffff</tt>。访问这些内存位置有多种方式,详述如下。"
+ "感谢你使用开源软件。"
+ "用 LSR 和 BCC 测试 A 的第 0 位,并将结果 1 或 0 存入 A"
+ "在虚拟游戏主机上测试你的作品"
+ "Tervetuloa! 我们很高兴迎来芬兰语翻译,由 Jiri Grönroos 友情贡献。Kiitos!"
+ "青色"
+ "系统字体,使用GNOME大小"
+ "系统默认"
+ "语法错误 第 %1$d 行:%2$s"
+ "支持者"
+ "支持"
+ "提交"
+ "样式"
+ "已停止"
+ "6502汇编逐步指南"
+ "单步"
+ "状态标志"
+ "<b>SP</b>(栈指针):指向当前栈位置(初始为 <tt>$FF</tt>)"
+ "栈示例"
+ "栈($0100–$01FF)"
+ "特殊内存位置(模拟器)"
+ "源 URL"
+ "有些指令不涉及内存位置(如 <tt>INX</tt> —— 递增 <tt>X</tt> 寄存器)。这称为隐式寻址——参数由指令本身隐含。"
+ "那为什么要学 6502?它不是“已死”的语言吗?拉丁语不也如此?但仍有人教授。<a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "那么这个程序实际上在做什么?我们来单步看看。点击 <b>重置</b>,然后用 <b>单步</b> 逐条执行程序。<b>调试</b> 视图会显示寄存器与内存——在小窗口上它是一个独立标签页,在宽屏窗口上它是游戏控制台下方的面板。点击一次 <b>单步</b>,你会在调试视图中看到 <tt>A=</tt> 从 <tt>$00</tt> 变为 <tt>$01</tt>,<tt>PC=</tt> 从 <tt>$0600</tt> 变为 <tt>$0602</tt>。"
+ "指令 <tt>STA $0200</tt> 将寄存器 <tt>A</tt> 的值写入内存位置 <tt>$0200</tt>。再点击 <b>Step</b> 四次执行其余指令,并留意 <tt>A</tt> 的变化。"
+ "以 <tt>upKey</tt> 为例,若当前方向为下(4),位测试结果为零。<tt>BNE</tt> 表示“若零标志清除则分支”,因此将跳转到 <tt>illegalMove</tt>,该分支仅从子程序返回。否则将新方向(此例为 1)写入相应内存位置。"
+ "那么,让我们开始吧!本应用包含我为该交互式教程改造的 <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 汇编器与模拟器</a>。点击下方代码块中的 <b>复制</b> 按钮将示例代码复制到编辑器,然后用 <b>汇编</b> 汇编代码,再用 <b>运行</b> 运行它。这些操作既可以作为按钮使用,也可以在菜单中找到。"
+ "到目前为止我们只能编写没有分支逻辑的基础程序。让我们改变这一点。"
+ "贪吃蛇内存使用情况"
+ "贪吃蛇游戏数据($00–$15)"
+ "贪吃蛇游戏"
+ "板岩灰"
+ "模拟器故障"
+ "模拟器"
+ "共享的代码示例现在包含 CC-BY-4.0 许可证信息,明确说明社区如何使用和基于您的贡献进行构建。"
+ "分享您的示例"
+ "分享示例"
+ "分享"
+ "Shalom! 我们很高兴迎来希伯来语翻译,由 Menachem (naattxx) 完整贡献。Toda raba!"
+ "严肃地说,我认为理解汇编语言很有价值。汇编是计算机中仍具可读性的最低抽象层,它直接对应你的处理器执行的字节。如果你理解其工作方式,你基本上就成为了计算机的<a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">魔法师</a>。"
+ "Selamat datang! 我们也迎来了印度尼西亚语翻译,由 Arif Budiman 友情贡献。Terima kasih!"
+ "屏幕映射到内存范围 <tt>$0200</tt>-<tt>$05FF</tt>"
+ "多项新增翻译:法语、国际语、葡萄牙语、葡萄牙语(巴西)、荷兰语、西班牙语、乌克兰语、日语和简体中文"
+ "已保存为 %1$s"
+ "保存更改?"
+ "另存为…"
+ "保存汇编文件"
+ "保存"
+ "运行中的贪吃蛇"
+ "运行"
+ "将本节中的第一个示例改为使用 <tt>Y</tt> 寄存器而不是 <tt>X</tt> 寄存器。"
+ "查看您的示例对其他人的显示方式。点击<b>提交</b>将在 GitHub 上创建一个 issue。您需要使用 GitHub 帐户登录才能完成提交。"
+ "继续"
+ "重置"
+ "渲染游戏"
+ "相对:<tt>$c0</tt>(或标签)"
+ "相对寻址用于分支指令。这类指令取一个字节,作为相对于下一条指令的偏移量。"
+ "寄存器与标志位"
+ "寄存器"
+ "缩小十六进制监视器的默认地址范围以提升效率"
+ "红色"
+ "读取输入"
+ "随机/输入($FE–$FF)"
+ "退出"
+ "快速提示"
+ "紫色"
+ "为复古游戏主机编程"
+ "程序已暂停"
+ "程序已完成。重置后可再次单步执行程序。"
+ "程序在 PC=$%1$s 处完成"
+ "程序已完成"
+ "程序存储($0600–$FFFF)"
+ "<b>PC</b>(程序计数器):指向下一条将要执行的指令"
+ "处理器状态寄存器"
+ "处理器标志位"
+ "主色:黄色"
+ "主色:青色"
+ "主色:板岩灰"
+ "主色:红色"
+ "主色:紫色"
+ "主色:粉色"
+ "主色:橙色"
+ "主色:绿色"
+ "主色:蓝色"
+ "主色"
+ "上一步"
+ "预览您的示例"
+ "预览"
+ "再次点击<b>单步</b>执行第二条指令。游戏机的左上角像素现在应为白色。此模拟器使用内存地址 <tt>$0200</tt> 到 <tt>$05ff</tt> 在显示器上绘制像素。<tt>$00</tt> 到 <tt>$0f</tt> 表示 16 种不同的颜色(<tt>$00</tt> 为黑色,<tt>$01</tt> 为白色),因此将值 <tt>$01</tt> 存入内存地址 <tt>$0200</tt>,就会在左上角绘制一个白色像素。这比真实计算机输出视频的方式简单,但目前够用了。"
+ "预处理…"
+ "开始"
+ "粉色"
+ "非常适合爱好者、学生,以及对计算机底层工作原理感兴趣的任何人!"
+ "暂停"
+ "溢出标志:当算术运算结果超出有符号 8 位范围(-128 到 +127)时置位,用于检测带符号运算错误。"
+ "整体结构"
+ "第 %1$d 行分支超出范围(分支限制为 -128 到 +127):%2$s"
+ "第一个程序"
+ "按四个 32×8 像素的水平带进行组织"
+ "橙色"
+ "通过移除不必要的权限优化了 Flatpak 配置"
+ "已打开 %1$s"
+ "打开…"
+ "开源"
+ "汇编文件"
+ "当值沿着蛇身下移后,需要决定如何处理蛇头。先将方向加载到 <tt>A</tt>。<tt>LSR</tt> 表示\"逻辑右移\",即将所有位右移一位。最低位会移入进位标志,因此如果累加器为 <tt>1</tt>,执行 <tt>LSR</tt> 后变为 <tt>0</tt>,且进位标志被置位。"
+ "复位(模拟器)时:<tt>P = $30</tt>(第 5 位与 <tt>B</tt> 置位;<tt>D</tt> 与 <tt>I</tt> 清零)"
+ "确定"
+ "最后使用以上的功能实现一个贪吃蛇游戏。"
+ "无需编程经验。通过交互式课程循序渐进地提升你的技能。"
+ "没有可运行的代码。"
+ "未提供地址或标签"
+ "接下来是 <tt>drawSnake</tt>。这也很简单——先抹掉尾巴再绘制蛇头。将 <tt>X</tt> 设为蛇长以索引到正确像素,并把 <tt>A</tt> 置零后使用索引间接寻址写入。随后重新载入 <tt>X</tt> 以索引到蛇头,将 <tt>A</tt> 置为 1 并存入 <tt>($10,x)</tt>。<tt>$10</tt> 存放蛇头的双字节位置,因此会在当前蛇头位置绘制一个白色像素。由于只移动蛇头与尾巴,这已足够让蛇\"动起来\"。"
+ "新增检查代码的工具,包括反汇编器与可快速切换的内存查看器"
+ "负标志(N):当结果最高位(位 7)为 1 时置位。用于有符号数比较,指示值在二进制补码表示中是否为负。"
+ "几乎所有游戏的核心都是游戏循环。所有游戏循环都具有相同的基本形式:接受用户输入,更新游戏状态,渲染游戏状态。这个循环也不例外。"
+ "消息"
+ "内存位置 <tt>$01</tt> 与 <tt>$02</tt> 分别包含 <tt>$05</tt> 与 <tt>$07</tt>。可将 <tt>($00,X)</tt> 理解为 <tt>($00 + X)</tt>。此处 <tt>X</tt> 为 <tt>$01</tt>,因此等价于 <tt>($01)</tt>。接下来的过程与标准间接寻址相同——查找 <tt>$01</tt> 与 <tt>$02</tt> 两字节(<tt>$05</tt> 与 <tt>$07</tt>)组成地址 <tt>$0705</tt>。这是上一条指令中寄存器 <tt>Y</tt> 存入的地址,因此寄存器 <tt>A</tt> 将得到与 <tt>Y</tt> 相同的值,只是路径更曲折一些。此模式并不常见。"
+ "内存映射"
+ "修复了许多小问题以提升整体可用性"
+ "重大 UI 改进:引入具有动态状态的现代悬浮操作按钮以直观控制程序,并使用现代 Adwaita 组件彻底重构调试器部件。"
+ "Line Buster 6502"
+ "浅色样式"
+ "通过示例学习从未如此简单。深入研究可运行的代码,调整它,弄坏它,再修复它——最优秀的程序员当年就是这样学习的!"
+ "学习如何使用 PHA 和 PLA 指令操作栈"
+ "学习如何为 6502 微处理器编程。"
+ "一边编码一边了解计算机历史"
+ "Learn 6502 现在也能在 Windows 和 macOS 上运行。如果您一直想把它推荐给不用 Linux 的朋友,现在可以了。"
+ "Learn 6502 现已运行在 GNOME 50 上!感谢 Sabri Ünal 贡献了运行时更新。"
+ "学习 6502 汇编"
+ "学习"
+ "标签处理失败"
+ "标签已在第 %1$d 行定义:%2$s"
+ "标签 %1$s 已被用作符号;请重命名其中一个"
+ "跳转与分支类似,但有两点不同:第一,跳转不是条件执行;第二,跳转接受两字节的绝对地址。对于小型程序,这一点不太重要,因为通常使用标签,汇编器会根据标签计算出正确的内存地址。对于较大的程序,跳转是从代码的一处移动到另一处的唯一方式。"
+ "跳转指令"
+ "JSR/RTS"
+ "JMP"
+ "介绍"
+ "中断禁用标志(I):置位时屏蔽所有可屏蔽中断(IRQ),仅不可屏蔽中断(NMI)仍会发生。用于必须不可被打断的关键代码区。"
+ "界面字体"
+ "交互式教程将带你从入门到进阶"
+ "交互式教程"
+ "汇编语言中的指令类似于一小组预定义函数。所有指令接受零个或一个参数。下面是一些带注释的源代码,用于介绍几种不同的指令:"
+ "指令集"
+ "初始化"
+ "间接寻址:<tt>($c000)</tt>"
+ "间接索引寻址:<tt>($c0),Y</tt>"
+ "间接索引类似于索引间接但更直观:并非在解引用<i>之前</i>把 <tt>X</tt> 加到地址上,而是先解引用零页地址,再将寄存器 <tt>Y</tt> 加到得到的基址上。"
+ "间接寻址使用一个绝对地址去查找另一个地址。第一个字节给出目标地址的低字节,紧随其后的字节给出高字节。理解起来可能有些绕,下面是个例子:"
+ "正在索引标签…"
+ "索引间接寻址:<tt>($c0,X)</tt>"
+ "索引寄存器 Y:用于寻址"
+ "索引寄存器 X:用于寻址"
+ "在这个简短教程中,我将向你展示如何开始编写 6502 汇编语言。6502 处理器在七八十年代非常流行,为许多著名计算机提供动力,如 <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>、<a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>、<a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>、<a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a> 和 <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>。《飞出个未来》中的 Bender <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">有一个 6502 处理器作为大脑</a>。<a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">甚至终结者也是用 6502 编程的</a>。"
+ "在本示例中,<tt>$f0</tt> 含有 <tt>$01</tt>,<tt>$f1</tt> 含有 <tt>$cc</tt>。指令 <tt>JMP ($f0)</tt> 会查找 <tt>$f0</tt> 与 <tt>$f1</tt> 这两个字节(<tt>$01</tt> 与 <tt>$cc</tt>),并将其组合成地址 <tt>$cc01</tt> 作为新的程序计数器。请汇编并单步运行上面的程序以查看效果。关于 <tt>JMP</tt> 的更多内容见 <a href=\"#jumping\">跳转</a> 部分。"
+ "在此情况下,<tt>($01)</tt> 会查找 <tt>$01</tt> 与 <tt>$02</tt> 两个字节(<tt>$03</tt> 与 <tt>$07</tt>),组成地址 <tt>$0703</tt>。再将寄存器 <tt>Y</tt> 的值加到该地址得到最终地址 <tt>$0704</tt>。"
+ "在此汇编器中,我们可以定义表示数字的描述性常量(或符号)。然后代码的其余部分可以简单地使用常量而不是字面数字,这立即让我们清楚正在处理什么。您可以在名称中使用字母、数字和下划线。"
+ "在编辑器中<b>键入</b>(不要粘贴)以下代码:"
+ "在汇编语言中,您通常会使用标签与分支指令。但在汇编时,此标签会转换为单字节相对偏移量(从下一条指令向前或向后移动的字节数),因此分支指令只能在大约256字节范围内前后移动。这意味着它们只能用于在局部代码中移动。要移动更远,您需要使用跳转指令。"
+ "改进游戏控制台性能,实现更流畅的游戏体验"
+ "改进移动设备的游戏屏幕和控件"
+ "改进描述,使其对非技术用户更加友好"
+ "隐式"
+ "立即寻址:<tt>#$c0</tt>"
+ "立即寻址并不直接处理内存地址——该模式使用字面值。例如,<tt>LDX #$01</tt> 将值 <tt>$01</tt> 载入 <tt>X</tt> 寄存器。这与零页指令 <tt>LDX $01</tt>(将内存位置 <tt>$01</tt> 的值载入 <tt>X</tt>)完全不同。"
+ "如果您的系统语言是中文,应用会重新以中文显示。此前它曾错误地回退到英文。"
+ "如果您的示例基于或受到另一个示例的启发,您可以提供源 URL。"
+ "如果你会其中任意一种语言,欢迎协助审阅或改进翻译。你可以通过应用内链接、我们的翻译平台,或提交 Issue 来贡献。"
+ "如果加法结果超过一个字节,地址会回绕。例如:"
+ "IDE"
+ "这里不深入说明每个方向的细节,但以上解释已经足够你通过一点练习自行掌握。"
+ "隐藏"
+ "已生成十六进制转储。"
+ "十六进制转储"
+ "十六进制监视器"
+ "示例如下。注意立即数操作数仍以前缀 <tt>#</tt> 表示。"
+ "帮助"
+ "希伯来语也是我们首个从右向左书写的语言:得益于 Menachem 的测试和贡献,应用现已支持从右向左的布局,为支持更多 RTL 语言做好了准备。"
+ "绿色"
+ "开局不错——你已完成第一章!"
+ "有自己很酷的6502作品吗?与社区分享吧!您现在可以直接从应用程序内提交代码示例。只需点击分享按钮,我们将自动为您创建GitHub issue和pull request。"
+ "有很酷的 6502 示例吗?\n与社区分享吧!"
+ "在不同区域之间移动更复杂,因为还需要考虑高字节。例如,从 <tt>$02e1</tt> 向下应到达 <tt>$0301</tt>。幸运的是这并不难:将 <tt>$20</tt> 加到 <tt>$e1</tt> 得到 <tt>$01</tt> 并置位进位位。如果进位被置位,我们还需要递增高字节。"
+ "德语和西班牙语已由贡献者验证。其他语言为 AI 辅助的初稿,需要人工校对。"
+ "切换屏幕时游戏现在会自动暂停"
+ "手柄按键:"
+ "GNOME"
+ "GNOME"
+ "完整注释版贪吃蛇游戏"
+ "全部内存($0000–$FFFF)"
+ "找到 %1$d 个标签。"
+ "找到 %1$d 个标签。"
+ "Linux 现在还有 AppImage:一个文件,无需安装,在我们没有打包的发行版上也能用。"
+ "字体"
+ "跟随系统样式"
+ "修复了 PostmarketOS 上的构建错误,提升了移动端兼容性"
+ "修复了学习部分的返回按钮在桌面和平板模式下始终可见的问题,即使没有打开子页面。"
+ "首先,<tt>readkeys</tt> 检查是否按下了方向键(W、A、S、D),若是则相应设置蛇的方向。随后 <tt>checkCollision</tt> 检查蛇是否与自身或苹果碰撞。<tt>updateSnake</tt> 根据方向更新蛇的内部表示。然后绘制苹果和蛇。最后,<tt>spinWheels</tt> 让处理器忙等,以防游戏运行过快,可将其视作 sleep 命令。游戏会一直运行,直到蛇撞墙或撞到自己。"
+ "首先将值 <tt>$08</tt> 加载到寄存器 <tt>X</tt>。下一行是一个标签。标签用于标记程序中的位置,以便稍后返回。经过标签后对 <tt>X</tt> 递减,将其存入 <tt>$0200</tt>(左上角像素),然后与 <tt>$03</tt> 比较。<a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> 比较 <tt>X</tt> 寄存器与另一个值;若两值相等,则 <tt>Z</tt> 标志置为 <tt>1</tt>,否则置为 <tt>0</tt>。"
+ "第一行:<tt>$0200</tt>-<tt>$021F</tt>,第二行:<tt>$0220</tt>-<tt>$023F</tt>,以此类推。"
+ "Learn 6502 Assembly for GNOME 首次发布"
+ "最后,字节 <tt>$03</tt> 存放蛇的当前长度(按内存字节计,因此长度 4 代表 2 个像素)。"
+ "填写有关您的 6502 示例的信息以与社区分享"
+ "文件“%1$s”有未保存的更改"
+ "复制到剪贴板失败"
+ "练习"
+ "练习"
+ "逐条执行指令而非连续运行"
+ "示例"
+ "已提交示例供审核"
+ "虽然这将是一个简单版本,代码会比以往示例大得多。我们需要同时跟踪游戏各方面的多个内存位置。我们也可以像之前那样自己在程序中做必要的“簿记”,但规模变大后会很繁琐且易出错。相反,我们现在让汇编器替我们处理一部分琐事。"
+ "奇偶判断"
+ "掌握这些知识后,你应该能看出指令 <tt>LDA #$01</tt> 会把十六进制值 <tt>$01</tt> 加载到寄存器 <tt>A</tt> 中。关于寄存器的更多细节将在下一节介绍。"
+ "改进十六进制监视器的地址范围输入,便于编辑数值"
+ "改进了应用呈现与无障碍性"
+ "启用单步模式"
+ "启用调试器"
+ "每个分支(如 <tt>upKey</tt>、<tt>rightKey</tt> 等)首先检查当前方向是否与新方向相反。这需要一点额外的处理。"
+ "完成"
+ "显示布局"
+ "显示内存($0200–$05FF)"
+ "探索经典计算机与游戏机编程的迷人世界!学习 6502 汇编语言——这正是驱动 NES、Commodore 64 和 Apple II 等标志性系统的代码。"
+ "放弃"
+ "已生成反汇编。"
+ "反汇编"
+ "禁用以提升性能"
+ "Dino Run"
+ "描述"
+ "十进制标志(D):启用 BCD(压缩十进制)模式。置位时,ADC/SBC 按十进制数字(0–9)处理,而非二进制。用于财务计算和十进制运算。"
+ "调试器仅在可见时更新,减少不必要的处理"
+ "调试器"
+ "使用实时检查工具调试你的程序"
+ "调试设置"
+ "调试"
+ "深色样式"
+ "创建游戏"
+ "复制到编辑器"
+ "复制到剪贴板"
+ "已复制到剪贴板"
+ "继续"
+ "确认"
+ "常用指令"
+ "带注释的贪吃蛇游戏"
+ "调色板"
+ "代码编辑器与虚拟游戏主机"
+ "代码已复制到编辑器"
+ "代码汇编成功,%1$d 字节。"
+ "代码"
+ "试着修改内存中最后一个像素的颜色 (内存地址 <tt>$05ff</tt>)。"
+ "进位标志(C):加法产生进位时置位;减法需要借位时清零。用于多字节运算以及移位/循环(BCS/BCC)。"
+ "取消"
+ "提交即表示您同意您的示例将根据 <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a> 进行许可。"
+ "用挡板和球打掉砖块。"
+ "中断标志(B):执行 BRK(中断)指令时置位。用于区分软件中断(BRK)与硬件中断,帮助在中断服务程序中识别中断来源。"
+ "分支"
+ "蓝色"
+ "由于游戏状态以像素位置存储,渲染游戏非常直接。第一个子程序 <tt>drawApple</tt> 极其简单:将 <tt>Y</tt> 设为 0,向累加器加载一个随机颜色,然后将该值存储到 <tt>($00),y</tt>。<tt>$00</tt> 是苹果位置的存储处,因此 <tt>($00),y</tt> 会解引用到该内存位置。详情请阅读 <a href=\"#addressing\">寻址模式</a> 中的“间接索引”部分。"
+ "返回"
+ "作者"
+ "在低层实现上,该子程序稍微复杂一些。首先将长度加载到寄存器 <tt>X</tt>,随后对其递减。下面的片段展示了蛇的初始内存状态。"
+ "汇编文件"
+ "Assembly"
+ "正在汇编…"
+ "汇编成功"
+ "汇编以下代码,然后打开 <b>调试</b> 视图并查看 <b>十六进制转储</b>,即可看到汇编结果。"
+ "汇编代码,然后打开 <b>调试</b> 视图并单步执行,观察 <tt>A</tt> 与 <tt>X</tt> 寄存器。在 <tt>ADC #$c4</tt> 这一行会发生点奇怪的事。你也许认为 <tt>$c0</tt> 加上 <tt>$c4</tt> 会得到 <tt>$184</tt>,但该处理器给出的结果是 <tt>$84</tt>。为什么呢?"
+ "汇编代码后,使用 <b>单步</b> 逐步执行这三条指令。<b>调试</b>视图中的 <b>十六进制监视器</b> 显示一段内存,有助于可视化程序执行。<tt>STA $01</tt> 将寄存器 <tt>A</tt> 的值存到内存地址 <tt>$01</tt>;<tt>ADC $01</tt> 则把内存地址 <tt>$01</tt> 的值加到 <tt>A</tt>。<tt>$80 + $80</tt> 应为 <tt>$100</tt>,但因超过 1 字节,<tt>A</tt> 被置为 <tt>$00</tt> 且进位标志被置位。同时,由于结果为 0,零标志也会被置位。"
+ "汇编失败"
+ "汇编"
+ "如前所述,四个方向在内部用 1、2、4、8 表示。它们都是 2 的幂,因此对应仅含一个 <tt>1</tt> 的二进制数:"
+ "只要在这些水平带内移动就很简单。向右移动只需增加低位字节(如 <tt>$0200</tt> 变为 <tt>$0201</tt>)。向下移动加上 <tt>$20</tt>(如 <tt>$0200</tt> 变为 <tt>$0220</tt>)。向左与向上则相反。"
+ "一如既往,此版本包含许多小的修复和改进。"
+ "架构增强改进了 GNOME、Web 与 Android 平台之间的代码共享。"
+ "外观设置"
+ "外观"
+ "在 6502 汇编中,以 <tt>$</tt> 开头的数字是十六进制。以 <tt>#</tt> 开头表示立即数(字面值)。没有 # 的数字通常表示内存地址(其进制由前缀决定,例如 $ 为十六进制)。如果你对十六进制不熟悉,建议阅读 <a href=\"https://zh.wikipedia.org/wiki/%1$E5%%8D%%81%2$E5%%85%3$AD%4$E8%%BF%%9B%5$E5%%88%%B6\">维基百科条目</a>。"
+ "这里要注意 <tt>ADC #$01</tt> 与 <tt>ADC $01</tt> 的区别。前者把字面值 <tt>$01</tt> 加到寄存器 <tt>A</tt>,后者则把内存地址 <tt>$01</tt> 中存储的值加到 <tt>A</tt>。"
+ "也很有用:<b>BIT</b>、<b>CMP/CPX/CPY</b>、<b>PHP/PLP</b>、<b>TSX/TXS</b>、<b>SED/CLD</b>、<b>SEI/CLI</b>、<b>BMI/BPL</b>、<b>BVS/BVC</b>"
+ "即将完成!"
+ "所有支持绝对寻址的指令(跳转指令除外)也可使用单字节地址。这种方式称为“零页”寻址——只能访问内存的第一页(前 256 字节)。这种方式更快,因为只需查找一个字节,并且在汇编代码中占用更少空间。"
+ "所有文件"
+ "之后将值 <tt>2</tt> 加到累加器,从而得到 2–5 范围的最终随机数。"
+ "在初始注释块(以分号开头的行)之后,前两行是:"
+ "碰撞检测后,我们会更新蛇的位置。高层逻辑如下:第一,将身体的每个字节对在内存中上移一位。第二,按当前方向更新蛇头。最后,如果蛇头越界,则按碰撞处理。下面用 ASCII 图示说明:每个括号是一对 x,y 坐标,而不是两个字节。"
+ "在每个方向移动后,还需要检查头部是否会越界。各方向的处理方式不同。对于左右移动,可以检查头部是否发生了“回绕”。从 <tt>$021f</tt> 向右移动并递增最低有效字节会得到 <tt>$0220</tt>,但这实际上是从第一行的最后一个像素跳到第二行的第一个像素。因此,每次向右移动时,需要检查新的最低有效字节是否是 <tt>$20</tt> 的倍数。可通过针对掩码 <tt>$1f</tt> 的按位检查来实现。下面的示意图展示了屏蔽最低 5 位如何判断一个数是否为 <tt>$20</tt> 的倍数。"
+ "Adwaita"
+ "寻址模式"
+ "寻址模式"
+ "地址 %1$s:未知操作码"
+ "还提供额外的按键输入:A 按钮(回车键,ASCII 码 <tt>$0D</tt>)和 B 按钮(空格键,ASCII 码 <tt>$20</tt>)。可用于增加游戏的交互性。方向控制可使用 WASD 或方向键,二者可互换。"
+ "新增帮助功能,便于初学者编辑代码"
+ "新增文件管理,可保存和加载你的程序"
+ "添加更多指令以绘制额外像素。"
+ "累加器:用于计算的主寄存器"
+ "强调色:黄色"
+ "强调色:青色"
+ "强调色:板岩灰"
+ "强调色:红色"
+ "强调色:紫色"
+ "强调色:粉色"
+ "强调色:橙色"
+ "强调色:绿色"
+ "强调色:蓝色"
+ "强调色"
+ "绝对寻址:<tt>$c000</tt>"
+ "绝对寻址(X/Y):<tt>$c000,X</tt> 和 <tt>$c000,Y</tt>"
+ "关于 Learn 6502 Assembly"
+ "6502 指令集的完整列表<a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">在这里</a>和<a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">这里</a>可用(通常会同时参考这两页,它们各有优劣)。这些页面详细说明了每条指令的参数、使用的寄存器以及设置的标志位。"
+ "已在您的浏览器中打开 GitHub issue。请在那里审核并提交以完成您的贡献。批准后,您的示例将包含在下一个版本中。\n\n如果您的示例太大,完整内容将复制到剪贴板,以便手动粘贴到 GitHub issue 中。"
+ "<tt>init</tt> 和 <tt>loop</tt> 是两个核心子程序。<tt>init</tt> 初始化游戏状态,<tt>loop</tt> 是主要的游戏循环。"
+ "<tt>checkSnakeCollision</tt> 遍历蛇的身体段,将每个字节对与头部对进行比较。如果匹配,则游戏结束。"
+ "<tt>a9</tt> 和 <tt>c9</tt> 分别是立即寻址的 <tt>LDA</tt> 和 <tt>CMP</tt> 的操作码。<tt>01</tt> 和 <tt>02</tt> 是这些指令的参数。<tt>d0</tt> 是 <tt>BNE</tt> 的操作码,其参数是 <tt>02</tt>。这意味着“跳过接下来的两个字节”(<tt>85 22</tt>,即 <tt>STA $22</tt> 的汇编版本)。尝试编辑代码,让 <tt>STA</tt> 接受一个两字节的绝对地址而不是单字节的零页地址(例如将 <tt>STA $22</tt> 改为 <tt>STA $2222</tt>)。重新汇编代码并再次查看十六进制转储 —— <tt>BNE</tt> 的参数现在应该是 <tt>03</tt>,因为处理器跳过的指令现在是三个字节长。"
+ "寄存器 <tt>X</tt> 保存像素颜色,寄存器 <tt>Y</tt> 保存当前像素位置。第一个循环通过 <tt>A</tt> 寄存器绘制当前颜色作为像素,将颜色压入栈,然后递增颜色和位置。第二个循环弹出栈,绘制弹出的颜色作为像素,然后递增位置。正如预期的那样,这会创建一个镜像图案。"
+ "<tt>SP</tt> 是栈指针。我暂时不会深入讲解栈,但基本上这个寄存器在每次有字节压入栈时递减,在有字节弹出栈时递增。"
+ "<tt>PC</tt> 是程序计数器 - 它让处理器知道当前执行到程序的哪个位置。就像执行脚本的当前行号。在模拟器中,代码从内存地址 <tt>$0600</tt> 开始汇编,因此 <tt>PC</tt> 总是从那里开始。"
+ "<tt>JSR</tt> 和 <tt>RTS</tt>(“跳转到子程序”和“从子程序返回”)是一对黄金搭档,通常一起使用。<tt>JSR</tt> 用于从当前位置跳转到代码的另一部分。<tt>RTS</tt> 返回到跳转前的位置。这基本上类似于函数调用和返回。"
+ "<tt>JMP</tt> 是无条件跳转指令。这里有一个简单的示例来展示它的作用:"
+ "<tt>BCC</tt> 和 <tt>BCS</tt>(“进位清除时分支”和“进位设置时分支”)用于根据进位标志进行分支。编写一个使用其中之一的程序。"
+ "<b>零页寻址</b>:<tt>$0000</tt>-<tt>$00FF</tt>(前 256 字节,访问更快)"
+ "<b>零页寻址</b> (<tt>$c0</tt>):访问 <tt>$00</tt>-<tt>$FF</tt> 的内存位置"
+ "<b>零页寻址(X/Y)</b> (<tt>$c0,X</tt>):将 X/Y 寄存器加到零页地址"
+ "<b>Z</b>(零):当结果为零时置位"
+ "<b>X, Y</b>:用于寻址与计数的索引寄存器"
+ "<b>W</b> 键或上箭头键 (<tt>$77</tt>)"
+ "<b>V</b>(溢出):算术运算发生有符号溢出时置位"
+ "<b>栈</b>:<tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>:将寄存器存入内存"
+ "<b>SP</b>(栈指针):指向当前栈位置(初始为 <tt>$FF</tt>)"
+ "<b>SBC 需要预先设置进位</b>:减法前请置位 <tt>C</tt>(作为反向借位)。SBC 之后 <tt>C</tt> 清零表示发生了借位。"
+ "<b>S</b> 键或下箭头键 (<tt>$73</tt>)"
+ "<b>相对</b> (<tt>label</tt>):分支使用从下一条指令起的有符号 8 位偏移(−128…+127)"
+ "<b>Q</b> 键或回车键 (<tt>$0D</tt>)"
+ "<b>程序存储</b>:起始于 <tt>$0600</tt>"
+ "<b>PHA/PLA</b>:将累加器压栈/出栈"
+ "<b>PC</b>(程序计数器):指向下一条将要执行的指令"
+ "<b>N</b>(负):当结果的第 7 位为 1 时置位"
+ "<b>LDA/LDX/LDY</b>:装载寄存器"
+ "<b>JSR/RTS</b>:跳转到子程序 / 从子程序返回"
+ "<b>JMP</b>:无条件跳转"
+ "<b>间接寻址</b> (<tt>($c000)</tt>):查找给定位置中存储的地址"
+ "<b>间接索引寻址</b> (<tt>($c0),Y</tt>):以零页地址为指针取得基址,然后在其上加 Y"
+ "<b>索引间接寻址</b> (<tt>($c0,X)</tt>):将 X 加到零页地址,然后用结果作为指针获取实际目标地址"
+ "<b>立即寻址</b> (<tt>#$c0</tt>):使用字面值"
+ "<b>INX/INY/DEX/DEY</b>:寄存器自增/自减"
+ "<b>I</b>(中断禁用):当禁用中断时置位"
+ "<b>E</b> 键或空格键 (<tt>$20</tt>)"
+ "<b>显示内存</b>:<tt>$0200</tt>-<tt>$05FF</tt>(用于屏幕输出)"
+ "<b>方向控制</b>:"
+ "<b>D</b> 键或右箭头键 (<tt>$64</tt>)"
+ "<b>D</b>(十进制):处理器处于 BCD(压缩十进制)模式时置位"
+ "<b>比较指令</b>:<tt>CMP/CPX/CPY</tt> 像减法(寄存器−内存)一样设置 <tt>N/Z/C</tt>,但不保存结果。"
+ "<b>C</b>(进位):算术运算产生进位(跨越一个字节)时置位"
+ "<b>BEQ/BNE/BCC/BCS</b>:等于/不等于/进位清除/进位设置则分支"
+ "<b>B(Break 标志)</b>:执行 BRK 指令时置位"
+ "<b>操作按钮</b>:"
+ "<b>绝对寻址</b> (<tt>$c000</tt>):访问任意内存位置"
+ "<b>绝对寻址(X/Y)</b> (<tt>$c000,X</tt>):将 X/Y 寄存器加到绝对地址"
+ "<b>ADC/SBC</b>:带进位加/带借位减"
+ "<b>A</b> 键或左箭头键 (<tt>$61</tt>)"
+ "<b>A</b>(累加器):用于计算与数据处理的主寄存器"
+ "<b><tt>$f</tt></b>: 浅灰色 (<tt>#bbbbbb</tt>)"
+ "<b><tt>$e</tt></b>: 浅蓝色 (<tt>#0088ff</tt>)"
+ "<b><tt>$d</tt></b>: 浅绿色 (<tt>#aaff66</tt>)"
+ "<b><tt>$c</tt></b>: 灰色 (<tt>#777777</tt>)"
+ "<b><tt>$b</tt></b>: 深灰色 (<tt>#333333</tt>)"
+ "<b><tt>$a</tt></b>: 浅红色 (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: 上一次按下的按键(ASCII 码)"
+ "<b><tt>$FE</tt></b>: 随机数生成器(读取为 0–255 的随机值)"
+ "<b><tt>$9</tt></b>: 棕色 (<tt>#664400</tt>)"
+ "<b><tt>$8</tt></b>: 橙色 (<tt>#dd8855</tt>)"
+ "<b><tt>$7</tt></b>: 黄色 (<tt>#eeee77</tt>)"
+ "<b><tt>$6</tt></b>: 蓝色 (<tt>#0000aa</tt>)"
+ "<b><tt>$5</tt></b>: 绿色 (<tt>#00cc55</tt>)"
+ "<b><tt>$4</tt></b>: 紫色 (<tt>#cc44cc</tt>)"
+ "<b><tt>$3</tt></b>: 青色 (<tt>#aaffee</tt>)"
+ "<b><tt>$2</tt></b>: 红色 (<tt>#880000</tt>)"
+ "<b><tt>$1</tt></b>: 白色 (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: 蛇的位置数据 (头部, 身体段, 尾部)"
+ "<b><tt>$0</tt></b>: 黑色 (<tt>#000000</tt>)"
+ "<b><tt>$03</tt></b>: 蛇的长度"
+ "<b><tt>$02</tt></b>: 蛇的方向 (1=上, 2=右, 4=下, 8=左)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: 苹果位置"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a>创建了一个<a href=\"https://gist.github.com/wkjagt/9043907\">注释完整的源码示例</a>,请参考该示例以获取更多详细信息。"
+ "6502 汇编语言包含多个分支指令,这些指令都基于特定标志位的状态进行判断。在这个例子中,我们将学习 <tt>BNE</tt>:“不相等时分支”。"
+ "6502 栈已填满!回绕…"
+ "6502 栈已清空!回绕…"
+ "(事实上,我得到可靠消息,6502处理器仍在由<a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a>生产,并且<a href=\"https://www.mouser.co.uk/c/?q=65C02\">出售给业余爱好者</a>,所以6502显然<i>并非</i>一门已死的语言!谁能想到呢?)"
+ "6502"
+
diff --git a/packages/app-android/data/Android/src/main/res/values/strings.xml b/packages/app-android/data/Android/src/main/res/values/strings.xml
index ba44f1ca..6d1693d5 100644
--- a/packages/app-android/data/Android/src/main/res/values/strings.xml
+++ b/packages/app-android/data/Android/src/main/res/values/strings.xml
@@ -3,206 +3,465 @@
"Learn 6502 Assembly"
"Learn 6502 Assembly"
"Learn 6502 Assembly"
- "The last subroutine, <tt>spinWheels</tt>, is just there because the game would run too fast otherwise. All <tt>spinWheels</tt> does is count <tt>X</tt> down from zero until it hits zero again. The first <tt>dex</tt> wraps, making <tt>X</tt> <tt>#$ff</tt>."
- "Next comes <tt>drawSnake</tt>. This is pretty simple too - we first undraw the tail and then draw the head. <tt>X</tt> is set to the length of the snake, so we can index to the right pixel, and we set <tt>A</tt> to zero then perform the write using the indexed indirect addressing mode. Then we reload <tt>X</tt> to index to the head, set <tt>A</tt> to one and store it at <tt>($10,x)</tt>. <tt>$10</tt> stores the two-byte location of the head, so this draws a white pixel at the current head position. As only the head and the tail of the snake move, this is enough to keep the snake moving."
- "Because the game state is stored in terms of pixel locations, rendering the game is very straightforward. The first subroutine, <tt>drawApple</tt>, is extremely simple. It sets <tt>Y</tt> to zero, loads a random colour into the accumulator, then stores this value into <tt>($00),y</tt>. <tt>$00</tt> is where the location of the apple is stored, so <tt>($00),y</tt> dereferences to this memory location. Read the \"Indirect indexed\" section in <a href=\"#addressing\">Addressing modes</a> for more details."
- "Rendering the game"
- "I won\'t explain in depth how each of the directions work, but the above explanation should give you enough to work it out with a bit of study."
- "After a move in each direction, we also need to check to see if the head would become out of bounds. This is handled differently for each direction. For left and right, we can check to see if the head has effectively \"wrapped around\". Going right from <tt>$021f</tt> by incrementing the least significant byte would lead to <tt>$0220</tt>, but this is actually jumping from the last pixel of the first row to the first pixel of the second row. So, every time we move right, we need to check if the new least significant byte is a multiple of <tt>$20</tt>. This is done using a bit check against the mask <tt>$1f</tt>. Hopefully the illustration below will show you how masking out the lowest 5 bits reveals whether a number is a multiple of <tt>$20</tt> or not."
- "Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from <tt>$02e1</tt> should lead to <tt>$0301</tt>. Luckily, this is fairly easy to accomplish. Adding <tt>$20</tt> to <tt>$e1</tt> results in <tt>$01</tt> and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte."
- "As long as you\'re moving within one of these horizontal strips, things are simple. For example, to move right, just increment the least significant byte (e.g. <tt>$0200</tt> becomes <tt>$0201</tt>). To go down, add <tt>$20</tt> (e.g. <tt>$0200</tt> becomes <tt>$0220</tt>). Left and up are the reverse."
+ "வணக்கம்! We are happy to welcome Tamil translations, contributed by தமிழ்நேரம். நன்றி!"
+ "which represents the indirectly-addressed memory locations <tt>$0411</tt>, <tt>$0410</tt> and <tt>$040f</tt> (three pixels in the middle of the display). I\'m labouring this point, but it\'s important to fully grok how indirect addressing works."
+ "wdm-output"
+ "programming"
+ "learning"
+ "by %1$s"
+ "_Preferences"
+ "Zero page: <tt>$c0</tt>"
+ "Zero page,Y: <tt>$c0,Y</tt>"
+ "Zero page,X: <tt>$c0,X</tt>"
+ "Zero page usage"
+ "Zero Page ($0000-$00FF)"
+ "Zero Flag: Set when the result of an operation is zero. Essential for conditional branching - most conditional jump instructions (BEQ, BNE) check this flag to determine program flow based on whether a value is zero."
+ "Your file has unsaved changes. Changes will be lost if you don\'t save them."
+ "You\'ve seen <tt>TAX</tt>. You can probably guess what <tt>TAY</tt>, <tt>TXA</tt> and <tt>TYA</tt> do, but write some code to test your assumptions."
+ "You supported this open source project by buying the app. Thank you!"
"You can think of the screen as four horizontal strips of 32 × 8 pixels. These strips map to <tt>$0200-$02ff</tt>, <tt>$0300-$03ff</tt>, <tt>$0400-$04ff</tt> and <tt>$0500-$05ff</tt>. The first rows of pixels are <tt>$0200-$021f</tt>, <tt>$0220-$023f</tt>, <tt>$0240-$025f</tt>, etc."
- "The next bit updates the head of the snake depending on the direction. This is probably the most complicated part of the code, and it\'s all reliant on how memory locations map to the screen, so let\'s look at that in more detail."
- "To test whether the direction is <tt>1</tt>, <tt>2</tt>, <tt>4</tt> or <tt>8</tt>, the code continually shifts right until the carry is set. One <tt>LSR</tt> means \"up\", two means \"right\", and so on."
- "Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into <tt>A</tt>. <tt>LSR</tt> means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is <tt>1</tt>, after <tt>LSR</tt> it is <tt>0</tt>, with the carry flag set."
- "The length is initialized to <tt>4</tt>, so <tt>X</tt> starts off as <tt>3</tt>. <tt>LDA $10,x</tt> loads the value of <tt>$13</tt> into <tt>A</tt>, then <tt>STA $12,x</tt> stores this value into <tt>$15</tt>. <tt>X</tt> is decremented, and we loop. Now <tt>X</tt> is <tt>2</tt>, so we load <tt>$12</tt> and store it into <tt>$14</tt>. This loops while <tt>X</tt> is positive (<tt>BPL</tt> means \"branch if positive\")."
- "At a low level, this subroutine is slightly more complex. First, the length is loaded into the <tt>X</tt> register, which is then decremented. The snippet below shows the starting memory for the snake."
- "After collision detection, we update the snake\'s location. This is done at a high level like so: First, move each byte pair of the body up one position in memory. Second, update the head according to the current direction. Finally, if the head is out of bounds, handle it as a collision. I\'ll illustrate this with some ascii art. Each pair of brackets contains an x,y coordinate rather than a pair of bytes for simplicity."
- "<tt>checkSnakeCollision</tt> loops through the snake\'s body segments, checking each byte pair against the head pair. If there is a match, then game over."
- "The next subroutine, <tt>checkCollision</tt>, defers to <tt>checkAppleCollision</tt> and <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> just checks to see if the two bytes holding the location of the apple match the two bytes holding the location of the head. If they do, the length is increased and a new apple position is generated."
+ "Yellow"
+ "Write and edit code with a built-in code editor"
+ "With all these examples you might find it helpful to use the <b>Hex Monitor</b> in the debug view to watch the memory change. Pick a memory region from the list to see that section — for example, <b>Display Memory ($0200–$05FF)</b> to watch the screen pixels, or <b>Zero Page ($0000–$00FF)</b> to inspect the first 256 bytes."
+ "With absolute addressing, the full memory location is used as the argument to the instruction. For example:"
+ "Welcome Vietnamese translation, fully contributed by Loc Huynh (hthienloc)."
+ "Welcome Polish translation, initially contributed by Micro Wave. Dziękujemy!"
+ "We\'ve already had a little look at the processor status section (the bit with <tt>A</tt>, <tt>PC</tt> etc.), but what does it all mean?"
+ "We\'ve added a new Examples section to the Learn tab where you can explore and run fully-commented 6502 programs right in the app. Start with our featured Snake game example and see how those pixels come to life!"
+ "Values <tt>$00</tt>-<tt>$0F</tt> represent 16 different colors (<tt>$00</tt>=black, <tt>$01</tt>=white)"
+ "Use custom primary color"
+ "Use custom accent color"
"Updating the game state"
- "So, looking at <tt>upKey</tt>, if the current direction is down (4), the bit test will be zero. <tt>BNE</tt> means \"branch if the zero flag is clear\", so in this case we\'ll branch to <tt>illegalMove</tt>, which just returns from the subroutine. Otherwise, the new direction (1 in this case) is stored in the appropriate memory location."
- "The <tt>BIT</tt> opcode is similar to <tt>AND</tt>, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we\'re looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, <tt>0001 AND 0001</tt> is not zero, but <tt>0001 AND 0010</tt> is zero."
- "As stated before, the four directions are represented internally by the numbers 1, 2, 4 and 8. Each of these numbers is a power of 2, thus they are represented by a binary number with a single <tt>1</tt>:"
- "Each section (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) first checks to see if the current direction is the opposite of the new direction. This requires another little detour."
- "Additional button inputs are also available: button A (Enter/Return key, ASCII code <tt>$0D</tt>) and button B (Space key, ASCII code <tt>$20</tt>). These can be used to add more interaction to your games. For directional controls, both WASD keys and arrow keys can be used interchangeably."
- "The first subroutine, <tt>readKeys</tt>, takes the job of accepting user input. The memory location <tt>$ff</tt> holds the ascii code of the most recent key press in this simulator. The value is loaded into the accumulator, then compared to <tt>$77</tt> (the hex code for W), <tt>$64</tt> (D), <tt>$73</tt> (S) and <tt>$61</tt> (A). If any of these comparisons are successful, the program branches to the appropriate section."
- "Reading the input"
- "Nearly all games have at their heart a game loop. All game loops have the same basic form: accept user input, update the game state, and render the game state. This loop is no different."
- "The game loop"
+ "Unsaved changes"
+ "Unlike zero page,Y, absolute,Y can\'t be used with <tt>STX</tt> but can be used with <tt>LDA</tt> and <tt>STA</tt>."
+ "Under the hood: updated to TypeScript 6, Vite 8, and other dependency upgrades for improved performance and stability."
+ "Unable to relocate code outside 64k memory"
+ "Unable to find/parse given address/label"
+ "Two of the stack instructions are <tt>PHA</tt> and <tt>PLA</tt>, \"push accumulator\" and \"pull accumulator\". Below is an example of these two in action."
+ "Two new example programs, and both came from you: Dino Run by Jacob, and Line Buster 6502 by edit12. They are the first examples sent in with the share button, and we would love more."
+ "Tutorial <sub>by <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, licensed under CC BY 4.0</sub>"
+ "Tutorial"
+ "Try to write code snippets that use each of the 6502 addressing modes. Remember, you can use the <b>Hex Monitor</b> in the debug view to watch a section of memory."
+ "Try out example programs for the 6502 microprocessor."
+ "Try out example programs"
+ "Try changing the colour of the three pixels."
+ "Toggle Sidebar"
+ "To test whether the direction is <tt>1</tt>, <tt>2</tt>, <tt>4</tt> or <tt>8</tt>, the code continually shifts right until the carry is set. One <tt>LSR</tt> means \"up\", two means \"right\", and so on."
+ "Title"
+ "This release brings vibrant handheld-inspired theming with customisable colours. We\'ve introduced adaptive tablet and desktop layouts that keep everything in view, perfect for those marathon coding sessions when learning to develop retro games in assembly. Big thanks to our new contributor @mmartinortiz for the great desktop layout ideas. There are some cool technical improvements too, like TypeScript strictness, custom GtkSourceView style schemes, and enhanced debugger controls for smoother development."
+ "This one\'s kinda weird. It\'s like a cross between zero page,X and indirect. Basically, you take the zero page address, add the value of the <tt>X</tt> register to it, then use that to look up a two-byte address. For example:"
+ "This loads the value <tt>$11</tt> into the memory location <tt>$10</tt>, the value <tt>$10</tt> into <tt>$12</tt>, and <tt>$0f</tt> into <tt>$14</tt>. It then loads the value <tt>$04</tt> into <tt>$11</tt>, <tt>$13</tt> and <tt>$15</tt>. This leads to memory like this:"
+ "This is where addressing gets interesting. In this mode, a zero page address is given, and then the value of the <tt>X</tt> register is added. Here is an example:"
+ "This is the equivalent of zero page,X, but can only be used with <tt>LDX</tt> and <tt>STX</tt>."
+ "These are the absolute addressing versions of zero page,X and zero page,Y. For example:"
+ "There\'s also a very practical reason: retro game development. The homebrew scene is alive and well—new games are still <a href=\"https://www.youtube.com/watch?v=1KLhFNmmgUo\">released for the NES</a> (some even as physical cartridges) and for many other classic systems; the NES is just an example. Even if your target is something like the SNES, starting with 6502 pays off: the SNES CPU (65C816) is backward-compatible with the 6502, so the fundamentals you learn here—registers, addressing modes, and the core instruction set—carry straight over."
+ "Then why 6502? Why not a <i>useful</i> assembly language, like <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Well, I don\'t think learning x86 is useful. I don\'t think you\'ll ever have to <i>write</i> assembly language in your day job - for some people this is an academic exercise, something to expand your mind and your thinking. 6502 was originally written in a different age, a time when the majority of developers were writing assembly directly, rather than in these new-fangled high-level programming languages. So, it was designed to be written by humans. More modern assembly languages are meant to written by compilers, so let\'s leave it to them. Plus, 6502 is <i>fun</i>. Nobody ever called x86 <i>fun</i>."
+ "The zero page of memory is used to store a number of game state variables, as noted in the comment block at the top of the game. Everything in <tt>$00</tt>, <tt>$01</tt> and <tt>$10</tt> upwards is a pair of bytes representing a two-byte memory location that will be looked up using indirect addressing. These memory locations will all be between <tt>$0200</tt> and <tt>$05ff</tt> - the section of memory corresponding to the game console. For example, if <tt>$00</tt> and <tt>$01</tt> contained the values <tt>$01</tt> and <tt>$02</tt>, they would be referring to the second pixel of the display ( <tt>$0201</tt> - remember, the least significant byte comes first in indirect addressing)."
+ "The stack in a 6502 processor is just like any other stack - values are pushed onto it and popped (\"pulled\" in 6502 parlance) off it. The current depth of the stack is measured by the stack pointer, a special register. The stack lives in memory between <tt>$0100</tt> and <tt>$01ff</tt>. The stack pointer is initially <tt>$ff</tt>, which points to memory location <tt>$01ff</tt>. When a byte is pushed onto the stack, the stack pointer becomes <tt>$fe</tt>, or memory location <tt>$01fe</tt>, and so on."
+ "The stack"
+ "The snake game from the tutorial"
"The result of this subroutine is to load a random byte into <tt>$00</tt>, and a random number between 2 and 5 into <tt>$01</tt>. Because the least significant byte comes first with indirect addressing, this translates into a memory address between <tt>$0200</tt> and <tt>$05ff</tt>: the exact range used to draw the display."
- "After this, the value <tt>2</tt> is added to the accumulator, to create a final random number in the range 2–5."
- "The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3."
- "The hex value <tt>$03</tt> is represented in binary as <tt>00000011</tt>. The <tt>AND</tt> opcode performs a bitwise AND of the argument with the accumulator. For example, if the accumulator contains the binary value <tt>10101010</tt>, then the result of <tt>AND</tt> with <tt>00000011</tt> will be <tt>00000010</tt>."
+ "The processor knows where to return to because <tt>JSR</tt> pushes the address minus one of the next instruction onto the stack before jumping to the given location. <tt>RTS</tt> pops this location, adds one to it, and jumps to that location. An example:"
+ "The problem is, <tt>$184</tt> is too big to fit in a single byte (the max is <tt>$FF</tt>), and the registers can only hold a single byte. It\'s OK though; the processor isn\'t actually dumb. If you were looking carefully enough, you\'ll have noticed that the carry flag was set to <tt>1</tt> after this operation. So that\'s how you know."
+ "The opposite of <tt>BNE</tt> is <tt>BEQ</tt>. Try writing a program that uses <tt>BEQ</tt>."
+ "The opposite of <tt>ADC</tt> is <tt>SBC</tt> (subtract with carry). Write a program that uses this instruction."
+ "The offline browser run game made for 6502 assembly"
"The next subroutine, <tt>generateApplePosition</tt>, sets the apple location to a random position on the display. First, it loads a random byte into the accumulator (<tt>$fe</tt> is a random number generator in this simulator). This is stored into <tt>$00</tt>. Next, a different random byte is loaded into the accumulator, which is then <tt>AND</tt>-ed with the value <tt>$03</tt>. This part requires a bit of a detour."
- "which represents the indirectly-addressed memory locations <tt>$0411</tt>, <tt>$0410</tt> and <tt>$040f</tt> (three pixels in the middle of the display). I\'m labouring this point, but it\'s important to fully grok how indirect addressing works."
- "This loads the value <tt>$11</tt> into the memory location <tt>$10</tt>, the value <tt>$10</tt> into <tt>$12</tt>, and <tt>$0f</tt> into <tt>$14</tt>. It then loads the value <tt>$04</tt> into <tt>$11</tt>, <tt>$13</tt> and <tt>$15</tt>. This leads to memory like this:"
- "The <tt>init</tt> subroutine defers to two subroutines, <tt>initSnake</tt> and <tt>generateApplePosition</tt>. <tt>initSnake</tt> sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at <tt>$10</tt> contains the screen location of the head, the pair at <tt>$12</tt> contains the location of the single body segment, and <tt>$14</tt> contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:"
- "Initialization"
- "Finally, byte <tt>$03</tt> contains the current length of the snake, in terms of bytes in memory (so a length of 4 means 2 pixels)."
+ "The next subroutine, <tt>checkCollision</tt>, defers to <tt>checkAppleCollision</tt> and <tt>checkSnakeCollision</tt>. <tt>checkAppleCollision</tt> just checks to see if the two bytes holding the location of the apple match the two bytes holding the location of the head. If they do, the length is increased and a new apple position is generated."
+ "The next line, <tt>BNE decrement</tt>, will shift execution to the decrement label if the <tt>Z</tt> flag is set to <tt>0</tt> (meaning that the two values in the <tt>CPX</tt> comparison were not equal), otherwise it does nothing and we store <tt>X</tt> to <tt>$0201</tt>, then finish the program."
+ "The next bit updates the head of the snake depending on the direction. This is probably the most complicated part of the code, and it\'s all reliant on how memory locations map to the screen, so let\'s look at that in more detail."
+ "The length is initialized to <tt>4</tt>, so <tt>X</tt> starts off as <tt>3</tt>. <tt>LDA $10,x</tt> loads the value of <tt>$13</tt> into <tt>A</tt>, then <tt>STA $12,x</tt> stores this value into <tt>$15</tt>. <tt>X</tt> is decremented, and we loop. Now <tt>X</tt> is <tt>2</tt>, so we load <tt>$12</tt> and store it into <tt>$14</tt>. This loops while <tt>X</tt> is positive (<tt>BPL</tt> means \"branch if positive\")."
+ "The last subroutine, <tt>spinWheels</tt>, is just there because the game would run too fast otherwise. All <tt>spinWheels</tt> does is count <tt>X</tt> down from zero until it hits zero again. The first <tt>dex</tt> wraps, making <tt>X</tt> <tt>#$ff</tt>."
+ "The last section shows the processor flags. Each flag is one bit, so all seven flags live in a single byte. The flags are set by the processor to give information about the previous instruction. More on that later. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Read more about the registers and flags here</a>."
+ "The hex value <tt>$03</tt> is represented in binary as <tt>00000011</tt>. The <tt>AND</tt> opcode performs a bitwise AND of the argument with the accumulator. For example, if the accumulator contains the binary value <tt>10101010</tt>, then the result of <tt>AND</tt> with <tt>00000011</tt> will be <tt>00000010</tt>."
+ "The hex should look something like this:"
+ "The game loop"
"The first two bytes hold the location of the apple. This is updated every time the snake eats the apple. Byte <tt>$02</tt> contains the current direction. <tt>1</tt> means up, <tt>2</tt> right, <tt>4</tt> down, and <tt>8</tt> left. The reasoning behind these numbers will become clear later."
- "The zero page of memory is used to store a number of game state variables, as noted in the comment block at the top of the game. Everything in <tt>$00</tt>, <tt>$01</tt> and <tt>$10</tt> upwards is a pair of bytes representing a two-byte memory location that will be looked up using indirect addressing. These memory locations will all be between <tt>$0200</tt> and <tt>$05ff</tt> - the section of memory corresponding to the game console. For example, if <tt>$00</tt> and <tt>$01</tt> contained the values <tt>$01</tt> and <tt>$02</tt>, they would be referring to the second pixel of the display ( <tt>$0201</tt> - remember, the least significant byte comes first in indirect addressing)."
- "Zero page usage"
- "First, <tt>readkeys</tt> checks to see if one of the direction keys (W, A, S, D) was pressed, and if so, sets the direction of the snake accordingly. Then, <tt>checkCollision</tt> checks to see if the snake collided with itself or the apple. <tt>updateSnake</tt> updates the internal representation of the snake, based on its direction. Next, the apple and snake are drawn. Finally, <tt>spinWheels</tt> makes the processor do some busy work, to stop the game from running too quickly. Think of it like a sleep command. The game keeps running until the snake collides with the wall or itself."
+ "The first subroutine, <tt>readKeys</tt>, takes the job of accepting user input. The memory location <tt>$ff</tt> holds the ascii code of the most recent key press in this simulator. The value is loaded into the accumulator, then compared to <tt>$77</tt> (the hex code for W), <tt>$64</tt> (D), <tt>$73</tt> (S) and <tt>$61</tt> (A). If any of these comparisons are successful, the program branches to the appropriate section."
+ "The first line shows the <tt>A</tt>, <tt>X</tt> and <tt>Y</tt> registers (<tt>A</tt> is often called the \"accumulator\"). Each register holds a single byte. Most operations work on the contents of these registers."
+ "The first instruction causes execution to jump to the <tt>init</tt> label. This sets <tt>X</tt>, then returns to the next instruction, <tt>JSR loop</tt>. This jumps to the <tt>loop</tt> label, which increments <tt>X</tt> until it is equal to <tt>$05</tt>. After that we return to the next instruction, <tt>JSR end</tt>, which jumps to the end of the file. This illustrates how <tt>JSR</tt> and <tt>RTS</tt> can be used together to create modular code."
+ "The effect of this is to mask out the least significant two bits of the accumulator, setting the others to zero. This converts a number in the range of 0–255 to a number in the range of 0–3."
+ "The code block below contains the entire source code of the game. I\'ll explain how it works in the following sections."
+ "The black game console screen now should show three coloured \"pixels\" at the top left."
+ "The app is designed for the GNOME interface font. On other systems it is drawn with that system\'s font, which is usually smaller."
+ "The Y Index Register is similar to X and has no special functions. Commonly used for indexed addressing and data movement."
+ "The X Index Register is used for indexed addressing modes and counting operations. It can hold loop counters, array indices, and is essential for accessing memory locations relative to a base address using X as an offset. Special: TSX/TXS transfer X to/from the stack pointer."
+ "The Stack Pointer manages the call stack for subroutines and interrupts. It starts at $FF (top of stack) and grows downward. Used for PUSH/PULL operations, JSR/RTS calls, and interrupt handling. Critical for nested function calls."
+ "The Program Counter contains the memory address of the next instruction to execute. It automatically increments after each instruction and can be modified by jumps, branches, calls, and returns. Essential for program flow control and debugging."
+ "The Accumulator (A) is the primary register for arithmetic and logic operations. All basic calculations like ADD, SUBTRACT, AND, OR, etc. use this register. It\'s the most frequently used register in 6502 assembly programming."
"The <tt>loop</tt> subroutine itself just calls a number of subroutines sequentially, before looping back on itself:"
- "<tt>init</tt> and <tt>loop</tt> are both subroutines. <tt>init</tt> initializes the game state, and <tt>loop</tt> is the main game loop."
- "After the initial block of comments (lines starting with semicolons), the first two lines are:"
+ "The <tt>init</tt> subroutine defers to two subroutines, <tt>initSnake</tt> and <tt>generateApplePosition</tt>. <tt>initSnake</tt> sets the snake direction, length, and then loads the initial memory locations of the snake head and body. The byte pair at <tt>$10</tt> contains the screen location of the head, the pair at <tt>$12</tt> contains the location of the single body segment, and <tt>$14</tt> contains the location of the tail (the tail is the last segment of the body and is drawn in black to keep the snake moving). This happens in the following code:"
+ "The <tt>BIT</tt> opcode is similar to <tt>AND</tt>, but the calculation is only used to set the zero flag - the actual result is discarded. The zero flag is set only if the result of AND-ing the accumulator with argument is zero. When we\'re looking at powers of two, the zero flag will only be set if the two numbers are not the same. For example, <tt>0001 AND 0001</tt> is not zero, but <tt>0001 AND 0010</tt> is zero."
+ "The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as <tt>$0000 - $ffff</tt>. There are various ways to refer to these memory locations, as detailed below."
+ "Thank you for using open source software."
+ "Tests bit 0 of A with LSR and BCC, places 1 or 0 in A on result"
+ "Test your creations on a virtual game console"
+ "Tervetuloa! We are happy to welcome Finnish translations, kindly contributed by Jiri Grönroos. Kiitos!"
+ "Teal"
+ "System font, GNOME size"
+ "System font"
+ "Syntax error line %1$d: %2$s"
+ "Supporter"
+ "Support"
+ "Submit"
+ "Style"
+ "Stopped"
+ "Step-by-step guide to 6502 assembly"
+ "Step"
+ "Status Flags"
+ "Stack Pointer: Points to stack position"
+ "Stack Example"
+ "Stack ($0100-$01FF)"
+ "Special Memory Locations (in Simulator)"
+ "Source URL"
+ "Some instructions don\'t deal with memory locations (e.g. <tt>INX</tt> - increment the <tt>X</tt> register). These are said to have implicit addressing - the argument is implied by the instruction."
+ "So, why would you want to learn 6502? It\'s a dead language isn\'t it? Well, so\'s Latin. And they still teach that. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
+ "So, what\'s this program actually doing? Let\'s step through it. Hit <b>Reset</b>, then use <b>Step</b> to execute the program one instruction at a time. The <b>Debug</b> view shows the registers and memory — it\'s a separate tab on a small window, and the panel below the game console on a wide one. Click <b>Step</b> once and you\'ll notice in the debug view that <tt>A=</tt> changed from <tt>$00</tt> to <tt>$01</tt>, and <tt>PC=</tt> changed from <tt>$0600</tt> to <tt>$0602</tt>."
+ "So, the instruction <tt>STA $0200</tt> stores the value of the <tt>A</tt> register to memory location <tt>$0200</tt>. Click <b>Step</b> four more times to execute the rest of the instructions, keeping an eye on the <tt>A</tt> register as it changes."
+ "So, looking at <tt>upKey</tt>, if the current direction is down (4), the bit test will be zero. <tt>BNE</tt> means \"branch if the zero flag is clear\", so in this case we\'ll branch to <tt>illegalMove</tt>, which just returns from the subroutine. Otherwise, the new direction (1 in this case) is stored in the appropriate memory location."
+ "So, let\'s dive in! This application contains a <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler and Simulator</a> that I have adapted for this interactive tutorial. Click the <b>Copy</b> button in the code block below to copy the example code to the editor. Then use <b>Assemble</b> to assemble the code, and <b>Run</b> to run it. You can find these actions as buttons or in the menu."
+ "So far we\'re only able to write basic programs without any branching logic. Let\'s change that."
+ "Snake Game Memory Usage"
+ "Snake Game Data ($00-$15)"
+ "Snake Game"
+ "Slate"
+ "Simulator failure"
+ "Simulator"
+ "Shared code examples now include CC-BY-4.0 license information, making it clear how the community can use and build upon your contributions."
+ "Share Your Example"
+ "Share Example"
+ "Share"
+ "Shalom! We are happy to welcome Hebrew translations, fully contributed by Menachem (naattxx). Toda raba!"
+ "Seriously though, I think it\'s valuable to have an understanding of assembly language. Assembly language is the lowest level of abstraction in computers - the point at which the code is still readable. Assembly language translates directly to the bytes that are executed by your computer\'s processor. If you understand how it works, you\'ve basically become a computer <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magician</a>."
+ "Selamat datang! We also welcome Indonesian translations, kindly contributed by Arif Budiman. Terima kasih!"
+ "Screen maps to memory range <tt>$0200</tt>-<tt>$05FF</tt>"
+ "Say hello to many fresh translations: French, Interlingua, Portuguese, Portuguese (Brazil), Dutch, Spanish, Ukrainian, Japanese and Chinese (Simplified)"
+ "Saved as %1$s"
+ "Save changes?"
+ "Save as..."
+ "Save Assembly File"
+ "Save"
+ "Running Snake game"
+ "Run"
+ "Rewrite the first example in this section to use the <tt>Y</tt> register instead of the <tt>X</tt> register."
+ "Review how your example will appear to others. Clicking <b>Submit</b> will create a issue on GitHub. You\'ll need to sign in with your GitHub account to complete the submission."
+ "Resume"
+ "Reset"
+ "Rendering the game"
+ "Relative: <tt>$c0</tt> (or label)"
+ "Relative addressing is used for branching instructions. These instructions take a single byte, which is used as an offset from the following instruction."
+ "Registers and flags"
+ "Registers"
+ "Reduced default hex monitor address range for better efficiency"
+ "Red"
+ "Reading the input"
+ "Random/Input ($FE-$FF)"
+ "Quit"
+ "Quick tips"
+ "Purple"
+ "Program vintage game consoles"
+ "Program paused"
+ "Program completed. Reset to step through the program again."
+ "Program completed at PC=$%1$s"
+ "Program completed"
+ "Program Storage ($0600-$FFFF)"
+ "Program Counter: Points to next instruction"
+ "Processor Status Register"
+ "Processor Flags"
+ "Primary: Yellow"
+ "Primary: Teal"
+ "Primary: Slate"
+ "Primary: Red"
+ "Primary: Purple"
+ "Primary: Pink"
+ "Primary: Orange"
+ "Primary: Green"
+ "Primary: Blue"
+ "Primary color"
+ "Previous"
+ "Preview Your Example"
+ "Preview"
+ "Press <b>Step</b> again to execute the second instruction. The top-left pixel of the game console should now be white. This simulator uses the memory locations <tt>$0200</tt> to <tt>$05ff</tt> to draw pixels on its display. The values <tt>$00</tt> to <tt>$0f</tt> represent 16 different colours (<tt>$00</tt> is black and <tt>$01</tt> is white), so storing the value <tt>$01</tt> at memory location <tt>$0200</tt> draws a white pixel at the top left corner. This is simpler than how an actual computer would output video, but it\'ll do for now."
+ "Preprocessing ..."
+ "Play"
+ "Pink"
+ "Perfect for hobbyists, students, and anyone curious about how computers really work under the hood!"
+ "Pause"
+ "Overflow Flag: Set when an arithmetic operation produces a result that cannot be represented in signed 8-bit range (-128 to +127). Used for detecting signed arithmetic errors in calculations."
"Overall structure"
- "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> made a <a href=\"https://gist.github.com/wkjagt/9043907\">fully annotated gist of this source code</a>, so follow along with that for more details."
- "The code block below contains the entire source code of the game. I\'ll explain how it works in the following sections."
- "Here\'s an example. Note that immediate operands are still prefixed with a <tt>#</tt>."
- "In this assembler, we can define descriptive constants (or symbols) that represent numbers. The rest of the code can then simply use the constants instead of the literal number, which immediately makes it obvious what we\'re dealing with. You can use letters, digits and underscores in a name."
- "Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we\'ll now let the assembler do some of the mundane work for us."
+ "Out of range branch on line %1$d (branches are limited to -128 to +127): %2$s"
+ "Our first program"
+ "Organized as four horizontal strips of 32×8 pixels"
+ "Orange"
+ "Optimized Flatpak configuration by removing unnecessary permissions"
+ "Opened %1$s"
+ "Open..."
+ "Open Source"
+ "Open Assembly File"
+ "Once the values have been shifted down the snake, we have to work out what to do with the head. The direction is first loaded into <tt>A</tt>. <tt>LSR</tt> means \"logical shift right\", or \"shift all the bits one position to the right\". The least significant bit is shifted into the carry flag, so if the accumulator is <tt>1</tt>, after <tt>LSR</tt> it is <tt>0</tt>, with the carry flag set."
+ "On reset (simulator): <tt>P = $30</tt> (bit5 and <tt>B</tt> set; <tt>D</tt> and <tt>I</tt> clear)"
+ "OK"
"Now, let\'s put all this knowledge to good use, and make a game! We\'re going to be making a really simple version of the classic game \'Snake\'."
- "Creating a game"
- "The first instruction causes execution to jump to the <tt>init</tt> label. This sets <tt>X</tt>, then returns to the next instruction, <tt>JSR loop</tt>. This jumps to the <tt>loop</tt> label, which increments <tt>X</tt> until it is equal to <tt>$05</tt>. After that we return to the next instruction, <tt>JSR end</tt>, which jumps to the end of the file. This illustrates how <tt>JSR</tt> and <tt>RTS</tt> can be used together to create modular code."
- "The processor knows where to return to because <tt>JSR</tt> pushes the address minus one of the next instruction onto the stack before jumping to the given location. <tt>RTS</tt> pops this location, adds one to it, and jumps to that location. An example:"
- "<tt>JSR</tt> and <tt>RTS</tt> (\"jump to subroutine\" and \"return from subroutine\") are a dynamic duo that you\'ll usually see used together. <tt>JSR</tt> is used to jump from the current location to another part of the code. <tt>RTS</tt> returns to the previous position. This is basically like calling a function and returning."
- "JSR/RTS"
- "<tt>JMP</tt> is an unconditional jump. Here\'s a really simple example to show it in action:"
- "JMP"
+ "No prior programming experience needed. Start with interactive lessons and build your skills step by step."
+ "No code to run."
+ "No address or label provided"
+ "Next comes <tt>drawSnake</tt>. This is pretty simple too - we first undraw the tail and then draw the head. <tt>X</tt> is set to the length of the snake, so we can index to the right pixel, and we set <tt>A</tt> to zero then perform the write using the indexed indirect addressing mode. Then we reload <tt>X</tt> to index to the head, set <tt>A</tt> to one and store it at <tt>($10,x)</tt>. <tt>$10</tt> stores the two-byte location of the head, so this draws a white pixel at the current head position. As only the head and the tail of the snake move, this is enough to keep the snake moving."
+ "New tools to examine your code, including disassembler and fast switchable memory viewer"
+ "Negative Flag: Set when the most significant bit (bit 7) of the result is 1. Used for signed number comparisons and indicates if a value is negative in two\'s complement representation."
+ "Nearly all games have at their heart a game loop. All game loops have the same basic form: accept user input, update the game state, and render the game state. This loop is no different."
+ "Messages"
+ "Memory locations <tt>$01</tt> and <tt>$02</tt> contain the values <tt>$05</tt> and <tt>$07</tt> respectively. Think of <tt>($00,X)</tt> as <tt>($00 + X)</tt>. In this case <tt>X</tt> is <tt>$01</tt>, so this simplifies to <tt>($01)</tt>. From here things proceed like standard indirect addressing - the two bytes at <tt>$01</tt> and <tt>$02</tt> (<tt>$05</tt> and <tt>$07</tt>) are looked up to form the address <tt>$0705</tt>. This is the address that the <tt>Y</tt> register was stored into in the previous instruction, so the <tt>A</tt> register gets the same value as <tt>Y</tt>, albeit through a much more circuitous route. You won\'t see this much."
+ "Memory Map"
+ "Many minor bugs have been fixed to improve overall usabipty"
+ "Major UI improvements introducing a modern Floating Action Button with dynamic states for intuitive program control, and a completely redesigned debugger widget using modern Adwaita components."
+ "Line Buster 6502"
+ "Light style"
+ "Learning by example has never been easier. Dive into working code, tweak it, break it, fix it again - that\'s how the best programmers learned back in the day!"
+ "Learn how to use the stack with PHA and PLA instructions"
+ "Learn how to program the 6502 microprocessor."
+ "Learn about computer history while coding"
+ "Learn 6502 now runs on Windows and macOS too. If you have been wanting to point a friend at it who is not on Linux, you can now do that."
+ "Learn 6502 now runs on GNOME 50! Thanks to Sabri Ünal for contributing the runtime update."
+ "Learn 6502 Assembly"
+ "Learn"
+ "Labels failure"
+ "Label already defined at line %1$d: %2$s"
+ "Label %1$s is already used as a symbol; please rename one of them"
"Jumping is like branching with two main differences. First, jumps are not conditionally executed, and second, they take a two-byte absolute address. For small programs, this second detail isn\'t very important, as you\'ll mostly be using labels, and the assembler works out the correct memory location from the label. For larger programs though, jumping is the only way to move from one section of the code to another."
"Jumping"
- "<tt>X</tt> holds the pixel colour, and <tt>Y</tt> holds the position of the current pixel. The first loop draws the current colour as a pixel (via the <tt>A</tt> register), pushes the colour to the stack, then increments the colour and position. The second loop pops the stack, draws the popped colour as a pixel, then increments the position. As should be expected, this creates a mirrored pattern."
- "Two of the stack instructions are <tt>PHA</tt> and <tt>PLA</tt>, \"push accumulator\" and \"pull accumulator\". Below is an example of these two in action."
- "The stack in a 6502 processor is just like any other stack - values are pushed onto it and popped (\"pulled\" in 6502 parlance) off it. The current depth of the stack is measured by the stack pointer, a special register. The stack lives in memory between <tt>$0100</tt> and <tt>$01ff</tt>. The stack pointer is initially <tt>$ff</tt>, which points to memory location <tt>$01ff</tt>. When a byte is pushed onto the stack, the stack pointer becomes <tt>$fe</tt>, or memory location <tt>$01fe</tt>, and so on."
- "The stack"
- "Try to write code snippets that use each of the 6502 addressing modes. Remember, you can use the monitor in the debugger to watch a section of memory."
- "Exercise"
- "In this case, <tt>($01)</tt> looks up the two bytes at <tt>$01</tt> and <tt>$02</tt>: <tt>$03</tt> and <tt>$07</tt>. These form the address <tt>$0703</tt>. The value of the <tt>Y</tt> register is added to this address to give the final address <tt>$0704</tt>."
- "Indirect indexed is like indexed indirect but less insane. Instead of adding the <tt>X</tt> register to the address <i>before</i> dereferencing, the zero page address is dereferenced, and the <tt>Y</tt> register is added to the resulting address."
+ "JSR/RTS"
+ "JMP"
+ "Introduction"
+ "Interrupt Flag: When set, masks (disables) all maskable interrupts (IRQ). Only Non-Maskable Interrupts (NMI) can still occur. Used for critical sections of code that must not be interrupted."
+ "Interface font"
+ "Interactive tutorials guide you from beginner to advanced"
+ "Interactive tutorial"
+ "Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here\'s some annotated source code to introduce a few different instructions:"
+ "Instructions"
+ "Initialization"
+ "Indirect: <tt>($c000)</tt>"
"Indirect indexed: <tt>($c0),Y</tt>"
- "Memory locations <tt>$01</tt> and <tt>$02</tt> contain the values <tt>$05</tt> and <tt>$07</tt> respectively. Think of <tt>($00,X)</tt> as <tt>($00 + X)</tt>. In this case <tt>X</tt> is <tt>$01</tt>, so this simplifies to <tt>($01)</tt>. From here things proceed like standard indirect addressing - the two bytes at <tt>$01</tt> and <tt>$02</tt> (<tt>$05</tt> and <tt>$07</tt>) are looked up to form the address <tt>$0705</tt>. This is the address that the <tt>Y</tt> register was stored into in the previous instruction, so the <tt>A</tt> register gets the same value as <tt>Y</tt>, albeit through a much more circuitous route. You won\'t see this much."
- "This one\'s kinda weird. It\'s like a cross between zero page,X and indirect. Basically, you take the zero page address, add the value of the <tt>X</tt> register to it, then use that to look up a two-byte address. For example:"
+ "Indirect indexed is like indexed indirect but less insane. Instead of adding the <tt>X</tt> register to the address <i>before</i> dereferencing, the zero page address is dereferenced, and the <tt>Y</tt> register is added to the resulting address."
+ "Indirect addressing uses an absolute address to look up another address. The first address gives the least significant byte of the address, and the following byte gives the most significant byte. That can be hard to wrap your head around, so here\'s an example:"
+ "Indexing labels..."
"Indexed indirect: <tt>($c0,X)</tt>"
+ "Index register Y: Used for addressing"
+ "Index register X: Used for addressing"
+ "In this tiny tutorial I\'m going to show you how to get started writing 6502 assembly language. The 6502 processor was massive in the seventies and eighties, powering famous computers like the <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, and the <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender in Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">has a 6502 processor for a brain</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Even the Terminator was programmed in 6502</a>."
"In this example, <tt>$f0</tt> contains the value <tt>$01</tt> and <tt>$f1</tt> contains the value <tt>$cc</tt>. The instruction <tt>JMP ($f0)</tt> causes the processor to look up the two bytes at <tt>$f0</tt> and <tt>$f1</tt> (<tt>$01</tt> and <tt>$cc</tt>) and put them together to form the address <tt>$cc01</tt>, which becomes the new program counter. Assemble and step through the program above to see what happens. I\'ll talk more about <tt>JMP</tt> in the section on <a href=\"#jumping\">Jumping</a>."
- "Indirect addressing uses an absolute address to look up another address. The first address gives the least significant byte of the address, and the following byte gives the most significant byte. That can be hard to wrap your head around, so here\'s an example:"
- "Indirect: <tt>($c000)</tt>"
- "Some instructions don\'t deal with memory locations (e.g. <tt>INX</tt> - increment the <tt>X</tt> register). These are said to have implicit addressing - the argument is implied by the instruction."
+ "In this case, <tt>($01)</tt> looks up the two bytes at <tt>$01</tt> and <tt>$02</tt>: <tt>$03</tt> and <tt>$07</tt>. These form the address <tt>$0703</tt>. The value of the <tt>Y</tt> register is added to this address to give the final address <tt>$0704</tt>."
+ "In this assembler, we can define descriptive constants (or symbols) that represent numbers. The rest of the code can then simply use the constants instead of the literal number, which immediately makes it obvious what we\'re dealing with. You can use letters, digits and underscores in a name."
+ "In the editor <b>type</b> (don\'t paste) the following code:"
+ "In assembly language, you\'ll usually use labels with branch instructions. When assembled though, this label is converted to a single-byte relative offset (a number of bytes to go backwards or forwards from the next instruction) so branch instructions can only go forward and back around 256 bytes. This means they can only be used to move around local code. For moving further you\'ll need to use the jumping instructions."
+ "Improved the game console performance for smoother gameplay"
+ "Improved game screen and controls for mobile devices"
+ "Improved descriptions to be more welcoming for non-technical users"
"Implicit"
- "<tt>a9</tt> and <tt>c9</tt> are the processor opcodes for immediate-addressed <tt>LDA</tt> and <tt>CMP</tt> respectively. <tt>01</tt> and <tt>02</tt> are the arguments to these instructions. <tt>d0</tt> is the opcode for <tt>BNE</tt>, and its argument is <tt>02</tt>. This means \"skip over the next two bytes\" (<tt>85 22</tt>, the assembled version of <tt>STA $22</tt>). Try editing the code so <tt>STA</tt> takes a two-byte absolute address rather than a single-byte zero page address (e.g. change <tt>STA $22</tt> to <tt>STA $2222</tt>). Reassemble the code and look at the hexdump again - the argument to <tt>BNE</tt> should now be <tt>03</tt>, because the instruction the processor is skipping past is now three bytes long."
- "The hex should look something like this:"
- "Assemble the following code, then check the debugger to see the hexdump of the assembled code."
- "Relative addressing is used for branching instructions. These instructions take a single byte, which is used as an offset from the following instruction."
- "Relative: <tt>$c0</tt> (or label)"
- "Immediate addressing doesn\'t strictly deal with memory addresses - this is the mode where actual values are used. For example, <tt>LDX #$01</tt> loads the value <tt>$01</tt> into the <tt>X</tt> register. This is very different to the zero page instruction <tt>LDX $01</tt> which loads the value at memory location <tt>$01</tt> into the <tt>X</tt> register."
"Immediate: <tt>#$c0</tt>"
- "Unlike zero page,Y, absolute,Y can\'t be used with <tt>STX</tt> but can be used with <tt>LDA</tt> and <tt>STA</tt>."
- "These are the absolute addressing versions of zero page,X and zero page,Y. For example:"
- "Absolute,X and absolute,Y: <tt>$c000,X</tt> and <tt>$c000,Y</tt>"
- "This is the equivalent of zero page,X, but can only be used with <tt>LDX</tt> and <tt>STX</tt>."
- "Zero page,Y: <tt>$c0,Y</tt>"
+ "Immediate addressing doesn\'t strictly deal with memory addresses - this is the mode where actual values are used. For example, <tt>LDX #$01</tt> loads the value <tt>$01</tt> into the <tt>X</tt> register. This is very different to the zero page instruction <tt>LDX $01</tt> which loads the value at memory location <tt>$01</tt> into the <tt>X</tt> register."
+ "If your system language is Chinese, the app shows up in Chinese again. It had been falling back to English by mistake."
+ "If your example is based on or inspired by another example, you can provide the source URL."
+ "If you speak one of the listed languages, please help review or improve the translations. You can contribute via the in‑app links, our translation platform, or by opening an issue."
"If the result of the addition is larger than a single byte, the address wraps around. For example:"
- "This is where addressing gets interesting. In this mode, a zero page address is given, and then the value of the <tt>X</tt> register is added. Here is an example:"
- "Zero page,X: <tt>$c0,X</tt>"
- "All instructions that support absolute addressing (with the exception of the jump instructions) also have the option to take a single-byte address. This type of addressing is called \"zero page\" - only the first page (the first 256 bytes) of memory is accessible. This is faster, as only one byte needs to be looked up, and takes up less space in the assembled code as well."
- "Zero page: <tt>$c0</tt>"
- "With absolute addressing, the full memory location is used as the argument to the instruction. For example:"
- "Absolute: <tt>$c000</tt>"
- "With all these examples you might find it helpful to use the memory monitor in the debugger to watch the memory change. The monitor takes a starting memory location and a number of bytes to display from that location. Both of these are hex values. For example, to display 16 bytes of memory from <tt>$c000</tt>, enter <tt>c000</tt> and <tt>10</tt> into <b>Start</b> and <b>Length</b>, respectively."
- "The 6502 uses a 16-bit address bus, meaning that there are 65536 bytes of memory available to the processor. Remember that a byte is represented by two hex characters, so the memory locations are generally represented as <tt>$0000 - $ffff</tt>. There are various ways to refer to these memory locations, as detailed below."
- "Addressing modes"
- "<tt>BCC</tt> and <tt>BCS</tt> (\"branch on carry clear\" and \"branch on carry set\") are used to branch on the carry flag. Write a program that uses one of these two."
- "The opposite of <tt>BNE</tt> is <tt>BEQ</tt>. Try writing a program that uses <tt>BEQ</tt>."
- "In assembly language, you\'ll usually use labels with branch instructions. When assembled though, this label is converted to a single-byte relative offset (a number of bytes to go backwards or forwards from the next instruction) so branch instructions can only go forward and back around 256 bytes. This means they can only be used to move around local code. For moving further you\'ll need to use the jumping instructions."
- "The next line, <tt>BNE decrement</tt>, will shift execution to the decrement label if the <tt>Z</tt> flag is set to <tt>0</tt> (meaning that the two values in the <tt>CPX</tt> comparison were not equal), otherwise it does nothing and we store <tt>X</tt> to <tt>$0201</tt>, then finish the program."
- "First we load the value <tt>$08</tt> into the <tt>X</tt> register. The next line is a label. Labels just mark certain points in a program so we can return to them later. After the label we decrement <tt>X</tt>, store it to <tt>$0200</tt> (the top-left pixel), and then compare it to the value <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compares the value in the <tt>X</tt> register with another value. If the two values are equal, the <tt>Z</tt> flag is set to <tt>1</tt>, otherwise it is set to <tt>0</tt>."
- "6502 assembly language has a bunch of branching instructions, all of which branch based on whether certain flags are set or not. In this example we\'ll be looking at <tt>BNE</tt>: \"Branch on not equal\"."
- "So far we\'re only able to write basic programs without any branching logic. Let\'s change that."
+ "IDE"
+ "I won\'t explain in depth how each of the directions work, but the above explanation should give you enough to work it out with a bit of study."
+ "Hidden"
+ "Hexdump generated."
+ "Hexdump"
+ "Hex Monitor"
+ "Here\'s an example. Note that immediate operands are still prefixed with a <tt>#</tt>."
+ "Help"
+ "Hebrew is also our first right-to-left language: thanks to Menachem\'s testing and contributions, the app now supports right-to-left layouts, preparing it for more RTL languages."
+ "Green"
+ "Great start — you finished the first chapter!"
+ "Got your own cool 6502 creation? Share it with the community! You can now submit your code examples directly from within the app. Just hit the share button, and we\'ll automatically create a GitHub issue and pull request for you."
+ "Got a cool 6502 example?\nShare it with the community!"
+ "Going between sections is more complicated, as we have to take into account the most significant byte as well. For example, going down from <tt>$02e1</tt> should lead to <tt>$0301</tt>. Luckily, this is fairly easy to accomplish. Adding <tt>$20</tt> to <tt>$e1</tt> results in <tt>$01</tt> and sets the carry bit. If the carry bit was set, we know we also need to increment the most significant byte."
+ "German and Spanish have been validated by contributors. Other languages are AI‑assisted drafts and need human validation."
+ "Games now automatically pause when switching between screens"
+ "Gamepad key pressed:"
+ "GNOME font"
+ "GNOME"
+ "Fully commented version of the Snake game"
+ "Full Memory ($0000-$FFFF)"
+ "Found %1$d labels."
+ "Found %1$d label."
+ "For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for."
+ "Font"
+ "Follow system style"
+ "Fixed build error on PostmarketOS, improving mobile compatibility"
+ "Fixed an issue where the back button in the learn section was always visible in desktop and tablet mode, even when no subpage was open."
+ "First, <tt>readkeys</tt> checks to see if one of the direction keys (W, A, S, D) was pressed, and if so, sets the direction of the snake accordingly. Then, <tt>checkCollision</tt> checks to see if the snake collided with itself or the apple. <tt>updateSnake</tt> updates the internal representation of the snake, based on its direction. Next, the apple and snake are drawn. Finally, <tt>spinWheels</tt> makes the processor do some busy work, to stop the game from running too quickly. Think of it like a sleep command. The game keeps running until the snake collides with the wall or itself."
+ "First we load the value <tt>$08</tt> into the <tt>X</tt> register. The next line is a label. Labels just mark certain points in a program so we can return to them later. After the label we decrement <tt>X</tt>, store it to <tt>$0200</tt> (the top-left pixel), and then compare it to the value <tt>$03</tt>. <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html#CPX\"><tt>CPX</tt></a> compares the value in the <tt>X</tt> register with another value. If the two values are equal, the <tt>Z</tt> flag is set to <tt>1</tt>, otherwise it is set to <tt>0</tt>."
+ "First row: <tt>$0200</tt>-<tt>$021F</tt>, second row: <tt>$0220</tt>-<tt>$023F</tt>, etc."
+ "First release of Learn 6502 Assembly for GNOME"
+ "Finally, byte <tt>$03</tt> contains the current length of the snake, in terms of bytes in memory (so a length of 4 means 2 pixels)."
+ "Fill in the information about your 6502 example to share it with the community"
+ "File \"%1$s\" has unsaved changes"
+ "Failed to copy to clipboard"
+ "Exercises"
+ "Exercise"
+ "Execute instructions one by one instead of continuously"
+ "Examples"
+ "Example submitted for review"
+ "Even though this will be a simple version, the code will be substantially larger than all the previous examples. We will need to keep track of several memory locations together for the various aspects of the game. We can still do the necessary bookkeeping throughout the program ourselves, as before, but on a larger scale that quickly becomes tedious and can also lead to bugs that are difficult to spot. Instead we\'ll now let the assembler do some of the mundane work for us."
+ "Even Odd"
+ "Equipped with that knowledge, you should be able to see that the instruction <tt>LDA #$01</tt> loads the hex value <tt>$01</tt> into register <tt>A</tt>. I\'ll go into more detail on registers in the next section."
+ "Enhanced the hex monitor address range input for easier value editing"
+ "Enhanced app presentation and accessibility"
+ "Enable Stepper Mode"
+ "Enable Debugger"
+ "Each section (<tt>upKey</tt>, <tt>rightKey</tt>, etc.) first checks to see if the current direction is the opposite of the new direction. This requires another little detour."
+ "Done"
+ "Display Organization"
+ "Display Memory ($0200-$05FF)"
+ "Discover the fascinating world of programming classic computers and game consoles! Learn 6502 assembly language - the same code that powered iconic systems like the NES, Commodore 64, and Apple II."
+ "Discard"
+ "Disassembly generated."
+ "Disassembled"
+ "Disable to improve performance"
+ "Dino Run"
+ "Description"
+ "Decimal Flag: Enables Binary Coded Decimal (BCD) mode for arithmetic operations. When set, ADC/SBC instructions treat values as decimal digits (0-9) instead of binary. Used for financial calculations and decimal arithmetic."
+ "Debugger now only updates when visible, reducing unnecessary processing"
+ "Debugger"
+ "Debug your programs with real-time inspection tools"
+ "Debug Settings"
+ "Debug"
+ "Dark style"
+ "Creating a game"
+ "Copy to editor"
+ "Copy to clipboard"
+ "Copied to clipboard"
+ "Continue"
+ "Confirm"
+ "Common Instructions"
+ "Commented Snake Game"
+ "Color Palette"
+ "Code editor and virtual game console"
+ "Code copied to editor"
+ "Code assembled successfully, %1$d bytes."
+ "Code"
+ "Change one of the pixels to draw at the bottom-right corner (memory location <tt>$05ff</tt>)."
+ "Carry Flag: Set when an addition produces a carry-out; clear when a subtraction requires a borrow. Used for multi-byte arithmetic and shifts/rotates (BCS/BCC)."
+ "Cancel"
+ "By submitting, you agree that your example will be licensed under <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC BY 4.0</a>."
+ "Break the blocks with the paddle and ball."
+ "Break Flag: Set when a BRK (Break) instruction is executed. Used to distinguish between software interrupts (BRK) and hardware interrupts. Helps identify the source of an interrupt in interrupt service routines."
"Branching"
- "The opposite of <tt>ADC</tt> is <tt>SBC</tt> (subtract with carry). Write a program that uses this instruction."
- "Rewrite the first example in this section to use the <tt>Y</tt> register instead of the <tt>X</tt> register."
- "You\'ve seen <tt>TAX</tt>. You can probably guess what <tt>TAY</tt>, <tt>TXA</tt> and <tt>TYA</tt> do, but write some code to test your assumptions."
- "A full list of the 6502 instruction set is <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">available here</a> and <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">here</a> (I usually refer to both pages as they have their strengths and weaknesses). These pages detail the arguments to each instruction, which registers they use, and which flags they set. They are your bible."
- "Assemble the code and select <b>Step</b> from the Run button\'s dropdown menu to step through these three instructions. The monitor in the debugger shows a section of memory, and can be helpful to visualise the execution of programs. <tt>STA $01</tt> stores the value of the <tt>A</tt> register at memory location <tt>$01</tt>, and <tt>ADC $01</tt> adds the value stored at the memory location <tt>$01</tt> to the <tt>A</tt> register. <tt>$80 + $80</tt> should equal <tt>$100</tt>, but because this is bigger than a byte, the <tt>A</tt> register is set to <tt>$00</tt> and the carry flag is set. As well as this though, the zero flag is set. The zero flag is set by all instructions where the result is zero."
+ "Blue"
+ "Because the game state is stored in terms of pixel locations, rendering the game is very straightforward. The first subroutine, <tt>drawApple</tt>, is extremely simple. It sets <tt>Y</tt> to zero, loads a random colour into the accumulator, then stores this value into <tt>($00),y</tt>. <tt>$00</tt> is where the location of the apple is stored, so <tt>($00),y</tt> dereferences to this memory location. Read the \"Indirect indexed\" section in <a href=\"#addressing\">Addressing modes</a> for more details."
+ "Back"
+ "Author"
+ "At a low level, this subroutine is slightly more complex. First, the length is loaded into the <tt>X</tt> register, which is then decremented. The snippet below shows the starting memory for the snake."
+ "Assembly Files"
+ "Assembly"
+ "Assembling code ..."
+ "Assembled successfully"
+ "Assemble the following code, then open the <b>Debug</b> view and check the <b>Hexdump</b> to see the assembled code."
+ "Assemble the code, then open the <b>Debug</b> view and step through the code, watching the <tt>A</tt> and <tt>X</tt> registers. Something slightly odd happens on the line <tt>ADC #$c4</tt>. You might expect that adding <tt>$c4</tt> to <tt>$c0</tt> would give <tt>$184</tt>, but this processor gives the result as <tt>$84</tt>. What\'s up with that?"
+ "Assemble the code and use <b>Step</b> to step through these three instructions. The <b>Hex Monitor</b> in the debug view shows a section of memory, and can be helpful to visualise the execution of programs. <tt>STA $01</tt> stores the value of the <tt>A</tt> register at memory location <tt>$01</tt>, and <tt>ADC $01</tt> adds the value stored at the memory location <tt>$01</tt> to the <tt>A</tt> register. <tt>$80 + $80</tt> should equal <tt>$100</tt>, but because this is bigger than a byte, the <tt>A</tt> register is set to <tt>$00</tt> and the carry flag is set. As well as this though, the zero flag is set. The zero flag is set by all instructions where the result is zero."
+ "Assemble failed"
+ "Assemble"
+ "As stated before, the four directions are represented internally by the numbers 1, 2, 4 and 8. Each of these numbers is a power of 2, thus they are represented by a binary number with a single <tt>1</tt>:"
+ "As long as you\'re moving within one of these horizontal strips, things are simple. For example, to move right, just increment the least significant byte (e.g. <tt>$0200</tt> becomes <tt>$0201</tt>). To go down, add <tt>$20</tt> (e.g. <tt>$0200</tt> becomes <tt>$0220</tt>). Left and up are the reverse."
+ "As always, this release includes many small fixes and improvements."
+ "Architecture enhancements enable better code sharing between GNOME, Web, and Android platforms."
+ "Appearance settings"
+ "Appearance"
+ "Any numbers prefixed with <tt>$</tt> in 6502 assembly language (and by extension, in this book) are in hexadecimal (hex) format. If you\'re not familiar with hex numbers, I recommend you read <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">the Wikipedia article</a>. Anything prefixed with <tt>#</tt> is a literal number value. Any other number refers to a memory location."
"An important thing to notice here is the distinction between <tt>ADC #$01</tt> and <tt>ADC $01</tt>. The first one adds the value <tt>$01</tt> to the <tt>A</tt> register, but the second adds the value stored at memory location <tt>$01</tt> to the <tt>A</tt> register."
- "In the simulator below <b>type</b> (don\'t paste) the following code:"
- "The problem is, <tt>$184</tt> is too big to fit in a single byte (the max is <tt>$FF</tt>), and the registers can only hold a single byte. It\'s OK though; the processor isn\'t actually dumb. If you were looking carefully enough, you\'ll have noticed that the carry flag was set to <tt>1</tt> after this operation. So that\'s how you know."
- "Assemble the code, then turn on the debugger and step through the code, watching the <tt>A</tt> and <tt>X</tt> registers. Something slightly odd happens on the line <tt>ADC #$c4</tt>. You might expect that adding <tt>$c4</tt> to <tt>$c0</tt> would give <tt>$184</tt>, but this processor gives the result as <tt>$84</tt>. What\'s up with that?"
- "Instructions in assembly language are like a small set of predefined functions. All instructions take zero or one arguments. Here\'s some annotated source code to introduce a few different instructions:"
- "Instructions"
- "The last section shows the processor flags. Each flag is one bit, so all seven flags live in a single byte. The flags are set by the processor to give information about the previous instruction. More on that later. <a href=\"https://web.archive.org/web/20210626024532/http://www.obelisk.me.uk/6502/registers.html\">Read more about the registers and flags here</a>."
- "<tt>PC</tt> is the program counter - it\'s how the processor knows at what point in the program it currently is. It\'s like the current line number of an executing script. In the JavaScript simulator the code is assembled starting at memory location <tt>$0600</tt>, so <tt>PC</tt> always starts there."
- "<tt>SP</tt> is the stack pointer. I won\'t get into the stack yet, but basically this register is decremented every time a byte is pushed onto the stack, and incremented when a byte is popped off the stack."
- "The first line shows the <tt>A</tt>, <tt>X</tt> and <tt>Y</tt> registers (<tt>A</tt> is often called the \"accumulator\"). Each register holds a single byte. Most operations work on the contents of these registers."
- "We\'ve already had a little look at the processor status section (the bit with <tt>A</tt>, <tt>PC</tt> etc.), but what does it all mean?"
- "Registers and flags"
+ "Also useful: <b>BIT</b>, <b>CMP/CPX/CPY</b>, <b>PHP/PLP</b>, <b>TSX/TXS</b>, <b>SED/CLD</b>, <b>SEI/CLI</b>, <b>BMI/BPL</b>, <b>BVS/BVC</b>"
+ "Almost Done!"
+ "All instructions that support absolute addressing (with the exception of the jump instructions) also have the option to take a single-byte address. This type of addressing is called \"zero page\" - only the first page (the first 256 bytes) of memory is accessible. This is faster, as only one byte needs to be looked up, and takes up less space in the assembled code as well."
+ "All Files"
+ "After this, the value <tt>2</tt> is added to the accumulator, to create a final random number in the range 2–5."
+ "After the initial block of comments (lines starting with semicolons), the first two lines are:"
+ "After collision detection, we update the snake\'s location. This is done at a high level like so: First, move each byte pair of the body up one position in memory. Second, update the head according to the current direction. Finally, if the head is out of bounds, handle it as a collision. I\'ll illustrate this with some ascii art. Each pair of brackets contains an x,y coordinate rather than a pair of bytes for simplicity."
+ "After a move in each direction, we also need to check to see if the head would become out of bounds. This is handled differently for each direction. For left and right, we can check to see if the head has effectively \"wrapped around\". Going right from <tt>$021f</tt> by incrementing the least significant byte would lead to <tt>$0220</tt>, but this is actually jumping from the last pixel of the first row to the first pixel of the second row. So, every time we move right, we need to check if the new least significant byte is a multiple of <tt>$20</tt>. This is done using a bit check against the mask <tt>$1f</tt>. Hopefully the illustration below will show you how masking out the lowest 5 bits reveals whether a number is a multiple of <tt>$20</tt> or not."
+ "Adwaita"
+ "Addressing modes"
+ "Addressing Modes"
+ "Address %1$s - unknown opcode"
+ "Additional button inputs are also available: button A (Enter/Return key, ASCII code <tt>$0D</tt>) and button B (Space key, ASCII code <tt>$20</tt>). These can be used to add more interaction to your games. For directional controls, both WASD keys and arrow keys can be used interchangeably."
+ "Added help feature to make code editing easier for beginners"
+ "Added file management to save and load your programs"
"Add more instructions to draw extra pixels."
- "3."
- "Change one of the pixels to draw at the bottom-right corner (memory location <tt>$05ff</tt>)."
- "2."
- "Try changing the colour of the three pixels."
- "1."
- "Exercises"
- "So, the instruction <tt>STA $0200</tt> stores the value of the <tt>A</tt> register to memory location <tt>$0200</tt>. Click <b>Step</b> four more times to execute the rest of the instructions, keeping an eye on the <tt>A</tt> register as it changes."
- "Press <b>Step</b> again to execute the second instruction. The top-left pixel of the game console should now be white. This simulator uses the memory locations <tt>$0200</tt> to <tt>$05ff</tt> to draw pixels on its display. The values <tt>$00</tt> to <tt>$0f</tt> represent 16 different colours (<tt>$00</tt> is black and <tt>$01</tt> is white), so storing the value <tt>$01</tt> at memory location <tt>$0200</tt> draws a white pixel at the top left corner. This is simpler than how an actual computer would output video, but it\'ll do for now."
- "Equipped with that knowledge, you should be able to see that the instruction <tt>LDA #$01</tt> loads the hex value <tt>$01</tt> into register <tt>A</tt>. I\'ll go into more detail on registers in the next section."
- "Any numbers prefixed with <tt>$</tt> in 6502 assembly language (and by extension, in this book) are in hexadecimal (hex) format. If you\'re not familiar with hex numbers, I recommend you read <a href=\"https://en.wikipedia.org/wiki/Hexadecimal\">the Wikipedia article</a>. Anything prefixed with <tt>#</tt> is a literal number value. Any other number refers to a memory location."
- "So, what\'s this program actually doing? Let\'s step through it. Hit <b>Reset</b>, then select <b>Step</b> from the dropdown menu. The button will switch to step mode, allowing you to execute the program one instruction at a time. Click once and you\'ll notice in the debugger that <tt>A=</tt> changed from <tt>$00</tt> to <tt>$01</tt>, and <tt>PC=</tt> changed from <tt>$0600</tt> to <tt>$0602</tt>."
- "The black game console screen now should show three coloured \"pixels\" at the top left."
- "So, let\'s dive in! This application contains a <a href=\"https://github.com/JumpLink/Learn6502/tree/main/packages/core\">JavaScript 6502 Assembler and Simulator</a> that I have adapted for this interactive tutorial. Click the <b>Copy</b> button in the code block below to copy the example code to the editor. Then click the button in the top right to assemble the code, then click it again to run the program. You can also access these actions through the dropdown menu."
- "Our first program"
- "Then why 6502? Why not a <i>useful</i> assembly language, like <a href=\"https://en.wikipedia.org/wiki/X86\">x86</a>? Well, I don\'t think learning x86 is useful. I don\'t think you\'ll ever have to <i>write</i> assembly language in your day job - this is purely an academic exercise, something to expand your mind and your thinking. 6502 was originally written in a different age, a time when the majority of developers were writing assembly directly, rather than in these new-fangled high-level programming languages. So, it was designed to be written by humans. More modern assembly languages are meant to written by compilers, so let\'s leave it to them. Plus, 6502 is <i>fun</i>. Nobody ever called x86 <i>fun</i>."
- "Seriously though, I think it\'s valuable to have an understanding of assembly language. Assembly language is the lowest level of abstraction in computers - the point at which the code is still readable. Assembly language translates directly to the bytes that are executed by your computer\'s processor. If you understand how it works, you\'ve basically become a computer <a href=\"https://www.skilldrick.co.uk/2011/04/magic-in-software-development/\">magician</a>."
- "(Actually, I\'ve been reliably informed that 6502 processors are still being produced by <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> and <a href=\"https://www.mouser.co.uk/c/?q=65C02\">sold to hobbyists</a>, so clearly 6502 <i>isn't</i> a dead language! Who knew?)"
- "So, why would you want to learn 6502? It\'s a dead language isn\'t it? Well, so\'s Latin. And they still teach that. <a href=\"https://en.wikipedia.org/wiki/Q.E.D.\">Q.E.D.</a>"
- "In this tiny tutorial I\'m going to show you how to get started writing 6502 assembly language. The 6502 processor was massive in the seventies and eighties, powering famous computers like the <a href=\"https://en.wikipedia.org/wiki/BBC_Micro\">BBC Micro</a>, <a href=\"https://en.wikipedia.org/wiki/Atari_2600\">Atari 2600</a>, <a href=\"https://en.wikipedia.org/wiki/Commodore_64\">Commodore 64</a>, <a href=\"https://en.wikipedia.org/wiki/Apple_II\">Apple II</a>, and the <a href=\"https://en.wikipedia.org/wiki/Nintendo_Entertainment_System\">Nintendo Entertainment System</a>. Bender in Futurama <a href=\"https://www.transbyte.org/SID/SID-files/Bender_6502.jpg\">has a 6502 processor for a brain</a>. <a href=\"https://www.pagetable.com/docs/terminator/00-37-23.jpg\">Even the Terminator was programmed in 6502</a>."
- "Introduction"
- "Tutorial <sub>by <a href=\"https://www.skilldrick.co.uk/\">Nick Morgan</a>, licensed under CC BY 4.0</sub>"
- "<b><tt>$10</tt>-<tt>$15</tt></b>: Snake position data (head, body segments, tail)"
- "<b><tt>$03</tt></b>: Snake length"
- "<b><tt>$02</tt></b>: Snake direction (1=up, 2=right, 4=down, 8=left)"
- "<b><tt>$00</tt>-<tt>$01</tt></b>: Apple position"
- "Snake Game Memory Usage"
- "<b>E</b> or Space key (<tt>$20</tt>)"
- "<b>Q</b> or Enter/Return key (<tt>$0D</tt>)"
- "<b>Action buttons</b>:"
- "<b>D</b> or Right Arrow key (<tt>$64</tt>)"
- "<b>S</b> or Down Arrow key (<tt>$73</tt>)"
- "<b>A</b> or Left Arrow key (<tt>$61</tt>)"
+ "Accumulator: Main register for calculations"
+ "Accent: Yellow"
+ "Accent: Teal"
+ "Accent: Slate"
+ "Accent: Red"
+ "Accent: Purple"
+ "Accent: Pink"
+ "Accent: Orange"
+ "Accent: Green"
+ "Accent: Blue"
+ "Accent color"
+ "Absolute: <tt>$c000</tt>"
+ "Absolute,X and absolute,Y: <tt>$c000,X</tt> and <tt>$c000,Y</tt>"
+ "About Learn 6502 Assembly"
+ "A full list of the 6502 instruction set is <a href=\"https://web.archive.org/web/20250915114440/http://www.6502.org/tutorials/6502opcodes.html\">available here</a> and <a href=\"https://web.archive.org/web/20210626042844/http://www.obelisk.me.uk/6502/reference.html\">here</a> (I usually refer to both pages as they have their strengths and weaknesses). These pages detail the arguments to each instruction, which registers they use, and which flags they set. They are your bible."
+ "A GitHub issue has been opened in your browser. Please review and submit it there to complete your contribution. Once approved, your example will be included in the next release.\n\nShould your example be too large, the complete content will be copied to your clipboard for manual pasting into the GitHub issue."
+ "<tt>init</tt> and <tt>loop</tt> are both subroutines. <tt>init</tt> initializes the game state, and <tt>loop</tt> is the main game loop."
+ "<tt>checkSnakeCollision</tt> loops through the snake\'s body segments, checking each byte pair against the head pair. If there is a match, then game over."
+ "<tt>a9</tt> and <tt>c9</tt> are the processor opcodes for immediate-addressed <tt>LDA</tt> and <tt>CMP</tt> respectively. <tt>01</tt> and <tt>02</tt> are the arguments to these instructions. <tt>d0</tt> is the opcode for <tt>BNE</tt>, and its argument is <tt>02</tt>. This means \"skip over the next two bytes\" (<tt>85 22</tt>, the assembled version of <tt>STA $22</tt>). Try editing the code so <tt>STA</tt> takes a two-byte absolute address rather than a single-byte zero page address (e.g. change <tt>STA $22</tt> to <tt>STA $2222</tt>). Reassemble the code and look at the hexdump again - the argument to <tt>BNE</tt> should now be <tt>03</tt>, because the instruction the processor is skipping past is now three bytes long."
+ "<tt>X</tt> holds the pixel colour, and <tt>Y</tt> holds the position of the current pixel. The first loop draws the current colour as a pixel (via the <tt>A</tt> register), pushes the colour to the stack, then increments the colour and position. The second loop pops the stack, draws the popped colour as a pixel, then increments the position. As should be expected, this creates a mirrored pattern."
+ "<tt>SP</tt> is the stack pointer. I won\'t get into the stack yet, but basically this register is decremented every time a byte is pushed onto the stack, and incremented when a byte is popped off the stack."
+ "<tt>PC</tt> is the program counter - it\'s how the processor knows at what point in the program it currently is. It\'s like the current line number of an executing script. In the simulator the code is assembled starting at memory location <tt>$0600</tt>, so <tt>PC</tt> always starts there."
+ "<tt>JSR</tt> and <tt>RTS</tt> (\"jump to subroutine\" and \"return from subroutine\") are a dynamic duo that you\'ll usually see used together. <tt>JSR</tt> is used to jump from the current location to another part of the code. <tt>RTS</tt> returns to the previous position. This is basically like calling a function and returning."
+ "<tt>JMP</tt> is an unconditional jump. Here\'s a really simple example to show it in action:"
+ "<tt>BCC</tt> and <tt>BCS</tt> (\"branch on carry clear\" and \"branch on carry set\") are used to branch on the carry flag. Write a program that uses one of these two."
+ "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (first 256 bytes, faster access)"
+ "<b>Zero Page</b> (<tt>$c0</tt>): Access memory locations <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): Add X/Y register to zero page address"
+ "<b>Z</b> (Zero): Set when result is zero"
+ "<b>X, Y</b>: Index registers for addressing and counting"
"<b>W</b> or Up Arrow key (<tt>$77</tt>)"
- "<b>Directional controls</b>:"
- "<b><tt>$FF</tt></b>: Last pressed key (ASCII code)"
- "<b><tt>$FE</tt></b>: Random number generator (reads as a random value 0-255)"
- "Special Memory Locations (in Simulator)"
+ "<b>V</b> (Overflow): Set when arithmetic operation causes signed overflow"
+ "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
+ "<b>STA/STX/STY</b>: Store registers to memory"
+ "<b>SP</b> (Stack Pointer): Points to current stack position (starts at <tt>$FF</tt>)"
+ "<b>SBC needs carry set</b>: Set <tt>C</tt> before subtracting (works as inverse borrow). <tt>C</tt> clear after SBC indicates a borrow occurred."
+ "<b>S</b> or Down Arrow key (<tt>$73</tt>)"
+ "<b>Relative</b> (<tt>label</tt>): Branch uses signed 8‑bit offset from the next instruction (−128…+127)"
+ "<b>Q</b> or Enter/Return key (<tt>$0D</tt>)"
+ "<b>Program Storage</b>: Starting at <tt>$0600</tt>"
"<b>PHA/PLA</b>: Push/pull accumulator to/from stack"
- "<b>BEQ/BNE/BCC/BCS</b>: Branch if equal/not equal/carry clear/carry set"
+ "<b>PC</b> (Program Counter): Points to the next instruction to execute"
+ "<b>N</b> (Negative): Set when bit 7 of result is set"
+ "<b>LDA/LDX/LDY</b>: Load registers"
"<b>JSR/RTS</b>: Jump to subroutine / Return from subroutine"
"<b>JMP</b>: Unconditional jump"
- "<b>ADC/SBC</b>: Add/subtract with carry"
- "<b>INX/INY/DEX/DEY</b>: Increment/decrement registers"
- "<b>STA/STX/STY</b>: Store registers to memory"
- "<b>LDA/LDX/LDY</b>: Load registers"
- "Common Instructions"
- "<b>Indirect Indexed</b> (<tt>($c0),Y</tt>): Dereference zero page address, then add Y"
- "<b>Indexed Indirect</b> (<tt>($c0,X)</tt>): Add X to zero page address, then dereference"
"<b>Indirect</b> (<tt>($c000)</tt>): Look up address stored at given location"
- "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Add X/Y register to absolute address"
- "<b>Zero Page,X/Y</b> (<tt>$c0,X</tt>): Add X/Y register to zero page address"
- "<b>Absolute</b> (<tt>$c000</tt>): Access any memory location"
- "<b>Zero Page</b> (<tt>$c0</tt>): Access memory locations <tt>$00</tt>-<tt>$FF</tt>"
+ "<b>Indirect Indexed</b> (<tt>($c0),Y</tt>): Use zero page address as pointer to get base address, then add Y to that base"
+ "<b>Indexed Indirect</b> (<tt>($c0,X)</tt>): Add X to zero page address, then use result as pointer to get actual target address"
"<b>Immediate</b> (<tt>#$c0</tt>): Use the actual value"
- "Addressing Modes"
- "Used for conditional branching"
- "<b>C</b> (Carry): Set when arithmetic operations overflow a byte"
- "<b>Z</b> (Zero): Set when result is zero"
+ "<b>INX/INY/DEX/DEY</b>: Increment/decrement registers"
"<b>I</b> (Interrupt): Set when interrupts are disabled"
+ "<b>E</b> or Space key (<tt>$20</tt>)"
+ "<b>Display Memory</b>: <tt>$0200</tt>-<tt>$05FF</tt> (used for screen output)"
+ "<b>Directional controls</b>:"
+ "<b>D</b> or Right Arrow key (<tt>$64</tt>)"
"<b>D</b> (Decimal): Set when processor is in BCD (Binary Coded Decimal) mode"
+ "<b>Compare ops</b>: <tt>CMP/CPX/CPY</tt> set <tt>N/Z/C</tt> like a subtraction (register − memory) without storing a result."
+ "<b>C</b> (Carry): Set when arithmetic operations overflow a byte"
+ "<b>BEQ/BNE/BCC/BCS</b>: Branch if equal/not equal/carry clear/carry set"
"<b>B</b> (Break): Set when BRK instruction is executed"
- "<b>V</b> (Overflow): Set when arithmetic operation causes signed overflow"
- "<b>N</b> (Negative): Set when bit 7 of result is set"
- "Processor Flags"
- "<b>PC</b> (Program Counter): Points to the next instruction to execute"
- "<b>SP</b> (Stack Pointer): Points to current stack position (starts at <tt>$FF</tt>)"
- "<b>X, Y</b>: Index registers for addressing and counting"
+ "<b>Action buttons</b>:"
+ "<b>Absolute</b> (<tt>$c000</tt>): Access any memory location"
+ "<b>Absolute,X/Y</b> (<tt>$c000,X</tt>): Add X/Y register to absolute address"
+ "<b>ADC/SBC</b>: Add/subtract with carry"
+ "<b>A</b> or Left Arrow key (<tt>$61</tt>)"
"<b>A</b> (Accumulator): Main register for calculations and data manipulation"
- "Registers"
"<b><tt>$f</tt></b>: Light grey (<tt>#bbbbbb</tt>)"
"<b><tt>$e</tt></b>: Light blue (<tt>#0088ff</tt>)"
"<b><tt>$d</tt></b>: Light green (<tt>#aaff66</tt>)"
"<b><tt>$c</tt></b>: Grey (<tt>#777777</tt>)"
"<b><tt>$b</tt></b>: Dark grey (<tt>#333333</tt>)"
"<b><tt>$a</tt></b>: Light red (<tt>#ff7777</tt>)"
+ "<b><tt>$FF</tt></b>: Last pressed key (ASCII code)"
+ "<b><tt>$FE</tt></b>: Random number generator (reads as a random value 0-255)"
"<b><tt>$9</tt></b>: Brown (<tt>#664400</tt>)"
"<b><tt>$8</tt></b>: Orange (<tt>#dd8855</tt>)"
"<b><tt>$7</tt></b>: Yellow (<tt>#eeee77</tt>)"
@@ -212,135 +471,15 @@
"<b><tt>$3</tt></b>: Cyan (<tt>#aaffee</tt>)"
"<b><tt>$2</tt></b>: Red (<tt>#880000</tt>)"
"<b><tt>$1</tt></b>: White (<tt>#ffffff</tt>)"
+ "<b><tt>$10</tt>-<tt>$15</tt></b>: Snake position data (head, body segments, tail)"
"<b><tt>$0</tt></b>: Black (<tt>#000000</tt>)"
- "Color Palette"
- "First row: <tt>$0200</tt>-<tt>$021F</tt>, second row: <tt>$0220</tt>-<tt>$023F</tt>, etc."
- "Organized as four horizontal strips of 32×8 pixels"
- "Values <tt>$00</tt>-<tt>$0F</tt> represent 16 different colors (<tt>$00</tt>=black, <tt>$01</tt>=white)"
- "Screen maps to memory range <tt>$0200</tt>-<tt>$05FF</tt>"
- "Display Organization"
- "<b>Program Storage</b>: Starting at <tt>$0600</tt>"
- "<b>Display Memory</b>: <tt>$0200</tt>-<tt>$05FF</tt> (used for screen output)"
- "<b>Stack</b>: <tt>$0100</tt>-<tt>$01FF</tt>"
- "<b>Zero Page</b>: <tt>$0000</tt>-<tt>$00FF</tt> (first 256 bytes, faster access)"
- "Memory Map"
- "Emulator"
- "Learning"
- "Programming"
- "Assembly"
- "First release of Learn 6502 Assembly for GNOME"
- "Fixed build error on PostmarketOS, improving mobile compatibility"
- "Debugger now only updates when visible, reducing unnecessary processing"
- "Reduced default hex monitor address range for better efficiency"
- "Enhanced the hex monitor address range input for easier value editing"
- "Improved the game console performance for smoother gameplay"
- "Optimized Flatpak configuration by removing unnecessary permissions"
- "Improved descriptions to be more welcoming for non-technical users"
- "Enhanced app presentation and accessibility"
- "Added file management to save and load your programs"
- "Games now automatically pause when switching between screens"
- "Many minor bugs have been fixed to improve overall usability"
- "New tools to examine your code, including disassembler and fast switchable memory viewer"
- "Improved game screen and controls for mobile devices"
- "Added help feature to make code editing easier for beginners"
- "Major update focusing on improved learning experience and usability"
- "Virtual game console displaying three colored pixels"
- "Built-in debugger showing real-time registers, flags, and memory"
- "Code editor with 6502 assembly syntax highlighting and visible help"
- "Interactive tutorial interface in dark theme"
- "Interactive tutorial interface in light theme"
- "See your code run on a virtual game console"
- "Debug your programs with real-time tools"
- "Write code with a built-in editor"
- "Learn step-by-step with an interactive tutorial"
- "Features:"
- "A comprehensive learning environment for programming vintage computers and game consoles using 6502 assembly language."
- "6502 Assembly Learning Environment"
- "Copy to clipboard"
- "Full Memory ($0000-$FFFF)"
- "Random/Input ($FE-$FF)"
- "Snake Game Data ($00-$15)"
- "Program Storage ($0600-$FFFF)"
- "Display Memory ($0200-$05FF)"
- "Stack ($0100-$01FF)"
- "Zero Page ($0000-$00FF)"
- "There are currently no settings."
- "Main Settings"
- "Appearance"
- "Preferences"
- "Learn how to program the 6502 microprocessor."
- "Disassembled"
- "Hexdump"
- "Hex Monitor"
- "Messages"
- "Information"
- "Debug your 6502 assembly code, step through your program, and view memory and registers. To get started, assemble and run your program."
- "Discard"
- "Cancel"
- "Your file has unsaved changes. Changes will be lost if you don\'t save them."
- "Save changes?"
- "Continue"
- "Quit"
- "About Learn 6502 Assembly"
- "Help"
- "Save as..."
- "Save"
- "Open..."
- "Game Console"
- "Debugger"
- "Editor"
- "Learn"
- "Menu"
- "Learn 6502 Assembly"
- "Copy to editor"
- "All Files"
- "Assembly Files"
- "File saved successfully"
- "Error saving file"
- "Save Assembly File"
- "untitled"
- "Error opening file"
- "File loaded successfully"
- "Failed to load file"
- "Open Assembly File"
- "Gamepad key pressed:"
- "Labels failure"
- "Simulator failure"
- "Disassembly:"
- "Hexdump:"
- "Assemble failed"
- "Assembled successfully"
- "Program paused"
- "Failed to copy to clipboard"
- "Copied to clipboard"
- "Code copied to editor"
- "Step"
- "Reset"
- "Resume"
- "Pause"
- "Run"
- "Assemble"
- "File \"%1$s\" has unsaved changes"
- "Unsaved changes"
- "Program completed at PC=$%1$s"
- "6502 Stack emptied! Wrapping..."
+ "<b><tt>$03</tt></b>: Snake length"
+ "<b><tt>$02</tt></b>: Snake direction (1=up, 2=right, 4=down, 8=left)"
+ "<b><tt>$00</tt>-<tt>$01</tt></b>: Apple position"
+ "<a href=\"https://github.com/wkjagt\">Willem van der Jagt</a> made a <a href=\"https://gist.github.com/wkjagt/9043907\">fully annotated gist of this source code</a>, so follow along with that for more details."
+ "6502 assembly language has a bunch of branching instructions, all of which branch based on whether certain flags are set or not. In this example we\'ll be looking at <tt>BNE</tt>: \"Branch on not equal\"."
"6502 Stack filled! Wrapping..."
- "Address %1$s - unknown opcode"
- "wdm-output"
- "Stopped"
- "Unable to find/parse given address/label"
- "No address or label provided"
- "Label {label} is already used as a symbol; please rename one of them"
- "Label already defined at line %1$s: %2$d"
- "Indexing labels..."
- "Found $d label."
- "Found $d labels."
- "Preprocessing ..."
- "Code assembled successfully, %1$d bytes."
- "Out of range branch on line %1$d (branches are limited to -128 to +127): %2$s"
- "Syntax error line %1$d: %2$s"
- "No code to run."
- "Assembling code ..."
- "Unable to relocate code outside 64k memory"
+ "6502 Stack emptied! Wrapping..."
+ "(Actually, I\'ve been reliably informed that 6502 processors are still being produced by <a href=\"https://www.westerndesigncenter.com/wdc/w65c02s-chip.php\">Western Design Center</a> and <a href=\"https://www.mouser.co.uk/c/?q=65C02\">sold to hobbyists</a>, so clearly 6502 <i>isn't</i> a dead language! Who knew?)"
"6502"
diff --git a/packages/app-gnome/data/metainfo/eu.jumplink.Learn6502.metainfo.xml b/packages/app-gnome/data/metainfo/eu.jumplink.Learn6502.metainfo.xml
index d015e68d..febeda34 100644
--- a/packages/app-gnome/data/metainfo/eu.jumplink.Learn6502.metainfo.xml
+++ b/packages/app-gnome/data/metainfo/eu.jumplink.Learn6502.metainfo.xml
@@ -278,7 +278,7 @@
Interaktives Tutorial
- https://jumplink.eu/Learn6502/
+ https://flathub.org/apps/eu.jumplink.Learn6502
https://github.com/JumpLink/Learn6502/issues
https://github.com/JumpLink/Learn6502
https://github.com/JumpLink/Learn6502
@@ -310,78 +310,80 @@
Learn 6502 toimii nyt myös Windowsilla ja macOS:llä. Jos olet halunnut vinkata siitä ystävälle, joka ei käytä Linuxia, nyt se onnistuu.
Learn 6502 ahora también se ejecuta en Windows y macOS. Si querías enseñárselo a alguien que no usa Linux, ya puedes hacerlo.
Learn 6502 läuft jetzt auch unter Windows und macOS. Wenn du es jemandem zeigen wolltest, der kein Linux nutzt, geht das jetzt.
-
- For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.
- Linux 现在还有 AppImage:一个文件,无需安装,在我们没有打包的发行版上也能用。
- Với Linux hiện cũng có AppImage: một tệp duy nhất, không cần cài đặt, hữu ích trên bản phân phối mà chúng tôi không đóng gói sẵn.
- Для Linux тепер є й AppImage: один файл, без встановлення, стане в пригоді на дистрибутиві, для якого ми не збираємо пакунок.
- Linux-க்கு இப்போது ஒரு AppImage-ம் உள்ளது: ஒரே கோப்பு, நிறுவல் தேவையில்லை, நாங்கள் தொகுப்பு வழங்காத விநியோகங்களிலும் இது பயன்படும்.
- Para Linux também há um AppImage agora: um único arquivo, sem instalação, útil em uma distribuição para a qual não geramos pacotes.
- Para Linux existe agora também uma AppImage: um ficheiro, sem instalação, útil numa distribuição para a qual não criamos pacotes.
- Dla Linuxa jest teraz także AppImage: jeden plik, bez instalacji, przydatny w dystrybucji, dla której nie przygotowujemy pakietu.
- Voor Linux is er nu ook een AppImage: één bestand, geen installatie, handig op een distributie waarvoor we geen pakket maken.
- Linux 向けには AppImage も用意しました。ファイルは1つだけ、インストールは不要で、パッケージを提供していないディストリビューションでも使えます。
- Untuk Linux kini tersedia juga AppImage: satu file, tanpa instalasi, berguna pada distribusi yang tidak kami buatkan paketnya.
- Pro Linux il ha ora anque un AppImage: un sol file, sin installation, utile sur un distribution pro le qual nos non offere un pacchetto.
- ל־Linux יש עכשיו גם AppImage: קובץ אחד, בלי התקנה, שימושי בהפצה שאין לנו חבילה עבורה.
- Pour Linux, il y a maintenant aussi une AppImage : un fichier, aucune installation, utile sur une distribution pour laquelle nous ne fournissons pas de paquet.
- Linuxille on nyt saatavilla myös AppImage: yksi tiedosto, ei asennusta, kätevä jakelussa, jolle emme tee omaa pakettia.
- Para Linux ahora también hay una AppImage: un archivo, sin instalación, útil en una distribución para la que no publicamos paquetes.
- Für Linux gibt es jetzt auch ein AppImage: eine Datei, keine Installation, praktisch auf einer Distribution, für die wir kein Paket bauen.
-
- Two new example programs, and both came from you: Dino Run by Jacob, and Line Buster 6502 by edit12. They are the first examples sent in with the share button, and we would love more.
- 两个新的示例程序,都来自大家:Jacob 的 Dino Run 和 edit12 的 Line Buster 6502。它们是通过分享按钮提交的首批示例,我们希望收到更多。
- Hai chương trình ví dụ mới, và cả hai đều đến từ các bạn: Dino Run của Jacob, và Line Buster 6502 của edit12. Đây là những ví dụ đầu tiên được gửi bằng nút chia sẻ, và chúng tôi rất mong nhận thêm.
- Дві нові програми-приклади, і обидві надійшли від вас: Dino Run від Jacob і Line Buster 6502 від edit12. Це перші приклади, надіслані кнопкою «Поділитися», і ми будемо раді новим.
- இரண்டு புதிய எடுத்துக்காட்டு நிரல்கள், இரண்டுமே உங்களிடமிருந்து வந்தவை: Jacob எழுதிய Dino Run, edit12 எழுதிய Line Buster 6502. பகிர் பொத்தான் மூலம் அனுப்பப்பட்ட முதல் எடுத்துக்காட்டுகள் இவை; இன்னும் பல வர வேண்டும் என்று விரும்புகிறோம்.
- Dois novos programas de exemplo, e os dois vieram de vocês: Dino Run, de Jacob, e Line Buster 6502, de edit12. São os primeiros exemplos enviados pelo botão de compartilhar, e adoraríamos receber mais.
- Dois novos programas de exemplo, e ambos vieram de vocês: Dino Run, de Jacob, e Line Buster 6502, de edit12. São os primeiros exemplos enviados através do botão de partilha, e gostaríamos de receber mais.
- Dwa nowe przykładowe programy i oba pochodzą od was: Dino Run autorstwa Jacob oraz Line Buster 6502 autorstwa edit12. To pierwsze przykłady nadesłane przyciskiem udostępniania i chętnie zobaczymy więcej.
- Twee nieuwe voorbeeldprogramma's, en ze komen allebei van jullie: Dino Run van Jacob en Line Buster 6502 van edit12. Het zijn de eerste voorbeelden die via de deelknop zijn ingestuurd, en we ontvangen er graag meer.
- 新しいサンプルプログラムが2つ、どちらも皆さんからのものです。Jacob による Dino Run と、edit12 による Line Buster 6502 です。共有ボタンから送られてきた最初の例で、これからもお待ちしています。
- Dua program contoh baru, dan keduanya datang dari Anda: Dino Run oleh Jacob, dan Line Buster 6502 oleh edit12. Keduanya adalah contoh pertama yang dikirim dengan tombol bagikan, dan kami masih menantikan lebih banyak.
- Duo nove programmas de exemplo, e ambes veni de vos: Dino Run de Jacob, e Line Buster 6502 de edit12. Illos es le prime exemplos inviate con le button de compartir, e nos volerea reciper plus.
- שתי תוכניות דוגמה חדשות, ושתיהן הגיעו מכם: Dino Run של Jacob, ו־Line Buster 6502 של edit12. אלו הדוגמאות הראשונות שנשלחו עם כפתור השיתוף, ונשמח לעוד.
- Deux nouveaux programmes d'exemple, et tous les deux viennent de vous : Dino Run par Jacob et Line Buster 6502 par edit12. Ce sont les premiers exemples envoyés avec le bouton de partage, et nous aimerions en recevoir d'autres.
- Kaksi uutta esimerkkiohjelmaa, ja molemmat tulivat teiltä: Dino Run, tekijänä Jacob, ja Line Buster 6502, tekijänä edit12. Ne ovat ensimmäiset jaa-painikkeella lähetetyt esimerkit, ja otamme mielellämme vastaan lisää.
- Dos nuevos programas de ejemplo, y los dos llegan de la comunidad: Dino Run, de Jacob, y Line Buster 6502, de edit12. Son los primeros ejemplos enviados con el botón de compartir, y nos gustaría recibir más.
- Zwei neue Beispielprogramme, und beide kommen von euch: Dino Run von Jacob und Line Buster 6502 von edit12. Es sind die ersten Beispiele, die über den Teilen-Button eingereicht wurden, und wir hätten gern mehr davon.
-
- வணக்கம்! We are happy to welcome Tamil translations, contributed by தமிழ்நேரம். நன்றி!
- வணக்கம்! 我们很高兴迎来泰米尔语翻译,由 தமிழ்நேரம் 贡献。நன்றி!
- வணக்கம்! Chúng tôi vui mừng chào đón bản dịch tiếng Tamil, được đóng góp bởi தமிழ்நேரம். நன்றி!
- வணக்கம்! Ми раді вітати тамільський переклад, наданий தமிழ்நேரம். நன்றி!
- வணக்கம்! தமிழ்நேரம் அவர்கள் பங்களித்த தமிழ் மொழிபெயர்ப்புகளை வரவேற்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம். நன்றி!
- வணக்கம்! Estamos felizes em dar as boas-vindas à tradução em tâmil, contribuída por தமிழ்நேரம். நன்றி!
- வணக்கம்! Temos o prazer de dar as boas-vindas à tradução em tâmil, contribuída por தமிழ்நேரம். நன்றி!
- வணக்கம்! Z radością witamy tamilskie tłumaczenie, którego autorem jest தமிழ்நேரம். நன்றி!
- வணக்கம்! We zijn blij met de Tamil-vertaling, bijgedragen door தமிழ்நேரம். நன்றி!
- வணக்கம்! タミル語の翻訳が加わりました。翻訳してくださった தமிழ்நேரம் に感謝します。நன்றி!
- வணக்கம்! Kami dengan senang hati menyambut terjemahan bahasa Tamil, yang dikontribusikan oleh தமிழ்நேரம். நன்றி!
- வணக்கம்! Nos es felice de dar le benvenita al traduction tamil, contribuite per தமிழ்நேரம். நன்றி!
- வணக்கம்! אנחנו שמחים לקבל בברכה את התרגום לטמילית, שנתרם על ידי தமிழ்நேரம். நன்றி!
- வணக்கம் ! Nous sommes heureux d'accueillir la traduction en tamoul, contribuée par தமிழ்நேரம். நன்றி !
- வணக்கம்! Olemme iloisia voidessamme toivottaa tervetulleeksi tamilinkieliset käännökset, jotka தமிழ்நேரம் on toimittanut. நன்றி!
- வணக்கம்! Nos alegra dar la bienvenida a la traducción al tamil, aportada por தமிழ்நேரம். நன்றி!
- வணக்கம்! Wir freuen uns über die tamilische Übersetzung, beigesteuert von தமிழ்நேரம். நன்றி!
-
- If your system language is Chinese, the app shows up in Chinese again. It had been falling back to English by mistake.
- 如果您的系统语言是中文,应用会重新以中文显示。此前它曾错误地回退到英文。
- Nếu ngôn ngữ hệ thống của bạn là tiếng Trung, ứng dụng hiển thị lại bằng tiếng Trung. Trước đây nó đã nhầm lẫn quay về tiếng Anh.
- Якщо мова системи — китайська, застосунок знову показується китайською. Раніше він помилково повертався до англійської.
- உங்கள் கணினியின் மொழி சீனமாக இருந்தால், பயன்பாடு மீண்டும் சீனத்தில் காட்டப்படும். இதுவரை அது தவறுதலாக ஆங்கிலத்திற்கு மாறி வந்தது.
- Se o idioma do seu sistema for chinês, o aplicativo volta a aparecer em chinês. Antes ele caía para o inglês por engano.
- Se o idioma do seu sistema for chinês, a aplicação volta a aparecer em chinês. Por engano, estava a recorrer ao inglês.
- Jeśli językiem systemu jest chiński, aplikacja znów wyświetla się po chińsku. Wcześniej przez pomyłkę wracała do angielskiego.
- Als je systeemtaal Chinees is, verschijnt de app weer in het Chinees. Hij viel per ongeluk terug op het Engels.
- システムの言語が中国語の場合、アプリは再び中国語で表示されます。これまでは誤って英語で表示されていました。
- Jika bahasa sistem Anda adalah bahasa Mandarin, aplikasi kembali tampil dalam bahasa Mandarin. Sebelumnya aplikasi keliru beralih ke bahasa Inggris.
- Si le lingua de tu systema es le chinese, le application appare de novo in chinese. Antea illo passava al anglese per error.
- אם שפת המערכת שלכם היא סינית, היישום שוב מוצג בסינית. עד כה הוא חזר בטעות לאנגלית.
- Si la langue de votre système est le chinois, l'application s'affiche à nouveau en chinois. Elle basculait vers l'anglais par erreur.
- Jos järjestelmäsi kieli on kiina, sovellus näkyy taas kiinaksi. Se oli vahingossa palautunut englantiin.
- Si el idioma de tu sistema es chino, la aplicación vuelve a mostrarse en chino. Antes recurría al inglés por error.
- Wenn deine Systemsprache Chinesisch ist, erscheint die App wieder auf Chinesisch. Sie war versehentlich auf Englisch zurückgefallen.
+
+
+ - For Linux there is also an AppImage now: one file, no installation, useful on a distribution we do not package for.
+ - Linux 现在还有 AppImage:一个文件,无需安装,在我们没有打包的发行版上也能用。
+ - Với Linux hiện cũng có AppImage: một tệp duy nhất, không cần cài đặt, hữu ích trên bản phân phối mà chúng tôi không đóng gói sẵn.
+ - Для Linux тепер є й AppImage: один файл, без встановлення, стане в пригоді на дистрибутиві, для якого ми не збираємо пакунок.
+ - Linux-க்கு இப்போது ஒரு AppImage-ம் உள்ளது: ஒரே கோப்பு, நிறுவல் தேவையில்லை, நாங்கள் தொகுப்பு வழங்காத விநியோகங்களிலும் இது பயன்படும்.
+ - Para Linux também há um AppImage agora: um único arquivo, sem instalação, útil em uma distribuição para a qual não geramos pacotes.
+ - Para Linux existe agora também uma AppImage: um ficheiro, sem instalação, útil numa distribuição para a qual não criamos pacotes.
+ - Dla Linuxa jest teraz także AppImage: jeden plik, bez instalacji, przydatny w dystrybucji, dla której nie przygotowujemy pakietu.
+ - Voor Linux is er nu ook een AppImage: één bestand, geen installatie, handig op een distributie waarvoor we geen pakket maken.
+ - Linux 向けには AppImage も用意しました。ファイルは1つだけ、インストールは不要で、パッケージを提供していないディストリビューションでも使えます。
+ - Untuk Linux kini tersedia juga AppImage: satu file, tanpa instalasi, berguna pada distribusi yang tidak kami buatkan paketnya.
+ - Pro Linux il ha ora anque un AppImage: un sol file, sin installation, utile sur un distribution pro le qual nos non offere un pacchetto.
+ - ל־Linux יש עכשיו גם AppImage: קובץ אחד, בלי התקנה, שימושי בהפצה שאין לנו חבילה עבורה.
+ - Pour Linux, il y a maintenant aussi une AppImage : un fichier, aucune installation, utile sur une distribution pour laquelle nous ne fournissons pas de paquet.
+ - Linuxille on nyt saatavilla myös AppImage: yksi tiedosto, ei asennusta, kätevä jakelussa, jolle emme tee omaa pakettia.
+ - Para Linux ahora también hay una AppImage: un archivo, sin instalación, útil en una distribución para la que no publicamos paquetes.
+ - Für Linux gibt es jetzt auch ein AppImage: eine Datei, keine Installation, praktisch auf einer Distribution, für die wir kein Paket bauen.
+
+ - Two new example programs, and both came from you: Dino Run by Jacob, and Line Buster 6502 by edit12. They are the first examples sent in with the share button, and we would love more.
+ - 两个新的示例程序,都来自大家:Jacob 的 Dino Run 和 edit12 的 Line Buster 6502。它们是通过分享按钮提交的首批示例,我们希望收到更多。
+ - Hai chương trình ví dụ mới, và cả hai đều đến từ các bạn: Dino Run của Jacob, và Line Buster 6502 của edit12. Đây là những ví dụ đầu tiên được gửi bằng nút chia sẻ, và chúng tôi rất mong nhận thêm.
+ - Дві нові програми-приклади, і обидві надійшли від вас: Dino Run від Jacob і Line Buster 6502 від edit12. Це перші приклади, надіслані кнопкою «Поділитися», і ми будемо раді новим.
+ - இரண்டு புதிய எடுத்துக்காட்டு நிரல்கள், இரண்டுமே உங்களிடமிருந்து வந்தவை: Jacob எழுதிய Dino Run, edit12 எழுதிய Line Buster 6502. பகிர் பொத்தான் மூலம் அனுப்பப்பட்ட முதல் எடுத்துக்காட்டுகள் இவை; இன்னும் பல வர வேண்டும் என்று விரும்புகிறோம்.
+ - Dois novos programas de exemplo, e os dois vieram de vocês: Dino Run, de Jacob, e Line Buster 6502, de edit12. São os primeiros exemplos enviados pelo botão de compartilhar, e adoraríamos receber mais.
+ - Dois novos programas de exemplo, e ambos vieram de vocês: Dino Run, de Jacob, e Line Buster 6502, de edit12. São os primeiros exemplos enviados através do botão de partilha, e gostaríamos de receber mais.
+ - Dwa nowe przykładowe programy i oba pochodzą od was: Dino Run autorstwa Jacob oraz Line Buster 6502 autorstwa edit12. To pierwsze przykłady nadesłane przyciskiem udostępniania i chętnie zobaczymy więcej.
+ - Twee nieuwe voorbeeldprogramma's, en ze komen allebei van jullie: Dino Run van Jacob en Line Buster 6502 van edit12. Het zijn de eerste voorbeelden die via de deelknop zijn ingestuurd, en we ontvangen er graag meer.
+ - 新しいサンプルプログラムが2つ、どちらも皆さんからのものです。Jacob による Dino Run と、edit12 による Line Buster 6502 です。共有ボタンから送られてきた最初の例で、これからもお待ちしています。
+ - Dua program contoh baru, dan keduanya datang dari Anda: Dino Run oleh Jacob, dan Line Buster 6502 oleh edit12. Keduanya adalah contoh pertama yang dikirim dengan tombol bagikan, dan kami masih menantikan lebih banyak.
+ - Duo nove programmas de exemplo, e ambes veni de vos: Dino Run de Jacob, e Line Buster 6502 de edit12. Illos es le prime exemplos inviate con le button de compartir, e nos volerea reciper plus.
+ - שתי תוכניות דוגמה חדשות, ושתיהן הגיעו מכם: Dino Run של Jacob, ו־Line Buster 6502 של edit12. אלו הדוגמאות הראשונות שנשלחו עם כפתור השיתוף, ונשמח לעוד.
+ - Deux nouveaux programmes d'exemple, et tous les deux viennent de vous : Dino Run par Jacob et Line Buster 6502 par edit12. Ce sont les premiers exemples envoyés avec le bouton de partage, et nous aimerions en recevoir d'autres.
+ - Kaksi uutta esimerkkiohjelmaa, ja molemmat tulivat teiltä: Dino Run, tekijänä Jacob, ja Line Buster 6502, tekijänä edit12. Ne ovat ensimmäiset jaa-painikkeella lähetetyt esimerkit, ja otamme mielellämme vastaan lisää.
+ - Dos nuevos programas de ejemplo, y los dos llegan de la comunidad: Dino Run, de Jacob, y Line Buster 6502, de edit12. Son los primeros ejemplos enviados con el botón de compartir, y nos gustaría recibir más.
+ - Zwei neue Beispielprogramme, und beide kommen von euch: Dino Run von Jacob und Line Buster 6502 von edit12. Es sind die ersten Beispiele, die über den Teilen-Button eingereicht wurden, und wir hätten gern mehr davon.
+
+ - வணக்கம்! We are happy to welcome Tamil translations, contributed by தமிழ்நேரம். நன்றி!
+ - வணக்கம்! 我们很高兴迎来泰米尔语翻译,由 தமிழ்நேரம் 贡献。நன்றி!
+ - வணக்கம்! Chúng tôi vui mừng chào đón bản dịch tiếng Tamil, được đóng góp bởi தமிழ்நேரம். நன்றி!
+ - வணக்கம்! Ми раді вітати тамільський переклад, наданий தமிழ்நேரம். நன்றி!
+ - வணக்கம்! தமிழ்நேரம் அவர்கள் பங்களித்த தமிழ் மொழிபெயர்ப்புகளை வரவேற்பதில் நாங்கள் மகிழ்ச்சியடைகிறோம். நன்றி!
+ - வணக்கம்! Estamos felizes em dar as boas-vindas à tradução em tâmil, contribuída por தமிழ்நேரம். நன்றி!
+ - வணக்கம்! Temos o prazer de dar as boas-vindas à tradução em tâmil, contribuída por தமிழ்நேரம். நன்றி!
+ - வணக்கம்! Z radością witamy tamilskie tłumaczenie, którego autorem jest தமிழ்நேரம். நன்றி!
+ - வணக்கம்! We zijn blij met de Tamil-vertaling, bijgedragen door தமிழ்நேரம். நன்றி!
+ - வணக்கம்! タミル語の翻訳が加わりました。翻訳してくださった தமிழ்நேரம் に感謝します。நன்றி!
+ - வணக்கம்! Kami dengan senang hati menyambut terjemahan bahasa Tamil, yang dikontribusikan oleh தமிழ்நேரம். நன்றி!
+ - வணக்கம்! Nos es felice de dar le benvenita al traduction tamil, contribuite per தமிழ்நேரம். நன்றி!
+ - வணக்கம்! אנחנו שמחים לקבל בברכה את התרגום לטמילית, שנתרם על ידי தமிழ்நேரம். நன்றி!
+ - வணக்கம் ! Nous sommes heureux d'accueillir la traduction en tamoul, contribuée par தமிழ்நேரம். நன்றி !
+ - வணக்கம்! Olemme iloisia voidessamme toivottaa tervetulleeksi tamilinkieliset käännökset, jotka தமிழ்நேரம் on toimittanut. நன்றி!
+ - வணக்கம்! Nos alegra dar la bienvenida a la traducción al tamil, aportada por தமிழ்நேரம். நன்றி!
+ - வணக்கம்! Wir freuen uns über die tamilische Übersetzung, beigesteuert von தமிழ்நேரம். நன்றி!
+
+ - If your system language is Chinese, the app shows up in Chinese again. It had been falling back to English by mistake.
+ - 如果您的系统语言是中文,应用会重新以中文显示。此前它曾错误地回退到英文。
+ - Nếu ngôn ngữ hệ thống của bạn là tiếng Trung, ứng dụng hiển thị lại bằng tiếng Trung. Trước đây nó đã nhầm lẫn quay về tiếng Anh.
+ - Якщо мова системи — китайська, застосунок знову показується китайською. Раніше він помилково повертався до англійської.
+ - உங்கள் கணினியின் மொழி சீனமாக இருந்தால், பயன்பாடு மீண்டும் சீனத்தில் காட்டப்படும். இதுவரை அது தவறுதலாக ஆங்கிலத்திற்கு மாறி வந்தது.
+ - Se o idioma do seu sistema for chinês, o aplicativo volta a aparecer em chinês. Antes ele caía para o inglês por engano.
+ - Se o idioma do seu sistema for chinês, a aplicação volta a aparecer em chinês. Por engano, estava a recorrer ao inglês.
+ - Jeśli językiem systemu jest chiński, aplikacja znów wyświetla się po chińsku. Wcześniej przez pomyłkę wracała do angielskiego.
+ - Als je systeemtaal Chinees is, verschijnt de app weer in het Chinees. Hij viel per ongeluk terug op het Engels.
+ - システムの言語が中国語の場合、アプリは再び中国語で表示されます。これまでは誤って英語で表示されていました。
+ - Jika bahasa sistem Anda adalah bahasa Mandarin, aplikasi kembali tampil dalam bahasa Mandarin. Sebelumnya aplikasi keliru beralih ke bahasa Inggris.
+ - Si le lingua de tu systema es le chinese, le application appare de novo in chinese. Antea illo passava al anglese per error.
+ - אם שפת המערכת שלכם היא סינית, היישום שוב מוצג בסינית. עד כה הוא חזר בטעות לאנגלית.
+ - Si la langue de votre système est le chinois, l'application s'affiche à nouveau en chinois. Elle basculait vers l'anglais par erreur.
+ - Jos järjestelmäsi kieli on kiina, sovellus näkyy taas kiinaksi. Se oli vahingossa palautunut englantiin.
+ - Si el idioma de tu sistema es chino, la aplicación vuelve a mostrarse en chino. Antes recurría al inglés por error.
+ - Wenn deine Systemsprache Chinesisch ist, erscheint die App wieder auf Chinesisch. Sie war versehentlich auf Englisch zurückgefallen.
+
As always, this release includes many small fixes and improvements.
一如既往,此版本包含许多小的修复和改进。