+===========+ |P/ECE¸¦µæ¼¼| +===========+ P/ECE¸¦µæµ­Ï¿ 2015ǯ ==================== * Thu Nov 26 21:59:10 JST 2015 Naoyuki Sawa - À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤¹¤ë½èÍý¤¬¡¢Í½ÁÛ³°¤ËÂ礭¤Ê¥³¡¼¥É¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦ P/ECE³«È¯´Ä¶­¤ÎC¥³¥ó¥Ñ¥¤¥é¤Ç¤Ï¡¢À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤¹¤ë½èÍý¤¬¡¢Í½ÁÛ³°¤ËÂ礭¤Ê¥³¡¼¥É¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦»ö¤¬¤¢¤ê¤Þ¤¹¡£ ¢£C¸À¸ì¤Ç½ñ¤¯¾ì¹ç1 Îã¤È¤·¤Æ¡¢°ú¿ôx¤¬0¤Ê¤é¤Ð0(FALSE)¤òÊÖ¤·¡¢°ú¿ôx¤¬0°Ê³°¤Ê¤é¤Ð1(TRUE)¤òÊÖ¤¹´Ø¿ô¤ò¡¢»°¼ïÎà¤Î½ñ¤­Êý¤Ç½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£ ¨¢ int a1(int x) { ¨¢ return !!x; ¨¢ } ¨¢ int a2(int x) { ¨¢ return x ? 1 : 0; ¨¢ } ¨¢ int a3(int x) { ¨¢ if(x) { ¨¢ return 1; ¨¢ } else { ¨¢ return 0; ¨¢ } ¨¢ } ºÇŬ²½Í­¤ê(-O2)¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢°Ê²¼¤Î¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤¬À¸À®¤µ¤ì¤Þ¤¹¡£ ¨¢ a1: ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ xsrl %r10, 31 ¨¢ ret ¨¢ a2: ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ xsrl %r10, 31 ¨¢ ret ¨¢ a3: ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ xsrl %r10, 31 ¨¢ ret »°¼ïÎà¤Î½ñ¤­Êý¤ÎÁ´¤Æ¤Ç¡¢Æ±¤¸¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤¬À¸À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤Ñ¤Ã¤È¸«¤Æ¡¢¸µ¤Î»°¼ïÎà¤Î¤É¤ì¤È¤â°ã¤¦½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤Þ¤¹¡£ ¤³¤¦¤Ê¤ëÍýͳ¤Ï¡¢¥³¥ó¥Ñ¥¤¥é¤ÎºÇŬ²½¤Ë¤è¤Ã¤Æ¡¢À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤¹¤ë½èÍý¤¬¡¢°Ê²¼¤Î¤è¤¦¤Ê½èÍýÊýË¡¤ËÊѤ¨¤é¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¹¡£ ¨¢ return (unsigned)(-x | x) >> 31; ¿¤¯¤ÎCPU¤Ç¤Ï¾ò·ïʬ´ô¤¬ÃÙ¤¤¤Î¤Ç¡¢¾ò·ïʬ´ô¤òÈò¤±¤ë¤¿¤á¤Ë¡¢À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤¹¤ë½èÍý¤ò¾åµ­¤Î¤è¤¦¤ËÊѤ¨¤ë¤Î¤¬¡¢¥³¥ó¥Ñ¥¤¥é¤ÎÄêÀФÀ¤½¤¦¤Ç¤¹¡£ °ì¸«¡¢ÌäÂê̵¤¤¤è¤¦¤Ë¸«¤¨¤Þ¤¹¤¬¡¢¼Â¤Ï¾¯¤·¡¢ÌäÂ꤬ͭ¤ê¤Þ¤¹¡£ ¾åµ­¤Î¥¢¥»¥ó¥×¥é¥½¡¼¥¹¤Ï¡¢¼ÂºÝ¤Îµ¡³£¸ì¤ËŸ³«¤µ¤ì¤ë¤È¡¢¤³¤¦¤Ê¤ë¤«¤é¤Ç¤¹¡£ ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ srl %r10, 8 ;//¨¤ ¨¢ srl %r10, 8 ;//¨¢xsrl %r10, 31 ¨¢ srl %r10, 8 ;//¨¢ ¨¢ srl %r10, 7 ;//¨¥ ¨¢ ret À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤¹¤ë¤À¤±¤Î½èÍý¤Ê¤Î¤Ë¡¢(ret¤ò½ü¤¤¤Æ)7Ì¿Îá¤Ë¤â¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤Æ¡¢ÌµÂ̤¬À¸¤¸¤Æ¤¤¤Þ¤¹¡£ ¼Â¹Ô»þ´Ö¤Ï7¥µ¥¤¥¯¥ë¤Ç¤¹¡£ Ì¿Îá¿ô¤¬Â¿¤¯¤Ê¤ë¸¶°ø¤Ï¡¢P/ECE¤ÎCPU S1C33209¤Ï¡¢¥·¥Õ¥È¡¦¥í¡¼¥Æ¡¼¥ÈÌ¿Îá¤Îµ¡Ç½¤¬¼å¤¯¤Æ¡¢31¥Ó¥Ã¥È¤Î¥·¥Õ¥È¤ò¹Ô¤¦¤¿¤á¤Ë4Ì¿ÎáɬÍפÀ¤«¤é¤Ç¤¹¡£ ¢£¸¶°ø¤Î¿ä¬ P/ECE³«È¯´Ä¶­¤ÎC¥³¥ó¥Ñ¥¤¥é¤Ï¡¢MIPS CPUÍѤÎC¥³¥ó¥Ñ¥¤¥é¤ò¥Ù¡¼¥¹¤ËºîÀ®¤µ¤ì¤¿¤â¤Î¤À¤½¤¦¤Ç¤¹¡£ MIPS¤Ï¾ò·ïʬ´ô¤¬ÃÙ¤¯¤Æ(¢¨Ãí)¡¢¥·¥Õ¥ÈÌ¿Îá¤ÏÃÙ¤¯¤Ê¤¤¤Î¤Ç¡¢Á°½Ò¤Î¥³¥ó¥Ñ¥¤¥é¤ÎÄêÀФ¬Å¬ÍѤµ¤ì¤Æ¤¤¤ë¤Î¤À¤È»×¤¤¤Þ¤¹¡£ S1C33209ÍѤÎC¥³¥ó¥Ñ¥¤¥é¤Ë¤¹¤ë»þ¤Ë¡¢MIPSÍѤκÇŬ²½½èÍý¤¬¤½¤Î¤Þ¤Þ»Ä¤Ã¤Æ¤¤¤Æ¡¢µÑ¤Ã¤Æ̵Â̤ʥ³¡¼¥É¤¬À¸À®¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ (¢¨Ãí) ËͤÏMIPS CPU¤Ç¥×¥í¥°¥é¥à¤òºî¤Ã¤¿»ö¤¬Ìµ¤¤¤Î¤Ç¡¢¼Â´¶¤È¤·¤Æ¤ÏÎɤ¯È½¤é¤Ê¤¤¤Î¤Ç¤¹¤¬... ¢£¥¢¥»¥ó¥Ö¥é¤Ç½ñ¤¯¾ì¹ç ¼ÂºÝ¤Î¤È¤³¤í¡¢S1C33209¤Ï¾ò·ïʬ´ô¤¬ÃÙ¤¯¤Ê¤¤¤Î¤Ç¡¢°Ê²¼¤Î¤è¤¦¤ËÁÇľ¤Ë½ñ¤¯Êý¤¬¡¢µÑ¤Ã¤Æ¸úΨ¤¬Îɤ¤¤Ç¤¹¡£ (ret¤ò½ü¤¤¤Æ)4Ì¿Îá¡¢¼Â¹Ô»þ´Ö¤Ï(x==0)¤Î»þ3¥µ¥¤¥¯¥ë¡¤(x!=0)¤Î»þ4¥µ¥¤¥¯¥ë¤Ç¤¹¡£ ¨¢ cmp %r12, 0 ¨¢ jreq.d 3 ¨¢ ld.w %r10, 0 ¨¢ ld.w %r10, 1 ¨¢ ret ¤µ¤é¤Ë¹©Éפ¹¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤Ë½ñ¤±¤Þ¤¹¡£ (ret¤ò½ü¤¤¤Æ)3Ì¿Îá¡¢¼Â¹Ô»þ´Ö¤Ï¾ï¤Ë3¥µ¥¤¥¯¥ë¤Ç¤¹¡£ ¨¢ ld.w %r10, 0 ¨¢ cmp %r10, %r12 ¨¢ ret.d ¨¢ adc %r10, %r10 ;//¤Á¤Ê¤ß¤ËTRUE¤ò1¤Çɽ¤¹¾ì¹ç¤Ï¤³¤ÎÄ̤ê¤Ç¤¹¤¬¡¢VisualBasic¤ß¤¿¤¤¤ËTRUE¤ò-1¤Çɽ¤·¤¿¤¤¾ì¹ç¤Ï¡¢¤³¤Î¹Ô¤ò¡Ösbc %r10,%r10¡×¤ËÊѤ¨¤ì¤Ðok¤Ç¤¹¡£ ¢£C¸À¸ì¤Ç½ñ¤¯¾ì¹ç2 ¥¢¥»¥ó¥Ö¥é¤Ç½ñ¤¯¤Ê¤é¤Ð¾åµ­¤Î¤è¤¦¤Ë¹©ÉפǤ­¤ë¤Î¤Ç¤¹¤¬¡¢¤¤¤Ä¤âÁ´¤Æ¥¢¥»¥ó¥Ö¥é¤Ç½ñ¤¯¤ï¤±¤Ë¤Ï¹Ô¤­¤Þ¤»¤ó¡£ C¸À¸ì¤Ç½ñ¤¤¤Æ¡¢Í¾·×¤ÊºÇŬ²½(°­²½?)¤òÈò¤±¤ëÊýË¡¤ò¡¢¸¡Æ¤¤·¤Æ¤ß¤Þ¤·¤¿¡£ À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤·¤¿·ë²Ì¤ò¡¢°ìö¡¢Â¾¤ÎÊÑ¿ô¤ËÆþ¤ì¤Æ¤ß¤ë¤È¡Ä ¨¢ int b1(int x) { ¨¢ int y = !!x; ¨¢ return y; ¨¢ } ¨¢ int b2(int x) { ¨¢ int y = x ? 1 : 0; ¨¢ return y; ¨¢ } ¨¢ int b3(int x) { ¨¢ int y; ¨¢ if(x) { ¨¢ y = 1; ¨¢ } else { ¨¢ y = 0; ¨¢ } ¨¢ return y; ¨¢ } °Ê²¼¤Î¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤¬À¸À®¤µ¤ì¤Þ¤·¤¿¡£ ¨¢ b1: ¨¢ ld.w %r10, %r12 ¨¢ cmp %r10, 0 ¨¢ jreq 2 ¨¢ ld.w %r10, 1 ¨¢ ret ¨¢ b2: ¨¢ ld.w %r10, %r12 ¨¢ cmp %r10, 0 ¨¢ jreq 2 ¨¢ ld.w %r10, 1 ¨¢ ret ¨¢ b3: ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ xsrl %r10, 31 ¨¢ ret b1¤Èb2¤Ï¡¢³µ¤ÍÁÇľ¤Ê¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤·¤¿·ë²Ì¤ò¡¢°ìö¡¢Â¾¤ÎÊÑ¿ô¤ËÆþ¤ì¤Æ¤ß¤ë¤ÈÎɤ¤¤ß¤¿¤¤¤Ç¤¹¡£ ¤·¤«¤·¡¢b3¤Ï¤Þ¤À¡¢Í¾·×¤ÊºÇŬ²½¤¬³Ý¤«¤Ã¤¿¤Þ¤Þ¤Ç¤¹¡£ ¤½¤³¤Çº£Å٤ϡ¢ÂåÆþ¤¹¤ëÊÑ¿ô¤ò¡¢¸µ¤ÎÊÑ¿ô¼«¿È¤ËÂåÆþ¤·¤Æ¤ß¤Þ¤·¤¿¡£ ¨¢ int c1(int x) { ¨¢ x = !!x; ¨¢ return x; ¨¢ } ¨¢ int c2(int x) { ¨¢ x = x ? 1 : 0; ¨¢ return x; ¨¢ } ¨¢ int c3(int x) { ¨¢ if(x) { ¨¢ x = 1; ¨¢ } else { ¨¢ x = 0; ¨¢ } ¨¢ return x; ¨¢ } °Ê²¼¤Î¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤¬À¸À®¤µ¤ì¤Þ¤·¤¿¡£ ¨¢ c1: ¨¢ ld.w %r10, %r12 ¨¢ cmp %r10, 0 ¨¢ jreq 2 ¨¢ ld.w %r10, 1 ¨¢ ret ¨¢ c2: ¨¢ ld.w %r10, %r12 ¨¢ cmp %r10, 0 ¨¢ jreq 2 ¨¢ ld.w %r10, 1 ¨¢ ret ¨¢ c3: ¨¢ ld.w %r10, %r12 ¨¢ cmp %r10, 0 ¨¢ jreq 2 ¨¢ ld.w %r10, 1 ¨¢ ret Á´¤Æ¤Î´Ø¿ô¤¬¡¢³µ¤ÍÁÇľ¤Ê¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤·¤¿·ë²Ì¤ò¡¢¸µ¤ÎÊÑ¿ô¼«¿È¤ËÂåÆþ¤¹¤ë¤ÈÎɤ¤¤ß¤¿¤¤¤Ç¤¹¡£ ¢£C¸À¸ì¤Ç½ñ¤¯¾ì¹ç3 ¤Á¤Ê¤ß¤Ë¡¢ÊÑ´¹·ë²Ì¤ò¤¹¤°¤ËÊÖ¤¹¤Î¤Ç¤Ê¤¯¡¢ÊÑ´¹·ë²Ì¤ò»È¤Ã¤ÆÊ̤δؿô¤ò¸Æ¤Ó½Ð¤¹¾ì¹ç¤â¡¢¤À¤¤¤¿¤¤Æ±¤¸·¹¸þ¤Ë¤Ê¤ë¤è¤¦¤Ç¤¹¡£ ¨¢ extern void foo(int x); ¨¢ //ÂкöÁ° ¨¢ void d1(int x) { ¨¢ foo(!!x); ¨¢ } ¨¢ void d2(int x) { ¨¢ foo(x ? 1 : 0); ¨¢ } ¨¢ void d3(int x) { ¨¢ if(x) { ¨¢ foo(1); ¨¢ } else { ¨¢ foo(0); ¨¢ } ¨¢ } ¨¢ //Âкö¸å ¨¢ void e1(int x) { ¨¢ x = !!x; ¨¢ foo(x); ¨¢ } ¨¢ void e2(int x) { ¨¢ x = x ? 1 : 0; ¨¢ foo(x); ¨¢ } ¨¢ void e3(int x) { ¨¢ if(x) { ¨¢ x = 1; ¨¢ } else { ¨¢ x = 0; ¨¢ } ¨¢ foo(x); ¨¢ } °Ê²¼¤Î¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤¬À¸À®¤µ¤ì¤Þ¤·¤¿¡£ d3¤À¤±¡¢Á°¤ÎÎã¤È·¹¸þ¤¬°ã¤¤¤Þ¤·¤¿¡£ ÊÑ´¹·ë²Ì¤ò»È¤Ã¤ÆÊ̤δؿô¤ò¸Æ¤Ó½Ð¤¹¾ì¹ç¤Ï¡¢if¤Çʬ´ô¤¹¤ëÊýË¡¤Ç¤â¡¢ÌµÂ̤ʺÇŬ²½¤¬¹Ô¤ï¤ì¤Ê¤¤¤è¤¦¤Ç¤¹¡£ ¨¢ ;//ÂкöÁ° ¨¢ d1: ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ ld.w %r12, %r10 ¨¢ xsrl %r12, 31 ¨¢ xcall foo ¨¢ ret ¨¢ d2: ¨¢ not %r10, %r12 ¨¢ add %r10, 1 ¨¢ or %r10, %r12 ¨¢ ld.w %r12, %r10 ¨¢ xsrl %r12, 31 ¨¢ xcall foo ¨¢ ret ¨¢ d3: ¨¢ cmp %r12, 0 ¨¢ jreq 2 ¨¢ ld.w %r12, 1 ¨¢ xcall foo ¨¢ ret ¨¢ ;//Âкö¸å ¨¢ e1: ¨¢ cmp %r12, 0 ¨¢ jreq 2 ¨¢ ld.w %r12, 1 ¨¢ xcall foo ¨¢ ret ¨¢ e2: ¨¢ cmp %r12, 0 ¨¢ jreq 2 ¨¢ ld.w %r12, 1 ¨¢ xcall foo ¨¢ ret ¨¢ e3: ¨¢ cmp %r12, 0 ¨¢ jreq 2 ¨¢ ld.w %r12, 1 ¨¢ xcall foo ¨¢ ret ¥¢¥»¥ó¥Ö¥é¤Ç½ñ¤¯¤Ê¤é¤³¤ó¤Ê´¶¤¸¢­¤«¤Ê? C¥³¥ó¥Ñ¥¤¥é¤¬À¸À®¤·¤¿¥³¡¼¥É¤è¤ê¤â¡¢1¥µ¥¤¥¯¥ë¹â®¤Ç¤¹¡£ (¤³¤ÎÎã¤Ç¤Ï´Ø¿ô¸Æ¤Ó½Ð¤·¤òjp.d¤ËÃÖ¤­´¹¤¨¤ë»ö¤â½ÐÍè¤Þ¤¹¤¬¡¢º£²ó¤ÎËÜÂê¤Ç¤Ï¤Ê¤¤¤Î¤Ç¤½¤Î¤Þ¤Þ¤Ë¤·¤Þ¤·¤¿) ¨¢ cmp %r12, 1 ;//%psr(C) := x ? 0 : 1 ¨¢ sbc %r12, %r12 ;//%r12 := x ? 0 : -1 ¨¢ xcall.d foo ¨¢ add %r12, 1 ;//%r12 := x ? 1 : 0 ¨¢ ret ¢£¤Þ¤È¤á P/ECE¤ÎC¸À¸ì¤Ç¡¢À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤¹¤ë½èÍý¤ò½ñ¤¯¾ì¹ç¤Ï¡¢À°¿ô·¿¤òÏÀÍý·¿¤ËÊÑ´¹¤·¤¿·ë²Ì¤ò¸µ¤ÎÊÑ¿ô¼«¿È¤ËÂåÆþ¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤È¡¢¸úΨ¤ÎÎɤ¤¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë´üÂÔ¤¬»ý¤Æ¤Þ¤¹¡£(¤Þ¤À¸¡¾ÚÉÔ­¤Ç¤¹¤¬¡Ä) ¤â¤Ã¤È¤â¡¢¸µ¤ÎÊÑ¿ô¤òÇ˲õ½ÐÍè¤Ê¤¤¾ì¹ç¤Ï̵Íý¤Ç¤¹¤·¡¢¤½¤¦¤·¤Ê¤¯¤Æ¤â¾¯¤·¸úΨ¤Î°­¤¤¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë¤À¤±¤Ç·ë²Ì¤Ë¤ÏÌäÂê¤Ê¤¤¤Î¤Ç¡¢É¬¿Ü¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ * Wed Oct 28 21:41:29 JST 2015 Naoyuki Sawa - pp33.exe¤Î¥Ð¥°(2) Á°²ó¤Ë°ú¤­Â³¤­¡¢P/ECE³«È¯´Ä¶­¤Îpp33.exe¤Î¥Ð¥°¤ÎÏäǤ¹¡£ Á°²ó¤Î¤È¤ÏÊ̤ΥХ°¤Ç¤¹¡£ °Ê²¼¤Î¤è¤¦¤Ê¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤ò½ñ¤¤¤Æ¡¢ ¨¢ xld.w %r0,symbol+0x80000000 ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢¥¨¥é¡¼¤¬½Ð¤Þ¤¹¡£ ¡äpcc33.exe -c sample1.s ¢¢¼Â¹Ô·ë²Ì ¨¢sample1.ps(1): Error: Invalid syntax. ¤Ê¤¼¥¨¥é¡¼¤¬½Ð¤ë¤«¤È¸À¤¦¤È¡¢¥³¥ó¥Ñ¥¤¥ë½èÍý¤ÎÅÓÃæ¤Ç¡¢pp33.exe¤¬¾åµ­¤Î¹Ô¤ò°Ê²¼¤Î¤è¤¦¤ËÊÑ´¹¤·¤Æ¤·¤Þ¤¤¡¢ ¨¢ xld.w %r0,symbol+-2147483648 ¥³¥ó¥Ñ¥¤¥ë½èÍý¤Çpp33.exe¤Î¼¡¤Ë¼Â¹Ô¤µ¤ì¤ëext33.exe¤¬¡¢¡Ö+-¡×¤È¤¤¤¦Éôʬ¤ò½èÍý½ÐÍ褺¤Ë¥¨¥é¡¼¤Ê¤ë¤«¤é¤Ç¤¹¡£ °ì±þ¡¢pp33.exe¤Î¥Þ¥Ë¥å¥¢¥ë¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£ ¨¢¡ÖS5U1C33000C Manual¡×(\usr\PIECE\docs\datasheet\EPSON\S5U1C33000C_J.pdf) p.117 ¨¢¡Ø9 ¥×¥ê¥×¥í¥»¥Ã¥µ¡Ù¢Í¡Ø9.6 ¿ôÃͱ黻»Ò¡Ù ¨¢¡¦ÆâÉôŪ¤Ê±é»»¤ÏÉä¹æÉÕ¤­32¥Ó¥Ã¥È¤È¤·¤Æ¹Ô¤ï¤ì¤Þ¤¹¤Î¤Ç¡¢±é»»¤Î¼ïÎà¤Ë¤è¤Ã¤Æ¤ÏÃí°Õ¤¬É¬ÍפǤ¹¡£ ¨¢¡¦±é»»·ë²Ì¤¬Éé¤Î¾ì¹ç¤Ï¥Þ¥¤¥Ê¥¹Éä¹æÉÕ¤­¤Î10¿Ê¿ô¤Ç¡¢Àµ¤Î¾ì¹ç¤Ï16¿Ê¿ô¤Ç½ÐÎϤµ¤ì¤Þ¤¹¡£ pp33.exe¤¬¡¢¡Ösymbol+0x80000000¡×¤Î¡Ö+0x80000000¡×¤Î¡Ö0x80000000¡×¤ÎÉôʬ¤òÉä¹æÉÕ¤­32¥Ó¥Ã¥È¤È¸«¤Ê¤·¤Æ¡¢ ¡Ö0x80000000¡×¡á¡Ö-2147483648¡×¤Ê¤Î¤Ç¥Þ¥¤¥Ê¥¹Éä¹æÉÕ¤­¤Î10¿Ê¿ô¤Ç½ÐÎϤ·¡¢¡Ö+-2147483648¡×¤Ë¤Ê¤ë¤ï¤±¤Ç¤¹¡£ ³Î¤«¤Ë¥Þ¥Ë¥å¥¢¥ë¤É¤ª¤ê¤ÎµóÆ°¤Ê¤Î¤Ç¤¹¤¬¡¢»ÅÍͥХ°¤Ç¤¹¤è¤Í¡¦¡¦¡¦ ¤Á¤Ê¤ß¤Ë¾åµ­¤Ï¡Ö+-¡×¤Ë¤Ê¤Ã¤Æ¥¨¥é¡¼¤¬½Ð¤ë¾ì¹ç¤Ç¤·¤¿¤¬¡¢¡Ö--¡×¤Ë¤Ê¤Ã¤Æ¥¨¥é¡¼¤¬½Ð¤ë»ö¤âÍ­¤ê¤Þ¤¹¡£ ¨¢ xld.w %r0,symbol-0x80000000 ¢¢ÊÑ´¹·ë²Ì ¨¢ xld.w %r0,symbol--2147483648 ¤È¤³¤í¤Ç¡¢¤À¤¤¤¿¤¤¤½¤â¤½¤â¡¢ ¨¢ xld.w %r0,symbol+0x80000000 ¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥à¤ò½ñ¤¯»ö¤¬Í­¤ë¤Î¤«¤È¤¤¤¦ÏäʤΤǤ¹¤¬¡¦¡¦¡¦Í­¤êÆÀ¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢P/ECE¥«¡¼¥Í¥ë¤Î¡¢ ¢¢\usr\PIECE\sysdev\pcekn\font.c ¨¢static const unsigned char __nofont[] = { ¨¢¡¡¡Á(ά) ¨¢}; ¨¢#define NOFONT ((unsigned char *)__nofont) ¨¢static const unsigned char *_pceFontGetAdrs( unsigned short code ) ¨¢¡¡¡Á(ά)¡Á ¨¢¡¡return NOFONT+0x80000000; ¢«¢«¢«¢«¢«¤³¤³ ¨¢¡¡¡Á(ά)¡Á ¨¢} ¤ÎÉôʬ¤¬¡¢¡Öxld.w %r0,symbol+0x80000000¡×¤ÈƱÍͤνèÍý¤Ç¤¹¡£ P/ECE¤ÎCPU S1C33¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ï28¥Ó¥Ã¥È¤Ê¤Î¤Ç¡¢CPU¤¬»È¤ï¤Ê¤¤¾å°Ì4¥Ó¥Ã¥Èʬ¤ò¥Õ¥é¥°¤ËÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¤¹¤Í¡£ P/ECE¥«¡¼¥Í¥ë¤Î¾åµ­¤ÎÉôʬ¤Ç¤Ï¡¢¤Ê¤¼¡¢Á°½Ò¤Î¥Ð¥°¤Ë¤è¤ë¥¨¥é¡¼¤¬½Ð¤Ê¤¤¤«¤È¸À¤¦¤È¡¢C¸À¸ì¥×¥í¥°¥é¥à¤À¤«¤é¤Ç¤¹¡£ C¸À¸ì¥×¥í¥°¥é¥à¤Î¾ì¹ç¡¢°Ê²¼¤Î½ç¤Ç¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Þ¤¹¡£ (*.c) ¢Í gcc33.exe ¢Í (*.ps) ¢Í ext33.exe ¢Í (*.ms) ¢Í as33.exe ¢Í (*.o) C¸À¸ì¥×¥í¥°¥é¥à¤Î¾ì¹ç¤Ï¡¢ÅÓÃæ¤ÇÀ¸À®¤µ¤ì¤ë¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤¬pp33.exe¤òÄ̤é¤Ê¤¤¤Î¤Ç¡¢ÌäÂ꤬À¸¤¸¤Ê¤«¤Ã¤¿¤ï¤±¤Ç¤¹¡£ °ìÊý¡¢Ä¾ÀÜ¥¢¥»¥ó¥Ö¥é¥×¥í¥°¥é¥à¤ò½ñ¤¤¤¿¾ì¹ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë½èÍý¤µ¤ì¤Æ¡¢pp33.exe¤Èext33.exe¤ÎÉôʬ¤ÇÌäÂ꤬½Ð¤Þ¤¹¡£ (*.s) ¢Í pp33.exe ¢Í (*.ps) ¢Í ext33.exe ¢Í (*.ms) ¢Í as33.exe ¢Í (*.o) ¤Ê¤ª¡¢¾åµ­¤Î½èÍý½ç½ø¤ÏP/ECE³«È¯´Ä¶­¤Î¥³¥ó¥Ñ¥¤¥é¥É¥é¥¤¥Ðpcc33.exe¤¬À©¸æ¤·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢P/ECE³«È¯´Ä¶­ÆÃÍ­¤ÎÌäÂê¤È¤¤¤¦¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ EPSON¤ÎCPU¥Þ¥Ë¥å¥¢¥ë¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¼ê½ç¤É¤ª¤ê¤À¤«¤é¤Ç¤¹¡£ ¨¢¡ÖS5U1C33000C Manual¡×(\usr\PIECE\docs\datasheet\EPSON\S5U1C33000C_J.pdf) p.6 ¨¢¡Ø3 ¥½¥Õ¥È¥¦¥§¥¢³«È¯¼ê½ç¡Ù¢Í¡Ø3.1 ¥½¥Õ¥È¥¦¥§¥¢³«È¯¥Õ¥í¡¼¡Ù http://www.piece-me.org/piece-lab/pp33bug/pp33bug-20151028.png ¢£²óÈòºö pp33.exe¤Î½ÐÎÏ¥Õ¥¡¥¤¥ë¤ò¡¢sedÅù¤Î¥Ä¡¼¥ë¤Ç¥Õ¥£¥ë¥¿¤·¤Æ¡¢¡Ö+-¡×¤ò¡Ö-¡×¤Ë¡¤¡Ö--¡×¤ò¡Ö+¡×¤ËÃÖ´¹¤¹¤ì¤Ð²óÈò¤Ç¤­¤Þ¤¹¡£ ¸·Ì©¤Ë¤Ï¡¢Ê¸»úÎó¤ÎÃæ¤Ç¤Ê¤¤¤«¤È¤«¹Íθ¤¹¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¤¹¤±¤ì¤É¡¢¤¿¤¤¤Æ¤¤¤Î¾ì¹ç¤Ïñ½ã¤ÊÃÖ´¹¤ÇÂç¾æÉפÀ¤È»×¤¤¤Þ¤¹¡£ ¡äonigsed.exe -i~ -e "s/+-/-/g" -e "s/--/+/g" sample1.ps * Tue Oct 27 21:58:28 JST 2015 Naoyuki Sawa - pp33.exe¤Î¥Ð¥°(1) P/ECE³«È¯´Ä¶­¤Îpp33.exe¤Ë¤Ï¡¢¥Ð¥°¤¬¤¢¤ê¤Þ¤¹¡£ pp33.exe¤Ï¡¢¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¥Õ¥¡¥¤¥ë(*.s)¤ò¥¢¥»¥ó¥Ö¥é(as33.exe)¤Ë³Ý¤±¤ëÁ°¤Ë¼°¤ä¥Þ¥¯¥í¤ÎŸ³«¤ò¹Ô¤¦¥Ä¡¼¥ë¤Ç¡¢¤¤¤ï¤æ¤ë¥¢¥»¥ó¥Ö¥é¥×¥ê¥×¥í¥»¥Ã¥µ¤Ç¤¹¡£ pp33.exe¤Ë¤Ï¡¢°ì¹Ô255ʸ»ú¤Þ¤Ç¤·¤«Æɤ߹þ¤á¤Ê¤¤¤È¤¤¤¦À©¸Â¤¬Í­¤ê¤Þ¤¹¡£ ʸ»ú¿ô¤Ë¤Ï¡¢¥³¥á¥ó¥ÈÉôʬ¤ä¶õÇòʸ»ú¤ä¡¢¹ÔËö¤Î²þ¹Ôʸ»ú¤â´Þ¤ß¤Þ¤¹¡£ ÆäˡֹÔËö¤Î²þ¹Ôʸ»ú¤â´Þ¤à¡×¤È¸À¤¦ÅÀ¤¬½ÅÍפǡ¢¸«¤¿ÌܤË255ʸ»ú¤Ç¤â¡¢¹ÔËö¤Î²þ¹Ôʸ»ú¤ò´Þ¤á¤Æ¤Á¤ç¤¦¤É256ʸ»ú¤À¤È¥¨¥é¡¼¤¬½Ð¤Þ¤¹¡£ ¢¢ÆþÎÏ¹Ô ¨¢ xld.w %r0,1234567890 ;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghij ¢¢¼Â¹Ô·ë²Ì ¨¢Error: Cannot read file. Line size is too long. Íפ¹¤ë¤Ë¡¢¸«¤¿Ìܤˤϰì¹Ô254ʸ»ú¤Þ¤Ç¤·¤«Æɤ߹þ¤á¤Þ¤»¤ó¡£ ¢¢ÆþÎÏ¹Ô ¨¢ xld.w %r0,1234567890 ;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi ¢¢¼Â¹Ô·ë²Ì ¨¢¥¨¥é¡¼Ìµ¤·¡£ ¾åµ­¤ÎÀ©¸Â¤Ï¡¢¥Þ¥Ë¥å¥¢¥ë¤Ë½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£ ¨¢¡ÖS5U1C33000C Manual¡×(\usr\PIECE\docs\datasheet\EPSON\S5U1C33000C_J.pdf) p.122 ¨¢¢Í¡Ø9 ¥×¥ê¥×¥í¥»¥Ã¥µ¡Ù¢Í¡Ø9.12 ¥¨¥é¡¼/¥ï¡¼¥Ë¥ó¥°¥á¥Ã¥»¡¼¥¸¡Ù¢Í¡Ø9.12.1 ¥¨¥é¡¼¡Ù ¨¢Error: Cannot read file. Line size is too long. ¨¢¥¹¥Æ¡¼¥È¥á¥ó¥È¤¬Ä¹¤¹¤®¤ÆÆɤ߹þ¤á¤Þ¤»¤ó¡£³Æ¹Ô¤ÇÆɤ߹þ¤ß²Äǽ¤Êʸ»ú¿ô¤ÏºÇÂç255ʸ»ú¤Ç¤¹¡£ ¤·¤«¤·¼Â¤Ï¡¢¤½¤Î¾¤Ë¡¢¥Þ¥Ë¥å¥¢¥ë¤Ë½ñ¤«¤ì¤Æ¤¤¤Ê¤¤À©¸Â(¥Ð¥°?)¤¬Í­¤ê¤Þ¤¹¡£ ÆþÎϹԤÀ¤±¤Ç¤Ê¤¯¡¢½ÐÎϹԤ⡢°ì¹Ô255ʸ»ú¤Þ¤Ç¤·¤«°·¤¨¤Ê¤¤¤È¤¤¤¦À©¸Â¤Ç¤¹¡£ ¤¿¤È¤¨¤Ð°Ê²¼¤Î¹Ô¤Ï¹ÔËö¤Î²þ¹Ôʸ»ú¤ò´Þ¤á¤Æ255ʸ»ú¤Ç¡¢Àµ¾ï¤Ë½èÍý¤Ç¤­¤ë¤Ï¤º¤Ê¤Î¤Ç¤¹¤¬¡¢¼ÂºÝ¤Ë¤Ïpp33.exe¤ËÆɤ߹þ¤Þ¤»¤ë¤ÈÆâÉô¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤¹¡£ ¼°¤òŸ³«¤·¤¿·ë²Ì¡¢½ÐÎϹԤ¬°ì¹Ô255ʸ»ú¤òĶ¤¨¤Æ¤·¤Þ¤¦¤«¤é¤Ç¤¹¡£ ¢¢ÆþÎÏ¹Ô ¨¢ xld.w %r0,1<<30 ;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn ¢¢¼Â¹Ô·ë²Ì ¨¢Warning : internal strcpy over. ¨¢Warning : internal strcpy over. ¨¢Warning : internal strcpy over. ¨¢Warning : internal strcpy over. ¨¢Warning : internal strcpy over. ¨¢Warning : internal strcpy over. ¢¢½ÐÎÏ·ë²Ì ¨¢ xld.w %r0,0x40000000 ;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghmn ½ÐÎÏ·ë²Ì¤ò¸«¤ë¤È¡¢°ì¸«Àµ¤·¤¯ÊÑ´¹¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤Þ¤¹¤¬¡¢¤è¤¯¸«¤ë¤ÈºÇ¸å¤ÎÊý¤Îʸ»ú¤¬ÅÓÃæ¤Ç4ʸ»úʬ('ijkl')·ç¤±¤Æ¤¤¤Þ¤¹¡£ ¤ª¤½¤é¤¯¡¢pp33.exe¤ÎÆâÉô¤Ç¤Ï¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼¥é¥ó¤¬È¯À¸¤·¤Æ¡¢Í½Â¬¤Ç¤­¤Ê¤¤·ë²Ì¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤À¤È»×¤¤¤Þ¤¹¡£ °ì¹Ô¤·¤«ÆþÎϤ·¤Æ¤¤¤Ê¤¤¤Î¤Ë6²ó¤â·Ù¹ð¥á¥Ã¥»¡¼¥¸¤¬½Ð¤Æ¤¤¤ëÍýͳ¤â¡¢pp33.exe¤ÎÆâÉô¤Çͽ¬¤Ç¤­¤Ê¤¤Æ°ºî¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤é¤À¤È»×¤¤¤Þ¤¹¡£ ¤Ê¤ª¡¢¾åµ­¤ÎÎã¤Ç¤Ï·Ù¹ð¥á¥Ã¥»¡¼¥¸¤¬½Ð¤Æ¤¤¤Þ¤¹¤¬¡¢¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼¥é¥ó¤ÎÆâÍƤˤè¤Ã¤Æ¤Ï¡¢·Ù¹ð¥á¥Ã¥»¡¼¥¸¤¬½Ð¤º¤ËÌۤäÆÉÔÀµ¤Ê½ÐÎÏ·ë²Ì¤Ë¤Ê¤ë»ö¤âÍ­¤ë¤è¤¦¤Ç¤¹¡£ ¤½¤¦¤Ê¤ë¤È¡¢µ¤ÉÕ¤«¤º¤Ë°Õ¿Þ¤·¤Ê¤¤¥³¥ó¥Ñ¥¤¥ë·ë²Ì¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬¤¢¤ê¡¢Èó¾ï¤Ë´í¸±¤Ç¤¹¡£ ¤Þ¤¢ÉáÄ̤ϡ¢¤½¤ó¤Ê¤ËŤ¤¹Ô¤ÎËöÈø¤Ï¥³¥á¥ó¥ÈÉôʬ¤À¤È»×¤¦¤Î¤Ç¡¢¥³¥á¥ó¥È¤ÎËöÈø¤¬·ç¤±¤Æ¤âÆ°ºî¤Ë±Æ¶Á¤Ï̵¤¤¤È¤Ï»×¤¤¤Þ¤¹¤¬¡Ä ¤È¤Ï¤¤¤¨¡Öͽ¬¤Ç¤­¤Ê¤¤Æ°ºî¡×¤Ç¤¹¤Î¤Ç¡¢ËöÈø¤¬·ç¤±¤ë¤À¤±¤È¤Ï¸Â¤é¤º¡¢²¿¤¬µ¯¤­¤ë¤«È½¤é¤Ê¤¤¤Î¤Ç¡¢¤ä¤Ï¤ê´í¸±¤Ç¤¹¡£ ¢£·ëÏÀ pp33.exe¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Ï¡¢°ì¹Ô¤Îʸ»ú¿ô¤ò255ʸ»ú¤è¤ê¤â¡Ö;͵¤ò»ý¤Ã¤Æ¡×¾¯¤Ê¤á¤Ë¤·¤Æ¤ª¤¯É¬Íפ¬Í­¤ê¤Þ¤¹¡£ ¤É¤ì¤°¤é¤¤¾¯¤Ê¤±¤ì¤Ð°ÂÁ´¤«¤ÏŸ³«¤¹¤ëÆâÍƼ¡Âè¤Ê¤Î¤Ç¤¹¤±¤ì¤É¡¢200ʸ»úÄøÅ٤ʤé¤ÐÂçÄñ¤Ï°ÂÁ´¤À¤È»×¤¤¤Þ¤¹¡£ * Tue Sep 29 21:28:31 JST 2015 Naoyuki Sawa - srf33¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¹½Â¤¤Î¥Þ¥Ë¥å¥¢¥ë´Ö°ã¤¤ P/ECE³«È¯´Ä¶­¤Î¥³¥ó¥Ñ¥¤¥é¥Þ¥Ë¥å¥¢¥ë¡ÖS5U1C33000C Manual¡×(\usr\PIECE\docs\datasheet\EPSON\S5U1C33000C_J.pdf)¤Î¡¢ ¡ÖAppendix srf33¥Õ¥¡¥¤¥ë¤Î¹½Â¤ A-1 srf33¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¹½Â¤¡×(p.475¡Á479)¤Ë¤Ï¡¢´Ö°ã¤¤¤¬Í­¤ë¤è¤¦¤Ç¤¹¡£ p.478¤Î¡Ö(4)¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¡×¤Îɽ¤Î¡¢e_scnndx¤¬¡Ø4Byte¡Ù¤Èµ­ºÜ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¼ÂºÝ¤Ë¤Ï¡Ø2Byte¡Ù¤À¤È»×¤¤¤Þ¤¹¡£ ¥µ¥ó¥×¥ë¥Ç¡¼¥¿¤ò»È¤Ã¤Æ¸¡¾Ú¤·¤Æ¤ß¤Þ¤·¤¿¡£ ¨¢ .code ¨¢ .global Test1to9 ¨¢ Test1to9: ¨¢ .byte 1 ¨¢ .byte 2 ¨¢ .byte 3 ¨¢ .byte 4 ¨¢ .byte 5 ¨¢ .byte 6 ¨¢ .byte 7 ¨¢ .byte 8 ¨¢ .byte 9 ¾åµ­¤Î¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¡¢sample.o¤òÀ¸À®¤·¤Þ¤·¤¿¡£ ¨¢ pcc33 -c sample.s sample.o¤ò¥Ð¥¤¥Ê¥ê¥¨¥Ç¥£¥¿¤Ç³«¤¤¤Æ¡¢¡ÖA-1 srf33¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¹½Â¤¡×¤È¸«Èæ¤Ù¤Æ¡¢¥³¥á¥ó¥È¤òÉÕ¤±¤Þ¤·¤¿¡£ ¨¢ //srf33À©¸æ¥Ø¥Ã¥À ¨¢ 00 01 //c_fatt 2Byte ¥Õ¥¡¥¤¥ëÀ©¸æ¥Õ¥é¥° ¨¢ 00 00 //c_pentry 2Byte ¥¨¥ó¥È¥ê¡¼¥¢¥É¥ì¥¹ ¨¢ 33 00 //c_ver 2Byte srf33¥Ð¡¼¥¸¥ç¥ó¾ðÊó ¨¢ 00 03 //c_scncnt 2Byte ¥»¥¯¥·¥ç¥ó¾ðÊó¿ô ¨¢ 00 00 00 10 //c_scnptr 4Byte ¥»¥¯¥·¥ç¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //c_debptr 4Byte ¥Ç¥Ð¥Ã¥°À©¸æ¾ðÊó¥Á¥§¡¼¥ó ¨¢ //¥»¥¯¥·¥ç¥ó¾ðÊó(CODE) ¨¢ 00 00 00 3C //s_nxptr 4Byte ¼¡¤Î¥»¥¯¥·¥ç¥ó¾ðÊó¤Ø¤Î¥Á¥§¡¼¥ó ¨¢ 00 01 //s_scntyp 2Byte ¥»¥¯¥·¥ç¥ó¥¿¥¤¥× ¨¢ 00 00 //s_lnktyp 2Byte ¥ê¥ó¥¯ÊýË¡ ¨¢ 00 01 //s_scnatt 2Byte ¥»¥¯¥·¥ç¥ó°À­ ¨¢ 00 00 00 00 //s_off 4Byte ¥»¥¯¥·¥ç¥ó¤Î¥¹¥¿¡¼¥È¥¢¥É¥ì¥¹ ¨¢ 00 00 00 00 //s_rcptr 4Byte ¥ê¥í¥±¡¼¥·¥ç¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_rcsiz 4Byte ¥ê¥í¥±¡¼¥·¥ç¥ó¾ðÊó¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 00 94 //s_exptr 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 15 //s_exsiz 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 00 01 //s_excnt 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¤Î¸Ä¿ô ¨¢ 00 00 00 A9 //s_rdptr 4Byte ¼Â¥Ç¡¼¥¿¤Ø¤Î¥Á¥§¡¼¥ó ¨¢ 00 00 00 09 //s_dsiz 4Byte ¼Â¥Ç¡¼¥¿¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 //s_scnndx 2Byte ¥»¥¯¥·¥ç¥óID ¨¢ //¥»¥¯¥·¥ç¥ó¾ðÊó(DATA) ¨¢ 00 00 00 68 //s_nxptr 4Byte ¼¡¤Î¥»¥¯¥·¥ç¥ó¾ðÊó¤Ø¤Î¥Á¥§¡¼¥ó ¨¢ 00 02 //s_scntyp 2Byte ¥»¥¯¥·¥ç¥ó¥¿¥¤¥× ¨¢ 00 00 //s_lnktyp 2Byte ¥ê¥ó¥¯ÊýË¡ ¨¢ 00 01 //s_scnatt 2Byte ¥»¥¯¥·¥ç¥ó°À­ ¨¢ 00 00 00 00 //s_off 4Byte ¥»¥¯¥·¥ç¥ó¤Î¥¹¥¿¡¼¥È¥¢¥É¥ì¥¹ ¨¢ 00 00 00 00 //s_rcptr 4Byte ¥ê¥í¥±¡¼¥·¥ç¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_rcsiz 4Byte ¥ê¥í¥±¡¼¥·¥ç¥ó¾ðÊó¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 00 00 //s_exptr 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_exsiz 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 00 00 //s_excnt 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¤Î¸Ä¿ô ¨¢ 00 00 00 00 //s_rdptr 4Byte ¼Â¥Ç¡¼¥¿¤Ø¤Î¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_dsiz 4Byte ¼Â¥Ç¡¼¥¿¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 01 //s_scnndx 2Byte ¥»¥¯¥·¥ç¥óID ¨¢ //¥»¥¯¥·¥ç¥ó¾ðÊó(BSS) ¨¢ 00 00 00 00 //s_nxptr 4Byte ¼¡¤Î¥»¥¯¥·¥ç¥ó¾ðÊó¤Ø¤Î¥Á¥§¡¼¥ó ¨¢ 00 03 //s_scntyp 2Byte ¥»¥¯¥·¥ç¥ó¥¿¥¤¥× ¨¢ 00 00 //s_lnktyp 2Byte ¥ê¥ó¥¯ÊýË¡ ¨¢ 00 01 //s_scnatt 2Byte ¥»¥¯¥·¥ç¥ó°À­ ¨¢ 00 00 00 00 //s_off 4Byte ¥»¥¯¥·¥ç¥ó¤Î¥¹¥¿¡¼¥È¥¢¥É¥ì¥¹ ¨¢ 00 00 00 00 //s_rcptr 4Byte ¥ê¥í¥±¡¼¥·¥ç¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_rcsiz 4Byte ¥ê¥í¥±¡¼¥·¥ç¥ó¾ðÊó¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 00 00 //s_exptr 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_exsiz 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 00 00 00 //s_excnt 4Byte ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¤Î¸Ä¿ô ¨¢ 00 00 00 00 //s_rdptr 4Byte ¼Â¥Ç¡¼¥¿¤Ø¤Î¥Á¥§¡¼¥ó ¨¢ 00 00 00 00 //s_dsiz 4Byte ¼Â¥Ç¡¼¥¿¥Ð¥¤¥È¥µ¥¤¥º ¨¢ 00 02 //s_scnndx 2Byte ¥»¥¯¥·¥ç¥óID ¨¢ //¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó ¨¢ 00 00 00 00 //e_scnoff 4Byte ¥»¥¯¥·¥ç¥óÆâ¤Î¥ª¥Õ¥»¥Ã¥È ¨¢ 00 00 00 00 //e_size 4Byte ¥·¥ó¥Ü¥ë¤Î¥µ¥¤¥º ¨¢ 00 00 //e_scnndx 4Byte »²¾È¤¹¤ë¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊ󤬽ê°¤¹¤ë¥»¥¯¥·¥ç¥ó¤ÎID ¢«¢«¢«¡Ø4Byte¡Ù¤¬´Ö°ã¤¤ ¨¢ 00 01 //e_extyp 2Byte ¥¨¥¯¥¹¥¿¡¼¥ó¥¿¥¤¥× ¨¢ 08 //e_namsiz 1Byte ¥·¥ó¥Ü¥ë̾¤ÎŤµ ¨¢ 54 65 73 74 31 74 6F 39 //e_exnam *Byte ¥·¥ó¥Ü¥ë̾ ¨¢ //¼Â¥Ç¡¼¥¿ ¨¢ 01 02 03 04 05 06 07 08 09 // ¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¤Îe_scnndx¤ò¡¢4Byte¤Ç¤Ê¤¯2Byte¤È¸«¤Ê¤µ¤Ê¤¤¤È¡¢¹ç¤¤¤Þ¤»¤ó¡£ e_scnndx¤Ï¥»¥¯¥·¥ç¥ó¤ÎID¤òɽ¤¹¥Õ¥£¡¼¥ë¥É¤Ç¡¢Â¾¤Î¥»¥¯¥·¥ç¥óID¥Õ¥£¡¼¥ë¥É(s_scnndx)¤Ï2Byte¤Ç¤¹¤«¤é¡¢e_scnndx¤â2Byte¤Ê¤Î¤¬¼«Á³¤Ç¤¹¡£ ¤È¤¤¤¦¤ï¤±¤Ç¡¢¥¨¥¯¥¹¥¿¡¼¥ó¾ðÊó¤Îe_scnndx¤Ï¡¢¡Ø2Byte¡Ù¤¬Àµ¤·¤¤¤È»×¤¤¤Þ¤¹¡£ http://www.piece-me.org/piece-lab/srf33/e_scnndx-fix.jpg * Sun Apr 05 21:06:45 JST 2015 Naoyuki Sawa - gcc33 abs()¤ÎºÇŬ²½¥Ð¥° P/ECE³«È¯´Ä¶­¤ÎC¥³¥ó¥Ñ¥¤¥égcc33¤Ë¤Ï¡¢abs()¤ÎºÇŬ²½¥Ð¥°¤¬¤¢¤ê¤Þ¤¹¡£ abs()¤ËÂФ·¤Æ¡¢¥Þ¥¤¥Ê¥¹¤ÎÃͤò»ØÄꤷ¤¿»þ¤Ë¥Þ¥¤¥Ê¥¹¤Î¤Þ¤ÞÊÖ¤µ¤ì¤¿¤ê¡¢¥×¥é¥¹¤ÎÃͤò»ØÄꤷ¤¿»þ¤Ë¥Þ¥¤¥Ê¥¹¤Ë¤Ê¤Ã¤ÆÊÖ¤µ¤ì¤¿¤ê¤¹¤ë¥Ð¥°¤Ç¤¹¡£ ¢£¥Ð¥°¤òºÆ¸½¤¹¤ë¥×¥í¥°¥é¥à °Ê²¼¤Ë¡¢¥Ð¥°¤òºÆ¸½¤¹¤ë¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£ ºÇŬ²½¥ª¥×¥·¥ç¥ó¡Ö-O2¡×¤ò»ØÄꤷ¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¡¢ºÇŬ²½¥Ð¥°¤¬È¯À¸¤·¤Þ¤¹¡£ ¤³¤ÎÎã¤Î¾ì¹ç¡¢¡Ö¥Þ¥¤¥Ê¥¹¤ÎÃͤò»ØÄꤷ¤¿»þ¤Ë¥Þ¥¤¥Ê¥¹¤Î¤Þ¤ÞÊÖ¤µ¤ì¤ë¡×¥Ð¥°¤¬È¯À¸¤·¤Æ¤¤¤Þ¤¹¡£ ¢¢absbug1/absbug1.c ¨¢ ¨¢ #include ¨¢ #include ¨¢ //------------------------------------------------------------------------------ ¨¢ unsigned char vbuff[DISP_X * DISP_Y]; ¨¢ //{{--- ¥Æ¥¹¥È --- ¨¢ int x, y = 1; ¨¢ void test(); ¨¢ //}}--- ¥Æ¥¹¥È --- ¨¢ //------------------------------------------------------------------------------ ¨¢ void pceAppInit() { ¨¢ pceAppSetProcPeriod(1); ¨¢ pceLCDSetBuffer(vbuff); ¨¢ pceLCDDispStart(); ¨¢ } ¨¢ //------------------------------------------------------------------------------ ¨¢ void pceAppProc(int cnt) { ¨¢ memset(vbuff, 0, sizeof vbuff); ¨¢ pceFontSetPos(0, 0); ¨¢ pceFontSetTxColor(3); ¨¢ pceFontSetBkColor(0); ¨¢ //{{--- ¥Æ¥¹¥È --- ¨¢ x = 5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 10¡×(Àµ¤·¤¤) ¨¢ x = -5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -10¡×(Àµ¤·¤¤) ¨¢ x = 10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ x = -10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -20¡×(¸í¤ê) ¨¢ //}}--- ¥Æ¥¹¥È --- ¨¢ pceLCDTrans(); ¨¢ //SELECT¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¤é½ªÎ»¤¹¤ë¡£ ¨¢ if(pcePadGet() & TRG_SELECT) { pceAppReqExit(0); } ¨¢ } ¨¢ //------------------------------------------------------------------------------ ¨¢ void pceAppExit() { ¨¢ } ¨¢ //------------------------------------------------------------------------------ ¨¢ //{{--- ¥Æ¥¹¥È --- ¨¢ void test() { ¨¢ //ÊÑ¿ôx¤ÎÃͤò2Çܤˤ¹¤ë¡£ ¨¢ x <<= 1; ¨¢ //ÊÑ¿ôy¤ÎÃͤ¬0¤Ç¤Ê¤±¤ì¤Ð¡Ä ¨¢ if(y) { ¨¢ //ÊÑ¿ôx¤ÎÀäÂÐÃͤ¬15°Ê¾å¤Ê¤é¤Ð¡Ä ¨¢ if(abs(x) >= 15) { ¨¢ //ÊÑ¿ôx¤ÎÃͤò0¤ËÌ᤹¡£ ¨¢ x = 0; ¨¢ } ¨¢ } ¨¢ } ¨¢ //}}--- ¥Æ¥¹¥È --- ¨¢ ¢£¥Ð¥°¤Î¸¶°ø¤òÄ´ºº¤¹¤ë gcc33¤¬test()´Ø¿ô¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤ÆÀ¸À®¤·¤¿¡¢¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤ò¼¨¤·¤Þ¤¹¡£(¾¯¤·À°·Á¤·¤Þ¤·¤¿) ¢¢absbug1/absbug1.ps ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ sll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L2 ;// ¨¢ ld.w %r10, %r11 ;// %r10 := x ¨¤ ¨¢ jrge __L1 ;// if(???) { ¢«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¢¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¤³¤³¤¬¥Ð¥°!! ¨¢ not %r10, %r10 ;// %r10 := ~x ¨§¤³¤ÎÈϰϤ¬abs(x)ÁêÅö ¨¢ add %r10, 1 ;// %r10 := ~x + 1 = -x ¨¢ ¨¢ __L1: ;// } ¨¥ ¨¢ cmp %r10, 14 ;// if(abs(x) > 14) ¨¢ jrle __L2 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L2: ;//} } ¨¢ ret ;// ¨¢ abs()¤Î½èÍý¤Ç¡¢x¤¬0°Ê¾å¤«¤òȽÄꤹ¤ë¤¿¤á¤Î¡Öld.w %r10,0¡×¤¬È´¤±¤Æ¤¤¤ë»ö¤¬¡¢¥Ð¥°¤Î¸¶°ø¤Ç¤¹¡£ abs()¤Î°ú¿ô'x'¤òÈæ³Ó¤»¤º¡¢Ä¾Á°¤Î½èÍý¤ÎÈæ³Ó·ë²Ì'y'¤Ë¤è¤Ã¤Æ¡¢abs()¤ÎÉä¹æȿž¤ò¹Ô¤Ã¤Æ¤·¤Þ¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢abs()¤¬´Ö°ã¤Ã¤¿·ë²Ì¤Ë¤Ê¤ê¤Þ¤¹¡£ ¢£¥Ð¥°¤¬È¯À¸¤¹¤ë¾ò·ï(¿ä¬) ¤¤¤í¤¤¤í¤Ê¥Ñ¥¿¡¼¥ó¤ò¤¿¤á¤·¤¿¤È¤³¤í¡¢¤³¤Î¥Ð¥°¤¬È¯À¸¤¹¤ë¾ò·ï¤Ï¡¢¤ª¤ª¤è¤½°Ê²¼¤Î¤è¤¦¤Ç¤¹¡£(¿ä¬¤Ç¤¹) ­¡ abs()¤Î°ú¿ô¤ò¡¢´Ø¿ô¤ÎºÇ½é¤ÎÊý¤Ç´û¤Ë»ÈÍѤ·¤Æ¤¤¤Æ¡¢¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥ÉºÑ¤ß¤Ç¤¢¤ë¡£ ­¢ abs()¤ÎľÁ°¤Ç¡¢abs()¤Î°ú¿ô°Ê³°¤ÎÊÑ¿ô¤ò¡¢0¤ÈÈæ³Ó¤¹¤ë½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤ë¡£ ¾å¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤Î¾ì¹ç¡¢test()¤ÎÃæ¤Î¡Öx <<= 1;¡×¤¬­¡¤ËÁêÅö¤·¡¢¡Öif(y) {¡×¤¬­¢¤ËÁêÅö¤·¤Þ¤¹¡£ ¤É¤¦¤ä¤égcc33¤Ï¡¢¡Öabs()¤Î°ú¿ô¤ò0¤ÈÈæ³Ó¤¹¤ë½èÍý¡×¤ò¡¢­¢¤ÎÈæ³Ó½èÍý¤È(´Ö°ã¤Ã¤Æ)¤Þ¤È¤á¤ÆºÇŬ²½¤·¤Æ¤·¤Þ¤¦¥Ð¥°¤¬¤¢¤ë¤è¤¦¤Ç¤¹¡£ gcc33¤ÎÆâÉô½èÍýŪ¤Ë¤Ï¡¢2013ǯ7·î30Æü¤ÎP/ECE¸¦µæµ­Ï¿¡¢¡Ögcc33 ¾ò·ï±é»»»Ò¤ÎºÇŬ²½¥Ð¥°¡×¤ÇÄ´ºº¤·¤¿·ï¤È¡¢Æ±¤¸¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ abs()¤¬ÁȤ߹þ¤ß´Ø¿ô¤È¤·¤Æ¥¤¥ó¥é¥¤¥óŸ³«¤µ¤ì¤¿¸å¡¢¡Ögcc33 ¾ò·ï±é»»»Ò¤ÎºÇŬ²½¥Ð¥°¡×¤ÈƱ¤¸¡¢´Ö°ã¤Ã¤¿ºÇŬ²½¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¤Î¤À¤È»×¤¤¤Þ¤¹¡£ ¢£¥Ð¥°¤ò²óÈò¤¹¤ëÊýË¡ gcc33¤¬abs()¤òÁȤ߹þ¤ß´Ø¿ô¤È¤·¤Æ¥¤¥ó¥é¥¤¥óŸ³«¤·¤Ê¤¤¤è¤¦¤Ë¡¢¥Þ¥¯¥íÄêµÁ¤ÇÃÖ¤­´¹¤¨¤ë»ö¤Ë¤·¤Þ¤·¤¿¡£ ¤É¤Î¤è¤¦¤ËÃÖ¤­´¹¤¨¤ë¤ÈÀµ¤·¤¤Æ°ºî¤Ë¤Ê¤ë¤«¡¦¸úΨ¤ÎÎɤ¤¥³¡¼¥É¤Ë¤Ê¤ë¤«¤ò¡¢¸¡¾Ú¤·¤Æ¸«¤Þ¤·¤¿¡£ ¡ßÀµ¤·¤¯¤Ê¤¤ÃÖ¤­´¹¤¨ ¤Þ¤º¡¢ÁÇľ¤ÊÈæ³Ó½èÍý¤ÇÃÖ¤­´¹¤¨¤Æ¤ß¤Þ¤·¤¿¡£ ¢¢absbug2/absbug2.c ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ if(__x__ < 0) { __x__ = -__x__; } \ ¨¢ __x__; }) ¨¢ ¤·¤«¤·¤³¤ì¤Ç¤Ï¡¢abs()¤Î·ë²Ì¤¬´Ö°ã¤Ã¤¿¤Þ¤Þ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ ¨¢ ¨¢ x = 5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 10¡×(Àµ¤·¤¤) ¨¢ x = -5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -10¡×(Àµ¤·¤¤) ¨¢ x = 10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ x = -10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -20¡×(¸í¤ê) ¨¢ ¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤ò¸«¤Æ¸«¤ë¤È: ¢¢absbug2/absbug2.ps ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ sll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L2 ;// ¨¢ ld.w %r10, %r11 ;// %r10 := x ¨¤ ¨¢ jrge __L1 ;// if(???) { ¢«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¢¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¥Ð¥°¤Î¤Þ¤Þ!! ¨¢ not %r10, %r10 ;// %r10 := ~x ¨§¤³¤ÎÈϰϤ¬abs(x)ÁêÅö ¨¢ add %r10, 1 ;// %r10 := ~x + 1 = -x ¨¢ ¨¢ __L1: ;// } ¨¥ ¨¢ cmp %r10, 14 ;// if(abs(x) > 14) ¨¢ jrle __L2 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L2: ;//} } ¨¢ ret ;// ¨¢ ºÇ½é¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤È¡¢Á´¤¯Æ±¤¸¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤¬À¸À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ÁÇľ¤ÊÈæ³Ó½èÍý¤Ç¤Ï¡¢¡Ögcc33 ¾ò·ï±é»»»Ò¤ÎºÇŬ²½¥Ð¥°¡×¤ÈƱ¤¸ºÇŬ²½¥Ð¥°¤¬À¸¤¸¤Æ¡¢¥Ð¥°²óÈò¤Ë¤Ê¤é¤Ê¤¤¤è¤¦¤Ç¤¹¡£ ¢¨¤Á¤Ê¤ß¤Ë¤³¤Î·ë²Ì¤«¤é¿ä¬¤¹¤ë¤È¡¢2¤Ä¤ÎÊÑ¿ô¤ËÂФ·¤Æ0¤È¤ÎÈæ³Ó½èÍý¤òϢ³¤·¤Æ¹Ô¤¦¤È¡¢abs()°Ê³°¤Ç¤â¥Ð¥°¤¬¸²ºß²½¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤½¤¦¤Ç¤¹¡£ ¢¨º£²ó¤ÎËÜÂ꤫¤é¤Ï³°¤ì¤ë¤Þ¤¹¤¬¡¢·ë¹½Éݤ¤¤Ç¤¹¡¦¡¦¡¦º£¸å¡¢Í×Ä´ºº¤Ç¤¹¡£ ¡ßÀµ¤·¤¯¤Ê¤¤ÃÖ¤­´¹¤¨ ¼¡¤Ë¡¢Èæ³Ó±é»»»Ò¤ò»È¤Ã¤ÆÃÖ¤­´¹¤¨¤Æ¸«¤Þ¤·¤¿¡£ ¢¢absbug3/absbug3.c ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ (__x__ >= 0) ? x : -__x__; }) ¨¢ ¤·¤«¤·¤³¤ì¤Ç¤â¡¢abs()¤Î·ë²Ì¤¬´Ö°ã¤Ã¤¿¤Þ¤Þ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ ¢¢absbug3/absbug3.ps ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ sll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L2 ;// ¨¢ ld.w %r10, %r11 ;// %r10 := x ¨¤ ¨¢ jrge __L1 ;// if(???) { ¢«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¢¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¥Ð¥°¤Î¤Þ¤Þ!! ¨¢ not %r10, %r10 ;// %r10 := ~x ¨§¤³¤ÎÈϰϤ¬abs(x)ÁêÅö ¨¢ add %r10, 1 ;// %r10 := ~x + 1 = -x ¨¢ ¨¢ __L1: ;// } ¨¥ ¨¢ cmp %r10, 14 ;// if(abs(x) > 14) ¨¢ jrle __L2 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L2: ;//} } ¨¢ ret ;// ¨¢ ºÇ½é¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤È¡¢Á´¤¯Æ±¤¸¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤¬À¸À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤È¤¤¤¦¤ï¤±¤Ç¡¢¤³¤ÎÊýË¡¤â¡ß¤Ç¤¹¡£ ¡ßÀµ¤·¤¯¤Ê¤¤ÃÖ¤­´¹¤¨ ¼¡¤Ë¡¢Èæ³Ó±é»»»Ò¤Ç¡¢GCC³ÈÄ¥µ¡Ç½¤ò»È¤Ã¤ÆÃÖ¤­´¹¤¨¤Æ¸«¤Þ¤·¤¿¡£ ¢¢absbug4/absbug4.c ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ (__x__ >= 0) ? : -__x__; }) ¨¢ 2013ǯ7·î30Æü¤Î¡Ögcc33 ¾ò·ï±é»»»Ò¤ÎºÇŬ²½¥Ð¥°¡×¤Î»þ¤Ï¡¢GCC³ÈÄ¥µ¡Ç½¤ò»È¤¦¤È¥Ð¥°¤¬²óÈò¤Ç¤­¤¿¤Î¤Ç¡¢¤³¤ÎÊýË¡¤ÇÂç¾æÉפ«¤È»×¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢ ¤·¤«¤·»î¤·¤Æ¤ß¤ë¤È¡¢abs()¤Î·ë²Ì¤¬´Ö°ã¤Ã¤¿·ë²Ì¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ ¨¢ ¨¢ x = 5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 10¡×(Àµ¤·¤¤) ¨¢ x = -5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -10¡×(Àµ¤·¤¤) ¨¢ x = 10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 20¡×(¸í¤ê) ¨¢ x = -10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ Àè¤Û¤É¤Þ¤Ç¤Ï¡¢¥Þ¥¤¥Ê¥¹ÃͤËÂФ¹¤ëabs()¤¬´Ö°ã¤Ã¤Æ¤¤¤Æ¥×¥é¥¹ÃͤËÂФ¹¤ëabs()¤ÏÀµ¤·¤«¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢º£²ó¤ÏµÕ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ ¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤ò¸«¤Æ¸«¤ë¤È: ¢¢absbug4/absbug4.ps ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ sll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L2 ;// ¨¢ not %r10, %r11 ;// %r10 := ~x ¨¢ xsrl %r10, 31 ;// %r10 := ~x >> 31 x¤¬¥×¥é¥¹¤Ê¤é¤Ð1,x¤¬¥Þ¥¤¥Ê¥¹¤Ê¤é¤Ð0¤Ë¤Ê¤ë¡£ ¢«0¤ÈÈæ³Ó¤·¤ÆȽÄꤹ¤ì¤Ð1Ì¿Îá¤ÇºÑ¤à¤Î¤Ë¡¢4Ì¿Îá»È¤Ã¤ÆºÇ¾å°Ì¥Ó¥Ã¥È¤ò¥·¥Õ¥È¤¹¤ë¤È¤¤¤¦ÌµÂÌ!! ¨¢ jrne __L1 ;// if(!(~x >> 31)) { ¨¡¨¤ ¨¢ not %r10, %r11 ;// %r10 := ~x ¡¡¨¢if¤ÎÃæ¤òÄ̤ä¿»þ(x¤¬¥Þ¥¤¥Ê¥¹¤Î»þ)¤Ï¡¢%r10=abs(x)¤Ë¤Ê¤ë¤¬¡¢ ¨¢ add %r10, 1 ;// %r10 := ~x + 1 = -x ¡¡¨¢if¤ÎÃæ¤òÄ̤é¤Ê¤«¤Ã¤¿»þ(x¤¬¥×¥é¥¹¤Î»þ)¤Ï¡¢%r10=(~x>>31)¤Ë¤Ê¤ë¡£ ¢«¤¢¤é¤¿¤Ê¥Ð¥°!! ¨¢ __L1: ;// } ¢«¨¥ ¨¢ cmp %r10, 14 ;// if(??? > 14) { ¨¢ jrle __L2 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L2: ;//} } ¨¢ ret ;// ¨¢ ¤Ê¤ó¤«¤È¤ó¤Ç¤â¤Ê¤¤¥³¡¼¥É¤¬À¸À®¤µ¤ì¤Þ¤·¤¿¡£¸úΨ¤¬°­¤¤¾å¤Ë·ë²Ì¤â´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤³¤ÎÊýË¡¤â¡ß¤Ç¤¹¡£ ¢¨¤Ê¤¼¤³¤ó¤Ê¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë¤Î¤Ç¤·¤ç¤¦¤«? ¢¨º£²ó¤ÎËÜÂ꤫¤é¤Ï³°¤ì¤ë¤Þ¤¹¤¬¡¢·ë¹½Éݤ¤¤Ç¤¹¡¦¡¦¡¦º£¸å¡¢Í×Ä´ºº¤Ç¤¹¡£ ¡ûÀµ¤·¤¤ÃÖ¤­´¹¤¨ C¸À¸ì¤Ç½ñ¤¯¤ÈÀµ¤·¤¤¥³¡¼¥É¤¬À¸À®¤µ¤ì¤Ê¤µ¤½¤¦¤Ê»ö¤¬È½¤Ã¤¿¤Î¤Ç¡¢¥¢¥»¥ó¥Ö¥é¤ÇÃÖ¤­´¹¤¨¤Æ¸«¤ë»ö¤Ë¤·¤Þ¤·¤¿¡£ ¢¢absbug5/absbug5.c ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ asm /*volatile*/ ( \ ¨¢ "cmp %0, 0 \n" \ ¨¢ "jrge 3 \n" \ ¨¢ " not %0, %0 \n" \ ¨¢ " add %0, 1 \n" \ ¨¢ : "=r"(__x__) : "0"(__x__) : "cc"); \ ¨¢ __x__; }) ¨¢ °Ê²¼¤Î¤È¤ª¤ê¡¢Àµ¤·¤¤·ë²Ì¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ ¨¢ ¨¢ x = 5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 10¡×(Àµ¤·¤¤) ¨¢ x = -5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -10¡×(Àµ¤·¤¤) ¨¢ x = 10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ x = -10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ ¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤Ï¡¢¤³¤¦¤Ê¤ê¤Þ¤¹¡£ ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ sll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L1 ;// ¨¢ ld.w %r10, %r11 ;// %r10 := x ¨¢ cmp %r10, 0 ;// if(x < 0) { ¨¤ ¨¢ jrge 3 ;// ¨§¥¢¥»¥ó¥Ö¥é¤ÇÃÖ¤­´¹¤¨¤¿ÈÏ°Ï ¨¢ not %r10, %r10 ;// %r10 := ~x ¨¢ ¨¢ add %r10, 1 ;// %r10 := ~x + 1 = -x } ¨¥ ¨¢ cmp %r10, 14 ;// if(abs(x) > 14) { ¨¢ jrle __L1 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L1: ;//} ¨¢ ret ¨¢ ¼«Á³¤Ê¥³¡¼¥É¤¬À¸À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¸·Ì©¤Ë¸À¤¨¤Ð¡¢C¥³¥ó¥Ñ¥¤¥é¤¬À¸À®¤·¤¿Éôʬ¤Î¥ì¥¸¥¹¥¿¤Î»ÈÍÑÊýË¡¤Ë̵Â̤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤Þ¤¢ÃÖ¤¤¤Æ¤ª¤¯»ö¤Ë¤·¤Æ¡£ ¤È¤¤¤¦¤ï¤±¤Ç¡¢¤³¤ÎÊýË¡¤Ç¡Ögcc33 abs()¤ÎºÇŬ²½¥Ð¥°¡×¤¬²óÈò¤Ç¤­¤ë»ö¤¬È½¤ê¤Þ¤·¤¿¡£ ·ëÏÀ¤«¤é¸À¤¦¤È¡¢¤³¤ì¤¬ºÇÁ±¤ÎÊýË¡¤Ç¤¹¡£ °Ê²¼¡¢Ê̤ÎÊýË¡¤â¸¡¾Ú¤·¤Æ¤ß¤Þ¤·¤¿¤¬¡¢¤³¤ì¤è¤ê¤â¸úΨ¤Î°­¤¤ÊýË¡¤Ê¤Î¤Ç¡¢¸«¤Ê¤¯¤Æ¤â¹½¤¤¤Þ¤»¤ó¡£ ¢¤Àµ¤·¤¤ÃÖ¤­´¹¤¨(ÊÌver)¡£·ë²Ì¤ÏÀµ¤·¤¤¤±¤ì¤É¸úΨ¤¬°­¤¤¡£ ¡Öɸ½àC¥é¥¤¥Ö¥é¥ê¤Î¼ÂÁõ¡×(http://libc.blog47.fc2.com/)¤µ¤ó¤Î¡Öabs´Ø¿ô¡×(http://libc.blog47.fc2.com/blog-entry-57.html)¤Îµ­»ö¤ò»²¾È¤µ¤»¤Æ夭¤Þ¤·¤¿¡£ ¤½¤ì¤Ë¤è¤ë¤È¡¢RISC¤Î¤è¤¦¤Ëʬ´ô¤Î¥³¥¹¥È¤¬Â礭¤¤¥×¥í¥»¥Ã¥µ¤Ç¤Ï¡¢Ê¬´ô¤ò»È¤ï¤º¤Ëabs()¤ò¼ÂÁõ¤¹¤ë»ö¤¬¤¢¤ë¤½¤¦¤Ç¤¹¡£ ¨¢ ¨¢ int t = x >> 31; ¨¢ return (x ^ t) - t; ¨¢ ¤¿¤À¤·¡¢Ê¬´ô¤è¤ê¤â¥·¥Õ¥È±é»»¤ÎÊý¤¬¥³¥¹¥È¤¬Â礭¤¤¥Þ¥¤¥³¥ó(H8¤Ê¤É)¤Ç¤Ï¡¢µÕ¸ú²Ì¤Ë¤Ê¤ë»ö¤â¤¢¤ë¤½¤¦¤Ç¤¹¡£ P/ECE¤ÎCPU S1C33209¤Ï¡¢RISC¥Þ¥¤¥³¥ó¤Ê¤Î¤Ç¤¹¤±¤ì¤É¡¢Ê¬´ô¤è¤ê¤â¥·¥Õ¥È±é»»¤ÎÊý¤¬¥³¥¹¥È¤¬Â礭¤¤¤È»×¤¦¤Î¤Ç¡¢µÕ¸ú²Ì¤Ë¤Ê¤ê¤½¤¦¤Ç¤¹¡£ °ì±þ¡¢»î¤·¤Æ¸«¤ë»ö¤Ë¤·¤Þ¤·¤¿¡£ ¢¢absbug6/absbug6.c ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ asm /*volatile*/ ( \ ¨¢ "ld.w %%r9, %0 \n" \ ¨¢ "xsra %%r9, 31 \n" \ ¢«¨¡¨¡4Ì¿Îá¤ËŸ³«¤µ¤ì¤Þ¤¹¡£ ¨¢ "xor %0, %%r9 \n" \ ¨¢ "sub %0, %%r9 \n" \ ¨¢ : "=r"(__x__) : "0"(__x__) : "cc","%r9"); \ ¨¢ __x__; }) ¨¢ ¼Â¹Ô·ë²Ì¤Ï¡¢¤³¤¦¤Ê¤ê¤Þ¤·¤¿¡£ ¨¢ ¨¢ x = 5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 10¡×(Àµ¤·¤¤) ¨¢ x = -5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -10¡×(Àµ¤·¤¤) ¨¢ x = 10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ x = -10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ ¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤Ï¡¢¤³¤¦¤Ê¤ê¤Þ¤·¤¿¡£ ¢¢absbug6/absbug6.ps ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ sll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L1 ;// ¨¢ ld.w %r10, %r11 ;// %r10 := x ¨¢ ld.w %r9, %r10 ;// %r9 := x ¨¤ ¨¢ sra %r9, 8 ;// %r9 := x >> 8 ¨¢ ¨¢ sra %r9, 8 ;// %r9 := x >> 16 ¨¢ ¨¢ sra %r9, 8 ;// %r9 := x >> 24 ¨§¥¢¥»¥ó¥Ö¥é¤ÇÃÖ¤­´¹¤¨¤¿ÈÏ°Ï ¨¢ sra %r9, 7 ;// %r9 := t = x >> 31 ¨¢ ¨¢ xor %r10, %r9 ;// %r10 := x ^ t ¨¢ ¨¢ sub %r10, %r9 ;// %r10 := (x ^ t) - t = abs(x) ¨¥ ¨¢ cmp %r10, 14 ;// if(abs(x) > 14) { ¨¢ jrle __L1 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L1: ;//} ¨¢ ret ¨¢ ¼Â¹Ô·ë²Ì¤ÏÀµ¤·¤¤¤Î¤Ç¤¹¤±¤ì¤É¡¢¥³¡¼¥É¥µ¥¤¥º¤âÂ礭¤¤¤·¡¢¼Â¹Ô®ÅÙ¤âÃÙ¤¤¤Ç¤¹¡£ ¡Öʬ´ô¤ò»È¤ï¤º¤Ëabs()¤ò¼ÂÁõ¤¹¤ë¡×ÊýË¡¤Ï¡¢S1C33209¤Ë¤Ï¸þ¤¤¤Æ¤¤¤Ê¤¤»ö¤¬È½¤ê¤Þ¤·¤¿¡£ ¢¤Àµ¤·¤¤ÃÖ¤­´¹¤¨(ÊÌver)¡£·ë²Ì¤ÏÀµ¤·¤¤¤±¤ì¤É¸úΨ¤¬°­¤¤¡£ ¡Öʬ´ô¤ò»È¤ï¤º¤Ëabs()¤ò¼ÂÁõ¤¹¤ë¡×ÊýË¡¤ò¾¯¤·½¤Àµ¤·¤Æ¡¢¥·¥Õ¥È±é»»¤Î¥³¥¹¥È¤òÄ㸺¤¹¤ë»ö¤¬½ÐÍè¤Þ¤¹¡£ ¢¢absbug7/absbug7.c ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ asm /*volatile*/ ( \ ¨¢ "swap %%r9, %0 \n" \ ¨¢ "ld.b %%r9, %%r9 \n" \ ¨¢ "sra %%r9, 7 \n" \ ¨¢ "xor %0, %%r9 \n" \ ¨¢ "sub %0, %%r9 \n" \ ¨¢ : "=r"(__x__) : "0"(__x__) : "cc","%r9"); \ ¨¢ __x__; }) ¨¢ ¼Â¹Ô·ë²Ì¤Ï¡¢¤³¤¦¤Ê¤ê¤Þ¤·¤¿¡£ ¨¢ ¨¢ x = 5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 10¡×(Àµ¤·¤¤) ¨¢ x = -5; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = -10¡×(Àµ¤·¤¤) ¨¢ x = 10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ x = -10; ¨¢ test(); ¨¢ pceFontPrintf("x = %d\n", x); //¢Í¡Öx = 0¡×(Àµ¤·¤¤) ¨¢ ¥¢¥»¥ó¥Ö¥é¥³¡¼¥É¤Ï¡¢¤³¤¦¤Ê¤ê¤Þ¤·¤¿¡£ ¢¢absbug7/absbug7.ps ¨¢ ¨¢ test: ¨¢ xld.w %r10, [x] ;//%r10 := x ¨¢ ld.w %r11, %r10 ;//%r11 := x ¨¢ xsll %r11, 1 ;//%r11 := x <<= 1 ¨¢ xld.w [x], %r11 ;//x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ xld.w %r10, [y] ;//%r10 := y ¨¢ cmp %r10, 0 ;//if(y) { ¨¢ jreq __L1 ;// ¨¢ ld.w %r10, %r11 ;// %r10 := x ¨¢ swap %r9, %r10 ;// %r9[7:0] := x[31:24] ¨¤ ¨¢ ld.b %r9, %r9 ;// %r9 := x[31:24] Éä¹æ³ÈÄ¥ ¨¢ ¨¢ sra %r9, 7 ;// %r9 := x[31] = t ¨§¥¢¥»¥ó¥Ö¥é¤ÇÃÖ¤­´¹¤¨¤¿ÈÏ°Ï ¨¢ xor %r10, %r9 ;// %r10 := x ^ t ¨¢ ¨¢ sub %r10, %r9 ;// %r10 := (x ^ t) - t = abs(x) ¨¥ ¨¢ cmp %r10, 14 ;// if(abs(x) > 14) { ¨¢ jrle __L1 ;// ¨¢ ld.w %r12, 0 ;// %r12 := x = 0 ¨¢ xld.w [x], %r12 ;// x¤ò¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë¡£ ¨¢ __L1: ;//} ¨¢ ret ¨¢ Á°¤Îver¤è¤ê¤Ï²þÁ±¤·¤Þ¤·¤¿¤¬¡¢¤½¤ì¤Ç¤â¡¢Ê¬´ô¤ò»È¤Ã¤Æ¼ÂÁõ¤·¤¿ver¤è¤ê¤Ï¥³¡¼¥É¥µ¥¤¥º¤¬Â礭¤¯¡¢¼Â¹Ô®ÅÙ¤âÃÙ¤¤¤Ç¤¹¡£ ¤ä¤Ã¤Ñ¤ê¡¢¡Öʬ´ô¤ò»È¤ï¤º¤Ëabs()¤ò¼ÂÁõ¤¹¤ë¡×ÊýË¡¤Ï¡¢S1C33209¤Ë¤Ï¸þ¤¤¤Æ¤¤¤Ê¤¤»ö¤¬È½¤ê¤Þ¤·¤¿¡£ ¢£¤Þ¤È¤á P/ECE³«È¯´Ä¶­¤ÎC¥³¥ó¥Ñ¥¤¥égcc33¤Î¡¢abs()¤ÎºÇŬ²½¥Ð¥°¤ò²óÈò¤¹¤ëÊýË¡¤Ï¡¢¡Öabsbug5/absbug5.c¡×¤ÎÊýË¡¤¬ºÇÁ±¤Ç¤¹¡£ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Çabs()¤ò»È¤¦»ö¤Ï¡¢°Õ³°¤È¾¯¤Ê¤¤¤·¡¢¤½¤Î¾å¡¢abs¤ÎºÇŬ²½¥Ð¥°¤¬È¯À¸¤¹¤ë¾ò·ï¤Ë°ìÃפ¹¤ë»ö¤Ï¤â¤Ã¤È¾¯¤Ê¤¤¤È»×¤¦¤Î¤Ç¤¹¤¬¡¢ °ÂÁ´¤Î¤¿¤á¤Ë¡¢¡Öabsbug5/absbug5.c¡×¤Î¥Þ¥¯¥í¤ò¡¢¤¤¤Ä¤âÄêµÁ¤·¤Æ¤ª¤¯¤Î¤¬Îɤ¤¤È»×¤¤¤Þ¤¹¡£ ¤Á¤Ê¤ß¤Ë¡¢º£²ó¤Ï¡Öabs()¡×¤Ë¤Ä¤¤¤Æ¤À¤±½ñ¤­¤Þ¤·¤¿¤¬¡¢¡Ölabs()¡×¤Ë¤Ä¤¤¤Æ¤âÁ´¤¯Æ±¤¸¤Ç¤¹¡£ ¡Öabsbug5/absbug5.c¡×¤Î¥Þ¥¯¥í¤Ë¡¢labs()¤âÄɲ䷤ơ¢°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤¹¤ë¤Î¤¬Îɤ¤¤È»×¤¤¤Þ¤¹¡£ ¨¢ ¨¢ #define abs(x) ({ \ ¨¢ int __x__ = (x); \ ¨¢ asm /*volatile*/ ( \ ¨¢ "cmp %0, 0 \n" \ ¨¢ "jrge 3 \n" \ ¨¢ " not %0, %0 \n" \ ¨¢ " add %0, 1 \n" \ ¨¢ : "=r"(__x__) : "0"(__x__) : "cc"); \ ¨¢ __x__; }) ¨¢ #define labs(x) abs(x) ¢«¨¡¨¡¤³¤ì¤òÄɲà ¨¢ º£²ó¤ÎÄ´ºº¤ÎÃæ¤Ç¡¢abs()¤ÎºÇŬ²½¥Ð¥°¤È¤ÏÊ̤Ρ¢µ¤¤Ë¤Ê¤ëÅÀ¤â¤¤¤¯¤Ä¤«È¯À¸¤·¤Þ¤·¤¿¡£(absbug2/absbug2.c¤Èabsbug3/absbug3.c¤Î¢¨¤ÎÉôʬ¤ò»²¾È) ¤½¤ì¤é¤ÎÅÀ¤â¡¢º£¸å¡¢Ä´ºº¤·¤Æ¸«¤è¤¦¤È»×¤¤¤Þ¤¹¡£ º£²ó»ÈÍѤ·¤¿¸¡¾Ú¥×¥í¥°¥é¥à°ì¼°¤Î¡¢¥À¥¦¥ó¥í¡¼¥É¤Ï¤³¤Á¤é¤Ç¤¹: http://www.piece-me.org/piece-lab/absbug/absbug-src.zip * Wed Jan 21 21:03:25 JST 2015 Naoyuki Sawa - P/ECE¤Îsize_t¤Ïunsigned¡£unsigned long¤Ç¤Ï¤Ê¤¤¡£ size_t¤Î·¿¤Ï½èÍý·Ï°Í¸¤Ç¤¹¡£ÂçÄñ¤Î32¥Ó¥Ã¥È´Ä¶­¤Ç¤Ï¡¢unsigned,Ëô¤Ï,unsigned long¤ÈÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ unsigned¤Ç¤âunsigned long¤Ç¤â»ÈÍѾå¤Î°ã¤¤¤Ï̵¤¯¡¢¤É¤Á¤é¤Ç¤¢¤ë¤«¤òµ¤¤Ë¤¹¤ë»ö¤Ï¤¢¤Þ¤ê̵¤¤¤Ç¤¹¡£ ¤·¤«¤·¡¢P/ECE³«È¯´Ä¶­¤ò»È¤Ã¤Æ¤¤¤Æ¡¢unsigned¤Èunsigned long¤Î°ã¤¤¤¬ÌäÂê¤Ë¤Ê¤ë¥±¡¼¥¹¤¬È¯À¸¤·¤Þ¤·¤¿¡£ <Îã1> ¨¢#include ¨¢#include ¨¢extern int memcmp(const void* x, const void* y, size_t n); ¨¢int test1(const char* x, const char* y, size_t n) { ¨¢ return memcmp(x, y, n); ¨¢} <Îã2> ¨¢#include ¨¢#include ¨¢extern int memcmp(const void* x, const void* y, size_t n); ¨¢int test1(const char* x, const char* y, size_t n) { ¨¢ return memcmp(x, y, n); ¨¢} <Îã1>¤Î¥½¡¼¥¹¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È°Ê²¼¤Î·Ù¹ð¤¬½Ð¤Þ¤¹¡£ warning: conflicting types for built-in function `memcmp' °ìÊý¡¢<Îã2>¤Î¥½¡¼¥¹¤Ï¡¢·Ù¹ð̵¤¯¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤¹¡£ <Îã1>¤È<Îã2>¤Î°ã¤¤¤Ï¡¢stdio.h¤Èstddef.h¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë½çÈ֤ΰ㤤¤À¤±¤Ç¤¹¡£ ¤Ê¤¼¡¢<Îã1>¤Ç¤Ï·Ù¹ð¤¬½Ð¤Æ¡¢<Îã2>¤Ç¤Ï·Ù¹ð¤¬½Ð¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«¡£ stdio.h¤Èstddef.h¤òÈæ³Ó¤·¤¿¤È¤³¤í¡¢size_t¤ÎÄêµÁ¤¬°ã¤Ã¤Æ¤¤¤ë»ö¤Ëµ¤ÉÕ¤­¤Þ¤·¤¿¡£ ¢¢\usr\PIECE\include\stdio.h ¨¢¡Á ¨¢#ifndef _SIZE_T ¨¢#define _SIZE_T ¨¢typedef unsigned long size_t; /* size of type */ ¨¢#endif ¨¢¡Á ¢¢\usr\PIECE\include\stddef.h ¨¢¡Á ¨¢#ifndef _SIZE_T ¨¢#define _SIZE_T ¨¢#ifdef __STDC__ ¨¢ typedef TYPEOF(sizeof(0)) size_t; ¨¢#else ¨¢ /* compiled with "-traditional" switch */ ¨¢ typedef unsigned size_t; ¨¢#endif ¨¢#endif ¨¢¡Á stdio.h¤Ï¡¢size_t¤òunsigned long·¿¤ÈÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£ stddef.h¤Ï¡¢__STDC__¤Ë¤è¤Ã¤Æ¾ì¹çʬ¤±¤µ¤ì¤Æ¤¤¤Þ¤¹¤±¤ì¤É¡¢¤É¤Á¤é¤Ë¤·¤Æ¤â·ë²ÌŪ¤Ë¡¢size_t¤¬unsigned·¿¤ËÄêµÁ¤µ¤ì¤Þ¤¹¡£ ¥Þ¥¯¥í_SIZE_T¤Ë¤è¤Ã¤Æ¡¢Àè¤Ë¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿Êý¤ÎÄêµÁ¤¬Í­¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£ ½¾¤Ã¤Æ¡¢<Îã1>¤Ç¤Ïsize_t¤¬unsigned long·¿¡¢<Îã2>¤Ç¤Ïsize_t¤¬unsigned·¿¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤ï¤±¤Ç¤¹¡£ size_t¤¬unsigned long·¿¤Î»þ¤Ë¡¢ warning: conflicting types for built-in function `memcmp' ¤Î·Ù¹ð¤¬½Ð¤ëÍýͳ¤Ï¡¢P/ECE³«È¯´Ä¶­¤ÎC¥³¥ó¥Ñ¥¤¥é¤Ç¤Ï¡¢memcmp()¤¬¥³¥ó¥Ñ¥¤¥é¤Î¥Ó¥ë¥È¥¤¥ó´Ø¿ô¤À¤«¤é¤Ç¤¹¡£ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Çsize_t¤¬¤É¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤«¤Ë´Ø·¸¤Ê¤¯¡¢C¥³¥ó¥Ñ¥¤¥é¤ÎEXE¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ç¡¢ int memcmp(const void* x, const void* y, unsigned n); ¤È¤¤¤¦´Ø¿ô·Á¼°¤Ë·è¤áÂǤÁ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£<Îã1>¤Ï¡¢¥½¡¼¥¹¤ÎÃæ¤Ç¡¢ int memcmp(const void* x, const void* y, unsigned long n); ¤ÈÀë¸À¤·¤¿¤³¤È¤Ë¤Ê¤Ã¤Æ¡¢¥³¥ó¥Ñ¥¤¥é¤¬·è¤áÂǤÁ¤Ë¤·¤Æ¤¤¤ë´Ø¿ô·Á¼°¤È°ã¤Ã¤Æ¤¤¤ë¡¢¤È¤¤¤¦¤³¤È¤Ç·Ù¹ð¤¬É½¼¨¤µ¤ì¤ë¤Î¤Ç¤·¤¿¡£ P/ECE¤Î¥×¥í¥°¥é¥à¤òºî¤Ã¤Æ¤¤¤Æ¡¢¾åµ­¤ÎÌäÂ꤬¸²ºß²½¤¹¤ë¤³¤È¤Ï¡¢¤¢¤Þ¤ê̵¤¤¤Ç¤¹¡£ ¤Ê¤¼¤Ê¤é¡¢P/ECE³«È¯´Ä¶­¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ç¡¢memcmp()¤Ï°Ê²¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¹¡£ ¢¢\usr\PIECE\include\string.h ¨¢¡Á ¨¢int memcmp( /* char *, char *, int */ ) ; ¨¢¡Á °ú¿ô¤òÌÀ¼¨¤·¤Ê¤¤¡¢K&R·Á¼°¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤À¤«¤é¡¢size_t¤ÎÄêµÁ¤¬unsignedlong¤Ç¤¢¤Ã¤Æ¤â±Æ¶Á¤Ï̵¤¯¡¢·Ù¹ð¤Ïɽ¼¨¤µ¤ì¤Ê¤¤¤Î¤Ç¤¹¡£ ÌäÂ꤬¸²ºß²½¤¹¤ë¥±¡¼¥¹¤Î°ìÎã¤È¤·¤Æ¤Ï¡¢¥ª¡¼¥×¥ó¥½¡¼¥¹¤Î¥×¥í¥°¥é¥à¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë»þ¤Ê¤É¤Ç¤¹¡£ stddef.h¤è¤ê¤âÀè¤Ëstdio.h¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¤¤¤Æ¡¢¤«¤Ä¡¢memcmp()¤òANSI·Á¼°¤ÇÌÀ¼¨Åª¤ËÀë¸À¤·¤Æ¤¤¤ë¤È¡¢·Ù¹ð¤¬½Ð¤Þ¤¹¡£ ¤Á¤Ê¤ß¤Ëmemcmp()¤À¤±¤Ç¤Ê¤¯¡¢memcpy()¤Ç¤âƱÍͤηٹ𤬽Фޤ¹¡£memcpy()¤âsize_t·¿¤Î°ú¿ô¤ò»ý¤Ä¡¢¥Ó¥ë¥È¥¤¥ó´Ø¿ô¤À¤«¤é¤Ç¤¹¡£ ÌäÂê¤Î¸¶°ø¤Ï¡¢P/ECE³«È¯´Ä¶­¤Îɸ½à¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Î¡¢stddef.h°Ê³°¤¬size_t¤ÎÄêµÁ¤¬´Ö°ã¤Ã¤Æ¤¤¤ë»ö¤Ç¤¹¡£ ¤³¤ì¤Þ¤Ç¤ÎÀâÌÀ¤Ç¤Ï¡¢stdio.h¤òÌäÂê»ë¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢stdio.h¤À¤±¤Ç¤Ê¤¯¡¢stdlib.h,string.h,time.h¤â´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£ º¬ËÜŪ¤Ë²ò·è¤¹¤ë¤Ë¤Ï¡¢¤³¤ì¤é¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò½ñ¤­´¹¤¨¤ë»ö¤Ê¤Î¤Ç¤¹¤¬¡¢¤½¤ì¤Ï¤¢¤Þ¤ê¤ä¤ê¤¿¤¯¤Ê¤¤¤Ç¤¹¡£ Âå¤ê¤ÎÂкö°Æ¤òÆó¤Ä¹Í¤¨¤Æ¤ß¤Þ¤·¤¿¡£ ¢¢Âкö°Æ£± ¾ï¤Ë¡¢stddef.h¤òºÇ½é¤Ë¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë¡£(¤Ç¤â¡¢¥ª¡¼¥×¥ó¥½¡¼¥¹¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë»þ¤È¤«¤Ï¡¢Êѹ¹ÅÀ¤¬Â¿¤¯¤ÆÆñ¤·¤¤¤«¤â¡Ä) ¢¢Âкö°Æ£² ¥³¥ó¥Ñ¥¤¥é¥ª¥×¥·¥ç¥ó¤Ç¡Ö-Dsize_t=unsigned -D_SIZE_T¡×¤È»ØÄꤹ¤ë¡£(Makefile¤ÎÊѹ¹¤À¤±¤ÇºÑ¤à¤«¤é¡¢¤³¤Ã¤Á¤ÎÊý¤¬¤¤¤¤¤«¤Ê¡Ä) ¤È¤³¤í¤ÇÊ̤ÎÏäǤ¹¤¬¡¢P/ECE³«È¯´Ä¶­¤Îstring.h¤Ï¡¢size_t¤À¤±¤¸¤ã¤Ê¤¯¤ÆNULL¤ÎÄêµÁ¤â´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£ ËÜÍè¡¢C¸À¸ì¤Ç¤Ï¡Ö#define NULL ((void*)0) ¤Ê¤Î¤Ç¤¹¤¬¡¢¡Ö#define NULL 0¡×¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤·¤¿¡£ º£¤Þ¤Çµ¤ÉÕ¤«¤Ê¤«¤Ã¤¿¤Î¤Ç¤¹¤±¤ì¤É¡¢¤³¤ì¤â»×¤ï¤Ì¤È¤³¤í¤ÇÌäÂê¤Ë¤Ê¤ê¤½¤¦¤Êµ¤¤¬¤·¤Þ¤¹¡£ * Sat Jan 03 00:00:00 JST 2015 Naoyuki Sawa - USB¤Î¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤ÇP/ECE¤¬¥Ï¥ó¥°¥¢¥Ã¥×¤¹¤ë ¡ÖP/ECE¤Î¥¢¥×¥ê¤¬¡¢2¥ß¥êÉôְʾå³ä¤ê¹þ¤ß¤ò¶Ø»ß¤¹¤ë¤È¡¢P/ECE¤¬¥Ï¥ó¥°¥¢¥Ã¥×¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¡×¤È¤¤¤¦»ö¤Ëµ¤ÉÕ¤­¤Þ¤·¤¿¡£ USB¤Î¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤Ë¤«¤«¤ï¤ëÌäÂê¤Ç¤¹¡£ ¢£¸¡¾Ú¤ò»Ï¤á¤ëÁ°¤Ë ¸¡¾Ú¤ò»Ï¤á¤ëÁ°¤Ë¡¢Ãí°ÕÅÀ¤¬¤¢¤ê¤Þ¤¹¡£ PC´Ä¶­¤Ë¤è¤Ã¤Æ¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬¡¢Í­¸ú¤À¤Ã¤¿¤ê̵¸ú¤À¤Ã¤¿¤ê¤¹¤ë»ö¤Ç¤¹¡£ Î㤨¤Ð¡¢Ëͤ¬»È¤Ã¤Æ¤¤¤ë¡ÖIntel 965¡×¤Î¥Î¡¼¥ÈPC¤Ï¡¢¤É¤¦ÀßÄꤷ¤Æ¤â¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤òÍ­¸ú¤Ë¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ Ê̤ΡÖIntel 915 ¥Á¥Ã¥×¥»¥Ã¥È¡×¤Î¥Ç¥¹¥¯¥È¥Ã¥×PC¤Ï¡¢¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤Î¤Þ¤Þ¤Ç¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Í­¸ú¤Ç¤·¤¿¡£ Web¤ÇÄ´¤Ù¤Æ¤ß¤¿¤È¤³¤í¡¢Æ±»þ¤Ë»ÈÍѤ·¤Æ¤¤¤ë¾¤ÎUSBµ¡´ï¤ä¡¢¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Î¼ïÎà¤Ë¤è¤Ã¤Æ±Æ¶Á¤µ¤ì¤ë¤½¤¦¤Ç¤¹¡£ ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Ìµ¸ú¤ÊPC¤Ç¤Ï¡¢º£²ó¸¡¾Ú¤¹¤ëÌäÂ꤬ºÆ¸½¤·¤Þ¤»¤ó¡£ ¤¿¤À¤·¡¢¼Â¸³¤Î¤¿¤á¤Ë̵Íý¤ä¤êºÆ¸½¤¹¤ëÊýË¡¤Ï¤¢¤Ã¤Æ¡¢P/ECE¤ËÅÅÃÓ¤òÆþ¤ì¤ÆUSB¥±¡¼¥Ö¥ë¤òÈ´¤±¤ÐºÆ¸½¤Ç¤­¤Þ¤¹¡£ ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤È¤Ï¡¢¥Ç¥Ð¥¤¥¹Â¦(=P/ECE¦)¤«¤é¸«¤ë¤È¡¢¡ÖSOF¥Ñ¥±¥Ã¥È¡×¤È¤¤¤¦ÄÌ¿®¤¬°ìÄê»þ´ÖÆϤ«¤Ê¤¤»ö¤Ç¤¹¡£ ¥Ç¥Ð¥¤¥¹Â¦¤«¤é¸«¤ì¤Ð¡¢PC¤¬SOF¥Ñ¥±¥Ã¥È¤òÁ÷¤é¤Ê¤¤¤Î¤â¡¢USB¥±¡¼¥Ö¥ë¤òÈ´¤¤¤ÆÄÌ¿®¤¬ÅÓÀ䤨¤ë¤Î¤â¡¢Æ±¤¸»ö¤Ë¸«¤¨¤ë¤«¤é¤Ç¤¹¡£ ¤È¤¤¤¦¤ï¤±¤Ç¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Ìµ¸ú¤ÊPC¤Ç¼Â¸³¤¹¤ë¾ì¹ç¤Ï¡¢P/ECE¤ËÅÅÃÓ¤òÆþ¤ì¤ÆUSB¥±¡¼¥Ö¥ë¤òÈ´¤¤¤Æ²¼¤µ¤¤¡£ ¾°¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Í­¸ú¤â¤ÊPC¤Ç¤Ï¡¢run.bat¤ÇP/ECE¤Î¥¢¥×¥ê¤ò¼Â¹Ô¤·¤¿¸å¡¢USBÄÌ¿®¤¬È¯À¸¤·¤Ê¤±¤ì¤ÐÌó5Éøå¤Ë¼«Æ°Åª¤Ë¥µ¥¹¥Ú¥ó¥É¤·¤Þ¤¹¡£(¸«¤¿ÌܤǤϤ狼¤ê¤Þ¤»¤ó) ¢£ÌäÂê¤òºÆ¸½¤¹¤ë¥¢¥×¥ê http://www.piece-me.org/piece-lab/usbsus/usbsus1.c ¤Þ¤º¡¢ÌäÂê¤Î¸½¾Ý¤òºÆ¸½¤·¤Æ¤ß¤Þ¤¹¡£ usbsus1.srf¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ ¥á¥¤¥ó¥ë¡¼¥×¤Î½èÍý¤Ï¡¢¿ô»ú¤òÁý¤ä¤·¤Ê¤¬¤é²èÌÌɽ¼¨¤¹¤ë¤À¤±¤Î½èÍý¤Ç¤¹¡£ A¥Ü¥¿¥ó¤ò²¡¤¹¤È¡¢³ä¤ê¹þ¤ß¤ò¶Ø»ß¤·¤Æ¡¢5ÉôÖÂÔ¤Á¤Þ¤¹¡£ 5ÉôַФ俤顢¤Þ¤¿¥á¥¤¥ó¥ë¡¼¥×¤Î½èÍý¤ËÌá¤ê¤Þ¤¹¡£ ³ä¤ê¹þ¤ß¶Ø»ß¤Ë¤Ê¤ë5Éô֤Τ¢¤¤¤À¤òÁÀ¤Ã¤Æ¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤òȯÀ¸¤µ¤»¤Æ¤¯¤À¤µ¤¤¡£ ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Í­¸ú¤â¤ÊPC¤Ê¤é¤Ð¡¢run.bat¤ÇP/ECE¤Î¥¢¥×¥ê¤ò¼Â¹Ô¤·¤¿¸å¡¢3É䰤餤ÂԤäÆA¥Ü¥¿¥ó¤ò²¡¤»¤Ð¡¢¤Á¤ç¤¦¤É³ä¤ê¹þ¤ß¶Ø»ßÃæ¤Ë¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¹¤ë¤È»×¤¤¤Þ¤¹¡£ ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Ìµ¸ú¤â¤ÊPC¤Ê¤é¤Ð¡¢A¥Ü¥¿¥ó¤ò²¡¤·¤¿¸å¡¢5ÉðÊÆâ¤ËUSB¥±¡¼¥Ö¥ë¤òÈ´¤¤¤Æ¤¯¤À¤µ¤¤¡£ ¾åµ­¤ò¹Ô¤¦¤È¡¢5ÉôַФ俸å¥á¥¤¥ó¥ë¡¼¥×¤Î½èÍý¤ËÌá¤é¤º¤Ë¡¢P/ECE¤¬¥Ï¥ó¥°¥¢¥Ã¥×¤·¤Þ¤¹¡£ ¥Ï¥ó¥°¥¢¥Ã¥×¤·¤¿¸å¤Ë¡¢Àµ¾ïÉüµ¢¤µ¤»¤Æ¥á¥¤¥ó¥ë¡¼¥×¤òºÆ³«¤¹¤ëÊýË¡¤Ï¡¢°ì±þ¡¢Í­¤ê¤Þ¤¹¡£ ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Í­¸ú¤â¤ÊPC¤Ê¤é¤Ð¡¢²¿¤«USBÄÌ¿®¤òȯÀ¸¤µ¤»¤Æ¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤ò²ò½ü¤¹¤ì¤ÐÎɤ¤¤Ç¤¹¡£(Î㤨¤Ð¡Öisd.exe =¡×¤È¥¿¥¤¥×¤·¤Æ¥Õ¥¡¥¤¥ë°ìÍ÷¤ò¼èÆÀ¤¹¤ë¡¢¤Ê¤É) ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Ìµ¸ú¤â¤ÊPC¤Ê¤é¤Ð¡¢USB¥±¡¼¥Ö¥ë¤ò¤µ¤»¤Ð¡¢¼«Æ°Åª¤ËUSBÄÌ¿®¤¬È¯À¸¤·¤ÆÀµ¾ïÉüµ¢¤·¡¢¥á¥¤¥ó¥ë¡¼¥×¤¬ºÆ³«¤·¤Þ¤¹¡£ ¤È¤Ï¸À¤¨¡¢¥¢¥×¥ê¤¬¥Ï¥ó¥°¥¢¥Ã¥×¤·¤¿»þ¤Ë¥æ¡¼¥¶¡¼¤¬¤³¤ÎÌäÂ꤬¸¶°ø¤À¤Èµ¤ÉÕ¤¤¤Æ¡¢¾åµ­¤ÎÁàºî¤ò¹Ô¤Ã¤Æ¤â¤é¤¦»ö¤Ï¸½¼ÂŪ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¢£¸¶°ø¤Î¿ä¬ ³ä¤ê¹þ¤ß¶Ø»ßÃæ¤Ë¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬È¯À¸¤¹¤ë¤È¥Ï¥ó¥°¥¢¥Ã¥×¤¹¤ëÌäÂê¤Î¡¢¸¶°ø¤òÄ´ºº¤·¤Þ¤·¤¿¡£ ¤¤¤í¤¤¤í»î¤·¤¿¤È¤³¤í¡¢USB³ä¤ê¹þ¤ß¤¬³Ý¤«¤ê¤ÃÊü¤·¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£ USB³ä¤ê¹þ¤ß¤¬³Ý¤«¤ê¤ÃÊü¤·¤Ê¤Î¤Ç¡¢¥á¥¤¥ó¥ë¡¼¥×¤¬²ó¤é¤Ê¤¯¤Ê¤Ã¤Æ¡¢¥Ï¥ó¥°¥¢¥Ã¥×¤·¤Æ¤¤¤ë¤è¤¦¤Ë¸«¤¨¤ë¤Î¤Ç¤¹¡£ ¶ñÂÎŪ¤Ë¤Ï¡¢USB³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤¬¸Æ¤Ó½Ð¤µ¤ì¤Æ¡¢USB³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤¬USB³ä¤ê¹þ¤ß¤ò²ò½ü¤¹¤ëÁàºî¤ò¤·¤Æ¥ê¥¿¡¼¥ó¤·¤¿¤Ë¤â¤«¤«¤ï¤é¤º¡¢ ¼ÂºÝ¤Ë¤ÏUSB³ä¤ê¹þ¤ß¤¬²ò½ü¤µ¤ì¤Æ¤ª¤é¤º¡¢¤Þ¤¿USB³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤¬¸Æ¤Ó½Ð¤µ¤ì¤ë¡¦¡¦¡¦¤È¤¤¤¦·«¤êÊÖ¤·¤Ç¤¹¡£ USB³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤¬USB³ä¤ê¹þ¤ß¤ò²ò½ü¤¹¤ëÁàºî¤ò¤·¤Æ¤¤¤ë¤Î¤Ë¡¢¤Ê¤¼¡¢USB³ä¤ê¹þ¤ß¤¬²ò½ü¤µ¤ì¤Ê¤¤¤Î¤«¤ò¡¢¹Í¤¨¤Æ¤ß¤Þ¤·¤¿¡£ Ä̾ï¤ÎUSBÄÌ¿®³ä¤ê¹þ¤ß¤Ç¤ÏÌäÂ꤬ȯÀ¸¤»¤º¡¢'SUSPEND CHANGE'³ä¤ê¹þ¤ß»þ¤Î¤ßÌäÂ꤬ȯÀ¸¤¹¤ë¤³¤È¤«¤é¿ä¬¤·¤Æ¡¢ ¡ØUSB¥³¥ó¥È¥í¡¼¥é(PDIUSBD12)¤¬¡¢¥µ¥¹¥Ú¥ó¥É¾õÂ֤˴°Á´¤Ë°Ü¹Ô¤·¤Æ¤·¤Þ¤¦¤È¡¢CPU(S1C33209)¤«¤é¤Î°ìÀÚ¤ÎÁàºî¤ò¼õ¤±ÉÕ¤±¤Ê¤¯¤Ê¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¡Ù¤È¿ä¬¤·¤Þ¤·¤¿¡£ ¶ñÂÎŪ¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Êή¤ì¤Ç¤¹¡£ USB¥³¥ó¥È¥í¡¼¥é¤¬¥µ¥¹¥Ú¥ó¥É¤Ø°Ü¹Ô¤¹¤ëÍ×°ø(=PC¤«¤é¤Î¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É,Ëô¤Ï,USB¥±¡¼¥Ö¥ë¤òÈ´¤¤¤¿)¤¬È¯À¸¤·¤Æ¡¢USB¥³¥ó¥È¡¼¥é¤¬¥µ¥¹¥Ú¥ó¥É¤Ø°Ü¹Ô¤ò³«»Ï¤·¤Þ¤¹¡£ ¤Þ¤º¡¢¥µ¥¹¥Ú¥ó¥É¾õÂÖ¤¬ÊѤï¤Ã¤¿¤³¤È¤ò¡¢'SUSPEND CHANGE'³ä¤ê¹þ¤ß¤Ë¤è¤Ã¤Æ¡¢CPU¤ØÃΤ餻¤Þ¤¹¡£(USB SUSPEND¿®¹æ¢ÍHi¡¢USB INT-N¿®¹æ¢ÍLo) ¤½¤Î¸å¡¢°ìÄê»þ´Ö¸å¤Ë¡¢USB¥³¥ó¥È¥í¡¼¥é¤Ï¼«¿È¤Î¥¯¥í¥Ã¥¯¤ò»ß¤á¤Æ¡¢´°Á´¤Ë¥µ¥¹¥Ú¥ó¥É¾õÂ֤ˤʤê¤Þ¤¹¡£ USB¥³¥ó¥È¥í¡¼¥é¤¬´°Á´¤Ë¥µ¥¹¥Ú¥ó¥É¾õÂ֤ˤʤëÁ°¤Ë¡¢CPU¤¬USB¥³¥ó¥È¥í¡¼¥é¤ËÂФ·¤Æ¡¢³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¹Ô¤¨¤Ð¡¢USB INT-N¿®¹æ¢ÍHi¤Ë¤Ê¤ë¤Î¤Ç¤¹¤¬¡¢ ¤â¤·CPU¤Î½èÍý¤¬ÃÙ¤ì¤Æ¡¢³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¹Ô¤¦Á°¤ËUSB¥³¥ó¥È¥í¡¼¥é¤¬´°Á´¤Ë¥µ¥¹¥Ú¥ó¥É¤·¤Æ¤·¤Þ¤¦¤È¡¢¤â¤¦¡¢USB INT-N¿®¹æ¤òHi¤Ë¤¹¤ëÊýË¡¤ÏÍ­¤ê¤Þ¤»¤ó¡£ USB INT-N¿®¹æ=Lo¤Î¤Þ¤Þ¤Ë¤Ê¤ê¡¢USB³ä¤ê¹þ¤ß¤¬¤«¤«¤ê¤Ã¤Ñ¤Ê¤·¤Ë¤Ê¤ê¤Þ¤¹¡£ USBÄÌ¿®¤ò¹Ô¤Ã¤¿¤êUSB¥±¡¼¥Ö¥ë¤ò¤µ¤·¤¿¤ê¤·¤Æ¡¢USB¥³¥ó¥È¥í¡¼¥é¤¬¥µ¥¹¥Ú¥ó¥É¤«¤éÉüµ¢¤¹¤ì¤Ð¡¢USB¥³¥ó¥È¥í¡¼¥é¤¬³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¼õ¤±ÉÕ¤±¤ë¤è¤¦¤Ë¤Ê¤ê¡¢Àµ¾ïÉüµ¢¤·¤Þ¤¹¡£ USB¥³¥ó¥È¥í¡¼¥é¤¬¥µ¥¹¥Ú¥ó¥É¤·¤¿¸å¤Ë¡¢¥µ¥¹¥Ú¥ó¥É¤ò²ò½ü¤¹¤ëÊýË¡¤Ï¡¢PC¦¤«¤é¤ÎUSBÄÌ¿®¤·¤«Ìµ¤¯¡¢CPU¦¤«¤é¥µ¥¹¥Ú¥ó¥É¤ò²ò½ü¤¹¤ë¼êÃʤÏ̵¤¤¤ß¤¿¤¤¤Ç¤¹¡£ ¢£¸¶°ø¤ò¸¡¾Ú¤¹¤ë¥¢¥×¥ê http://www.piece-me.org/piece-lab/usbsus/usbsus2.c ¾åµ­¤Î¿ä¬¤¬Àµ¤·¤¤¤«¤É¤¦¤«¤ò¡¢»î¤·¤Æ¤ß¤Þ¤¹¡£ usbsus2.srf¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ usbsus1.srf¤ÈƱ¤¸¼ê½ç¤ÇÁàºî¤·¤Æ¤ß¤ë¤È¡¢º£Å٤ϡ¢¥Ï¥ó¥°¥¢¥Ã¥×¤»¤º¤Ë¥á¥¤¥ó¥ë¡¼¥×¤ËÌá¤ê¤Þ¤¹¡£ usbsus2.srf¤¬¡¢usbsus1.srf¤È°Û¤Ê¤ëÅÀ¤Ï¡¢³ä¤ê¹þ¤ß¤ò¶Ø»ß¤·¤Æ5ÉôÖÂԤĥ롼¥×¤ÎÃæ¤Ç¡¢¾ï¤ËUSB SUSPEND¿®¹æ¤ÎÊѲ½¤ò´Æ»ë¤·¤Æ¤¤¤ë¤³¤È¤Ç¤¹¡£ USB SUSPEND¿®¹æ¤¬¡¢Lo¢ÍHi¤ËÊѲ½¤·¤¿¤é¡¢USB¥³¥ó¥È¥í¡¼¥é¤Î³ä¤ê¹þ¤ß¤ò²ò½ü¤¹¤ëÁàºî¤ò¹Ô¤¤¤Þ¤¹¡£ ³ä¤ê¹þ¤ß¶Ø»ß¤Ê¤Î¤ÇUSB³ä¤ê¹þ¤ß¤¬¤«¤«¤é¤Ê¤¤Âå¤ê¤Ë¡¢¥µ¥¹¥Ú¥ó¥É¤·¤¿¤«¤É¤¦¤«¤ò¥Ý¡¼¥ê¥ó¥°¤·¤Æ¡¢USB¥³¥ó¥È¥í¡¼¥é¤Î³ä¤ê¹þ¤ß¤ò²ò½ü¤·¤Æ¤¤¤ë¤ï¤±¤Ç¤¹¡£ usbsus1.srf¤Èusbsus2.srf¤ÎµóÆ°¤«¤é¿ä¬¤¹¤ë¤Ë¡¢¤É¤¦¤ä¤é¡¢¿ä¬¤ÏÀµ¤·¤¤¤è¤¦¤Ç¤¹¡£ ¢£²¿¥ß¥êÉðÊÆâ¤Ë³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¹Ô¤¦É¬Íפ¬¤¢¤ë¤« http://www.piece-me.org/piece-lab/usbsus/usbsus3.c Á°½Ò¤ÎÄ̤ꡢUSB¥³¥ó¥È¥í¡¼¥é¤¬´°Á´¤Ë¥µ¥¹¥Ú¥ó¥É¾õÂ֤ˤʤëÁ°¤Ë¡¢CPU¤¬USB¥³¥ó¥È¥í¡¼¥é¤ËÂФ·¤Æ¡¢³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£ ¤½¤ì¤Ç¤Ï¡¢USB¥³¥ó¥È¥í¡¼¥é¤¬¥µ¥¹¥Ú¥ó¥É¤Ø°Ü¹Ô¤¹¤ëÍ×°ø¤¬È¯À¸¤·¤¿¸å¡¢USB¥³¥ó¥È¥í¡¼¥é¤¬´°Á´¤Ë¥µ¥¹¥Ú¥ó¥É¾õÂ֤ˤʤë¤Þ¤Ç¡¢¤É¤ì¤°¤é¤¤»þ´Ö¤Î;͵¤¬¤¢¤ë¤Î¤Ç¤·¤ç¤¦¤«¡£ usbsus3.srf¤Ï¡¢¤½¤ì¤ò¸¡¾Ú¤¹¤ë¥¢¥×¥ê¤Ç¤¹¡£ usbsus3.srf¤¬¡¢usbsus2.srf¤È°Û¤Ê¤ëÅÀ¤Ï¡¢USB SUSPEND¿®¹æ¤ÎÊѲ½¤ò¸¡½Ð¤·¤¿¸å¡¢¤ï¤¶¤È¾¯¤·»þ´Ö¤òÂԤäƤ«¤é¡¢³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤¿»ö¤Ç¤¹¡£ ÂÔ¤Á»þ´Ö¤ò¤¤¤í¤¤¤íÊѤ¨¤Æ»î¤·¤¿¤È¤³¤í¡¢Ìó2¥ß¥êÉðÊÆâ¤Ê¤é¤Ð¥Ï¥ó¥°¥¢¥Ã¥×¤»¤º¡¢Ìó2¥ß¥êÉðʾåÂԤĤȥϥ󥰥¢¥Ã¥×¤·¤Þ¤·¤¿¡£ ¤É¤¦¤ä¤é¡¢USB¥³¥ó¥È¥í¡¼¥é¤¬¥µ¥¹¥Ú¥ó¥É¤Ø°Ü¹Ô¤¹¤ëÍ×°ø¤¬È¯À¸¤·¤¿¸å¡¢USB¥³¥ó¥È¥í¡¼¥é¤¬´°Á´¤Ë¥µ¥¹¥Ú¥ó¥É¾õÂ֤ˤʤë¤Þ¤Ç¤Î»þ´Ö¤Ï¡¢Ìó2¥ß¥êÉäΤ褦¤Ç¤¹¡£ ¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬Ç¤°Õ¤Î¥¿¥¤¥ß¥ó¥°¤ÇȯÀ¸¤¹¤ë¤³¤È¤ò¹Íθ¤¹¤ë¤È¡¢¾ï¤Ë¡¢USB³ä¤ê¹þ¤ß±þÅú»þ´Ö¤¬2¥ß¥êÉðÊÆâ¤Ç¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¤È¸À¤¦¤³¤È¤Ç¤¹¡£ Íפ¹¤ë¤Ë¡¢³ä¤ê¹þ¤ß¶Ø»ß¤Ë¤·¤Æ¹Ô¤¦½èÍý¤¬¡¢¤É¤ì¤â¡¢2¥ß¥êÉäòĶ¤¨¤Æ¤Ï¤¤¤±¤Ê¤¤¤È¸À¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ P/ECE¤Î°ìÈÌŪ¤Ê¥¢¥×¥ê¤Ë¤È¤Ã¤Æ¡¢¤³¤Î¾ò·ï¤Ï¤«¤Ê¤ê¸·¤·¤¤¤Ç¤¹¡£(ËܳÊŪ¤Ê¥ê¥¢¥ë¥¿¥¤¥àOS¤Ê¤é¤ÐÏäÏÊ̤Ǥ·¤ç¤¦¤±¤ì¤É¡Ä) ´û¸¤Î¡¢³ä¤ê¹þ¤ß¶Ø»ß¤Ë¤·¤Æ¹Ô¤Ã¤Æ¤¤¤ë½èÍý¤ò¡¢Á´¤Æ¡¢2¥ß¥êÉðÊÆâ¤Ë½¤Àµ¤¹¤ë¤È¤Ê¤ë¤È¡¢¤«¤Ê¤ê¤ÎÊѹ¹¤òÍפ·¤Þ¤¹¡£ ¢£¥¤¥ó¥Æ¥ê¥¸¥§¥ó¥ÈDMA¤ò»È¤Ã¤Æ²ò·è¤¹¤ë ¤½¤³¤Ç¡¢Ê̤ÎÊýË¡¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤¿¡£ ³ä¤ê¹þ¤ß²ò½üÁàºî¤È¤·¤ÆɬÍפÊÍ×·ï¤Ï¡¢°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£ Í×·ï1. USB SUSPEND¿®¹æ¤¬Lo¢ÍHi¤ËÊѲ½¤·¤¿¤é¡¢2¥ß¥êÉðÊÆâ¤Ë°Ê²¼¤ÎÁàºî¤ò¹Ô¤¦¤³¤È¡£ Í×·ï2. USB¥³¥ó¥È¥í¡¼¥é¤ËÂФ·¤Æ¡¢½ñ¤­¹þ¤ß¤ÈÆɤ߽Ф·¤ò¹Ô¤¦¤³¤È¡£(PDIUSBD12¤Î'Read Interrupt Register'¤ËÁêÅö) Í×·ï3. CPU¤¬³ä¤ê¹þ¤ß¶Ø»ß¾õÂ֤Ǥ¢¤Ã¤Æ¤â¡¢½èÍý¤ò¹Ô¤¦¤³¤È¡£ ¤Ô¤Ã¤¿¤ê¤Îµ¡Ç½¤¬¤¢¤ê¤Þ¤¹¡£¥¤¥ó¥Æ¥ê¥¸¥§¥ó¥ÈDMA(IDMA)¤Ç¤¹¡£ Í×·ï1. ¢Í USB SUSPEND¿®¹æ(K50ü»Ò)¤ò¥È¥ê¥¬¤È¤·¤Æ¡¢IDMA Ch.1¤òµ¯Æ°¤¹¤ë¤è¤¦¤ËÀßÄê¤Ç¤­¤Þ¤¹¡£ Í×·ï2. ¢Í IDMA¤Î¥ê¥ó¥¯µ¡Ç½¤ò»È¤¦¤È¡¢½ñ¤­¹þ¤ß¤ÎDMA½èÍý¤Ë³¤¤¤Æ¡¢Æɤ߽Ф·¤ÎDMA½èÍý¤ò¹Ô¤¦¤è¤¦¤ËÀßÄê¤Ç¤­¤Þ¤¹¡£ Í×·ï3. ¢Í IDMA¤Ï¡¢CPU¤Î³ä¤ê¹þ¤ß¶Ø»ß¾õÂ֤Ȥϴط¸¤Ê¤¯µ¯Æ°¤¹¤ë¤Î¤Ç¡¢CPU¤¬³ä¤ê¹þ¤ß¶Ø»ß¤Ç¤â½èÍý¤ò¹Ô¤¨¤Þ¤¹¡£ Á´¤Æ¤ÎÍ×·ï¤òËþ¤¿¤·¤Æ¤¤¤Þ¤¹¡£ ¢£IDMA¤ò»È¤Ã¤ÆÌäÂê¤ò²ò·è¤·¤¿¥¢¥×¥ê¡õ·ëÏÀ http://www.piece-me.org/piece-lab/usbsus/usbsus4.c usbsus4.srf¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ ÁàºîÊýË¡¤ä¡¢Æ°ºî·ë²Ì¤Ï¡¢usbsus2.srf¤ÈƱ¤¸¤Ç¤¹¡£ usbsus4.srf¤¬¡¢usbsus2.srf¤È°Û¤Ê¤ëÅÀ¤Ï¡¢USB SUSPEND¿®¹æ¤ÎÊѲ½¤ò´Æ»ë¤·¤¿¤ê³ä¤ê¹þ¤ß²ò½üÁàºî¤ò¹Ô¤¦¤Î¤¬¡¢CPU¤Ç¤Ï¤Ê¤¯¡¢IDMA¤Ç¤¢¤ëÅÀ¤Ç¤¹¡£ usbsus2.srf¤Ç¤Ï¡¢³ä¤ê¹þ¤ß¤ò¶Ø»ß¤·¤Æ5ÉôÖÂԤĥ롼¥×¤ÎÃæ¤Ç¡¢CPU¤¬USB SUSPEND¿®¹æ¤ò´Æ»ë¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢usbsus4.srf¤Ç¤Ï¡¢CPU¤Ï²¿¤â¤·¤Þ¤»¤ó¡£ CPU¤ÎÆ°ºî¤È¤·¤Æ¤Ï¡¢°ìÈֺǽé¤Îusbsus1.srf¤ÈƱ¤¸¤Ç¤¹¡£ ¤½¤ÎÂå¤ê¤Ë¡¢¥¢¥×¥ê¤ÎºÇ½é¤Ç¡¢IDMA¤¬Å¬ÀÚ¤ËÆ°ºî¤¹¤ë¤è¤¦¤Ë¡¢IDMA¤Î½é´ü²½½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£ usbsus4.srf¤ò·«¤êÊÖ¤·Áàºî¤·¤Æ¤ß¤Æ¡¢ÌäÂê̵¤¯¡¢¥Ï¥ó¥°¥¢¥Ã¥×¤»¤º¤ËÆ°ºî¤¹¤ë¤³¤È¤¬³Îǧ¤Ç¤­¤Þ¤·¤¿¡£ ·ëÏÀ¤È¤·¤Æ¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤Ëµ¯°ø¤¹¤ë¥Ï¥ó¥°¥¢¥Ã¥×¤ÎÌäÂê¤Ï¡¢IDMA¤ò»È¤Ã¤Æ²ò·è¤Ç¤­¤ë¤³¤È¤¬È½¤ê¤Þ¤·¤¿¡£ ¢£Êä­¡§¥µ¥¹¥Ú¥ó¥É°Ê³°¤ÎUSB³ä¤ê¹þ¤ßȯÀ¸»þ¤ËIDMA¤¬°­±Æ¶Á¤òÀ¸¤¸¤Ê¤¤¤³¤È¤Î³Îǧ ¤³¤ì¤Þ¤Ç¡¢¥µ¥¹¥Ú¥ó¥É»þ¤ÎUSB³ä¤ê¹þ¤ß¤Ë¤Ä¤¤¤Æ¹Í¤¨¤Æ¤­¤Þ¤·¤¿¤¬¡¢Ä̾ï¤ÎUSBÄÌ¿®¤Ë¤ª¤¤¤Æ¤â¡¢USB³ä¤ê¹þ¤ß¤ÏȯÀ¸¤·¤Þ¤¹¡£ IDMA¤¬¡¢´Ö°ã¤Ã¤Æ¡¢Ä̾ï¤ÎUSBÄÌ¿®¤Î³ä¤ê¹þ¤ß¤ò¥¯¥ê¥¢¤·¤Æ¤·¤Þ¤¤¡¢ËÜÍèCPU¤¬½èÍý¤¹¤Ù¤­USB³ä¤ê¹þ¤ß¤¬·çÍ¤Æ¤·¤Þ¤¦¶²¤ì¤Ï̵¤¤¤Ç¤·¤ç¤¦¤«¡£ ´°Á´¤Ë¤Ï¸¡¾Ú¤Ç¤­¤Æ¤¤¤Ê¤¤¤Î¤Ç¤¹¤±¤ì¤É¡¢¤³¤ì¤Þ¤Ç»î¤·¤Æ¤ß¤¿¸Â¤ê¤ÏÌäÂ꤬½Ð¤Æ¤¤¤Ê¤¤¤³¤È¤È¡¢°Ê²¼2¤Ä¤ÎÍýͳ¤«¤é¡¢Â¿Ê¬Âç¾æÉפÀ¤È»×¤¤¤Þ¤¹¡£ Íýͳ1¡£Ä̾ï¤ÎUSBÄÌ¿®¤È¶á¤¤¥¿¥¤¥ß¥ó¥°¤Ç¤Ï¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤ÏȯÀ¸¤·¤Þ¤»¤ó¡£ PC¤ÎÀßÄ꼡Âè¤Ç¤Ï¤¢¤ê¤Þ¤¹¤¬¡¢¤À¤¤¤¿¤¤¡¢Ä̾ï¤ÎUSBÄÌ¿®¤¬ÅÓÀÚ¤ì¤Æ¤«¤é5Éø夰¤é¤¤¤Ë¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤¬È¯À¸¤·¤Þ¤¹¡£ ¤À¤«¤é¡¢Ä̾ï¤ÎUSBÄÌ¿®¤Î³ä¤ê¹þ¤ß¤È¡¢¥»¥ì¥¯¥Æ¥£¥Ö¥µ¥¹¥Ú¥ó¥É¤Î³ä¤ê¹þ¤ß¤¬Èï¤ë¤³¤È¤Ï¡¢¤Þ¤ºÌµ¤¤¤Ç¤¹¡£ Íýͳ2¡£Ëü°ì¡¢Î¾¼Ô¤¬Èï¤Ã¤¿¤È¤·¤Æ¤â¡¢IDMA¤¬¹Ô¤¦'Read Interrupt Register'¤ÎÁàºî¤Ç¤Ï¡¢Ä̾ï¤ÎUSBÄÌ¿®¤Î³ä¤ê¹þ¤ß¤Ï¥¯¥ê¥¢¤µ¤ì¤Þ¤»¤ó¡£ Ä̾ï¤ÎUSBÄÌ¿®¤Î³ä¤ê¹þ¤ß¤ò¥¯¥ê¥¢¤¹¤ëÁàºî¤Ï¡¢'Read Interrupt Register'¤Ç¤Ï¤Ê¤¯¡¢'Read Endpoint Status'¤À¤«¤é¤Ç¤¹¡£ IDMA¤¬'Read Interrupt Register'¤ÎÁàºî¤ò¹Ô¤Ã¤Æ¤â¡¢Ä̾ï¤ÎUSBÄÌ¿®¤Î³ä¤ê¹þ¤ßÍ×°ø¤Ï¥¯¥ê¥¢¤µ¤ì¤º¡¢CPU¤ËÂФ¹¤ë³ä¤ê¹þ¤ßÍ×µá¤Ï»Ä¤ë¤«¤é¤Ç¤¹¡£ ¤È¤¤¤¦¤ï¤±¤Ç¡¢¤Þ¤À¸¡¾Ú¤¬½¼Ê¬¤Ç¤Ï¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢Â¿Ê¬Âç¾æÉפÀ¤È»×¤¤¤Þ¤¹¡£ ¢£ºÇ¸å¤Ë IDMA¤Ë¤Ä¤¤¤Æ¤Ï¡¢°ÊÁ°¤Ë¡ÖP/ECE¸¦µæ¼¼¡ÁS1C33ʬ¼¼ 2002ǯ1·î22Æü ¥¤¥ó¥Æ¥ê¥¸¥§¥ó¥ÈDMA¥³¥ó¥È¥í¡¼¥é¡×¤Ç¡¢»È¤¤Êý¤òÄ´¤Ù¤¿¤³¤È¤¬Í­¤ê¤Þ¤·¤¿¡£ http://www.piece-me.org/piece-lab/s1c33/20020122.html ¤·¤«¤·¤½¤Î¸å¡¢¤Ê¤«¤Ê¤«¡¢IDMA¤òÍ­¸ú¤ËÍøÍѤǤ­¤ë¾ìÌ̤¬Ìµ¤¯¡¢¤³¤ì¤Þ¤Ç¥¢¥×¥ê¤ÇIDMA¤òÍøÍѤ·¤¿¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£ P/ECE¥«¡¼¥Í¥ë¤â¡¢IDMA¤òÍøÍѤ·¤Æ¤ª¤é¤º¡¢P/ECE¤Ë¤ª¤¤¤Æ¤Ï¡¢IDMA¤ÏÁ´¤¯¤Î̵Â̵¡Ç½¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Þ¤·¤¿¡£ º£²ó¡¢IDMA¤ÎÍ­¸ú¤ÊÍøÍÑÊýË¡¤¬¸«¤Ä¤«¤Ã¤Æ¡¢¤·¤«¤â¡¢IDMA¤Î¥ê¥ó¥¯µ¡Ç½¤â»È¤¦¤³¤È¤¬¤Ç¤­¤Æ¡¢Îɤ«¤Ã¤¿¤Ç¤¹¡£ º£²óÄ´ºº¤·¤¿ÌäÂê¤ÈÂкö¤Î¡¢¥¿¥¤¥ß¥ó¥°¿Þ¤òºîÀ®¤·¤Þ¤·¤¿¡£¥À¥¦¥ó¥í¡¼¥É¤Ï¤³¤Á¤é¤Ç¤¹: xls·Á¼°: http://www.piece-me.org/piece-lab/usbsus/usbsus-timing.xls png·Á¼°: http://www.piece-me.org/piece-lab/usbsus/usbsus-timing.png º£²ó»ÈÍѤ·¤¿¸¡¾Ú¥¢¥×¥ê°ì¼°¤Î¡¢¥À¥¦¥ó¥í¡¼¥É¤Ï¤³¤Á¤é¤Ç¤¹: http://www.piece-me.org/piece-lab/usbsus/usbsus-src.zip