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

User Tag List

Показано с 1 по 10 из 10

Тема: Спрайты, ps/2 и куча утилит.

  1. #1
    Master
    Регистрация
    27.01.2005
    Сообщений
    888
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    131 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Спрайты, ps/2 и куча утилит.

    Несколько библиотек для спека.

    Работа со спрайтами (стандартный спектрумовский экран)

    Работа с PS/2 клавиатурой для Pentevo.

    Куча PC-утилит самых разных в исходниках.

    Если кого заинтересует буду продолжать потихоньку выкладывать. По мере ковыряния.

    Прилагается хобета и тап, чтобы поглядеть на спеке спрайты и на пентеве - тест клавиатуры.

    Добавил sdcc-misc-14.11.2014.tar.bz2.7z.

    В нём содержится:

    1. PT2-PT3 player.
    2. Универсальный обработчик IM2.
    3. Демо-программы ps2-test - работа с ps2 на пентево,
    spr-test-0 - спрайты.
    spr-test-1 - спрайты в динамике, музыка, IM2.
    Вложения Вложения
    Последний раз редактировалось SfS; 16.11.2014 в 22:40.

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

    Sergey (29.04.2023)

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

  4. #2
    Master
    Регистрация
    27.01.2005
    Сообщений
    888
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    131 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, забыл сказать, что все библиотеки имеют интерфейс к SDCC.

  5. #3
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,593
    Спасибо Благодарностей отдано 
    2,158
    Спасибо Благодарностей получено 
    130
    Поблагодарили
    96 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо, полезно.

    Хотелось бы чуть покритиковать код вывода спрайта с атрибутами. Там сперва выводится массив пикселов, потом атрибуты. Если спрайт достаточно большой (как в приложенной демке), то возможен случай когда обновление экрана происходит примерно после вывода пикселов, но перед выводом атрибутов. Представим себе на миг - выводится большой красный спрайт на экран, заполненный белым. Юзер успевает заметить как контур спрайта мигнул белым и налился красным. Если уменьшить время между выводом знакоместа 8x8 и соответствующего ему атрибута, подобный эффект останется, но одно знакоместо - это ж отнюдь не 16x12 знакомест. Мигание беленького квадратика лучше, чем большого прямоугольника. Даже если такой вывод будет чуть медленнее данного.

    Так что ищу процедуру для вывода спрайта познакоместно - знакоместо-атрибут, и т.д. Но этот код пригодится тоже - для вывода статических непакованных картинок.

    Адаптировал libspr для ZXDev. Попутно замечу, что libspr заточена под старый SDCC. Под новый требуются косметические поправки: __asm, __endasm, __naked вместо _asm, _endasm, _naked. Есть возможность оставить компиляцию старым SDCC, но сделать её возможной и для нового SDCC. Примерно так:
    Код:
    #ifndef __SDCC
    #  define __asm _asm
    #  define __endasm _endasm
    #  define __naked _naked
    #endif
    P.S. Ещё к коду не приложен требующийся хидер types.h, описывающий типы BYTE и WORD. Насколько я понял, в поставку SDCC он тоже не входит. Но это мелочи.

  6. #4
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Хотелось бы чуть покритиковать код вывода спрайта с атрибутами.
    Вот не удержусь: именно поэтому на низкопроизводительных платформах динамичесике вещи без "миганий" пишутся на асме, кастомным кодом под каждый случай (включая, например, несколько разных алгоритмов вывода спрайтов в одной игре). Кстати, при умении программировать на асме использования ЯВУ для нетребовательной к быстродействию логике в паре с кастомными (а не из стандартных библиотек среды) асмовыми процедурами шибко бы ускорили разработку, но... Сужу по себе - я не хочу использовать стандартный Basic из-за его ограничений и все-таки ничем не маскируемую тормознутость, а изучать компиляторы лениво - я ж на асме все умею! Ну и да, отлаживать скомпиленный из ЯВУ код на уровне сырцов на Спектруме все так же невозможно.

  7. #5
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,593
    Спасибо Благодарностей отдано 
    2,158
    Спасибо Благодарностей получено 
    130
    Поблагодарили
    96 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А зачем именно на Спектруме отлаживать?

    Всё возможно, было бы желание. Есть листинги с прямым соответствием сишного исходника асмовскому коду. Бери и отлаживай пошагово в EmuZWin.

    И несколько вариантов процедур с кастомным кодом под каждый случай - всё это возможно и на ЯВУ.

    Можно иметь много-много библиотек. И иметь возможность дописывать свои. Главное - иметь стимулы для работы в данном направлении. Мне это просто интересно.

  8. #6
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    130
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Так что ищу процедуру для вывода спрайта познакоместно - знакоместо-атрибут, и т.д.
    http://zx.pk.ru/showpost.php?p=366934&postcount=25

  9. #7
    Master
    Регистрация
    27.01.2005
    Сообщений
    888
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    131 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вообщето я это всё писал, чтобы освоить технику и вспомнить как это делается

    С критикой согласен, но мне больше нравится метод теневого экрана. Когда всё изображение формируется на невидимом экране, а потом экраны меняются местами (как в спек 128).

    У меня SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.9.0 #5416 (Apr 23 2014) (UNIX). попробую обновить как-нибудь.



    в комплекте утилит есть scr2spr и scr2sprn для нарезки стандартного экрана на спрайты указанного формата. полученный бинарный файл можно преобразовать в С-шный массив с помощью bin2c.

    Пример:

    Имеется экран test.scr. Необходимо вырезать из него спрайт, расположенный по координатам x=10 y=5 c размерами w=4 h=6 и создать из него С-шный массив.

    Всё это сделает такая команда:

    (спрайт с атрибутами) scr2spr 10 5 4 6 test.scr | bin2c mySprite0 -- > mySprite0.c

    (спрайт без атрибутов) scr2sprn 10 5 4 6 test.scr | bin2c mySprite0 -- > mySprite0.c

    Довольно просто и часто удобно.

    Кстати, кто знает редактор спековских экранов под *NIX ?
    Последний раз редактировалось SfS; 23.05.2014 в 20:23.

  10. #8
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,593
    Спасибо Благодарностей отдано 
    2,158
    Спасибо Благодарностей получено 
    130
    Поблагодарили
    96 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    SfS, в SDCC нужно обязательно сохранять IX и восстанавливать его значение при выходе из любой процедуры.

    Код:
    void	spr0_out0(const Sprite0* adr, BYTE x, BYTE y)__naked{
    __asm
        ld    ix,#2
        add   ix,sp
    ...
        jp    spr0_out0
    __endasm;
    }
    Код:
    void	spr0_out0(const Sprite0* adr, BYTE x, BYTE y)__naked{
    __asm
        push  ix
        ld    ix,#4
        add   ix,sp
    ...
        call  spr0_out0
        pop   ix
        ret
    __endasm;
    }
    Ведь SDCC адресует локальные переменные процедуры через IX. Так сделано по нескольким причинам, в частности для упрощения рекурсии.

    У меня была такая редкая труднонаходимая ошибка, которую никто не нашёл, а может и не стал искать, кому же нужна чужая минидемо когда все заняты своими мегапрожектами.

    http://zx.pk.ru/showpost.php?p=480804&postcount=9
    http://zx.pk.ru/showpost.php?p=555967&postcount=39

    Цитата Сообщение от Oleg N. Cher
    Исправлен глюк со сбросом примера на Laser Basic. Проблема будет интересна всем, кто юзает SDCC. Это даже не глюк, допущенный случайно. Дело в том, что я после извлечения параметров функций допускал изменение регистра IX. А делать оказывается этого нельзя, ибо SDCC иногда полагается на его значение после возвращения из функции. (Как написал Филипп: “IX is a calle-saves register”).
    P.S. Можно ли добавить в библиотеку libspr возможность работы со спрайтом, выходящим за край экрана (и справа, и слева, и сверху, и снизу)? Т.е. я понимаю, что можно, но есть ли желание этим заняться?
    Последний раз редактировалось Oleg N. Cher; 01.06.2014 в 14:33.

  11. #9
    Master
    Регистрация
    27.01.2005
    Сообщений
    888
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    131 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добавил sdcc-misc-14.11.2014.tar.bz2.7z (стартовое сообщение)

    В нём содержится:

    1. PT2-PT3 player.
    2. Универсальный обработчик IM2.
    3. Демо-программы ps2-test - работа с ps2 на пентево,
    spr-test-0 - спрайты.
    spr-test-1 - спрайты в динамике, музыка, IM2.

    Музыкальный плеер конвертировал в sdcc-ассемблер из того, что был на сайте бульбы.

  12. #10
    Master
    Регистрация
    27.01.2005
    Сообщений
    888
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    131 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Переделал программки и библиотеки для SDCC-3.4. Там довольно много отличий
    в инициализации (crt0.s) и макросах.
    Как всегда - всё в первом сообщении

    http://zx-pk.ru/attachment.php?attac...1&d=1416163270

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

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

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

Похожие темы

  1. Спрайты из игр
    от newart в разделе Графика
    Ответов: 16
    Последнее: 11.08.2022, 07:52
  2. Продам спектрум дельта С + БП и куча плат
    от REMR в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 10.01.2012, 23:35
  3. Куча БК-0010 без КМ-ок
    от Andrey_Ak в разделе Барахолка (архив)
    Ответов: 90
    Последнее: 16.09.2010, 09:33
  4. Куча софта и документации spectrum
    от klingon в разделе Для начинающих
    Ответов: 6
    Последнее: 01.08.2010, 17:53
  5. сдесь куча всего
    от bigral в разделе Софт
    Ответов: 3
    Последнее: 16.03.2008, 19:55

Ваши права

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