Засоби BIOS для роботи з принтером

У складі BIOS для роботи з принтером є три функції переривання 17h.

Функція 00h призначена для друку одного символу.

Вхід: AH = 00h

 


DX – номер порту: 01h – LPT1, 02h – LPT2, 03h – LPT3

AL – ASCII – код символу для друку

Вихід: AH – стан принтера (таблиця 3).

Викликавши функцію 00h, програма повинна перевірити біти байта стану та впевнитись в тому, що вивід бата відбувся без помилок. Формат байта стану приведено в таблиці 3 і він відрізняється лише тим, що наявність одиниці в молодшому біті свідчить про надто великий тайм-аут.

Функція 01h призначена для ініціалізації принтера.

Вхід: AH = 01h

DX – номер порту: 01h – LPT1, 02h – LPT2, 03h – LPT3

AL – байт керування режимом (таблиця 2)

Вихід: AH – стан принтера (таблиця 3).

Ця функція здійснює апаратне скидання принтера.

Слово стану принтера можн отримати за допомогою функції 02h:

Вхід: AH = 02h

DX – номер порту: 01h – LPT1, 02h – LPT2, 03h – LPT3

Вихід: AH – стан принтера (таблиця 3).

Цю функцію зручно використовувати перед початком друку для визначення готовності принтера до роботи.

 

 

МЕТОДИЧНІ ВКАЗІВКИ

 

 

В даній роботі пропонується дослідити і протестувати програму, яка працює з паралельним портом.

Для виконання роботи необхідні грунтовні знання архітектури та принципів функціонування паралельного інтерфейса принтера, а також знання призначення

та способів використання функцій 00h, 01h, 02h переривання 17h BIOS.

 

 

ЛІТЕРАТУРА

 

 

5. Гук М. Аппаратные средства IBM PC. Энциклопедия. – СПб.: “Издательс-тво

Питер”, 1999. – 816 с.

6. Гуржій А. М., Коряк С. Ф., Самсонов В. В., Скляров О. Я. Архітектура, принципи функціонування і керування ресурсами IBM PC: Навч. посібник. Харків: ТОВ. “Компанія СМІТ”, 2003. – 512 с.

7. Зубков С. В. Ассемблер для DOS, Windows и Unix. – М.: ДМК, 1999. – 640 с.

8. Фролов А. В., Фролов Г. В. Аппаратное обеспечение персонального ком-

пьютера. – М.: ДИАЛОГ МИФИ, 1997. – 304 с.

 

 

ЗАВДАННЯ

 

 

1. Дослідити програму print, яка формує масив символів, що вводяться з клавіатури, аналізує стан принтера, передає послідовність символів у буфер принтера для їх роздрукування.

2. Нарисувати схему алгоритму програми.

 


3. На вінчестері створити каталог PRINT.

4. За допомогою редактора середовища програмування Borland C++ 3.1

створити символьний файл тексту програми та записати його в каталог PRINT.

5. Виконати налагодження програми та запустити її на виконання кілька разів з рзними кількостями символів, що виводяться.

6. Зробити висновки.

7. Написати аналогічну програму, але тільки з використанням функцій

BIOS.

8. Повторити для нової програми пункти 2 – 6.

9. Розробити програму ідентифікації та виводу на екран усіх діагностичних повідомлень про стан принтера.

10. Виконати пункти 2 – 6 для розробленої програми.

 

 

ТЕКСТИ ПРОГРАМ

 

 

// print

#include <dos.h>

#include <alloc.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

 

extern int myasm20 (unsigned char*);

 

void main (void)

{

unsigned char *str;

unsigned char PrintStatus;

 

char c;

// виділення пам‟яті для рядка

str = malloc (100);

 

puts (“Введіть рядок символів: ”);

gets (str);

 

Rep:

PrintStatus = inp (0x379);

if ((PrintStatus & 0x08) == 0) {

printf (“Помилка принтера\n”);

printf (“Завершити програму (y/n)?”);

 

c = getch ();

if ((c == „y‟) || (c == „n‟)) exit (0);

goto Rep;

}

 

myasm20 (str);

// передача на принтер символу переводу рядка

fprintf (stdprn, “\n”);

 


}

 

// Модуль виводу мовою асемблера

. MODEL SMALL

. CODE

 

PUBLIC _myasm20

 

_myasm20 PROC NEAR

PUSH BP

MOV BP, SP

MOV BX, [BP+4]

// в регістр BX передається адреса рядка із стека

POP BP

SUB AX, AX

// в регістр ES заноситься нуль

MOV ES, AX

// в регістр DX заноситься номер порту вихідного регістра

MOV DX, ES:[0408h] NEXTBYTE:

// в регістр AL передається черговий символ (адреса – в BX)

MOV AL, [BX]

// якщо цей символ – нуль, перейти на мітку EXIT CMP AL, 0

JE EXIT

// символ пересилається в порт

OUT DX, AL OUT DX, AL

OUT DX, AL

// в регістрі DX номер порту регістра керування

INC DX

INC DX

// в регістрі AL код для стробуючого сигналу

MOV AL, 0Dh

// видати в порт стробуючий сигнал

OUT DX, AL

// затримка

NOP

NOP NOP

// в регістрі AL код відміни стробуючого сигналу

MOV AL, 0Ch

// відмініти стробуючий сигнал

OUT DX, AL

// в регістрі DX номер порту регістра статусу

DEC DX


WR:


 

// читання стану регістра статусу

IN AL, DX

// очікуємо стан готовності принтера


TEST AL, 80h
JZ WR  

 

 


// вибір наступного символу в рядку

INC BX DEC DX

JMP NEXTBYTE

EXIT:

// повернення в модуль main () RET

_myasm20 ENDP

END

 

КОНТРОЛЬНІ ЗАПИТАННЯ

 

 

1. Призначення та характеристики інтерфейса Centronics.

2. Назвіть призначення сигналів, за допомогою яких PC обмнюється з прин-

тером.

3. Назвіть призначення портів інтерфейса Centronics.

4. Які програмні засоби BIOS використовуються для роботи з принтером?

 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: