vak: (Default)
В понедельник ожидается полное солнечное затмение. На видео показан путь тени по территории Америки. Вот данные по времени для города Салем в Орегоне:

Latitude: 44°56'34"N
Longitude: 123°02'06"W
Duration of Totality: 1m 54s
Partial phase start: 9:05:26AM (PDT)
Totality Start: 10:17:21AM (PDT)



Орегонские гаишники сделали полезный сайт для отслеживания трафика, с дорожными камерами.

vak: (Default)


Последнее интервью Андрея, 2014 год: «Жизнь сводится к набору микростимулов-похлопываний».

Предыдущее интервью, 2010 год: «Сущности контроля».

Я его больше вот таким помню.

vak: (Default)
Вчера произошло знаменательное событие: заработал восстановленный Паскаль-компилятор для БЭСМ-6. Вот сообщение от Леонида Брухиса [personal profile] spamsink в списке рассылки:

"Дорогие товарищи! Многоуважаемые гости!

Сегодня, ровно через 35 с половиной лет после даты имеющейся версии
(и, что знаменательно, в День археолога), достигнуто оживление Паскаль-компилятора
на уровне исходного текста:

РАSСАL СОМРILЕR 15.0 (15.02.82)
8435 LINЕS SТRUСТURЕ 1 305 0 0 11 10349 0 576 185 86
*САLL *РАSСОМ
РАSСАL ВАСК ТО LIFЕ (15.08.2017)
00001 1 0 РRОGRАМ МАIN(ОUТРUТ);
00007 2 2 ВЕGIN
00010 3 2 WRIТЕLN(’ С ДНЕМ АРХЕОЛОГА!’)
00025 4 0 ЕND.
*NО LО
*ЕХЕСUТЕ
С ДНЕМ АРХЕОЛОГА!
КОНЕЦ ЗАДАЧИ
Leo"

Несколько лет назад Лёня высказал "сумасшедшую" идею попробовать воспроизвести исходный текст компилятора, исходя из сохранившегося объектного файла. Сначала детранслируем бинарник в ассемблерный текст, и дальше полуручным методом восстанавливаем элементы языковых конструкций. Процесс небыстрый и крайне трудоёмкий, но вчера он завершился успехом: полученный паскалевский код был откомпилирован (старой версией компилятора от 15.02.82), и полученный компилятор версии 15.08.2017 смог странслировать и выполнить простую программу.

Подробные комментарии от Лёни:

"Технология следующая:

1. Детранслируем объектный модуль почти как это делал DTRAN, но превращая все обращения по регистру 8 в представления литеральных констант (с некоторыми догадками, где числа, а где текст) и рассылки данных - в присваивания.

2. С помощью скрипта на Перле итеративно улучшаем полученный код:
- превращаем обращения по регистру 1 в имена глобальных переменных и переводим их в мнемонические по списку
- переводим метки в мнемонические по списку
- находим границы процедур, их уровень вложенности, количество их параметров и локальных переменных по образцу вызова библиотечной функции сохранения фрейма,
восстанавливаем последовательность заголовков.
- превращаем обращения к памяти, индексированные по регистрам 1-6, в имена локальных переменных и псевдопеременных для результата функции.
- превращаем последовательности команд вида "сравнение/переход" в псевдокоманды выработки условного результата и перехода
(условно, НТЖ+ПО = "равно", ВЧ+ПЕ = "меньше", и т.п.).
- превращаем косвенную адресацию в индексный вид (например, МОД А+СЧ Б = СЧ Б[А])
- превращаем последовательности команд "стековой машины", работающих с сумматором, (т.е. начиная со СЧ и пока виртуальный стек не опустошится командами записи, перехода или вызова процедуры) в инфиксную форму; операции, использующие вызов служебных процедур (например, целочисленное деление или работа с битовыми множествами) тоже распознаются.
- еще много всяких мелочей в процессе, например деоптимизация "УИА куда(13)+ПБ проц" в "ПВ проц(13)+ПБ куда", и пр.
- распознаем границы операторов case

Выражения восстанавливаются практически полностью; например, в результате выполнения скрипта было [minel(l4var5z-intZero)+1..47];

В результате получается последовательность процедур, состоящая из линейных участков, состоящих из операторов присваивания и вызовов процедур, перемежаемая адресными метками и конструкциями вида
if (выражение) goto адрес

Операторы присваивания, вызовы процедур и выражения в условных операторах выглядели в результате скрипта примерно так же, как в окончательном тексте, разве что без признаков типов данных.

Ручной работы требовали восстановление условных операторов и циклов (я попытался было это делать автоматически, но в сложных случаях при использовании exit и goto код искажался, и я решил, что проще будет вручную, чем выяснять пост фактум, где что не так), разметка обращений к переменным типами данных, а также редкие нераспознанные операции типа работы с упакованными массивами (такое было только в одном месте).

Еще пригодны для декомпиляции программа PASHELP (она тривиальна, но полезна для понимания работы с объектными модулями) и программа PASDD1 - интерактивный отладчик."

Есть ощущение, что бэсмовский Паскаль-компилятор некоторым образом происходит от версии 1974 года для CDC-6000. Сравните:





Исходные тексты восстановленного Паскаль-компилятора можно посмотреть здесь: https://github.com/besm6/pascal-re/blob/master/pascompl.b6

Описание языка Паскаль-Монитор для БЭСМ-6: https://github.com/besm6/besm6.github.io/blob/master/wiki/pascal-monitor.txt
vak: (Default)
Кто сказал, что программа должна выглядеть, как смесь прозы с математикой? Вовсе необязательно! Вот вам язык программирования, на котором программу можно просто рисовать буковками и циферками. На видео показана программа, увеличивающая и печатающая целочисленный счётчик. Вот здесь можно посмотреть больше примеров и скачать исходные тексты: https://github.com/aaronduino/asciidots

vak: (Default)
Если у вас не открывается ссылка типа http://foo.bar.net/ по причине блокировки провайдером, попробуйте http://anonymouse.org/cgi-bin/anon-www.cgi/http://foo.bar.net/
vak: (Default)
В Прилуках на лавочке у родного подъезда, с полным комплектом детей и племянниц. Сейчас уже всех и не соберёшь в кучу.

vak: (Default)
Сегодня на фестивале древних компьютеров выступал Пол Лафтон, автор первой операционной системы для компьютеров Apple. Его пригласил Брюс Дэймер, хранитель частного компьютерного музея Digibarn, по инициативе которого некоторое время назад удалось восстановить и выложить в свободный доступ исходный код Apple DOS. Скачать можно здесь: ZIP 264 кбайт.

Стартовый экран Apple DOS 3.1:



Пол Лафтон:



Прикольно выглядит контракт на разработку:

vak: (Default)
Два года назад Би-Би-Си объявила амбициозный проект: одноплатный компьютер для обучения младших школьников программированию и электронике. Конечно, я тут же подписался на новинку. Три дня назад я наконец получил долгожданную платку.



На видео есть неплохой подробный обзор для начинающих:



Все эти навороты с Джаваскриптом, Питоном и Blocks забавные, конечно, но для для старпёров типа меня есть традиционный способ программировать на классическом C++, под обычным Линуксом. Установка на Ubuntu делается следующим образом.
$ sudo apt-get install python-setuptools cmake build-essential ninja-build python-dev libffi-dev libssl-dev srecord
$ sudo easy_install pip
$ pip install yotta
$ sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
$ sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
$ sudo apt-get update
$ sudo apt-get install gcc-arm-embedded
Скачиваем с Гитхаба примеры:
$ git clone https://github.com/lancaster-university/microbit-samples
$ cd microbit-samples
$ yt target bbc-microbit-classic-gcc
Компилируем пример "Hello world":
$ yt build
Загружаем прошивку в плату, подключенную через USB:
$ cp ./build/bbc-microbit-classic-gcc/source/microbit-samples-combined.hex /media/$USER/MICROBIT/
Исходный код примера "Hello world" выглядит так:
#include "MicroBit.h"

MicroBit uBit;

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();

    // Insert your code here!
    uBit.display.scroll("HELLO WORLD! :)");

    // If main exits, there may still be other fibers running or registered event handlers etc.
    // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then
    // sit in the idle task forever, in a power efficient sleep.
    release_fiber();
}
vak: (Default)
(Я имел наслаждение слышать этот венок сонетов в исполнении автора [personal profile] lxe. Размещу у себя, для постепенного осмысления.)

Чуть дымка. Одуванчик за стеклом
На ниточке порхает, несгораем.
Последняя равнина пред горами –
Уж тени прячут слабый, но уклон,

Уж лампа ярче неба за углом.
Я вдоль дверей иду, не отпирая.
Земля какая – первая? Вторая? –
Чей профиль мне принять за эталон?

Как прежде зодчих скалы-образцы
Рисуют вал, ристалище и рынок,
Как почва начинается с пыльцы,

Ржавеет рельс, но полон лес тропинок,
И скрипка у подножия стены,
И темные века населены.

Полный текст )
vak: (Default)
Я наконец осилил back annotation в Верилоге. Это когда синтезируется прошивка для Xilinx FPGA, и на этапе, когда уже известно точное расположение всех элементарных примитивов, образуется файл с описанием всех задержек для каждого провода и логического вентиля. Даже есть такой стандартный формат SDF, или Standard Delay Format. После этого синтезированная схема преобразуется обратно в Верилог (структурный) и симулируется, загружая SDF-файл как набор параметров тайминга. Предполагается, что временная диаграмма такой симуляции будет примерно соответствовать реальному железу.

Вот что я получил для упомянутого сигнала цикла вычисления наибольшего общего делителя. Цикл в 20 итераций должет выполняться за 99500 пикосекунд, или почти ровно 100 нсек.



В реальности на осциллографе имеем 500 нсек.



Как-то точность времянки не особо радует. Плюс-минус порядок получается.
vak: (Default)
Вот такую ящерицу встретили сегодня на тропе Wilder Ridge Loop. Интересно, что при перемещении она почти не пользуется лапами, а вместо этого извивается всем телом, как змея.

vak: (Default)
"Иногда летишь в электрическом небе
и думаешь - скорее бы я упал.
Иногда проснёшься в кресле президента
и плачешь, сам не зная, как сюда попал."

Эта строчка из гребенщиковской песни "Феечка", оказывается, отсылает к хайку Владимира Шинкарёва, известного зачинателя движения митьков.

"Проснулся Федор с сильного похмелья
лежит в саду японском под сакурой,
и плачет, сам не зная, как сюда попал."

vak: (Default)
До сих пор существует мнение, что язык VHDL является обязательным для военных разработок в США. На самом деле с 1997 года это не так.

"In early 1995, DoD standard MIL-STD-454L was replaced and the use of VHDL was no longer mandated. Instead, the new wording stated that ASIC designs “should be documented” by means of VHDL. By 1997 even this suggestion was removed."

"Who is still using VHDL? In 2015, the US appeared to be 80–90% Verilog/SystemVerilog. There are certain US military and aerospace vendors continuing to use VHDL, despite the lack of a DoD mandate. Europe used to be a huge VHDL supporter, but this is a legacy issue now and there is very little new VHDL being written. There’s little VHDL usage in India/Asia, as these are historically Verilog. When VHDL was mentioned to the Broadcom team in Israel, there were chuckles."

Вот хорошая статья про историю языков и текущее состояние: http://trilobyte.com/pdf/golson_clark_snug16.pdf
vak: (Default)
Так выглядит сигнал цикла вычисления асинхронного НОД на чипе Xilinx Artix-7. Сигнал сильно смазанный, увы, так как мой осциллограф Rigol DS1102E имеет полосу пропускания всего 100МГц.

Async GDC(20,1) on Rigol DS1102E scope
vak: (Default)
Флопики давно отжили своё. Однако для любителей древних компьютеров и прочей старины есть выход: фирма Gotek производит устройства, заменяющие стандартный дисковод, но в качестве носителя использующие обычную USB-флешку.



Hervé Messinger разработал альтернативную прошивку для этого девайса, и выложил исходные коды на Гитхаб. Так что теперь каждый имеет возможность приспособить флопик для своего любимого устройства, к примеру для Амиги или БК-0010. На видео показан процесс обновления прошивки.