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



         

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


for(i=0; i<7; i++) printf("%02.2X\t", (char) fdc_inp()); printf("\n");

// Выводим содержимое считанного сектора в файл

for(i=0; i<512; i++) fputc(buffer[i],sect); fclose(sect);

// Выключаем мотор

outp(0x3F2, 0xC); }

// Вывод байта в контроллер дисковода

void fdc_out(unsigned char parm) {

_asm { mov dx,3F4h // Порт основного состояния loop_fdc_out:

in al,dx test al,80h // Проверяем готовность jz loop_fdc_out // контроллера

inc dx // Выводим байт в порт данных mov al, parm // контроллера out dx, al } }

// Ввод байта из порта данных контроллера дисковода

int fdc_inp(void) {

_asm { mov dx,3F4h // Порт основного состояния loop_fdc_inp: in al,dx test al,80h // Проверяем готовность jz loop_fdc_inp // контроллера

inc dx // Введенный байт записываем in al, dx // в регистр AX } }

// Ожидание прерывания от контроллера

void int_wait(void) {

// Разрешаем прерывания

_enable(); _asm { mov ax,40h // После прихода прерывания mov es,ax // программа обработки прерывания mov bx,3Eh // устанавливает в 1 старший бит wait_loop: // байта в области данных BIOS mov dl,es:[bx] // по адресу 0040:003E. test dl,80h // Мы ждем, когда этот бит будет jz wait_loop // установлен в 1, а затем // сбрасываем его. and dl,01111111b mov es:[bx],dl } }

// Инициализация канала прямого доступа к памяти

void dma_init(char *buf) {

unsigned long f_adr; unsigned sg, of;

// Вычисляем 24-разрядный адрес буфера для данных

f_adr = ((unsigned long)_psp << 4) + (((unsigned long)buf) & 0xffff);

// Расщепляем адрес на номер страницы // и смещение

sg = (f_adr >> 16) & 0xff; of = f_adr & 0xffff;

// На время программирования контроллера прямого // доступа запрещаем прерывания

_disable();

_asm { mov al,46h // Команда чтения данных от // контроллера НГМД.

out 12,al // Сброс триггера-указателя байта // для работы с 16-разрядными портами. // Следующий байт, выводимый в 16-разрядный // порт будет интерпретироваться // как младший.

out 11,al // Установка режима контроллера ПДП




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