User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: Конвертор ZX-картинок для Специалиста

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

    По умолчанию Конвертор ZX-картинок для Специалиста

    Начал экспериментировать с графикой на Специалисте и столкнулся с отсутствием качественных цветных картинок. Мне показалось, что Спектрум - это хороший источник картинок. Мне повезло, что загруженные "в лоб" картинки из Exolon'а выглядели хорошо, иначе бы я, наверное, не взялся что-то делать дальше. Однако другие картинки, загруженные по тому же алгоритму, или вообще не отображались, или там было ничего не понятно. Мои дальнейшие эксперименты со спектрумовскими картинками на Специалисте вылились вот в такую программу:




    Результат мне нравится. Безусловно, не все картинки выглядят хорошо, но подавляющее их большинство всё-таки радует глаз.

    Программа пока не доделана, так как я упёрся в две проблемы:

    1. Эмулятор Emu80, на котором я всё отлаживаю, глючит с эмуляцией загрузки с магнитофона. Эмулятор почему-то позволяет загрузить картинку только один раз, после чего требуется сброс, чтобы снова заработал перехват #c3f9.
    2. Так и нет понимания в каком формате хранить конвертированные картинки. Поэтому сохранение картинок я не сделал.

    Во вложении вы найдете:

    1. Сам просмотрщик-конвертор.
    2. Набор спектрумовских картинок в формате rks. В том же архиве лежит простой конвертор *.scr -> *.rks. Для конвертирования просто перетяните любую стандартную спектрумовскую картинку длиной 6912 байт на conv.bat.

    Программа не использует никаких процедур из ПЗУ, кроме подпрограммы загрузки с магнитофона.
    Вложения Вложения
    • Тип файла: zip gfx.zip (6.4 Кб, Просмотров: 83)
    • Тип файла: zip pictures.zip (84.1 Кб, Просмотров: 93)
    Последний раз редактировалось CityAceE; 30.01.2019 в 09:03.
    С уважением, Станислав.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Moderator Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,165
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    71 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Превосходно! Посмотрел все 18 картинок. Делал всё через эмулятор emu. Главный файл gfx.rks тоже не грузился - убрал первые четыре байта в файле и загрузил сразу в память по адресам 0100...24B5. Далее по <5> просмотрел все картинки. Проблемы с загрузкой файлов может быть в том, что в конце файла должна быть указана контрольная сумма блока данных, по крайней мере в файле gfx.rks её не было.
    Последний раз редактировалось fifan; 27.01.2019 в 16:51.

  4. #3
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,857
    Спасибо Благодарностей отдано 
    655
    Спасибо Благодарностей получено 
    1,846
    Поблагодарили
    1,054 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Делал для себя утилитку obj2rks, которая добавляет заголовок и контрольную сумму к бинарникам.
    Вызов
    obj2rks file.obj [необязательный шестнадцатеричный начальный адрес, по умолчанию 0]
    на выходе file.rks
    Недостаток - расширение исходного файла д.б. obj, мне она только для tasma нужна. Можно изменить расширение исходного файла на obj и потом использовать с obj2rks.
    Наверняка подобные (или более удобные) утилиты есть и у других людей, занимающихся разработкой для специалиста.
    Вложения Вложения

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

    По умолчанию

    Цитата Сообщение от fifan Посмотреть сообщение
    Делал всё через эмулятор emu.
    Странно, у меня там тоже больше одной картинки не грузилось.

    Цитата Сообщение от fifan Посмотреть сообщение
    Главный файл gfx.rks тоже не грузился
    А у меня грузился без проблем при старте эмулятора. Но я особо не разбирался, может там оно и не туда вовсе грузилось и не так. Я все эксперименты проводил с Emu80.

    Цитата Сообщение от fifan Посмотреть сообщение
    Проблемы с загрузкой файлов может быть в том, что в конце файла должна быть указана контрольная сумма блока данных, по крайней мере в файле gfx.rks её не было.
    Вполне может быть. Во всех моих файлах, включая картинки, контрольная сумма пустая, вернее левая. Во-первых, Emu80 игнорирует факт несовпадения КС, а, во-вторых, я попросту не знаю как на лету эту сумму генерировать в SjASMPlus, из которого я получаю скомпилированный файл. Подозреваю, что этого нельзя будет сделать. И придётся полученный rks прогонять через какую-то внешнюю утилиту, которая будет пересчитывать и добавлять контрольную сумму. Есть ли где-то готовое описание алгоритма, по которому вычисляется контрольная сумма Специалиста, чтобы самому не копаться в ПЗУ?
    С уважением, Станислав.

  6. #5
    Veteran Аватар для Pyk
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    1,184
    Спасибо Благодарностей отдано 
    265
    Спасибо Благодарностей получено 
    460
    Поблагодарили
    184 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Эмулятор Emu80, на котором я всё отлаживаю, глючит с эмуляцией загрузки с магнитофона. Эмулятор почему-то позволяет загрузить картинку только один раз, после чего требуется сброс, чтобы снова заработал перехват #c3f9.
    Был такой баг. Судя по скриншотам, у тебя старая версия 4.0.307, обновись до последней - 4.0.316:
    http://emu80.org/v4beta/Emu80qt_40316.zip

    - - - Добавлено - - -

    gfx.rks действительно не грузится по директиве R (видимо из-за отсутствия контрольной суммы), но его можно загрузить через меню либо Alt-F3.

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

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    обновись до последней - 4.0.316
    И действительно! В обновлённой версии всё работает, как задумано

    Цитата Сообщение от ivagor Посмотреть сообщение
    есть и у других людей, занимающихся разработкой для специалиста.
    Что-то я таких людей здесь не вижу, либо они тщательно маскируются К сожалению, под Специалист уже давно ничего не выходило нового

    Цитата Сообщение от Pyk Посмотреть сообщение
    его можно загрузить через меню либо Alt-F3.
    Я именно так и загружаю всегда. Наверное поэтому и не придал большого значения отсутствию КС.
    С уважением, Станислав.

  8. #7
    Veteran Аватар для Pyk
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    1,184
    Спасибо Благодарностей отдано 
    265
    Спасибо Благодарностей получено 
    460
    Поблагодарили
    184 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Есть ли где-то готовое описание алгоритма, по которому вычисляется контрольная сумма Специалиста, чтобы самому не копаться в ПЗУ?
    Алгоритм такой же, как в РК-86, вот фрагмент из Emu80:
    Код:
            uint16_t cs = 0;
            for (uint16_t i = 0; i < fileSize - 1; i++) {
                cs += buf[i];
                cs += (buf[i] << 8);
            }
            cs = (cs & 0xff00) | ((cs + buf[fileSize - 1]) & 0xff);

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

    По умолчанию

    Подкорректировал данные в gfx.rks (см. вложение в первом сообщении) и теперь файл без ошибок грузится в эмуляторы по директиве R.

    Заодно придумал, как мне получить правильный rks после компиляции - с помощью внешнего скрипта на Python.

    Вот текст скрипта на Python, который пересчитает и впишет правильную контрольную сумму в файл:

    Код:
    import sys
    
    if len(sys.argv) > 1:
        filename = sys.argv[1]
        with open(filename, 'rb') as f_obj:
            rks = f_obj.read()
        finish = len(rks) - 3
        cs = 0
        for i in range(4, finish):
            cs += rks[i]
            cs += (rks[i] << 8)
        cs = (cs & 0xff00) | ((cs + rks[finish]) & 0xff)
        rks = bytearray(rks)
        print("Old check sum:", hex(rks[-1] * 256 + rks[-2]))
        rks[-1] = cs // 256
        rks[-2] = cs % 256
        print("New check sum:", hex(cs))
        with open(filename, 'wb') as f_obj:
            f_obj.write(rks)
    else:
        print("Usage: python rkscs.py filename.rks")
    Последний раз редактировалось CityAceE; 28.01.2019 в 10:53.
    С уважением, Станислав.

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

    По умолчанию

    Оптимизировал код, сделал отключение информационной панели и внёс другие доработки. Обновил программу в первом сообщении.
    С уважением, Станислав.

  11. #10
    Veteran Аватар для Pyk
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    1,184
    Спасибо Благодарностей отдано 
    265
    Спасибо Благодарностей получено 
    460
    Поблагодарили
    184 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, а байты 31 32 в конце каждого файла картинки - это замена контрольной суммы?
    Их gfx даже не пытается читать, из-за чего файл rks в Emu80 не читается до конца и на какое-то время остается открытым после загрузки картинки.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 164
    Последнее: 10.12.2023, 14:26
  2. Элита для Специалиста
    от jerri в разделе Специалист
    Ответов: 77
    Последнее: 20.11.2021, 20:22
  3. OriNET для Специалиста ?
    от SYR-ALEX в разделе Специалист
    Ответов: 22
    Последнее: 21.07.2017, 07:40
  4. Ответов: 20
    Последнее: 06.05.2015, 18:48
  5. Пакер для картинок
    от Sinus в разделе Программирование
    Ответов: 9
    Последнее: 07.09.2005, 15:12

Ваши права

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