CityAceE, прошу прощения за телеграфный стиль - я писал с телефона. У 8255 есть режим быстрого сброса/установки бит в порту C. Он подробно описан в документации и эмуляторах, поэтому вдаваться в подробности здесь смысла нет.

Пока не изучал подробно сорцы, но сразу обратил внимание на то, что нету привязки к времени и если где-то принудительно не задан VSYNC, то программа молотит на 100% ядра. Особо не вдаваясь в pygame, с которым я знаком шапочно, попробовал сделать в основном цикле вот так:

Код:
    clock = pygame.time.Clock()
    while running:
        cpu.core()
        if cpu.ticks > INT_TICKS:
            cpu.ticks = 0
            if cpu.scr_upd:
                cpu.pygame.display.flip()
                clock.tick(50)
                cpu.scr_upd = False
Если я его правильно понял, clock.tick(fps) вызывает SDL_Delay() если его вызывают чаще, чем указанный в параметре fps. Теперь эффективность кода можно оценивать по загрузке проца.