MS-DOS для программиста


Программа FDDIO


Программа FDDIO (листинг 1.2) использует несколько характерных команд контроллера НГМД.

Эта программа предназначена для работы на компьютере IBM PC/AT. Для того чтобы она правильно работала и на IBM PC/XT, ее надо немного изменить. Изменения касаются программирования контроллера ПДП и программирования скорости передачи контроллера НГМД. Контроллер ПДП компьютера IBM PC/XT использует 4-битовый номер страницы буфера вместо 8-битового. Скорость передачи контроллера НГМД в IBM PC/XT не программируется, поэтому вы должны убрать из программы соответствующие строки.

Программа не проверяет, установлена ли дискета в приемный карман НГМД, поэтому перед запуском не забудьте ее установить.

Листинг 1.2. Файл fddio\fddio.cpp

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <dos.h>

#define CYL 0

typedef struct _DPT _ { unsigned char srt_hut; unsigned char dma_hlt; unsigned char motor_w; unsigned char sec_size; unsigned char eot; unsigned char gap_rw; unsigned char dtl; unsigned char gap_f; unsigned char fill_char; unsigned char hst; unsigned char mot_start; } DPT ;

DPT far *get_dpt(void); void fdc_out(unsigned char byte); int fdc_inp(void); void int_wait(void); void dma_init(void far *); void delay(int cnt);

char buffer[512];

void main(void) { unsigned i; long l; char status[7], main_status; DPT _far *fdpt; FILE *sect;

printf("\n\nРабота с контроллером НГМД" "\n (C)Фролов А., 1995\n");

// Открываем файл, в который будем записывать // содержимое самого первого сектора дискеты sect = fopen ("!sector.dat","wb+");

// Устанавливаем указатель на таблицу // параметров дискеты fdpt = get_dpt();

// Включаем мотор дисковода А: // Перед этим разрешаем прерывания _enable(); outp(0x3F2, 0x1C);

// Выполняем задержку для разгона двигателя delay(18);

// Показываем содержимое регистра основного // состояния контроллера printf("Мотор включен.\t\t"); printf("Основное состояние: %02.2X\n",inp(0x3F4));




- Начало -  - Назад -  - Вперед -