Скачиваний:
38
Добавлен:
01.05.2014
Размер:
3.82 Кб
Скачать
#include <dos.h>
#include <stdio.h>
#include <malloc.h>
#include <errno.h>
#include "sysp.h"

void main(void);
void main(void) {

	 union REGS reg;
	 struct SREGS segreg;
	 DPB _far *dbp;
	 DPB_FORMAT _far *dbp_f;

	 int sectors, i;

	 printf("\nЏа®Ја ¬¬  г­Ёз⮦Ёв ᮤҐа¦Ё¬®Ґ"
			  "\n20-© ¤®а®¦ЄЁ ¤ЁбЄ  Ђ:."
			  "\n†Ґ« ҐвҐ Їа®¤®«¦Ёвм? (Y,N)\n");

// Ћ¦Ё¤ Ґ¬ ®вўҐв ®ЇҐа в®а  Ё  ­ «Ё§Ёа㥬 ҐЈ®

	 i = getch();
	 if((i != 'y') && (i != 'Y')) exit(-1);

// ‡ Є §лў Ґ¬ Ї ¬пвм ¤«п Ў«®Є  Ї а ¬Ґва®ў гбва®©бвў 

	 dbp = _fmalloc(sizeof(DPB));

// ‡ Є §лў Ґ¬ Ї ¬пвм ¤«п Ў«®Є  Ї а ¬Ґва®ў гбва®©бвў ,
// Є®в®ал© Ўг¤Ґв ЁбЇ®«м§®ў ­ ¤«п д®а¬ вЁа®ў ­Ёп

	 dbp_f = _fmalloc(sizeof(DPB_FORMAT));

	 if(dbp == NULL || dbp_f == NULL) {
		printf("\nЊ «® ®ЇҐа вЁў­®© Ї ¬пвЁ!");
		exit(-1);
	 }

// Џ®«гз Ґ¬ ⥪гйЁҐ Ї а ¬Ґвал ¤ЁбЄ  Ђ:

	 dbp->spec = 0;

// ‚л§лў Ґ¬ Ї®¤дг­ЄжЁо 0Dh ¤«п ўлЇ®«­Ґ­Ёп
// ®ЇҐа жЁЁ з⥭Ёп ⥪гйЁе Ї а ¬Ґва®ў ¤ЁбЄ  Ђ:

	 reg.x.ax = 0x440d;
	 reg.h.bl = 1;
	 reg.x.cx = 0x0860;
	 reg.x.dx =  FP_OFF(dbp);
	 segreg.ds = FP_SEG(dbp);

	 intdosx(&reg, &reg, &segreg);

// Џа®ўҐа塞 д« Ј ЇҐаҐ­®б 

	 if(reg.x.cflag != 0) {
		printf("\nЋиЁЎЄ : %d",reg.x.ax);
		exit(-1);
	 }

// ‡ Ї®«­пҐ¬ Ў«®Є Ї а¬Ґва®ў ¤«п д®а¬ вЁа®ў ­Ёп.
// Ѓ ©в бЇҐжЁ «м­ле дг­ЄжЁ© ᮤҐа¦Ёв §­ зҐ­ЁҐ,
// а ў­®Ґ 5. ќв® ®§­ з Ґв, зв®:
//    - ЁбЇ®«м§гҐвбп ⥪гйЁ© Ў«®Є Ї а ¬Ґва®ў BIOS BPB;
//    - ЁбЇ®«м§говбп ўбҐ Ї®«п ў Ў«®ЄҐ Ї а¬Ґва®ў гбва®©бвў ;
//    - ўбҐ ᥪв®а  ­  ¤®а®¦ЄҐ Ё¬Ґов ®¤Ё­ Є®ўл© а §¬Ґа

	 dbp->spec = 5;

// ‘зЁвлў Ґ¬ Ё§ BPB Є®«ЁзҐбвў® ᥪв®а®ў ­  ¤®а®¦ЄҐ

	 sectors = dbp->bpb.seccnt;

// Џ®¤Ј®в ў«Ёў Ґ¬ в Ў«Ёжг, ®ЇЁблў ойго д®а¬ в ¤®а®¦ЄЁ

// ‡ ЇЁблў Ґ¬ Є®«ЁзҐбвў® ᥪв®а®ў ­  ¤®а®¦ЄҐ

	 dbp->trkcnt = sectors;

// „«п Є ¦¤®Ј® ᥪв®а  ­  ¤®а®¦ЄҐ ў в Ў«Ёжг
// § ЇЁблў Ґ¬ ҐЈ® ­®¬Ґа Ё а §¬Ґа.
// ‡ ¬ҐвмвҐ, зв® § ЇЁблў Ґвбп а §¬Ґа ᥪв®а 
// ў Ў ©в е,   ­Ґ Є®¤ а §¬Ґа , Є Є нв® ¤Ґ« Ґвбп
// ЇаЁ д®а¬ вЁа®ў ­ЁЁ б Ї®¬®ймо дг­ЄжЁЁ 05h ЇаҐалў ­Ёп INT13h

	 for(i = 0; i < sectors; i++) {
		dbp->trk[i].no   = i+1;
		dbp->trk[i].size = 512;
	 }

// “бв ­ ў«Ёў Ґ¬ ­®ўлҐ Ї а ¬Ґвал ¤«п ¤ЁбЄ  Ђ:

	 reg.x.ax = 0x440d;
	 reg.h.bl = 1;
	 reg.x.cx = 0x0840;
	 reg.x.dx =  FP_OFF(dbp);
	 segreg.ds = FP_SEG(dbp);

	 intdosx(&reg, &reg, &segreg);

// Џа®ўҐа塞 д« Ј ЇҐаҐ­®б 

	 if(reg.x.cflag != 0) {
		printf("\nЋиЁЎЄ : %d",reg.x.ax);
		exit(-1);
	 }

// Џ®¤Ј®в ў«Ёў Ґ¬ Ў«®Є Ї а ¬Ґва®ў гбва®©бвў ,
// Є®в®ал© Ўг¤Ґв ЁбЇ®«м§®ў ­ ЇаЁ ўл§®ўҐ
// ®ЇҐа жЁЁ Їа®ўҐаЄЁ ў®§¬®¦­®бвЁ д®а¬ вЁа®ў ­Ёп
// ¤®а®¦ЄЁ

// ‚ Ї®«Ґ бЇҐжЁ «м­ле дг­ЄжЁ© § ЇЁблў Ґ¬ 1,
// нв® ®§­ з Ґв, зв® Ўг¤Ґв ўлЇ®«­пвмбп Їа®ўҐаЄ 
// ў®§¬®¦­®бвЁ ЁбЇ®«м§®ў ­Ёп гЄ § ­­®Ј® д®а¬ в  ¤®а®¦ЄЁ

	 dbp_f->spec = 1;
	 dbp_f->head = 0;
	 dbp_f->track = 20;

	 reg.x.ax = 0x440d;
	 reg.h.bl = 1;
	 reg.x.cx = 0x0842;
	 reg.x.dx =  FP_OFF(dbp_f);
	 segreg.ds = FP_SEG(dbp_f);

	 intdosx(&reg, &reg, &segreg);

// Џа®ўҐа塞 д« Ј ЇҐаҐ­®б 

	 if(reg.x.cflag != 0) {
		printf("\nЋиЁЎЄ : %d",reg.x.ax);
		exit(-1);
	 }

// …б«Ё гЄ § ­­л© д®а¬ в ¤®а®¦ЄЁ Ї®¤¤Ґа¦Ёў Ґвбп,
// Ї®«Ґ бЇҐжЁ «м­ле дг­ЄжЁ© Ўг¤Ґв ᮤҐа¦ вм 0.
// Џа®ўҐа塞 нв®.

	 if(dbp_f->spec != 0) {
		printf("\n”®а¬ в ¤®а®¦ЄЁ ­Ґ Ї®¤¤Ґа¦Ёў Ґвбп!");
		exit(-1);
	 }

// ‡ Ї®«­пҐ¬ Ў«®Є Ї а ¬Ґва®ў ¤«п ўлЇ®«­Ґ­Ёп
// ®ЇҐа жЁЁ д®а¬ вЁа®ў ­Ёп

	 dbp_f->spec = 0;
	 dbp_f->head = 0;
	 dbp_f->track = 20;

// ”®а¬ вЁа㥬 ¤®а®¦Єг б ­®¬Ґа®¬ 20, Ј®«®ўЄ  0

	 reg.x.ax = 0x440d;
	 reg.h.bl = 1;
	 reg.x.cx = 0x0842;
	 reg.x.dx =  FP_OFF(dbp_f);
	 segreg.ds = FP_SEG(dbp_f);

	 intdosx(&reg, &reg, &segreg);

// Џа®ўҐа塞 д« Ј ЇҐаҐ­®б 

	 if(reg.x.cflag != 0) {
		printf("\nЋиЁЎЄ : %d",reg.x.ax);
		exit(-1);
	 }

// Ћбў®Ў®¦¤ Ґ¬ ЎгдҐа 

	 _ffree(dbp);
	 _ffree(dbp_f);

	 exit(0);
}

Соседние файлы в папке GENERIC