57 lines
1.7 KiB
C++
Executable File
57 lines
1.7 KiB
C++
Executable File
/*****************************************************************************
|
|
* *
|
|
* C P U *
|
|
* *
|
|
*---------------------------------------------------------------------------*
|
|
* Beschreibung: Implementierung einer Abstraktion fuer den Prozessor. *
|
|
* Derzeit wird nur angeboten, Interrupts zuzulassen, zu *
|
|
* verbieten oder den Prozessor anzuhalten. *
|
|
* *
|
|
* Autor: Michael Schoettner, 30.7.16 *
|
|
*****************************************************************************/
|
|
#ifndef __CPU_include__
|
|
#define __CPU_include__
|
|
|
|
|
|
class CPU {
|
|
|
|
private:
|
|
CPU(const CPU ©); // Verhindere Kopieren
|
|
|
|
public:
|
|
CPU() {}
|
|
|
|
// Erlauben von (Hardware-)Interrupts
|
|
inline void enable_int () {
|
|
asm volatile ( "sti" );
|
|
}
|
|
|
|
// Interrupts werden ignoriert/verboten
|
|
inline void disable_int () {
|
|
asm volatile ( "cli" );
|
|
}
|
|
|
|
// Prozessor bis zum naechsten Interrupt anhalten
|
|
inline void idle () {
|
|
asm volatile ( "sti;"
|
|
"hlt"
|
|
);
|
|
}
|
|
|
|
// Prozessor anhalten
|
|
inline void halt () {
|
|
asm volatile ( "cli;"
|
|
"hlt"
|
|
);
|
|
}
|
|
|
|
// Time-Stamp-Counter auslesen
|
|
inline unsigned long long int rdtsc() {
|
|
unsigned long long int ret;
|
|
asm volatile ( "rdtsc" : "=A"(ret) );
|
|
return ret;
|
|
}
|
|
};
|
|
|
|
#endif
|