Занимаясь проверкой программ со Специалиста на своём Лике я испытал неудобство из-за отличия форматов. Собственно, эта тема и является результатом таких проверок. И вот если один-два файла по-быстрому руками ещё можно откорректировать, но далее это уже превращается в настоящий геморрой. А каких-то инструментов для автоматизации этого процесса нет. Наверное, каждый сам для себя пишет подобные утилиты. Вот и я в итоге решил упростить себе жизнь и написал программу на Python.
Данный скрипт принимает файлы RKS или любые подходящие по размеру бинарные файлы и преобразует их в RKS, пригодные для загрузки в Монитор Лика на эмуляторе. Также есть возможность дополнительно сохранить и WAV-файл, который можно затем загрузить в настоящий компьютер, например, через смартфон, а также, например, в Emu80.
Подробнее про имена файлов. RKS для Лика содержат внутри себя имя файла, которое при загрузке в компьютер по директиве I обязательно нужно указывать. По умолчанию имя берётся из недр входного RKS, если это RKS с заголовком, то есть который загружается в Специалист с помощью директивы I Монитора. Если это безымянный файл, то имя формируется из имени входного файла. Так как у Специалиста и, соответственно, у Лика используется кодировка КОИ7Н2, где отсутствуют строчные буквы, то все строчные русские буквы преобразуются в заглавные. Но и с латинскими не всё так просто. Так как русские буквы в КОИ7Н2 хранятся на месте строчный латинских, то иногда при перегоне русское имя теряется и остаётся на латинице. Например, файл udaw.rks - это почти со 100%-но вероятностью УДАВ.rks. В общем, исходя из этого, мой скрипт при преобразовании имени оставляет латинские буквы только, если они заглавные. Все остальные буквы преобразуются по тем или иным правилам в заглавные русские. Но и это ещё не всё! На оригинальной прошивке Лика в Мониторе невозможно набрать некоторые символы: Пробел, !, ", #, $, %, &, ', (, ), <, _. А так как при загрузке файла нужно в обязательном порядке в директиве I указать имя загружаемого файла, то если в имени будет любой из этих символов, то загрузить этот файл не получится, так как не получится набрать его имя. Сюда же попадает и запятая (,), так как она является сепаратором для команд Монитора. Все эти символы заменяются в имени на звёздочку (*).
Ну а теперь про сам скрипт. Вызывается он просто:
Код:
python file2lik.py filename
На выходе получите файл с тем же самым названием, но с дополнительным суффиксом "_LIK". Если на входе был бинарный файл, то дополнительно к суффиксу поменяется и его расширена на RKS.
Дополнительно обрабатываются следующий ключи:
-n NAME или --name NAME: Если вам хочется принудительно задать какое-то своё имя, то этот параметр для вас. А если в качестве NAME указать NoName (в любом регистре), то в RKS запишется пустое имя и тогда этот RKS будет загружаться в компьютер не зависимо от того, какое имя было указано в директиве I.
-s START или --start START: По умолчанию адрес загрузки берётся из файла RKS, или в случае преобразования бинарного файла подставляется нулевой адрес. С помощью этого ключа вы можете задать свой адрес. Указывать стартовый адрес можно в десятеричном виде, либо в шестнадцатеричном формате с префикосом 0x, например 0x100.
-w или --wave: Если указать этот ключ, то помимо RKS дополнительно будет сформирован и сохранён WAV для загрузки в реальный компьютер. WAV имеет следующие характеристика: 8-бит, моно, 22 кГц. Этого достаточно для загрузки в настоящий компьютер. Я проверял, у меня всё загружается.
-v VOLUME или --volume VOLUME: Можно увеличить или наоборот уменьшить громкость в получаемом WAV. По умолчанию задана громкость 96. Но она может варьировать от 0 (полная тишина) до 127 (полная громкость).
-c CONSTANT или --constant CONSTANT: Это константа скорости записи. По умолчанию эта константа равна 8. Но её можно уменьшить, и тогда скорость будет выше, либо увеличить для замедления. Эмулятор Emu80 загружает файлы, созданные с константами от 8 до 11. На реальном компьютере я тестов не проводил. Но со значением по умолчанию мой Лик файлы загружает без проблем.
- h: вывод краткой справки по использованию скрипта и его ключам
Скрипт писался под себя, и я не заморачивался, чтобы сделать полную отказоустойчивость. Не подсовывайте ему всякую ерунду и не вводите левые значения в качестве параметров, и всё будет хорошо. Я вроде проверил все возможные сценарии, но не исключаю, что где-то что-то не учёл и возможен вылет с ошибкой. Если вдруг вы столкнётесь с какой-то ошибкой (Хотя кого я обманываю? Никто даже не будет пытаться запускать этот скрипт! ), то пишите - я поправлю.