ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
1433048 Топик полностью
RxTx (07.05.2024 01:06, просмотров: 84) ответил Adept на не понимаю как, но спорить не буду, ибо и тогда не обладал достаточными знаниями по структуре аппаратуры синклера, а теперь и подавно :))
Блочные команды Z80, типа LIDIR (#ED #B0) занимают 21 такт на пересылку 1 байта. Это много и код с ними работает медленнно. 

Поэтому применяли более быстрые способы, например писали несколько команд LDI:LDI:LDI:LDI... (каждая пересылает байт за 16 тактов) и даже несколько десятков и сотен команд подряд, забивая на подобные процедуры всю память. Эта техника известна как "Loop unrolling". Еще быстрый код строили на применении команд стека PUSH/POP. У Z80 команды работы со стеком работают очень быстро, обрабатывая сразу 2 байта за 10 и 11 тактов. Что касается синхронизации с прерыванием о котором написал тебе POV - прерывание выдавалось в начале каждого кадрового синхроимпульса, т.е. вначале построения кадра на экране телевизора. Поэтому если дождаться прерывания (а ждать его проще командой HALT - команда ожидания прерывания) и начать рисовать, то все получается плавно. Дождавшись прерывания дальше рисовали объекты на экране сверху-вниз в таком порядке, чтобы в момент записи в экранное ОЗУ не пересечься с чтением экранного ОЗУ видеоконтроллером. И другие трюки. Например в shock вот эта полосатая заставка получается за счет того что перед "лучом" (т.е. чуть опережая скорость чтения экранного ОЗУ видеоконтроллером) писали в ОЗУ байты, быстро заменяя цвета. У синклера цветовое разрешение 32x24 квадрата на экране. А тут, если присмотришься - гораздо выше, но полосками (синхронными с цветом бордюра).

Спасибо, князь. Вы настоящий дворянин. И программист.