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

User Tag List

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 41 по 50 из 78

Тема: PyZX - эмулятор ZX Spectrum, полностью написанный на Python

  1. #41
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,486
    Спасибо Благодарностей отдано 
    221
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    115 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    2. Думаю что стало чуть медленнее чем было, но не думаю что критично.
    Я ещё не щупал, что за зверь, но есть шанс, что Pythran поможет?

  2. #42
    Guru Аватар для CodeMaster
    Регистрация
    26.04.2009
    Адрес
    г. Воронеж
    Сообщений
    6,233
    Спасибо Благодарностей отдано 
    140
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    182 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    но есть шанс, что Pythran поможет?
    Поможет, но это вечный спор компилятор vs. интерпретатор.
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

  3. #43
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Я ещё не щупал, что за зверь, но есть шанс, что Pythran поможет?
    Ну так можно и pypy использовать в принципе-то.

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

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Ну так можно и pypy использовать в принципе-то.
    У меня Pypy не получилось подружить с pygame
    С уважением, Станислав.

  5. #45
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    У меня Pypy не получилось подружить с pygame
    Вариант https://stackoverflow.com/questions/...game-with-pypy

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

    По умолчанию

    Поработал немного над PyZX. За основу взял исходники Q-Master'а c GitHub.

    1. Изменил заголовок окна. Теперь там отображается название эмулятора и FPS (можно отключить, изменив значение переменной).
    2. Добавил иконку. Странно, но она отображается только в заголовке окна, а в панели задач нет. Победить проблему не смог, хотя на моём другом проекте всё отображается, как положено, в обои местах.
    3. Добавил бордюр и его эмуляцию. Пришлось вбить костыль, потому что заготовка под обработку портов, которую сделал Q-Master, не работает должным образом. Обратил внимание на то, что где-то в основном коде эмуляции есть ошибка - при подаче команд BORDER 0...7, нижняя строка основного экрана закрашивается в цвет бордюра только в районе текста, а не целиком.
    4. Исправил ошибку с яркими цветами чернил - чернильные цвета всегда отображались с выключенной яркостью.
    5. Увеличил на несколько кадров FPS, максимально разгрузив от любых вычислений процедуру преобразования ZX-экрана в поверхность. Все данные берутся из заранее просчитанных табличек, а массив пишется в буфер за раз.
    6. Сделал масштабирование экрана 1x, 2x и 3x. Переключать масштаб можно на лету клавишами F1-F3. По умолчанию эмулятор запускается с картинкой в двойном размере (можно изменить, откорректировав соответствующую константу).
    Вложения Вложения
    • Тип файла: zip PyZX.zip (75.1 Кб, Просмотров: 63)
    С уважением, Станислав.

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

  8. #47
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Поработал немного над PyZX. За основу взял исходники Q-Master'а c GitHub.

    1. Изменил заголовок окна. Теперь там отображается название эмулятора и FPS (можно отключить, изменив значение переменной).
    2. Добавил иконку. Странно, но она отображается только в заголовке окна, а в панели задач нет. Победить проблему не смог, хотя на моём другом проекте всё отображается, как положено, в обои местах.
    3. Добавил бордюр и его эмуляцию. Пришлось вбить костыль, потому что заготовка под обработку портов, которую сделал Q-Master, не работает должным образом. Обратил внимание на то, что где-то в основном коде эмуляции есть ошибка - при подаче команд BORDER 0...7, нижняя строка основного экрана закрашивается в цвет бордюра только в районе текста, а не целиком.
    4. Исправил ошибку с яркими цветами чернил - чернильные цвета всегда отображались с выключенной яркостью.
    5. Увеличил на несколько кадров FPS, максимально разгрузив от любых вычислений процедуру преобразования ZX-экрана в поверхность. Все данные берутся из заранее просчитанных табличек, а массив пишется в буфер за раз.
    6. Сделал масштабирование экрана 1x, 2x и 3x. Переключать масштаб можно на лету клавишами F1-F3. По умолчанию эмулятор запускается с картинкой в двойном размере (можно изменить, откорректировав соответствующую константу).
    А пулл-реквестик зафигачить?
    PS: заготовка, да, пока не работает как надо, т.к. основная идея сделать поддержку ленты и загрузки с нее. Я сейчас там сильно.

    - - - Добавлено - - -
    @CityAceE:
    Посмотрел код и не понял зачем костыль если можно было поправить xOutFE?
    Заберу твой код в мастер на гитхабе, не возражаешь?

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

    Еще раз посмотрел кусок с видео. Что не понял совсем:
    1. Странное копирование скринов и при смене режима один из скринов остается старого размера. Чем тебе не угодила ф-ция init и почему при каждом импорте будет дергаться весь цикл заполнения всех таблиц и пересоздание скринов - неясно.
    2. Зачем-то выполняется лишнее копирование в fill_screen_map() которого я, как-раз, старался избежать. Я не понял зачем гонять данные туда-сюда, учитывая что bytearray через + заполняется не просто медленно, а адово медленно. Понятнее было-бы однократное создание массива нужной длины и его уже заполнения.

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

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    А пулл-реквестик зафигачить?
    ...
    Заберу твой код в мастер на гитхабе, не возражаешь?
    Выложил эту версию сюда по большей части для тебя, чтобы ты посмотрел и, если что-то приглянулось, перетянул бы к себе на GitHub. Твой опыт в Python существенно больше моего, поэтому скорее всего ты сможешь сделать лучше, чем то, как я сделал. Поэтому я и не стал делать pullrequest. А так, конечно, что нужно забирай!

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Посмотрел код и не понял зачем костыль если можно было поправить xOutFE?
    Это первое, куда я сунулся. Прежде всего я поставил туда print(port, value) и начал из Basic менять цвет бордюра. Но, к сожалению, в эту процедуру доходит только 254, 254. Разбираться что к чему я не стал, поэтому закостылил, чтобы ты потом сделал правильно.

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Странное копирование скринов и при смене режима один из скринов остается старого размера.
    Есть три поверхности:
    1. Основной экран - он может масштабироваться, его мы и видим в окне.
    2. Второй экран, он же бордюр, его размер всегда 384х256.
    3. Экран Спектрума, его размер всегда 256х192.

    Вывод происходит следующим образом:
    1. Экран Спектрума копируется на центр экран бордюра. На выходе получаем картинку Спектрума с бордюром размером 384х256.
    2. Накладываем этот бутерброд на основной экран, предварительно растянув его:
    screen.blit(pygame.transform.scale(second_screen, current_mode), (0, 0))

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Чем тебе не угодила ф-ция init и почему при каждом импорте будет дергаться весь цикл заполнения всех таблиц и пересоздание скринов - неясно.
    Как раз для того, чтобы исключить include video из spectrum.py я и упразднил её. Хотя, возможно, перед этим я в другие файлы проекта этот include добавил по необходимости. В твоём варианте всё равно все таблицы рассчитывались вне процедур и, соответственно, генерировались каждый раз при include. Я думаю, что генерацию таблиц нужно выносить в отдельную процедуру.

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Зачем-то выполняется лишнее копирование в fill_screen_map() которого я, как-раз, старался избежать.
    Не совсем понимаю о чём ты. В fill_screen_map() сейчас идёт заполнение zx_array, чтобы потом его разом записать в буфер. Так получилось быстрее по сравнению с тем, что было у тебя. Я когда всё это делал, всё время держал под рукой твою версию и сверял скорость с ней, чтобы не дай бог не получилось медленнее, а вообще я, естественно, старался сделать чуть быстрее и в итоге удалось выиграть несколько FPS.

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Я не понял зачем гонять данные туда-сюда, учитывая что bytearray через + заполняется не просто медленно, а адово медленно.
    Да, в какой-то момент после разворачивания циклов перестал работать append. В итоге нарисовались две альтернативы: + и extend. Я провёл замеры и оказалось, что "+" чуть-чуть быстрее, чем extend. И это даже быстрее, чем append в цикле или 8 append'ов подряд. Это место меня, конечно, тоже расстроило.

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Понятнее было-бы однократное создание массива нужной длины и его уже заполнения.
    Так?
    Код:
    def fill_screen_map():
        zx_videoram = Z80.memory.mem[16384:16384 + 6912]
        zx_array = bytearray(49152)
        mem = 0
        for line_numb in range(192):
            pix_addr = addr_pix[line_numb]
            attr_addr = addr_attr[line_numb]
            for i in range(32):
                zx_array[mem:mem + 8] = pixelmap[zx_videoram[attr_addr + i]][zx_videoram[pix_addr + i]]
                mem += 8
        return bytes(zx_array)
    Замеры показывают, что скорости эти не добавляет. Скорее всего нужно придумывать что-то другое.

    ---

    Выкачал сейчас твой обновлённый вариант и сравнил по скорости со своим. Например, в Basic мой вариант примерно на 1 FPS показывает больше. Примерно та же ситуация и на титульном экране Exolon'а.

    ---

    Проверил кусок кода, который я привёл вышел. И на моём другом проекте скорость поднялась не просто чуть-чуть, а вдвое! Старый вариант c "+" выдавал 72 FPS, а в новом варианте FPS поднялся до 144!
    Последний раз редактировалось CityAceE; 19.02.2019 в 04:23.
    С уважением, Станислав.

  10. #49
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,486
    Спасибо Благодарностей отдано 
    221
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    115 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    2. Добавил иконку. Странно, но она отображается только в заголовке окна, а в панели задач нет. Победить проблему не смог, хотя на моём другом проекте всё отображается, как положено, в обои местах.
    В панели отображается.
    Win7, Python 3.6, pygame 1.9.4

    https://i.imgur.com/RhUpPtz.png
    Последний раз редактировалось Bedazzle; 19.02.2019 в 08:08.

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    В панели отображается.
    Странно... У меня в Win10 именно в этом проекте не отображается на двух компах.
    С уважением, Станислав.

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Тулзы для работы с образами на Python
    от Q-Master в разделе Утилиты
    Ответов: 4
    Последнее: 25.11.2014, 22:44
  2. Собрал комп полностью своими руками
    от scooby-do в разделе Зарубежные компьютеры
    Ответов: 14
    Последнее: 27.06.2009, 11:25
  3. эмулятор ZX Spectrum на Atari XL?
    от [bETA]mEN в разделе Atari
    Ответов: 1
    Последнее: 09.12.2007, 22:51
  4. Python
    от Black1980 в разделе Программирование
    Ответов: 12
    Последнее: 26.12.2006, 10:30

Ваши права

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