vak: (Default)
Народ заметно продвинулся в восстановлении прошивки цифровой рации GD-77.

https://www.rogerclark.net/gd-77-reverse-engineering-progresses/

vak: (Default)
"Зимой 1972 года Сергей Алексеевич лежал с воспалением легких, когда узнал, что решение копировать американскую машину принято окончательно. Он встал с постели и отправился к министру, чтобы убедить его не совершать ошибку, которая отбросит страну на годы назад. Лебедев прождал в приемной больше часа. Министр его не принял." (из статьи Елены Литвиновой)

В 1973 году ИТМиВТ под руководством Лебедева разработал проект новой ЭВМ БЭСМ-10, продолжающей успех БЭСМ-6. Проект не был одобрен высшим начальством в министерстве.

В 1974 году Сергей Алексеевич Лебедев умер. БЭСМ-10 стала последним проектом его жизни.

Добрые люди оцифровали и выложили проект БЭСМ-10 на сайте besm-6.ru. Читать его несколько трудновато из-за жёлтого фона. Я переделал документ в ч/б формат. Пролистать и скачать можно здесь: https://goo.gl/LLdTtC

vak: (Default)
Я неоднократно замечал эффект: как только в работе намечается положительный прорыв, качественный переход на новый уровень или успех в реализации гениальной идеи, вдруг всё начинает обламываться по второстепенным причинам. Грипп, авария канализации, перестановки начальников - находится куча обстоятельств, отодвигающих, а иногда и устраняющих всякий прогресс.

Оказывается, Стругацкие давно сформулировали это явление природы как "закон Вечеровского", в повести "За миллиард лет до конца света".

По сути это простое следствие из второго закона термодинамики о возрастании энтропии. Творческая деятельность приводит к локальному понижению энтропии, поэтому появляется компенсирующее давление, старающееся вернуть энтропию к естественному уровню. Чисто природное явление, ничего личного.

"Если бы существовал только закон неубывания энтропии, воцарился бы хаос. Но, с другой стороны, если бы существовал или хотя бы возобладал только непрерывно совершенствующийся и всемогущий разум, структура мироздания тоже нарушилась бы. Это, конечно, не означало бы, что мироздание стало бы хуже или лучше, оно бы просто стало другим, ибо у непрерывно развивающегося разума может быть только одна цель: изменение природы Природы. Поэтому сама суть закона Вечеровского состоит в поддержании равновесия между возрастанием энтропии и развитием разума."
vak: (Default)
МЭСМ-6 уже проходит несколько тестов: работают команды uj, vtm, utm, mtj, vzm, v1m, j+m, vjm, vlm, utc, wtc.

Я добавил в фазу decode автоматическое приращение счётчика команд (PC), теперь некоторые команды выполняются за один такт (vtm, utm, mtj. j+m).

Описание микроархитектуры по мере разработки постепенно образуется на странице: https://github.com/besm6/mesm6/wiki/Microarchitecture
vak: (Default)
За сегодняшний день мы с Лёней общими усилиями отсканировали две редчайшие книги: описания ЭВМ БЭСМ-1.

   

С. А. Лебедев и В. А. Мельников, "Общее описание БЭСМ и методика выполнения операций", Москва 1959

П. П. Головистиков, А. Н. Зимарев, К. С. Неслуховский, "Арифметическое устройство и устройство управления БЭСМ", Москва 1960

Первая книжка описывает систему команд и алгоритмы вычислений, вторая в основном схемотехнику.
vak: (Default)
Зашёл [personal profile] spamsink в гости, и мы с ним разобрались, как в сканере задействовать автоматическое устранение искривлений страницы. К примеру, вот англоязычный оригинал вышеупомянутой главы из книги Уэзерелла, которая называлась "A Code of Dishonor, or... Mathematical Cryptanalysis" (PDF).

Текст для расшифровки:
AZEXQ KOAIL CMKPA TBTZU DZKRK KZTZX BYZUO BCCCV ARVTZ MLYHM TROPE
OAZKI CHZTX BQEYG MMZTO QRDXX TPHMA EETOU OSIZT MFYHB EHGVU KJROP
ERWSE LXJOL JJXGU QLAHY DSZHO QYXKJ YDLEK GOATR CDKRM JYOPH OMMZT
NNQNJ QCOVO KYTOZ RGLXE OMYTT TRYSN QNVBY KPPTL UKMRP YJZJG VQZZE
XQPOM JCEPF ICJVC LEGWJ YOPHO MMZTE RJHVQ COVZP TBHPU QAPSK BFTMS
DCMYZ APSRS SDKVU ROART VVPLF GYCCC VARVP RAOQO BVSJX JORSE IZUDY
VUKLB PMEGO DNQNJ ERGUG YLROP EQNJX TPHMA EWCFN GLPSH PQZZX OQXJZ
ZTBCW RFTAB PCADK ATRSU DLICO CQOYI RYEYD VJSON SIEVS JLAFR ASOOK
YMTIK YXAOL JCDGV EZBYI ZVOYI LLZYM LVSJD SHLIG AXCZP TBAPR BTACC
JYHZN ZYSYT ZBYZP BHBVC QCCRY HUNER BTTZR OARMJ YCMYN KAUYM AQNJC
      ZTGYA XPIPE OKVBC SCTZE UKMRP ZBCKD SMBJS JEZGY PKYSK
Подсказка: если кто захочет решить задачу, вот что должно получиться в результате расшифровки.

При сравнении текстов оригинала и перевода обнаруживаются забавные расхождения. Например, оригинал:



Перевод:


В региональном центре Макдональдс не было ничего вычислительного: это фантазии (или юмор) переводчика.
vak: (Default)
Сваял на скорую руку вызывалку, которая даёт возможность транслировать исходники на языке БЕМШ и превращать их в бинарные файлы в удобном формате. После этого можно их грузить в RTL МЭСМ-6 и выполнять.

Пример программы на БЕМШе:
начало	старт	1		
	уиа	0(2)		
	пв	повтор(1)	
повтор	слиа	-1(1)		
	слиа	-1(2)		
	уии	3(1)		
	пио	ошибка(3)	
	сли	(2)		
	пино	ошибка(3)	
	слиа	1(1)		
	цикл	повтор(1)	
	слиа	-1(2)		
	пио	начало(2)	
ошибка	стоп			
	пб	начало		
	финиш	
Вызываем автокод:
$ bemsh-to-oct pprog01.bemsh
File pprog01.bemsh succesfully compiled into pprog01.oct
Полученный бинарник:
i 00001 02 24 00000 01 31 00002
i 00002 01 25 77777 02 25 77777
i 00003 01 044 0003 03 34 00007
i 00004 02 045 0000 03 35 00007
i 00005 01 25 00001 01 37 00002
i 00006 02 25 77777 02 34 00001
i 00007 00 33 00000 00 30 00001
Попутно также образуется файл листинга:
ИПМ МАКРО-БЕМШ ВЕР.06/78
АРАП ВАР.04/78
------------------------------------------------------------------
ВВД◇◇◇
ТРН◇◇◇
0-0
ПЕЧМАК
БТМАЛФ
ЗОНГП 270000
НАЗ   000001
КНЦ◇◇◇
МАКРОРЕДАКТОР ОТ  20.06.78
001130-КОЛИЧ ЯЧ ГС
                                           МАКРОМАШИНА ОТ 1.11.78

ИПМ МАКРО-БЕМШ ВЕР.06/78      НАЧАЛО   СТР 0001
ОШИБКИ   НПК  СВОБ ПЕРЕМ АДРЕС КОМАНДА    А ИСП N ГЕН N ИСХ МЕТКА  ОПЕРАЦИЯ ОПЕРАНД   КОММЕНТАРИЙ
                                                 0001  0001 НАЧАЛО СТАРТ 1
         001             00001 02 24 00000       0002  0002        УИА   0(2)
                               01 31 00002       0003  0003        ПВ    ПОВТОР(1)
                         00002 01 25 77777       0004  0004 ПОВТОР СЛИА  -1(1)
                               02 25 77777       0005  0005        СЛИА  -1(2)
                         00003 01 044 0003       0006  0006        УИИ   3(1)
                               03 34 00007       0007  0007        ПИО   ОШИБКА(3)
                         00004 02 045 0000       0008  0008        СЛИ   (2)
                               03 35 00007       0009  0009        ПИНО  ОШИБКА(3)
                         00005 01 25 00001       0010  0010        СЛИА  1(1)
                               01 37 00002       0011  0011        ЦИКЛ  ПОВТОР(1)
                         00006 02 25 77777       0012  0012        СЛИА  -1(2)
                               02 34 00001       0013  0013        ПИО   НАЧАЛО(2)
         002             00007 00 33 00000       0014  0014 ОШИБКА СТОП
                               00 30 00001       0015  0015        ПБ    НАЧАЛО
                                                 0016  0016        ФИНИШ
НАЧАЛО   НАМ=00001   ДИАП ЗАГР=00001-77771  ДЛИНА МОДЛ=00001  ДЛИНА ПРОГ=00007 ВХОДН=00001 ВНЕШН=00000 ЧИСЛО МЕТОК=00004
***********
ЧИСЛО ОШИБОК=0000. МАКС СЕРЬЕЗН=0.
ЗАГР: 12.78
ЗОНГП=270000  СВ.ЗОНА = 270001  АМИН=00001 АМАКС=00007 АСВОБ=00010

 КОНЕЦ ЗАДАЧИ
 02201  00 074 0000	*74
Предварительно нужно установить симулятор dispak.

Описание автокода БЕМШ можно посмотреть здесь: PDF
vak: (Default)
Процессор МЭСМ-6 научился извлекать команды из памяти, и уже пытается их выполнять. На скриншоте показана трассировка выполнения первой пультовой программы. Серым цветом показаны микрокоманды, зелёным - изменение состояния регистров, коричневым - команды БЭСМ-6. Пока все команды выполняются как NOP.

vak: (Default)
Нарисовал схему формирования микрокоманд для проекта МЭСМ-6.



Подробности здесь: https://github.com/besm6/mesm6/wiki/Microarchitecture
vak: (Default)
Как-то незаметно прошло мимо меня: КЭМЗ вместе с Миландром таки выпустили микросхему-контроллер синхронно-временного протокола (TTP), которую я разрабатывал десять лет назад в ИТМиВТ. На этой штуке можно строить распределённые системы управления жёсткого реального времени.



Статья 2013 года в журнале Control Engineering Россия: https://www.controlengrussia.com/promy-shlenny-e-seti/protokol/

Где-то у меня лежит спецификация микросхемы и тесты нижнего уровня.
vak: (Default)
Разработка цифровых схем с микропрограммным управлением была модной в 60-70-е годы прошлого века. Выпускались даже специальные серии микросхем, типа Am2900 (передранные в Советском Союзе под именем КМ1804) и другие. Многие первые компьютеры и микропроцессоры были микропрограммно управляемыми, такие как IBM/360, PDP-11, VAX, 6502. С изобретением RISC микропрограммный подход перестал быть популярным, но тем не менее может иметь свою область применения.

Опишу здесь простейший вариант цифровой управляющей системы с микропрограммным управлением.

Предположим, у нас есть некий внешний объект, которым можно управлять с помощью трёх цифровых (двоичных) сигналов P, Q, R. Своё состояние объект сообщает в виде трёх тругих цифровых сигналов X, Y, Z.



Построим схему, которая будет управлять сигналами P Q R, в зависимости от сигналов X Y Z. От тактового генератора, на каждом следующей положительном фронте синхросигнала значения управляющих сигналов будут изменяться.

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



Теперь определим формат микрокоманды. Для каждого управляющего сигнала P Q R делаем однобитовое поле, определяющее значение этого сигнала. Чтобы программа могла ветвиться, добавляем поле логического условия, зависящего от входов X Y Z, при котором происходит переход по заданному адресу (иначе переходим к следующей команде). И последнее поле команды - адрес для перехода.

Вычислим размер команды. Для трёх входных переменных существует 2^2^3 = 256 возможных логических условий, то есть надо 8 бит для поля условия. С адресом мы уже определились: 10 бит. Всего получается 3 + 8 + 10 = 21 бит для команды. Итого подребуется ПЗУ размером 1024*21 = 21504 бит.



Рисуем полную схему. Перед регистром PC добавляем мультиплексор, который выбирает значение адреса следующей команды и управляется блоком проверки условия. Выбирается либо следующий адрес PC+1, либо адрес перехода из поля текущей команды.



По такой схеме устроены практически все микропрограммные системы, с небольшими усложнениями. Дальше попробуем применить её для процессора МЭСМ-6.

Литература по теме: "Bit-Slice Microprocessor Design", русский перевод Мик Дж., Брик Дж. "Проектирование микропроцессорных устройств с разрядно-модульной организацией".
vak: (Default)
Человек, который сделал первый шелл, то есть командную оболочку для компьютера: Луи Пузен. Он же изобрёл пакетную передачу данных, и считается одним из основателей интернета.
vak: (Default)
Reuters пишет, что Живой Журнал (и весь Рамблер) переходит в собственность Сбербанка.
vak: (Default)
Опишу здесь "щадящий" метод сканирования книг и документов, не требующий расшивания и даже механического контакта со страницами.

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

Приобрёл сканер, не требующий физического контакта с объектом: CZUR ET16 Plus. Фактически это умная 16-мегапиксельная фотокамера с подсветкой и лазерной наводкой на резкость. Притом софт работает на Маке, что для меня критично. Особенность: подключать к компьютеру надо родным USB-кабелем, иначе будут глюки.



Шаг 1: сканируем, причём для экономии сразу в чёрно-белом режиме. Титульную страницу можно в цвете. Каждая страница в максимальном разрешении образует отдельный файл типа image01234.jpg размером один-два мегабайта. Если непосредственно запихнуть их в PDF, документ в 172 страницы займёт 240 мегабайт. Это слишком расточительно, будем мудрить.

Шаг 2: преобразуем страницы в формат PNG, попутно уменьшая разрешение в два раза. Используем для этого редактор GIMP в пакетном режиме. Создаём файл ~/.gimp-2.8/scripts/batch-to-png.scm со следующим содержимым:
(define (batch-to-png infile outfile ratio)
    (let* (
            (image (car (gimp-file-load RUN-NONINTERACTIVE infile infile)))
            (drawable (car (gimp-image-get-active-layer image)))
            (cur-width  (car (gimp-image-width image)))
            (cur-height (car (gimp-image-height image)))
            (width      (* ratio cur-width))
            (height     (* ratio cur-height))
        )
        (gimp-image-scale image width height)
        (gimp-convert-indexed image NO-DITHER WEB-PALETTE 256 0 0 "")
        (file-png-save 1 image drawable outfile outfile 1 9 1 1 1 1 1)
        (gimp-image-delete image)
    )
)
После этого выполняем скрипт:
for infile in image*.jpg
do
    outfile=`basename $infile .jpg`.png
    gimp -i -b '(batch-to-png "'$infile'" "'$outfile'" 0.5)' -b '(gimp-quit 0)'
done
Получаем набор файлов image*.png размером примерно в 14 раз меньше исходного. Уже хороший выигрыш.

Можно бы ещё сэкономить, если умудриться убрать с изображения лишний шум. Я пытался задействовать фильтр Гаусса:
        (plug-in-sel-gauss RUN-NONINTERACTIVE image drawable 5.0 178)
Не могу сказать, что доволен результатом. Хорошо бы подобрать другой фильтр, способный отфильтровать ненужные точки и штрихи, но не нарушающий качество букв текста.

Шаг 3: Преобразуем страницы в PDF.
for infile in image*.png
do
    outfile=`basename $infile .png`.pdf
    convert $infile $outfile
done
Шаг 4: Объединяем файлы страниц в единый PDF.
pdftk image*.pdf output document.pdf
Результат вы можете видеть здесь: СВС-система-команд.pdf (23 мегабайта)

Для сравнения, вот версия с гауссом на втором шаге, но без уменьшения разрешения: view (40 мегабайт)
vak: (Default)
Прикольная табличка: системные вызовы Линукса и их коды на разных архитектурах.

https://fedora.juszkiewicz.com.pl/syscalls.html

Для сравнения, таблицы системных вызовов RetroBSD и LiteBSD:

RetroBSD sys/kernel/init_sysent.c

LiteBSD sys/kern/init_sysent.c