Привет из прошлого, Ассемблер Z80
Читая один из постов Аввы, наткнулся на ассемблерные алгоритмы быстрой очистки экрана, вспомнил, что мне тоже
penguinny: Опыт работы в ассемблере даёт это знание самым непосредственным образом. Кстати, тесно связанный трюк в ассемблере Z80 служил как один из самых быстрых (и точно самый компактный) способ очистки экрана:
ld hl,screen_addr ld de,screen_addr+1 ld bc,6143 ld (hl),0 ldir
Команда ldir копирует bc байт информации, начинающейся с адреса hl, в блок памяти, начинающийся с адреса de. С учётом выбранных адресов, 0 вручную пишется в первый байт, а затем копируется из первого во второй, из второго в третий, и т. д. Экран очищается по индукции.
kray_zemli: говорят,
как-то через стек можно ещё было. вы его имели в виду?penguinny: Да, именно так. Регистр стека устанавливался в конце экрана, один
из 16-битных регистров очищался и затем в частично развёрнутом цикле многократно сохранялся в стек.16-битные операциина 8-битном процессоре! Шок.
Комментарии 14
Не самый :)
9 байт против 13 ;)
Я так понял, что оно будет чистить до адреса 00FF? Т.е. попытается зачистить ПЗУ тоже? :)
Ага, для Speccy некритично :)
Некритично, но должно сказываться на производительности очистки экрана, я думаю.
SiMM прав, я не думал о компактности, когда писал.
А в плане производительности, его код легко улучшается вот таким образом:
LD HL,#5B00 ; 3
XOR A ; 1
DEC HL ; 1
LD (HL),A ; 1
OR (HL) ; 1
JR
А где тут улучшена сильно производительность? Как цикл «очищал» лишние полтора десятка килобайт, так и очищает.
Это вы
А, точно, не увидел скобки. Я всё же за последний десяток лет не читал Ассемблер Z80 ни разу, я думаю :)
Комментарий для Евгения Степанищева:
Сходу даже не возьмусь сказать, где была бы важна производительность для ОЧИСТКИ экрана :) В целях экономии времени можно и очисткой 768 байт ограничиться (в некоторых случаях — вполне, если экран перед изменением атрибутов целиком перерисовывается). Ну и если уж ОЧЕНЬ критична производительность — то, как уже упоминалось:$-16
жж-аккаунтом не оставляется.
LD HL,0
LD SP,#5B00
LD B,192+24;
.16 PUSH HL; тиражируем 16 раз, см. описание на STORM http://zxpress.ru/article.php?id=11747
DJNZ
PS: таки да, в FireFox'е 17.0.1/WinXP каммент под
В топку такие программы.