bochs: ICW1:level sensitive mode not supported

最近在用bochs虚拟机写一些裸奔程序,做到时钟实验这部分时开启了定时器中断,一运行就提示:ICW1:level sensitive mode not supported.

google 了一下,从bochs的源代码上可以看出来:这种错误出现在:

View Code
 1 void bx_pic_c::write(Bit32u address, Bit32u value, unsigned io_len)
 2 {
 3         .........
 4         switch (address) {
 5            ......
 6            case 0x20: 
 7                   if (value & 0x08) {
 8                        BX_PANIC(("master: ICW1: level sensitive mode not supported"));
 9                   }
10             .....
11              case 0x80: 
12                   if (value & 0x08) {
13                        BX_PANIC(("master: ICW1: level sensitive mode not supported"));
14                   }
15             .....
16         }
17         ..............
18                     
19 }

 

View Code
从上述代码中可以看出,是往0x20 和 0xA0 端口写的值bit3(第四个位)为1 所导致的。所以我检查代码,果然发现在定时器的中断处理程序中,本来往OCW2中写入0x60,给CPU发送EOI,让我写成了60,即16进制的0x3c, bit3 为1,所以提示这个错误。

posted on 2012-11-20 21:17  沉沉-_-  阅读(375)  评论(0编辑  收藏  举报

导航