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,所以提示这个错误。