Кроссассемблер ЭВМ Д3-28

Сергей Журавлев

Среди найденного мной материала по ЭВМ Д3-28 наблюдается крайняя скудность средств разработки програмного обеспечения Д3-28 на базе современных ПК. Можно отметить «On_Line дизассемблер Д3-28» и «Дизассемблер Д3-28 на базе x86» в среде Python. С другой стороны, на просторах интернета много литературы по внутреннему устройству Д3-28, структуре процессора и системе команд, а также наличие в Сети эмуляторов машины. Этот факт дает надежду на вторую жизнь этого проекта в современной технической реализации. Нехватку софта можно устранить разработкой кроссплатформенного ПО, используя современные машинные языки программирования и попытаться адаптировать уже наработанное ПО к использованию на платформе Д3-28.

Этот путь я реализовал созданием таблицы команд Д3-28 для табличного мультипроцессорного ассемблера (условно-бесплатный дистрибутив TASM – табличный ассемблер). Базовый дистрибутив от разработчика доступен на Гитхабе.

Особенностью данного ассемблера является использование таблиц команд и мнемокодов, которые имеют открытый формат и могут при необходимости создаваться с нуля самим пользователем. Это позволяет успешно использовать ТАSМ для программирования даже тех процессоров, таблицы которых отсутствуют в комплекте от разработчика.

Из нескольких вариантов TASM, найденных в Сети, я использовал вариант, запускаемый в среде Windows 7,10. Таблица команд Д3-28 – файл TASM328.TAB составлен и содержит машинные коды и команды ассемблера процессора машины Д3-28, предельно приближенные к написанию в «Справочнике программиста» И5М3.857.100 Д3.
Для понимания формата файла начальный и конечный фрагменты таблицы команд TASM328.TAB приведены ниже:

«TASM D3-28 Assembler. «
/************************************************************************
/* $Id: tasm328.tab 1.2 1024/04/08 14:31:22 toma Exp $
/************************************************************************
/* This is the instruction set definition table
/* for the D3-28 version of TASM.
/* This table authored and submitted by ZHS.
/*
/* See TASM manual for info on table structure.
/*
/*INSTR ARGS OP BYTES RULE CLASS SHIFT OR */
/*——————————————-*/
ABS X 67 1 NOP 1
ADD X,C* 40 2 NOP 1
ADD X,@Y 50 1 NOP 1
ADD X,Y 60 1 NOP 1
…………………………………………………………….
/*——————————————-*/
/*Pref0413
/*——————————————-*/
JMP @R* 4D 2 NOP 1 00 00
JSR @R* 4D 2 NOP 1 00 10
CMD R* 4D 2 NOP 1 00 20
MOV R*,X 4D 2 NOP 1 00 30
MOVD R*,X 4D 2 NOP 1 00 40
MOV R*,BD 4D 2 NOP 1 00 50
MOV R*,BP 4D 2 NOP 1 00 60
MOV S*,M 4D 2 NOP 1 00 70
ABS R* 4D 2 NOP 1 00 80
NEG R* 4D 2 NOP 1 00 90
CLR R* 4D 2 NOP 1 00 A0
MOV X,R* 4D 2 NOP 1 00 B0
MOVH X,R* 4D 2 NOP 1 00 C0
MOV BD,R* 4D 2 NOP 1 00 D0
MOV BP,R* 4D 2 NOP 1 00 E0
MOV M,S* 4D 2 NOP 1 00 F0

Для компиляции ассемблерной программы (например test-017.txt), кроме файла листинга в рабочий каталог необходимо поместить файл TASM328.TAB и TASM.EXE.
Необходимо создать
BAT-файл компиляции со следующими командами:

tasm -328 -g3 -c test-017.txt
pause

В результате компиляции получаем файл листинга ошибок test-017.lst и BIN-файл test-017.obj кодов исполняемого модуля.

К сожалению, в ассортименте выходных файлов кроме BIN, HEX и S9 форматов не нашлось 🙂 формата данных ЭВМ Д3-28. Для ввода написанных программ в эмулятор Д3-28 я написал программу конвертации Bin2Txt.EXE на PureBasic (исходники прилагаются в папке File_pb). Для конвертации необходимо создать BAT-файл преобразования из test-017.obj в файл программы, понятной Д3-28 Obj2Txt.bat :

Bin2Txt.exe test-017.obj
pause

В результате работы BAT-файла получаем файл OutFile.txt, который можно переименовать и применить для ввода в эмулятор машины.

Все необходимые файлы для знакомства с TASM находятся здесь.