¡¡1¾Ï¤Ç¤âÀâÌÀ¤·¤¿¤è¤¦¤Ë¡¢MSX¤Î»ÈÍѤ·¤Æ¤¤¤ëPSG¤Ï¡¢²»À¼½ÐÎϤε¡Ç½¤È¤ÏÊ̤˥ݡ¼¥ÈA¤È¥Ý¡¼¥ÈB¤È¤¤¤¦2¤Ä¤Î8¥Ô¥Ã¥ÈÆþ½ÐÎϥݡ¼¥È¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£MSX¤Ï¤³¤Î2¤Ä¤Î¥Ý¡¼¥È¤òÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹(¤¤¤ï¤æ¤ë¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¥Ý¡¼¥È)¤ËÀܳ¤·¤Æ¡¢¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤ä¥Ñ¥É¥ë¤Ê¤É¤ÎÁõÃ֤ȤΥǡ¼¥¿Æþ½ÐÎϤËÍøÍѤ·¤Æ¤¤¤Þ¤¹(¿Þ5.21)¡£¤³¤ÎÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ËÀܳ¤µ¤ì¤ë³Æ¼ï¤ÎÁõÃ֤ϡ¢¤½¤ì¤¾¤ìÀìÍѤÎBIOS¥ë¡¼¥Á¥ó¤¬ROMÆâ¤ËÍѰդµ¤ì¤Æ¤ª¤ê¡¢¼ê·Ú¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¡¡ËܾϤǤϡ¢³ÆÆþ½ÐÎÏÁõÃ֤ε¡Ç½¤ÈBIOS¥ë¡¼¥Á¥ó¤Ë¤è¤ë¥¢¥¯¥»¥¹Ë¡¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£
5.1¡¡¥Ý¡¼¥È¤Îµ¡Ç½
¡¡PSG¤Î2¤Ä¤ÎÆþ½ÐÎϥݡ¼¥È¤Ï¡¢¿Þ5.22¤Î¤è¤¦¤ËÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
5.2¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î»ÈÍÑË¡
¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î²óÏ©¤ò¿Þ5.23¤Ë¼¨¤·¤Þ¤¹¡£¤³¤Î²óÏ©¤«¤é¤ï¤«¤ë¤è¤¦¤Ë¡¢¨ÈÖü»Ò¤Ë¡È0¡É¤ò½ÐÎϤ·¡¢¡¡Á¤¡¢¦¡Á§¤Îü»Ò¤òÆÉ¤ß½Ð¤»¤Ð¡¢¥¹¥Æ¥£¥Ã¥¯¤È¥È¥ê¥¬¥Ü¥¿¥ó¤Î¾ðÊó¤ÏÆÀ¤é¤ì¤Þ¤¹¤¬¡¢¥×¥í¥°¥é¥à¤Î°Ü¿¢À¤Ê¤É¤ò¹Íθ¤¹¤ë¤È¡¢¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î¥¢¥¯¥»¥¹¤Ï¤ä¤Ï¤êBIOS¤òÍøÍѤ·¤Æ¹Ô¤¦Êý¤¬ÌµÆñ¤Ç¤·¤ç¤¦¡£
¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤ò¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë¤Ï¡¢°Ê²¼¤Ë¼¨¤¹BIOS¥ë¡¼¥Á¥ó¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ê¤ª¡¢¤³¤ì¤é¤Î¥ë¡¼¥Á¥ó¤ÏBASIC¤ÎSTICK´Ø¿ô¤äSTRIG´Ø¿ô¤È¤Û¤ÜÅù¤·¤¤µ¡Ç½¤ò»ý¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¡¢¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯°Ê³°¤Ë¥«¡¼¥½¥ë¥¡¼¤ä¥¹¥Ú¡¼¥¹¥Ð¡¼¤Î¾õÂÖ¤ò¥ê¥¢¥ë¥¿¥¤¥à¤ÇÆÉ¤ß¼è¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
¡üGTSTCK(00D5H/MAIN)¡Ä¡Ä¡Ä¡Ä¡Ä¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤ÎÆÉ¤ß½Ð¤·
ÆþÎÏ:A¢«¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯ÈÖ¹æ(0=¥«¡¼¥½¥ë¥¡¼¡¢1¡Á2=¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯)
½ÐÎÏ:A¢«¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Þ¤¿¤Ï¥«¡¼¥½¥ë¥¡¼¤Î²¡¤µ¤ì¤¿Êý¸þ
µ¡Ç½:¸½ºß¤Î¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Þ¤¿¤Ï¥«¡¼¥½¥ë¥¡¼¤Î¾õÂÖ¤òA¥ì¥¸¥¹¥¿¤ËÊÖ¤¹¡£ÃͤÏBASIC¤ÎSTICK´Ø¿ô¤ÈƱ¤¸¤Ç¤¢¤ë¡£
¡üGTTRIG(00D8H/MAIN)¡Ä¡Ä¡Ä¡Ä¡Ä¥È¥ê¥¬¥Ü¥¿¥ó¤ÎÆÉ¤ß½Ð¤·
ÆþÎÏ:A¢«¥È¥ê¥¬¥Ü¥¿¥óÈÖ¹æ(0=¥¹¥Ú¡¼¥¹¥Ð¡¼¡¢1¡Á2=¥È¥ê¥¬¥Ü¥¿¥ó)
½ÐÎÏ:A¢«¥È¥ê¥¬¡¦¥Ü¥¿¥ó¤Þ¤¿¤Ï¥¹¥Ú¡¼¥¹¥Ð¡¼¤Î¾õÂÖ(²¡¤¹=OFFH¡¢Î¥¤¹=OOH)
µ¡Ç½:¸½ºß¤Î¥È¥ê¥¬¥Ü¥¿¥ó¡¢¤Þ¤¿¤Ï¥¹¥Ú¡¼¥¹¥Ð¡¼¤Î¾õÂÖ¤òA¥ì¥¸¥¹¥¿¤ËÊÖ¤¹¡£¤³¤ÎÃͤϥȥꥬ¤¬²¡¤µ¤ì¤Æ¤¤¤ì¤Ð0FFH¡¢²¡¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð0¤È¤Ê¤ë¡£
¥ê¥¹¥È5.7¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î»ÈÍÑË¡
;============================================================ ; ; List 5.7 Joystick and trigger access ; ;============================================================ ; CHPUT EQU 00A2H BREAKX EQU 00B7H GTSTCK EQU 00D5H GTTRIG EQU 00D8H ORG 0D000H ;-------- program start -------- ¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î¾õÂÖ¤òɽ¼¨¤¹¤ë STICK: LD A,1 ;choose joystick 1 CALL GTSTCK ;read joystick status. LD (WK1),A LD A,1 ;choose joystick 1 CALL GTTRIG ;read trigger status OR A JR Z,STCK1 LD HL,WDON ;trigger ON JR STCK2 STCK1: LD HL,WDOFF ;trigger OFF STCK2: CALL PUTSTR LD A,(WK1) OR A JR Z,BRKCH0 ;no use joystick LD C,0 STCK3: DEC A JR Z,STCK4 INC C JR STCK3 STCK4: SLA C ;C := C*16 SLA C SLA C SLA C LD B,0 ;Accounting Strings data address. LD HL,WDSTK ADD HL,BC CALL PUTSTR LD A,0DH ;put carriage return CALL CHPUT ;code := 0DH CALL BREAKX ;break check RET C JR STICK ;----- put strings to screen ----- PUTSTR: LD A,(HL) CP '$' RET Z INC HL CALL CHPUT JR PUTSTR ;----- string data ----- WDON: DB 'Trtgger ON: $' WDOFF: DB 'Trigger OFF: $' WDSTK: DB 'UP only ',0DH,0AH,'$' DB 'Up and Right ',0DH,0AH,'$' DB 'Right only ',0DH,0AH,'$' DB 'Right & Down ',0DH,0AH,'$' DB 'Down only ',0DH,0AH,'$' DB 'Dovn and Left',0DH,0AH,'$' DB 'Left only ',0DH,0AH,'$' DB 'Left and Up ',0DH,0AH,'$' WK1: DW 0 END
5.3¡¡¥Ñ¥É¥ë¤Î»ÈÍÑË¡
¡¡¥Ñ¥É¥ë¤Î²óÏ©¤Ï¿Þ5.24¤Î¤È¤ª¤ê¤Ç¤¹¡£¨Ã¼»Ò¤Ë¥Ñ¥ë¥¹¤òÁ÷¤ë¤Èñ°ÂÄê¥Þ¥ë¥Á¥Ð¥¤¥Ö¥ì¡¼¥¿¤Ï¡¢¤¢¤ë»þ´ÖÉý¤Î¥Ñ¥ë¥¹¤òȯÀ¸¤·¤Þ¤¹¡£¤³¤ÎÉý¤Ï²ÄÊÑÄñ¹³¤ÎÃͤˤè¤Ã¤Æ10¦Ìs¡Á3ms¤ÎÈϰϤÇÊѲ½¤·¤Þ¤¹¤Î¤Ç¡¢¥Ñ¥ë¥¹Ä¹¤ò¬Äꤹ¤ì¤Ð²ÄÊÑÄñ¹³¤ÎÃÍ¡¢¤Ò¤¤¤Æ¤Ï¤½¤Î²óž³Ñ¤òÃΤ뤳¤È¤¬¤Ç¤¤Þ¤¹¡£
¥Ñ¥É¥ë¤ò¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤ÎBIOS¥ë¡¼¥Á¥ó¤ò¼¡¤Ë¼¨¤·¤Þ¤¹¡£
¡üGTPDL(00DEH/MAIN)¡Ä¡Ä¡Ä¡Ä¡Ä¥Ñ¥É¥ë¾ðÊó¤ÎÆÉ¤ß½Ð¤·
ÆþÎÏ:A¢«¥Ñ¥É¥ëÈÖ¹æ(1¡Á12)
½ÐÎÏ:A¢«¥Ñ¥É¥ë¤Î²óž³Ñ(O¡Á255)
µ¡Ç½:A¥ì¥¸¥¹¥¿¤Ç»ØÄꤷ¤¿¥Ñ¥É¥ë¤Î¾õÂÖ¤òÄ´¤Ù¡¢·ë²Ì¤òA¥ì¥¸¥¹¥¿¤ËÊÖ¤¹¡£
5.4¡¡¥¿¥Ã¥Á¥Ñ¥Í¥ë¡¢¥é¥¤¥È¥Ú¥ó¡¢¥Þ¥¦¥¹¡¢¥È¥é¥Ã¥¯¥Ý¡¼¥ë¤Î»ÈÍÑË¡
¡¡¥¿¥Ã¥Á¥Ñ¥Í¥ë¡¢¥é¥¤¥È¥Ú¥ó¡¢¥Þ¥¦¥¹¡¢¥È¥é¥Ã¥¯¥Ü¡¼¥ë(¥¥ã¥Ã¥È)¤Ï¤¹¤Ù¤ÆÆ±°ì¤ÎBIOS¤òÍѤ¤¤Æ¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£¤½¤Î»È¤¤Êý¤ò°Ê²¼¤ËÀâÌÀ¤·¤Þ¤¹¡£
¡üGTPAD(00DBH/MAIN)¡Ä¡Ä¡Ä¡Ä¡Ä³Æ¼ïÆþ½ÐÎÏÁõÃ֤Υ¢¥¯¥»¥¹
ÆþÎÏ:A¢«ÁõÃÖID(0¡Á19)
½ÐÎÏ:A¢«ÌÜŪ¤Î¾ðÊó
µ¡Ç½:A¥ì¥¸¥¹¥¿¤Ç»ØÄꤹ¤ëÃͤˤè¤Ã¤Æ¡¢É½5.5¤Î¤è¤¦¤Ê³Æ¼ï¤Î¾ðÊó¤òÆÀ¤ë¤³¤È¤¬¤Ç¤¤ë¡£¤³¤ì¤ÏBASIC¤ÎPAD´Ø¿ô¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¤Ç¤¢¤ë¡£É½Ãæ¡ÈXXX1¡É¤Ï¡¢ÈÆÍÑÆþ½Ð¥«¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹#1¤ËÀܳ¤·¤¿¡ÈXXX¡É¤ÎÁõÃ֤Ǥ¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£Æ±ÍͤˡÈXXX2¡É¤ÏÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹#2¤ËÀܳ¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
ÁõÃÖID | »ØÄꤵ¤ì¤ëÁõÃÖ | Ê֤äƤ¯¤ë¾ðÊó |
0 | ¥¿¥Ã¥Á¥Ñ¥Í¥ë1 | ¥Ñ¥Í¥ëÌ̤˿¨¤Ã¤Æ¤¤¤ì¤ÐOFFH¡¢¤¤¤Ê¤±¤ì¤Ð00H |
1 | XºÂɸ(0¡Á255) | |
2 | YºÂɸ(0¡Á255) | |
3 | ¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤Æ¤¤¤ì¤Ð0FFH¡¢¤¤¤Ê¤±¤ì¤Ð00H | |
4 | ¥¿¥Ã¥Á¥Ñ¥Í¥ë2 | Ʊ¾å |
5 | ||
6 | ||
7 | ||
8 | ¥é¥¤¥È¥Ú¥ó | 0FFH¤Ç¤¢¤ì¤Ð¥Ç¡¼¥¿¤Ï͸ú¡¢00H¤Ç¤¢¤ì¤Ð̵¸ú |
9 | XºÂɸ(0¡Á255) | |
10 | YºÂɸ(0¡Á255) | |
11 | ¥¹¥¤¥Ã¥Á¤¬²¡¤µ¤ì¤Æ¤¤¤ì¤Ð0FFH¡¢¤¤¤Ê¤±¤ì¤Ð00H | |
12 | ¥Þ¥¦¥¹1¡¢¤Þ¤¿¤Ï ¥È¥é¥Ã¥¯¥Ü¡¼¥ë1 | ¤Ä¤Í¤Ë0FFH¤òÊÖ¤¹(ÆþÎϤÎÍ×µá¤Ë»ÈÍÑ) |
13 | XºÂɸ(0¡Á255) | |
14 | YºÂɸ(0¡Á255) | |
15 | ¤Ä¤Í¤Ë00H¤òÊÖ¤¹(̵°ÕÌ£) | |
16 | ¥Þ¥¦¥¹1¡¢¤Þ¤¿¤Ï ¥È¥é¥Ã¥¯¥Ü¡¼¥ë2 | Ʊ¾å |
17 | ||
18 | ||
19 |
Ãí1:¥é¥¤¥È¥Ú¥ó¤ÎºÂɸ(A=9,1O)¤È¥¹¥¤¥Ã¥Á(A=11)¤Î¾ðÊó¤Ï¡¢A=8¤È¤·¤ÆBIOS¤ò¥³¡¼¥ë¤·¤¿¤È¤Æ±»þ¤ËÆÉ¤ß¹þ¤Þ¤ì¤Þ¤¹¤¬¡¢¤½¤Î·ë²Ì¤¬OFFH¤Î»þ¤Ë¤Î¤ß¡¢Â¾¤ÎÃͤ¬Í¸ú¤È¤Ê¤ê¤Þ¤¹¡£A=8¤È¤·¤ÆBIOS¤ò¥³¡¼¥ë¤·¤¿·ë²Ì¤¬00H¤Î¾ì´Þ¤Ï¡¢¤½¤Î¸å¤ËÆÀ¤é¤ì¤ëºÂɸÃͤ䥹¥¤¥Ã¥Á¤Î¾õÂ֤ϰÕÌ£¤ò»ý¤Á¤Þ¤»¤ó¡£
Ãí2:¥Þ¥¦¥¹¤È¥È¥é¥Ã¥¯¥Ü¡¼¥ë¤Ï¼«Æ°Åª¤ËȽÊ̤·¤Þ¤¹¡£
Ãí3:¥Þ¥¦¥¹¤ä¥È¥é¥Ã¥¯¥Ü¡¼¥ë¤ÎºÂɸÃͤòµá¤á¤ë¾ì¹ç¡¢¤Þ¤ºÆþÎÏÍ×µá¤Î¥³¡¼¥ë(A=12¤Þ¤¿¤ÏA=16)¤ò¹Ô¤¤¡¢¤½¤Î¸å¤Ë¼ÂºÝ¤ËºÂɸÃͤòµá¤á¤ë¥³¡¼¥ë¤ò¼Â¹Ô¤¹¤ë¡¢¤È¤¤¤¦¼ê½ç¤ò¤Õ¤ß¤Þ¤¹¡£¤³¤Î¤È¤2¤Ä¤Î¥³¡¼¥ë¤Î»þ´Ö´Ö³Ö¤Ï¤Ç¤¤ë¸Â¤ê¾®¤µ¤¯¤È¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ÆþÎÏÍ׵ᤫ¤éºÂɸÃÍ¤ÎÆþÎϤޤǤËɬÍװʾå¤Ë»þ´Ö¤ò¤«¤±¤ë¤È¡¢ÆÀ¤é¤ì¤¿¥Ç¡¼¥¿¤ÏÊݾڤµ¤ì¤Þ¤»¤ó¡£
Ãí4:¥Þ¥¦¥¹¤Þ¤¿¤Ï¥È¥é¥Ã¥¯¥Ü¡¼¥ë¤Ë¤Ä¤¤¤Æ¤¤¤ë¥È¥ê¥¬¥Ü¥¿¥ó¤Î¾õÂÖ¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¡¢¤³¤ÎGTPAD¥ë¡¼¥Á¥ó¤Ç¤Ï¤Ê¤¯¡¢GTTRIG(00D8H/MAIN)¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
ɽ5.5¡¡GTPAD¤ÎBIOS¤ÇÆÀ¤é¤ì¤ë¾ðÊó
¥ê¥¹¥È5.8¡¡¥¿¥Ã¥Á¥Ñ¥Í¥ë¤Î»ÈÍÑË¡
;============================================================ ; ; List 5.8 touch pad access ; ;============================================================ ; BREAKX EQU 00B7H GTPAD EQU 00DBH WRTVRM EQU 004DH ORG 0B000H ;-------- program start -------- ¥¿¥Ã¥Á¥Ñ¥Ã¥É¤Ç»ØÄꤷ¤¿°ÌÃÖ¤Ë"*"¤òɽ¼¨¤¹¤ë PAD: XOR A ;check sense CALL GTPAD OR A JR NZ,PAD1 LD A,3 CALL GTPAD ;break check OR A RET NZ JR PAD PAD1: LD A,1 ;get X axis CALL GTPAD SRL A ;A := A/8 SRL A SRL A LD (WORK),A ;reserve X axis LD A,2 ;get Y axis CALL GTPAD LD L,A ;HL := Y data(0-255) LD H,0 LD C,A LD B,0 ADD HL,BC ;HL := HL*3 (HL:= 0-767) ADD HL,BC LD A,L AND 11100000B LD L,A LD A,(WORK) ADD A,L LD L,A LD BC.1800H ;VRAM start address. ADD HL,BC LD A,2AH CALL WRTVRM ;write VRAM LD A,3 CALL GTPAD ;break check OR A RET NZ JR PAD ;----- work area ----- WORK: DW 0 ;work END
¥ê¥¹¥È5.9¡¡¥Þ¥¦¥¹¤È¥È¥é¥Ã¥¯¥Ü¡¼¥ë¤Î»ÈÍÑË¡
;============================================================ ; ; List 5.9 mouse and track ball access ; ;============================================================ ; GTPAD EQU 00DBH WRTVRM EQU 004DH RDVRM EQU 004AH BREAKX EQU 00B7H ORG 0D000H ;----- program start ----- ¥Þ¥¦¥¹¤Þ¤¿¤Ï¥È¥é¥Ã¥¯¥Ü¡¼¥ë¤Ç»ØÄꤷ¤¿°ÌÃÖ¤Ë"*"¤òɽ¼¨¤¹¤ë TEST: CALL VADR ;Put old data. LD A,(WKOLD) CALL WRTVRM LD A,12 CALL GTPAD ;Request mouse/track ball data. LD A,13 CALL GTPAD ;Read X val. LD (WKXVAL),A LD A.14 CALL GTPAD ;Read Y val. LD (WKYVAL),A LD A,(WKX) LD B,A LD A,(WKXVAL) ADD A,B CP 245 ;X<0? JR C,TEST01 XOR A ;X=0 JR TEST02 TEST01: CP 32 ;X>31? JR C,TEST02 LD A,31 TEST02: LD (WKX),A LD A,(WKY) LD B,A LD A,(WKYVAL) ADD A,B CP 245 ;Y<0? JR C.TEST03 XOR A ;Y=0 JR TEST04 TEST03: CP 24 ;Y>23 JR C,TEST04 LD A,23 TEST04: LD (WKY),A CALL VADR CALL RDVRM ;Read old data. LD (WKOLD),A CALL VADR LD A,2AH CALL WRTVRM ;Put cursor("*"). CALL BREAKX ;Break check. RET C CALL WAIT JR TEST VADR: LD A,(WKY) ;Make SCREEN Address. LD H,A ; From X,Y axis on WORK AREA LD L,0 ; To HL reg. SRL H RR L SRL H RR L SRL H RR L LD A,(WKX) ADD A,L ; Y*32+X LD L,A LD BC,1800H ; VRAM start address. ADD HL,BC RET WAIT: LD A,0 ;WAIT routine WLP1: INC A LD B,(IX+0) LD B,(IX+0) LD B,(IX+0) JR NZ,WLP1 RET ;----- data ----- WKX: DB 10 ;X axis WKY: DB 10 ;Y axis WKOLD: DB 0 ;Character code on (X,Y) WKXVAL: DB 0 ;X variable. WKYVAL: DB 0 ;Y variable. END