Como o link de Ƭᴇcʜιᴇ007 descreve, antigamente, isso era feito por hardware especializado na placa de vídeo, chamado gerador de caractere . O padrão de pixel correspondente a cada caractere seria armazenado em uma ROM (ou EPROM), em um endereço correspondente ao valor ASCII do caractere (ou outro código de caractere, já que os conjuntos de caracteres não-ASCII eram mais comuns naquela época). Você pode alterar sua fonte substituindo o chip de ROM de caracteres por um contendo diferentes padrões de bits.
Um circuito bastante simples na placa de vídeo gera pixels em tempo real lendo um byte do buffer de exibição, usando isso como um endereço para ler um byte da ROM de caractere e, em seguida, mudando o que encontrou lá para fora do vídeo porta um bit de cada vez. Como o relógio que executa esse circuito é sincronizado com o movimento do feixe de elétrons no CRT (ou vice-versa), esses bits correspondem a pixels visíveis ao longo de uma linha de varredura. Quando chega a hora de gerar a próxima linha de varredura, o circuito lê a próxima linha de dados de caractere em cada entrada da ROM; ou se ele alcança a parte inferior da célula de caractere, avança para a próxima linha na memória de exibição e volta para a primeira linha da memória de caracteres novamente.
Isso talvez pareça mais complicado do que é - pode ser implementado com contadores e máquinas de estado simples.
As exibições mapeadas por bits são realmente mais simples: elas simplesmente lêem o que estiver na memória de exibição e armazenam a porta de vídeo sem a tabela de pesquisa intermediária. No entanto, isso obviamente requer muito mais RAM, e a RAM é realmente cara.