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

User Tag List

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя
Показано с 51 по 60 из 78

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

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

    По умолчанию

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


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

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

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

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

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

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


    Так?
    Код:
    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'а.
    Ну вот смотри, твоя процедура за время своей работы 2 раза копирует данные: 1 - из pixelmap в zx_array, 2 - из него в поверхность. У меня копирование происходит по 8 точек за раз и только 1 раз. Да, чуть медленнее чем скопом, но твой вариант в целом делает то-же самое. У меня есть предположение что если пользоваться не buffer.write, а достать непосредственно мап на поверхность, то я легко верну тот 1 фпс.

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Проверил кусок кода, который я привёл вышел. И на моём другом проекте скорость поднялась не просто чуть-чуть, а вдвое! Старый вариант c "+" выдавал 72 FPS, а в новом варианте FPS поднялся до 144!
    [/QUOTE]
    Ну вот тут ничего не могу сказать. Если попробовать еще memoryview подключить - возможно еще вырастет.

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

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Странно... У меня в Win10 именно в этом проекте не отображается на двух компах.
    У меня все норм. Правда не на твоей версии, а на моей, но в принципе там ничего не изменено связанное с иконкой

    - - - Добавлено - - -
    @CityAceE, я немного извратился с твоим вариантом и возможно чуть ускорил его даже.

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

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    там ничего не изменено связанное с иконкой
    /кастую глюки pygame

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

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Ну вот тут ничего не могу сказать. Если попробовать еще memoryview подключить - возможно еще вырастет.
    Спасибо за совет! Добавил сверху ещё какое-то невероятное количество FPS (см. ниже), сделав вот так:

    Код:
    zx_array = memoryview(bytearray(49152))
    
    def fill_screen_map(zx_videoram=zx_screen):
        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 zx_array.tobytes()
    Цитата Сообщение от Q-Master Посмотреть сообщение
    У меня все норм. Правда не на твоей версии, а на моей, но в принципе там ничего не изменено связанное с иконкой
    А у меня твоя версия выглядит во так:



    А вот так выглядит мой проект:



    Попытался твою процедуру вывода на экран целиком к себе поместить, чтобы замерить скорость и сравнить. Но она сходу не заработала (экран оставался чёрным). Потыкался, сразу разобраться не получилось в чём проблем и я бросил. Но я успел увидеть, что FPS по сравнению с тем, что у меня было ранее (144) просел где-то на 10-15 кадров.
    @Q-Master, у меня есть пакет "идеальных" файлов SNA, которые я делал уже давно. Я уже писал ранее, что получал их из TZX, поставив на паузу сразу после загрузки последнего байта и потратив несколько байтов стека кассетного загрузчика. Так вот из 36 файлов корректно запустилось на текущей версии PyZX гораздо меньше половины Не работают игры по-разному: какие-то сбрасывают виртуальный Спектрум, какие-то зависают, какие-то портят экран, из-за некоторых вылетает эмулятор, какая-то одна игра заставила что-то выводить в консоль. В общем, вот этот пакет снепшотов. Посмотри, вдруг удастся оперативно отыскать и профиксить ошибки эмуляции.
    С уважением, Станислав.

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

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Спасибо за совет! Добавил сверху ещё какое-то невероятное количество FPS (см. ниже), сделав вот так:

    Код:
    zx_array = memoryview(bytearray(49152))
    
    def fill_screen_map(zx_videoram=zx_screen):
        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 zx_array.tobytes()
    Попытался твою процедуру вывода на экран целиком к себе поместить, чтобы замерить скорость и сравнить. Но она сходу не заработала (экран оставался чёрным). Потыкался, сразу разобраться не получилось в чём проблем и я бросил. Но я успел увидеть, что FPS по сравнению с тем, что у меня было ранее (144) просел где-то на 10-15 кадров.
    Ну вообще странно. Я пробовал перетаскивать твою процедуру целиком и не заметил изменений по фпс. Я вчера еще по разному игрался и пробовал вообще избавиться от конвертаций типов, но по фпс ничего не добился, а вот картинку испортил.

    Цитата Сообщение от CityAceE Посмотреть сообщение
    @Q-Master, у меня есть пакет "идеальных" файлов SNA, которые я делал уже давно. Я уже писал ранее, что получал их из TZX, поставив на паузу сразу после загрузки последнего байта и потратив несколько байтов стека кассетного загрузчика. Так вот из 36 файлов корректно запустилось на текущей версии PyZX гораздо меньше половины Не работают игры по-разному: какие-то сбрасывают виртуальный Спектрум, какие-то зависают, какие-то портят экран, из-за некоторых вылетает эмулятор, какая-то одна игра заставила что-то выводить в консоль. В общем, вот этот пакет снепшотов. Посмотри, вдруг удастся оперативно отыскать и профиксить ошибки эмуляции.
    Качнул, надо проверить что там не так. 146% что с флагами лажа где-то.

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

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    Ну вообще странно. Я пробовал перетаскивать твою процедуру целиком и не заметил изменений по фпс. Я вчера еще по разному игрался и пробовал вообще избавиться от конвертаций типов, но по фпс ничего не добился, а вот картинку испортил.
    Видимо, потому в PyZX процедура рисования экрана отнимает лишь жалкую часть от всего времени эмуляции. Соответственно, минимальные колебания скорости построения экрана слишком сложно заметить. Поэтому и нужно тестировать скорость этой процедуры отдельно от эмулятора - строть N-ное количество экранов и сравнивать с временем построения такого же количеств экранов, но уже по другому алгоритму. На всякий случай проговорил эту очевидную вещь, хотя убеждён, что ты это и сам прекрасно знаешь.
    С уважением, Станислав.

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

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Видимо, потому в PyZX процедура рисования экрана отнимает лишь жалкую часть от всего времени эмуляции.
    Загнал в профайлер, сижу, медитирую на результат.
    Кто-нибудь может пояснить, с чего начать?


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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Загнал в профайлер, сижу, медитирую на результат.
    Кто-нибудь может пояснить, с чего начать?

    А вобщем тут и нечего начинать. Ожидаемо что nxtpcb и execute жрут максимум ресурсов. Это z80-core и там мало что можно для оптимизации сделать, я уже там и так извращался как мог. Тут только переписывать на каком-нить компилируемом языке, но это уже неспортивно.

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

    По умолчанию

    Цитата Сообщение от Q-Master Посмотреть сообщение
    А вобщем тут и нечего начинать.
    Не, я к тому - куда смотреть, чтобы начать понимать табличку.

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Не, я к тому - куда смотреть, чтобы начать понимать табличку.
    Можно вот тут почитать https://habr.com/ru/company/mailru/blog/202832/

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

    По умолчанию

    Цитата Сообщение от Котя Посмотреть сообщение
    а Питон на чём запускать?
    Компиль надо или какая Среда?
    Нельзя из Этого ехешник сделать?
    На предыдущей странице.
    "Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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