pic.cc.svn-base

来自「德国Erlangen大学教学操作系统源码。」· SVN-BASE 代码 · 共 65 行

SVN-BASE
65
字号
/*****************************************************************************//* 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 + =
减小字号Ctrl + -
显示快捷键?