#include<stdio.h>
#include<dos.h>
#define BYTE_PER_SECTOR 512 // tprxjekd 512 byte
int read_sector(int track, int sector, int head, int drive)
{
#define CHAR_COUNT 16 // 한 화면에 16개 씩 출력
unsigned char ch, buffer[BYTE_PER_SECTOR];
int i, j, cf = 0;
union REGS r;
r.h.ah = 0x02; // 13h 인터럽트 서비스의 디스크 섹터 읽기 서비스 번호
r.h.al = 1; // 섹터는 하나만 읽음 최대 128 개 가능
r.h.ch = track; // 트랙이나 실린더 번호 (0-1023)
r.h.cl = sector; // 읽어 들일 섹터 번호
r.h.dh = head; // 헤더 번호
r.h.dl = drive; // 드라이브 번호
r.x.bx = (unsigned)buffer; // 데이터를 읽어 들여 보과할 버퍼 주소
int86(0x13, &r, &r); // 13h 인터럽트 서비스 호출
for ( i = 0; i < BYTE_PER_SECTOR/ CHAR_COUNT; i++)
{
for ( j = 0; j < CHAR_COUNT; j++)
{
printf("%02X ", buffer[i * CHAR_COUNT + j]);
}
printf(" | ");
for (j = 0; j < CHAR_COUNT; j++)
{
ch = buffer[i * CHAR_COUNT + j];
if (ch == '\r' || ch == '\n' || ch == '\t')
{
ch = '.';
}
printf("%c",ch);
}
printf("\n");
}
printf("the number of sectors read = %d\n", r.h.al);
printf("dis status code = %d\n", r.h.ah);
cf = r.x.flags & 0x0001;
if (cf)
{
printf("disk read error\n");
return 1;
}
return 0;
}
int main()
{
int t, s, h, d;
t = 1;
s = 1;
h = 1;
d = 0;
// 1 번 섹터 ,1번 섹터 ,1번 헤드, A 드라이브
printf("read 1 sector from a disk\n");
read_sector(t, s, h, d);
getch();
return 0;
}
'공부,일 > c언어' 카테고리의 다른 글
도스박스 및 터보시 설치 (0) | 2021.06.18 |
---|---|
터보C 함수 모음 사이트 (0) | 2021.06.18 |
간단한 키보드 제어 (0) | 2021.06.17 |
비디오 램 영역을 통한 화면 출력 (0) | 2021.06.16 |
룸 바이오스 데이터 영역 접근 (0) | 2021.06.16 |
댓글