[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[FWD] Re: 也谈汉字的快速显示



>From News server: news.freesoft.cei.gov.cn

From: "Miao YuCheng" <helios@online.sh.cn>
Newsgroups: chinese.comp.linux.development
Subject: Ҳ̸ºº×ֵĿìËÙÏÔʾ
Date: Fri, 17 Dec 1999 22:30:33 +0800


[posted and mailed]

On 17 Dec 1999, you wrote in chinese.comp.linux.development:

>×î½üÕýÔÚ¿´Michael Abrash's Graphics ProgrammingºÚƤÊé,
>ÉîÊÜÆô·¢. ÁªÏµÒÔÇ°¶Ôyact, cceһЩººÏÔ»úÀíµÄÁ˽â, ×öÁË
>һЩÊÔÑé, ·¢ÏÖÈç¹ûÓÃдģʽ3±Ü¿ªoutÖ¸ÁîµÄ»°, ¿ÉÒÔʹµ¥×Ö
>ÏÔʾµÄËÙ¶ÈÃ÷ÏÔ¼Ó¿ì. ×öÁËһϱȽÏ, ÓÃͨ³£ÒâÒåÉϵĿìËÙ·½
>·¨, ¼´Í¨¹ýÿ´ÎдλÆÁ±Î¼Ä´æÆ÷ÏÔʾ8¸öpixelµÄ·½°¸×îÉÙÒ²Òª
>15000microseconds(1 microseconds = 1000 ns), ¶øÓÃдģ
>ʽ3¿ÉÒÔ´ïµ½5000microsendsµÄËÙ¶ÈÒÔµ¥×ÖÏÔʾµ÷ÓÃдÂúÈ«ÆÁ
>(¼´·´¸´µ÷ÓñÈÈçwrite_hanziÕâÑùÒ»¸öÏÔʾµ¥×ֵĹý³ÌÌíÂúÆÁ
>Ä», Ò²¾ÍÊÇ°üÀ¨ÁËpush, popµÄʱ¼ä, Èç¹ûдÔÚÒ»¸ö¹ý³ÌÖп϶¨
>»á¸ü¿ìÒ»µã). Èç¹û˵дģʽ3ÓõIJ»¶àµÄÔ­ÒòÔÚÓÚºÍEGA²»¼æÈÝ
>µÄ»°, ÄÇô°´ÕÕÏÖÔÚVGAÈç´ËÆÕ¼°µÄÇéÐÎ, ÎÒÏë¸Ã²»ÓÃÔÙ¿¼ÂǺÍ
>EGA¼äµÄ¼æÈÝÐÔÁË°É. ÎÒÐÞ¸ÄÁËcceÖеÄÏÔʾascii×Ö·ûµÄ¹ý³Ì,
>ÖØбàÒëºó, ²âÊÔÁËÒ»ÏÂÏÔʾyactÔ´ÂëÖÐtestĿ¼Ïµļ¸¸ö
>ASCII ART Îļþ, ±ÈÈçearth(ÓÃASCII×Ö·û»­Ò»¸öÐýתµÄµØÇò,
>»¹ÓÐÐí¶àÆäËûºÃÍæµÄ¶«Î÷, ÈçÊ¥µ®¶¯»­µÈ, ºÜ¾­µä),
>ËÙ¶ÈÃ÷ÏÔ¿ìÁËÐí¶à, ºÍgceÏà±È»¹ÊÇ¿ì(ÏëÀ´, gce²»»áÊÇÓÃдģ
>ʽ3ÏÔʾ×Ö·ûµÄ). µ«ÔÚÎļþ±È½Ï¶àµÄĿ¼ÏÂÖ´ÐÐÒ»´Îls·¢ÏÖû
>ÓÐÃ÷ÏÔµÄËÙ¶ÈÔö¼Ó, cceÖ®ËùÒÔÂý¿´À´Òª¹é¾ÌÓÚ¾íÆÁµÄÎÊÌâÁË,
>cceͨ¹ý¿½±´ÏÔ´æʵÏÖ¾íÆÁ, ԼҪռȥ40000microsecondsµÄʱ
>¼ä, ºÍÏÔʾһÕûÆÁºº×ÖÏà±È, ÓÅ»¯ºóËÙ¶ÈÎÞ¹ÖûÓÐÃ÷ÏÔµÄÔö¼Ó.
>¿¼ÂÇÓÃÆðʼÐÐɨÃè¼Ä´æÆ÷(¹À¼ÆgceÒ²ÊÇÕâô×öµÄ), »¹ÊÇÓÐЩÎÊ
>ÌâµÄ, Ò»ÊÇÏÞÓÚ64KÓ³ÉäÏÔ´æµÄÏÞÖÆ, Ô¼Ö»Äܾí18ÐÐ, 18Ðкó»¹
>ÊÇÒªÓÐÒ»´Î´óÁ¿µÄÏÔ´æ--ÏԴ濽±´, Èç¹ûÄܱÜÃâ, µ±È»×îºÃ.
>¶þÊÇÓÃÆðʼɨÃè¼Ä´æÆ÷µÄ»°, ÿ´Î¾íÆÁ, ¶¼ÒªÖØ»­×´Ì¬Ìõ, ¸Ã
>ÈçºÎ±ÜÃâ? ²ð·ÖÆÁÄ»ÊÇ·ñÄܽâ¾ö´ËÎÊÌâ. Èç¹ûÉÏÊöÁ½Õ߶¼²»ÄÜ
>±ÜÃâµÄ»°, ¹ÀËãÁËÒ»ÏÂ, ÿ¾íÆÁ18ÐÐ, ƽ¾ùÿ´Î¾íÆÁËù»¯Ê±¼ä
>4500microseconds, ËäÈ»»¹ÊÇԶԶСÓÚcceµÄʱ¼ä, µ«È´²»ÊÇ
>×îÀíÏëµÄ. ÎÒÔÚÕâÀïÌÖÂÛ, Ï£ÍûÓйýºº×Ö»òͼÐαà³Ì¾­ÑéµÄÅó
>ÓÑÄÜ˵˵½â¾öÖ®µÀ.
>
>Áí¸½ÀûÓÃдģʽ3ʵÏÖµ¥×ÖÏÔʾµÄ¹ý³Ì:
>#void hz16_draw (int row, int col, char** hzbm);
>#row -- ÐÐ
>#col -- ÁÐ
>#hzbm - ºº×Öλͼ
>
>hz16_draw:
>     pushl %ebp
>     movl %esp, %ebp
>     pushl %ecx
>     pushl %edx
>     pushl %esi
>     pushl %edi
>
>    # ÓÃoffset_table±íµÄ·½·¨Ôö¼ÓËÙ¶È,
>    # µÈЧÓÚÏÂÃæ×¢Ê͵ĴúÂë
>     movl 8(%ebp), %eax
>     shll $2, %eax
>     movl offset_table(%eax), %edi
>     movl 12(%ebp),%edx
>     shll $1, %edx
>     addl %edx, %edi
>
>    # simpliest but slowest
>    # movl 8(%ebp), %eax
>    # imul $1440, %eax
>    # movl %eax, %edi
>
>    movl 16(%ebp), %esi
>    addl graph_mem, %edi
>
>    #draw background
>     movw $0x3CE, %dx
>     movw $0xf00, %ax # replace 0xf with background
>     outw %ax, %dx
>
>     movw $0xffff, (%edi)
>
>    #draw foreground
>     movw $0x0000, %ax # replace 0x0 with foreground
>     outw %ax, %dx
>
>    # Ëö´æÆ÷Öж¼ÊÇÒ»ÑùµÄÖµ, ¹ÊÖ»×°ÈëÒ»´Î
>    # ½ÚÔ¼2000microseconds :-)
>     movw (%edi), %ax
>     movl $18, %ecx
>draw2:
>     movw (%esi), %ax
>     movw %ax, (%edi)
>     addl $80, %edi
>     inc %esi
>     inc %esi
>     loop draw2
>
>     popl %edi
>     popl %esi
>     popl %edx
>     popl %ecx
>     popl %ebp
>     ret
>
>
>
>


Reply to: