Программатор ПЗУ (программный интерфейс)
Программный интерфейс был разработан с учетом всех его
эксплуатационных характеристик. Он должен отвечать следующим требованиям:
полнота и краткость отображаемой информации;
удобное расположение информации на экране;
оперативность работы.
Интерфейс программного обеспечения был построен по иерархической
структуре.
[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(achar(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 xf1yt1 Then dec(yf1,((yf1-yt1)Shr speed)+1);
If yf1xt2 Then dec(xf2,((xf2-xt2)Shr speed)+1);
If xf2yt2 Then dec(yf2,((yf2-yt2)Shr speed)+1);
If yf20 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='A')and(Upcase(Key)='0')And(Key='A')And(Upcase(Key)='0')And(Key='0')and(Key='A')and(Upcase(Key)='0')And(Key='0')And(Key='A')And(Upcase(Key)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 p320+15 then begin
inc(l1,16); p:=320; goto RePaINt; end; end;
$4B: begin if (p>0)or(l1<>0)then dec(p); if p319) 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]'.' 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 curp1 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.
Страницы: 1 , 2