Size: a a a

Ассемблер

2021 March 28

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Я не помню только: конкретно эти тесты, что я выше прислал — это запись в сегмент 0A000h или в линейный буфер (LFB). LFB быстрее работает. Но я и то, и то тестил. В любом случае разница колоссальная. И ещё, конечно, будет отличаться по скорости (и ускорению), когда карта интегрированная и дискретная.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
MTRR вообще кэширование памяти регулируют. Т.е. ты можешь отключить (или поменять тип) кэширование ВСЕЙ памяти :)
Но там геморно и неудобно сделано всё, что не касается сегментов A000h-FFFFh (вернее, линейных адресов A0000h-FFFFFh, вроде только эти).
Поэтому с включением WC для LFB код будет значительно больше.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Но кэширование ещё в каких-то структурах прописывается (в структурах страничной адресации вроде).
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Ладно, я спать ✌️
источник

ST

Saenro T in Ассемблер
👍🤝
источник

d

disba1ancer in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Да, так по-нормальному и делается. Двойная буферизация называется :)
это не двойная буфферизация
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
disba1ancer
это не двойная буфферизация
Ну а что же это?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Двойная буферизация - это не обязательно 2 буфера, которые обмениваются. Формирование картинки в отдельной памяти с последующим копированием в видеопамять - это тоже двойная буферизация.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Просто есть разные реализации, а суть везде такова, что ты рисуешь в отдельном буфере, а выводишь его позже целиком, когда готова вся картинка.

Обменом или копированием - это уже нюансы.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Тройная есть ещё. Даже аппаратная в VESA.
источник

ST

Saenro T in Ассемблер
Сделал копирование готового блока 64к в видеобуфер, скорость не просела вроде... А теперь попробую Турбо включить)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Ну и бонусом ещё, буфер выводятся во время вертикальной синхронизации. Чтобы не было разрывов (tearing), когда половина изображения от старого кадра, половина - от нового.
источник

ST

Saenro T in Ассемблер
Ну да
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Saenro T
Сделал копирование готового блока 64к в видеобуфер, скорость не просела вроде... А теперь попробую Турбо включить)
Ты можешь для прикола замерить скорость чтения и скорость записи в обычную память и видеопамять (A000, в частности). Заменить, скажем, rdtsc. А написать, нам тоже интересно будет :)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Многие прояснится :)
источник

ST

Saenro T in Ассемблер
Кстати, ДОС не обидится на:
push 0A000h
pop fs
mov ax, cs
add ax, 1000h
mov gs, ax

Copy gs to fs
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Самое то.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Только ты через rep movsw (movsd) не скопируешь в fs
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Так что, лучше gs -> es.
источник