Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.150.59] |
|
Сообщ.
#1
,
|
|
|
Всех приветствую, как на асме создать свой символ?
Например я жму "1" а он отображает что то другое, свое? Если можно то пример в виде макроса. |
Сообщ.
#2
,
|
|
|
Ну, если под DOS тебе это надо и для текстового режима, то пройдись по этим ссылкам:
Пример программы заменяющей шрифты Программирование знакогенератора Знакогенератор и int 10h |
Сообщ.
#3
,
|
|
|
Спасибо за ссылки.
|
Сообщ.
#4
,
|
|
|
Цитата Например я жму "1" а он отображает что то другое, свое? Вот с единичкой, если мне память не изменяет, как раз не выйдет: изменить рисунок можно только у символов с ASCII-кодами от 080h до 0ffh. |
Сообщ.
#5
,
|
|
|
Нет, менять можно у любых.
--------V-101110----------------------------- INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD USER-SPECIFIED PATTERNS (PS,EGA,VGA) AX = 1110h ES:BP -> user table CX = count of patterns to store DX = character offset into map 2 block BL = block to load in map 2 BH = number of bytes per character pattern Return: nothing Notes: This function will cause a mode set, completely resetting the video environment, but without clearing the video buffer This function is designed to be called immediately after a mode set, it is equivalent to AX=110xh except that: Page 0 must be active. Bytes/character is recalculated. Max character rows is recalculated. CRT buffer length is recalculated. CRTC registers are reprogrammed as follows: R09 = bytes/char-1 ; max scan line (mode 7 only) R0A = bytes/char-2 ; cursor start R0B = 0 ; cursor end R12 = ((rows+1)*(bytes/char))-1 ; vertical display end R14 = bytes/char ; underline loc (*** BUG: should be 1 less ***) the current block specifiers may be determined with INT 10/AH=1Bh, looking at offsets 2Bh and 2Ch of the returned data (VGA only) (see AH=1Bh,#00040) SeeAlso: AX=1100h,AX=1111h,AX=1112h,AX=1114h,AH=1Bh,AX=CD10h,MEM 0040h:0084h Index: text mode;font|text mode;screen rows Через порты: ;----------------------------------------------------------------------------; ; Процедура 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 |