Bene analizziamo ora la routine in tutte le sue parti
CITAZIONE
LDR R3, .8000
LDRH R3, [R3]
MOV R1, #0x20
MUL R1, R3
In questa parte la routine caricherŕ l'offset della variabile 8000 in r3 e successivamente salverŕ una half-word.
dopodiché mettiamo in r1 il valore 20 (che sarebbero quanti byte occupa un set di palette).
Un set di palette č composto da 16 colori e ogni paletta č composta da 2 byte, quindi in tutti avremo 32 byte.
In esadecimale 32 = 20.Infine moltiplichiamo la half-word con il valore 20.
CITAZIONE
LDR R0, .TABLE_PAL
ADD R0, R1
LDR R1, .SET_PAL_14
MOV R2, #0x10
SWI 0xB
In r0 carichiamo l'offset della TABLE delle pal (in questo caso B00000).
successivamente andremo a sommare il prodotto precedentemente ricavato nella prima parte con la nostra TABLE.
Ora arriva la parte fondamentale, carichiamoin r1 il set di palette numero 14 contenuto nella
RAM.
e successivamente mettiamo in r2 il valore 10.
Perchč 10?
Ho detto prima che ogni set di palette occupa 20 byte.
Il comando successivo SWI 0xB, sovrascrive 2 byte alla volta di conseguenza č necessario dimezzare il numero dei byte da copiare che non saranno 20 ma 10 byte.In questo modo tramite la nostra variabile avremo caricato le nostre palette.
Ora manca la parte riguardante il mugshot in se.
CITAZIONE
LDR R2, .OAM
LDRB R2, [R2]
MOV R1, #0x20
MUL R2, R1
Bene ora arriva la parte interessante. Vi ricordate all'inizio la struttura dell'oam su come viene salvato?
Bene sfrutteremo il byte dell'oam contenente da dove inizia l'oam e salviamo il byte un r2.
In r2 ora abbiamo quanti quadretti č distante dall'inizio dove vengono caricati tutti i tile dell'oam.
Ora in r1 mettiamo il valore 20.
Perchč 20? Non centra niente con le palette. In questo caso 20 sono i byte che compongono un quadratino 8x8. Infatti successivamente moltiplicheremo il valore 20 con il byte dove inizia il nostro OBJ.
CITAZIONE
LDR R1, .BASE
ADD R1, R2
LDR R2, .800
MUL R3, R2
LDR R2, .TABLE_MUG
ADD R0, R2, R3
LDR R2, .400
SWI 0xB
Bene, in r1 carichiamo l'offset da dove iniziano i tile dell'oam e lo sommiamo al prodotto precedente.
Ora in r2 carichiamo il valore 800 (che sarebbero i byte che occupa una immagine 64x64 compressa) e motliplichiamo il valore 800 con la variabile contenuta in r3 (ormai non serve piů il valore della variabile in r3 quindi salvo il prodotto direttamente in r3).
Ora in r2 carichiamo la nostra TABLE dei mug (io ho scelto A00000) e sommiamo il prodotto precedente con l'offset della nostra TABLE.
Infine, analogamente alla parte finale riguardante le palette, carichiamo in r2 il valore dimezzato dei byte da copiare.