ÄúµÄλÖãºÍøÕ¾Ê×Ò³ > µçÆ÷άÐÞ×ÊÁÏÍø > ÕýÎÄ >
»ùÓÚ±í¸ñÇý¶¯µÄ³ÌÐòÉè¼ÆË¼Ïë
À´Ô´£º ÈÕÆÚ£º2013-12-8 11:33:15 ÈËÆø£º±êÇ©£º
Èí¼þµÄ¿ÉÒÆÖ²ÐÔÊÇÖ¸Èí¼þ²úÆ·´ÓÒ»¸öÓ²¼þ/Èí¼þ»·¾³×ªÒƵ½ÁíÒ»¸öÓ²¼þ/Èí¼þ»·¾³µÄÄÑÒ×Óë·±¼ò³Ì¶È¡£Ëü´ÓÈí¼þ¶Ôл·¾³µÄÊÊÓ¦ÐÔÕâÒ»·½Ã棬·´Ó³ÁËÈí¼þµÄÖÊÁ¿¡£ÎªÁËÌá¸ßÈí¼þµÄ¿ÉÒÆÖ²ÐÔ£¬Ó¦¾¡Á¿Ê¹Èí¼þÓë¾ßÌåµÄÉ豸Î޹أ¬¼´Ìá¸ßÈí¼þµÄÉ豸¶ÀÁ¢ÐÔ¡£¶ÔÓÚ256ɫͼÐνçÃæ¶øÑÔ£¬¾ÍÊÇҪʹ³ÌÐò²»ÒÀÀµÓÚijÖÖÌØ¶¨µÄÏÔʾÆ÷¡£ÀýÈ磬³ÌÐòԱûÓÐÈκÎÀíÓɼٶ¨Óû§Ê¹ÓõÄÊÇTVGA¡£Îª´Ë£¬³ÌÐòÔ±±ØÐëÌṩÏÔʾ¿¨µÄ³£¹æ¼ì²âÀý³Ì£¬²¢Äܸù¾Ý¼ì²âµÄ½á¹û¾ö¶¨Í¼ÐÎËã·¨µÄ¾ßÌåʵÏÖ¡£
Ìá¸ßÈí¼þÉ豸¶ÀÁ¢ÐԵķ½·¨Óкܶ࣬±í¸ñÇý¶¯¾ÍÊÇÆäÖÐÒ»ÖÖ¡£Ëùν±í¸ñ£¬¾ÍÊǸù¾ÝÐèÒªÉè¼ÆµÄÊý¾Ý½á¹¹¡£±í¸ñÖеÄÊý¾ÝÓɼì²âÀý³ÌÌîд¡£±í¸ñÖаüº¬ÄÄЩÀ¸Ä¿£¬Ó¦ÔÚ¶Ô¸÷ÖÆÔìÉÌÌṩµÄSuperVGA²úÆ·×ã¹»Á˽âµÄ»ù´¡ÉÏÈ¡ÉᣬÀ¸Ä¿Ó¦ÌåÏÖ¸÷²úÆ·Ö®¼äµÄ²îÒì¡£
Ò»¡¢SuperVGA±à³Ì×ÛÊö
SuperVGA²úÆ·ÔÚÌåϵ½á¹¹ÉϺͱê×¼µÄIBM VGAÓÐËù²»Í¬¡£µ«±à³Ì˼Ïë»ù±¾ÉÏÊÇÒ»ÑùµÄ£¬ÕâЩ±à³Ì·½·¨ÒÑÓÐÐí¶àÎÄÕ½éÉÜ£¬ÕâÀï²»ÔÙÖØ¸´¡£
²»Í¬·Ö±æÂÊÖ®¼äµÄÇø±ð£¬ÌåÏÖÔÚ±à³ÌÉϾÍÊÇͬһÆÁÄ»×ø±êÓ³Éäµ½ÏÔ´æµÄµØÖ·²»Í¬£¬µ«Ó³Éä»úÀíÈ´ÊÇÒ»ÑùµÄ¡£¾ßÌåµØËµ£¬×ø±ê(x,y)¶ÔÓ¦ÏÔ´æµÄÆ«ÒÆµØÖ·(Ïà¶ÔÓÚA000)ΪAddr=-vga-width*y+x
2.·ÖÒ³»úÖÆ²»Í¬¡£SuperVGAʹÓÃ256K¡¢512K»ò1M
µÄÏÔʾ´æ´¢Æ÷½á¹¹¡£ÎªÁËʹ´¦ÀíÆ÷¿Éͨ¹ýÒ»¸ö64KÖ÷´°¿ÚÀ´´æÈ¡ÕâÑù´óµÄÏÔʾ´æ´¢Æ÷£¬SuperVGAÓÐÒ»¸ö´æ´¢Æ÷·ÖÒ³»úÖÆ£¬Ê¹µÃÖ»½«ÏÔʾ´æ´¢Æ÷µÄÒ»²¿·ÖÓ³Éäµ½´¦ÀíÆ÷µÄµØÖ·¿Õ¼ä¡£ÖµµÃ×¢ÒâµÄÊÇ£¬²»Í¬µÄVGA²úÆ·£¬ÆäÒ³µÄ´óС²»Í¬£¬Ò³ÆðʼµØÖ·µÄÁ£¶ÈÒ²ÊǿɱäµÄ¡£¾ßÌåµÄҳѡÔñËã·¨Çë²éÔÄÖÆÔìÉÌÌṩµÄ×ÊÁÏ¡£
²»Í¬µÄÏÔʾģʽ£¬ÏÔʾһÆÁͼÏñËùÐèµÄÒ³ÊýÊDz»Í¬µÄ¡£
³ýÁË¿ÉÒÆÖ²ÐÔÍ⣬ЧÂÊÒ²ÊÇÒ»¸ö²»¿ÉºöÊÓµÄÒòËØ¡£Í¼ÐÎϵͳµÄºËÐIJ¿·ÖӦʹÓûã±àÓïÑÔ±à³Ì¡£Õâ²»½öÊÇÒòΪ»ã±àÓïÑÔµÄЧÂʸߣ¬¶øÇÒ»¹ÒòΪ»ã±àÓïÑÔ×Ó³ÌÐòµÄ¿ÉÔÙÓÃÐԺͿÉÐÓÃÐÔÒ²ºÜºÃ¡£ºËÐIJ¿·ÖӦʮ·ÖÖØÊÓÏÂÃæ¼¸µã:(1)¼õÉÙ²»±ØÒªµÄÒ³±ß½ç¼ì²é´ÎÊý£»(2)Ö»ÓÐÔÚ±ØÒªÊ±²Å½øÐÐҳѡÔñ£»(3)Ñ¡Ôñ¸ßЧµÄ»úÆ÷Ö¸Áî¡£ÏÖ¾ÙÀý˵Ã÷¡£³ÌÐò1ÊÇͼÏñÏÔʾϵͳÖг£Óõĺ¯Êý£¬Æä¹¦ÄÜÊǽ«½â°üºóµÄͼÏñÊý¾ÝË͵½ÏԴ档Ϊ±ãÓÚÔĶÁͬʱ¸ø³öÁËCÓïÑÔµ÷ÓÃÔÐÍ¡£³ÌÐòÔÚ´«ËÍÿһÐÐÊý¾Ýʱ£¬ÌáǰԤ²âÊÇ·ñ»áÓöµ½Ò³±ß½ç£¬Èç¹ûûÓУ¬Ö±½Ó´«ËÍ£»Èç¹ûÓУ¬Ôò½«Êý¾Ý·Ö³ÉÁ½²¿·Ö£¬·Ö±ð´«ËÍ£¬Öмä²åÈëҳѡÔñ¡£ËùÓеĴ«Ë;ùÓÃ×Ö²Ù×÷´úÌæ×Ö½Ú²Ù×÷¡£Ò³±ß½ç¼ì²éÖ»ÓÐÒ»´Î£¬·ÖÒ³²Ù×÷Ö»ÓÐÔÚ±ØÒªÊ±²Å·¢Éú£¬Í¼ÏñµÄÏÔʾÓà ¸ßЧµÄÖ¸ÁîREP MOVSW¡£
³Ì¶È1:
£»ÔÐÍ:void LineDump(int x,int y, int num, char far*ptr)
;²ÎÊý:
£» x,y-ÆÁÄ»×ø±ê
£» num-±¾ÐеÄÏñËØ¸öÊý
£» ptr-Ö¸ÏòÏñËØÊý¾ÝµÄÔ¶Ö¸Õë
LineDump proc far
push bp
mov bp,sp
sub sp,2;WORD Reserved for LOCal var.
push ds
push es
push si
push di
reserved equ [bp-2];Local var.save seg(DGROUP)
x equ [bp+6];Large Model
y equ [bp+8]
num equ [bp+10]
offs equ [bp+12]
pseg equ [bp+14]
mov reserved,ds
mov ds,pseg
mov si,offs ;DS:SIͼÏñÊý¾ÝËùÔÚÔ´µØÖ·
mov ax,0a000h;ÏÔ´æ¶ÎÖ·
mov es,ax ;ES:DIÏÔ´æÄ¿µÄµØÖ·
mov ax,y
push ds
mov ds,reserved
mul word ptr DGROUP:-vga-width
pop ds
add ax,x
adc dx,0
mov di,ax ;DI=-vga-width*y+x
mov ah,dl ;½øÎ»²¿·Ö(DL)=Ò³ºÅ
call dword ptr cs:-PageSelect
mov cx, num ;±¾ÐÐÒª´«ËÍ×Ö½ÚÊý
mov bx, cx
add bx,di ;¼ì²â´«ËÍÊÇ·ñÔÚÒ»¸öÒ³ÄÚ
jnc Dump-In-One-Page
sub cx,bx ;CX=±¾Ò³×Ö½ÚÊý£¬BX=ÏÂÒ³×Ö½ÚÊý
shr cx,1 ;CX/2=×ÖÊý
rep movsw ;±¾Ò³ÄڵĴ«ËÍ
adc cx,0
rep movsb ;´¦Àí¿ÉÄܵįæÊý×Ö½ÚÊý
inc ah ;µ÷ÕûÒ³ºÅ
call dword ptr cs:-PageSelect
mov cx,bx ;ÐÂÒ³ÄÚҪдµÄ×Ö½ÚÊý
jcxz Dump-Done
Dump-In-One-Page:
shr cx,1 ;CX/2=×ÖÊý
rep movsw ;ͼÏñ´«ËÍ
adc cx,0
rep movsb ;´¦Àí¿ÉÄܵįæÊý×Ö½ÚÊý
Dump-Done:
pop di
pop si
pop es
pop ds
mov sp,bp
pop bp
ret
LineDump endp
¶þ¡¢±í¸ñÇý¶¯µÄ»ù±¾Ë¼Ïë
¸ù¾ÝÉÏÃæµÄ·ÖÎö£¬ÓÃÒÔÇý¶¯ÏÔʾϵͳµÄ±í¸ñ£¬ÖÁÉÙÓ¦µ±°üº¬ÏÂÁÐÏîÄ¿:
(1)ʵ¼ÊÏÔʾģʽ:vga-mode
(2)ˮƽ·Ö±æÂÊ:vga-width
(3)´¹Ö±·Ö±æÂÊ:vga-depth
(4)ҳѡÔñÀý³ÌµÄÈë¿ÚµØÖ·:PageSelect
(5)µ±Ç°ÏÔʾ·½Ê½ËùʹÓÃµÄ ´óÒ³ºÅ:vga-pages
Õâ¸ö±í¸ñÓÉͼÐγõʼ»¯Àý³ÌÀ´Ìîд¡£Í¼Ðγõʼ»¯Àý³Ì½ÓÊÕµÄÏÔʾģʽÊÇͳһµÄģʽºÅ£¬ÕâÑù¿ÉÒÔÆ²¿ª¾ßÌåµÄÉ豸£¬ÈçInitVGA(TVGA800×600)¡£¸ÃÀý³Ìµ÷ÓÃÏÔʾÉ豸¼ì²â³ÌÐòDetectVGAÀ´ÅжÏÏÔʾÆ÷µÄÀàÐÍ£¬´Ó¶øÌîд±í¸ñÖеĸ÷À¸Ä¿£¬²¢³õʼ»¯Í¼ÐÎϵͳΪËùÐèµÄͼÐη½Ê½¡£ËùÓÐͼÐÎËã·¨¶¼Òª²é´Ë±í¡£
³ýÁËÓÃÉÏÊö·½·¨À´ÊµÏÖ¼æÈÝÍ⣬ÊÓÆµµç×Óѧ±ê׼лá(VESA)ΪÎÒÃÇÌṩÁËÁíÒ»ÖÖ·½·¨¡£
VESA
ÌṩÁËÒ»×鸽¼ÓµÄBIOS¹¦ÄÜ£¬Õâ×鹦ÄÜÒÔ±ê×¼µÄ·½Ê½·ÃÎÊSuperVGAÀ©³äµÄģʽ¡£VESAµÄ¸½¼Ó¹¦Äܶ¼ÊÇͨ¹ýBIOSÖжÏ10HµÄ4FH¹¦ÄÜÀ´ÊµÏֵġ£VESAµÄ×Ó¹¦ÄÜ01ÄÜ·µ»Ø·Ç³£ÓÐÓõÄSuperVGAģʽÐÅÏ¢£¬°üÀ¨·ÖÒ³Àý³ÌµÄµØÖ·¡£
Òò´Ë£¬³ÌÐòÔ±¿ÉÒÔ°´ÕÕVESAµÄ±ê×¼À´±àдͼÐÎϵͳ£¬ÕâÑùµÄ³ÌÐò¿ÉÒÔÔÚËùÓÐÖ§³ÖVESAµÄÏÔʾÆ÷ÉÏÔËÐС£ÓÉÓÚVESA°üÀ¨ÁËÊÀ½çÉϵÄÖ÷ÒªVGA¹©Ó¦ÉÌ£¬Ð´³öÀ´µÄ³ÌÐò¿ÉÒÆÖ²ÐÔÊǺܺõġ£µ«ÊÇ£¬ÆäЧÂÊÈ´¿ÉÄÜÊÇ µÍµÄ¡£ËùÒÔ ºÃ²ÉÓÃÒ»ÖÖÕÛÖԵİ취£¬¶ÔÓÚÊìϤµÄ²úÆ·£¬¿ÉÒÔ²»ÓÃVESAµÄ¹¦ÄÜ£¬¶ÔÓÚ²»ÊìϤ(×ÊÁϲ»È«)»ò¼ì²â²»³öÀ´µÄÏÔʾÆ÷³¢ÊÔÓÃVESAÌṩµÄÊÖ¶ÎÀ´±à³Ì£¬µ±È»Òª¼ì²âÏÔʾÉ豸ÊÇ·ñÖ§³ÖVESA¡£
ÓÐʱ³öÓÚijÖÖ¿¼ÂÇ£¬²»Ï£ÍûÖ§³ÖËùÓÐÏÔʾÉ豸µÄ´úÂ뼯ÖÐÔÚÒ»¸ö³ÌÐòÖУ¬¿ÉÒÔΪÿ¸öÏÔʾÉ豸·Ö±ðÌṩÇý¶¯Ä£¿é£¬Ö÷³ÌÐò¸ù¾Ý¼ì²âµÄ½á¹ûÑ¡ÔñÒ»¸öºÏÊʵÄÄ£¿é¼ÓÔØ¡£BorlandµÄC++¾ÍÊÇÕâÑù£¬ËüÓÐÒ»Ì×BGIÇý¶¯³ÌÐò£¬¸÷Çý¶¯³ÌÐòÌṩͳһµÄͼÐκ¯Êý½Ó¿Ú¡£±ÊÕßÔÚʵ¼Ê¹¤×÷ÖУ¬ÎªÃ¿Ò»ÖÖÏÔʾÉ豸±àдÁËÒ»¸ö256É«µÄBGI¸ñʽµÄÇý¶¯³ÌÐò£¬ÕâÑù£¬ÔÚ±àдͼÐÎϵͳʱ£¬ÔÙҲûÓбØÒª¿¼ÂÇÓû§µÄʵ¼ÊÏÔʾÉ豸ÁË¡£
Èý¡¢·¶ Àý
±¾Îĸ½ÓÐÁ½¸öͼÐÎÏÔʾµÄÀý×Ó¡£ShowGifÄÜÏÔʾ16/256É«GIF¸ñʽͼÏñ£¬ÄÜÒÔÈκÎ256ɫģʽÆô¶¯£¬Ö§³Ö¶àÖÖÏÔʾÆ÷¡£Í¼Ïñ¿ÉÒÔÂþÓΣ¬²¢¿ÉËæÊ±Í¨¹ý°´¼üÇл»ÏÔʾ·½Ê½¡£MainÔòÊÇÒ»¸öBGIÇý¶¯µÄÊó±ê/¼üÅÌ¿ØÖƵÄ256É«ºº×ÖͼÐβ˵¥¡£Ëü×Ô¼º»áÌôѡһ¸öºÏÊʵÄBGI£¬Ò²¿ÉÒÔ´ÓÃüÁîÐÐÖ¸¶¨Ò»¸öBGI(±ÈÈçÖ¸¶¨VESA256¸øTVGAÏÔʾÆ÷)¡£
ÏÞÓÚÆª·ù£¬ÕâÀï½ö¸ø³öÓйصÄÊý¾Ý½á¹¹ºÍ²¿·Öº¯ÊýµÄ˵Ã÷(³ÌÐò2)¡£È»ºó¸ø³öÒ»¸ö³õʼ»¯ÏÔ
ʾϵͳµÄCÓïÑÔÆ¬¶Ï(³ÌÐò3)¡£
³ÌÐò2(TVGA256.H):
/* ͳһµÄģʽ¼¯ */
enum TVGA-MODE
TVGA320x200=0,
TVGA640x400=1,
TVGA640x480=2,
TVGA800x600=3,
TVGA1024x768=4,
;
void TVGA256-driver(void);
void PVGA256-driver(void);
void AVGA256-driver(void);
...
void VESA256-driver(void);
extern int far-Cdecl TVGA256-driver-far[];
extern int far-Cdecl PVGA256-driver-far[];
extern int far-Cdecl AVGA256-driver-far[];
...
extern int far-Cdecl VESA256-driver-far[];
/* Ö§³ÖµÄVGA¼¯ºÏ */
enum VGAs{
UnKnownVGA,
TridentVGA,
ParadiseVGA,
AheadVGA,
...
VesaVGA
};
/* ¶ÔÓ¦µÄBGIÇý¶¯³ÌÐòÃû */
unsigned char *Drivers[]={
"TVGA256",
"TVGA256",
"AVGA256",
...
"VESA256",
};
extern int DetectVGA(void);
/* ¹¦ ÄÜ:¼ì²âÏÔʾ¿¨µÄÐͺÅ
·µ»ØÖµ:0-Unknowm1-Trident VGA2-Paradise VGA
...
x-²»Äܼì²â³öµÄVGA£¬µ«Ö§³ÖVESA
·µ»ØÖµÍ¬Ê±Ð´ÈëÈ«¾Ö±äÁ¿vga-type */
extern int VesaFound(void);
/* ¹¦ ÄÜ:¼ì²âVESA BIOSµÄ´æÔÚÐÔ
·µ »Ø:0-²»Ö§³ÖVESA£»
ÆäËü-VESA°æ±¾ºÅ(0x0102¼´1.02°æ)£»
·µ»ØÖµÍ¬Ê±Ð´ÈëÈ«³Ì±äÁ¿vesa-found. */
extern void InitVesa(void);
/* ¹¦ ÄÜ:³õʼ»¯VESA.¸ù¾Ý-vga-modeģʽºÅ»»Ëã³ÉVESAµÄ±ê׼ģʽºÅÌîдҳÁ£¶È(WinGranularity)£¬Ò³´óС(WinSize),
ºÍ·ÖÒ³Àý³ÌµÄÈë¿ÚµØÖ·(WinFuncPtr)
VESAµÄ±ê׼ģʽ½âÊÍÈçÏÂ:
100h-640x400 256
101h-640x480 256
102h-800x600 16
103h-800x600 256
104h-1024x768 16
105h-1024x768 256 etc.
InitVesa¹©¸øInitVGAµ÷Óà */
extern void InitVGA(int mode);
/* ¹¦ ÄÜ:³õʼ»¯ÏÔʾϵͳ(×Ô¶¯µ÷ÓÃDetectVGA¼ì²âÏÔʾ¿¨)
²Î Êý:mode=TVGA320x200(0)
TVGA640x400(1)
TVGA640x480(2)
TVGA800x600(3)
TVGA1024x768(4)
·µ »Ø:InitVGAûÓÐÏÔʽµÄ·µ»ØÖµ£¬µ«Ëü³õʼ»¯ÏÂÁÐÈ«³Ì±äÁ¿:
vga-mode,vga-width,vga-depth,vga-pages,PageSelect
±ØÒªÊ±×Ô¶¯µ÷ÓÃInitVesa
*/
extern int vga-type;
extern int vga-mode;
extern int vga-width;
extern int vga-depth;
extern int vga-pages;
extern int vga-pages;
extern char page-number;
extern int vesa-found;
...
³ÌÐò3(³õʼ»¯ÏÔʾϵͳµÄ³ÌÐòƬ¶Ï):
...
int GraphDriver, GraphMode;
unsigned char *bgiDriver="PVGA256";
bgiDriver=Drivers[DetectVGA()];
GraphDriver=installuserdriver(bgiDriver,NULL);
GraphMode=TVGA800x600;
initgraph(&GraphDriver, &GraphMode," ");...
²Î¿¼ÎÄÏ×
1 À´ÎÄÕ¼µÈ±àÒë.Super VGA¸ß¼¶±à³ÌÖ¸ÄÏ.±±¾©:±±¾©¿Æº£ÅàѵÖÐÐÄ£¬1991.5.
2 ÕÅÒ»²¨±àÒë.Super VGAÓëVESA±à³ÌÖ¸ÄÏ.±±¾©:º£Ñó³ö°æÉ磬1992
¡¾¿´¿´ÕâÆªÎÄÕÂÔڰٶȵÄÊÕ¼Çé¿ö¡¿
Ïà¹ØÎÄÕÂ
- ÉÏһƪ£º ²Ù×÷LEDµç×ÓÏÔʾÆÁÐè×¢ÒâµÄÎÊÌâ
- ÏÂһƪ£º ÌÕ´ÉÏݲ¨Æ÷