Skip to content
Snippets Groups Projects
Commit abbb0b82 authored by Thierno souleymane Bah's avatar Thierno souleymane Bah
Browse files

feat(display sector programm implemented)

parent 89c3be17
No related branches found
No related tags found
No related merge requests found
# Created by https://www.toptal.com/developers/gitignore/api/c,macos,vscode
# Edit at https://www.toptal.com/developers/gitignore?templates=c,macos,vscode
### C ###
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### vscode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# End of https://www.toptal.com/developers/gitignore/api/c,macos,vscode
\ No newline at end of file
# $Id: Makefile,v 1.2 2004/10/12 09:06:17 marquet Exp $
##############################################################################
ROOTDIR = ../x86-64/
CC = gcc
CFLAGS = -Wall -ansi -pedantic
CFLAGS += -g
LIBDIR = $(ROOTDIR)/lib
INCDIR = -I$(ROOTDIR)/include
LIBS = -L$(LIBDIR) -lhardware
###------------------------------
### Main targets
###------------------------------------------------------------
BINARIES= mkhd display_sector
all: $(BINARIES) $(OBJECTS)
###------------------------------
### Main rules
###------------------------------------------------------------
%.o: %.c
$(CC) $(CFLAGS) -c $< $(INCDIR)
%: %.o
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
mkhd: mkhd.o
display_sector: display_sector.o drive.o
###------------------------------
### Misc.
###------------------------------------------------------------
.PHONY: clean realclean depend
clean:
$(RM) *.o $(BINARIES)
realclean: clean
$(RM) vdiskA.bin vdiskB.bin
#include <stdio.h>
#include <stdlib.h>
#include "hardware.h"
#include "drive.h"
/* Paramètres de la simulation */
#define HDA_FILENAME "vdiskA.bin" /* nom du fichier de stockage du disque simulé */
static void
empty_it()
{
return;
}
void read_sector(unsigned char *buf, int cylinder, int sector)
{
int i;
seek(cylinder, sector);
_out(HDA_DATAREGS, 0);
_out(HDA_DATAREGS + 1, 1);
_out(HDA_CMDREG, CMD_READ);
_sleep(HDA_IRQ);
for (i = 0; i < HDA_SECTORSIZE; i++)
buf[i] = MASTERBUFFER[i];
}
int main(int argc, char const *argv[])
{
unsigned int i;
unsigned char buffer[HDA_SECTORSIZE];
if (argc != 3)
{
fprintf(stderr, "Usage: %s <cylinder> <sector>\n", argv[0]);
exit(EXIT_FAILURE);
}
/* init hardware */
if (init_hardware("hwconfig.ini") == 0)
{
fprintf(stderr, "Error in hardware initialization\n");
exit(EXIT_FAILURE);
}
/* Interreupt handlers */
for (i = 0; i < 16; i++)
IRQVECTOR[i] = empty_it;
/* Allows all IT */
_mask(1);
read_sector(buffer, atoi(argv[1]), atoi(argv[2]));
dump(buffer, HDA_SECTORSIZE, 1, 0);
/* and exit! */
exit(EXIT_SUCCESS);
}
#include <stdio.h>
#include <ctype.h>
#include "hardware.h"
#include "drive.h"
void dump(unsigned char *buffer,
unsigned int buffer_size,
int ascii_dump,
int octal_dump)
{
int i, j;
for (i = 0; i < buffer_size; i += 16)
{
/* offset */
printf("%.8o", i);
/* octal dump */
if (octal_dump)
{
for (j = 0; j < 8; j++)
printf(" %.2x", buffer[i + j]);
printf(" - ");
for (; j < 16; j++)
printf(" %.2x", buffer[i + j]);
printf("\n");
}
/* ascii dump */
if (ascii_dump)
{
printf("%8c", ' ');
for (j = 0; j < 8; j++)
printf(" %1c ", isprint(buffer[i + j]) ? buffer[i + j] : ' ');
printf(" - ");
for (; j < 16; j++)
printf(" %1c ", isprint(buffer[i + j]) ? buffer[i + j] : ' ');
printf("\n");
}
}
}
void seek(int cylinder, int sector)
{
_out(HDA_DATAREGS, (cylinder >> 8) & 256);
_out(HDA_DATAREGS + 1, cylinder & 256);
_out(HDA_DATAREGS + 2, (sector >> 8) & 256);
_out(HDA_DATAREGS + 3, sector & 256);
_out(HDA_CMDREG, CMD_SEEK);
_sleep(HDA_IRQ);
}
\ No newline at end of file
#if !defined(DRIVE)
#define DRIVE
/* Paramètres du contrôleur IDE */
#define ENABLE_HDA 1 /* 0 => simulation du disque désactivée */
#define HDA_CMDREG 0x3F6 /* registre de commande du disque maitre */
#define HDA_DATAREGS 0x110 /* base des registres de données (r,r+1...r+15) */
#define HDA_IRQ 14 /* Interruption du disque */
#define CMD_SEEK 0x02
#define CMD_READ 0x04
#define HDA_SECTORSIZE 256
void dump(unsigned char *buffer,
unsigned int buffer_size,
int ascii_dump,
int octal_dump);
void seek(int cylinder, int sec);
#endif
#
# Hardware.cfg
# Fichier de configuration du simulateur de matériel
#
#
#
# Trace de Debug
#
# define DEBUG_SETUP 0x0001 /* trace hardware setup */
# define DEBUG_IT 0x0010 /* trace interruptions generation */
# define DEBUG_REG 0x0100 /* trace hardware register access */
# define DEBUG_WARNING 0x1000 /* trace hardware warning messages */
DEBUG = 0x0000
#
# Configuration des paramêtres de base du simulateur
#
SYSTICK = 1000 # delais entre deux ticks du simulateur (en micro-seconde)
MemSize = 1024 # taille de la mémoire centrale en Ko
#
# Configuration des matériels réseau
#
# configuration des ports COM (port serie de type RS232)
# > Port Serie n°1
SL1_ENABLE = 0 # SL1_ENABLE = 0 => simulation lien serie désactivée
SL1 = "chimay.lifl.fr" # Machine connecté à la sortie du lien serie n°1
SL1_COM = 1 # destinataire 1 = lien serie "com1", 2 = lien serie "com2"
SL1_NOISE = 500 # bruit de la ligne 0-999 (exprimé en /1000 d'erreur)
SL1_IRQ = 4 # niveau d'interruption de l'UART serie n°1
SL1_UARTSR = 0x3F8 # registre de status de l'UART serie n°1
SL1_UARTDATA = 0x3FA # registre d'entrée sortie de l'UART serie n°1
SL1_UDPPORT = 1500 # port UDP "réel" utiliser pour simulation serie n°1
# > Port Serie n°2
SL2_ENABLE = 0 # SL2_ENABLE = 0 => simulation lien serie désactivée
SL2 = "ldx2" # Machine connecté à la sortie du lien serie n°2
SL2_COM = 2 # destinataire 1 = lien serie "com1", 2 = lien serie "com2"
SL2_NOISE = 0 # bruit de la ligne 0-999 (exprimé en /1000 d'erreur)
SL2_IRQ = 5 # niveau d'interruption de l'UART serie n°2
SL2_UARTSR = 0x3FC # registre de status de l'UART serie n°2
SL2_UARTDATA = 0x3FE # registre d'entrée sortie de l'UART serie n°2
SL2_UDPPORT = 1501 # port UDP "réel" utiliser pour simulation serie n°2
# > Configuration de la carte Ethernet
ENABLE_ETHERNET = 0 # ENABLE_ETHERNET = 0 => simulation ethernet désactivée
Eth0_Link = 1 # num de cable de connexion de la carte Eth0
Eth0_DMASR = 0xE800 # registre de status de la carte Ethernet
Eth0_DMABASE = 0xE804 # adresse de base pour le vidage d'un paquet
Eth0_DMASIZE = 0xE808 # adresse limite pour le vidage d'un paquet
Eth0_IRQ = 9 # niveau d'interruption de la carte.
Eth0_MCADR = "225.0.0.1" # adresse multicast utilisée pour la simulation ethernet
Eth0_UDPPORT = 1502 # port UDP utilisé pour la simulation ethernet
#
# Configuration des disques durs
#
###########################
# > Disque dur IDE Maitre #
###########################
# Paramètres du controlleur IDE
ENABLE_HDA = 1 # ENABLE_HD = 0 => simulation du disque désactivée
HDA_CMDREG = 0x3F6 # registre de commande du disque maitre
HDA_DATAREGS = 0x110 # base des registres de données (r,r+1,r+2,...r+15)
HDA_IRQ = 14 # Interruption du disque
# Paramètres de la simulation
HDA_FILENAME = "vdiskA.bin" # nom du fichier de stockage du disque simulé
HDA_STPS = 2 # nombre de SYSTICK pour changer de secteur
HDA_STPC = 1 # nombre de SYSTICK pour changer de piste
HDA_PON_DELAY = 30 # nombre de SYSTICK avant amorce du disque
HDA_POFF_DELAY = 30 # nombre de SYSTICK avant arret du disque
# Paramètres additionels du disque (Utilisez la commande dsknfo pour obtenir ces infos)
HDA_MAXCYLINDER = 16 # Nombre de pistes du disque maître
HDA_MAXSECTOR = 16 # Nombre de secteurs du disque maître
HDA_SECTORSIZE = 256 # Taille (en octet) d'un secteur du disque maître
############################
# > Disque dur IDE Esclave #
############################
# Paramètres du controlleur IDE
ENABLE_HDB = 1 # ENABLE_HD = 0 => simulation du disque désactivée
HDB_CMDREG = 0x376 # registre de commande du disque esclave
HDB_DATAREGS = 0x170 # base des registres de données (r,r+1,r+2,...r+15)
HDB_IRQ = 15 # Niveau d'interruption du disque
# Paramètres de la simulation
HDB_FILENAME = "vdiskB.bin" # nom du fichier de stockage du disque simulé
HDB_STPS = 2 # nombre de SYSTICK pour changer de secteur
HDB_STPC = 3 # nombre de SYSTICK pour changer de piste
HDB_PON_DELAY = 30 # nombre de SYSTICK avant amorce du disque
HDB_POFF_DELAY = 30 # nombre de SYSTICK avant arret du disque
# Paramètres additionels du disque (Utilisez la commande dsknfo pour obtenir ces infos)
HDB_MAXCYLINDER = 16 # Nombre de pistes du disque esclave
HDB_MAXSECTOR = 16 # Nombre de secteurs du disque esclave
HDB_SECTORSIZE = 512 # Taille (en octet) d'un secteur du disque esclave
#
# Configuration de l'horologe interne
#
TIMER_CLOCK = 0xF0 # registre de lecture de la date courante (en ms)
TIMER_PARAM = 0xF4 # registre de configuration du TIMER
# bit 7 : RESET general (=1)
# bit 6 : Alarm ON = 1, Alarm OFF = 0
# bit 5 : Declanche la division Hz du Timer (=1)
# bit 4 \ Si le division Hz du timer est demandé :
# bit 3 / 00: 1 top d'alarme pour 1 tops d'horloge ,
# 01: 1 top d'alarme pour 8 tops d'horloge ,
# 10: 1 top d'alarme pour 64 tops d'horloge ,
# 11: 1 top d'alarme pour 512 tops d'horloge.
# bit 2 - R.F.U. -
# bit 1 \ Lecture d'un état interne de l'alarme
# bit 0 / 00: Alarme Courante,
# 01: Division Hz,
# 10: Ticks/Sec
# 11: niveau d'interruption de l'horloge
TIMER_ALARM = 0xF8 # registre de generation d'interruption
TIMER_IRQ = 2 # Niveau d'interruption de l'horologe
TIMER_TICKS = 1 # Nombre de SYSTICKS par tick d'horloge
/* ------------------------------
$Id: mkhd.c,v 1.4 2004/10/12 09:16:57 marquet Exp $
------------------------------------------------------------
Create and intialize a drive using the hardware simulator.
Philippe Marquet, october 2002
A minimal example of a program using the ATA interface.
It is given to the students as such.
*/
#include <stdlib.h>
#include <stdio.h>
#include "hardware.h"
static void
empty_it()
{
return;
}
int main(int argc, char **argv)
{
unsigned int i;
/* init hardware */
if (init_hardware("hwconfig.ini") == 0)
{
fprintf(stderr, "Error in hardware initialization\n");
exit(EXIT_FAILURE);
}
/* Interrupt handlers */
for (i = 0; i < 16; i++)
IRQVECTOR[i] = empty_it;
/* Allows all IT */
_mask(1);
/* and exit! */
exit(EXIT_SUCCESS);
}
# $Id: hardware.ini 114 2009-12-01 13:06:43Z simon_duquennoy $
#------------------------------------------------------------
#
# Hardware.cfg
# Fichier de configuration du simulateur de matériel
#
#
# Trace de Debug
#
# define DEBUG_SETUP 0x0001 /* trace hardware setup */
# define DEBUG_IT 0x0010 /* trace interruptions generation */
# define DEBUG_REG 0x0100 /* trace hardware register access */
# define DEBUG_WARNING 0x1000 /* trace hardware warning messages */
DEBUG = 0x0000
#
# Configuration des paramêtres de base du simulateur
#
SYSTICK = 1000 # delais entre deux ticks du simulateur (en micro-seconde)
#
# Configuration des matériels réseau
#
# configuration des ports COM (port serie de type RS232)
# > Port Serie n°1
SL1_ENABLE = 0 # SL1_ENABLE = 0 => simulation lien serie désactivée
SL1 = "chimay.lifl.fr" # Machine connecté à la sortie du lien serie n°1
SL1_COM = 1 # destinataire 1 = lien serie "com1", 2 = lien serie "com2"
SL1_NOISE = 500 # bruit de la ligne 0-999 (exprimé en /1000 d'erreur)
SL1_IRQ = 4 # niveau d'interruption de l'UART serie n°1
SL1_UARTSR = 0x3F8 # registre de status de l'UART serie n°1
SL1_UARTDATA = 0x3FA # registre d'entrée sortie de l'UART serie n°1
SL1_UDPPORT = 1500 # port UDP "réel" utiliser pour simulation serie n°1
# > Port Serie n°2
SL2_ENABLE = 0 # SL2_ENABLE = 0 => simulation lien serie désactivée
SL2 = "ldx2" # Machine connecté à la sortie du lien serie n°2
SL2_COM = 2 # destinataire 1 = lien serie "com1", 2 = lien serie "com2"
SL2_NOISE = 0 # bruit de la ligne 0-999 (exprimé en /1000 d'erreur)
SL2_IRQ = 5 # niveau d'interruption de l'UART serie n°2
SL2_UARTSR = 0x3FC # registre de status de l'UART serie n°2
SL2_UARTDATA = 0x3FE # registre d'entrée sortie de l'UART serie n°2
SL2_UDPPORT = 1501 # port UDP "réel" utiliser pour simulation serie n°2
# > Configuration de la carte Ethernet
ENABLE_ETHERNET = 0 # ENABLE_ETHERNET = 0 => simulation ethernet désactivée
Eth0_Link = 1 # num de cable de connexion de la carte Eth0
Eth0_DMASR = 0xE800 # registre de status de la carte Ethernet
Eth0_DMABASE = 0xE804 # adresse de base pour le vidage d'un paquet
Eth0_DMASIZE = 0xE808 # adresse limite pour le vidage d'un paquet
Eth0_IRQ = 9 # niveau d'interruption de la carte.
Eth0_MCADR = "225.0.0.1" # adresse multicast utilisée pour la simulation ethernet
Eth0_UDPPORT = 1502 # port UDP utilisé pour la simulation ethernet
#
# Configuration des disques durs
#
# > Disque dur IDE Maitre
ENABLE_HDA = 1 # ENABLE_HD = 0 => simulation du disque désactivée
HDA_FILENAME = "vdiskA.bin" # nom du fichier de stockage du disque simulé
HDA_CMDREG = 0x3F6 # registre de commande du disque maitre
HDA_DATAREGS = 0x110 # base des registres de données (r,r+1,r+2,...r+7)
HDA_IRQ = 14 # Interruption du disque
HDA_MAXCYLINDER = 16 # Nombre de pistes du disque maître
HDA_MAXSECTOR = 16 # Nombre de secteurs du disque maître
HDA_SECTORSIZE = 32 # Taille (en octet) d'un secteur du disque maître
HDA_STPS = 2 # nombre de SYSTICK pour changer de secteur
HDA_STPC = 1 # nombre de SYSTICK pour changer de piste
HDA_PON_DELAY = 30 # nombre de SYSTICK avant amorce du disque
HDA_POFF_DELAY = 30 # nombre de SYSTICK avant arret du disque
# > Disque dur IDE Esclave
ENABLE_HDB = 1 # ENABLE_HD = 0 => simulation du disque désactivée
HDB_FILENAME = "vdiskB.bin" # nom du fichier de stockage du disque simulé
HDB_CMDREG = 0x376 # registre de commande du disque esclave
HDB_DATAREGS = 0x170 # base des registres de données (r,r+1,r+2,...r+7)
HDB_IRQ = 15 # Niveau d'interruption du disque
HDB_MAXCYLINDER = 16 # Nombre de pistes du disque esclave
HDB_MAXSECTOR = 16 # Nombre de secteurs du disque esclave
HDB_SECTORSIZE = 512 # Taille (en octet) d'un secteur du disque esclave
HDB_STPS = 2 # nombre de SYSTICK pour changer de secteur
HDB_STPC = 3 # nombre de SYSTICK pour changer de piste
HDB_PON_DELAY = 30 # nombre de SYSTICK avant amorce du disque
HDB_POFF_DELAY = 30 # nombre de SYSTICK avant arret du disque
#
# Configuration de l'horologe interne
#
TIMER_CLOCK = 0xF0 # registre de lecture de la date courante (en ms)
TIMER_PARAM = 0xF4 # registre de configuration du TIMER
# bit 7 : RESET general (=1)
# bit 6 : Alarm ON = 1, Alarm OFF = 0
# bit 5 : Declanche la division Hz du Timer (=1)
# bit 4 \ Si le division Hz du timer est demandé :
# bit 3 / 00: 1 top d'alarme pour 1 tops d'horloge ,
# 01: 1 top d'alarme pour 8 tops d'horloge ,
# 10: 1 top d'alarme pour 64 tops d'horloge ,
# 11: 1 top d'alarme pour 512 tops d'horloge.
# bit 2 - R.F.U. -
# bit 1 \ Lecture d'un état interne de l'alarme
# bit 0 / 00: Alarme Courante,
# 01: Division Hz,
# 10: Ticks/Sec
# 11: niveau d'interruption de l'horloge
TIMER_ALARM = 0xF8 # registre de generation d'interruption
TIMER_IRQ = 2 # Niveau d'interruption de l'horologe
TIMER_TICKS = 1 # Nombre de SYSTICKS par tick d'horloge
#
# Configuration de la MMU
#
MMU_ENABLE = 1 # MMU_ENABLE = 0 => simulation de la MMU désactivée
MMU_IRQ = 13 # Niveau d'interruption de la MMU
MMU_CMD = 0x66 # Registre de commande de la MMU
MMU_FAULT_ADDR = 0xCD # Registre contenant l'adresse mémoire ayant provoqué une faute
TLB_ADD_ENTRY = 0xCE # Registre de commande d'ajout d'entrée dans la TLB
# attend une valeur de la forme :
# struct tlb_entry_s {
# unsigned unused: 8;
# unsigned virt_page: 12;
# unsigned phys_page: 8;
# unsigned access_type: 3;
# unsigned is_active: 1;
#};
# le nouveau mapping est ajouté dans la TLB,
# provoquant éventuellement l'écrasement d'une ancienne entrée
TLB_DEL_ENTRY = 0xDE # Registre de commande de suppression d'entrée dans la TLB
# seul phys_page est lu, et toutes les entrée
# correspondant à cette page physicique sont supprimées de la TLB
TLB_SIZE = 32 # Number of entries in the TLB
TLB_ENTRIES = 0x800 # Registre contenant les entrées de la TLB (32 bits par entrée)
# Accessible en lecture comme en écriture avec le même format que
# celui utilisé par TLB_ADD_ENTRY
/* ------------------------------
$Id: hardware.h 114 2009-12-01 13:06:43Z simon_duquennoy $
------------------------------------------------------------
hardware.h
Interface de la bibliothèque de simulation du matériel.
*/
#ifndef _HARDWARE_H_
#define _HARDWARE_H_
/**
* CMD_
* commandes ATA-2
*/
#define CMD_SEEK 0x02
#define CMD_READ 0x04
#define CMD_WRITE 0x06
#define CMD_FORMAT 0x08
#define CMD_STATUS 0x12
#define CMD_DMASET 0x14
#define CMD_DSKINFO 0x16
#define CMD_MANUF 0xA2
#define CMD_DIAG 0xA4
/**
* Commandes de la MMU (registre MMU_CMD)
*/
#define MMU_PROCESS 0xCC /* Commande d'activation/désactivation de la MMU */
#define MMU_RESET 0xD5 /* Commande de réinitialisation de la MMU */
/**
* Physical and virtual memory for MMU
*/
extern void *physical_memory;
extern void *virtual_memory;
/**
* 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 (*func_irq)(void);
/**
* int init_hardware(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 init_hardware(const char *fileconfig);
/**
* IRQVECTOR
* donne la base d'un tableau de pointeur de fonction du type
* func_irq. la fonction IRQVECTOR[n]() est appelée lorsque
* l'interuption de niveau n est déclanchée par le matériel.
*/
#define IRQ_VECOTR_SIZE 256
extern func_irq *irq_vector; /* n'utilisez pas cette variable */
#define IRQVECTOR irq_vector /* préférez ce #define IRQVECTOR */
extern int SYSTICKDURATION; /* microseconde entre les SYSTICK */
/**
* MASTERBUFFER et SLAVEBUFFER
* Adresses des buffers de donnees des disques maitre et esclave
*/
/* n'utilisez pas ces variables*/
extern unsigned char ** HDA_masterbufferaddress, **HDB_masterbufferaddress;
/* préférez ces #define MASTERBUFFER et SLAVEBUFFER */
#define MASTERBUFFER (*HDA_masterbufferaddress)
#define SLAVEBUFFER (*HDB_masterbufferaddress)
/**
* 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 irq_level);
* Stoppe l'activité du microprocesseur jusqu'à l'occurence
* une interruption de niveau au moins égale à "irqLevel".
*/
void _sleep(int irq_level);
/**
* void _mask(int irqLevel);
* - cache au microprocesseur l'occurence d'interruptions
* de niveau inférieure à irqLevel.
* - 16ème bit à 0 : passage en mode protégé
* - 16ème bit à 1 : passage en mode user
*
*/
void _mask(int irq_level);
/**
* void _int(int irqLevel);
* - lance une interruption logicielle de niveau irqLevel
*
*/
void _int(int irqLevel);
#endif
/* ------------------------------
$Id: hw_config.h 86 2007-06-01 14:34:35Z skaczmarek $
------------------------------------------------------------
Fichier de configuration des acces au materiel
Philippe Marquet, march 2007
Code au niveau applicatif la description du materiel qui est fournie
par hardware.ini
*/
#ifndef _HW_CONFIG_H_
#define _HW_CONFIG_H_
#define INIFILENAME "hwconfig.ini"
/* Horloge */
#define TIMER_CLOCK 0xF0
#define TIMER_PARAM 0xF4
#define TIMER_ALARM 0xF8
#define TIMER_IRQ 2
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment