/* 

		割り込み関係処理 

		3/19 put_debugmessage32を追加 by is2os
*/

#include "bootpack.h"
#include <stdio.h>
#include <string.h>

void init_pic(void)
/* PICの初期化 */
{
	io_out8(PIC0_IMR,  0xff  ); /* 全ての割り込みを受け付けない */
	io_out8(PIC1_IMR,  0xff  ); /* 全ての割り込みを受け付けない */

	io_out8(PIC0_ICW1, 0x11  ); /* エッジトリガモード */
	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(PIC1_ICW3, 2     ); /* PIC1はIRQ2にて接続 */
	io_out8(PIC1_ICW4, 0x01  ); /* ノンバッファモード */

	io_out8(PIC0_IMR,  0xfb  ); /* 11111011 PIC1以外は全て禁止 */
	io_out8(PIC1_IMR,  0xff  ); /* 11111111 全ての割り込みを受け付けない */

	return;
}

/* 画面にいろいろ表示させる デバッグモード時のみ */
void put_debugmessage32(char *string, int current) {
	struct BOOTINFO *binfo = (struct BOOTINFO *)ADR_BOOTINFO;
	if (taskctl->debug_mode) {
		boxfill8(binfo->vram, binfo->scrnx, COL8_000000, 0, current * 16 + 2, strlen(string) * 8, (current + 1) * 16 + 2);
		putfonts8_asc(binfo->vram, binfo->scrnx, 0, current * 16 + 2, COL8_FFFFFF, string);
	}
	return;
}
