Аппаратное обеспечение IBM PC



         

Порты 0D0h-0DFh - часть 2


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

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

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

#define CYL 0

void main(void); void fdc_out(unsigned char byte); int fdc_inp(void); void int_wait(void); void dma_init(char *);

void main(void) {

unsigned i; long l; char buffer[512]; char status[7], main_status; DPT _far *fdpt; FILE *sect;

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

// Эта программа предназначена только для IBM AT

if(pc_model() != 0xfc) { printf("Эта программа предназначена только для IBM AT\n"); exit(-1); }

// Открываем файл, в который будем записывать // содержимое самого первого сектора на дискете

sect = fopen("!sector.dat","wb+");

// Устанавливаем указатель на таблицу // параметров дискеты

fdpt = get_dpt();

// Включаем мотор дисковода А: // Перед этим разрешаем прерывания

_enable(); outp(0x3F2, 0x1C);

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

for(l=0;l<200000;l++);

// Показываем содержимое регистра основного // состояния контроллера

printf("Мотор включен.\t\t"); printf("Основное состояние: %02.2X\n",inp(0x3F4));

// Перед чтением сектора необходимо установить // головку на нужную дорожку, в нашем случае это // дорожка с номером CYL.

// Выдаем контроллеру команду "Поиск"

fdc_out(0xf);

// Для команды "Поиск" требуется два байта параметров: // номер головки/номер накопителя и номер дорожки. // Мы работаем с нулевой головкой накопителя А:, // поэтому первый параметр равен 0, второй - CYL




Содержание  Назад  Вперед