Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 15 из 15

Тема: ПК Лик: Формат записи на лету

  1. #11
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем, найден источник проблем. Это RKM Player. Он распознаёт формат Лика, как "Spec-mon". При этом ему не нравятся контрольные суммы, которые рассчитывает Лик.



    Ну и при воспроизведении он подставляет сумму, которую он считает корректной. В итоге Лик при загрузке ругается:



    Исходный воспроизводимый файл выглядит так:



    Далее я оцифровываю то, что воспроизводит RMK Player, подкидываю в Tapir и вижу следующее:



    Помимо того, что RKM Player добавил имя, взяв его из имени файла, он ещё и контрольную сумму поменял.

    В первом сообщении расписал формат Лика записи на ленту.
    Последний раз редактировалось CityAceE; 07.12.2023 в 10:32.
    С уважением, Станислав.

  2. Этот пользователь поблагодарил CityAceE за это полезное сообщение:

    svofski (07.12.2023)

  3. #12
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Байты 70 8F 82 8F это вроде бы не сигнатура, а начало и конец блока, куда считывается имя и КС. Итого 13h байт. А BC это не синхробайт, а на мой взгляд тип данных, в данном случае Byte Code. Надо бы проанализировать другие типы файлов...

  4. Этот пользователь поблагодарил b2m за это полезное сообщение:

    CityAceE (07.12.2023)

  5. #13
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    b2m, спасибо за уточнение!
    С уважением, Станислав.

  6. #14
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Поэкспериментировал и выяснил следующее:

    Цитата Сообщение от b2m Посмотреть сообщение
    Байты 70 8F 82 8F это вроде бы не сигнатура, а начало и конец блока, куда считывается имя и КС. Итого 13h байт.
    По адресам 8F70-8F7F действительно хранится имя, которое задаётся с клавиатуры вместе с директивой I. Формат имени 15 символов + 0. При попытке указать в директиве I имя 16 и более символов получаем ошибку. Я пробовал изменять эти адреса в файле и даже вручную забивал по новым адресам имя для поиска в процессе загрузки, но это ни на что не повлияло.
    Адреса 8F80-8F82 вообще никак не затрагиваются.
    По адресам 8F83-8F99 с ленты загружаются первые 23 байта, начиная с 70 7F 82 7F и заканчивая контрольной суммой.

    Цитата Сообщение от b2m Посмотреть сообщение
    А BC это не синхробайт, а на мой взгляд тип данных, в данном случае Byte Code.
    Пока озаглавил в таблице, как "Тип данных", но на самом деле на Лике кодовый блок можно отгрузить только одним способом. И по этому адресу всегда находится байт BC. Я пробовал отгрузить программу на BASIC, но там формат вообще другой на выходе.

    Очевидно, что этот байт, что незадействованные 3 ячейки 8F80-8F82 - это рудимент при адаптации монитора с другой платформы.

    Цитата Сообщение от b2m Посмотреть сообщение
    Надо бы проанализировать другие типы файлов...
    Я других типов для Лика не нашёл. Отгрузить как-то иначе с самого Лика тоже не получилось.
    Последний раз редактировалось CityAceE; 07.12.2023 в 15:52.
    С уважением, Станислав.

  7. #15
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Занимаясь проверкой программ со Специалиста на своём Лике я испытал неудобство из-за отличия форматов. Собственно, эта тема и является результатом таких проверок. И вот если один-два файла по-быстрому руками ещё можно откорректировать, но далее это уже превращается в настоящий геморрой. А каких-то инструментов для автоматизации этого процесса нет. Наверное, каждый сам для себя пишет подобные утилиты. Вот и я в итоге решил упростить себе жизнь и написал программу на 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: вывод краткой справки по использованию скрипта и его ключам

    Скрипт писался под себя, и я не заморачивался, чтобы сделать полную отказоустойчивость. Не подсовывайте ему всякую ерунду и не вводите левые значения в качестве параметров, и всё будет хорошо. Я вроде проверил все возможные сценарии, но не исключаю, что где-то что-то не учёл и возможен вылет с ошибкой. Если вдруг вы столкнётесь с какой-то ошибкой (Хотя кого я обманываю? Никто даже не будет пытаться запускать этот скрипт! ), то пишите - я поправлю.
    Вложения Вложения
    С уважением, Станислав.

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 5
    Последнее: 06.03.2023, 00:01
  2. Ответов: 4
    Последнее: 05.10.2017, 22:38
  3. Формат записи на кассету
    от Tronix в разделе Разный софт
    Ответов: 16
    Последнее: 18.10.2015, 22:36
  4. Перемещаемость на лету
    от alone в разделе Программирование
    Ответов: 66
    Последнее: 05.04.2012, 10:03
  5. Продается Лик (клон Специалиста)
    от KALDYH в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 20.02.2010, 14:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •