- Configuración de pantalla:
640x480
pixels, formatoARGB
32 bits. - El registro
X0
contiene la dirección base del FrameBuffer (Pixel 1). - El código de cada consigna debe ser escrito en el archivo app.s.
- El archivo start.s contiene la inicialización del FrameBuffer (NO EDITAR), al finalizar llama a app.s.
- El código de ejemplo pinta toda la pantalla un solo color.
-
app.s Este archivo contiene a apliación. Todo el hardware ya está inicializado anteriormente.
-
start.s Este archivo realiza la inicialización del hardware.
-
Makefile Archivo que describe como construir el software (que ensamblador utilizar, que salida generar, etc).
-
memmap Este archivo contiene la descripción de la distribución de la memoria del programa y donde colocar cada sección.
-
README.md este archivo.
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á.
Debe ubicarse en el directorio ejercicio01 o en el directorio ejercicio02, ya que dependiendo del ejercicio que quiera correr obtendrá un resultado distinto.
$ 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).
$ make runGPIOM
Ejecutar en otra terminal luego de haber corrido qemu.
El código genera la imagen de una carretera con arboles de copa circular, un auto azul y una camioneta blanca. De pulsar la tecla W los arboles pasan a ser pinos, los vehiculos cambian de lugar y color. De pulsar W se regresa a la imagen inicial.
La animacion muestra 3 paisajes distintos de rutas diferenciadas por los tipos de arboles y suelo, se pueden cambiar con las teclas W y S ya que son un ciclo bidireccional. La tecla A cambia las lineas punteadas del asfalto por lineas amarillas. Tecla D elimina y aparece uno a uno las camionetas mediante un ciclo repetitivo. El 'espacio' genera una secuencia de persecución entre un auto y una avioneta terminando el vehiculo eliminado por un misil. Tras detenerse la línea de ruta se habilita el uso de la W y S.
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
- 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
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
# 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
Este proyecto es software libre, y está disponible bajo la licencia MIT.