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

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 56

Тема: Batty для ПК Специалист

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

    По умолчанию Batty для ПК Специалист

    Пока только главное меню:



    Зато со звуком и все нужные кнопки работают Меню полнофункционально, устанавливает все нужные переменные и подготавливает игру к запуску. Но 0 пока запускает только di:halt (зависание).

    Честно говоря, понятия не имею как я буду дальше переносить код, когда вовсю будут использоваться дополнительные регистровые пары и сложные команды Z80. А вот меню как будто бы специально для i8080 писалось. Навскидку из Z80-специфичного встречалось: JR, DJNZ, BIT и LD (nn),DE, что-то ещё несложное. Экран довольно легко преобразовал. Звук тоже, но там нужно ещё задержки подрегулировать - я поставил на глаз. Для клавиатуры написал свою процедуру.

    Пока очень пугают регистровые пары IX и IY, на которые в игре вся логика завязана. Бегло погуглил на предмет готовых рецептов переноса кода с Z80 на i8080, но вообще ничего не нашёл. Будем потом тут вместе придумывать как со всем этим бороться

    Исходники здесь.
    Вложения Вложения
    • Тип файла: zip batty.zip (1.7 Кб, Просмотров: 153)
    Последний раз редактировалось CityAceE; 12.03.2024 в 10:42.
    С уважением, Станислав.

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

    Barmaley_m (08.12.2023), fifan (13.08.2020), nzeemin (12.10.2020), Oleg N. Cher (25.08.2020)

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

  4. #2
    zx_
    Гость

    По умолчанию

    CityAceE, очень похожая история началась совсем рядом
    https://zx-pk.ru/threads/32131-daung...67#post1076967

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

    По умолчанию

    Вот так оно будет выглядеть:



    Отсутствуют тени, создаваемые градациями яркости. Обрамление игрового поля также пострадало по той же причине. Также всё плохо с кирпичами из-за невозможности использовать цвет бумаги отличным от чёрного. Не устаю восхищаться талантов автора оригинальной игры и тем, как умело и грамотно он все продумал в плане графики. Одни кирпичи чего только стоят!
    С уважением, Станислав.

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

    Oleg N. Cher (17.09.2020)

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

    По умолчанию

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

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

    Проблемы:

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

    2. Звук. Он есть, но в оригинальной игре он завязан на прерывания, которых на Специалисте нет. Надеюсь, что в дальнейшем получится это побороть.

    3. Скорость. Задержка в игре организована конструкцией ei:halt:di, которая встречается в нескольких местах. Пока я на эти места влепил холостые циклы и задержку выбрал вообще от фонаря. Если же убрать какую-либо задержку, то играть невозможно из-за очень высокой скорости. Это хорошо - значит есть какой-то запас по скорости для перевода на более медленный i8080. Я опасался, что из-за замены halt на холостой цикл может пострадать равномерность, но если и появилась какая-то неравномерность, то в мне глаза она не бросилась. Также не вижу и тиринга, который мог возникнуть при отказе от halt.

    А вот, собственно, текущий прогресс:

    С уважением, Станислав.

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

    fifan (20.09.2020), ivagor (19.09.2020), Oleg N. Cher (19.09.2020), Pluto (20.09.2020)

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

    По умолчанию

    Сижу туплю - не могу понять что не так. Прикручиваю к игре управление от клавиатуры, как на ZX Spectrum:
    ВЛЕВО и ВПРАВО - кнопки ряда ФЫВА через одну.
    ОГОНЬ - копки рядов ЙЦУК и ЯЧСМ

    При нажатии кнопок по отдельности всё работает как задумано. Но как только зажимаю ОГОНЬ, то каретка или влево не едет, или вправо, в зависимости от того какую именно клавишу ОГОНЬ зажимаю. Может кто-то свежим взглядом посмотрит и увидит, что не так?

    Код:
    keyboard_ctrl:
              xor a
            ld c,a
            ld a,#82
            ld (#ff03),a            ; Переключаем ВВ55 на чтение рядов
            ld a,(#ff01)    
            cpl
            ld h,a
            and %00010000            ; Проверка ряда ФЫВАПРОЛДЖЭ
            jp z,keyboard_ctrl_2    ; Уходим, если ни одна клавиша ряда не нажата
    
            ; Опрос ВПРАВО
            ld a,#91
            ld (#ff03),a            ; Переключаем ВВ55 на чтение столбцов
            ld a,($ff02)            ; Проверка столбцов ФЫВА
            cpl
            ld d,a
            and %00000101
            ld b,a
            ld a,($ff00)            ; Проверка столбцов ПРОЛДЖЭ
            cpl
            ld e,a
            and %01010101
            or b
            jp z,keyboard_ctrl_1
            inc c
            
    keyboard_ctrl_1:
            ; Опрос ВЛЕВО
            ld a,d
            and %00001010
            ld b,a
            ld a,e
            and %10101010
            or b
            jp z,keyboard_ctrl_2
            ld a,c
            or %00010
            ld c,a
    
    keyboard_ctrl_2:
            ; Опрос ОГОНЬ
            ld a,h                    ; Проверка рядов ЙЦУК и ЯЧСМ
            and %00101000
            jp z,LA1DB_7
            ld a,c
            or %10000
            ld c,a
    
    LA1DB_7:
      LD A,C
    LA1DB_71:  
      LD (ctrl_btns_pressed),A
      RET
    
    ; Состояние нажатых кнопок джойстика и управления
    ; Bit 0 - вправо
    ; Bit 1 - влево
    ; Bit 2 - 
    ; Bit 3 - 
    ; Bit 4 - огонь
    ctrl_btns_pressed:
      DEFB $06
    О том, как работает клавиатура Специалиста я написал здесь.

    Cursor и Interface II реализовал. И там одновременное нажатие огня и наплавленный работает корректно. Причем во всех случаях всё сводится к формированию переменной ctrl_btns_pressed. Так что скорее всего проблема именно где-то в процедуре, которую я привёл выше.
    С уважением, Станислав.

  10. #6
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,847
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,827
    Поблагодарили
    1,047 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для полного счастья надо после
    ld a,#91
    ld (#ff03),a
    добавить
    ld a,00101000b
    ld (0ff01h),a

    Хотя для пользователей emu (и для пользователей emu80 не включивших йцукен) счастье не будет полным.

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

    CityAceE (20.09.2020)

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    добавить
    ld a,00101000b
    ld (0ff01h),a
    Огромное спасибо! Работает! Сам бы точно не догадался. Но и сейчас особо не могу понять почему не работало ранее и почему работает сейчас

    Цитата Сообщение от ivagor Посмотреть сообщение
    для пользователей emu80 не включивших йцукен
    У меня конечная цель - запуск игры на реальном железе. И соответственно опрос клавиш делаю не по раскладке, а по реальной матрице клавиатуры. А для эмуляторов с раскладкой QWERTY есть управление от Cursor и Interface II, которые от раскладки не зависят.
    С уважением, Станислав.

  13. #8
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,847
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,827
    Поблагодарили
    1,047 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    почему не работало ранее и почему работает сейчас
    Без "добавки" при детекте направлений нельзя отличить Ф от Я и Й, Ы от Ч и Ц и т.д.

    Сейчас большинство новодельных реалов с контроллерами PS2, интересно как там с раскладками.

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

    Для большей корректности (вдруг пользователь начнет совсем левые кнопки давить) лучше заменить ld a,00101000b на ld a,11101111b

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

    CityAceE (20.09.2020)

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Для большей корректности (вдруг пользователь начнет совсем левые кнопки давить) лучше заменить ld a,00101000b на ld a,11101111b
    Да, я начал анализировать суть работы того, что ты предложил, и пришёл к тому же выводу. Хотел об этом написать, а ты уже успел добавить корректировку, чем подтвердил, что я правильно думал.
    По этой же аналогии внёс такие же изменения и в остальные типы управления. А то при тестировании выяснилось, что на Cursor мог влиять Interface II и наоборот.
    С уважением, Станислав.

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

    Exclamation

    Хочу поделиться информацией о том, как у меня продвигается дело. У меня сейчас очень мало свободного времени, но, когда оно появляется, то я стараюсь тратить его на Batty. Пытаюсь адаптировать к Специалисту и параллельно продолжаю разбирать дизассемблер оригинальной игры. В процессе адаптации на новую платформу начинают проясняться моменты, которые при анализе листинга оставались неясными - я всё это комментирую в листинге.

    Я решил всё-таки сначала сделать самую жирную версию, которая в точности будет соответствовать оригиналу. Это возможно на Специалисте-МХ, так как его графические возможности позволяют полностью передавать графику ZX. После получения такой версии буду её упрощать под остальное железо. К тому же, такую версию, как мне кажется, будет проще перенести, например, на Вектор. Вот так игра сейчас выглядит на Специалист-МХ. То есть 1:1, как на Спектруме.



    Изначально я старался вносить минимум изменений в код и логику игры и её движка. То есть я использовал и формат графики, и формат теневого буфера, какими они были в оригинальной игре. А в оригинальной игре всё хранится построчно. Я всё это оставил, как есть, и просто в процессе вывода на экран Специалиста преобразовывал всё на лету. Однако, как только я взялся за поддержку цвета, то понял, что при таком подходе цвет будет отжирать слишком много ресурсов. И есть подозрение, что при дальнейшем переводе кода на более медленный процессор i8080 всё просто встанет колом. Поэтому я решил все перелопатить и сделать хранение и вывод в столбик, по аналогии с экраном Специалиста. Изначально мне показалось, что с этим не возникнет сложностей. Однако я сижу уже больше недели, и у меня не получается добиться положительно результата. Оказалось, что почти вся игра завязана на такое хранение. Буквально во всех местах есть какие-то участки, в которых идёт расчёт на линейное расположение графики. Начиная от рисования обрамления кирпичей, и заканчивая бегающими по каретке точками.

    С горем пополам я сделал вывод всех разновидностей (цветные, с маской и без неё) спрайтов в таком виде. Но вдруг откуда ни возьмись за движущимся спрайтами появился шлейф. Понятия не имею откуда он взялся и как от него теперь избавится. Многократно прошерстил всю процедуру вывода графики, но даже не понял почему его изначально не было - нигде просто нет ничего, что бы стирало предыдущий спрайт. Пока отложил.

    Тут же почему-то счёт первого игрока начал отображаться на месте счёта второго. А я в эту процедуру даже не лазил. Проблема возникла сразу после переработки процедуры рисования цифр счёта. Причём что любопытно, проблема проявляется через один запуск, то есть, если проиграть и запустить игру заново, счёт будет отображаться корректно, а потом он будет снова с проблемой. Я бегло глянул, попытался найти причину, но пока тоже отложил.

    Ну и сейчас завис на адовой процедуре выбивания кирпича. Это какая-то огромная процедура! Она самая большая во всей игре. Логику работы понять не удаётся, а не понимая логики сложно переработать вывод графики. Мне удалось лишь сделать восстановление цвета под выбитым кирпичом, но всё остальное пока никак. И вообще сейчас из-за этого всё поломалось и перестало играться: экран портится, доиграть раунд до конца сейчас не удаётся.

    В общем, проблем с таким хранением возникло слишком много. Какие-то удаётся побороть, а какие-то пока нет. Энтузиазм потихоньку угасает. Если окончательно угаснет, то вернусь к варианту линейного хранения графики.

    Но нет худа без добра. Благодаря этой затее с переводом на новый тип вывода графики я более плотно влез во многие процедуры и начал понимать их логику, и сейчас исходник Batty для ZX Spectrum можно менять как душе угодно, перемещая процедуры, переменные и буферы в любые доступные места - всё будет компилироваться и корректно работать.
    С уважением, Станислав.

  17. Эти 7 пользователя(ей) поблагодарили CityAceE за это полезное сообщение:

    Barmaley_m (30.12.2020), fifan (05.10.2020), ivagor (02.10.2020), nzeemin (12.10.2020), Oleg N. Cher (04.10.2020), SoftLight (02.10.2020), vernigor (10.10.2020)

Страница 1 из 6 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Exolon для ПК Специалист
    от CityAceE в разделе Специалист
    Ответов: 212
    Последнее: 30.12.2023, 08:41
  2. Дизассемблирование игры Batty
    от CityAceE в разделе Программирование
    Ответов: 79
    Последнее: 29.12.2022, 13:30
  3. SD Card для Специалист М и ОС
    от zx_ в разделе Специалист
    Ответов: 4
    Последнее: 01.03.2019, 23:01
  4. ранняя версия Batty
    от goodboy в разделе Игры
    Ответов: 18
    Последнее: 24.10.2009, 03:34
  5. Batty
    от CityAceE в разделе Игры
    Ответов: 1
    Последнее: 14.03.2005, 05:55

Ваши права

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