// Author: Martin Lee #include <stdio.h> #include <conio.h> #include <dos.h> #define getvect(n) _dos_getvect(n) #define setvect(n,v) {\ _disable();\ _dos_setvect(n,v);\ _enable();\ } #define HOOKVECTOR 0x7F int sig; void interrupt (*origin_int)(); void interrupt handle_7Fh(void) { sig=1; //_chain_intr( origin_int); // not execute original vector } void hook_int(void) { origin_int = getvect(HOOKVECTOR); setvect (HOOKVECTOR, handle_7Fh); } void restore_int(void) { setvect(HOOKVECTOR,origin_int); } void main() { sig = 0; hook_int(); printf("Before int 7fh, sig = %d\n", sig); __asm int 7Fh printf("After int 7fh, sig = %d\n", sig); restore_int(); }
----------------------執行結果-----------------------------
Before int 7fh, sig = 0
After int 7fh, sig = 1
您好,偶然的機會看到您的 Blog,冒昧想請問一下,是否有經驗在 UEFI 環境下使用 IRQ 中斷 ?
回覆刪除主要是因為想開發一個在 Shell 下的 UART 測試軟體,但對於在 UEFI 環境下使用中斷的作法沒有相關經驗,剛好看到您有類似經驗,故想請教一下 ~ 謝謝
Fox
在shell下理論上只能使用timer中斷,除非事先在Bios打開其他種中斷, 不過我沒實際實驗過
回覆刪除了解,感謝您的說明 ^^
回覆刪除