浙林龙哥

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
1.关于编译:
可参考pyos3下的compile.bat文件,非常需要注意的是,ld链接时要设置程序从0x9000处开始并且,-e Main后面要跟着kernel.o(存放有Main函数的二进制文件)否则好像会找不到入口点。

2.关于ICW1~4:
  // 发送4个ICW
  //ICW1
  ToPort( 0x20 , 0x11 ) ;
  ToPort( 0xA0 , 0x11 ) ;

  //ICW2
  ToPort( 0x21 , 0x20 ) ;
  ToPort( 0xA1 , 0x28 ) ;

  //ICW3
  ToPort( 0x21 , 0x4 ) ;  // 在 Inter 出产的硬件中,PIC之间的联系是
  ToPort( 0xA1 , 0x2 ) ;  // 把 PIC1的IRQ2 同 PIC2 的IRQ1 联系起来

  //ICW4
  ToPort( 0x21 , 0x1 ) ;
  ToPort( 0xA1 , 0x1 ) ;

  //OCW1 下面设定中断屏蔽字,只许可键盘中断
  ToPort( 0x21 , 0xFD ) ;
  ToPort( 0xA1 , 0xFF ) ;

ICW1的结构
7   6   5   4   3   2   1   0
0   0   0   1   M   0   C   I
I : 如果 ICW3 后面还有 ICW4,则置位
C : 如果不置位,表明这两个 PIC 工作在串联状态下
M : 表明 IR0 到 IR7 的线是水平触发,在PC机中,这位应为0(边沿触发)
这里设为0x11,表明要使用ICW4,工作在串联状态、边沿触发

ICW2 表明了 IRQ0 在中断向量表中的地址,在保护模式下,你应当改变它
  7    6    5    4    3   2   1   0
A7  A6  A5  A4  A3  0   0   0
因为最后三位均是零,因此要求IRQ0的中断号必须是8的倍数、IRQ1 在中断向量表中的地址为 IRQ0的+1,IRQ2~IRQ7以次类推
这里PIC1设为0x20,表明IRQ0中断号为0x20,IRQ1中断号为0x21……IRQ7中断号为0x27
PIC2设为0x28,表明IRQ8中断号为0x28,IRQ9中断号为0x29……IRQ15中断号为0x2F
即:IRQ0~IRQ15对应0x20~0x2F,

ICW3 关于 PIC1 的结构
7   6   5   4   3   2   1   0
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
如果 IR0 是置0的,则表明此根线联到一个外围设备
如果 IR0 是置1的,则表明此根线与PIC2联结
这里PIC1设为0x8,表明主片的IRQ2参与级联
PIC2设为0x2,表明从片联到主片的的IRQ2

ICW4 的结构
7   6   5   4   3   2   1       0
0   0   0   0   0   0   EOI 80x86
EOI 表明中断的最后是自动处理还是由软件辅助处理。在PC中此位通常置0,表示软件必须
处理中断的最后扫尾工作
80x86 表明PIC是否工作在80x86的体系结构下
这里设为0x1,表明工作在80x86体系结构下。

OCW1:
当某位置位0表示允许其发出中断请求,置为1表示屏蔽其中断请救
这里PIC1设为 0xFD 就是 11111101 ;即只允许IRQ1,即键盘中断请求。
PIC2设为0xFF,屏蔽IRQ8~IRQ15

PIC 1 处理的中断有
0 系统时钟
1 键盘
2 重定向到IRQ9 (PIC2的IRQ1),如果此位被置1,则屏幕掉所有来自PIC2的中断
3 串口 1 (COM2/4)
4 串口 2 (COM1/3)
5 声卡
6 软驱
7 并行端口

PIC 2 处理的中断有
0 实时时钟
1 来自 IRQ2 (PIC1)
2 保留
3 保留
4 鼠标
5 数学协处理器
6 硬盘
7 保留

posted on 2005-03-04 03:46  浙林龙哥  阅读(2045)  评论(1编辑  收藏  举报