pokeb()
segment:offset 으로 지정된 메모리 영역에 1 byte 를 써 넣는 함수
원형
void pokeb(unsigned segment , unsigned offset , char value);
int peek(unsigned segment , unsigned offset);
offest:segment 인 위치에서 2 byte 읽어 오는 함수
peekb 는 1 byte 읽어온다.
#include<stdio.h>
#include<dos.h>
#include<conio.h>
// 키보드 입력 버퍼에 저장된 키 코드 값 직접 읽어내기
int main()
{
char ch;
pokeb(0, 0x41A, 0x1E); // front 에 버버의 선두 번지를 기록
pokeb(0, 0x41C, 0x1E); // rear 에도 버퍼의 선두 번지를 기록
ch = getch();
printf("scna|ascll\n");
printf("%c = %02x | %02x\n",ch,(unsigned)peekb(0, 0x41F), (unsigned)peekb(0, 0x41E));
return 0;
}
16h 인터럽트 방식으로
#include<stdio.h>
#include<dos.h>
unsigned int my_getch()
{
union REGS r;
r.h.ah = 0x00; // 키보드로부터 한 문자를 읽어 들이는 서비스 00h
int86(0x16, &r, &r); // ah 에 할당한 다음 인터럽트 16h 를 발생
return (r.x.ax); // 반환값 AH = 스캔 코드 , AL = 아스키 코드
}
unsigned int my_kbhit()
{
union REGS r;
char empty;
r.h.ah = 0x01; //1번 서비스 루틴 할당
int86(0x16, &r, &r); //int 16 을 호출 하면 키 값의 존재 유무를 알려줌
empty = (r.x.flags >> 6) & 0x001; // 플래그 레지스터 ZF 가 0 임면 읽어 들일 키가 존재
if (!empty)
{
return 1;// 키 읽음 1 return
}
else
{
return 0;
}
}
int main()
{
unsigned int keycode;
char scan, ascii;
clrscr();
printf("press any key to test .. \n");
while (!my_kbhit()); // 키 입력 까지 대기
keycode = my_getch(); // 입력된 키 값을 읽어 2byte 정수로 저장
scan = keycode >> 8; // 우측으로 8 bit 시프트 하여 스캔 코드 추출
ascii = keycode & 0x00FF; // 상위 바이트 0 으로 만들어 아스키 코드만 추출
printf("scan|ascii");
printf("%c = (%02X | %02X)\n", keycode, scan, ascii);
getch();
return 0;
}
'공부,일 > c언어' 카테고리의 다른 글
터보C 함수 모음 사이트 (0) | 2021.06.18 |
---|---|
간단한 메모리 접근 (0) | 2021.06.18 |
비디오 램 영역을 통한 화면 출력 (0) | 2021.06.16 |
룸 바이오스 데이터 영역 접근 (0) | 2021.06.16 |
터보C 설치 사용 (0) | 2021.06.15 |
댓글