📄 pic.cc.svn-base
字号:
/*****************************************************************************//* Betriebssysteme I, Uni-Magdeburg, SS 98, OO-Stubs *//*---------------------------------------------------------------------------*//* *//* P I C *//* *//*---------------------------------------------------------------------------*//* Programmable Interrupt Controller. *//* Mit Hilfe des PICs koennen Hardware-Unterbrechungen einzeln zugelassen *//* oder unterdrueckt werden. Auf diese Weise wird also bestimmt, ob die *//* Unterbrechung eines Geraetes ueberhaupt an den Prozessor weitergegeben *//* wird. Selbst dann erfolgt eine Aktivierung der Unterbrechungsroutine nur, *//* wenn der Prozessor bereit ist, auf Unterbrechungen zu reagieren. Dies *//* kann mit Hilfe der Klasse CPU festgelegt werden. *//*****************************************************************************/#include "machine/pic.h"#include "machine/io_port.h"extern CPU cpu;PIC::PIC() : m_pic1_h(PIC::PIC_ports::pic1_h), m_pic1_l(PIC::PIC_ports::pic1_l), m_pic2_h(PIC::PIC_ports::pic2_h), m_pic2_l(PIC::PIC_ports::pic2_l){}PIC::PIC(PIC &pic) : m_pic1_h(PIC::PIC_ports::pic1_h), m_pic1_l(PIC::PIC_ports::pic1_l), m_pic2_h(PIC::PIC_ports::pic2_h), m_pic2_l(PIC::PIC_ports::pic2_l){}PIC::~PIC(){}void PIC::allow (int interrupt_device){ mask( mask() & ~( 1 << (interrupt_device&0x0f)) );}void PIC::forbid (int interrupt_device){ mask( mask() | ( 1 << (interrupt_device&0x0f)) );}void PIC::ack(){ m_pic1_h.outb(0x20); m_pic2_h.outb(0x20);}int PIC::mask(){ return (m_pic2_l.inb() << 8) | m_pic1_l.inb();}void PIC::mask(int new_mask){ m_pic1_l.outb( new_mask & 0xff ); m_pic2_l.outb( (new_mask >> 8) & 0xff );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -