Тема для поклонников ZX SpectrumСегодня искал как затолкать Quick Commander от
Spectre(группа Optical Brosers) в *.trd образ и наткнулся на консольную утилиту
mctrd:
http://zx-pk.ru/showthread.php?t=10559https://github.com/samstyle/mctrdРазработка утилиты ведётся с 20090717.
Последний релиз: 20151122.
Утилита состоит из одного файла. Распространяется под лицензией GNU GPL v2.
С гитхаба выкачал архив.
Внутри архива всего-ничего:
$ unzip -v mctrd-master.zip
Archive: mctrd-master.zip
61bb1f58eb5ba988160edd9b29061d781bca77e5
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 2015-11-22 23:04 00000000 mctrd-master/
18092 Defl:N 6811 62% 2015-11-22 23:04 4e46f4a1 mctrd-master/LICENSE.txt
48 Defl:N 44 8% 2015-11-22 23:04 605358ed mctrd-master/Makefile
18442 Defl:N 4930 73% 2015-11-22 23:04 b2fe214b mctrd-master/main.c
-------- ------- --- -------
36582 11785 68% 4 files
Распаковал архив:
$ unzip -x mctrd-master.zip
Archive: mctrd-master.zip
61bb1f58eb5ba988160edd9b29061d781bca77e5
creating: mctrd-master/
inflating: mctrd-master/LICENSE.txt
inflating: mctrd-master/Makefile
inflating: mctrd-master/main.c
Установил gcc:
# apt-get install gcc3.4
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
binutils cpp3.4 glibc glibc-devel glibc-kernheaders kernel-headers-common
Следующие НОВЫЕ пакеты будут установлены:
binutils cpp3.4 gcc3.4 glibc glibc-devel glibc-kernheaders kernel-headers-common
0 будет обновлено, 7 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 9334kB архивов.
После распаковки потребуется дополнительно 35,7MB дискового пространства.
Продолжить? [Y/n]
В мэйкфайле, команда для компилляции
$ cat ./mctrd-master/Makefile
all : main.c
gcc -Wall -std=c99 -o mctrd main.c
Скомпиллировал бинарник:
# pwd
/usr/src
# gcc -Wall -std=c99 -o mctrd main.c
Время компилляции, меньше секунды.
Положил его в /usr/local/bin
# cp ./mctrd /usr/local/bin/
Добавил в .bash_profile путь:
$ echo 'PATH=$PATH:/usr/local/bin' >> ~/.bash_profile
Утилита при запуске без параметров вывела help:
$ mctrd
::: Usage :::
mctrd [-h][-z][-b][-n][-a num] command name1 [name2] [name3]
::: Keys :::
-a | --autostart NUM set autostart line number for basic file
-b | --basic add file to archive as basic
-h | --help show this page
-n | --no-head push file to TAP without header
-z | --hobeta pop/push file as hobeta (SCL, TRD only)
::: Commands :::
list <image> show image catalog
new <image> create new image (TAP, TRD, SCL: depends on extension)
add <file> <image> put file into image
pop <file> <image> [<outname>] extract file from image
rename <image> <oname> <nname> rename file inside image. oname = old name, nname = new name
Теперь можно работать с образами *.trd-дисков.
Несмотря на то, что компилляция оказалась простой как валенок, видно придётся внедряться в сборку rpm-пакетов.
Как и говорит help, можно создавать образы, извлекать из них файлы, ложить в них файлы, переименовывать файлы в образе.
Что можно делать утилитой mctrd?
Переложим, например, Quick Commander из *.scl-образа в создаваемый образ *.trd.
Архив QC_311.ZIP с командером распакуем в каталог QC_3_11
$ mkdir QC_3_11
$ unzip -x QC_311.ZIP -d ./QC_3_11/
Archive: QC_311.ZIP
inflating: ./QC_3_11/dos6_05e.txt
inflating: ./QC_3_11/dos6_10e.rom
inflating: ./QC_3_11/QC_3_11.rom
inflating: ./QC_3_11/QC_3_11.SCL
и перейдём в этот каталог
$ cd QC_3_11/
SCL, это образ для эмулятора spectrum-fuse, в котором содержится Quick Commander
$ mctrd list ./QC_3_11.SCL
Name Ext Start Size SLen
---------------------------
QC 3.11 B 503 503 61
QC 3.11 t 29816 40995 161
file_id d 31337 1515 6
Создадим временный рабочий каталог, скопируем в него образ *.scl и перейдём в этот каталог
$ mkdir 1
$ cp QC_3_11.SCL ./1
$ cd ./1
Извлечём в формате хобета из образа файлы коммандера
$ mctrd list ./QC_3_11.SCL
Name Ext Start Size SLen
---------------------------
QC 3.11 B 503 503 61
QC 3.11 t 29816 40995 161
file_id d 31337 1515 6
$ mctrd -z pop 'QC 3.11 .B' ./QC_3_11.SCL
$ mctrd -z pop 'QC 3.11 .t' ./QC_3_11.SCL
$ mctrd -z pop 'file_id .d' ./QC_3_11.SCL
Создадим новый образ *.trd (TR DOS)
$ mctrd new qc.trd
Файлы коммандера, которые мы извлекли из образа, добавим в созданный образ *.trd
$ ls
file_id .$d QC 3.11 .$B QC_3_11.SCL QC 3.11 .$t qc.trd
$ mctrd -z add QC\ 3.11\ .\$B qc.trd
$ mctrd -z add QC\ 3.11\ .\$t qc.trd
$ mctrd -z add file_id\ .\$d qc.trd
Файлы добавлены в образ
$ mctrd list qc.trd
Name Ext Start Size SLen Sec Trk
---------------------------
QC 3.11 B 503 503 61 0 1
QC 3.11 t 29816 40995 161 13 4
file_id d 31337 1515 6 14 14
и находясь в TR DOS, можно посмотреть (на клавише K токенизированная команда LIST) содержимое *.trd-образа.
Затем можно запустить Quick Commander (на клавише R токенизированная команда RUN), набрав в кавычках после команды RUN, имя файла с расширением B, в кавычках без расширения, учитывая регистр символов (в эмуляторе, кавычки набираются комбинацией клавиш Alt+p)
RUN "QC 3.11"
В TR DOS формат имени файла в формате 8+1, - 8 символов имя, один символ расширение файла.
После чего нажав Enter, через пару секунд получим в эмуляторе то, что на первом скриншоте.
Но запускать так командер очень неудобно.
Поэтому переименуем командер из QC 3.11 в boot
$ mctrd rename qc.trd 'QC 3.11 .B' 'boot .B'
Имя исполняемого файла переименовано
$ mctrd list qc.trd
Name Ext Start Size SLen Sec Trk
---------------------------
boot B 503 503 61 0 1
QC 3.11 t 29816 40995 161 13 4
file_id d 31337 1515 6 14 14
Теперь для запуска командера понадобится только команда RUN, - команда RUN без параметров, запускает файл с именем boot, - этот старт на втором скриншоте.
Клавиша Space в командере, отображает все файлы - эта клавиша триггер.
Жмём Space, видим файл file_id (скриншот 3), наводим на него курсор, жмём клавишу v и читаем о возможностях командера (скриншот 4), - перелистывание вперёд по Space, выход из просмотра - Enter.