Высота символов меняется так:
| Код | mov dx,3D4h mov al,9 out dx,al inc dx mov al,8 ; ВысотаСимволов out dx,al |
Образ символов вот так (если без прерываний):
| Код | ; Процедура GetCharImage - получить образ символа ; Вход: AL = код символа, ES:DI = адрес для записи образа символа (16 байт) GetCharImage proc near
xor ah,ah xchg si,ax
cli mov dx,3CEh mov ax,0C06h out dx,ax ; Отвязываем чётную карту от нечётной, Seg=0B800h (P.S. Wow! Как умно сказанул!) mov ax,00204h out dx,ax ; Выбираем для чтения карту #2 mov ax,00005h out dx,ax ; Регистр режима (НЕ odd/even-адресация и т.д)
push ds if @Cpu and 1 push 0B800h pop ds shl si,5 else mov cx,0B800h mov ds,cx mov cl,5 shl si,cl endif mov cx,8 cld rep movsw ; Копируем образ символа в память pop ds
mov ax,0E06h out dx,ax ; Связываем чётную карту с нечётной, Seg=0B800h mov ax,1005h out dx,ax ; Регистр режима (odd/even-адресация и т.д) mov ax,4 out dx,ax ; Выбираем для чтения карту #0
sti ret
GetCharImage endp
;----------------------------------------------------------------------------;
; Процедура SetCharImage - установить образ символа ; Вход: AL = код символа, DS:SI = адрес образа символа (16 байт) SetCharImage proc near
xor ah,ah xchg di,ax
cli mov dx,3C4h mov ax,402h out dx,ax ; Разрешаем запись в плоскость 2 mov ax,504h out dx,ax ; Режим памяти (текстовый, последов, 64K памяти) mov dl,0CEh mov ax,0C06h out dx,ax ; Отвязываем чётную карту от нечётной, Seg=0B800h ; (P.S. Wow! Как умно сказанул!) push es if @Cpu and 1 push 0B800h pop es shl di,5 else mov cx,0B800h mov es,cx mov cl,5 shl di,cl endif mov cx,8 cld rep movsw ; Копируем образ символа из памяти pop es
mov ah,0Eh out dx,ax ; Связываем чётную карту с нечётной mov dl,0C4h mov ax,304h out dx,ax ; Режим памяти (текстовый, чередующ, расш.пам) mov al,2 out dx,ax ; Запрещаем запись в плоскость 2
sti ret SetCharImage endp | |