Цитата Сообщение от Error404 Посмотреть сообщение
Конкретно для Спека, где надо по первому такту проца сгерить прерывание и уже через 2 такта Z80 выдать результат из таблицы состояний, надо к схеме контроллера добавить всего лишь один 8-битный регистр с Z-состоянием (ИР22/23/33): контроллер по прерыванию в нее пишет как успеет, а Спек из него читает когда хочет, управляя Z-состоянием (Z80.RD->ИР23.OE).

При такой реализации не важно сразу ты отработаешь прерывание от ZX и запишешь в регистр, или по приоритетам спустя несколько милисекунд, или отвлекаясь на обработку USB. Ибо регистр хранит данные уже актуальные (если успели ответить) или предыдущего "запроса" (если моментально ответить не успели). Т.е. опять все тот же некритичный (для человеческого восприятия) случай когда со стороны ZX-хоста выглядит что кнопка нажата или отпущена на пару милисекунд позже чем есть.
Есть подводный камень: Z80 делает серию чтений, при этом сдвиг "неуспевших" данных означает сдвиг кнопок по матрице клавиатуры. Если делать строго 1 регистр, то заполнять его надо актуальными данными. А если обеспечить Z80 полным набором регистров на всю клаву, тогда да, обновлять ее можно на любой скорости, хоть 10фпс, для человека это не особо важно. Родной опрос на 50фпс, конечно.