如何更改VGA 字型 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
如何更改VGA 字型
--------------------------------------------------------------------------------發信人: Hentai@cis_nctu (ああっ!すくるどさまっ), 信區: sources
標 題: 如何更改VGA 字型
發信站: 交大資科_BBS (May 17 14:11:56 1995)
轉信站: cis_nctu 在programming 板又提到這個問題,乾脆把我自己的程式
整理一下 post 上來..... 底下,是我用組語寫的,專門給C 用的程式。使用方法,
很簡單,只有這兩個函數。一個是把現在螢幕的字型 bitmap
資料讀到 buffer 裡去。一個是把bitmap 字型寫到螢幕
上面。 底下第一段是一個 .h 檔。其實只有兩行而已,只要這兩
行加到程式裡去就可以了。第二段是一個 .asm 檔。
save 下來後用 masm /mx (tasm 也可以)然後跟要用的程
式link 再一起就可以了。 注意的是,這個程式將 VGA 螢幕改為對應到 seg a000-bfff
後進行讀寫 font 的工作。如果這段空間被 memory map
掉(如 emm386 或 qemm 把 b000-b7ff 弄成 UMB 或在倚天
中文系統下),都將會嚴重的 bug 產生。使用前應自己做
檢查,如果有上述情形,就不要使用到這兩個函數。最簡
單的檢查方式就是把 b000-b7ff 這段中間隨便填入一個非
0xff 的數字,然後再讀出來看看這個數字對不對。正常的
話這段空間應該是不能修改的。如果發現這段空間被你程
式修改了,就不要使用這兩個函數了。 試過有問題的話麻煩請告訴我。 ----------------------------- .h ----------------------------------------
/* void ReadFont(char far *buffer,int code); */
/* Read ASCII code FONT to buffer */ void ReadFont(char far *buffer,int code); /* void WriteFont(int code,char far *buffer); */
/* Write buffer to ASCII code FONT */ void WriteFont(int code,char far *buffer); ---------------------------- .asm ----------------------------------------
.286
.MODEL SMALL ReadFont PROTO C buffer:DWORD,code:WORD
WriteFont PROTO C code:WORD,buffer:DWORD .CODE ; Read ASCII code FONT TO buffer ReadFont PROC C buffer:DWORD,code:WORD
PUSH SI
PUSH DI
PUSH DS
PUSH ES
MOV SI,code
LES DI,buffer
MOV AX,0A000H
MOV DS,AX
SHL SI,5
MOV CX,8
MOV DX,3CEH
MOV AX,206H
OUT DX,AX
MOV AX,204H
OUT DX,AX
ReadFont2: MOVSB
INC SI
INC DI
LOOP ReadFont2
MOV AX,0B000H
MOV DS,AX
SUB SI,16
SUB DI,15
MOV CX,8
ReadFont1: MOVSB
INC SI
INC DI
LOOP ReadFont1
MOV AX,4
OUT DX,AX
MOV AX,0E06H
OUT DX,AX
POP ES
POP DS
POP DI
POP SI
RET
ReadFont ENDP ; Write buffer TO ASCII code FONT WriteFont PROC C code:WORD,buffer:DWORD
PUSH SI
PUSH DI
PUSH DS
PUSH ES
MOV DI,code
LDS SI,buffer
MOV AX,0A000H
MOV ES,AX
SHL DI,5
MOV CX,8
MOV DX,3CEH
MOV AX,206H
OUT DX,AX
MOV DX,3C4H
MOV AX,0C02H
OUT DX,AX
WrtFont2: MOVSB
INC DI
INC SI
LOOP WrtFont2
MOV AX,0B000H
MOV ES,AX
SUB DI,16
SUB SI,15
MOV CX,8
WrtFont1: MOVSB
INC DI
INC SI
LOOP WrtFont1
MOV AX,302H
OUT DX,AX
MOV DX,3CEH
MOV AX,0E06H
OUT DX,AX
POP ES
POP DS
POP DI
POP SI
RET
WriteFont ENDP
END -------------------------------------------------------------------------------- Hentai 不hentai 就不叫Hentai 了
發表人 - jackkcg 於 2002/12/14 10:07:33
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
axsoft 大大 我以為有關dos的都上來此處 報歉 報歉 我把它改掉 轉貼 asm 相關文章 發表人 - jackkcg 於 2002/12/14 10:08:56
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |