У складі 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 для розробленої програми.
ТЕКСТИ ПРОГРАМ
#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 використовуються для роботи з принтером?