Цитата Сообщение от 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 через + заполняется не просто медленно, а адово медленно. Понятнее было-бы однократное создание массива нужной длины и его уже заполнения.