Да, в какой-то момент после разворачивания циклов перестал работать 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'а.