Hello,PDP11!

 

Вчера вечером нашел интересную статью, в которой описывается разработка с помощью кросс-средств. Одной утилитой была bin2load, которая преобразует бинарный файл в понятный формат для SIMH. Утром полез в компиляторы, и тут первый облом - программа не читает бинари. Стал читать описание и долгое время провозился над подготовкой формата. Хрен там, simh ругается на контрольную сумму. Стал искать дальше, нашел еще одно описание:

Loader format consists of blocks, optionally preceded, separated, and
followed by zeroes. Each block consists of the following entries. Note
that all entries are one byte.
0001
0000
Low byte of block length (data byte count + 6 for header, excludes checksum)
High byte of block length
Low byte of load address
High byte of load address
Data byte 0
...
Data byte N
Checksum
The 8-bit checksum for a block is the twos-complement of the lower eight
sum bits for all six header bytes and all data bytes.
If the block length is exactly six bytes (i.e. only header, no data),
then the block marks the end-of-tape. The checksum should be zero.  If
the load address of this final block is not 000001, then it is used as
the starting PC.

Как назло, исходники давно исчезли. Другие поиски ни к чему не привели. Запустил DevC++ и стал с помощью отладчика искать, в чем причина. Нашел: программа считывает 6 байт из указанных 42 и плюется на процесс. Причина - указан режим открытия "r", а не "rb". Исправил, теперь программа выполняется. Но SIMH ругается на открытие файла - плохая контрольная сумма. Проверил запись - режим "w" вместо "wb". Исправил - бинарь загрузился и выполнился. Меня это порадовало, так как не радовал предложенный способ:

Стал разбираться с форматом .lda:

Блок, выделенный зеленым цветом(6 байт) 1,0, два байта - 6+длина блока, два байта - стартовый адрес загрузки.Красным выделен кодовый блок.Синий - контрольная сумма, которая считается как заголовок и кодовый блок. Записывается этот байт как 0-значение(? не проверял).
И на остаток фиолетовым цветом выделен тот же заголовок и контрольная сумма, которая и похожа на 0-(1+6+4)
Готовые файлы: pdp11asm, simh,bin2load и исходный текст.

Обычно я сдерживаю эмоции после зря потраченных  6 часов, но не в этот раз: адепты Си, пидоры вы гнойные, чтоб вам доставались такие малохольные выблядки на всю вечность.


Комментарии