| Особенностью видеорежимов было ограниченное число цветов в видеорежиме, обычно четыре цвета<ref>У CGA четыре цвета и четыре палитры в теории, чаще всего две на практике: бело-розово-голубая и зелёно-жёлто-красная плюс цвет фона (в теории любой из 16 возможных, на практике чёрный). И плюс ультра-лоу-рез 160х100 с 16 цветами сразу (чреватый «снежком» на экране). У EGA любые 16 цветов из 64 доступных (на практике автор правки EGA не щупал).</ref>. При попытке обойти это ограничение возникали глюки. Наиболее крутые разработчики использовали эти глюки как [[Багофича|багофичи]], показывая картинку, невозможную для стандартного отображения без глюков<ref>Так, конфликт одновременного доступа к видеопамяти, который в виде бага предстаёт «снежком», в виде багофичи позволяет в том же CGA каждую строчку выводить в своей палитре + свой цвет фона из 16, что даёт изрядно-до-фига цветов. Делается это примерно так (не гарантирую, что на 8086, где был актуален CGA, ресурсов хватит, но на 286-х по идее работать должно): | | Особенностью видеорежимов было ограниченное число цветов в видеорежиме, обычно четыре цвета<ref>У CGA четыре цвета и четыре палитры в теории, чаще всего две на практике: бело-розово-голубая и зелёно-жёлто-красная плюс цвет фона (в теории любой из 16 возможных, на практике чёрный). Зато, в отличие от многих других компьютеров того времени, никаких конфликтных зон. И плюс ультра-лоу-рез 160х100 с 16 цветами сразу (чреватый «снежком» на экране). У EGA любые 16 цветов из 64 доступных (на практике автор правки EGA не щупал).</ref>. При попытке обойти это ограничение возникали глюки. Наиболее крутые разработчики использовали эти глюки как [[Багофича|багофичи]], показывая картинку, невозможную для стандартного отображения без глюков<ref>Так, конфликт одновременного доступа к видеопамяти, который в виде бага предстаёт «снежком», в виде багофичи позволяет в том же CGA каждую строчку выводить в своей палитре + свой цвет фона из 16, что даёт изрядно-до-фига цветов. Делается это примерно так (не гарантирую, что на 8086, где был актуален CGA, ресурсов хватит, но на 286-х по идее работать должно): |
| * Выделяется память под промежуточный фреймбуфер 321х200, где лишний байт в начале строки кодирует как раз палитру и фон для этой строки. Ну, или отдельно буфер 320х200, а отдельно 200 байт для палитр (так быстрее копировать). | | * Выделяется память под промежуточный фреймбуфер 321х200, где лишний байт в начале строки кодирует как раз палитру и фон для этой строки. Ну, или отдельно буфер 320х200, а отдельно 200 байт для палитр (так быстрее копировать). |
| * Таймер часов реального времени ускоряется в N раз, DOS такое прощала (однозадачность же, мешать некому. А сама ОС утрётся, она не гордая). N должно быть таким, чтобы частота была чуть выше строчной. | | * Таймер часов реального времени ускоряется в N раз, DOS такое прощала (однозадачность же, мешать некому. А сама ОС утрётся, она не гордая). N должно быть таким, чтобы частота была чуть выше строчной. |