ZX Power
#01
11 октября 1996 |
|
Ликбез - Пересылка память - память : мифы и реальность: Возможно ли перебросить экран быстрее чем за одно прерывание?
Пересылка память - память : мифы и реальность. (C) Dr.SQUIZER ________________________________ В среде начинающих програм- мистов SPECCY постоянно циркули- руют слухи , что кому-то удалось перебросить экран быстрее , чем за одно прерывание. Разберемся : возможно ли это ? Для пересылки 6144 байт нужно 6144 раз выполнить цикл записи в память , иначе это уже не будет называться пересылкой. А сколько циклов чтения нужно выполнить ? Если картинка симметричная либо периодическая , то, естественно, меньше. Оставим тут простор для творческой фантазии, а сами рас- смотрим случай нерегулярной кар- тинки. Выпишем из справочника в с е команды Z80 , в которые входит операция записи в ОЗУ : LD (HL),r LD (ii),r LD (DE),A LD (nn),A PUSH qq PUSH ii LDI LDIR LD (HL),n LD (ii),n LD (nn),HL LD (nn),dd EX (SP),HL EX (SP),ii LDD LDDR LD (BC),A LD (nn),ii По понятным причинам в список не вошли команды : INC (HL); DEC (HL); SET b,(HL); RES b,(HL); то же по ii; враще- ния и сдвиги по (HL) и (ii). Запись в память при помощи опе- раций CALL , RST и подтверждения прерывания оставим для крутых приколов. Перепишем теперь только те ко- манды , которые быстрее LDIR (иначе зачем и голову морочить). В скобках укажем количество так- тов процессора на запись одного байта в память при помощи этой команды : LDIR,LDDR (10.5) EX (SP),HL (9.5) LD (HL),r (7) PUSH qq (5.5) LD (nn),dd (10) LD (nn),HL (8) LD (BC),A (7) LD (nn),ii (10) PUSH ii (7.5) LD (DE),A (7) Команды, типа LD (HL),r требу- ют после себя как минимум 4 та- кта на модификацию адреса . Зна- чит , их реальное быстродействие 11 тактов на байт . По этой же причине исключаем и EX (SP),HL . Быстродействие команд LD (nn),dd и LD (nn),ii столь близко к LDIR что целесообразность их примене- ния в наших целях сомнительна. А вот команда LD (nn),HL за- служивает внимания. Команда PUSH сама декременти- рует адрес , но рано или поздно потребуется как минимум LD SP,nn поэтому ее максимальная произво- дительность в цикле : LD SP,nn PUSH AF PUSH BC PUSH DE PUSH HL EXX PUSH BC PUSH DE PUSH HL равна 6.5 тактов на байт , что и является рекордом для Z80. Не будем утомлять читателей аналогичными выкладками для ко- манд чтения из памяти. Приведем конечный результат : LDIR (10.5) LD HL,(nn) (8.0) POP qq (5.0;6.0) Отсюда следует , что экранную область ОЗУ можно переслать за такое количество тактов : LDIR : 6144 * 21 = 129 024 LD HL,(mm) LD (ss),HL: 6144 * 16 = 98 304 POP HL LD (ss),HL: 6144 * 13 = 79 872 POP/PUSH : 6144 * 12.5 = 76 800 Как видим , даже при периоде следования INT в 71 680 тактов , уложиться в одно прерывание не- возможно. Програмистская же легенда ро- дилась , по-видимому , из некор- ректного вычисления : POP/PUSH: 6144 * (5.0 + 5.5) = 70 656 (!). ________________________________ Пересылка память-память: мифы и реальность. (C) DJNZ --------------------------------
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября