#include "sram.h"

unsigned char *SRAM_pointeur;
unsigned char *SRAM = (unsigned char *)0xE000000;

void SRAM_Ecrit(void *donnees, int taille)       {
    while(taille--)
        *SRAM_pointeur++=*(unsigned char*)(donnees++);
}

void SRAM_Lit(void *donnees, int taille)       {
    while(taille--)
        *(unsigned char*)(donnees++)=*SRAM_pointeur++;
}

void SRAM_Init()       {
    SRAM_pointeur=SRAM;
}

//Bloc de vérification de format de la SRAM pour être sûr des points suivants:
// 1) La sauvegarde existe (ne pas la charger sinon).
// 2) La sauvegarde est bien celle de ce programme. Plantage (ou trucs méga-moches) quasi garanti dans
//    le cas contraire!
const char verif[]="SRAM pour MAP v1.00";

void SRAM_SauveTout()           {
    SRAM_Init();
    SRAM_Ecrit((void*)verif,sizeof(verif));
    SRAM_Ecrit(couleurs,sizeof(couleurs));
    SRAM_Ecrit(&bMusique,sizeof(bMusique));
    SRAM_Ecrit(&bSons,sizeof(bSons));
    SRAM_Ecrit(&numero_musique,sizeof(numero_musique));
    SRAM_Ecrit(&bCPUMetre,sizeof(bCPUMetre));
    SRAM_Ecrit(&bTransp,sizeof(bTransp));
}

void SRAM_ChargeTout()         {
    char temp[sizeof(verif)];

    SRAM_Init();
    SRAM_Lit(temp,sizeof(verif));
    if (!memcmp(temp,verif,sizeof(verif)))          {               //Bloc ok -> chargement.
        SRAM_Lit(couleurs,sizeof(couleurs));
        SRAM_Lit(&bMusique,sizeof(bMusique));
        SRAM_Lit(&bSons,sizeof(bSons));
        SRAM_Lit(&numero_musique,sizeof(numero_musique));
        SRAM_Lit(&bCPUMetre,sizeof(bCPUMetre));
        SRAM_Lit(&bTransp,sizeof(bTransp));
    }
}


