
#include "bootpack.h"
#include <stdio.h>
/*PIC的初始化*/

void init_pic(void)
{
	
	io_out8(PIC0_IMR,  0xff  ); /* 禁止所有中断 */
	io_out8(PIC1_IMR,  0xff  ); /* 禁止所有中断 */

	io_out8(PIC0_ICW1, 0x11  ); /* 边沿触发模式（edge trigger mode）*/
	io_out8(PIC0_ICW2, 0x20  ); /* IRQ0-7由INT20-27接收 */
	io_out8(PIC0_ICW3, 1 << 2); /* PIC1由IRQ2连接*/
	io_out8(PIC0_ICW4, 0x01  ); /* 无缓冲区模式*/

	io_out8(PIC1_ICW1, 0x11  ); /* 边沿触发模式*/
	io_out8(PIC1_ICW2, 0x28  ); /* IRQ8-15由INT28-2f接收 */
	io_out8(PIC0_ICW3, 2     ); /* PIC1由IRQ2连接*/
	io_out8(PIC0_ICW4, 0x01  ); /* 无缓冲区模式*/

	io_out8(PIC0_IMR,  0xfb  ); /* 11111011 PIC1以外全部禁止*/
	io_out8(PIC1_IMR,  0xff  ); /* 1111111 禁止所有中断*/

	return;
}


void inthandler27(int *esp)
/* PIC0中断的不完整策略 */
/* 这个中断在Athlon64X2上通过芯片组提供的便利，只需执行一次 */
/* 这个中断只是接收，不执行任何操作 */
/* 为什么不处理？
	→  因为这个中断可能是电气噪声引发的、只是处理一些重要的情况。*/
{
	io_out8(PIC0_OCW2, 0x67); /* 通知PIC的IRQ-07（参考7-1） */
	return;
}
