Р. БАРТАШЮС

Компьютер БК-0010 в роли программатора ППЗУ

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

Но запрограммировать микросхемы ППЗУ достаточно сложно, если нет возможности сделать это на ЭВМ, располагая соответствующим программным и аппаратным обеспечением.

Нельзя ли для этих целей приспособить компьютер «Электроника БК-0010»? Ведь эта ЭВМ, можно твёрдо сказать, сейчас самая распространённая. Её можно встретить в школе, техникуме, ПТУ.

Да, оказывается, можно! Для этого необходимо, чтобы в БК была вставлена ПЗУ КР1801РЕ2 с зашитым языком программирования БЕЙСИК, введена программа и к порту БК была подключена аппаратная часть.

Программа предназначена для программирования ППЗУ с ультрафиолетовым стиранием типа К573РФ1 и К573РФ2(5). Если ввести небольшие изменения, можно запрограммировать ППЗУ и с плавкими перемычками. Для этого нужно изменить только алгоритм программирования.

Незапрограммированная микросхема ППЗУ с ультрафиолетовым стиранием имеет на выходах по всем адресам уровень логической единицы. Для записи в требуемые разряды логического нуля при установленном адресе на соответствующие выводы данных подаётся уровень логического нуля, а на остальные - логическая единица.

Программа предоставляет возможность вводить таблицу кодов с клавиатуры или с ППЗУ, корректировать содержание таблицы, выводить её в ППЗУ (т. е. программировать), а также сравнивать коды, содержащиеся в памяти ЭВМ и в ППЗУ. При несовпадении выдаётся сообщение об ошибке и адрес, по которому она обнаружена. При программировании ППЗУ типа К573РФ2(5) таблица кодов вводится за два прохода - первый раз с адреса 000Н по 3FFH, а во второй - с адреса 400Н по 7FFH.

Программа и массив данных занимают всю оперативную память БК.

После запуска программы выводится меню. Для того чтобы выбрать действие, достаточно набрать её номер в меню и нажать клавишу «Ввод». При неправильном наборе ввод придётся повторить. Введённый номер анализируется, и управление передаётся соответствующей подпрограмме. Если вы выбрали «ВВОД С КЛАВИАТУРЫ», то управление будет передано подпрограмме со строки 6000. Будет выдано сообщение «Выход: Q», номер строки кодовой таблицы и её содержание. Столбец, в который можно вводить код, индицирует знак «?». После ввода кода необходимо нажать клавишу «Ввод». Знак «?» переместится на следующую позицию. После ввода всей строки выводятся номер и содержание следующей. После ввода всей кодовой таблицы (64x16 кодов) управление возвращается в меню. Чтобы выйти из режима ввода с клавиатуры, достаточно вместо кода набрать Q.

В режиме ввода с ППЗУ управление передаётся подпрограмме со строки 4000. Выдаётся сообщение «Ждите...» (ждать придётся около минуты). В процессе считывания адрес ячейки выдаётся через порт (строка 4040) к ППЗУ. -52 - это адрес порта. Тогда через порт считывается содержание ячейки ППЗУ (строка 4060) и присваивается соответствующему элементу массива. После ввода всей кодовой таблицы управление возвращается в меню.

Если же вы выбрали режим корректировки, то необходимо набрать «4» и нажать клавишу «Ввод». Управление будет передано подпрограмме со строки 3000. Будет выдано сообщение, номер корректируемой строки таблицы кодов и её содержание. Перемещать по строке курсор можно клавишами ← и →. Чтобы заменить код, необходимо к нему подвести курсор, нажать клавишу «С» (появится знак «?») и набрать нужный код. После набора кода необходимо нажать клавишу «Ввод». Для возврата в меню достаточно нажать клавишу Q. Перемещаться по строкам таблицы можно клавишами «↑» и «↓».

Чтобы записать таблицу кодов в ППЗУ, достаточно нажать клавиши «3» и «Ввод». Тогда управление будет передано подпрограмме со строки 5000. Будет выдано сообщение «Ждите...» (ждать придётся около восьми минут). В процессе программирования последовательно обрабатываются все ячейки. Сначала через порт выдаётся адрес программируемой ячейки ППЗУ (строка 5060), стробируемый сигналом в линии ВД15. Для этого к значению адреса добавляется -32768. Тогда выдаётся код (строка 5080), стробируемый сигналами в линиях ВД12 и ВД14. Также выдаётся сигнал в линию ВД13, переключающий ППЗУ в режим программирования. В течение всего времени программирования присутствует сигнал в линии ВД11, который через ключ подаёт напряжение программирования на ППЗУ. После подачи всех необходимых сигналов требуется выждать некоторое время, определяемое в строках 5090 и 5100. Для надёжного программирования таблица кодов выводится в ППЗУ шесть раз. После завершения программирования выдаётся звуковой сигнал, и управление передаётся в меню.

После ввода таблицы кодов в ППЗУ можно сравнить, совпадает ли содержание таблиц кодов в памяти ЭВМ и в ППЗУ. Для этого необходимо набрать «6» и нажать клавишу «Ввод». Тогда будет считываться информация с ППЗУ и сравниваться с соответствующим элементом массива. При несовпадении кодов будет выдано сообщение «Ошибка по ХХХН», где XXX - адрес, по которому обнаружена ошибка. Если при контроле были обнаружены ошибки, можно попытаться повторить программирование. После нескольких неудачных попыток придётся сделать вывод о непригодности микросхемы ППЗУ.

При программировании ППЗУ типа К573РФ2(5) после ввода первой части таблицы кодов (с адреса 000Н по 3FFH) необходимо набрать «5» и нажать клавишу «Ввод». Тогда адреса будут исчисляться с 400Н до 7FFH и можно начать работу со второй половиной ППЗУ.

Подпрограмма со строки 1000 используется для преобразования введённого шестнадцатеричного числа в десятеричное представление. Подпрограмма со строки 2000 - для преобразования десятеричного числа в шестнадцатеричное представление.

Подпрограмма со строки 7000 выводит на экран задаваемую строку кодовой таблицы. Подпрограмма со строки 8000 обслуживает ввод шестнадцатеричного числа. Подпрограмма со строки 9000 помогает выделить адрес строки кодовой таблицы, представляя его более широкими символами, чем сами коды.

Необходимо сказать несколько слов об аппаратной части. Она собрана на небольшой печатной плате и содержит панели для ППЗУ К573РФ1 и К573РФ2 (РФ5), регистры для хранения данных и адреса. Регистры осуществляют и мультиплексирование входных кодов в зависимости от стробирующих сигналов. В авторском варианте аппаратной части для хранения данных использован регистр К589ИР12, а для хранения адреса - регистры К589ИР12 и К155ТМ7. На всех входных и выходных линиях поставлены инверторы К155ЛН1, так как в ЭВМ для связи с периферийными устройствами используется отрицательная логика. Также в устройстве есть ключ для подачи напряжения программирования на ППЗУ. Для работы аппаратной части необходимы такие напряжения питания: +5В, -5В, +12В и +26В. Кого интересует авторский вариант аппаратной части, обращаться по адресу: 232056, Литовская ССР, г. Вильнюс, ул. Виршулишкю, 59 кв. 1, Р. Барташюсу.

 

10 CLEAR 15
20 DIM D(63,15)
30 SI=0
40 CLS
50 CO=0
60 KF=SI *64
70 IF KF=0 THEN PRINT "К573РФ1(РФ2)" ELSE PRINT "К573РФ2(II)"
80 PRINT
90 PRINT
100 PRINT "    1 ВВОД С КЛАВИАТУРЫ"
110 PRINT
120 PRINT "    2 ВВОД С ППЗУ"
130 PRINT
140 PRINT "    3 ВЫВОД В ППЗУ"
150 PRINT
160 PRINT "    4 КОРРЕКТИРОВКА"
170 PRINT
180 PRINT "    5 РФ1(IРФ2) ИЛИ IIРФ2"
190 PRINT
200 PRINT "    6 КОНТРОЛЬ"
210 PRINT
220 PRINT
230 INPUT Т$
240 IF Т$="1" THEN GOSUB 6000
250 IF Т$="2" THEN GOSUB 4000
260 IF Т$="3" THEN GOSUB 5000
270 IF T$="4" THEN GOSUB 3000
280 IF T$="5" THEN GOTO 310
290 IF T$="6" THEN GOTO 330
300 GOTO 40
310 IF KF=0 THEN SI=1 ELSE SI=0
320 GOTO 40
330 CO=1
340 GOSUB 4000
350 GOTO 40
1000 T=1
1010 E=0
1020 W=0
1030 IF LEN(А$)=1 THEN 1200
1040 Y$=MID$(A$,T,1)
1050 U=VAL(Y$)
1060 C=0
1070 IF U<>0 THEN C=U
1080 IF Y$="A" THEN C=10
1090 IF Y$="B" THEN C=11
1100 IF Y$="C" THEN C=12
1110 IF Y$="D" THEN C=13
1120 IF Y$="E" THEN C=14
1130 IF Y$="F" THEN C=15
1140 IF T>1 THEN GOTO 1190
1150 W=C
1160 Y$=" "
1170 T=2
1180 GOTO 1040
1190 E=W*16+C
1200 RETURN
2000 L$=HEX$(B)
2010 RETURN
3000 I=KF
3010 CLS
3020 PRINT "ПЕРЕМЕЩЕНИЕ: ←,→,↑,↓; ЗАМЕНА: С ВЫХОД: Q"
3030 PRINT
3040 GOSUB 7000
3050 X=0
3060 K$=INKEY$
3070 IF K$="" THEN 3060 ELSE R=ASC(K$)
3080 IF R=81 THEN 3360
3090 IF R=67 THEN 3140
3100 IF R=26 THEN 3170
3110 IF R=27 THEN 3190
3120 IF R=25 THEN 3210
3130 IF R=8 THEN 3270 ELSE 3060
3140 GOSUB 8000
3150 D(I-KF,Х)=Е
3160 GOTO 3340
3170 I=I-1
3180 IF I<KF THEN I=KF ELSE 3340
3190 I=I+1
3200 IF l>KF+63 THEN I=KF+63 ELSE 3340
3210 J=J+3
3220 X=X+1
3230 IF J<=51 THEN 3260
3240 J=51
3250 X=15
3260 GOTO 3320
3270 J=J-3
3280 X=X-1
3290 IF J>=6 THEN 3320
3300 J=6
3310 X=0
3320 LOCATE J,3
3330 GOTO 3060
3340 GOSUB 9000
3350 GOTO 3010
3360 GOSUB 9000
3370 RETURN
4000 PRINT "ЖДИТЕ"
4010 FOR I=0 TO 63
4020 FOR J=0 TO 15
4030 N=I*16+J+KF*16
4040 POKE -52, N-32768
4050 IF CO=1 THEN 4100
4060 D (I,J)=PEEK(-52)
4070 NEXT J
4080 NEXT I
4090 RETURN
4100 IF D(I,J)=PEEK(-52) THEN 4070
4110 B=0
4120 B=I
4130 GOSUB 2000
4140 PRINT "ОШИБКА ПО"; L$;
4150 L$=""
4160 B=J
4170 GOSUB 2000
4180 PRINT L$;"H"
4190 GOTO 4070
5000 PRINT "ЖДИТЕ..."
5010 FOR W=0 TO 5
5020 FOR I=0 TO 63
5030 FOR J=0 TO 15
5040 N=I*16+J+KF*16
5050 POKE -52, -32768+2048
5060 POKE -52, N-32768+2048
5070 POKE -52, N+2048
5080 POKE-52, D(I,J)+30720
5090 FOR T=0 TO 50
5100 NEXT T
5110 NEXT J
5120 NEXT I
5130 NEXT W
5140 BEEP
5150 RETURN
6000 FOR I=KF TO 63+KF
6010 CLS
6020 PRINT "ВЫХОД: Q"
6030 GOSUB 7000
6040 J=6
6050 GOSUB 8000
6060 GOSUB 1000
6070 IF A$="Q" THEN 3360
6080 D(I-KF,(J-6)/3)=E
6090 J=J+3
6100 IF J>51 THEN 6110 ELSE 6050
6110 GOSUB 9000
6120 J=6
6130 NEXT I
6140 RETURN
7000 В=I
7010 GOSUB 2000
7020 PRINT AT(0,3);L$
7030 GOSUB 9000
7040 FOR J=0 TO 15
7050 В=0
7060 B=D(I-KF,J)
7070 GOSUB 2000
7080 PRINT AT(J*3+6,3);L$
7090 NEXT J
7100 J=6
7110 LOCATE 6,3,1
7120 RETURN
8000 LOCATE J-1,3
8010 INPUT A$
8020 PRINT AT(J-1,3); " "
8030 GOSUB 1000
8040 RETURN
9000 PRINT CHR#(155)
9010 RETURN

Performed by © gid, 2012-2022.