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

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 25

Тема: Exolon на Специалисте + задача для спектрумистов

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,218
    Благодарностей: 1434
    Записей в дневнике
    7
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Exolon на Специалисте + задача для спектрумистов

    Посмотрите на эти скриншоты, снятые из эмулятора ПК Специалист Emu80 (ищите exolon.rks во вложении):



    Нравится? Вот и мне тоже! А теперь чуть подробнее.

    Специалист (в варианте ЛИК) был моим первым компьютером. Я и до сих пор бережно храню его. Недавно отдав дань памяти, я написал эмулятор Специалиста на языке Python. Но это лишь подстегнуло ещё больший интерес к платформе, вытащив наружу из памяти мои старые идеи. Когда я был владельцем только лишь Специалиста, я с завистью поглядывал на такие хиты ZX Spectrum’а, как Batty и Exolon. Совершенно не разбираясь в программировании, тогда мне казалось, что такие игры попросту не реальны на Специалисте. В итоге приходилось довольствоваться тем, что было. А было совсем не много, да и качество этого оставляло желать лучшего. Но спустя годы, стало понятно, что даже на Специалисте можно было воплотить многое из того, выходило на ZX Spectrum. Проблема была в том, что попросту некому было всё это писать.

    Вообще, до сих пор моей заветной мечтой является возможность поиграть в Batty на Специалисте. Но наработок в этой области вообще нет. Видимо, не так много людей испытывают такие же чувства к этой игре. Зато с Exolon’ом всё в порядке. Благодаря благословению автора и упорству esl у нас имеются полные исходные тексты игры, готовые к портированию куда угодно. Помимо собственно наличия исходников Exolon’а, к портированию игры на Специалист предрасполагают следующие факторы:

    • Игра не использует прерывания
    • Игра не использует процедур ПЗУ
    • Код написан так, что портирование на другую платформу не вызывает проблем. Автор в своё время переносил Exolon на Amstrad CPC и это заняло у него всего несколько дней вместе с рисованием новой графики.


    Как я себе представляю этапы переноса Exolon’а на Специалист с учётом современных средств разработки:

    1. Переписываем процедуры вывода графики, опроса клавиатуры и вывода звука под Специалист. При этом отлаживаем всё под эмулятором Специалиста с процессором Z80.
    2. Избавляемся от специфических инструкций Z80, заменяя такие инструкции конструкциями, состоящими из инструкций Intel 8080, либо полностью переписывая процедуры.


    Мне кажется, что серьёзных проблем возникнуть не должно. Возможно, может не хватить быстродействия. Однако порт Exolon’а для ПК Вектор-06Ц говорит о том, что КР580ВМ80А, работающий на частоте 2 MHz, вполне способен переварить это дело.



    На моём Специалисте была лишь однобитная чёрно-белая графика и мне приходилось лишь облизываться на статьи в Моделисте-Конструкторе, где описывался контроллер цветности, вначале 4-х цветный, а потом 8-ми цветный. Поэтому я подумал, что Exolon на Специалисте вполне мог бы быть чёрно-белым. Но потом мне стало любопытно, а что же там с цветами на Специалисте? Для этого я решил написать загрузчик Спектрумовских картинок в Специалист. Но, во-первых, у меня не было средств разработки под Специалист. А, во-вторых, мнемоники i8080 мне сейчас уже почти ни о чём не говорят. Собственно, долго думать не пришлось. В качестве компилятора я задействовал привычный мне кросс-ассемблер Z80 SjASMPlus и настроил всё так, чтобы после компиляции я получал готовый к загрузке в эмулятор Специалиста файл c расширением RKS. Конечно, приходится быть предельно внимательным и чётко понимать какие инструкции есть у i8080, а каких нет. Так, можно совершенно машинально вместо JP LABEL написать JR LABEL, а потом долго искать почему правильно написанная программа благополучно скомпилировалась, но не работает на эмуляторе.

    Спектрумовские картинки на экране Специалиста впечатлили. Несмотря на серьёзные ограничения в цветах и метод их отображения, многие картинки со Спектрума выглядят практически так же. Судите сами:



    Даже чётырёх-цветная графика выглядит неплохо!

    С графикой поэксперементировал. Дальше решил попробовать звук, а вместе с ним и адаптацию кода Z80 к i8080. Для экспериментов я выбрал sound_beeper_music.asm из пакета исходников Exolon.

    И вот тут у меня случился затык. Я уткнулся в нехватку регистров, команд и быстродействия. В итоге мне всё-таки удалось заставить Специалист хоть как-то воспроизводить мелодию из Exolon’а, но происходит это ооооочень медленно. Чтобы услышать мелодию так, как она звучит на Спектруме, нужно включить в эмуляторе Специалиста режим максимальной скорости:




    Это происходит, во-первых, из-за того, что сам процессор Специалиста работает почти вдвое медленнее Z80. А, во-вторых, я конвертировал процедуру, что называется «в лоб» с ужасно тормозной конструкцией заменяющей команду EX AF,AF’. Чтобы всё зазвучало как нужно, требуется переписать плеер с чистого листа. А то, что i8080 способен потянуть эту мелодию подтверждает порт Exolon’а на Вектор-06Ц (см. видео). Да, там мелодия играет чуть медленнее, но при этом она играет почти как же, как в оригинале.

    Написание такого плеера может явиться интересной задачей для скучающих спектрумовских кодеров. Процедура проигрывания довольно короткая, но при этом очень критичная ко времени исполнения. Задача вполне себе тянет на, так любимый многими, этюд. К тому же всё написано в привычной для спектрумистов мнемонике Z80.

    Всё необходимое для решения задачи (компилятор, настроенные файлы и исходники) приложено к этому сообщению. Вам остаётся лишь скачать и распаковать это, запустить exolon.bat и получить на выходе exolon.rks, который можно загрузить в эмулятор Специалиста. А самую свежую версию эмулятора Специалиста можно взять здесь.

    Ещё на всякий случай упомяну, как формируется звук на Специалисте. Чтобы динамик зазвучал, необходимо с определённой частотой чередовать запись чисел #0A и #0B в ячейку по адресу #FF03 (на самом деле в любую ячейку по маске #F803). Вообще, за вывод звука отвечает только один нулевой бит, но системный загрузчик для вывода звука засылает в порт не #00 и #01, а именно #0A и #0B. Я не стал разбираться с чем это связано.

    В приложении к этому сообщению вы найдёте демку exolon.rks, которая выводит две картинки из игры Exolon и воспроизводит две «мелодии» оттуда же. Смена картинки вместе мелодией осуществляется нажатием на любую кнопку.

    Ну а для тех, кому интересно покопаться внутри, я прилагаю исходный текст с компилятором - exolon_src.zip. Не судите строго мой код - там оптимизировать и оптимизировать. Но зато всё работает так, как было задумано.

    P.S. Заменил exolon.rks во вложении на вариант с плеером от ivagor - там музыка играет почти как в оригинале.
    Вложения Вложения
    Последний раз редактировалось CityAceE; 24.01.2019 в 02:50.
    С уважением, Станислав.

  2. Эти 9 пользователя(ей) поблагодарили CityAceE за это полезное сообщение:
    Babasha (22.01.2019), fifan (22.01.2019), HardWareMan (22.01.2019), petrov1962 (22.01.2019), Pyk (26.01.2019), svofski (22.01.2019), Titus (23.01.2019), tnt23 (22.01.2019), zx_ (23.01.2019)

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

  4. #2
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    3,744
    Благодарностей: 1210
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, насчет звука. За звук отвечает 5й бит порта C ВВ55 (FF02), можно и в него напрямую писать для получения звука. Но корректнее как раз программировать его через регистр управляющего слова (FF03):
    Ah=1010b=(5<<1)+0 - записываем 0 в 5й бит C
    Bh=1011b=(5<<1)+1 - записываем 1 в 5й бит C

  5. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    CityAceE (22.01.2019)

  6. #3
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    3,744
    Благодарностей: 1210
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Задача для спектрумистов, но я все же попробую. Взял за основу векторовскую версию, с которой давно разбирался, и сильно переделал под специалист. Получилось не идеально, но слушать (особенно если абсолютного слуха нет) можно. В спектрумовском оригинале, честно говоря, тоже не все ноты точные, но там, конечно, лучше.
    Вложения Вложения

  7. Эти 3 пользователя(ей) поблагодарили ivagor за это полезное сообщение:
    CityAceE (23.01.2019), svofski (22.01.2019), zx_ (23.01.2019)

  8. #4
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,057
    Благодарностей: 625
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ivagor, я правильно понимаю, что оно рассчитано на доступ к портам как памяти? что куда копнуть для альтернативных систем, где бипер доступен через out?

    Простите меня, я слоупок.
    Последний раз редактировалось tnt23; 22.01.2019 в 20:14. Причина: я слоупок

  9. #5
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    10,449
    Благодарностей: 3695
    Записей в дневнике
    1
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    В спектрумовском оригинале, честно говоря, тоже не все ноты точные
    изначально Nick Jones создал мелодию на/под c64, а дальше уже примерно адаптировали

  10. #6
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    3,744
    Благодарностей: 1210
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  11. Этот пользователь поблагодарил ivagor за это полезное сообщение:
    tnt23 (22.01.2019)

  12. #7
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,218
    Благодарностей: 1434
    Записей в дневнике
    7
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Задача для спектрумистов, но я все же попробую.
    Иван, в очередной раз спасибо! А спектрумистам, похоже, уже вообще ничего не нужно...

    Перевёл мнемонику в привычную мне (z80) и добавил твой плеер в свои исходники. Теперь получилась почти что полноценная дема для Специалиста уровня начала 90-х. Только бегущей строки не хватает А так и картинки почти, как на Спектруме, и музыка почти, как на Спектруме.

    Готовый к загрузке в эмулятор файл ищите в первом сообщении данной темы, а исходники прикреплены к этому сообщению. В целях экономии места, я не стал добавлять в архив SjASMPlus. Кому нужно, смогут его взять из исходников, прикреплённых к первому сообщению.
    Вложения Вложения
    С уважением, Станислав.

  13. #8
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    3,744
    Благодарностей: 1210
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пару моментов вчера забыл написать.
    1. Для выхода в монитор при проигрывании можно нажать F1-F11 (и еще какую-то клавишу, надо посмотреть раскладку клавиатуры специалиста)
    2. Данный плеер будет неправильно работать на z80, т.к. в одном месте используется проверка флага четности после инкремента. Это не проблема, просто особенность, т.к. для z80 можно или использовать оригинальный плеер или написать более быстрый.

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

    Еще хочу написать, что смог быстро отреагировать только потому, что раньше разбирался с векторовским эксолоном.

  14. #9
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Владивосток
    Сообщений
    3,218
    Благодарностей: 1434
    Записей в дневнике
    7
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ещё раз перечитал историю создания векторовской версии Exolon'а. Видимо, не так просто будет его адаптировать к Специалисту. И похоже, что лучше всего при адаптации как раз опираться на версию Вектора - там хотя бы учтены тормоза i8080. Но с другой стороны, там для синхронизации используется таймер, который отсутствует в Специалисте.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Еще хочу написать, что смог быстро отреагировать только потому, что раньше разбирался с векторовским эксолоном.
    Посмотрим, вдруг кто-то всё-таки примет вызов и сумеет сделать ещё лучше!
    Последний раз редактировалось CityAceE; 23.01.2019 в 07:20.
    С уважением, Станислав.

  15. #10
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    3,744
    Благодарностей: 1210
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У векторовского эксолона для определения текущего положения луча используется таймер, а таймер перед этим привязывается к лучу с помощью прерывания. Но это в основном связано именно с векторовскими особенностями, что опрос клавиатуры и программирование палитры можно делать только в определенные интервалы времени относительно развертки. А автор захотел еще стек использовать для рисования и запрещает прерывания.
    Т.е. если не на векторе, то таймер и прерывания не критичны.
    Последний раз редактировалось ivagor; 23.01.2019 в 09:32. Причина: убрал лирику про мигания

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

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

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

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

Похожие темы

  1. Прерывания IM2 в Специалисте на КР580
    от barsik в разделе Специалист
    Ответов: 17
    Последнее: 13.03.2018, 13:57
  2. Ответов: 212
    Последнее: 26.01.2008, 15:02
  3. Задача
    от axor в разделе Программирование
    Ответов: 3
    Последнее: 18.12.2005, 18:44
  4. Ответов: 22
    Последнее: 15.11.2005, 12:08

Ваши права

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