Текстовый режим в действительности работает гораздо быстрее чем любая графика, но даже без включения специальных вещей для поддержки графики (типа FRAMEBUFFER) фактически на экран выводится полный растр графического режима (иначе просто и не вывести на экран ничего). Но аппаратной поддержи символьного терминала в современных адаптерах уже не делают - тогда бы сложно было бы поддерживать несколько фонтов, не говоря уже о национальных. Т.е. вы печатаете одну букву а адаптер обрабатывая вывод этого символа записывает матрицу (к примеру) 10х16 с пиксельным изображением символа в определенное место экрана.
Аппаратная поддержка работала так: в памяти экрана были коды символов и формируя развертку на экране адаптер сначала читал (как в примере) 16 раз байты из первой строки и каждый раз выводил по 10 пикселей на каждый символ беря соответствующую строчку из знакогенератора для каждого из символов первой строки. Знакогенератор для каждого символа содержал 10х16 бит его изображения. Затем прорисовывалась следующая строка, и далее...
Такое решение позволяло иметь память экрана размером 20х40=800 байт или 40х80=3200 байт (ВСЕГО!) и еще был нужен знакогенератор 256х10х16 = 40960 бит или 5210 байт. Но знакогенератор мог быть записан в постоянную память контроллера и оперативку не занимал. А в сумме на экране выводилось 20х40х10х16=128000 или 20х40х10х16=512000 точек т.е. 16 или 64 килобайта информации !!!
Очень экономное (по памяти) решение, но очень статичное - хочешь другие символы - надо перепрошивать память знакогенератра.