A ver. Lo que estoy diciendo es lo que hace el código original de FR para hacer un swi, no lo que hace el swi dentro de si. Ejemplo:
(Demasiado largo, pastebin: t_ec5d4)
Y en t_swi_12:
t_swi_12:
// 1e3b6c
swi 0x12 // LZ77UnCompVram
bx lr
En lugar de hacer el swi directamente, llama a una subrutina que lo hace.
Bueno, ahora que lo pienso, si el juego se escribió en C tiene sentido, ya que en lugar de hacer cada vez:
lalala
__asm__("swi 0x12")
lalala
Habría una función definida:
void unlz(int source, int dest, int flags) {
__asm__("swi 0x12")
}
...
unlz(s, d, f)
...
Lo que sí sería un fallo por parte de los desarrolladores es no haber marcado dicha función como inline.
Bueno, tampoco importa demasiado. Me preocupan más todos esos lsl's y lsr's que hay en varios sitios (como en la rutina del pastebin) xD.