Р. БАРТАШЮС
Компьютер БК-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