/*** * Hardware.h * Interface de la bibliothèque de simulation du matériel. * * voir hardware.ps pour le detail du matériel simulé par cette bibliothèque. * */ #ifndef HARDWARE #define HARDWARE /** * typedef funcIrq ; * prototype des fonctions-interruptions. * une interruption ne recoit aucun paramêtre "d'appel", * une interruption ne retourne aucun resultat, mais * sa terminaison restaure le contexte d'exécution du programme interrompu. */ typedef void (*funcIrq)(); /** * int initHardware(const char *fileconfig); * initialisation du matériel. Pas de "reinitialisation" possible. * l'initialisation définit le matériel conformément aux spécifications * fournies par le fichier dont le nom est "fileconfig". * retourne 0 en cas de problème lors de l'initialisation. */ extern int initHardware(const char *fileconfig); /** * IRQVECTOR * donne la base d'un tableau de pointeur de fonction du type * funcIrq. la fonction IRQVECTOR[n]() est appelée lorsque * l'interuption de niveau n est déclanchée par le matériel. */ extern funcIrq irqVector[16]; /* n'utilisez pas cette variable */ #define IRQVECTOR irqVector /* préférez ce #define IRQVECTOR */ extern int SYSTICKDURATION; /* microseconde entre les SYSTICK */ extern unsigned char **HDAMasterBufferAddress; /* n'utilisez pas cette variable */ #define MASTERBUFFER (*HDAMasterBufferAddress) /* préférez ce #define MASTERBUFFER */ extern unsigned char **HDBMasterBufferAddress; /* n'utilisez pas cette variable */ #define SLAVEBUFFER (*HDBMasterBufferAddress) /* préférez ce #define MASTERBUFFER */ /** * BASEADDRESS_RAM * variable associée à adresse de base de la mémoire globale * de la machine. Cette mémoire est commune à tout les programmes * qui utilisent la librairie sur la même machine. * */ extern unsigned char *baseGlobalMem; /* n'utilisez pas cette variable */ #define BASEADDRESS_RAM baseGlobalMem /* préférez ce #define BASEADDRESS_RAM */ /** * int _in(int port); * lecture du contenu du registre matériel n° "port". * retourne la valeur lue. */ int _in(int port); /** * void _out(int port, int value); * ecriture de la valeur "value" dans le registre matériel n° "port". */ void _out(int port, int value); /** * void _sleep(int irqLevel); * Stoppe l'activité du microprocesseur jusqu'à l'occurence * une interruption de niveau au moins égale à "irqLevel". */ void _sleep(int irqLevel); /** * void _mask(int irqLevel); * cache au microprocesseur l'occurence d'interruptions * de niveau au moins égale à irqLevel. * */ void _mask(int irqLevel); #endif