[완료 ] XP에서는 전용 인터럽트 처리기를 만들수 없습니가?
IBM PC의 Keyboard Hardware Interrupt Vector인 INT 9 Vector를 재 정의하여
Keyboard 입력을 받고 (port 64h와 port 60h를 읽어서 키 값을 읽고 port 20h
를 조작하여 PIC에 Interrupt 종료를 알려주는 방법까지 문제에 나와 있습니다)
X 키를 제외한 키 입력에 대해서는 입력한 문자를 붉은색 반짝이 속성으로 5초간
출력하고 X키를 입력하면 종료하라고 적혀 있군요. Interrupt Vector 재정의와
복원 방법 역시 문제에 나와 있습니다.
(종료 전에 Interrupt Vector를 복원하지
않으면 키보드를 입력했을 때 DOS가 폭주할 수 있습니다)
문자 출력은 INT 10h를 사용하거나 VGA의 Video RAM Mapping 영역에 직접 데이터
를 입력하면 될 듯하고 DOS로 종료하는 것은 INT 21h로 해결할 수 있겠죠.
=============================================================
XP에서는 전용 인터럽트 처리기를 만들수 없습니가?
밑에 답글저럼 저런걸 구현하라고 하는데
이 장에서 소개한 인터럽트 처리기는 컴퓨터가 MS-DOS 모드로 부팅하였을 경우에만 동작한다.
윈도우 95와 98에서도 가능하지만 윈도 NT,2000 혹은 XP에서는 불가능하다. 최신의 운영체제는
시스템의 안정성과 보안을 향상시키기 위하여, 응용 프로그램으로부터 시스템 하드웨어를 감춘다.
운영체제가 동시에 수행중인 두개의 프로그램으로 하여금 동일한 하드웨어 장치에 대한 내부
설정을 수정하도록 허용한다면, 결과를 예측할 수 없게 된다.
^^;
kebyard filter driver를 작성하시면 됩니다.
DDK나 WDK에 예제 소스도 있고 구글에서 검색하시면 다양한 자료도 나오니
참조하시기 바랍니다.
윈도우 자체의 Device Driver를 제작하는건 범위가 아닐테고요.
물론 Device Driver를 제작하시면 됩니다만... 그건 원래 문제가 요구하는 사항이 아니죠.
Device Driver를 제작할 필요도 없고요.
어디서 저런 글을 보셨는지 모르겠습니다만 Windows 2000, XP의 DOS 프롬프트를 사용하셔도
됩니다. (NT는 모르겠습니다. NT 4.0 이하에서는 VM86 에뮬레이션이 잘 안되었던 것으로 기
억합니다.)
그 이유는 2000, XP의 하드웨어 인터럽트를 DOS 프롬프트 응용프로그램이 VM86 모드에서
하드웨어 인터럽트를 에뮬레이션 해 주기 때문입니다. (DPMI 같은 것을 구현하기 위해서도
필요한 조건입니다)
제가 테스트해 본 바로는 일반 BIOS 인터럽트 및 표준 DOS 인터럽트 호출, Keyboard, Mouse
하드웨어 인터럽트, Video RAM direct access 등이 전부 가능했습니다. (타이머를 분주시킬
경우 윈도우 타이머의 한계로 약 1ms 이내의 간격을 갖는 Tick을 만들 수 없던 문제가 있기
는 했습니다.)
DOS 프롬프트 상에서도 실행할 수 있는 예제이니 제대로 작성했다면 잘 동작할 겁니다.
감사함니다
복받으세요^^
댓글 달기