,{c W},{BGCOLOR:ffffff} ,{c WC},{BGCOLOR:ffffff|CENTER} // %Âè1ÈÇÂè15ºþ P.73-82 // !!!4¾Ï ¥Þ¥·¥ó¸ì¤È¤Î¥ê¥ó¥¯ ¡¡¤³¤ì¤Þ¤ÇÀâÌÀ¤·¤¿¤è¤¦¤Ë¡¢MSX BASIC ver2.0¤Ï¶¯ÎϤʵ¡Ç½¤òÈ÷¤¨¤Æ¤¤¤Þ¤¹¤¬¡¢¤µ¤é¤Ë¼Â¹Ô®ÅÙ¤ò¾å¤²¤¿¤¤¡¢¤¢¤ë¤¤¤ÏMSX2¤Î¥Ï¡¼¥É¥¦¥§¥¢µ¡Ç½¤ò¤È¤³¤È¤ó¤Þ¤Ç°ú¤­½Ð¤·¤¿¤¤¤È»×¤Ã¤¿¤é¡¢¤ä¤Ï¤ê¤É¤¦¤·¤Æ¤â¿¾¯¤Î¥Þ¥·¥ó¸ì¤Ï»ÈÍѤ»¤¶¤ë¤òÆÀ¤Þ¤»¤ó¡£ËܾϤǤϡ¢¤½¤ÎɬÍפ¬À¸¤¸¤¿»þ¤Î¤¿¤á¤Ë¡¢BASIC¤«¤é¥Þ¥·¥ó¸ì¥×¥í¥°¥é¥à¤ò¸Æ¤Ó½Ð¤¹ÊýË¡¡¢¤ª¤è¤Ó¤½¤ÎºÝ¤ËÃΤäƤª¤¯¤Ù¤­¤¤¤¯¤Ä¤«¤Î¾ðÊó¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£ !!4.1¡¡USR´Ø¿ô ¡¡BASIC¤«¤é¤Î¥Þ¥·¥ó¸ì¤Î¸Æ¤Ó½Ð¤·¤Ï¡¢°Ê²¼¤Î¼ê½ç¤Ç¹Ô¤¤¤Þ¤¹¡£USR´Ø¿ô¤Î¥«¥Ã¥³¤ÎÃæ¤Ï¡¢°ú¿ô¤È¤·¤Æ¥Þ¥·¥ó¸ì¤ËÃͤòÅϤ¹¤¿¤á¤ËÍѤ¤¤é¤ì¤Þ¤¹¡£°ú¿ô¤Ï¿ô¼°¡¢Ê¸»ú¼°¤Î¤¤¤º¤ì¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ ¡¡¡¡­¡ DEF USRʸ¤Ç¡¢¥Þ¥·¥ó¸ì¥×¥í¥°¥é¥à¤Î¼Â¹Ô³«»Ï¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ë¡£ ¡¡¡¡­¢ USR´Ø¿ô¤Ç¥Þ¥·¥ó¸ì¤ò¸Æ¤Ó½Ð¤¹¡£ ¡¡¡¡­£ ¥Þ¥·¥ó¸ì¤«¤éBASIC¤ËÌá¤ë¾ì¹ç¤Ï¡¢RETÌ¿Îá(C9H)¤ò¼Â¹Ô¤¹¤ë¡£ Îã)¡¡C000ÈÖÃϤ¬¼Â¹Ô¥¢¥É¥ì¥¹¤Ç¤¢¤ë¥Þ¥·¥ó¸ì¥×¥í¥°¥é¥à¤ò¸Æ¤Ó½Ð¤¹¡£ DEF USR=&HC000 A=USR(0) !!4.2¡¡USR´Ø¿ô¤Î°ú¿ô¤ÈÌá¤êÃͤˤè¤ë¥Ç¡¼¥¿¤Î¼õ¤±ÅϤ· ¡¡BASIC¤«¤é¥Þ¥·¥ó¸ì¤Ë°ú¿ô¤òÅϤ¹¾ì¹ç¡¢¥Þ¥·¥ó¸ì¦¤Ç¤Ï¥ì¥¸¥¹¥¿A¤ÎÆâÍƤǤ½¤Î·¿¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹(ɽ2.23)¡£ÌÜŪ¤ÎÃͤϰú¿ô¤Î·¿¤Ë¤è¤ê¿Þ2.13¤Î¤è¤¦¤Ê·Á¼°¤Ç³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¤«¤é¡¢¤½¤ì¤Ë±þ¤¸¤ÆÃͤò¼õ¤±¼è¤ê¤Þ¤¹¡£Îã¤È¤·¤Æ¡¢Ê¸»úÎ󷿤ΰú¿ô¤ò¼õ¤±¼è¤ë¥×¥í¥°¥é¥à¤ò¥ê¥¹¥È2.1¤Ë¼¨¤·¤Þ¤¹¡£ ,{t},{CENTER} ,{c},{WC|SIZE:80},{W|SIZE:120} ,, ,2,2¥Ð¥¤¥ÈÀ°¿ô·¿ ,3,ʸ»úÎó·¿ ,4,ñÀºÅټ¿ô·¿ ,8,ÇÜÀºÅټ¿ô·¿ {{div_begin style='text-align:center;'}} '''ɽ2.23¡¡¥ì¥¸¥¹¥¿A¤ËÂåÆþ¤µ¤ì¤ë°ú¿ô¤Î·¿''' {{div_end}} {{div_begin style='text-align:center;'}} {{svg ¿Þ2.13.svg,,size:620x300}} '''¿Þ2.13¡¡°ú¿ô¤Ë¤è¤ëÃͤΤ錄¤µ¤ìÊý''' {{div_end}} {{div_begin style='text-align:right;'}} '''¥ê¥¹¥È2.1¡¡Ê¸»ú·¿¤Î°ú¿ô¤Î»ÈÍÑÎã''' {{div_end}} ;============================================================ ; List 2.1 print string with USR function ; to use, do DEF USR=&HB000 : A$=USR("STRING") ;============================================================ ; CHPUT EQU 00A2H ;character output ORG 0B000H RDARG: CP 3 RET NZ ;parameter is not string PUSH DE POP IX ;IX := string descriptor LD A,(IX+0) ;get string length LD L,(IX+1) ;get string pointer(low) LD H,(IX+2) ;get string pointer(high) OR A RET Z ;if length=0 RD1: PUSH AF LD A,(HL) ;get a character CALL CHPUT ;put a character POP AF DEC A RET Z INC HL JR RD1 END ¡¡µÕ¤Ë¡¢°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤¿¤³¤ì¤é¤ÎÃͤò¥Þ¥·¥ó¸ì¤ÎÃæ¤Ç½ñ¤­´¹¤¨¤ë¤³¤È¤Ë¤è¤Ã¤ÆUSR´Ø¿ô¤ÎÃͤȤ·¤ÆBASIC¤Ë°ú¤­ÅϤ¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤Î¾ì¹ç¡¢VALTYP(F663H)¤òÊѹ¹¤¹¤ë¤³¤È¤Ë¤è¤êÌá¤êÃͤòBASIC¤«¤é¤Î°ú¿ô¤Î·¿°Ê³°¤Î¤â¤Î¤ËÊѹ¹¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£¤¿¤À¤·¡¢Ê¸»úÎ󷿤ξì¹ç¡¢Ê¸»ú¿ô¤òÊѤ¨¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ !!4.3¡¡Ì¿Îá¤ÎÁýÀß ¡¡MSX¤Ç¤Ï¸½ºß¡ÈCMD¡É¤È¡ÈIPL¡É¤È¤¤¤¦Í½Ìó¸ì¤¬Ì¤»ÈÍѤˤʤäƤª¤ê¡¢¤³¤ÎͽÌó¸ì¤Î¥Õ¥Ã¥¯(¤½¤ì¤¾¤ìFE0DH,FE03H)¤ò¼«Ê¬¤ÇºîÀ®¤·¤¿Ç¤°Õ¤Î¥Þ¥·¥ó¸ì¥ë¡¼¥Á¥ó¤Ë¥¸¥ã¥ó¥×¤¹¤ë¤è¤¦½ñ¤­´¹¤¨¤ë¤À¤±¤Ç¡¢¿·¤·¤¤Ì¿Îá¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£´Êñ¤ÊÎã¤ò¥ê¥¹¥È2.2¤Ë¼¨¤·¤Þ¤¹¡£ {{div_begin style='text-align:right;'}} '''¥ê¥¹¥È2.2¡¡CMDÌ¿Îá¤ÎÁýÀß''' {{div_end}} ;================================================================= ; List 2.2 make CMD command ( turn on/off the CAPS LOCK ) ; to initialize command: DEF USR=&HB000 : A=USR(0) ; to use command: CMD ;================================================================= ; CHGCAP EQU 0132H ;CAPS LAMP on/off CAPST EQU 0FCABH ;CAPS LOCK status HCMD EQU 0FE0DH ;CMD HOOK ORG 0BOOOH ;----- CMD initialize ----- ¤³¤ÎÉôʬ¤ò¼Â¹Ô¤¹¤ë¤ÈCMD¥³¥Þ¥ó¥É¤¬ÁýÀߤµ¤ì¤ë LD BC,5 ;NEW HOOK SET LD DE,HCMD LD HL,HDAT LDIR RET ;----- new HOOK data ----- ¥Õ¥Ã¥¯(FE0DH)¤Ë½ñ¤­¹þ¤à5¥Ð¥¤¥È¥Ç¡¼¥¿ HDAT: POP AF JP CAPKEY NOP ;----- executed by CMD ----- CMD¥³¥Þ¥ó¥É¤Î¼ÂÂÎ CAPKEY: CALL CHGCAP LD A,(CAPST) CPL LD (CAPST),A RET END ¡¡¥Õ¥Ã¥¯¤Ë½ñ¤­¹þ¤àºÇ½é¤Î¡ÈPOP AF¡É¤Ï¡¢¤³¤Î¾ì¹ç¡ÈCMD¡É¤Î¼Â¹Ô¤Î»þ¤Ë¥¹¥¿¥Ã¥¯¤ËÀѤޤì¤ë¥¨¥é¡¼½èÍý¥¢¥É¥ì¥¹¤ò¼Î¤Æ¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£¤³¤ì¤òÆþ¤ì¤Æ¤ª¤«¤Ê¤¤¤È¡¢¡ÈRETÌ¿Îá¡É¤ÇBASIC¤ËÌá¤ë¤Ï¤º¤¬¥¨¥é¡¼½èÍý¥ë¡¼¥Á¥ó¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¥æ¡¼¥¶¡¼¥ë¡¼¥Á¥óÆâ¤Ç¥¨¥é¡¼¤ò½Ð¤·¤¿¤¤¾ì¹ç¤Ï¤³¤Î¥¢¥É¥ì¥¹¤ò¼è¤Ã¤Æ¤ª¤¯¤Î¤â1¤Ä¤ÎÊýË¡¤Ç¤¹¡£ ¡¡¤Ê¤ª¡¢¤³¤ì¤é¤Î¥Õ¥Ã¥¯¤ÏËÜÍè¤Ï¾­Íè¤Î³ÈÄ¥ÍѤ˥ꥶ¡¼¥Ö¤·¤Æ¤¢¤ë¾ì½ê¤Ê¤Î¤Ç¡¢¾¦ÍѤΥ¢¥×¥ê¥±¡¼¥·¥ç¥ó¡¦¥×¥í¥°¥é¥à¤Ç»ÈÍѤ·¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£ !!4.4¡¡CMDÌ¿Îá¤Î³ÈÄ¥ ¡¡¤è¤êÊ£»¨¤Ê¥¹¥Æ¡¼¥È¥á¥ó¥È¤Î³ÈÄ¥¤ò¹Ô¤¦¤Ë¤Ï¡¢CMDÌ¿Îá¤Ë¤â°ú¿ô¤òÅϤ»¤ë¤ÈÊØÍø¤Ç¤¹¡£¥Þ¥·¥ó¸ì¤ò¸Æ¤Ó½Ð¤·¤¿¸å¡¢HL¥ì¥¸¥¹¥¿¤¬BASIC¥Æ¥­¥¹¥ÈÃæ¤Î¡ÈCMD¡É¤Î¼¡¤Î°ÌÃÖ¤ò»Ø¤·¤Æ¤¤¤Þ¤¹¤«¤é¡¢¤³¤ì¤òÍøÍѤ·¤Æ¸å¤Ë³¤¯Ê¸»úÎó¤Îɾ²Á¤ò¹Ô¤¨¤ÐÌÜŪ¤Ï²Ì¤¿¤»¤Þ¤¹¡£¤³¤ì¤é¤ò¹Ô¤¦¤¿¤á¤ËÍ­¸ú¤È»×¤ï¤ì¤ëÆâÉô¥ë¡¼¥Á¥ó¤ò¡¢°Ê²¼¤Ë¼¨¤·¤Þ¤¹¡£ '''¡ü CHRGTR(4666H/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡Ä¥Æ¥­¥¹¥È¤«¤é1ʸ»ú¼è¤ê½Ð¤¹(¿Þ2.14)¡£ ÆþÎÏ:HL¢«¥Æ¥­¥¹¥È¤ò»Ø¤¹¥¢¥É¥ì¥¹ ½ÐÎÏ:HL¢«¼è¤ê½Ð¤·¤¿Ê¸»ú¤Î¥¢¥É¥ì¥¹ ¡¡¡¡A¢«¼è¤ê½Ð¤·¤¿Ê¸»ú ¡¡¡¡Z¥Õ¥é¥°¢«Ê¸Ëö(:¤Þ¤¿¤Ï00H)¤Ê¤é¤ÐON ¡¡¡¡CZ¥Õ¥é¥°¢«0¡Á9¤Ê¤é¤ÐON µ¡Ç½:(HL+1)¤Î¾ì½ê¤Î¥Æ¥­¥¹¥È¤«¤é1ʸ»ú¼è¤ê½Ð¤¹¡£¥¹¥Ú¡¼¥¹¤Ï¥¹¥­¥Ã¥×¤µ¤ì¤ë¡£ '''¡ü FRMEVL(4C64H/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡Ä¥Æ¥­¥¹¥ÈÃæ¤Î¼°¤òɾ²Á¤¹¤ë(¿Þ2.15)¡£ ÆþÎÏ:HL¢«¥Æ¥­¥¹¥ÈÃæ¤Î¼°¤ÎÀèƬ¥¢¥É¥ì¥¹ ½ÐÎÏ:HL¢«¼°¤Î¼¡¤Î¥¢¥É¥ì¥¹ ¡¡¡¡[VALTYP(F663H)]¢«·¿¤Ë±þ¤¸¤Æ2,3,4,8¤ÎÃͤ¬Æþ¤ë¡£ ¡¡¡¡[DAC(F7F6H)]¢«¼°¤Îɾ²Á·ë²Ì µ¡Ç½:¼°¤òɾ²Á¤·¡¢·¿¤Ë±þ¤¸¤Æ½ÐÎϤ¹¤ë¡£ '''¡ü FRMQNT(542FH/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡Ä¼°¤ò2¥Ð¥¤¥ÈÀ°¿ô·¿¤Çɾ²Á¤¹¤ë¡£ ÆþÎÏ:HL¢«¥Æ¥­¥¹¥ÈÃæ¤Î¼°¤ÎÀèƬ¥¢¥É¥ì¥¹ ½ÐÎÏ:HL¢«¼°¤Î¼¡¤Î¥¢¥É¥ì¥¹ ¡¡¡¡DE¢«¼°¤Îɾ²Á·ë²Ì µ¡Ç½:¼°¤òɾ²Á¤·¡¢À°¿ô·¿(INT)¤Ç½ÐÎϤ¹¤ë¡£·ë²Ì¤¬2¥Ð¥¤¥ÈÀ°¿ô·¿¤ÎÈϰϤËǼ¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¤Ï¡ÈOverflow¡É¥¨¥é¡¼¤òȯÀ¸¤·¡¢BASIC¥³¥Þ¥ó¥É¥ì¥Ù¥ë¤ËÌá¤ë¡£ {{div_begin style='text-align:center;'}} {{svg ¿Þ2.14.svg,,size:630x590}} '''¿Þ2.14¡¡CHRGTR¤ÎÆþ½ÐÎϾõÂÖ''' {{div_end}} {{div_begin style='text-align:center;'}} {{svg ¿Þ2.15.svg,,size:630x370}} '''¿Þ2.15¡¡FRMEVL¤ÎÆþ½ÐÎϾõÂÖ''' {{div_end}} '''¡ü GETBYT(521CH/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡Ä¼°¤ò1¥Ð¥¤¥ÈÀ°¿ô·¿¤Çɾ²Á¤¹¤ë¡£ ÆþÎÏ:HL¢«¥Æ¥­¥¹¥ÈÃæ¤Î¼°¤ÎÀèƬ¥¢¥É¥ì¥¹ ½ÐÎÏ:HL¢«¼°¤Î¼¡¤Î¥¢¥É¥ì¥¹ ¡¡¡¡A,E¢«¼°¤Îɾ²Á·ë²Ì(A¤ÈE¤Ë¤ÏƱ¤¸Ãͤ¬¤Ï¤¤¤ë) µ¡Ç½:¼°¤òɾ²Á¤·¡¢1¥Ð¥¤¥È·¿¤Ç½ÐÎϤ¹¤ë¡£·ë²Ì¤¬1¥Ð¥¤¥ÈÀ°¿ô·¿¤ÎÈϰϤ˼ý¤Þ¤é¤Ê¤¤¾ì¹ç¤Ë¤Ï¡ÈIllegal function call¡É¥¨¥é¡¼¤òȯÀ¸¤·¡¢BASIC¥³¥Þ¥ó¥É¥ì¥Ù¥ë¤ËÌá¤ë¡£ '''¡ü FRESTR(67D0H/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡Äʸ»úÎó¤òÅÐÏ¿¤¹¤ë¡£ ÆþÎÏ:[VALTYP(F663H)]¢«·¿(ʸ»úÎó¤Ç¤Ê¤¤¤È¥¨¥é¡¼¤Ë¤Ê¤ë) ¡¡¡¡[DAC(F7F6H)]¢«¥¹¥È¥ê¥ó¥°¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿ ½ÐÎÏ:HL¢«¥¹¥È¥ê¥ó¥°¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿ µ¡Ç½:FRMEVL¤ÇÆÀ¤¿Ê¸»úÎ󷿤ηë²Ì¤òʸ»úÎóÎΰè¤ËÅÐÏ¿¤·¡¢¤½¤Î¥¹¥È¥ê¥ó¥°¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÆÀ¤ë¡£Ê¸»úÎó¤òɾ²Á¤·¤¿¾ì¹ç¤ÏÁ°µ­¤ÎFRMEVL¤ÈÁȤ߹ç¤ï¤»¤Æ°Ê²¼¤Î¤è¤¦¤Ë»ÈÍѤ¹¤ë¤Î¤¬°ìÈÌŪ¤Ç¤¢¤ë¡£ ¡¡¡§ CALL FRMEVL PUSH HL ;¥Æ¥­¥¹¥È¥Ý¥¤¥ó¥¿¤ò¥»¡¼¥Ö¤¹¤ë CALL FRESTR EX DE,HL ;¥¹¥È¥ê¥ó¥°¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÆÀ¤ë POP HL LD A,(DE) ;ÆþÎϤµ¤ì¤¿Ê¸»úÎó¤ÎŤµ¤òÆÀ¤ë ¡¡¡§ '''¡ü PTRGET(5EA4H/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡ÄÊÑ¿ô¤Î³ÊǼ¥¢¥É¥ì¥¹¤òÆÀ¤ë(¿Þ2.16)¡£ ÆþÎÏ:HL¢«¥Æ¥­¥¹¥ÈÃæ¤ÎÊÑ¿ô̾¤ÎÀèƬ¥¢¥É¥ì¥¹ ¡¡¡¡[SUBFLG(F6A5H)]¢«0:ñ½ãÊÑ¿ô,0°Ê³°:ÇÛÎóÊÑ¿ô ½ÐÎÏ:HL¢«ÊÑ¿ô̾¤Î¼¡¤Î¥¢¥É¥ì¥¹ ¡¡¡¡DE¢«ÌÜŪ¤ÎÊÑ¿ô¤ÎÆâÍƤ¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¥¢¥É¥ì¥¹ µ¡Ç½:ÊÑ¿ô(¤Þ¤¿¤ÏÇÛÎóÊÑ¿ô)¤Î³ÊǼ¥¢¥É¥ì¥¹¤òÆÀ¤ë¡£ÌÜŪ¤ÎÊÑ¿ô¤ÎÎΰ褬³ÎÊݤµ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢Îΰè¤Î³ÎÊݤâ¹Ô¤ï¤ì¤ë¡£[SUBFLG]¤ÎÃͤò0°Ê³°¤ËÀßÄꤷ¤Æ¤ª¤¯¤È¡¢ÇÛÎó¤Î¸Ä¡¹¤ÎÍ×ÁǤǤϤʤ¯¡¢¤½¤ÎÇÛÎó¤ÎÀèƬ¥¢¥É¥ì¥¹¤¬ÆÀ¤é¤ì¤ë¡£ {{div_begin style='text-align:center;'}} {{svg ¿Þ2.16.svg,,size:480x900}} '''¿Þ2.16¡¡PTRGET¤ÎÆþ½ÐÎϾõÂÖ''' {{div_end}} '''¡ü NEWSTT(4601H/MAIN)'''¡Ä¡Ä¡Ä¡Ä¡ÄǤ°Õ¤Î¥Æ¥­¥¹¥È¤ò¼Â¹Ô¤¹¤ë¡£ ÆþÎÏ:HL¢«¼Â¹Ô¤¹¤ë¥Æ¥­¥¹¥È¤Î¥¢¥É¥ì¥¹ ½ÐÎÏ:¡½¡½ µ¡Ç½:¥Æ¥­¥¹¥È¤Î¼Â¹Ô¤ò¹Ô¤¦¡£¥Æ¥­¥¹¥È¤Ï¿Þ2.17¤Î¾õÂ֤ȤʤäƤ¤¤ëɬÍפ¬¤¢¤ë¡£ {{div_begin style='text-align:center;'}} {{svg ¿Þ2.17.svg,,size:250x140}} '''¿Þ2.17¡¡NEWSTT¤Î¤¿¤á¤Î¥á¥â¥êÀßÄê''' {{div_end}} ¡¡¤³¤ì¤é¤ÎÆâÉô¥ë¡¼¥Á¥ó¤Ï¡¢BASIC¥Æ¥­¥¹¥È¤òÂоݤȤ¹¤ë¤â¤Î¤Ç¤¢¤ë¤¿¤á¡¢¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤ÏBASIC¤ÈƱÍͤΥ¨¥é¡¼½èÍý¤¬¹Ô¤ï¤ì¤Þ¤¹¡£¤½¤Î¾ì¹ç¡¢¥Õ¥Ã¥¯H.ERRO(FFB1H)¤Î½ñ¤­´¹¤¨¤Ë¤è¤ê¡¢¥æ¡¼¥¶¡¼¤¬¥¨¥é¡¼½èÍý¤ò¹Ô¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹(E¥ì¥¸¥¹¥¿¤Ë¥¨¥é¡¼Èֹ椬Æþ¤ë)(¥ê¥¹¥È2.3)¡£ {{div_begin style='text-align:right;'}} '''¥ê¥¹¥È2.3¡¡¥¨¥é¡¼½èÍý¥ë¡¼¥Á¥ó¤ÎÊѹ¹''' {{div_end}} ;============================================================ ; List 2.3 Your own error ; To use, do DEF USR=&HB000 : A=USR(0) ;============================================================ ; HERR EQU 0FFB1H ;error hook SYNERR EQU 2 ;syntax err code CHPUT EQU 0A2H ;character output NEWSTT EQU 4601H ;run READYR EQU 409BH ORG 0B000H ;----- command initialize ----- ¤³¤ÎÉôʬ¤ò¼Â¹Ô¤¹¤ë¤È¥¨¥é¡¼½èÍý¥ë¡¼¥Á¥ó¤¬Êѹ¹¤µ¤ì¤ë LD BC,5 ;SET NEW HOOK LD DE,HERR LD HL,HDAT RET HDAT: JP ERROR NOP NOP ;----- error routine ----- ¥¨¥é¡¼½èÍý¥ë¡¼¥Á¥ó¤Î¼ÂÂÎ ERROR: LD A,E ;when in error, E holds error code CP SYNERR ;syntax error ? RET NZ :no LD HL,DATA1 ;yes LOOP: LD A,(HL) ;put new error message CP '$' JR Z,EXIT PUSH HL CALL CHPUT POP HL INC HL JR LOOP EXIT: JP READYR DATA1: DEFM 'Ž·Ž¬ŽÊŽ¯ ŽÏŽÁŽ¶ŽÞŽ²ŽÁŽ¬Ž¯ŽÀ' ;new error message DEFB 07H,07H,07H,'$' END !!4.5¡¡³ä¤ê¹þ¤ß»ÈÍÑË¡ ¡¡Z80CPU¤Ë¤ÏINT¤ÈNMI¤Î2¤Ä¤Î³ä¤ê¹þ¤ßü»Ò¤¬¤¢¤ê¤Þ¤¹¤¬¡¢MSX¤Ç»ÈÍѤ·¤Æ¤¤¤ë¤Î¤ÏINT¤Î¤ß¤Ç¤¹¡£INTü»Ò¤Ë¤Ï60[Hz]¤Î¿®¹æ¤¬ÆþÎϤµ¤ì¤Æ¤ª¤ê¡¢1ÉäË60²ó¤Î¥¿¥¤¥Þ³ä¤ê¹þ¤ß¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£Z80¤Î³ä¤ê¹þ¤ß¥â¡¼¥É¤¬1¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤¿¤á¡¢³ä¤ê¹þ¤ß¤¬¤«¤«¤ë¤È38HÈÖÃϤ¬¥³¡¼¥ë¤µ¤ì¡¢¤½¤³¤«¤é¥¿¥¤¥Þ³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤Ø¥¸¥ã¥ó¥×¤·¡¢¥­¡¼ÆþÎϤò¤Ï¤¸¤á¤È¤¹¤ë¼ï¡¹¤Î½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£ ¡¡¤³¤Î¥¿¥¤¥Þ³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤Ï¡¢ÅÓÃæ¤Ç¥Õ¥Ã¥¯H.TIMI(FD9FH)¤Ë¥¸¥ã¥ó¥×¤·¤Þ¤¹¡£¤³¤Î¥Õ¥Ã¥¯¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¤³¤Î¥¿¥¤¥Þ³ä¤ê¹þ¤ß¥ë¡¼¥Á¥ó¤ËǤ°Õ¤Îµ¡Ç½¤òÄɲ乤뤳¤È¤¬²Äǽ¤Ç¤¹¡£¤³¤³¤ÇÃí°Õ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Î¤Ï¡¢Ä̾盧¤³¤Ë¤ÏRETÌ¿Î᤬½ñ¤«¤ì¤Æ¤¤¤ë¤À¤±¤Ç¤¹¤¬¡¢¥Ç¥£¥¹¥¯¤Ê¤É¤Î¼þÊÕµ¡´ï¤¬Àܳ¤µ¤ì¤Æ¤¤¤Æ¡¢¤¹¤Ç¤Ë¤³¤Î¥Õ¥Ã¥¯¤¬»ÈÍÑÃæ¤Î»þ¤Ç¤¹¡£¤³¤Î¾ì¹ç¡¢ÃΤ餺¤Ë½ñ¤­´¹¤¨¤ë¤È¤½¤ì¤é¼þÊÕµ¡´ï¤¬°Ê¸å»ÈÍÑÉÔǽ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¤É¤Î¥Þ¥·¥ó¤Ç¤âÀµ¾ï¤Ë¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¤¢¤é¤«¤¸¤á¤½¤ì¤ËÂФ¹¤ë½èÍý¤ò¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£³ä¤ê¹þ¤ß¤Î»ÈÍÑÎã¤È¤È¤â¤Ë¤³¤ì¤é¤ÎÂнè¤Î°ìÎã¤ò¥ê¥¹¥È2.4¤Ë¼¨¤·¤Þ¤¹¡£ {{div_begin style='text-align:right;'}} '''¥ê¥¹¥È2.4¡¡¥¿¥¤¥Þ³ä¤ê¹þ¤ß¥Õ¥Ã¥¯¤ÎÀµ¤·¤¤»ÈÍÑË¡''' {{div_end}} ;============================================================ ; List 2.4 How to use HOOK safely ; This routine uses TIMER INTERRUPT HOOK ; and turn on/off CAPS LOCK ; To start, do DEF USR=&HB000 : A=USR(0) ; To end, do DEF USR=&HB030 : A=USR(1) ;============================================================ ; CHGCAP EQU 0132H ;CAP LAMP on/off CAPST EQU 0FCABH ;CAP LOCK status TIMI EQU 0FD9FH ;timer interrupt HOOK JPCODE EQU 0C3H TIMER EQU 020H ORG 0B000H ;----- interrupt on ----- ¥Õ¥Ã¥¯½ñ¤­´¹¤¨»þ¤Ë¤Ï°ÊÁ°¤Î¥Õ¥Ã¥¯¤òÊݸ¤¹¤ë INTON: DI LD HL,TIMI ;OLD HOOK SAVE LD DE,HKSAVE LD BC,5 LDIR LD A,JPCODE ;NEW HOOK SET LD (TIMI),A LD HL,INT LD (TIMI+1),HL EI RET ORG 0B030H ;----- interrupt off ----- Êݸ¤·¤Æ¤ª¤¤¤¿¥Õ¥Ã¥¯¤ò¸µ¤ËÌᤷ¤Æ½ªÎ»¤¹¤ë INTOFF: DI LD HL,HKSAVE ;RECOVER HOOK LD DE,TIMI LD BC,5 LDIR EI RET ;----- interrupt routine ----- INT: PUSH AF LD A,(CAPST) OR A JR Z,CAPON CAPOFF: LD A,(COUNT1) DEC A LD (COUNT1),A JR NZ,FIN LD A,TIMER LD (COUNT1),A XOR A LD (CAPST),A LD A,0FFH CALL CHGCAP JR FIN CAPON: LD A,(COUNT2) DEC A LD (COUNT2),A JR NZ,FIN LD A,TIMER LD (COUNT2),A LD A,0FFH LD (CAPST),A XOR A CALL CHGCAP FIN: POP AF CALL HKSAVE ;old HOOK call RET COUNT1: DEFB TIMER COUNT2: DEFB TIMER HKSAVE: NOP ;old HOOK save area NOP NOP NOP RET END