diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/descifrador.s | 117 |
1 files changed, 51 insertions, 66 deletions
diff --git a/app/descifrador.s b/app/descifrador.s index ad9ff61..72dafdb 100644 --- a/app/descifrador.s +++ b/app/descifrador.s @@ -1,81 +1,66 @@ .global reset reset: -.equ START_BUTTON, 0x30050000 @Cambiar a dirección de memoria del botón -.equ KEY_SWITCHES, 0x30060000 @Cambiar a dirección de memoria de los switches +@ IO utilizado: +@ 5 switches para la llave +@ 1 switch de selección de algoritmo (xor o not) +@ 1 botón de inicio -@Copiar buffer a VRAM (?) - @ Esto es para guardar en memoria cada pixel - @ en este caso se guarda un valor de 0xCA por ejemplo desde la posicion 0x100 - @ dos veces, hasta la 0x104 por ejemplo - mov r1, #0x100 - mov r2, #0xCA - mov r7, #0x0 - -load: - str r2, [r1] - add r1, r1, #4 - add r7, r7, #1 - cmp r7, #2 - bne load +.equ START_BUTTON, 0x30050000 @ Dirección de memoria del botón +.equ KEY_SWITCHES, 0x30060000 @ Dirección de memoria de los switches +.equ START, 0x00010000 @ Dirección de memoria de los pixeles + +@ Dirección inicial de lectura, contador y tamaño de la imagen +ldr r1, =START +mov r7, #0x0 +ldr r8, =307200 @Esperar botón - ldr r2, =START_BUTTON - ldr r3, =KEY_SWITCHES - -@Prueba: poner botón de start en 1 - mov r9, #0x30050000 - mov r5, #1 - str r5, [r9] -@Prueba: poner switches en 1010 - mov r9, #0x30060000 - mov r5, #0b1011 - str r5, [r9] - +ldr r2, =START_BUTTON +ldr r3, =KEY_SWITCHES + + idle: - ldr r5, [r2] @Leer valor del botón - ldr r6, [r3] @Leer valores de los switches - cmp r5, #1 - beq start - b idle + ldr r5, [r2] @ Lee valor del botón + ldr r6, [r3] @ Lee valores de los switches + cmp r5, #1 @ Si el botón de inicio es 1, se salta a start + bne idle +@ Verificar el algoritmo seleccionado -start: - @Verificar el algoritmo seleccionado - ldr r6, [r3] - and r6, r6, #1 - cmp r6, #1 - beq not - cmp r6, #0 - beq xor - -@Reiniciar contador y posicion de memoria - mov r1, #0x100 - mov r7, #0x0 + lsr r9, r6, #1 @ Obtener la llave + mov r0, r9, lsl #8 @ Mover llave para no afectar alpha + orr r0, r0, r9, lsl #16 @ Replicar la llave en el siguiente byte + orr r0, r0, r9, lsl #24 @ Replicar la llave en el siguiente byte -@Recorrer la memoria desde #0x100 y hacer not al valor en cada posicion + and r6, r6, #1 @ Bit mask para seleccionar el primer bit de los switches + cmp r6, #1 @ Si el valor es 1, se salta a not, si es 0 a xor + beq not + cmp r6, #0 + beq xor + + +@ Recorrer la memoria desde START y hacer not al valor en cada posicion @ y volverlo a guardar not: - ldr r4, [r1] - mvn r4, r4 - str r4, [r1] @Se vuelve a guardar en memoria ya modificado - add r1, r1, #4 - add r7, r7, #1 - cmp r7, #1000 - bne not - b halt - + ldr r4, [r1] @ Guarda en r4 el dato en la posición de memoria de start + mvn r4, r4 @ Guarda en r4 el valor de r4 negado + str r4, [r1] @ Vuelve a guardar en memoria ya modificado + add r1, r1, #4 @ Incrementa el valor de r4, para ir al siguiente pixel + add r7, r7, #1 @ Incrementa contador de tamaño de la imagen + cmp r7, r8 @ Compara contador con tamaño de la imagen 640 * 480 + bne not + b halt + xor: - ldr r4, [r1] - ldr r6, [r3] - lsr r6, r6, #1 - eor r4, r4, r6 - str r4, [r4] @Se vuelve a guardar en memoria ya modificado - add r1, r1, #4 - add r7, r7, #1 - cmp r7, #1000 - bne xor - b halt + ldr r4, [r1] @ Guarda en r4 el dato en la posición de memoria de start + eor r4, r4, r0 @ Hace XOR entre r4 y 46 + str r4, [r4] @ Vuelve a guardar en memoria ya modificado + add r1, r1, #4 @ Incrementa el valor de r4, para ir al siguiente pixel + add r7, r7, #1 @ Incrementa contador de tamaño de la imagen + cmp r7, r8 @ Compara contador con tamaño de la imagen 640 * 480 + bne xor + b halt halt: - b halt
\ No newline at end of file + b halt
\ No newline at end of file |
