game-and-watch-backup/payload/payload.S

111 lines
3.8 KiB
ArmAsm

// To compile:
// arm-none-eabi-as payload.S -march=armv7e-m -o payload.elf
// arm-none-eabi-objcopy -O binary payload.elf payload.bin
.syntax unified
.section .text
.global _start
_start:
.code 16
foo:
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
// __disable_interrupt();
CPSID I
// LTDC_Layer1->CR = 0; // disable layer
// LTDC_Layer1->DCCR = 0xFF0000FF; // blue
LDR R0, =0x50001084
MOVS R1, #0
STR R1, [R0, #0x00]
LDR R1, =0xFF0000FF
STR R1, [R0, #0x18]
// LTDC_Layer2->CR = 0; // disable layer
LDR R0, =0x50001104
MOVS R1, #0
STR R1, [R0, #0x00]
// LTDC->SRCR = 1; // reload shadow registers now
// LTDC->BCCR = 0x000000; // black
LDR R0, =0x50001000
MOVS R1, #1
STR R1, [R0, #0x24]
MOVS R1, #0
STR R1, [R0, #0x2C]
// DAC1->DHR12R1 = 0xAD2;
// DAC1->DHR12R2 = 0xAD2;
// DAC2->DHR12R1 = 0xAD2;
LDR R0, =0x40007400
MOV R1, #0xAD2
STR R1, [R0, #0x08]
STR R1, [R0, #0x14]
LDR R0, =0x58003400
STR R1, [R0, #0x08]
// uint32_t *src = (uint32_t*)0x08000000;
// uint32_t *dst = (uint32_t*)0x24000000;
// for (int len = 0; len < 0x20000 / 4; len++)
// {
// *dst++ = *src++;
// }
MOV R0, #0x08000000
MOV R1, #0x24000000
MOV R2, #0x8000
loop1:
LDR R3, [R0], #4
STR R3, [R1], #4
SUBS R2, R2, #1
BNE loop1
// while (1)
// {
// WWDG1->CR = 0x69;
// }
LDR R0, =0x50003000
MOVS R1, #0x69
loop2:
STR R1, [R0, #0x00]
B loop2