- Contenido
- ¿Cómo se corre desde el QEMU?
- Ejercicio 1
- Ejercicio 2
- TODO
- Animaciones
- Escenas
- Figuras a dibujar
- Pixel Art
make clean
make runQEMU
make runGDB
make remake
Escribir un programa en assembler ARMv8 sobre el código de ejemplo dado, que genere un patrón determinado o una imagen diseñada por el usuario. El código debe generar la imágen, no siendo posible realizar un código que lea una imagen y únicamente la muestre.
La imagen o patrón debe ser estático y debe cumplir con los siguientes requisitos:
- Que el patrón dibujado utilice toda la extensión de la pantalla.
- No puede tratarse de un patrón aleatorio.
- Se debe utilizar al menos 3 colores diferentes.
El patrón debe involucrar al menos dos figuras de distinta forma. El patrón o imagen debe poder explicarse en dos líneas de texto.
Escribir un programa en assembler ARMv8 que genere figuras definidas de distintos colores (a elección del grupo) con movimiento, siendo posible reutilizar el código del ejercicio 1 pero considerando que la secuencia de movimiento debe tener una duración no menor a 10 segundos (pudiendo no concluir jamás). Las condiciones que debe cumplir el práctico son las siguientes:
- Que el patrón dibujado utilice toda la extensión de la pantalla.
- No puede tratarse de un patrón aleatorio.
- Se debe utilizar al menos 3 colores diferentes.
- El patrón debe involucrar al menos dos figuras de distinta forma.
- El patrón debe poder explicarse en dos líneas de texto. Se valorará especialmente la relación del efecto logrado vs. el tamaño del código generado.
NOTA IMPORTANTE: Tener en cuenta las diferencias existentes entre el set de instrucciones ARMv8 que se debe utilizar, con el set LEGv8 estudiado. Apoyarse en el Manual de Referencia: “ARMv8_Reference_Manual” que se acompaña como adjunto.
-
Configurar la tabulación = 4.
-
Añadir la figura que se desea dibujar (
assets
). -
Agregar y definir la variable del color del fondo.
-
Definir variable de la velocidad de la animación (discutir).
- Definir la función
delay
.
- Definir la función
-
Crear función
doHorizontalLine
para dibujar líneas horizontales.Argumentos x21 : xo (valor de origen de x) x22 : yo (valor de origen de y) x23 : w (cantidad de pixeles a dibujar) Usado drawPixel: setPixel x16 x, x12 y x18 : Colour
-
Completar función para dibujar cuadrados.
-
Completar función para dibujar rectángulos.
-
Completar función para dibujar círculos.
- Arreglar la "cruz" en los ejes
xc
eyc
(no se pintan). - Añadir lógica de rellenar la figura con un argumento.
- Arreglar la "cruz" en los ejes
-
[-] Modificar función
setPixel
para que use el stack pointer (no la necesita). -
Averiguar como correrlo con GBA (si es que se puede).
- [-] (\S) Si no se puede, encontrar alternativa.
-
Definir escenas para dibujarlas.
- Definir animaciones de transición.
- Definir la función
paintScreen
. Esta función lo que hace es pintar la pantalla de un color.Argumentos x18 : Colour
- Definir la función
cleanScreen
que pinta de negro puro toda la pantalla.
-
Añadir el checkeo de que no se escriban píxeles fuera del framebuffer.
-
Crear las siguientes letras con esta fuente y en este archivo font.s (@diegogimenez04):
- doDm (crea una
D
en mayúscula) - doO (crea una
o
en minúscula) - doE (crea una
e
en minúscula) - doEm (crea una
E
en mayúscula) - doI (crea una
i
en minúscula) - doIm (crea una
I
en mayúscula) - doZ (crea una
z
en minúscula) - doM (crea una
m
en minúscula) - doG (crea una
g
en minúscula) - doGm (crea una
G
en mayúscula)
- doDm (crea una
-
Crear las siguientes letras con esta fuente font.s (@shirosweets):
- doA (crea una
a
en minúscula) - doAm (crea una
A
en mayúscula) - doT (crea una
t
en minúscula) - doVm (crea una
V
en mayúscula) - doN (crea una
n
en minúscula) - doP (crea una
p
en minúscula) - doS (crea una
s
en minúscula) - doL (crea una
l
en minúscula)
- doA (crea una
-
Añadir al archivo variables.md:
- Tags/funciones usadas como título.
- Breve descripción de lo que hace.
- "Argumentos" a utilizar.
-
Averiguar por qué corre más rápido al separar archivos.
-
Finalizar una estructura básica del EJ1.
-
Estructura básica del EJ2.
-
Repasar
-
Buscar alternativa para no tener que checkear el memory_map.txt
-
Mover las animaciones de pantalla completa a
aScreenAnimations.s
-
Mover las funciones base para setear pixeles, pintar, etc. a
baseCore.s
-
En el archivo
test.s
, en la funciónmakeSomeLines
: limpiar y cambiar x -> w en los stur -
Importante: agregar guardado del registro x30 de las funciones del archivo
test.s
- Girar colores en RBG
- "Aparecer" y "desaparecer" (parpadear según una variable)
- Cambiar de color de manera RBG
- Historia/orden
- Parpadeo en las transiciones
- Flotar
- Saltar
https://nootall.tumblr.com/image/614400376209358848 https://nootall.tumblr.com/image/613601319149846528
- Nombre de los integrantes "animado" (dibujado estilo máquina de escribir) con un logo X (ejemplo).
-
Mandala RBG (no es muy llamativo al animarlo) mandala_1, mandala_2, mandala_3
- Animación: 1. Girar colores en RBG
-
Gato pixel art
-
Nombres de los integrantes
-
Logo Linux
-
Hollow
-
- Animación: 6. flotar
-
- Animación: 7. Saltar
Crea tu propio pixel art (sprite)
Redimencionar pixel art en photoshop
https://www.rapidtables.com/web/color/RGB_Color.html
https://htmlcolorcodes.com/es/
Cuando ocurre este error hermoso:
shirosweets@shiro:~/Desktop/ORG/vc-framebuffer$ make remake
rm -f *.o memory_map.txt kernel8.list kernel8.img kernel8.elf
make run
make[1]: Entering directory '/home/shirosweets/Desktop/ORG/vc-framebuffer'
aarch64-linux-gnu-as -g --warn --fatal-warnings animations.s -o animations.o
aarch64-linux-gnu-as -g --warn --fatal-warnings draw.s -o draw.o
aarch64-linux-gnu-as -g --warn --fatal-warnings raven.s -o raven.o
aarch64-linux-gnu-as -g --warn --fatal-warnings font.s -o font.o
aarch64-linux-gnu-as -g --warn --fatal-warnings test.s -o test.o
aarch64-linux-gnu-as -g --warn --fatal-warnings owl.s -o owl.o
aarch64-linux-gnu-as -g --warn --fatal-warnings app.s -o app.o
aarch64-linux-gnu-as -g --warn --fatal-warnings baseCore.s -o baseCore.o
aarch64-linux-gnu-as -g --warn --fatal-warnings start.s -o start.o
aarch64-linux-gnu-as -g --warn --fatal-warnings screenAnimations.s -o screenAnimations.o
aarch64-linux-gnu-ld animations.o draw.o raven.o font.o test.o owl.o app.o baseCore.o start.o screenAnimations.o -T memmap -o kernel8.elf -M > memory_map.txt
screenAnimations.o: in function `paintScreen':
(.data+0x124): relocation truncated to fit: R_AARCH64_ADR_PREL_LO21 against symbol `PreFrameBuffer' defined in .data section in start.o
make[1]: *** [Makefile:16: kernel8.img] Error 1
make[1]: Leaving directory '/home/shirosweets/Desktop/ORG/vc-framebuffer'
make: *** [Makefile:24: remake] Error 2
Es porque el BL que debe realizar al compilarse es mayor al que puede realizar xdxdxd.
Solución: renombre el archivo para que esté más arriba uwu