СОДЕРЖАНИЕ

ОСНОВНЫЕ НАПРАВЛЕНИЯ ПРИМЕНЕНИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ В УЧЕБНОМ ПРОЦЕССЕ	
1. ОБЩИЙ РАЗДЕЛ	
1.1. Характеристики аппартных средств вычислительной техники	
1.2. Характеристики программных средств вычислительной техники	
1.3. Постановка задачи	
2. СПЕЦИАЛЬНЫЙ РАЗДЕЛ	
2.1. Разработка алгоритма программного обеспечения	
2.2. Разработка универсальной управляющей программы	
2.3. Разработка программного интерфейса	
2.4. Описание  процесса отладки	
2.5. Разработка эксплуатационно-методической документации	
2.6. Результаты испытаний	
3. ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКИЙ РАЗДЕЛ	
3.1. Оценка издержек на разработку программного интерфейса для программатора ПЗУ	
3.2. Анализ эффективности внедрения разработанной программы в  учебный процесс	
4. МЕРОПРИЯТИЯ ПО ОХРАНЕ ТРУДА. БЕЗОПАСНОСТЬ ТРУДА ПРИ ОБСЛУЖИВАНИИ ПРОГРАММАТОРА	
4.1 Требования безопасности к техническим средствам ПЭВМ	
4.2. Требования безопасности к микроклимату в учебных лабораториях	
4.3. Меры безопасности при сервисном обслуживании программатора.	
ПРИЛОЖЕНИЕ 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.
2.2.1. 	Процедура WaitRt - ждет вертикального обратного хода луча
2.2.2. 	Процедура Color - установка цвета          
Таблица 2.1
Переменные используемые в процедуре Color

Переменная	Назначение	
C1	Цвет символа	
С2	Цвет экрана	
2.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 - ожидание нажатия любой клавиши.
2.2.15. 	Процедура Window - создание окон.
Таблица 2.3
Переменные используемые в процедуре Window

Переменная	Назначение	
XUL	Позиция левого верхнего угла  по X	
YUL	Позиция левого верхнего угла  по Y	
XDR	Позиция правого нижнего угла  по X	
XDR	Позиция правого нижнего угла  по Y	
2.2.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 получаемого окна	
2.2.17. 	Процедура MorphL - создание эффекта “Морфий” с последними координатами.
Таблица 2.5
Переменные используемые в процедуре MorphL

Переменная	Назначение	
XF1	Последняя позиция левого верхнего угла  по X	
YF1	Последняя позиция левого верхнего угла  по Y	
XF2	Последняя позиция правого нижнего угла  по X	
YF2	Последняя позиция правого нижнего угла  по Y	
2.2.18. Процедура WindowL - создание окна с последними координатами.
2.2.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. Разработка программного интерфейса

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

Рис. 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	
Расчет сырья и материалов

Наименование	Ед. Измерения	Цена, 
руб.	Норма расходов,
шт.	Стоимость,
руб.	
Операционная система MS-DOS 6.20	шт.	342000.00	1	342000.00	
Язык программирования Borland Turbo Pascal v7.0	шт.	570000.00	1	570000.00	
Итого:	912000.00	
ТЗР=	
(3.1)	
ТЗР=912000.00*1%/100%=9120.00 руб.
Ст.I=	
(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=	(3.3)	
Ст.3== 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. Полная себестоимость
Пол.Себ.=	(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 ампер) отвечает требованиям электробезопасности. 
Должны быть использованы сетевые предохранители в стандартных держателях.
 Напряжения и температуры в остальных блоках лабораторного макета не представляют опасности и не требуют особых мер предосторожности.
Так как программатор взаимодействует при работе с ПЭВМ, а ПЭВМ является электроустановкой, то к ней предъявляются требования соблюдения всех параметров электробезопасности согласно ТУ на ПЭВМ. Вредными факторами для человека являются:
мягкое рентгеновское излучение экрана;
мерцание экрана с частотой кадровой развертки;
электростатическое поле вокруг экрана;
ультрафиолетовое излучение экрана.

СПИСОК ЛИТЕРАТУРЫ

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