Skip to content

UNC-FAMAF/odc2025-lab2-odc2025_lab2_g06

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Review Assignment Due Date

🚀 Laboratorio de Organización y Arquitectura de Computadoras

Resolución de ejercicios prácticos usando Assembler ARMv8 sobre emulación de Raspberry Pi 3 y framebuffer.


📺 Especificaciones técnicas

  • Resolución: 640x480 píxeles, formato ARGB 32 bits.
  • Registro X0: contiene la dirección base del FrameBuffer.
  • El código de cada ejercicio está en app.s.
  • El archivo start.s inicializa el FrameBuffer. (NO MODIFICAR)

👩‍💻 Autores

Nombre Rol
Carla Virginia Díaz Peña Integrante 1
Guadalupe Rocío Acosta Integrante 2
Emil Morano Firme Integrante 3
Santiago Denis Integrante 4

📝 Descripción de los ejercicios

🎨 Ejercicio 1: Nyan Cat

Creamos un meme animado del famoso Nyan Cat, volando por el espacio con fondo estrellado. Incluye detalles circulares con temática de arcoíris y texto integrado, todo dibujado desde cero.

🌀 Ejercicio 2: Animación

Partimos del frame del ejercicio anterior, y agregamos cuatro nuevos frames para generar una animación en bucle. El resultado: Nyan Cat viaja alegremente por el espacio.


📁 Estructura del Proyecto

📂 Ejercicio 1

  • app.s → Código principal que llama a las funciones de animación.
  • start.s → Inicialización del hardware.
  • Makefile → Script de compilación.
  • memmap → Mapeo de memoria.
  • draw_shapes.s → Funciones básicas para dibujar figuras.
  • draw_functions.s → Agrupación de funciones para dibujar partes específicas (fondo, cuerpo, arcoíris, etc.).

📂 Ejercicio 2

  • app.s → Controlador de animación por frames.
  • start.s → Inicialización (idéntico al ejercicio 1).
  • Makefile → Script de compilación.
  • memmap → Mapeo de memoria.
  • draw_frames.s → Gestor de los 5 frames de animación.
  • draw_frame_1.s Este archivo crea el primer frame de la animación utilizando llamadas a las funciones de draw_shapes.s.
  • draw_frame_2.s Este archivo crea el segundo frame.
  • draw_frame_3.s Este archivo crea el tercer frame.
  • draw_frame_4.s Este archivo crea el cuarto frame.
  • draw_frame_5.s Este archivo crea el quinto frame.
  • draw_cleans.s → Limpieza inteligente del frame anterior, evitando que titile la pantalla.
  • delay.s → Generador de retraso entre frames.

🎬 Demo

🖥 Podés ver una demostración del proyecto en el siguiente link:
👉 Demo en Padlet

Uso

El archivo Makefile contiene lo necesario para construir el proyecto. Se pueden utilizar otros archivos .s si les resulta práctico para emprolijar el código y el Makefile los ensamblará.

Para correr el proyecto ejecutar

$ make runQEMU

Esto construirá el código y ejecutará qemu para su emulación.

Si qemu se queja con un error parecido a qemu-system-aarch64: unsupported machine type, prueben cambiar raspi3 por raspi3b en la receta runQEMU del Makefile (línea 23 si no lo cambiaron).

Para correr el gpio manager

$ make runGPIOM

Ejecutar luego de haber corrido qemu.

Importante a saber sobre el delay:

El delay tiene, en la linea 19, el uso de la variable DELAY_OPERATIONS. Si la animacion en su computadora llega a ser muy rapida o lenta, puede modificar el valor de dicha variable para que haga mas o menos operaciones respectivamente.

    mov x19, DELAY_OPERATIONS   

Como correr qemu y gcc usando Docker containers

Los containers son maquinas virtuales livianas que permiten correr procesos individuales como el qemu y gcc.

Para seguir esta guia primero tienen que instala docker y asegurarse que el usuario que vayan a usar tenga permiso para correr docker (ie dockergrp) o ser root

Linux

  • Para construir el container hacer
docker build -t famaf/rpi-qemu .
  • Para arrancarlo
xhost +
cd rpi-asm-framebuffer
docker run -dt --name rpi-qemu --rm -v $(pwd):/local --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix -v "$HOME/.Xauthority:/root/.Xauthority:rw" famaf/rpi-qemu
  • Para correr el emulador y el simulador de I/O
docker exec -d rpi-qemu make runQEMU
docker exec -it rpi-qemu make runGPIOM
  • Para terminar el container
docker kill rpi-qemu

MacOS

En MacOS primero tienen que instalar un X server (i.e. XQuartz)

  • Para construir el container hacer
docker build -t famaf/rpi-qemu .
  • Para arrancarlo
xhost +
cd rpi-asm-framebuffer
docker run -dt --name rpi-qemu --rm -v $(pwd):/local --privileged -e "DISPLAY=host.docker.internal:0" -v /tmp/.X11-unix:/tmp/.X11-unix -v "$HOME/.Xauthority:/root/.Xauthority:rw" famaf/rpi-qemu
  • Para correr el emulador y el simulador de I/O
docker exec -d rpi-qemu make runQEMU
docker exec -it rpi-qemu make runGPIOM
  • Para terminar el container
docker kill rpi-qemu

Otros comandos utiles

# Correr el container en modo interactivo
docker run -it --rm -v $(pwd):/local --privileged -e "DISPLAY=${DISPLAY:-:0.0}" -v /tmp/.X11-unix:/tmp/.X11-unix -v "$HOME/.Xauthority:/root/.Xauthority:rw" famaf/rpi-qemu
# Correr un shell en el container
docker exec -it rpi-qemu /bin/bash

About

unc-famaf-odc-odc2025-lab2-OdC2025-Lab2 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Assembly 99.3%
  • Other 0.7%