본문 바로가기
공부,일/c언어

간단한 메모리 접근

by fromnothing1 2021. 6. 18.

 

#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

댓글