Программатор ПЗУ (программный интерфейс)

СОДЕРЖАНИЕ

ОСНОВНЫЕ НАПРАВЛЕНИЯ ПРИМЕНЕНИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ В УЧЕБНОМ ПРОЦЕССЕ 4
1. ОБЩИЙ РАЗДЕЛ  10
  1.1. ХАРАКТЕРИСТИКИ АППАРТНЫХ СРЕДСТВ ВЫчИСЛИТЕЛЬНОЙ ТЕХНИКИ      10
  1.2. ХАРАКТЕРИСТИКИ ПРОГРАММНЫХ СРЕДСТВ ВЫчИСЛИТЕЛЬНОЙ ТЕХНИКИ    16
  1.3. ПОСТАНОВКА ЗАДАчИ     17
2. СПЕЦИАЛЬНЫЙ РАЗДЕЛ  18
  2.1. РАЗРАБОТКА АЛГОРИТМА ПРОГРАММНОГО ОБЕСПЕчЕНИя     18
  2.2. РАЗРАБОТКА УНИВЕРСАЛЬНОЙ УПРАВЛяЮЩЕЙ ПРОГРАММЫ    19
  2.3. РАЗРАБОТКА ПРОГРАММНОГО ИНТЕРФЕЙСА     22
  2.4. ОПИСАНИЕ  ПРОЦЕССА ОТЛАДКИ 24
  2.5. РАЗРАБОТКА ЭКСПЛУАТАЦИОННО-МЕТОДИчЕСКОЙ ДОКУМЕНТАЦИИ   24
  2.6. РЕЗУЛЬТАТЫ ИСПЫТАНИЙ  25
3. ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКИЙ РАЗДЕЛ  27
  3.1. ОЦЕНКА ИЗДЕРЖЕК НА РАЗРАБОТКУ ПРОГРАММНОГО ИНТЕРФЕЙСА ДЛя
  ПРОГРАММАТОРА ПЗУ    27
  3.2. АНАЛИЗ ЭФФЕКТИВНОСТИ ВНЕДРЕНИя РАЗРАБОТАННОЙ ПРОГРАММЫ В  УчЕБНЫЙ
  ПРОЦЕСС   29
4. МЕРОПРИЯТИЯ ПО ОХРАНЕ ТРУДА. БЕЗОПАСНОСТЬ ТРУДА ПРИ ОБСЛУЖИВАНИИ
ПРОГРАММАТОРА    31
  4.1 ТРЕБОВАНИя БЕЗОПАСНОСТИ К ТЕХНИчЕСКИМ СРЕДСТВАМ ПЭВМ    31
  4.2. ТРЕБОВАНИя БЕЗОПАСНОСТИ К МИКРОКЛИМАТУ В УчЕБНЫХ ЛАБОРАТОРИяХ      32
  4.3. МЕРЫ БЕЗОПАСНОСТИ ПРИ СЕРВИСНОМ ОБСЛУЖИВАНИИ ПРОГРАММАТОРА.  33
ПРИЛОЖЕНИЕ 1. ПРОГРАММНЫЙ
  ИНТЕРФЕЙС............................................................34

  ОСНОВНЫЕ НАПРАВЛЕНИЯ ПРИМЕНЕНИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ В УЧЕБНОМ ПРОЦЕССЕ


       Стремительное внедрение  в  сферу  материального  производства  новой
информационной технологии, широкая электронизация всех машин и  оборудования
требует   сегодня   от    многомиллионной    армии    специалистов    знания
микропроцессорных средств и систем, владения компьютерной техникой.
       В настоящий период время внедрения научных открытий,  освоение  новых
технологий  в  ведущих  отраслях  промышленности  становится  соизмеримым  с
продолжительностью  учебы  в  вузе,  техникуме.  Это  требует  поиска  таких
методов  и  средств  обучения,  которые  сократили   бы   расстояние   между
достижениями науки, производственной практикой  и  содержанием  образования.
Изменяются в значительной степени и цели обучения.  Сегодня  профессионально
важным  для  специалиста  является  умение   самостоятельно   и   непрерывно
пополнять,   обновлять   знания,   вести   творческий   поиск,   способность
ответственно принимать оригинальные решения.
       Новые задачи образования требуют современной технической базы,  и,  в
первую  очередь,  широкого  внедрения  компьютеров   в   учебном   процессе.
Реализация  учебного  процесса,  обеспечивающего   высокую   образовательную
активность учащихся, самостоятельность их работы, индивидуализацию  обучения
в настоящее время невозможна без широкого применения вычислительной  техники
и дидактических материалов, обеспечивающих реальность такого использования.
       Успехи в деле компьютеризации учебного  процесса  определяются  тремя
существенными факторами:
       наличием вычислительной техники;
       производством и распределением программного обеспечения;
       готовностью   преподавателей   методически   грамотно    использовать
вычислительную технику.
       Определенный опыт освоения и использования электронной вычислительной
техники в учебно-воспитательном  процессе  накоплен  в  Винницком  техникуме
электронных приборов [7].
       Начало освоения электронно-вычислительных  машин  (ЭВМ)  относится  к
1977-78 году, когда  вычислительный  центр  техникума,  оснащенный  машинами
«Электроника-1004»,   занимался   статистической   обработкой    результатов
успеваемости  и  посещаемости.   Это   позволило   руководителям   техникума
ежедневно получать оперативную информацию о состоянии дел в  каждом  учебной
группе.
       В 1980-1981 году были сделаны первые шаги по  использованию  ЭВМ  для
решения творческих задач в период  курсового  и  дипломного  проектирования.
Начало этой работы поставило перед педагогическим коллективом техникума  ряд
проблем:
       необходимость психологической подготовки преподавателей  к  внедрению
вычислительной техники;
       необходимость разработки методик инженерных расчетов, ориентированных
на применение ЭВМ;
       пересмотр методики проведения занятий;
       отсутствие  информационно-методического  и  программного  обеспечения
вычислительной техники.
       Возникшие проблемы решались в техникуме постепенно,  сначала  работой
по  внедрению  вычислительной  техники  занялись  преподаватели  специальных
дисциплин, хорошо владеющие методикой обучения, с одной стороны,  и  знающие
основы вычислительной техники с другой. Это позволило  уже  в  1980-81  году
разработать и внедрить в учебный процесс пакет  программ  «Расчет  элементов
интегральных микросхем». Выполненная учащимися двух учебных групп  расчетная
часть курсового проекта показала высокую эффективность применения техники  в
курсовом проектировании. Проведенные в том же году открытые уроки  позволили
на  практике  показать   большинству   членов   коллектива   возможность   и
эффективность использования вычислительной техники в учебном  процессе.  Был
преодолен психологический  барьер.  В  работу  по  внедрению  вычислительной
техники стали подключаться все новые и новые преподаватели. С  1983-84  года
на ЭВМ проводятся расчеты функциональных узлов  по  предмету  «Радиоприемные
устройства», трудоемкие расчеты надежности РЭА, экономические расчеты и  др.
Только за 4 года более 200 учащихся выполнили курсовые проекты  с  расчетами
на ЭВМ. Высокая точность расчетов, производительность позволили  высвободить
у них время на творческую, содержательную часть проекта.
       Общие  методические  принципы  проведения  занятий  при  помощи  ЭВМ,
сформулированные  в  техникуме  на   основе   четырехлетнего   опыта,   были
перенесены  на  другие  предметы  общеобразовательного,  общетехнического  и
специального  цикла.  Этому  способствовал  организованный   в   1985   году
постоянно действующий  семинар  для  преподавателей  по  программированию  и
применению вычислительной техники  в  учебном  процессе.  Для  учащихся  был
введен факультативный курс «Применение микропроцессорных  средств  и  микро-
ЭВМ».
       1984-85   год   стал   годом   массового   освоения   программируемых
микрокалькуляторов,   которые   широко   использовались    при    выполнении
лабораторных   и   практических   работ   по   ТОЭ,   физике,    математике,
общетехнических  и  специальных  дисциплин.  Создание  прикладных  расчетных
программ для программируемых микрокалькуляторов - неотъемлемая часть научно-
методической  работы  в   техникуме.   Более   30%   преподавателей   прошли
переподготовку на факультетах повышения  квалификации  при  ведущих  учебных
заведенях минвуза СССР и отраслевого министерства [7].
       Внедрение вычислительной техники в  нашем  учебном  заведении  -  это
планомерный, постоянно  развивающийся  процесс.  Опыт  подтвердил  известное
положение о том, что совершенствованию методики и программ нет предела.
       В 1982 году положено начало использованию  вычислительной  техники  в
научно-техническом  творчестве.   Так   при   выполнении   хоз.   договорных
экспериментально-конструктивных    работ    учащиеся    готовят    программы
трассировки печатных плат для систем автоматического проектирования  (САПР),
разрабатывают и отлаживают программы сверловки плат для станков  с  числовым
программным управлением (ЧПУ), проводят типовые расчеты,  учет  материальных
ценностей,  документооборот  по  ЭКВ  ведется  с  1987   года   при   помощи
автоматизированной информационной системы, созданной на базе СУБД-микро  для
ДВК.
       Постоянная работа учащихся с ЭКБ с вычислительной  техникой  приносит
свои плоды, сегодняшние старшекурсники, работающие в ЭКВ,  свободно  владеют
микрокомпьютерами  на   уровне   пользователя.   Можно   предположить,   что
результаты подготовки по вычислительной технике  значительно  возрастут  при
организации  непрерывного  процесса  формирования   профессионально   важных
качеств пользователя ЭВМ у  каждого  учащегося,  начиная  с  изучения  основ
информатики  и  вычислительной  техники  в  общетехнических  и   специальных
дисциплинах и  заканчивая  использованием  ее  в  различных  учебных  формах
научно-технического творчества.
       Программирование - один из интересных видов творческой  деятельности.
Важная  организационная  форма  научно-технического  творчества   -   кружок
программирования.  Занятия  в  нем  привлекают  многих   учащихся   и   дают
практические знания по программированию и  пользованию  ЭВМ.  Он  становится
базой для подготовки и отладке многих прикладных программ.
       Автоматизация  процесса  обработки  информации   -   одна   из   сфер
эффективного применения  вычислительной  техники.  Рациональная  организация
информационных  ресурсов  в  техникуме  -  задача,   которая   стоит   перед
коллективом. С этой  целью  в  ЭКБ  техникума  ведутся  работы  по  созданию
автоматизированных     информационно-поисковых     систем     на      основе
микрокомпьютеров.
       В 1987 году фрагмент информационно-поисковой системы «Банк передового
педагогического опыта» внедрен в опытную эксплуатацию совместно  с  кафедрой
педагогики московского  областного  пединститута  им  Н.К.  Крупской.  Пакет
программ информационно - поисковой  системы  внедряется  при  изучении  темы
«Информационное обеспечение  профессиональной  деятельности  специалиста»  в
курсе  «основы  научно  -  технического  творчества».  Работа   учащихся   с
информационными фондами на машинах  носителях  -  важный  этап  формирования
культуры информационной деятельности  как  преподавателей,  так  и  учащихся
[7].
    В 1988 году в техникуме создана хорошая учебно-материальная база:
       класс диалоговых вычислительных комплексов;
       2 класса компьютеров;
       более 300 программируемых калькуляторов
       Широкое применение  элементов  микропроцессорной  техники  в  научно-
техническом    творчестве    позволяет     производить     разработки     по
совершенствованию   научно-технических   средств   вычислительной   техники,
созданию учебно-лабораторного оборудования для изучения работы  микро-ЭВМ  и
программного управления технологическим оборудованием.
       Так в 1985 году был создан тренажер учебной  микро-ЭВМ  «Электроника-
ВТЭП микро». На тематической выставке «Инженерно тематическое  оборудование»
ВДНХ СССР в 1986 году учебная микро-ЭВМ отмечена серебряной медалью.  Десять
таких тренажеров внедрены в учебный процесс в 1986 году [7].
       В  1986  году  в  техникуме   создана   локальная   сеть   диалоговых
вычислительных машин.  Ее  внедрение  существенно  расширило  диалектические
возможности применения ДВК-1 в условиях группового  обучения.  В  1987  году
ЭКБ техникума создает локальные сети по заказу ряда техникумов отрасли.
       Призером выставки «Итоги 11-го всесоюзного смотра-конкурса на  лучшую
экспериментально-конструктивную работу учащихся ССУЗ», проводимой в феврале-
марте  1987  года  на  ВДНХ  СССР,  стал  специализированный  микрокомпьютер
«Спектр», созданный в ЭКБ для управления технологическим оборудованием.
       Медалями ВДНХ отмечены пакеты программ «Расчет элементов интегральных
схем»   и   «Определение   профессиональной   надежности   личности».    Три
преподавателя техникума являются членами методической комиссии минвуза  СССР
по вычислительной технике и научно-техническому творчеству.
       Опытом работы  техникум  делится  на  всесоюзных,  республиканских  и
областных совещаниях, семинарах, проводимых минвузом СССР.
       Масштабность задач, связанных с  внедрением  вычислительной  техники,
выдвигает на  повестку  дня  вопрос  о  целесообразности  создания  на  базе
ведущих техникумов ряда лабораторий, занимающихся разработкой информационно-
методического  и  программного  обеспечения  по  каждому  из  направлений  с
последующим внедрением во все учебные заведения отрасли и  системы  среднего
специального   образования.   Это   может   стать   одним   из   направлений
экспериментально-конструкторской  работы,  проводимой  по  хоздоговорам  при
условии  укрепления  ЭКБ  специалистами  по  системотехнике   и   системному
программированию.

                               1. ОБЩИЙ РАЗДЕЛ



       1.1. Характеристики аппартных средств вычислительной техники


       Когда   произносят    слова    «персональный    компьютер»,    обычно
подразумевается не что иное, как компьютер типа IBM PC. Именно  американская
компания  IBM  в  августе  1981  года  объявила  о  выпуске  самого  первого
компьютера, получившего название Personal Computer, или просто PC. [6]
       Впрочем, еще до создания IBM PC множеством  разных  фирм  выпускались
компьютеры, которые было бы  вполне  уместно  называть  персональными.  Даже
весьма  далекая  от  электроники  фирма  Coca  -  Cola  пыталась   выпускать
собственную модель персонального компьютера!
       Несовместимость  многочисленных  моделей  компьютеров  была   главным
препятствием для создания совершенных программ универсального применения.
       Когда  IBM  вышла  на  рынок   настольных   компьютеров,   казавшийся
сомнительным  и  рискованным,  разнобой   среди   персональных   компьютеров
довольно быстро пошел на убыль. Маленький персональный компьютер IBM  PC  на
процессоре 8088 фирмы Intel оказался тем долгожданным стандартом, который  с
радостью поддержали  многочисленные  программисты  и  фирмы  -  изготовители
прикладного  программного   обеспечения:   наконец-то   появился   компьютер
солидной фирмы, для которого можно было разрабатывать  и  успешно  продавать
большими  тиражами   достаточно   сложные,   совершенные   и   универсальные
программы. По сути дела, компьютер IBM PC  создал  не  только  стабильный  и
обширный рынок персональных компьютеров, но  и  огромный  рынок  прикладного
программного  обеспечения,  на  котором  за  последние  полтора  десятилетия
разбогатело множество венчурных фирм [6].
       Вот яркий тому пример. Компьютер IBM PC почти с самого начала работал
под управлением дисковой операционной системы DOS, которую  разработала  для
IBM  маленькая  и  никому  тогда  не  известная  фирма  Microsoft.   Сегодня
Microsoft - бесспорный флагман индустрии программного обеспечения,  одна  из
богатейших фирм мира, выпускающая не только операционные средства  MS-DOS  и
Windows для управления компьютерами, но и  различные  прикладные  пакеты.  А
основатель и руководитель Microsoft Билл Гейтс, несмотря на молодость,  один
из самых богатых людей.
       Разумеется, персоналка IBM PC оказалась только первым шагом в  верном
направлении.  Затем  фирма  IBM  выпустила  множество  моделей  персональных
компьютеров XT, AT, PC/1 и PC/2 на различных процессорах Intel 8086,  80286,
80386, 80486. Все эти компьютеры предназначены для  работы  под  управлением
операционной системы DOS или в графической среде Windows.
       Множество других фирм немедленно принялись подражать IBM и  развивать
ее  успех,  выпуская   свои   собственные   модели   персоналок,   полностью
совместимые с IBM PC, либо выпуская  различное  периферийное  дополнительное
оборудование  для  IBM  PC.  Ведь  одной   из   замечательных   особенностей
персоналки IBM PC была так называемая  «открытая  архитектура»,  позволявшая
даже  неспециалистам  легко  и  просто  изменять  устройство  и  технические
возможности   своего   компьютера.   Для   этого   часто   достаточно   было
воспользоваться  разъемами  последовательного  или   параллельного   портов,
добавить на пустующих  панельках  несколько  микросхем  памяти,  вставить  в
плату  сопроцессор,  переставить  в  другое   положение   DIP-переключатели,
поменять с помощью отвертки блоки, воткнуть или вынуть плату  расширения  из
слота системной шины. В результате буквально за несколько минут всякий  мог,
не располагая сколько - нибудь глубокими знаниями  и  сложным  инструментом,
построить из готовых компонентов совершенно новую персональную  компьютерную
систему с необходимыми техническими параметрами [6].

       1.1.1. Основные части компьютера

       Вообще-то,  самый  первый  персональный  компьютер  создали  инженеры
американской фирмы Xerox. Именно той  самой  фирмы,  которая  подарила  миру
копировальный  аппарат,  известный  у  нас  под   именем   «ксерокс».   Это,
оставшееся   почти   незамеченным,   историческое   событие   произошло    в
исследовательском центре фирмы Xerox PARC (Palo - Alto  Research  Center)  в
Пало-Альто, в Калифорнии. Уже  на  первых  персоналках  Xerox  двадцать  лет
назад  применялся  графический  интерфейс,  очень  похожий  на   современную
графическую среду Windows [6].
       С тех пор прошло немало времени,  и  сейчас  диапазон  конструктивных
решений персональных компьютеров очень широк. Но несмотря на  конструктивные
внешние различия (от напольных башен до карманных моделей),  все  персоналки
очень похожи друг на друга. Другими  словами,  если  «анатомия»  компьютеров
различна, то их «физиология» практически идентична.
       Современный  персональный  компьютер  включает  следующие  устройства
[1]:
       системный блок, выполняющий управление компьютером, вычисления;
       клавиатуру, позволяющую вводить символы в компьютер;
       монитор (дисплей) для изображения текстовой и графической информации;
       накопители  (дисководы)  на  гибких  магнитных   дисках   (дискетах),
используемые для чтения и записи информации (для транспортировки);
       накопитель на жестком магнитном  диске  (винчестер),  предназначенный
для записи и чтения информации (стационарный);
К системному блоку компьютера IBM PC можно подключать  различные  устройства
ввода-вывода информации, расширяя тем самым его функциональные  возможности.
Многие  устройства  подсоединяются  через  специальные   гнезда   (разъемы),
находящиеся обычно на  задней  панели  системного  блока  компьютера.  Кроме
монитора и клавиатуры, такими устройствами являются:
       принтер - для вывода на печать текстовой и графической информации;
       мышь - устройство, облегчающее ввод информации в компьютер;
       джойстик - манипулятор в виде укрепленной на шарнире ручки с кнопкой,
употребляется в основном для компьютерных игр;
       плоттер - подключается к компьютеру  для  вывода  рисунков  и  другой
графической информации на бумагу;
       графопостроитель - подключается для вывода чертежей на бумагу;
       сканер - устройство для считывания графической и текстовой информации
в компьютер. Сканеры могут распознавать шрифты букв,  что  дает  возможность
быстро вводить напечатанный (а иногда и рукописный) текст в компьютер;
       стример  -  устройство  для  быстрого  сохранения  всей   информации,
находящейся на жестком диске. Стример записывает  информацию  на  кассеты  с
магнитной лентой. Обыкновенная емкость стримера 60 Мбайт;
       CD привод - устройства для хранения информации больших объемов;
       сетевой адаптер - дает возможность подключать компьютер  в  локальную
сеть. При этом пользователь может получать доступ к  данным,  находящимся  в
других компьютерах.
       1.1.2. Оперативная память
       Объем доступной оперативной памяти -  один  из  важнейших  параметров
любого  компьютера.  Оперативная   память   или   оперативное   запоминающее
устройство (ОЗУ  или  RAM)  представляет  собой  совокупность  микросхем  на
системной плате,  способных  накапливать  и  временно  хранить  программы  и
обрабатываемые данные.  Эта  информация  по  мере  надобности  может  быстро
считываться из оперативной памяти процессором  и  записываться  туда  вновь.
При отключении питания содержимое оперативной памяти полностью  стирается  и
утрачивается. Поэтому после включения компьютера программы и  данные  всякий
раз  необходимо  заново  загружать  в  оперативную  память   из   источников
долговременного   хранения   информации.   Для   долговременного    хранения
информации чаще всего применяются магнитные  и  оптические  диски  или  иные
накопители цифровой информации [2].
       В современных компьютерах применяется  главным  образом  динамическая
оперативная память или DRAM (Dynamic Random Access Memory). Она строится  на
микросхемах,  требующих  во  избежание  потерь   периодического   обновления
информации.  Этот  процесс  получил  название   «регенерация   памяти».   Он
реализуется специальным контроллером, установленным  на  материнской  плате.
На периодическую регенерацию данных в микросхемах  динамической  оперативной
памяти  расходуется  некоторое  время.  Поэтому  сбои   в   памяти   нередко
оказываются  одной  из   распространенных   проблем   в   работе   недорогих
персональных компьютеров «желтой» или  «черной»  сборки,  даже  если  в  них
используются  совершенно  исправные  микросхемы   динамической   оперативной
памяти.
       Объем любой компьютерной памяти, в том числе  и  оперативной  памяти,
измеряется  в  килобайтах  и  мегабайтах.  Наименьшей   единицей   измерения
информационной емкости  и  наименьшей  единицей  деления  памяти  компьютера
является байт. Собственно байт - это, в свою  очередь,  совокупность  восьми
мельчайших  единиц  информации,  которые  называют  битами.  Разница   между
простейшими     стационарными     двоичными      состояниями,      например,
«включено»/«выключено» или между 0 и 1 составляет всего один  бит.  Байтовая
(или 8 - битовая) структура измерения выбрана из - за  двоичной  организации
вычислительной техники. Для передачи или сохранения одного любого символа  -
буквы, цифры или знака - требуется минимум один байт.
       1 килобайт равен  1024  байтам,  1  мегабайт  -  1024  килобайтам,  1
гигабайт - 1024 мегабайтам.
Самые  первые  IBM  PC  имели  оперативную  память  всего  лишь  16   Кбайт.
Последующие модели персоналок  типа  IBM  PC  и  PC/XT  располагали  объемом
оперативной памяти до 640 Кбайт - именно таков  максимальный  объем  памяти,
которым способна управлять операционная система  MS-DOS.  А  для  увеличения
объема  памяти  использовались  специальные  платы  расширения,  позволявшие
дополнительно увеличить объем памяти до 16 - 64 Мбайт [2].
Оперативная память компьютера IBM PC с процессором Intel - 8088 или Intel  -
8086 (например, IBM PC XT) может иметь размер не более 1  Мбайта,  поскольку
эти микропроцессоры могут обращаться не чем к 1 Мбайту  памяти.  Эта  память
состоит из  двух  частей.  Первые  640  Кбайт  памяти  могут  использоваться
прикладными программами и операционной  системой.  Остальные  адреса  памяти
(«верхняя память») зарезервированы для служебных целей:
       для хранения части операционной  системы  DOS,  которая  обеспечивает
тестирование компьютера, начальную загрузку операционной  системы,  а  также
выполнение основных низкоуровневых услуг ввода - вывода;
       для передачи изображения на экран;
       для  хранения  различных  расширений  операционной  системы,  которые
поставляются вместе с дополнительными устройствами компьютера.
Как правило, тогда говорят  об  объеме  оперативной  памяти  компьютера,  то
имеют  в  виду  именно  первую  ее  часть,  которая   может   использоваться
прикладными программами и операционной системой.
Барьер 640 Кбайт. Для многих программ 640 Кбайт мало (к тому же из этих  640
Кбайт до 100 Кбайт могут занимать DOS  и  различные  системные  программы  -
драйверы  устройств  и  резидентные  программы).  Поэтому  были  разработаны
расширенная (extended) и дополнительная (expanded) памяти.
В  качестве  компонентов  памяти  в  современных  компьютерах   используются
главным образом модули памяти с однорядным  расположением  выводов,  которые
называются SIMM. Эти модули выпускаются с 30 и с 72 контактами емкостью  256
Кбайт, 1 Мбайт, 4 Мбайт, 16 Мбайт или 32 Мбайта.
       1.1.3. Дисковая операционная система (DOS)
       Дисковая операционная система - это  программа,  которая  загружается
при  включении  компьютера.   Она   производит   диалог   с   пользователем,
посредством команд (каждая команда означает  действие,  которое  DOS  должна
выполнить) осуществляет управление компьютером, его  ресурсами  (оперативной
памятью, местом на дисках и т.  д.),  выводит  информацию  на  видеомонитор,
запускает другие (прикладные) программы на выполнение. Операционная  система
обеспечивает пользователю и прикладным  программам  удобный  способ  общения
(интерфейс)  с  устройствами  компьютера.  Она  выполняет  также   различные
вспомогательные действия, например копирование или печать  файлов  (файл  --
это поименованный набор информации на диске или другом  машинном  носителе).
Все функции по обслуживанию таблиц размещения файлов,  поиску  информации  в
них,  выделению  места  для  файлов  на  дискетах  выполняются  операционной
системой.
       Главным  достоинством   DOS   является   ее   способность   управлять
устройствами памяти на  магнитных  дисках  (именно  поэтому  она  названа  -
дисковая операционная система) [7].
       Операционная система осуществляет загрузку в оперативную память  всех
программ, передает им управление в начале  их  работы,  выполняет  различные
действия  по  запросу  выполняемых   программ   и   освобождает   занимаемую
программами оперативную память при их завершении.


       1.2. Характеристики программных средств вычислительной техники


       Система программирования Турбо Паскаль (Turbo Pascal),  разработанная
американской  корпорацией  Борланд  (Borland),  остается  одной   из   самых
популярных систем программирования  в  мире.  Этому  способствуют,  с  одной
стороны, простота, лежащая в основе  языка  программирования  Паскаль,  а  с
другой - труд и талант сотрудников корпорации Борланд во главе  с  идеологом
и создателем Турбо Паскаля Андерсом Хейлсбергом. [3]
        Придуманный швейцарским ученым  Никласом  Виртом  как  средство  для
обучения студентов программированию, язык Паскаль стараниями  А.  Хейлсберга
превратился в мощную современную профессиональную систему  программирования,
которой по плечу любые задачи - от создания простых программ, до  разработки
сложнейших реляционных систем управления базами данных. [4]
        Турбо Паскаль - это строго  типизированный  язык.  Развитая  система
типов позволяет легко разрабатывать адекватные  представления  для  структур
данных любой решаемой задачи. В то же время  существующие  в  Турбо  Паскале
средства  преобразования  типов  дают   возможность   гибко   манипулировать
различными данными.
        Основные  операторы  языка  являются  хорошей  иллюстрацией  базовых
управляющих  конструкций  структурного  программирования.  Их  использование
позволяет записывать сложные алгоритмы обработки данных в компактной  форме.
Гармоничное включение в структуру  языка  средств  объектно-ориентированного
программирования делает переход от традиционных технологий  программирования
к объектно-ориентированному для тех, кто  программирует  на  Турбо  Паскале,
достаточно безболезненным.
        Система  программирования  Турбо  Паскаль   поддерживает   модульный
принцип  программирования,  который  лежит   в   основе   всех   современных
технологий разработок программ.  Программа,  написанная  на  Турбо  Паскале,
обычно разбивается на модули, а те, в свою очередь, состоят из  подпрограмм.
[4]


       1.3. Постановка задачи


       Целью  задачи  является  разработка  программного  интерфейса   (ПИ),
который  должен  связывать  персональный  компьютер  и  лабораторный   макет
«Программатор ПЗУ».
       ПИ должен обеспечивать подачу входных воздействий на все контакты ИМС
(шину адреса, шину данных, управляющие сигналы), осуществлять  считывание  и
запись данных, используя стандартный порт ввода-вывода LPT (параллельный).
       Требования к интерфейсу: ПИ должен обеспечивать формирование и подачу
адреса, содержащего шесть информационных и четыре  управляющих  бита  данных
на соответствующие контакты программируемой  ПЗУ,  обеспечить  стробирование
чтения/записи информации.  ПИ  должен  обеспечить  удобный  вывод  текстовой
информации на экран для упрощения работы пользователя с программой.

                            2. СПЕЦИАЛЬНЫЙ РАЗДЕЛ



       2.1. Разработка алгоритма программного обеспечения


       Структура  программного   интерфейса   была   построена   на   основе
иерархической системы экранного меню.
       Эта система позволяет обеспечить для пользователя удобный  переход  и
взаимодействие различных уровней иерархии данного алгоритма структуры меню.
       При разработке алгоритма программного обеспечения  были  использованы
следующие программные модули:
       модуль главного меню;
       модуль настройки программы;
       модуль чтения ПЗУ;
       модуль записи ПЗУ;
       модуль просмотра настроенной программы.
       Модуль главного меню обеспечивает отображение на экране всех  пунктов
меню, и, соответственно, осуществляет передачу управления программы по  этим
пунктам с предварительным сохранением информационных переменных и массивов.
       Модуль настройки  программы  осуществляет  определение  пользователем
всех входных  и  выходных  параметров,  которые  необходимы  для  дальнейшей
работы модулей чтения и записи ПЗУ, а также тестирования программатора.
       Модули  чтения  и  записи  ПЗУ,   обеспечивает   связь   программного
интерфейса  с  аппаратной  частью  лабораторного  макета,   и   осуществляет
основную связь по работе с ПЗУ.
       Модуль просмотра настроенной программы осуществляет выдачу  на  экран
текста настроенной универсальной программы.


       2.2. Разработка универсальной управляющей программы


       Управляющая  программа  построена  в  режиме  меню  для   обеспечения
наибольшей простоты ее использования.
       Программа была реализована на экране  с  разрешающей  способностью  в
текстовом  режиме  80x60.  Для   упрощения   программного   алгоритма   были
разработаны процедуры, которые позволили выводить меню, управлять  курсором,
работать с файловой системой DOS.
      1. Процедура WaitRt - ждет вертикального обратного хода луча
      2. Процедура Color - установка цвета
                                                                 Таблица 2.1
                  Переменные используемые в процедуре Color

|Переменная                           |Назначение                          |
|C1                                   |Цвет символа                        |
|С2                                   |Цвет экрана                         |


      3. Процедура Loc - позиция курсора на экране
                                                                 Таблица 2.2
                   Переменные используемые в процедуре Loc

|Переменная                           |Назначение                          |
|X                                    |Позиция курсора по X                |
|С2                                   |Позиция курсора по Y                |


       2.2.4. Процедура Wchar - печать символа
       2.2.5. Процедура Shade- создание тени для окна.
       2.2.6 Процедура Wrt - вывод текста на экран.
       2.2.7. Процедура Map - выводим созданный виртуальной эран на дисплей.
       2.2.8. Процедура Cls - очистка экрана.
       2.2.9. Процедура ScanKey - выдает ASCII код нажатой клавиши.
       2.2.10. Процедура SkipTime - пропускает время (таймер процессора).
       2.2.11. Процедура MoveMan - анимация человека  и стрелки.
       2.2.12. Процедура MakeMan - создание человека.
       2.2.13. Процедура LoadFont - загрузка моего шрифта.
       2.2.14. Процедура WaitKey - ожидание нажатия любой клавиши.
     15. Процедура Window - создание окон.
                                                                 Таблица 2.3
                 Переменные используемые в процедуре Window

|Переменная                           |Назначение                          |
|XUL                                  |Позиция левого верхнего угла  по X  |
|YUL                                  |Позиция левого верхнего угла  по Y  |
|XDR                                  |Позиция правого нижнего угла  по X  |
|XDR                                  |Позиция правого нижнего угла  по Y  |


     16. Процедура Morph - создание эффекта “Морфий”, плавное преоразование
         одного окна в другое.
                                                                 Таблица 2.4
                  Переменные используемые в процедуре Morph

|Переменная                           |Назначение                          |
|1                                    |2                                   |
|XF1                                  |Позиция левого верхнего угла  по X  |
|                                     |исходного окна                      |
|YF1                                  |Позиция левого верхнего угла  по Y  |
|                                     |исходного окна                      |
|XF2                                  |Позиция правого нижнего угла  по X  |
|                                     |исходного окна                      |
|YF2                                  |Позиция правого нижнего угла  по Y  |
|                                     |исходного окна                      |
|XT1                                  |Позиция левого верхнего угла  по X  |
|                                     |получаемого окна                    |


                                                     Продолжение таблицы 2.4

|1                                    |2                                   |
|YT1                                  |Позиция левого верхнего угла  по Y  |
|                                     |получаемого окна                    |
|XT2                                  |Позиция правого нижнего угла  по X  |
|                                     |получаемого окна                    |
|YT2                                  |Позиция правого нижнего угла  по Y  |
|                                     |получаемого окна                    |


     17.  Процедура  MorphL  -  создание  эффекта  “Морфий”   с   последними
         координатами.
                                                                 Таблица 2.5
                 Переменные используемые в процедуре MorphL

|Переменная                           |Назначение                          |
|XF1                                  |Последняя позиция левого верхнего   |
|                                     |угла  по X                          |
|YF1                                  |Последняя позиция левого верхнего   |
|                                     |угла  по Y                          |
|XF2                                  |Последняя позиция правого нижнего   |
|                                     |угла  по X                          |
|YF2                                  |Последняя позиция правого нижнего   |
|                                     |угла  по Y                          |


       2.2.18. Процедура WindowL - создание окна с последними координатами.
     19. Процедура Menu - работа с меню, выбор  пункта  меню  и  перемещение
         курсора.



                                                                 Таблица 2.6
                  Переменные используемые в процедуре Menu
|Переменная                           |Назначение                          |
|X1                                   |Координаты по X первой строчки меню |
|Y1                                   |Координаты по Y первой строчки меню |
|STEPY                                |Шаг пунктов меню                    |
|ALL                                  |Количество пунктов в меню           |
|COL                                  |Цвет позиций в меню                 |
|S1...S5                              |Название пунктов меню               |


       2.2.20.  Процедура  HexL2Str  -   представление   символа   в   ввиде
шестнадцатиричного кода.
       2.2.21.  Процедура  HexB2Str  -   представление   символа   в   ввиде
восьмеричного кода.
       2.2.22. Процедура MemEd - редактор текста.
       2.2.23. Процедура Ffile  -  работа  с  файлами,  запись,  создание  и
чтение.
       2.2.24. Процедура ReadROM - работа с программатором, чтение и  запись
данных ПЗУ, тестировнаие устройства.


       2.3. Разработка программного интерфейса


       Программный   интерфейс   был   разработан   с   учетом   всех    его
эксплуатационных характеристик. Он должен отвечать следующим требованиям:
        полнота и краткость отображаемой информации;
       удобное расположение информации на экране;
       оперативность работы.
       Интерфейс программного  обеспечения  был  построен  по  иерархической
структуре.

                                    [pic]
                Рис. 2.1. Интерфейс программного обеспечения

       Вся  программа  построена  на  основе  типизированных  меню,  которые
позволят  легко  и  интуитивно  работать,  и  не  потребуют  дополнительного
времени от учащихся на изучение интерфейса  программы.  Фон,  окна  меню,  и
текст  отвечают  всем  требованиям  предъявляемым  к  цветовому  оформлению;
цветовая палитра подобрана  так,  чтобы  глаза  учащихся  как  можно  меньше
уставали при работе с программатором. Также был разработан новый шрифт,  что
позволило обеспечить крупные символы букв,  и  русифицированный  программный
интерфейс.
       Кадровые окна основного меню и все подпункты меню  на  каждом  уровне
иерархии  выполнены  в  виде  окон  с   соответствием   каждого   окна   его
информационному назначению.
       Межоконный переход  осуществляется  выбором  соответствующего  пункта
перемещением  по экрану маркера, в виде стрелки, позиция которого  указывает
на  выбранный  пункт   меню.   Обратный   переход   в   иерархическом   меню
осуществляться выбором  последнего  пункта  меню  -  «НАЗАД»,  или  нажатием
функциональной клавиши «ESC».
       Работа с пунктом меню «Работа с ПЗУ»  возможна  только  после  выбора
типа ПЗУ в пункте меню «Выбор  ПЗУ»,  это  связанно  с  особенностью  работы
аппаратной части лабораторного макета «Программатор ПЗУ».


       2.4. Описание  процесса отладки


       При  отладке  программного  интерфейса   лабораторного   макета   был
использован пошаговый режим пяти основных программных модуля:  модуль  меню,
модуль чтения ПЗУ, модуль записи  ПЗУ,  модуль  тестирования  программатора,
модуль файловых операций.
       В  процессе  отладки  были  использована  промежуточная  печать   для
определения некоторых промежуточных вычислений и кода вводимых с  клавиатуры
символов и клавиш.
       Была произведена  отладка  программы  на  выявление  орфографических,
синтаксических,  логических  и  графических   ошибок   в   экранных   частях
программы.
       Осуществлена  отладка  программного  интерфейса   совместно   с   его
аппаратной частью. Были внесены некоторые изменения в  программу,  связанные
с обеспечением синхронизации работы  программного  интерфейса  лабораторного
макета  с его аппаратной частью.


       2.5. Разработка эксплуатационно-методической документации


       При эксплуатации лабораторного макета “Програматор ПЗУ” по проведению
лабораторных работ необходимо:
        1. Подсоединить интерфесный продов к программатору и  параллельному
           порту персонального компьютера (оба должны быть обесточены)
2. Включить питание копьютера
3. Включить питание на лабораторном макете
4. Загрузить на компьютере программный интерфейс
5. Вставить микросхему ПЗУ в слот на лабораторном макете
6. Ознакомиться с программой
        7. Выбрать в программе  тип  микросхемы  ПЗУ,  вставленную  в  слот
           лабораторного макета
8. Провести тестирование работоспособности программатора
9. Выполнить задание по работе с лабораторным макетом
10. Выйти из программы
11. Выключить лабораторный макет
12. Выключить персональный компьютер
13. Снять микросхему ПЗУ со слота лабораторного макета

       Для  ознакомления  с  устройством   и   работой   программатора   ПЗУ
пользователю предоставлена документация.


       2.6. Результаты испытаний


       В  процессе  дипломного  проектирования   были   получены   следующие
результаты:
       Был   разработан   программный   интерфейс    лабораторного    макета
«Программатор  ПЗУ»,  который  обеспечивает  связь  аппаратного   интерфейса
лабораторного  макета  с   последовательным   портом   (LPT)   персонального
компьютера  IBM  PC,  позволяет  считывать  и   записывать   информацию   на
микросхемы ПЗУ.
       Также   программный   интерфейс   создает   удобный   режим   общения
пользователя с программой по принципу экранных меню.
       Вся программа реализована на персональном компьютере  IBM  PC  486  с
монитором разрешающей способностью в текстовом режиме 80x60, при палитры  16
цветов.
       В ходу отладки  программного  интерфейса  экспериментным  путем  были
установлены минимальные требования к персональному компьютеру:
       IBM совместимы персональный компьютер;
       процессор 286;
       цветной дисплей;
       видеоадаптер EGA;
       операционная оболочка DOS 3.0 или старше;
       объем оперативной памяти 416 Kb;
       свободное пространство на жестком диске из расчета: программа  (20Kb)
        + 64Kb*кол. прошивок ПЗУ.
       Техническая характеристика программы:
|Объем программы на жестком диске                   |20 Kb                  |
|Занимаемая память во время исполнения              |17Kb                   |
|Скорость чтения микросхемы ПЗУ                     |1Kb/сек.               |
|Скорость записи прошивки в ПЗУ                     |0.5Kb/сек.             |
|Тестирование программатора                         |13 сек                 |



                   3. ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКИЙ РАЗДЕЛ



       3.1.  Оценка  издержек  на  разработку  программного  интерфейса  для
программатора ПЗУ

       3.1.1 Статья I. Материальные ресурсы
       Статья  I  включает  стоимость  всех  видов   сырья   и   материалов,
расходуемых на изготовление продукции, а  также  транспортно-заготовительные
расходы.
       Расчет сырья и материалов приведен в таблице 3.1.
|Таблица 3.1                                                             |


                          Расчет сырья и материалов

|Наименование         |Ед.         |Цена,      |Норма     |Стоимость,   |
|                     |Измерения   |руб.       |расходов, |руб.         |
|                     |            |           |шт.       |             |
|Операционная система |шт.         |342000.00  |1         |342000.00    |
|MS-DOS 6.20          |            |           |          |             |
|Язык программирования|шт.         |570000.00  |1         |570000.00    |
|Borland Turbo Pascal |            |           |          |             |
|v7.0                 |            |           |          |             |
|Итого:    |912000.00    |
|ТЗР=[pic]                                                        |          |
|                                                                 |(3.1)     |


ТЗР=912000.00*1%/100%=9120.00 руб.
|Ст.I=[pic]                           |                                     |
|                                     |(3.2)                                |


Ст.I=912000.00+9120.00=921120.00 руб.



       3.1.2. Статья II. Оплата труда
       Статья  II  включает  заработную  плату   основных   производственных
рабочих, в которые непосредственно на рабочих местах выполняют операции,  по
обработке продукции.
       Определение норм времени на операции приведено в таблице 3.2.
|Таблица 3.2                                                                 |


                                Нормы времени

|Должность         |Стоимость 1 часа   |Кол-во часов     |Оплата           |
|Программист       |15000.00 руб.      |60               |900000.00 руб.   |
|Отладчик          |5000.00 руб.       |15               |75000.00 руб.    |
|Итого:           |975000.00 руб.   |


Ст.2=975000.00 руб.
       3.1.3 Статья III. Отчисления во внебюджетные фонды
       Статья III включает в себя отчисления в пенсионный фонд (28 %),  фонд
занятости (1.5 %), медицинское страхование (3.6 %),  социальное  страхование
(5.4 %), в фонд образования (1 %) и транспортный налог (1 %).
       Всего 40,5 %  от начисленной заработной платы.
|Ст.3=[pic]                           |(3.3)                                |


Ст.3=[pic]= 394875.00 руб.
       3.1.4. Статья IV.  Расходы на содержание и обслуживание оборудования
       Статья  IV  включает  в  себя  расходы  на  зарплату  вспомогательным
рабочим, наладчикам, механикам, стоимость запасных  частей,  вспомогательных
средств и амортизацию.
       Начальная  стоимость  персонального  компьютера  IBM  PC/AT   386   -
2425920.00 руб., норма амортизации - 4% (КОМ),  расходы  составили  97036.80
руб.
       Во время разработки и отладки программного обеспечения было потрачена
89 кВт (ЭНЕР) электроэнергии: 1 кВт - 512.00 руб., 89 кВт - 45568.00 руб.

|Ст.4=КОМ+ЭНЕР                        |(3.4)                                |


Ст.4= 97036.80+45568.00=142604.80 руб.
       3.1.5. Полная себестоимость
|Пол.Себ.=[pic]                       |(3.5)                                |


Пол.Себ.=921120.00+975000.00+394875.00+142604.80=2433559.80 руб.


       3.2. Анализ эффективности внедрения разработанной программы в
учебный процесс


       Эффективность внедрения программы заключается в том, что лабораторный
макет,    для    которого    написана    программа,    позволяет    наглядно
продемонстрировать чтение и запись ПЗУ в производственных условиях.
       Лабораторный макет и  программное  обеспечение  обслуживающие  макет,
позволит улучшить  качество  обучающего  процесса  по  предмету  «Импульсная
техника», потому, что позволит учащимся непосредственно на практике  изучить
метод чтения и записи микросхем.
       Программа для лабораторного макета  проста  и  интуитивна  понятна  в
обращении;  Сам  макет,  также  прост,  что  позволяет  сразу  преступить  к
выполнению лабораторной работы, необходимо всего  лишь  только  подключиться
макет в  сеть,  подсоединить  разъем  к  параллельному  порту  персонального
компьютера (порт LPT),  вставить  прошиваемую  микросхему  ПЗУ  в  панель  и
запустить программное обеспечение на персональном компьютере.  Эта  простота
в обращении позволит не  затрачивать  много  времени  на  обучение  учащихся
пользованию макетом.
       Лабораторный макет имеет хорошие показатели повторяемости, не требует
сложного оборудования для отладки, что  позволяет  легко  внедрить  макет  в
производство или собирать  его  непосредственно  в  радиомастерских  учебных
заведений или в домашних условиях.
       К достоинству макета относятся и
       низкая себестоимость, так как использованы широкодоступные  детали  и
материалы;
       малый ток потребления;
       малые габаритные размеры;
       интуитивно понятный программный интерфейс.

       Все выше перечисленные факторы позволят снизить розничную цену макета
и  программного  обеспечения  для  него,  а  также  уменьшить   затраты   на
эксплуатацию,  что  в  условиях  рыночной  экономики  позволяет  повсеместно
внедрить лабораторный макет по программированию ПЗУ в учебный  процесс.  Сам
как таковой лабораторный стенд без программного обеспечения не имеет  смысла
рассматривать, так как без программы, это просто груда металла, так  же  как
и программа без металла, это  просто  бессмысленный  набор  команд.  Поэтому
дальше под  словом  макет  будет  рассматривать  совокупность  лабораторного
стенда и программного обеспечения для него.
       Так как разработка макета носит социально-направленный характер  (для
проведения лабораторных работ в  учебных  заведениях  по  курсу  «Импульсная
техника») и в стоимостном выражении не оценивается.


     4. МЕРОПРИЯТИЯ ПО ОХРАНЕ ТРУДА. БЕЗОПАСНОСТЬ ТРУДА ПРИ ОБСЛУЖИВАНИИ
                                ПРОГРАММАТОРА



       4.1 Требования безопасности к техническим средствам ПЭВМ



       Технические и периферийные средства ПЭВМ должны отвечать  требованиям
безопасности при их эксплуатации, монтаже, ремонте и обслуживании  отдельных
комплексов и систем в целом. Устройства управления ПЭВМ,  устройства  ввода-
вывода  и  подготовки   данных   в   процессе   эксплуатации   должны   быть
пожаробезопасными  и  соответствовать  требованиям  безопасности  в  течение
всего срока службы.
       Органы управления техническими  средствами  ПЭВМ,  устройства  ввода-
вывода, средства диагностики и контроля работы  должны  включать  накопление
статического  электричества  в  опасных  количествах.  Отдельные  блоки  ЭВМ
допускается эксплуатировать с устройствами снятия электрического заряда.
       Для предотвращения образования и  защиты  студентов  от  статического
электричества в помещениях учебно-вычислительного  центра  (УВЦ)  необходимо
использовать нейтрализаторы и  увлажнители  воздуха,  а  полы  должны  иметь
антистатическое покрытие. Допустимый  уровень  напряженности  электрического
поля в помещениях УВЦ не должен превышать 20 кВ/м.
       Конструктивно отдельные  модули  и  блоки  технических  средств  ПЭВМ
должны иметь местное освещение  для  обслуживания,  диагностики  и  контроля
работы,  при  этом  должна   исключаться   возможность   соприкосновение   с
токоведущими частями электрооборудования.
       Устройства управления техническими и периферийными  средствами  ПЭВМ,
обеспечивающие взаимодействие составных частей ПЭВМ, должны  быть  выполнены
так, чтобы не могла возникнуть опасность  в  процессе  совместного  действия
отдельных систем и комплекса в целом.
       Видео терминальное устройство отображения информации должно  отвечать
основным требованиям безопасности:  яркость  экрана  дисплея  не  менее  100
кд/м2, высота символов на экране не менее 3.8  мм,  расстояние  от  глаз  до
экрана не менее 400  мм,  размер  экрана  по  диагонали  не  менее  310  мм,
количество  точек  на  одной  строке  не  менее  640,   минимальный   размер
светящейся точки не более 0.4 мм, для монохромного  дисплея  и  0.6  мм  для
цветного.



       4.2. Требования безопасности к микроклимату в учебных лабораториях


       Оптимальные и допустимые условия микроклимата в лабораториях учебного
вычислительного  центра  (УВЦ)  устанавливаются  с  учетом  избытка   тепла,
выделяемого  от  технических  и   периферийных   устройств   ПЭВМ,   тяжести
выполняемой  работы,  а  также  времени   года.   Микроклимат   определяется
действующими на организм программистов сочетаниями температуры, влажности  и
скорости движения воздуха.
       В  лабораториях  УВЦ  необходимо  поддерживать  оптимальные   условия
микроклимата с помощью вентиляционных и отопительных систем,  выполненных  в
соответствии с СНИП II-33-75. Температура воздуха в холодный и теплы  период
года должна быть в пределах +20...25 оС , относительная влажность 60...40  %
при скорости движения воздуха не более 0.2 м/с, подача наружного  воздуха  в
помещение лаборатории объемом до 20 м3 на одного  студента  не  должна  быть
менее 30 м3/ч.
       Воздух в помещениях работы программистов и операторов  вычислительных
систем должен быть  очищен  от  вредных  веществ,  пыли  и  микроорганизмов.
Патогенная флора должна быть исключена. В помещениях лабораторий  УВЦ  общее
количество колоний на 1 м3  не  должна  превышать  1000.  В  помещениях  УВЦ
воздух рабочей зоны должен соответствовать  установленным  требованиям  ГОСТ
12.1.005-76 с незначительным избытком тепла от видеотерминалов  и  устройств
отображения информации.
       При  одновременном  нахождении  в  помещениях   УВЦ   технических   и
периферийных  устройств  ПЭВМ,  программистов  и  операторов  вычислительных
систем, когда температура внешней среды выше +25 оС, допустимая  температура
воздуха в помещениях  не  должна  превышать  +31...+33  оС  со  значительным
избытком тепла от ПЭВМ. При длительном  воздействии  повышенной  температуры
происходит нарушение  водно-солевого,  белкового  и  витаминного  обменов  в
организме студентов  УВЦ.  В  результате  наступает  расслабление  организма
учащихся, снижение внимания и скорости восприятия  с  устройств  отображения
информации.


       4.3. Меры безопасности при сервисном обслуживании программатора.


       В лабораторном макете присутствует опасное для жизни  напряжение  220
вольт 50 герц. Это напряжение  питает  трансформаторный  блок.  В  остальных
блоках лабораторного  макета  напряжения  не  превышают  27  вольт,  что  не
является  опасным.  В  блоке  стабилизатора  и  блоке  нагрузки   происходит
тепловыделение. Температура частей этих блоков не  превышает  50оС,  что  не
представляет опасности для человека.
       Корпус блока трансформатора выполнен из  диэлектрического  материала.
Шасси  выполнено  из  дюралюминия.  Клемма  заземления  шасси  должна   быть
выведена на корпус. К этой клемме должно быть подключено заземление.
        Шнур питания и вилка должны соответствовать ТУ на них,  и  не  иметь
изломов и нарушений в изоляции.
       Сетевой тумблер типа ПТ2-2 (напряжение 600 вольт,  ток  до  2  ампер)
отвечает требованиям электробезопасности.
       Должны  быть  использованы  сетевые  предохранители   в   стандартных
держателях.
        Напряжения и температуры в остальных блоках лабораторного макета  не
представляют опасности и не требуют особых мер предосторожности.
       Так как программатор  взаимодействует  при  работе  с  ПЭВМ,  а  ПЭВМ
является электроустановкой, то к  ней  предъявляются  требования  соблюдения
всех параметров электробезопасности согласно ТУ на ПЭВМ. Вредными  факторами
для человека являются:
       мягкое рентгеновское излучение экрана;
       мерцание экрана с частотой кадровой развертки;
       электростатическое поле вокруг экрана;
       ультрафиолетовое излучение экрана.
                              СПИСОК ЛИТЕРАТУРЫ

Скотт Мюллер «Модернизация и ремонт персональных компьютеров», Москва,  изд.
«Восточная Книжная Компания», 1996г., ISBN 0-7897-0321-1
Гук «Аппаратные средства  IBM  PC»,  Санкт-Петербург,  изд.  «Питер  Пресс»,
1996г., ISBN 5-88782-036-5
Фаронов В.В. «Турбо Паскаль 7.0. Начальный курс. Учебное  пособие»,  Москва,
изд. «Нолидж», 1997г., ISBN 5-89251-012-3
М.В.  Сергиевский,  А.В.   Шалашов   «Турбо   Паскаль   7.0:   Язык,   среда
программирования», Москва, изд. «Машиностроение», 1994г., ISBN  5-217-02468-
2
Абель П. «Язык Ассемблер  для  IBM  PC  и  программирования»,  Москва,  изд.
«Высшая школа», 1992г., ISBN 5-101-123447-1
Гейтс Б. «Дорога в будующее», Москва, изд. «Русская редакция», 1996г.,  ISBN
5-7502-0019-1
Информация с сервера www.referats.aha.ru, изд. INTERNET
CD-библиотека «Все для инженера», изд. InfoLink, 1997г.

                                                                ПРИЛОЖЕНИЕ 1

                            ПРОГРАММНЫЙ ИНТЕРФЕЙС


        Uses DOS;

        Type TNT = Array[0..65534]Of Byte;
             Filearray  = Array[1..5000]Of String[12];

        Const
            U0 = Char(200);
            U1 = Char(201);
            U2 = Char(202);
            U3 = Char(199);
            U4 = Char(198);
            U5 = Char(203);
            U6 = Char(193);
            U7 = Char(192);
            Up = Char(194)+Char(195);
            Uf = Char(196)+Char(185);
            Us = Char(197)+Char(186);
            Speed = 3;
                   Hex        :        Array[0..15]Of         Char         =
       ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

        Var
            Buffer  : ^TNT;
            Filx    : ^filearray;
            Dirx    : ^filearray;
            Fake    : ^TNT;
            ScanCode: Byte;
            Key     : Char;
            Screen  : Array[0..50*90] of byte;
            Segscr  : Word;
            Ofsscr  : Word;
            px,py   : Byte;
            Clr     : Byte;
            MenuP   : Byte;
            F       : File;
            RomSize : Longint;
            Curd    : String;
            RomName : String;
            lxul,lyul,lxdr,lydr : byte;

       Procedure WaitRt; assembler;
       Asm
           mov dx,$3da
          @wa1:
           in al,dx
           test al,8
           je @wa1
          @wa2:
           in al,dx
           test al,8
           jne @wa2
       End;

       Procedure Color(c1,c2 : byte);
       Begin
           clr:=c1+16*c2;
       End;

       Procedure Loc(x,y: byte);
       Begin
           px:=x;
           py:=y;
       End;

       Procedure WChar(c : char);
       Begin
           screen[py*160+px+px]:=byte(c);
           screen[py*160+px+px+1]:=clr;
           inc(px);
            If px=80 Then
              Begin px:=0; inc(py);
               If py>25 Then py:=25;
              End;
       End;

       Procedure Shade(x : byte);
       Var
           m : byte;
       Begin
           For m:=1 To x Do
             Begin
               Screen[py*160+px+px+1]:=screen[py*160+px+px+1] And $7;
               inc(px);
                If px=80 Then
                 Begin px:=0; inc(py);
                  If py>25 Then py:=25;
                 End;
             End;
       End;

       Procedure Wrt(s : string);
       Var
           x: word;
       Begin
           For x:=1 To length(s) Do WChar(s[x]);
       End;

       Procedure WrtLn(s : string);
       Var
           x: word;
       Begin
           For x:=1 To length(s) Do WChar(s[x]);
            px:=0;
            inc(py);
             If py>25 Then py:=25;
       End;

       Procedure Map;
       Begin
           Move(screen,mem[$b800:0],80*50);
       End;

       Procedure Cls;
       Begin
           FillChar(screen,80*50,0);
       End;

       Procedure ReadKey; assembler;
       Asm
           xor ax,ax
           int 16h
       End;

       Function ScanKey : char;
       Var
           x : byte;
       Begin
           x:=255;
       Asm
           mov ah,01
           int 16h
           jz @nokey
           mov x,al
           mov ScanCode,ah
         @nokey:
       End;
           If x<>255 Then ReadKey;
            ScanKey:=char(x);
       End;

       Procedure SkipTime;
       Var
           h,m,s,c : word;
           lh,lm,ls,lc : longint;
           abstime1,abstime2: longint;
       Begin
           GetTime(h,m,s,c);
           lh:=h; lm:=m; ls:=s; lc:=c;
           abstime1:=lc+(ls*100)+(lm*60*100)+(lh*60*60*100);
       Repeat
           GetTime(h,m,s,c);
           lh:=h; lm:=m; ls:=s; lc:=c;
           abstime2:=lc+(ls*100)+(lm*60*100)+(lh*60*60*100);
       Until (abstime2<>abstime1);
       End;


       Procedure MoveMan;
       Var
           addr : word;
           a    : byte;
           x    : word;
       Begin
           addr:=0;
            For x:=0 To 80*25-1 Do
             Begin
              a:=screen[addr];
               If (a>207)And(a<217) Then
                inc(a);
                 If a=217 Then a:=208;
                  If a=205 Then a:=204 Else If a=204 Then a:=205;
                   screen[addr]:=a;
                   inc(addr,2);
             End;
       End;

       Procedure MakeMans;
       Var x: word;
       Begin
           For x:=0 To 80*25-1 Do
            Begin
             screen[x+x]  :=177;
             screen[x+x+1]:=16+7;
            End;
       End;

       Procedure LoadFont;
       Var
           f: file;
       Begin
           Assign(f,curd+'axefont.fnt');
           Reset(f,1);
           Blockread(f,screen,50*80);
           Close(f);
       Asm
           push bp
           mov ax,segscr
           mov es,ax
           mov bp,ofsscr
           mov bx,1000h
           xor dx,dx
           mov cx,256
           mov ax,1100h
           int 10h
           pop bp
           mov ah,1
           mov cx,1000h
           int 10h
       End;
           Cls;
       End;

       Procedure WaitKey;
       Begin
           WaitRt;
           Map;
       Repeat
           Key:=ScanKey;
            If Key=char(255) Then
             Begin
              Map;
              MoveMan;
              SkipTime;
             End;
       Until Key<>char(255);
       End;

       Procedure Window(xul,yul,xdr,ydr : byte; name : string);
       Var
           x,y : word;
       Begin
           Loc(xul,yul);
           Wrt(up);
            For x:=xul+2 To xdr Do Wrt('-');
             For y:=yul+1 To ydr-1 Do
              Begin
               Loc(xul,y); Wrt(u0);
                For x:=xul+1 To xdr-1 Do Wrt(' ');
                 Wrt(u1);
                 Shade(2);
              End;
             Loc(xul,y);
             Wrt(u4);
              For x:=xul+1 To xdr-1 Do Wrt(u7);
               Wrt(u5);
               Loc(xul+2,ydr);
               Shade(xdr-xul+1);
               x:=length(name) shr 1;
               y:=(xdr-xul)shr 1+xul;
               y:=y-x;
               Loc(y+1,yul);
               y:=clr;
               x:=(clr and $F0)shr 4;
               color(x,clr and $0F);
               Wrt(name);
               clr:=y;
               lxul:=xul;
               lyul:=yul;
               lxdr:=xdr;
               lydr:=ydr;
       End;

       Procedure Morph(xf1,yf1,xf2,yf2,xt1,yt1,xt2,yt2 : byte);
       Var
           x : word;
       Begin
           Window(xf1,yf1,xf2,yf2,'');
       Repeat
           MakeMans;
            If xf1>xt1 Then dec(xf1,((xf1-xt1)Shr speed)+1);
             If xf1<xt1 Then inc(xf1,((xt1-xf1)Shr speed)+1);
              If yf1>yt1 Then dec(yf1,((yf1-yt1)Shr speed)+1);
               If yf1<yt1 Then inc(yf1,((yt1-yf1)Shr speed)+1);
                If xf2>xt2 Then dec(xf2,((xf2-xt2)Shr speed)+1);
                 If xf2<xt2 Then inc(xf2,((xt2-xf2)Shr speed)+1);
                  If yf2>yt2 Then dec(yf2,((yf2-yt2)Shr speed)+1);
                   If yf2<yt2 Then inc(yf2,((yt2-yf2)Shr speed)+1);
                    Window(xf1,yf1,xf2,yf2,'');
                    Map;
                    WaitRt;
       Until (xf1=xt1)And(xf2=xt2)And(yf1=yt1)And(yf2=yt2);
       End;

       Procedure MorphL(xt1,yt1,xt2,yt2 : byte);
       Var
           x : word;
           xf1,xf2,yf1,yf2 : byte;
       Begin
           xf1:=lxul; xf2:=lxdr;
           yf1:=lyul; yf2:=lydr;
           MorPh(xf1,yf1,xf2,yf2,xt1,yt1,xt2,yt2);
       End;

       Procedure WindowL(name : string);
       Var
          xf1,xf2,yf1,yf2 : byte;
       Begin
          xf1:=lxul; xf2:=lxdr;
          yf1:=lyul; yf2:=lydr;
          Window(xf1,yf1,xf2,yf2,name);
       End;

       Procedure   Menu(x1,y1,stepy,all,col   :   byte;   s1,s2,s3,s4,s5   :
       string;lenx : byte);
       Var
          x  : byte;
          yt : byte;
          yp : byte;
       Begin
          yt:=y1;
           For x:=1 To all Do
            Begin
             Loc(x1,yt);
              Case x oF
               1: Wrt(s1);
               2: Wrt(s2);
               3: Wrt(s3);
               4: Wrt(s4);
               5: Wrt(s5);
              End;
             yt:=yt+stepy;
            End;
           yp:=0;
           yt:=clr;
           clr:=col;
       Repeat
       Repeat {??}
           Loc(x1-2,y1+(stepy*yp));
           Wrt(char(204));
           WaitKey;
       Until
       (Key=chr(13))or(ScanCode=byte('H'))or(ScanCode=byte('P'))or(Key=chr(27
       ));
           Loc(x1-2,y1+(stepy*yp));
           Wrt(' ');
            If Key=chr(27) Then yp:=all-1;
             If ScanCode=byte('P') Then If yp<(all-1) Then inc(yp);
              If ScanCode=byte('H') Then If yp>0 Then dec(yp);
       Until (Key=chr(13))or(Key=chr(27));
              x:=x1-2;
       Repeat
              Loc(x,y1+(stepy*yp));
              Wrt(' '+chr(205));
              WaitRt;
              Map;
              inc(x,1);
       Until x>=x1+lenx;
              clr:=yt;
              MenuP:=yp;
       End;

       Procedure HexL2Str(l : longint; var s : string);
       Begin
           s:=hex[(l shr (4*7))and 15];
           s:=s+hex[(l shr (4*6))and 15];
           s:=s+hex[(l shr (4*5))and 15];
           s:=s+hex[(l shr (4*4))and 15];
           s:=s+hex[(l shr (4*3))and 15];
           s:=s+hex[(l shr (4*2))and 15];
           s:=s+hex[(l shr (4*1))and 15];
           s:=s+hex[(l)and 15];
       End;

       Procedure HexB2Str(l : byte; var s : string);
       Begin
           s:=hex[(l shr 4)and 15];
           s:=s+hex[(l)and 15];
       End;

       Procedure MemEd(name: string);
       Var
           x,y         : word;
           l,l1,p,lpos : longint;
           s,st        : string;
           stc         : byte;
           size        : longint;
           readsize    : longint;
           bank        : word;
           b1,b2       : byte;
           flag        : boolean;
           i           :  searchrec;
       Label Repaint, TryAgain;
       Begin
           TryAgain:
           FindFirst(name,AnyFile,i);
            If i.Attr And ReadOnly = ReadOnly Then
             Begin
              stc:=clr;
              color(7,4);
              MorPhL(20,7,56,15);
              WindowL('File has ReadOnly Attribute!');
                         Menu(30,9,2,3,$4b,'Remove             it','Reselect
       file','Exit','xxx4','xxx5',6);
               If MenuP=1 Then
                Begin
                 MenuP:=8;
                 exit;
                End;
               If MenuP=2 Then
                Begin
                 MenuP:=0;
                 exit;
                End;
              clr:=stc;
              assign(f,name);
              SetFattr(f,(i.Attr xor ReadOnly));
              MorPhL(0,0,77,24);
              Color(7,6);
              WindowL('Memory Editor');
               goto TryAgain;
             End;
           Assign(f,name);
           reset(f,1);
           size:=FilesiZe(f);
           l1:=0;
           p:=0;
           lpos:=0;
           bank:=0;
           flag:=false;
            If size>35000 Then readsize:=35000 Else readsize:=size;
             blockread(f,buffer^,readsize);
             RePaint:
              If l1 Div 32767 <> bank Then
               Begin
                If flag Then
                 Begin
                  color(7,4);
                  MorPhL(24,7,50,14);
                  WindowL('Save Changed Data?');
                  Menu(36,9,3,2,$4b,'YES','NO','xxx3','xxx4','xxx5',6);
                   If MenuP=0 Then
                    Begin
                     Seek(f,lpos);
                     blockwrite(f,buffer^,readsize);
                    End;
                  MorPhL(0,0,77,24);
                  Color(7,6);
                  WindowL('Memory Editor');
                 End;
                lpos:=(l1 div 32767)*32767+(l1 div 32767);
                Seek(f,lpos);
                 If size-l1>35000 Then readsize:=35000 Else  readsize:=size-
       l1;
                  blockread(f,buffer^,readsize);
                  bank:=l1 div 32767;
                  flag:=false;
              end;
             l:=l1 and 32767;
             Loc(2,1);
             Wrt('address     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
           ASCII');
              For x:=2 To 22 Do
               Begin
                Loc(2,x);
                HexL2Str(l+(l1 and (32767 xor $FFFFFFFF)),s);
                Wrt(s+':  ');
                 For y:=1 to 16 do
                  Begin
                   HexB2Str(buffer^[l],s);
                   Wrt(s+' ');
                   inc(l);
                  End;
                   For y:=16 Downto 1 Do
                    Begin
                     Wrt(char(buffer^[l-y]));
                    End;
               End;
              l:=l1 and 32767;
       Repeat
       Repeat
              stc:=clr;
              color(6,7);
              HexB2Str(buffer^[l+p],s);
              Loc((((p) and 15)*3)+13,(p) shr 4+2);
              Wrt(s);
              Loc((((p) and 15))+61,(p) shr 4+2);
              Wrt(char(buffer^[l+p]));
              clr:=stc;
              WaitKey;
       Until (Key=chr(13))or(ScanCode=$49)or(ScanCode=$51)or(ScanCode=$48)
             or(ScanCode=$4D)or(ScanCode=$4B)or(ScanCode=$50)or(Key=chr(27))

       or((Key>='0')and(Key<='9')or(upcase(Key)>='A')and(Upcase(Key)<='F'));
                                                                          If
       (ScanCode=$48)or(ScanCode=$4d)or(ScanCode=$4b)or(ScanCode=$50) Then
               Begin
                HexB2Str(buffer^[l+p],s);
                Loc((((p) and 15)*3)+13,(p) shr 4+2);
                Wrt(s);
                Loc((((p) and 15))+61,(p) shr 4+2);
                Wrt(char(buffer^[l+p]));
               End;
                                                                          If
       ((Key>='0')And(Key<='9'))Or((upcase(Key)>='A')And(Upcase(Key)<='F'))
       Then
               Begin
                stc:=clr;
                Key:=upcase(Key);
                If (Key>='0')And(Key<='9') Then b1:=byte(Key)-byte('0') Else
       b1:=byte(Key)-byte('A')+10;
                 color(6,7);
                 Loc((((p) and 15)*3)+13,(p) shr 4+2);
                 Wrt(Key+'?');
                 Loc((((p) and 15))+61,(p) shr 4+2);
                 Wrt('?');
       Repeat
                 WaitKey;
       Until
       ((Key>='0')and(Key<='9')or(upcase(Key)>='A')and(Upcase(Key)<='F'))or(S
       canCode=$0E);
                 Key:=upcase(Key);
                  If  (Key>='0')And(Key<='9')  Then  b2:=byte(Key)-byte('0')
       Else b2:=byte(Key)-byte('A')+10;
                                                                          If
       ((Key>='0')And(Key<='9'))Or((upcase(Key)>='A')And(Upcase(Key)<='F'))
       Then
                    Begin
                     buffer^[l+p]:=b1*16+b2;
                     flag:=true;
                    end;
                   clr:=stc;
               end;
       Case ScanCode of
        $50: if l1+p+16<size then begin inc(p,16); if  p>320+15  then  begin
       inc(l1,16); p:=320+(p and 15); goto RePaINt; end; end;
        $48: begin if  (p>15)or(l1<>0)then  dec(p,16);  if  p<0  then  begin
       dec(l1,16); p:=p and 15; goto RePaINt; end; end;
        $4D: if l1+p+1<size  then  begin  inc(p);  if  p>320+15  then  begin
       inc(l1,16); p:=320; goto RePaINt; end; end;
         $4B:  begin  if  (p>0)or(l1<>0)then  dec(p);  if  p<0  then   begin
       dec(l1,16); p:=15; goto RePaINt; end; end;
        $49: begin if (l1>319) then begin dec(l1,320) end else  l1:=0;  goto
       RePaint; end;
        $51: begin  inc(l1,320);  if  l1>size-336  then  l1:=size-336;  goto
       RePaint; end;
       end;
       Until (key=chr(13))or(Key=chr(27));
           If flag Then
            Begin
             color(7,4);
             MorPhL(24,7,50,14);
             WindowL('Save Changed Data?');
             Menu(36,9,3,2,$4b,'YES','NO','','','',6);
              If MenuP=0 Then
               Begin
                Seek(f,lpos);
                blockwrite(f,buffer^,readsize);
               End;
            End;
           close(f);
       End;

       Function LowCase(s : string) : string;
       Var
           x : integer;
       Begin
           LowCase:=s;
            For x:=1 To length(s) Do
             Begin
              If (s[x]>='A')And(s[x]<='Z') Then LowCase[x]:=char((byte(s[x])-
       byte('A'))+byte('a'));
             End;
       End;

       Procedure FFile(var s : string);
       Var
           i    : searchrec;
           name : string;
           x,y,z: integer;
           curp : integer;
           curps: integer;
           maxp : integer;
           mask : string;
           zs   : string;
           fz,dz: integer;
           f    : file of byte;
           pos  : longint;
       Label Repaint;
       Begin
           s:='';
           RePaint:
            For y:=1 To 17 Do
             Begin
              Loc(23,3+y);
              Wrt('                           ');
             End;
           z    :=0;
           fz   :=0;
           dz   :=1;
           curp :=1;
           curps:=1;
           mask :='*.*';
            FindFirst(mask,Directory,i);
       Repeat
           If (i.attr)And(Directory)=Directory Then
            Begin
             filx^[dz]:=i.name;
              If i.name<>'.' Then inc(dz);
            End
              Else
               Begin
                dirx^[fz+1]:=LowCase(i.name);
                inc(fz);
               End;
             FindNext(i);
       Until DOSERROR<>0;
           z:=dz+fz;
           x:=1;
            For y:=dz To z Do
             Begin
              filx^[y]:=dirx^[x];
              inc(x);
             End;
       Repeat
           maxp:=curp+17;
            If maxp>(z-1) Then maxp:=(z-1);
             For y:=curp To maxp Do
              Begin
               Loc(23,3+y-curp);
               name:=filx^[curp+(y-curp)];
                  For   x:=17   DownTo    length(filx^[curp+(y-curp)])    Do
       name:=name+' ';
                 If curps=(y-curp+1) Then color(1,2) Else color(7,1);
                  Wrt('       '+name);
              End;
       Repeat
           WaitKey;
       Until
       (Key=chr(13))or(ScanCode=$48)or(ScanCode=$50)or(Key=chr(27))or(ScanCod
       e=82);
       Case ScanCode Of
        $50: inc(curps);
        $48: dec(curps);
       82:
        Begin
         MOrPhL(10,10,40,15);
         WindowL('Input File Name .ROM');
         y :=1;
         zs:='        ';
          Loc(22,12);
          Wrt('-');
       Repeat
         WaitKey;
         Loc(21+y,12);
          If (Key<>chr(13))And(Key<>chr(27)) Then
           If (Key<>chr(08)) Then
            Begin
             If y<>9 Then
              Begin
               zs[y]:=Key;
                Wrt(key+'-');
                inc(y);
              End;
            End
           Else
            If y<>1 Then
             Begin
              dec(y);
              Loc(21+y,12);
              zs[y]:=' ';
              Wrt('-  ');
             End;
       Until (Key=Chr(13))or(Key=chr(27));
         MorPhL(20,8,50,12);
         Color(7,4);
         WindowL('!!!!!!!!!!!!');
         Loc(30,10);
         Wrt('Жди давай!'+chr(208));
         Map;
         Assign(f,zs+'.ROM');
         Rewrite(f);
         y:=$FF;
          For pos:=1 To romsize Do Write(f,byte(y));
           close(f);
           Key:=chr(255);
           ScanCode:=0;
           color(7,1);
           MorPhL(20,2,50,22);
           WindowL('Выберите файл');
           s:='';
          Goto RePaint;
         End;
        End;
         If curps>(z-1) Then curps:=(z-1);
         If (curps>18) Then
          Begin
           curps:=18;
            If curp<z-18 Then inc(curp);
          End;
         If (curps<1) Then
          Begin
           curps:=1;
            If curp>1 Then dec(curp);
          End;
       Until (Key=chr(13))or(Key=chr(27));
        Color(7,1);
         If Key=chr(13) Then
          Begin
           FindFirst(filx^[curp+curps-1],00,i);
           If DOSERROR<>0 Then
            Begin chdir(filx^[curp+curps-1]);
             Goto RePaint;
            End;
           s:=filx^[curp+curps-1];
          End;
       End;

       Procedure ReadROM(addr : longint);
       Var
          x : word;
          y : byte;
       Begin
          x:=addr;
          port[$378]:=x and 65535;
          port[$379]:=x shr 16;
          y:=port[$380];
          fake^[x and 65535]:=y;
       End;

       Var
          x     : byte;
          s     : string;
          l     : LONGINT;
          y     : longint;
          zs    : string;
          rsz   : longint;
          fi,fo : file;
       Label OpenF;
       Begin
          New(buffer);
          New(filx);
          New(dirx);
          New(fake);
          ofsscr:=ofs(screen);
          segscr:=seg(screen);
          LoadFont;
          MakeMans;
          GetDir(0,curd);
          romsize:=0;
          color(7,5);
          Window(1,1,26,12,'Главное меню');
       Repeat
          MorPhL(1,1,26,12);
          Color(7,5);
          WindowL('Main Menu');
               Menu(4,3,2,4,$5b,'Выбор      ПЗУ','Работа      с      ПЗУ','О
       программе','Вы'+char(208)+'ход','',20);
           case MenuP of
       0:
          Begin
           Repeat
            MorPhL(20,10,50,18);
            color(7,1);
            WindowL('Выбор типа ПЗУ');
                 Menu(23,12,2,3,$1b,'УФ      ПЗУ','ПЗУ      с       плавкими
       перемычками','Назад','','',26);
             case MenuP of
        0:
          Begin
           MorPhL(10,10,29,18);
           color(7,5);
           WindowL('УФ ПЗУ');
           Menu(13,12,2,3,$5b,'2176','573РФ','Назад','','',16);
            If MenuP<>2 Then
             Begin
              romsize:=8*1024;
              romname:=curd+'\amibio';
             End;

            If MenuP<>2 Then MenuP:=2 Else MenuP:=0;
          End;
        1:
          Begin
           MorPhL(40,8,70,16);
           Color(7,5);
           WindowL('ПЗУ с плавкими перемычками');
           Menu(43,10,2,3,$5b,'155РЕ3','556РТ6','Назад','','',16);
            If MenuP<>2 Then
             Begin
              romsize:=16*1024;
              romname:=curd+'\amibio1';
             end;
            If MenuP<>2 Then MenuP:=2 Else MenuP:=0;
          end;
         end;
       Until MenuP=2;
          MenuP:=5;
        end;
       1:
          Begin
           If romsize=0 Then
            Begin
             MorPhL(21,6,49,10);
             Color(7,4);
             WindowL('Варнинг!!!');
             Loc (25,8);
             Wrt ('Пипл!!! Выбери ПЗУ!!!!');
             WaitKey;
            End
           Else
       Repeat
           MorPhL(40,5,60,15);
           Color(7,1);
           WindowL('Работа с ПЗУ');

       Menu(44,7,2,4,$1b,'Чтение','Запись','Тестирование','Назад','Num5',12);

            Case MenuP Of
         0:
          Begin
           MorPhl(22,7,50,11);
           color(7,1);
           WindowL('Чтение ПЗУ');
           Loc(24,9);
           Wrt('-------------------------');
            For l:=0 To romsize Do
             Begin
              Loc(24+(l*24 div romsize),9);
              Wrt ('-'+chr(208));
              Color (3,1);
              Map;
              ReadROM(l);
             End;
            Color(7,1);
            MorPhL(0,0,77,24);
            Color(7,6);
            WindowL('Просмотр прошивки');
            MemEd(romname);
            Color(7,4);
            MorPhL(24,7,60,14);
            WindowL('Сохранить прочитанные данные?');
            Menu(40,9,3,2,$4b,'YES','NO','','','',6);
             Case MenuP of
          0:
            Begin
             MOrPhL(10,10,50,15);
             WindowL('Имя сохраняемого образа .ROM');
             y:=1;
             zs:='        ';
             Loc(26,12);
             Wrt('-');
       Repeat
             WaitKey;
             Loc(25+y,12);
              If (Key<>chr(13))And(Key<>chr(27)) Then
              If (Key<>chr(08)) Then
               Begin
                If y<>9 Then
                 Begin
                  zs[y]:=Key;
                  Wrt(key+'-');
                  inc(y);
                 End;
               End
              Else
               If y<>1 Then
                Begin
                 dec(y);
                 Loc(25+y,12);
                 zs[y]:=' ';
                 Wrt('-  ');
                End;
       Until (Key=Chr(13))or(Key=chr(27));
             If key=chr(13) Then
              Begin
               MorPhL(20,8,50,12);
               Color(7,4);
               WindowL('!!!!!!!!!!!!');
               Loc(30,10);
               Wrt('Жди давай!'+chr(208));
               Map;
               Assign(fo,zs+'.ROM');
                Rewrite(fo,1);
               Assign(fi,romname);
                Reset(fi,1);
                rsz:=FileSize(fi);
       Repeat
                y:=rsz;
                 If y>65535 Then y:=65535;
                  BlockRead(fi,buffer^,y);
                  BlockWrite(fo,buffer^,y);
                  rsz:=rsz-y;
       Until rsz=0;
               Close(fi);
               Close(fo);
       End;
       End;
       End;

        MenuP:=5;
       End;
       1:
        Begin
         Repeat
          MenuP:=1;
          MorPhL(20,2,50,22);
          color(7,1);
          WindowL('Выберите файл');
          FFile(s);
           If s<>'' Then
            Begin
             MorPhL(0,0,77,24);
             Color(7,6);
             WindowL('Редактировение прошивки');
             MemEd(s);
             Color(7,4);
             MorPhL(24,7,60,14);
             WindowL('Прошить ПЗУ?');
             Menu(40,9,3,2,$4b,'YES','NO','xxx3','xxx4','xxx5',6);
              If MenuP=0 Then
               Begin
                MorPhl(22,7,50,11);
                Color(7,1);
                WindowL('Прошиваем ПЗУ');
                Loc(24,9);
                Wrt('-------------------------');
                 For l:=0 To romsize Do
                  Begin
                   Loc(24+(l*24 div romsize),9);
                   Wrt ('-'+chr(208));
                   Color (3,1);
                   Map;
                   ReadROM(l);
                  End;
               End;
            End;
       Until MenuP<>8;
        end;
       2:
        Begin
         MorPhl(22,7,50,11);
         color(7,1);
         WindowL('Тестируем программатор');
         Loc(24,9);
         Wrt('-------------------------');
          For l:=0 To 1000 Do
           Begin
            Loc(24+(l*24 div 1000),9);
            Wrt ('-'+chr(208));
            Color (3,1);
            Map;
           End;
          Loc(23,9);
          Wrt(chr(209)+'  Все в порядке, аднака  ');
          waitkey;
        End;
       end;
       Until MenuP=3;
        MenuP:=5;
       end;

       2:
        Begin
         MorPhL(9,2,70,23);
         color(7,0);
         WindowL('О программе');
         Loc(10,10);
          For x:=1 To 60 Do Wrt(chr(210));
           Loc(12,4);
           Wrt('Дипломный проект "Лабораторный макет программатора ПЗУ"');
           Loc(11,6);
           Wrt('Это программка была  написана в среде Borland Pascal v7.0');
           Loc(13,8);
           Wrt('Программа расчита на роботу с 2 типами микросхем ПЗУ');
           Loc(36,12);
           Wrt('Авторы:');
           Loc(11,14);
           Wrt('Идея и текст программы:');
           Loc(25,15);
           Wrt('Дмитрий В. Румянцев');
           Loc(11,17);
           Wrt('Помощь в написание программы:');
           Loc(25,18);
           Wrt('Dead Emotion //HellraiseR Group');
           Loc(11,20);
           Wrt('Тестирование программы:');
           Loc(25,21);
           Wrt('Алексек А. Иванов');
           WaitKey;
         MenuP:=5;
        end;
        end
       until MenuP=3;
        MorPhL(13,7,13,7);
       asm
       mov ax,3
       int 10h
       end;
       end.