/>/>/>/>Міністерство освіти та науки України
КіровоградськийДержавний Технічний університет
Кафедра програмногозабезпечення
Курсова робота
з дисципліни“Програмування на мові ASM-86” на тему:
Завнатажувач шрифтів
Зміст
Вступ
1. Призначення та область застосуванняпрограми
2. Огляд існуючих систем, обгрунтуваннявибору, принципу розробки і методики побудови програм. Постановка задачі по реалізаціїтехнічного завдання
3. Опис і обгрунтування проектних рішень попроектуванню системи
4. Розрахунки та експериментальні матеріали,які підтверджують правильність конструкторських, програмних рішень. Реалізаціяпроекту
5. Інструкція користувача.
6. Основні висновки
Список літератури
Текст програми
Графічні матеріали
Вступ
На початку розвитку комп’ютерної техніки пристроївведення та виведення були досить невибагливі та забезпечували мінімумможливостей. До цих пристроїв належали перш за все монітор та клавіатура.Клавіатура використовувалась для введення інформації шляхом натискання деякихклавіш, які оброблялися відповідним програмним забезпечення, результат цієїобробки можна було побачити на моніторі. Спочатку цього було досить.
З розвитком інформаційних технологій та технічнимпрогресом, процесори почали ставати більш швидшими, монітори та відеоадаптерипочали збільшувати роздільну здатність, все більш програм почаливикористовувати графічний інтерфейс користувача. Комп’ютер став не простоелектронно-обчислювальною машиною, а багатогранним інструментом для вирішеннябагатьох проблем різного характеру, для розваг, для друкарських потреб. Бувстворений принтер.
1. Призначення таобласть використання пристрою, програми
Іноді треба текст надрукувати таким шрифтом, який непіддержує прикладна програма друку. Тоді потрібно створити програму, яка бдозволяла завантажити свій шрифт у принтер, а формат самих шрифтів був бипростим, щоб його можна було редагувати. Тому була створена ця програма. Вонамає невеликі системні вимоги і є простою у використанні.
2. Огляд існуючихпристроїв, систем, програмного забезпечення, обґрунтування вибору принципарозробки та методики побудови пристрою, систем, програмного забезпечення
Є дуже багато програм, які дозволяють друкувати текстчи файл, та більшість з них мають внутрішні шрифти, які не можна редагувати.Тож, коли виникає потреба надрукувати текст таким шрифтом, якого не маєпрограма, то приходиться шукати другу програму, яка б дозволила завантажитипотрібний шрифт.
3. Опис таобґрунтування проектних рішень по проектуванню пристрою системи
Будь-який МП-системі необхідні засоби обміну даними іззовнішніми периферійними пристроями. В залежності від умов конкретногозастосування та характеристик периферійного обладнання передача данихвиконується в паралельному або послідовному форматі. Спільність функційвведення-виведення стимулювала розробку ВІС периферійних адаптерів, що являютьсобою гнучкі програмовані прилади, зорієнтовані виключно на введення-виведення.Зараз такі адаптери стали неодмінними компонентами практично всіхмікропроцесорних сімейств.
Як приклад типового паралельного периферўйногоадаптера, або програмованого паралельного інтерфейсу, нижче розглядаєтьсямікросхема КР580ВВ55А.
Підключення периферійного обладнання виконується черезтри двонаправлених 8-бітних порти (або канали) A, B і C.Інтерфейс із системною шиною здійснюється за допомогою ліній:
D(0-7) — двонаправлена шина даних з трихстабільними каскадами.
A1, A0 — лінії адреси, котрі вибирають внутрішній регістр адаптера, комутований на шинуданих:
00 — порт A,
01 — порт B,
10 — порт C,
11 — регістр управляючого слова.
CS — активнийвхід вибірки кристала; високий рівень забороняє, а низький дозволяє зв'язокприладу із системною шиною даних.
RD — активнийвхід зчитування інформації із адресованого по лініям A0, A1регістру на шину даних.
WR — активнийвхід запису інформації з шини даних в адресований по A0 і A1внутрішній регістр адаптера.
RESET — активнийсигнал для приведення приладу у вихідний стан; при дії сигналу регіструправління обнуляється, а всі три порта налаштовуються в режим введення.
Відмітимо, що зчитування з регістру управління (RD=0,A1=1,A0=1)не допускається, а одночасний запис та зчитування (RD=0,WR=0)призводять до непередбачуваних наслідків.
Програмування адаптера полягає в завантаженніуправляючого слова в регістр управління. Наприклад, управляюче словоконфігурації порту A на введення в режимі 0, порта B навиведення в режимі 1, біта 3 порту C на введення та біта 7 порту C навиведення матиме код 11010101b.
Управляюче слово з нульовим старшим бітом D7=0використовується для встановлення і зкидання будь-якого біту порта C.Біти D(6-4) в цьому випадку не використовуються і містятьнулі, біти D(3-1) містять двійковий номер (адресу) модифікованогобіта порту С, а біт D0 задає встановлення (D0=1) абообнулення (D0=0) адресованого біту.
Адаптер має 3 режима роботи — 0,1,2. Розглянемо кожнийз них.
В режимі 0 (базового введення-виведення) можутьпрацювати всі три порти, причому порт C разділюється на два незалежних4-бітних порти. Всього, таким чином, виходить два 8-бітних і два 4-бітних портипаралельного введення або виведення, що забезпечує 16 можливих конфігураційадаптера в режимі 0. Дані, що виводяться, фіксуються в регістрах-фіксаторах, щовходять до складу всіх портів, а введені дані не запам'ятовуються, тобто вопераціях зчитування вхідного порту на шину даних передається поточний станвхідних ліній.
Режим 0 застосовується при програмно-управляємомувведенні-виведенні з повільнодіючими периферійними пристроями.
Для організації введення-виведення необхіднапідпрограма ініціалізації адаптера і три аналогічні підпрограми введення івиведення для кожного периферійного пристрою. Кожна з них виконує такі дії:введення стану пристрою, перевірку готовності, виведення або введення даних іформування супровджуючого стробу. Якщо пристрій не готовий до обміну,мікропроцесор входить в цикл очікування.
Режим 1 (стробоване введення-виведення) призначенийдля однонаправленої передачі даних, ініційованих перериваннями. Власне передачаслів даних здійснюється через порти B і A, а шість лінійпорту C використовуються для управління обміном. Даний режимнадає користу-вачеві такі можливості: запрограмувати один або два паралельнихпорти з лініями квітування і переривання, кожний з яких може працювати навведення або виведення; при використанні тільки одного порту решту 13 лінійзапрограмувати в режим 0; при встановленні двох портів в режим 1 інші 2 лініївикористати для введення або виведення.
В режимі 2 (двонаправлена шина, що забезпечує введенняі виведення даних) може працювати тільки група A. Порт Aвикористовується для передачі власне 8-бітних даних, а п'ять ліній порту Cвиконують функції квітування і переривань. Загальна дисципліна квітуванняаналогічна режиму, але і окремі тригери дозволу переривань по виводу INTE1(управляється встановленням та зкиданням біту PC6) та по вводуINTE2 (управляється через біт PC4). Дані, щовводяться та виводяться, фіксуються в регістрах-фіксаторах порту.
Принтер є одним iз периферiйнихпристроїв, що приймають данi вiд комп'ютера у паралельному кодi,оскiльки це найбiльш швидкий спосiбобмiну. Iншими прикладами пристоїв, що використовуютьпаралельний адаптер, є аналого-цифровi перетворювачi(АЦП),фотоcчитувачi.
Алгоритм обмiну iнформацiї вкожному конкретному випадку залежить вiд напрямку потокiв iнформацiї.Наприклад, АЦП є джерелом iнформацiї, i тому адаптернеобхiдно налаштувати на введення iнформацiї.Для цього можна використати рiзнi режими роботи:0,1,2, проте найбiльшпростим з них, очевидно, був би режим 0, а надлишково ускладненим — режим 2.Аналогiчна ситуацiя i з принтером, тiлькиiнформацiя в цьому випадку передається узворотньму напрямку — вiд комп'ютера до периферiйного пристрою.
Однак принтер, у свою чергу, виставляє власнiсигнали, iнформуючи комп'ютер про власний стан. Тож доходимовисновку, що для нормальної роботи принтера паралельний адаптер необхiдноналаштувати на виведення iнформацiї, видiливши при томуокремi виводи для введення сигналiв з принтера.
Сигналами обмiну з принтером є:
/STROBE - запит на передачу даних (вiд комп'ютера);
/ASC (acknolege) — пiдтвердження прийому (вiд принтера);
ВUSY - сигнал зайнятостi (вiдпринтера);
PE (paper empty) — папiр вiдсутнiй (вiдпринтера);
SELECT — принтерактивний (вiд принтера);
/ERROR — збiй у роботi (вiд принтера);
Вибiр режиму роботи:
— якщо обираємо режим 0, то обмiнбуде можливий лише за умови програмної емуляцiї системнихсигналiв обмiну(тобто посилаємо данi на порт,виставляємо сигнал сигнал /STROBE i чекаємо на сигнал /ASC).Слiд зауважити, що тривалiсть сигналу /ASC вiдпринтера має тривалiсть 7.5 мкс, i тому при органiзацiїциклу опитування слiд полiчити кiлькiсть тактiв у циклi iзагальну тривалiсть циклу опитування. Якщо вона буде бiльшоювiд тривалостi сигналу, то можливе пропущеннясигналу i, як наслiдок, збiй обмiну.
— в режимi роботи 1 операцiїобмiну (handshaking) виконуються автоматично i є можливiстьорганiзацiї обмiну даними по перериванню. Робота програми зводиться допрограмування адаптера та встановлення у вихiдне (початкове)становище лiнiй, на якi заведено сигнали квiтирування(STROBE-ASC). Слiд додати, що у режимi 1 є двi лiнiї,що можуть бути запрограмованi як на введення, так i на виведення,що дозволяє органiзувати додатково введення iнших сигналiв (уданому випадку — сигналiв BUSY (принтер зайнятий) та РЕ (вiдсутнiстьпаперу).
— в режимi 2 можливо органiзуватидвонаправлений обмiн iнформацiєю з апаратною пiдтримкоюквiтирування, проте при цьому втрачається можливiстьопитування додаткових лiнiй статусу принтера.
Деякі команди принтера:
Таблиці символів
ESC t n 1b 74 n ; Выбор таблицы символов(0,1,48,49)
LQ-100:0-3,48-51(2-download font)
ESC R n 1b 52 n ; Выбормедународного набора знаков
(0-13,64)
ESC 6 1b36 ; Коды 80-9f как печатаемые
ESC 7 1b37 ; Коды 80-9f как управляющие
ESC & 0 nn 1b 26 0 n1 n2 a1 d1 ; Загружает знаки, n1-код первого,
d2… d11 a2... n2-код последнего, a-ширина знака,
старшийбит=0-используется нижняя
игла,1-верхняя.Сетка9х11
1b 26 0 n1 n2 a b cДля загрузки (N)LQсетка 18х12.
d00 d01 d02 d10 d11a-пробелслева от знака, с-справа,
… dc0 dc1 dc2 b-ширина
ESC: 0 n 0 1b 3a 30 n 30 Копирует ПЗУ в ОЗУ, n=0-Roman,1-SS
ESC % n 1b 25 n Выбор знаков: 0-ПЗУ, 1-ОЗУ
ESC I0/1 1b 49 0/1 Выкл/вкл печати кодов 0-1f,80-9f
Графіка
ESC. nn 1b 2e c v h m n1 n2Печатьрастровой графики:
d1... c=0 обычный режим, 1-со сжатием
v(h)=10,203600/v(h) dpi верт(гор)
m=1-24число верт. точек
n=n2*256+n1число гор. точек
сочетание v=10,h=20запрещено
4. Розрахунки таексперементальні матеріали, які підтверджують правильність конструкторських,програмних рішень. Реалізація проекту
Дана програма написана на мові програмування ASM-86. Цей вибір зумовлений тим, що на мовіасемблера також можна отримати цілковитий контроль над комп’ютером.
Fontloadспочатку відкриває принтер, а потім читає файл шрифта в память. Коли він незнаходить файл шрифта, він повідомляє про це та закінчує свою роботу.
В залежності від типу принтера загружає шрифт впринтер, якщо він піддержує, чи друкує рядок в графиці.
5. Інструкція користувача
Для запускупрограми потрібно запустити файл fontload.exe. Потім вказати принтер, у якийслід завантажити шрифт і шлях до файлу зі шрифтом.
Основні висновки
Коли творилася цяпрограма, був вивчений паралельний інтерфейс, його робота, та робота принтера.Програма для завантаження шрифтів у принтер є структурованою і легко читаємою.Кожен програміст може вдосконалити її, чи зробити більш зручною для себе. Вонане має великих системних запросів і дуже проста у використанні.
Використаналітература
1. The Microsoft(R) Guide forAssembly Language and C Programmers
2. ПРОГРАММНО-АППАРАТНАЯОРГАНИЗАЦИЯ КОМПЬЮТЕРА IBM PC. Prentice-Hall Publishing Comp.,1984
3. Фролов А.В., Фролов Г.В.,Операционная система MS-DOS. – М.: “ДИАЛОГ-МИФИ”, 1991. – (Библиотекасистемного программиста)
“Руководство по программированию” П. Нортон,Р. Уилтон 1994
Додатки
Лістинг програми
.model tiny
.stack 200h
.data
Msg1 db 'Выберите пинтер $'
Msg2 db 'Все нормально $'
Msg3 db 'Ошибка откр файла $'
Msg4 db 'выберите шрифтовый файл $'
Msg5 db 'ошибка закр. файла $'
Msg6 db 'Шрифт установлен $'
escposl db 0
Fname db 255,?,255 dup(0)
Handle dw 0
Stroka db 30 DUP(?)
.code
ProgramStart PROC NEAR
mov ax,@data
mov ds,ax
call clear
Call Vibor
call clear
Call Init
mov dx,offset Msg4
Call outputer
mov dx,offset fname
Call inputer
mov bl,byte ptr [fname+1]
xor bh,bh
mov di,offset fname+2
mov [bx+di],byte ptr 0
call clear
Call fopen
call clear
Call esca
Call fclose
Quit:
mov dx,offset Msg6
Call outputer
mov ah,07h
int 21h
mov ah,4ch
int 21h
ProgramStart endp
outputer proc
mov ah,09h
int 21h
ret
outputer endp
inputer proc
mov ah,0ah
int 21h
ret
inputer endp
Vibor PROC NEAR
lea dx,Msg1
Call outputer
mov ah,01h
int 21h
ret
Vibor endp
Init PROC NEAR
mov ah,01h
mov dx,1h
int 17h
ret
Init endp
fopen PROC NEAR
mov ah,3dh
mov al,0h
mov dx,offset fname+2
int 21h
jnc itd
mov ah,09h
lea dx,Msg3
int 21h
jmp Quit
itd: mov [handle],ax
ret
fopen endp
escape PROC NEAR
fclose proc
mov ah,3eh
mov bx,[handle]
int 21h
jnc its_ok2
mov dx,offset Msg5
call outputer
its_ok2:
ret
fclose endp
esca proc
met1: mov ah,3fh
mov bx,[handle]
mov cx,1
mov dx,offset escposl
int 21h
call eof
cmp al,0
jz met2
mov ah,00
mov al,[escposl]
mov dx,1
int 17h
mov cx,5h
loop met1
met2: ret
esca endp
eof proc
mov ah,44h
mov al,06h
mov bx,[handle]
int 21h
ret
eof endp
CLEAR PROC
MOV AX,0600h
MOV BH,07h
MOV CX,0000
MOV DX,184Fh
INT 10h
mov ah,02
mov bh,0
mov dh,1
mov dl,1
int 10h
RET
CLEAR ENDP
end