Questa è solo una risposta parziale, quindi potrebbe non essere consentita:
Currently I am simply saying every ARM instructions cost 4 cycles and
THUMB instructions cost 2 cycles.
In realtà, se ricordo correttamente ARM, ciò che sta effettivamente accadendo è che, in un singolo ciclo di memoria, è possibile recuperare una singola istruzione ARM a 32 bit o due istruzioni THUMB a 16 bit. Il tempo di esecuzione è, ovviamente, dipendente dalle istruzioni.
Does instruction cycles vary depending on
which section of the memory it's currently accessing to?
http://nocash.emubase.de/gbatek.htm#cpuinstructioncycletimes According
to the above specification, it says different memory areas have
different waitstates but I don't know what it exactly mean.
Diverse regioni di memoria possono avere più client di dati che solo la CPU. Ciò è particolarmente vero nella memoria grafica / video in cui i pixel devono essere estratti dalla RAM per essere inviati al display. A meno che non si usi una memoria più veloce (leggi: più costosa), la CPU e l'hardware grafico dovranno fare a turno l'accesso alla RAM. Quindi, a seconda di quanti altri client RAM ci sono, potrebbero passare diversi cicli prima che arrivi il turno della CPU nella RAM.
Potrebbe non essere nemmeno così nobile - il produttore potrebbe aver semplicemente deciso di liberarsi della RAM più lenta (leggi: meno) per la maggior parte del programma e dello spazio dati e utilizzare un blocco più piccolo di memoria veloce solo per quelli cose che assolutamente ne avevano bisogno.
Furthermore, what are Non-sequential cycle, Sequential cycle, Internal
Cycle, Coprocessor Cycle for?
Sequenziale rispetto a non sequenziale si riferisce alla lettura di posizioni di memoria in ordine rispetto a out-of-order. La RAM è organizzata come una matrice bidimensionale di celle di memoria indicizzate per indirizzo di riga e colonna. Se si accede a posizioni di memoria in ordine crescente di indirizzi (ad es. 0, 1, 2, 3, 4, 5, ecc.), Tutto ciò che è necessario modificare (la maggior parte del tempo) è l'indirizzo della colonna e ogni successiva lettura può essere soddisfatto più rapidamente rispetto a quando si accede agli indirizzi in modo non sequenziale. A giudicare dal documento a cui sei collegato, sembra che ottieni un incremento CAS gratuito, ma un RAS + CAS completo costa un ciclo in più.
Ciclo interno significa che la CPU sta andando, "Wow, questo è complicato, dammi un po 'di tempo in più per capirlo." (Le istruzioni MUL sono esempi nitidi di questo.)
Ciclo di coprocessore si riferisce al tempo richiesto per parlare con un coprocessore ARM. Non so quali, se del caso, i coprocessori ARM sono nel GBA.
Per quanto riguarda l'implementazione: ciò non si presta a una singola risposta. Se fossi in me, modellerei i tempi di accesso alla RAM indipendentemente dai tempi di esecuzione delle istruzioni. Quando la CPU legge / scrive memoria, confronta l'indirizzo di memoria a cui si accede con l'indirizzo di memoria precedente a cui la CPU ha avuto accesso. Se sono adiacenti (M (corrente) == M (precedente) + 4), allora è gratuito; altrimenti aggiungi una penalità di un ciclo. Quindi aggiungi i ritardi imposti dalla regione di memoria a cui stai accedendo.