まず、ビンテージ コンピューター グループのプログラムを作成します。私が書いているのは特に MS-DOS 向けであり、Windows 向けではありません。私の現在のプログラムは、8086 ラインではなく、より新しいシステム用のものであるため、IRQ 8 を使用する予定でした。これにより、割り込みレートを 2/秒から 8192/秒 (2、4、8、16、等...)
何らかの理由で、新しい古いシステムでのみ (奇妙に聞こえますが)、動作していないようです。エミュレーションと私がアクセスできる 386 システムでは問題なく動作しますが、私が所有する P3 システム (GA-6BXC MB w/P3 800 CPU) では動作しません。
コード
割り込みの設定
disable();
oldrtc = getvect(0x70); //Reads the vector for IRQ 8
settvect(0x70,countdown); //Sets the vector for
outportb(0x70,0x8a);
y = inportb(0x71) & 0xf0;
outportb(0x70,0x8a);
outportb(0x71,y | _MRATE_); //Adjustable value, set for 64 interrupts per second
outportb(0x70,0x8b);
y = inportb(0x71);
outportb(0x70,0x8b);
outportb(0x71,y | 0x40);
enable();
割り込みの最後に
outportb(0x70,0x0c);
inportb(0x71); //Reading the C register resets the interrupt
outportb(0xa0,0x20); //Resets the PIC (turns interrupts back on)
outportb(0x20,0x20); //There are 2 PICs on AT machines and later
プログラムを終了するとき
disable();
outportb(0x70,0x8b);
y = inportb(0x71);
outportb(0x70,0x8b);
outportb(0x71,y & 0xbf);
setvect(0x70,oldrtc);
enable();
コードに問題の原因となるものは何もありません。しかし、それは意味がないようです。私はその情報を完全に信頼しているわけではありませんが、MSD は IRQ 8 を RTC カウンターとして「報告」し、それが存在し、正常に動作していると述べています。後のシステムがベクトルを移動した可能性はありますか? IRQ 8 はベクトル 0x70 であることがわかりますが、私の Pentium III システムでは割り込みがトリガーされません。ベクトルが変更されたかどうかを確認する方法はありますか?