KITAQ SISTEMA DE DESARROLLO
MANUAL DE USO 2026.09

SERIE KITAQ • EDICIÓN DE REFERENCIA

VERIFICACIÓN

Captura de la ejecución

Desde tu primera línea hasta la ejecución, la observación y la repetición de pruebas.
Código fuente recopilado: 14 de septiembre de 2026 · Edición inglesa: 14 de septiembre de 2026

Verificación del compilador nativo

Las compilaciones nativas y comprobaciones de ejecución finalizaron correctamente en Windows, Linux, macOS ARM y macOS Intel. KITAQGB superó 48 pruebas y 395 comprobaciones de herramientas por entorno; KITAQFC, 55 y 401. También se probó Rust 1.85. PUBLIC_DISTRIBUTION.json registra los hashes de los binarios instalados y el origen de la validación. Los flujos públicos de GitHub Actions compilan y prueban estas fuentes de forma independiente.

Las salidas de referencia guardadas comprueban bytes de ROM, diagnósticos y formatos de las herramientas. Las anteriores pruebas de emulación C# son registros históricos vinculados a sus fuentes originales. No demuestran automáticamente todas las API Rust, el hardware real ni el arranque completo de juegos mediante el BIOS FDS. El script PNG original no está disponible y se reconstruyó a partir de su especificación; no puede afirmarse igualdad de bytes con él.

KITAQGB · SHA-256 · KITAQFC · SHA-256

Cambios y verificación de la biblioteca local, 2026-10-03

Las fuentes de C:/kitaqgb_project/lib se compararon con la revisión pública 2de7f4b. Las fechas por sí solas no determinan qué versión es más reciente. La versión local añade funciones; la pública contiene otras adiciones y correcciones. Esta sección describe las fuentes locales guardadas por separado de las pruebas existentes de la API pública.

physics2d.c conserva la API de contacto y añade implementaciones con caché de contacto y límite de velocidad mediante KQ2D_CACHE_SURFACE. Reserve el banco ROM 13 al activarlo. Definir KQ2D_EXTERNAL_SCALE_Q8, KQ2D_EXTERNAL_REST_COMPONENT o KQ2D_EXTERNAL_SURFACE exige proporcionar la implementación correspondiente. Los 8.872 casos siguientes usan la ruta predeterminada sin estas definiciones.

KQ3D_BODY_SPHERE=0x04 selecciona contactos esfera–caja. El radio es half_x. kq3d_overlap_sphere_aabb(sphere, box) incluye la tangencia y devuelve 0 para punteros NULL o radios no positivos. No existe un solucionador específico esfera–esfera. Mantenga diferencias, productos y sumas de cuadrados dentro de sus rangos de 16 bits.

Un body activo con KQ3D_BODY_KINEMATIC=0x02 actualiza velocidad y posición X/Y en kq3d_step incluso con masa inversa cero. La posición y velocidad Z no cambian. Los contactos no desplazan un body de masa inversa cero. kq3d_integrate_body sigue omitiendo los bodies estáticos. break_speed y KQ3D_BODY_BROKEN no provocan destrucción automática.

El bank_switch local escribe kq_bank_current y la dirección 0x2000. A diferencia de la ruta pública __bankswitch, no actualiza el seguimiento de banco del compilador. Cambie desde el banco fijo; use __bankswitch si también debe mantener el estado de restauración.

Los cgb_bg_color/cgb_obj_color locales y sus envoltorios RGB de un color no activan el incremento automático del índice. La ejecución CGB confirmó que el byte bajo de 0x1234 se sobrescribe con 0x12. Use la corrección pública o una API colors con matrices. En DMG no se escribe.

El metasprite_draw local amplía el contador a first_id+count solo al terminar. Un retorno anticipado en el límite de 40 sprites no lo actualiza. Con first_id=39 y count=2, devuelve 1, la ranura 39 está activa y el contador vale 0. La versión pública actualiza el contador al procesar cada ranura.

La versión local ofrece vram_get_queue_used y vram_get_queue_free, pero carece del vram_get_queue_capacity público. La capacidad es VRAM_QUEUE_MAX, 32 de forma predeterminada. Un comando produce used=1 y free=31.

wire3d_dmg.h declara DrawRect2D solo en el perfil de 96 líneas. DrawBoxEdges2D se declara en ambos perfiles; DrawIndexedEdges solo en el de 120 líneas. Seleccione una fuente acorde con el perfil. El dibujo de estas funciones no se volvió a verificar aquí. No se encontró implementación de DrawRect2D ni DrawBoxEdges2D en las fuentes lib guardadas. Son solo declaraciones; llamarlas requiere una implementación aparte.

El audio_vblank local no incluye los AudioVBlank_QueueReset/QueueRefill/QueuePlay públicos ni audio_vblank_queue.inc. ZX0 también es exclusivo de la versión pública. Estas adiciones no forman parte de las funciones locales declaradas verificadas.

kq3d_overlap_sphere_aabb
u8 kq3d_overlap_sphere_aabb(const KQBody3D* sphere, const KQBody3D* box);

KQ3D_BODY_SPHERE=0x04 selecciona contactos esfera–caja. El radio es half_x. kq3d_overlap_sphere_aabb(sphere, box) incluye la tangencia y devuelve 0 para punteros NULL o radios no positivos. No existe un solucionador específico esfera–esfera. Mantenga diferencias, productos y sumas de cuadrados dentro de sus rangos de 16 bits.

physics3d.c / physics3d.h

Verificación ejecutada

Ruta 2D predeterminada: 8.872 casos superados con la API C de KOKURA y selección automática de hardware. Se comprobaron límite de velocidad, contactos, multiplicación Q8 con signo e instante de impacto. No fueron ejecuciones separadas con DMG/CGB explícitos.

Límites físicos: 19 casos en DMG y CGB, 38 ejecuciones superadas. Las pruebas separadas de extensión 3D y reproducción de sprites/VRAM/paleta coincidieron con lo esperado en ambos modos. Paleta y sprites reproducen defectos; no confirman un funcionamiento correcto.

Son pruebas de emulador de ROM generadas por el compilador C#. No demuestran equivalencia Rust, hardware físico, audio, dibujo ni corrección de todas las API. Las imágenes y pruebas existentes siguen siendo resultados históricos ligados a sus huellas de fuentes.

Huellas de fuentes, entradas, valores esperados y observados, pasos de reproducción · evidence.tar.gz · verify_rom_cases.py · verify_surface.py

Capturas de pantalla

Las capturas del emulador aparecen junto a las explicaciones de los ejemplos. Compare la salida con el resultado esperado; una imagen por sí sola no verifica el sonido, la entrada del mando, los periféricos ni el hardware real.

Mostrar el juego de caracteres incluido gb_font

Objetivo: Muestra qué letras, dígitos y signos de puntuación contiene la fuente original incluida y cómo dibujarlos.

Funcionamiento: m_init prepara la pantalla y la fuente. m_text dibuja cada línea; m_put dibuja las comillas dobles mediante el código de carácter 34.

Controles y resultado esperado: Busque 26 letras mayúsculas, 26 minúsculas, 10 dígitos y 30 signos de puntuación. Compruebe que todos los glifos sean legibles. No se requiere ninguna entrada.

Mostrar el juego de caracteres incluido: Busque 26 letras mayúsculas, 26 minúsculas, 10 dígitos y 30 signos de puntuación. Compruebe que todos los glifos sean legibles. No se requiere ninguna entrada.
Ejemplo en pantalla: Busque 26 letras mayúsculas, 26 minúsculas, 10 dígitos y 30 signos de puntuación. Compruebe que todos los glifos sean legibles. No se requiere ninguna entrada.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Su primer texto en pantalla gb_hello

Objetivo: Muestra la secuencia básica para iniciar una ROM y dibujar texto y un número en el fondo.

Funcionamiento: Después de m_init, m_text dibuja el saludo y m_number da formato a 42. El bucle final espera fotogramas y mantiene la pantalla visible.

Controles y resultado esperado: La pantalla muestra HELLO WORLD y 042. El cero inicial corresponde al formato decimal de tres dígitos.

Su primer texto en pantalla: La pantalla muestra HELLO WORLD y 042. El cero inicial corresponde al formato decimal de tres dígitos.
Ejemplo en pantalla: La pantalla muestra HELLO WORLD y 042. El cero inicial corresponde al formato decimal de tres dígitos.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Calcular con un valor intermedio más amplio gb_arithmetic

Objetivo: Muestra cómo conservar un resultado intermedio que no cabe en ocho bits.

Funcionamiento: (u16)200 + 100 produce 300. El programa divide el resultado entre 10 y luego lo convierte a u8 para mostrarlo. Observa que la conversión al tipo más amplio ocurre antes de la suma.

Controles y resultado esperado: 030 representa el resultado calculado, 30.

Calcular con un valor intermedio más amplio: 030 representa el resultado calculado, 30.
Ejemplo en pantalla: 030 representa el resultado calculado, 30.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Bifurcaciones y bucles gb_control

Objetivo: Prueba for, continue, while, do/while y switch en un cálculo sencillo.

Funcionamiento: Sumar de 0 a 7 omitiendo 3 da 25. El bucle while avanza hasta 30, do/while hasta 32 y switch selecciona case 32 para asignar 42.

Controles y resultado esperado: 042 es el resultado final de estos bucles y bifurcaciones.

Bifurcaciones y bucles: 042 es el resultado final de estos bucles y bifurcaciones.
Ejemplo en pantalla: 042 es el resultado final de estos bucles y bifurcaciones.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Funciones, arrays, estructuras y punteros gb_aggregate

Objetivo: Muestra cómo agrupar valores y acceder a ellos mediante funciones y punteros.

Funcionamiento: El programa copia un Point que contiene (10,20) y después escribe de 1 a 4 en un array mediante un puntero. Suma el resultado de la función, 30, a los valores del array 1, 2 y 4 y a la constante 5.

Controles y resultado esperado: La suma se muestra como 042. Siga la copia de la estructura, las escrituras en ptr[i] y el valor devuelto por la función.

Funciones, arrays, estructuras y punteros: La suma se muestra como 042. Siga la copia de la estructura, las escrituras en ptr[i] y el valor devuelto por la función.
Ejemplo en pantalla: La suma se muestra como 042. Siga la copia de la estructura, las escrituras en ptr[i] y el valor devuelto por la función.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Banderas de bits y copia de búfer gb_bits_memory

Objetivo: Agrupa banderas en un byte y copia un búfer en un área de almacenamiento independiente.

Funcionamiento: __memset borra cuatro bytes. El programa activa el bit 3, invierte el bit 1 y después copia los cuatro bytes con __memcpy.

Controles y resultado esperado: el primer byte de destino se muestra como 010; el bit 3 aporta 8 y el bit 1 aporta 2.

Banderas de bits y copia de búfer: el primer byte de destino se muestra como 010; el bit 3 aporta 8 y el bit 1 aporta 2.
Ejemplo en pantalla: el primer byte de destino se muestra como 010; el bit 3 aporta 8 y el bit 1 aporta 2.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Contar nuevas pulsaciones de un botón gb_input

Objetivo: Distingue una nueva pulsación de un botón que sigue pulsado.

Funcionamiento: Cada fotograma llama a input_update. El contador solo avanza cuando input_pressed(BTN_A) es verdadero.

Controles y resultado esperado: el contador comienza en 000. Pulse A para obtener 001; mantenerlo pulsado no añade más. Suéltelo y vuelva a pulsarlo para obtener 002. El contador de un byte vuelve a 000 después de 255.

Contar nuevas pulsaciones de un botón: el contador comienza en 000. Pulse A para obtener 001; mantenerlo pulsado no añade más. Suéltelo y vuelva a pulsarlo para obtener 002. El contador de un byte vuelve a 000 después de 255.
Ejemplo en pantalla: el contador comienza en 000. Pulse A para obtener 001; mantenerlo pulsado no añade más. Suéltelo y vuelva a pulsarlo para obtener 002. El contador de un byte vuelve a 000 después de 255.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Multiplicar valores de punto fijo Q8.8 gb_fixed

Objetivo: Muestra la conversión de entero a Q8.8, la multiplicación y la conversión de vuelta a entero.

Funcionamiento: fix_from_int convierte 3 y 4 a Q8.8. fix_mul los multiplica y fix_to_int convierte el producto de vuelta a entero.

Controles y resultado esperado: 012 significa 3 × 4 = 12. Es el entero convertido, no el valor interno escalado por 256.

Multiplicar valores de punto fijo Q8.8: 012 significa 3 × 4 = 12. Es el entero convertido, no el valor interno escalado por 256.
Ejemplo en pantalla: 012 significa 3 × 4 = 12. Es el entero convertido, no el valor interno escalado por 256.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Asignar desde un pool fijo de objetos gb_entity

Objetivo: Crea un objeto a partir de un conjunto fijo de posiciones, sin asignación dinámica de memoria.

Funcionamiento: entity_init reinicia el pool. entity_create crea el tipo 1 en (20,30); el programa comprueba el ID de fallo 0xFF antes de establecer vx en 2.

Controles y resultado esperado: 001 es la cantidad de objetos activos, no un ID ni una coordenada. Este ejemplo no actualiza ni dibuja el objeto, por lo que no aparece ningún personaje en movimiento.

Asignar desde un pool fijo de objetos: 001 es la cantidad de objetos activos, no un ID ni una coordenada. Este ejemplo no actualiza ni dibuja el objeto, por lo que no aparece ningún personaje en movimiento.
Ejemplo en pantalla: 001 es la cantidad de objetos activos, no un ID ni una coordenada. Este ejemplo no actualiza ni dibuja el objeto, por lo que no aparece ningún personaje en movimiento.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Registrar un valor de diagnóstico en RAM gb_debug

Objetivo: Conserva un valor del juego con nombre en un búfer de diagnóstico, separado de la visualización en pantalla.

Funcionamiento: El programa inicializa la depuración, establece la etiqueta de fotograma en 1 y registra el valor 42 con el nombre HP.

Controles y resultado esperado: 001 es la cantidad de entradas de traza. HP=42 se guarda en el búfer de diagnóstico; la pantalla por sí sola no muestra ni verifica ese contenido.

Registrar un valor de diagnóstico en RAM: 001 es la cantidad de entradas de traza. HP=42 se guarda en el búfer de diagnóstico; la pantalla por sí sola no muestra ni verifica ese contenido.
Ejemplo en pantalla: 001 es la cantidad de entradas de traza. HP=42 se guarda en el búfer de diagnóstico; la pantalla por sí sola no muestra ni verifica ese contenido.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Guardar un historial de posiciones gb_chain

Objetivo: Muestra cómo guardar un historial de posiciones en un búfer circular.

Funcionamiento: chain_init asocia un array con espacio para cuatro puntos. Después, chain_push_head registra (20,30).

Controles y resultado esperado: 042 es un marcador fijo de finalización, no una coordenada ni una cantidad. Inspecciona trail y points para comprobar el historial guardado. Este programa no dibuja un cuerpo que siga al protagonista.

Guardar un historial de posiciones: 042 es un marcador fijo de finalización, no una coordenada ni una cantidad. Inspecciona trail y points para comprobar el historial guardado. Este programa no dibuja un cuerpo que siga al protagonista.
Ejemplo en pantalla: 042 es un marcador fijo de finalización, no una coordenada ni una cantidad. Inspecciona trail y points para comprobar el historial guardado. Este programa no dibuja un cuerpo que siga al protagonista.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Leer el contador de fotogramas de la biblioteca gb_system

Objetivo: Muestra cómo las esperas contadas en fotogramas afectan al contador de fotogramas de la biblioteca.

Funcionamiento: Después de system_init, el programa llama dos veces a system_wait_vblank y muestra system_get_frame8.

Controles y resultado esperado: El resultado es 002. El bucle de espera utiliza la función auxiliar m_wait del manual, por lo que el valor mostrado no sigue aumentando.

Leer el contador de fotogramas de la biblioteca: El resultado es 002. El bucle de espera utiliza la función auxiliar m_wait del manual, por lo que el valor mostrado no sigue aumentando.
Ejemplo en pantalla: El resultado es 002. El bucle de espera utiliza la función auxiliar m_wait del manual, por lo que el valor mostrado no sigue aumentando.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Seleccionar el ID de la escena actual gb_scene

Objetivo: Muestra cómo seleccionar un ID para distinguir escenas, como la pantalla de título y la partida.

Funcionamiento: El programa registra dos entradas SceneDef inicializadas a cero y selecciona el ID 1 mediante scene_change.

Controles y resultado esperado: 001 es el ID actual devuelto por scene_get_current. El ejemplo no registra callbacks de escena ni dibujo de transiciones.

Seleccionar el ID de la escena actual: 001 es el ID actual devuelto por scene_get_current. El ejemplo no registra callbacks de escena ni dibujo de transiciones.
Ejemplo en pantalla: 001 es el ID actual devuelto por scene_get_current. El ejemplo no registra callbacks de escena ni dibujo de transiciones.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Mostrar el juego de caracteres incluido fc_font

Objetivo: Muestra qué letras, dígitos y signos de puntuación contiene la fuente original incluida y cómo dibujarlos.

Funcionamiento: m_init prepara la pantalla y la fuente. m_text dibuja cada línea; m_put dibuja las comillas dobles mediante el código de carácter 34.

Controles y resultado esperado: Busque 26 letras mayúsculas, 26 minúsculas, 10 dígitos y 30 signos de puntuación. Compruebe que todos los glifos sean legibles. No se requiere ninguna entrada.

Mostrar el juego de caracteres incluido: Busque 26 letras mayúsculas, 26 minúsculas, 10 dígitos y 30 signos de puntuación. Compruebe que todos los glifos sean legibles. No se requiere ninguna entrada.
Ejemplo en pantalla: Busque 26 letras mayúsculas, 26 minúsculas, 10 dígitos y 30 signos de puntuación. Compruebe que todos los glifos sean legibles. No se requiere ninguna entrada.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Su primer texto en pantalla fc_hello

Objetivo: Muestra la secuencia básica para iniciar una ROM y dibujar texto y un número en el fondo.

Funcionamiento: Después de m_init, m_text dibuja el saludo y m_number da formato a 42. El bucle final espera fotogramas y mantiene la pantalla visible.

Controles y resultado esperado: La pantalla muestra HELLO WORLD y 042. El cero inicial corresponde al formato decimal de tres dígitos.

Su primer texto en pantalla: La pantalla muestra HELLO WORLD y 042. El cero inicial corresponde al formato decimal de tres dígitos.
Ejemplo en pantalla: La pantalla muestra HELLO WORLD y 042. El cero inicial corresponde al formato decimal de tres dígitos.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Calcular con un valor intermedio más amplio fc_arithmetic

Objetivo: Muestra cómo conservar un resultado intermedio que no cabe en ocho bits.

Funcionamiento: (u16)200 + 100 produce 300. El programa divide el resultado entre 10 y luego lo convierte a u8 para mostrarlo. Observa que la conversión al tipo más amplio ocurre antes de la suma.

Controles y resultado esperado: 030 representa el resultado calculado, 30.

Calcular con un valor intermedio más amplio: 030 representa el resultado calculado, 30.
Ejemplo en pantalla: 030 representa el resultado calculado, 30.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Bifurcaciones y bucles fc_control

Objetivo: Prueba for, continue, while e if/else en un cálculo sencillo.

Funcionamiento: El bucle for suma de 0 a 7 saltándose el 3 y obtiene 25. El bucle while avanza hasta 32; el if siguiente asigna 42 cuando el valor coincide.

Controles y resultado esperado: 042 es el resultado final. El programa usa una bifurcación if/else.

Bifurcaciones y bucles: el resultado final es 042. Este programa utiliza una bifurcación if/else.
Ejemplo en pantalla: 042 es el resultado final. El programa usa una bifurcación if/else.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Funciones, arrays, estructuras y punteros fc_aggregate

Objetivo: Muestra cómo agrupar valores y acceder a ellos mediante funciones y punteros.

Funcionamiento: El programa copia un Point que contiene (10,20) y después escribe de 1 a 4 en un array mediante un puntero. Suma el resultado de la función, 30, a los valores del array 1, 2 y 4 y a la constante 5.

Controles y resultado esperado: La suma se muestra como 042. Siga la copia de la estructura, las escrituras en ptr[i] y el valor devuelto por la función.

Funciones, arrays, estructuras y punteros: La suma se muestra como 042. Siga la copia de la estructura, las escrituras en ptr[i] y el valor devuelto por la función.
Ejemplo en pantalla: La suma se muestra como 042. Siga la copia de la estructura, las escrituras en ptr[i] y el valor devuelto por la función.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Banderas de bits y copia de búfer fc_bits_memory

Objetivo: Agrupa banderas en un byte y copia un búfer en un área de almacenamiento independiente.

Funcionamiento: __memset borra cuatro bytes. El programa activa el bit 3, invierte el bit 1 y después copia los cuatro bytes con __memcpy.

Controles y resultado esperado: el primer byte de destino se muestra como 010; el bit 3 aporta 8 y el bit 1 aporta 2.

Banderas de bits y copia de búfer: el primer byte de destino se muestra como 010; el bit 3 aporta 8 y el bit 1 aporta 2.
Ejemplo en pantalla: el primer byte de destino se muestra como 010; el bit 3 aporta 8 y el bit 1 aporta 2.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Contar nuevas pulsaciones de un botón fc_input

Objetivo: Distingue una nueva pulsación de un botón que sigue pulsado.

Funcionamiento: Cada fotograma llama a input_update. El contador solo avanza cuando input_pressed(BTN_A) es verdadero.

Controles y resultado esperado: el contador comienza en 000. Pulse A para obtener 001; mantenerlo pulsado no añade más. Suéltelo y vuelva a pulsarlo para obtener 002. El contador de un byte vuelve a 000 después de 255.

Contar nuevas pulsaciones de un botón: el contador comienza en 000. Pulse A para obtener 001; mantenerlo pulsado no añade más. Suéltelo y vuelva a pulsarlo para obtener 002. El contador de un byte vuelve a 000 después de 255.
Ejemplo en pantalla: el contador comienza en 000. Pulse A para obtener 001; mantenerlo pulsado no añade más. Suéltelo y vuelva a pulsarlo para obtener 002. El contador de un byte vuelve a 000 después de 255.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Multiplicar valores de punto fijo Q8.8 fc_fixed

Objetivo: Muestra la conversión de entero a Q8.8, la multiplicación y la conversión de vuelta a entero.

Funcionamiento: fix_from_int convierte 3 y 4 a Q8.8. fix_mul los multiplica y fix_to_int convierte el producto de vuelta a entero.

Controles y resultado esperado: 012 significa 3 × 4 = 12. Es el entero convertido, no el valor interno escalado por 256.

Multiplicar valores de punto fijo Q8.8: 012 significa 3 × 4 = 12. Es el entero convertido, no el valor interno escalado por 256.
Ejemplo en pantalla: 012 significa 3 × 4 = 12. Es el entero convertido, no el valor interno escalado por 256.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Asignar desde un pool fijo de objetos fc_entity

Objetivo: Crea un objeto a partir de un conjunto fijo de posiciones, sin asignación dinámica de memoria.

Funcionamiento: entity_init reinicia el pool. entity_create crea el tipo 1 en (20,30); el programa comprueba el ID de fallo 0xFF antes de establecer vx en 2.

Controles y resultado esperado: 001 es la cantidad de objetos activos, no un ID ni una coordenada. Este ejemplo no actualiza ni dibuja el objeto, por lo que no aparece ningún personaje en movimiento.

Asignar desde un pool fijo de objetos: 001 es la cantidad de objetos activos, no un ID ni una coordenada. Este ejemplo no actualiza ni dibuja el objeto, por lo que no aparece ningún personaje en movimiento.
Ejemplo en pantalla: 001 es la cantidad de objetos activos, no un ID ni una coordenada. Este ejemplo no actualiza ni dibuja el objeto, por lo que no aparece ningún personaje en movimiento.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Registrar un valor de diagnóstico en RAM fc_debug

Objetivo: Conserva un valor del juego con nombre en un búfer de diagnóstico, separado de la visualización en pantalla.

Funcionamiento: El programa inicializa la depuración, establece la etiqueta de fotograma en 1 y registra el valor 42 con el nombre HP.

Controles y resultado esperado: 001 es la cantidad de entradas de traza. HP=42 se guarda en el búfer de diagnóstico; la pantalla por sí sola no muestra ni verifica ese contenido.

Registrar un valor de diagnóstico en RAM: 001 es la cantidad de entradas de traza. HP=42 se guarda en el búfer de diagnóstico; la pantalla por sí sola no muestra ni verifica ese contenido.
Ejemplo en pantalla: 001 es la cantidad de entradas de traza. HP=42 se guarda en el búfer de diagnóstico; la pantalla por sí sola no muestra ni verifica ese contenido.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Guardar un historial de posiciones fc_chain

Objetivo: Muestra cómo guardar un historial de posiciones en un búfer circular.

Funcionamiento: chain_init asocia un array con espacio para cuatro puntos. Después, chain_push_head registra (20,30).

Controles y resultado esperado: 042 es un marcador fijo de finalización, no una coordenada ni una cantidad. Inspecciona trail y points para comprobar el historial guardado. Este programa no dibuja un cuerpo que siga al protagonista.

Guardar un historial de posiciones: 042 es un marcador fijo de finalización, no una coordenada ni una cantidad. Inspecciona trail y points para comprobar el historial guardado. Este programa no dibuja un cuerpo que siga al protagonista.
Ejemplo en pantalla: 042 es un marcador fijo de finalización, no una coordenada ni una cantidad. Inspecciona trail y points para comprobar el historial guardado. Este programa no dibuja un cuerpo que siga al protagonista.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Leer el contador de fotogramas de la biblioteca fc_system

Objetivo: Muestra cómo las esperas contadas en fotogramas afectan al contador de fotogramas de la biblioteca.

Funcionamiento: Después de system_init, el programa llama dos veces a system_wait_vblank y muestra system_get_frame8.

Controles y resultado esperado: El resultado es 002. El bucle de espera utiliza la función auxiliar m_wait del manual, por lo que el valor mostrado no sigue aumentando.

Leer el contador de fotogramas de la biblioteca: El resultado es 002. El bucle de espera utiliza la función auxiliar m_wait del manual, por lo que el valor mostrado no sigue aumentando.
Ejemplo en pantalla: El resultado es 002. El bucle de espera utiliza la función auxiliar m_wait del manual, por lo que el valor mostrado no sigue aumentando.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Seleccionar el ID de la escena actual fc_scene

Objetivo: Muestra cómo seleccionar un ID para distinguir escenas, como la pantalla de título y la partida.

Funcionamiento: El programa registra dos entradas SceneDef inicializadas a cero y selecciona el ID 1 mediante scene_change.

Controles y resultado esperado: 001 es el ID actual devuelto por scene_get_current. El ejemplo no registra callbacks de escena ni dibujo de transiciones.

Seleccionar el ID de la escena actual: 001 es el ID actual devuelto por scene_get_current. El ejemplo no registra callbacks de escena ni dibujo de transiciones.
Ejemplo en pantalla: 001 es el ID actual devuelto por scene_get_current. El ejemplo no registra callbacks de escena ni dibujo de transiciones.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Convertir coordenadas del mundo en coordenadas de pantalla gb_camera

Objetivo: Resta la posición de la cámara para obtener la posición en pantalla de un punto del mundo.

Funcionamiento: Camera_Set recibe el valor Q8.8 2560, equivalente a X=10 píxeles. Después, Camera_WorldToScreenX convierte la coordenada del mundo X=52.

Controles y resultado esperado: 052 menos 010 da el 042 mostrado. Es un cálculo de coordenadas; no desplaza el fondo.

Convertir coordenadas del mundo en coordenadas de pantalla: 052 menos 010 da el valor mostrado, 042. Es un cálculo de coordenadas; no desplaza el fondo.
Ejemplo en pantalla: 052 menos 010 da el 042 mostrado. Es un cálculo de coordenadas; no desplaza el fondo.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Descomprimir datos RLE en RAM gb_rle

Objetivo: Prueba una representación compacta de bytes repetidos mediante pares de cantidad y valor.

Funcionamiento: Los bytes comprimidos {3,42,0} representan tres copias de 42 seguidas de un terminador con cantidad cero. rle_decode escribe en un destino de tres bytes.

Controles y resultado esperado: el último byte, out[2], se muestra como 042. Los tres bytes descomprimidos deben contener 42.

Descomprimir datos RLE en RAM: el último byte, out[2], se muestra como 042. Los tres bytes descomprimidos deben contener 42.
Ejemplo en pantalla: el último byte, out[2], se muestra como 042. Los tres bytes descomprimidos deben contener 42.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Leer y escribir una casilla del tablero gb_board

Objetivo: Muestra cómo se corresponden las coordenadas de una cuadrícula con el almacenamiento de un juego de tablero.

Funcionamiento: Un array de 16 bytes almacena un tablero de 4×4. El programa lo borra, escribe 42 en la celda (2,1) y vuelve a leer esa misma celda.

Controles y resultado esperado: 042 es el valor leído de nuevo. El programa no dibuja el tablero de 4×4.

Leer y escribir una casilla del tablero: 042 es el valor leído de nuevo. El programa no dibuja el tablero de 4×4.
Ejemplo en pantalla: 042 es el valor leído de nuevo. El programa no dibuja el tablero de 4×4.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Avanzar una caja un paso de física gb_physics

Objetivo: Inicializa un mundo y un cuerpo rectangular, y después actualiza la posición a partir de la velocidad.

Funcionamiento: El cuerpo empieza en (40,40), con velocidad (2,0) y gravedad cero. El programa llama a kq2d_step una vez.

Controles y resultado esperado: 042 es la coordenada X resultante, medida en píxeles enteros en este ejemplo. No se dibuja una caja ni una animación continua.

Avanzar una caja un paso de física: 042 es la coordenada X resultante, medida en píxeles enteros en este ejemplo. No se dibuja una caja ni una animación continua.
Ejemplo en pantalla: 042 es la coordenada X resultante, medida en píxeles enteros en este ejemplo. No se dibuja una caja ni una animación continua.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Leer datos de ROM con un argumento de banco gb_bank

Objetivo: Muestra los argumentos necesarios para copiar datos de ROM a RAM.

Funcionamiento: far_data_read copia los dos bytes 7 y 42 en copied, con el argumento de banco 0 y longitud 2.

Controles y resultado esperado: El segundo byte de destino se muestra como 042. Este ejemplo lee ROM fija; no demuestra una transferencia entre distintos bancos conmutables.

Leer datos de ROM con un argumento de banco: El segundo byte de destino se muestra como 042. Este ejemplo lee ROM fija; no demuestra una transferencia entre distintos bancos conmutables.
Ejemplo en pantalla: El segundo byte de destino se muestra como 042. Este ejemplo lee ROM fija; no demuestra una transferencia entre distintos bancos conmutables.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Cargar datos por ID de recurso gb_asset

Objetivo: Registra la ubicación y la longitud de un recurso y después recupera sus bytes por ID.

Funcionamiento: El recurso 0 tiene tipo RAW, banco 0, un puntero a {7,42} y longitud 2. asset_load_raw lo copia a un búfer RAM de dos bytes.

Controles y resultado esperado: El segundo byte se muestra como 042. Esto demuestra la búsqueda y copia de recursos, no el renderizado de imágenes.

Cargar datos por ID de recurso: El segundo byte se muestra como 042. Esto demuestra la búsqueda y copia de recursos, no el renderizado de imágenes.
Ejemplo en pantalla: El segundo byte se muestra como 042. Esto demuestra la búsqueda y copia de recursos, no el renderizado de imágenes.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Asignar un proyectil gb_danmaku

Objetivo: Inicializa el pool de proyectiles y comprueba su ocupación tras crear uno.

Funcionamiento: Después de danmaku_reset, el programa llama a danmaku_spawn(40,40,16,0) y muestra dm_count.

Controles y resultado esperado: 001 es la cantidad de proyectiles asignados. Aquí no hay un bucle de actualización de proyectiles ni un compositor de fondo, así que no se dibuja ningún proyectil en movimiento.

Asignar un proyectil: 001 es la cantidad de proyectiles asignados. Aquí no hay un bucle de actualización de proyectiles ni un compositor de fondo, así que no se dibuja ningún proyectil en movimiento.
Ejemplo en pantalla: 001 es la cantidad de proyectiles asignados. Aquí no hay un bucle de actualización de proyectiles ni un compositor de fondo, así que no se dibuja ningún proyectil en movimiento.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Acumular movimiento fraccionario Q5.3 fc_subpixel

Objetivo: Conserva el movimiento subpíxel como resto y suma la parte de píxeles enteros a la posición.

Funcionamiento: Partiendo de X=40, el bucle suma 2/8 de píxel ocho veces. Un desplazamiento a la derecha extrae los píxeles enteros; una máscara conserva el resto.

Controles y resultado esperado: el movimiento total es de dos píxeles, así que X=42 se muestra como 042. Este ejemplo de integración manual maneja movimiento positivo; el negativo necesita una lógica equivalente de préstamo.

Acumular movimiento fraccionario Q5.3: el movimiento total es de dos píxeles, así que X=42 se muestra como 042. Este ejemplo de integración manual maneja movimiento positivo; el negativo necesita una lógica equivalente de préstamo.
Ejemplo en pantalla: el movimiento total es de dos píxeles, así que X=42 se muestra como 042. Este ejemplo de integración manual maneja movimiento positivo; el negativo necesita una lógica equivalente de préstamo.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Configurar una paleta de fondo de CGB gb_cgb_palette

Objetivo: Elige los colores del fondo y del texto mediante los componentes RGB de Game Boy Color.

Funcionamiento: El programa desactiva el LCD durante VBlank, configura el color 0 de la paleta 0 como blanco (31,31,31) y el color 3 como violeta (12,0,22), y después activa la pantalla.

Controles y resultado esperado: Ejecútelo en modo CGB para ver texto violeta y 042 sobre blanco. La salida monocroma de DMG no permite comprobar estos colores.

Configurar una paleta de fondo de CGB: Ejecútelo en modo CGB para ver texto violeta y 042 sobre blanco. La salida monocroma de DMG no permite comprobar estos colores.
Ejemplo en pantalla: Ejecútelo en modo CGB para ver texto violeta y 042 sobre blanco. La salida monocroma de DMG no permite comprobar estos colores.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Desplazar el fondo horizontalmente gb_scroll

Objetivo: Mueve el punto de vista sin volver a dibujar el contenido del fondo.

Funcionamiento: Cada fotograma incrementa phase y lo pasa a Scroll_SetBg. La posición de ocho bits vuelve a cero después de 255.

Controles y resultado esperado: La palabra SCROLL se mueve hacia la izquierda. Observe su posición a lo largo del tiempo; una sola captura no puede mostrar el movimiento.

Desplazar el fondo horizontalmente: La palabra SCROLL se mueve hacia la izquierda. Observe su posición a lo largo del tiempo; una sola captura no puede mostrar el movimiento.
Ejemplo en pantalla: La palabra SCROLL se mueve hacia la izquierda. Observe su posición a lo largo del tiempo; una sola captura no puede mostrar el movimiento.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Encolar una actualización de tile gb_vram_queue

Objetivo: Separa una solicitud de dibujo de la transferencia a VRAM que la aplica.

Funcionamiento: vram_queue_bg_tile encola el tile 52 en la coordenada (3,8) y vram_flush lo transfiere. En la fuente incluida, el tile 52 es el dígito 4.

Controles y resultado esperado: Busque un único 4 en la coordenada de tile del fondo (3,8). Es una actualización de tile, no un contador numérico.

Encolar una actualización de tile: Busque un único 4 en la coordenada de tile del fondo (3,8). Es una actualización de tile, no un contador numérico.
Ejemplo en pantalla: Busque un único 4 en la coordenada de tile del fondo (3,8). Es una actualización de tile, no un contador numérico.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Mostrar un sprite mediante DMA de OAM gb_sprite

Objetivo: Asigna y muestra un sprite de forma independiente del fondo.

Funcionamiento: El pool recién inicializado proporciona la posición 0. El programa selecciona el tile 65, establece la posición (70,80), activa la visualización OBJ y transfiere la OAM espejo en cada fotograma.

Controles y resultado esperado: Aparece una letra A inmóvil en la posición de sprite indicada. En un juego, comprueba si falló la asignación antes de usar el ID devuelto.

Mostrar un sprite mediante DMA de OAM: aparece una letra A inmóvil en la posición indicada para el sprite. En un juego, compruebe si falló la asignación antes de utilizar el ID devuelto.
Ejemplo en pantalla: Aparece una letra A inmóvil en la posición de sprite indicada. En un juego, comprueba si falló la asignación antes de usar el ID devuelto.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Generar un valor aleatorio reproducible gb_rng

Objetivo: Utiliza una semilla para reproducir una secuencia pseudoaleatoria.

Funcionamiento: rng_seed(1234) inicializa el generador y después se llama una vez a rng_range(10). El límite superior, 10, queda excluido.

Controles y resultado esperado: La pantalla muestra un valor entre 000 y 009. Reiniciar el mismo programa con la misma semilla reproduce ese valor; no cambia en cada fotograma.

Generar un valor aleatorio reproducible: La pantalla muestra un valor entre 000 y 009. Reiniciar el mismo programa con la misma semilla reproduce ese valor; no cambia en cada fotograma.
Ejemplo en pantalla: La pantalla muestra un valor entre 000 y 009. Reiniciar el mismo programa con la misma semilla reproduce ese valor; no cambia en cada fotograma.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Guardar una bandera de estado del juego gb_flags

Objetivo: Representa un estado booleano, como si un evento ha terminado, mediante un número de bandera.

Funcionamiento: El programa borra la bandera 12, la activa y la vuelve a leer con flag_get.

Controles y resultado esperado: 001 significa que el indicador 12 es verdadero. El ejemplo opera sobre indicadores en RAM y no los conserva al apagar y encender.

Guardar una bandera de estado del juego: 001 significa que el indicador 12 es verdadero. El ejemplo opera sobre indicadores en RAM y no los conserva al apagar y encender.
Ejemplo en pantalla: 001 significa que el indicador 12 es verdadero. El ejemplo opera sobre indicadores en RAM y no los conserva al apagar y encender.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Avanzar un círculo un paso de física gb_circle

Objetivo: Configura un cuerpo circular y actualiza su posición a partir de la velocidad.

Funcionamiento: El círculo activo tiene radio 4, posición (40,40) y velocidad (2,0). La gravedad es cero y linear_damping_q8 vale 255; kq2dc_step se ejecuta una vez.

Controles y resultado esperado: 042 es la coordenada X entera resultante. El ejemplo no dibuja un contorno circular ni una animación de colisión.

Avanzar un círculo un paso de física: 042 es la coordenada X entera resultante. El ejemplo no dibuja un contorno circular ni una animación de colisión.
Ejemplo en pantalla: 042 es la coordenada X entera resultante. El ejemplo no dibuja un contorno circular ni una animación de colisión.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Desplazar el fondo de NES fc_scroll

Objetivo: Mueve el fondo actualizando la posición de desplazamiento de PPU.

Funcionamiento: Partiendo de __scroll_set(0,0), el programa incrementa phase una vez por fotograma y lo utiliza como posición horizontal.

Controles y resultado esperado: La palabra SCROLL cambia de posición horizontal. phase vuelve de 255 a 0. No es un ejemplo de un mapa ancho que abarque varias tablas de nombres.

Desplazar el fondo de NES: La palabra SCROLL cambia de posición horizontal. phase vuelve de 255 a 0. No es un ejemplo de un mapa ancho que abarque varias tablas de nombres.
Ejemplo en pantalla: La palabra SCROLL cambia de posición horizontal. phase vuelve de 255 a 0. No es un ejemplo de un mapa ancho que abarque varias tablas de nombres.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Aplicar una actualización de tile mediante NMI fc_vram_queue

Objetivo: Envía una actualización de PPU desde el programa principal para que la aplique el procesamiento de NMI.

Funcionamiento: __vramq_put encola el tile 52 en la dirección de tabla de nombres 0x2103 y __vramq_commit lo envía. Esa dirección corresponde a la coordenada de tile (3,8).

Controles y resultado esperado: Aparece un único 4 en la coordenada del fondo (3,8). El tile 52 es el dígito 4 en la fuente incluida.

Aplicar una actualización de tile mediante NMI: aparece un único 4 en la coordenada del fondo (3,8). El tile 52 es el dígito 4 en la fuente incluida.
Ejemplo en pantalla: Aparece un único 4 en la coordenada del fondo (3,8). El tile 52 es el dígito 4 en la fuente incluida.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Mostrar un sprite de OAM de NES fc_sprite

Objetivo: Prepara los colores de los sprites y los datos de OAM para dibujar una imagen de forma independiente del fondo.

Funcionamiento: El programa carga la paleta de sprites, configura la entrada 0 con posición (70,80), tile 65 y atributos 0, activa el renderizado y repite el DMA de OAM.

Controles y resultado esperado: Aparece una letra A inmóvil como sprite. El ejemplo muestra la configuración y la transferencia OAM, no una animación.

Mostrar un sprite de OAM de NES: aparece una letra A inmóvil como sprite. El ejemplo muestra la configuración y la transferencia de OAM, no una animación.
Ejemplo en pantalla: Aparece una letra A inmóvil como sprite. El ejemplo muestra la configuración y la transferencia OAM, no una animación.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Reproducir un tono de pulso de APU fc_sound

Objetivo: Configura los valores de control, temporizador y longitud del canal de pulso integrado de NES.

Funcionamiento: Después de nes_apu_init, el programa llama a nes_sfx_square1(0xBF,400,20). El control 0xBF selecciona volumen constante y detiene el contador de longitud, por lo que el tono se mantiene. 20 es un índice de la tabla de longitudes, no 20 fotogramas.

Controles y resultado esperado: Suena un tono de pulso sostenido mientras se muestra 042. Llama a nes_apu_silence_all para detenerlo. El marcador en pantalla no verifica por sí solo la salida de sonido.

Reproducir un tono de pulso de APU: Suena un tono de pulso sostenido mientras se muestra 042. Llama a nes_apu_silence_all para detenerlo. El marcador en pantalla no verifica por sí solo la salida de sonido.
Ejemplo en pantalla: Suena un tono de pulso sostenido mientras se muestra 042. Llama a nes_apu_silence_all para detenerlo. El marcador en pantalla no verifica por sí solo la salida de sonido.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas

Procesar un efecto de sonido en cada fotograma gb_sound

Objetivo: Inicia un flujo de efectos de sonido y lo hace avanzar mediante actualizaciones regulares por fotograma.

Funcionamiento: Después de Audio_Init, Audio_PlaySFX inicia tone en el canal de ID 1. El bucle principal llama a Audio_Update una vez por fotograma.

Controles y resultado esperado: Suena un efecto de pulso corto mientras se mantiene visible 042. El número es un marcador fijo, no el volumen ni la posición de reproducción. Evalúa el sonido mediante la salida de audio o una grabación.

Procesar un efecto de sonido en cada fotograma: Suena un efecto de pulso corto mientras se mantiene visible 042. El número es un marcador fijo, no el volumen ni la posición de reproducción. Evalúa el sonido mediante la salida de audio o una grabación.
Ejemplo en pantalla: Suena un efecto de pulso corto mientras se mantiene visible 042. El número es un marcador fijo, no el volumen ni la posición de reproducción. Evalúa el sonido mediante la salida de audio o una grabación.

Volver al ejemplo del manual del compilador / Volver al ejemplo del manual de bibliotecas