¥Æ¥¯¥Ï¥ówiki

5¾Ï ÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹

¡¡1¾Ï¤Ç¤âÀâÌÀ¤·¤¿¤è¤¦¤Ë¡¢MSX¤Î»ÈÍѤ·¤Æ¤¤¤ëPSG¤Ï¡¢²»À¼½ÐÎϤε¡Ç½¤È¤ÏÊ̤˥ݡ¼¥ÈA¤È¥Ý¡¼¥ÈB¤È¤¤¤¦2¤Ä¤Î8¥Ô¥Ã¥ÈÆþ½ÐÎϥݡ¼¥È¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£MSX¤Ï¤³¤Î2¤Ä¤Î¥Ý¡¼¥È¤òÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹(¤¤¤ï¤æ¤ë¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¥Ý¡¼¥È)¤ËÀܳ¤·¤Æ¡¢¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤ä¥Ñ¥É¥ë¤Ê¤É¤ÎÁõÃ֤ȤΥǡ¼¥¿Æþ½ÐÎϤËÍøÍѤ·¤Æ¤¤¤Þ¤¹(¿Þ5.21)¡£¤³¤ÎÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ËÀܳ¤µ¤ì¤ë³Æ¼ï¤ÎÁõÃ֤ϡ¢¤½¤ì¤¾¤ìÀìÍѤÎBIOS¥ë¡¼¥Á¥ó¤¬ROMÆâ¤ËÍÑ°Õ¤µ¤ì¤Æ¤ª¤ê¡¢¼ê·Ú¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¡¡ËܾϤǤϡ¢³ÆÆþ½ÐÎÏÁõÃ֤ε¡Ç½¤ÈBIOS¥ë¡¼¥Á¥ó¤Ë¤è¤ë¥¢¥¯¥»¥¹Ë¡¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£


¿Þ5.21¡¡ÈÆÍÑÆþ½ÐÎÏ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹

 5.1¡¡¥Ý¡¼¥È¤Îµ¡Ç½

¡¡PSG¤Î2¤Ä¤ÎÆþ½ÐÎϥݡ¼¥È¤Ï¡¢¿Þ5.22¤Î¤è¤¦¤ËÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£


¿Þ5.22¡¡PSG¤Î¥Ý¡¼¥ÈA¤È¥Ý¡¼¥ÈB¤Îµ¡Ç½

 5.2¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î»ÈÍÑË¡

¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î²óÏ©¤ò¿Þ5.23¤Ë¼¨¤·¤Þ¤¹¡£¤³¤Î²óÏ©¤«¤é¤ï¤«¤ë¤è¤¦¤Ë¡¢­¨ÈÖü»Ò¤Ë¡È0¡É¤ò½ÐÎϤ·¡¢­¡¡Á­¤¡¢­¦¡Á­§¤Îü»Ò¤òÆɤ߽Ф»¤Ð¡¢¥¹¥Æ¥£¥Ã¥¯¤È¥È¥ê¥¬¥Ü¥¿¥ó¤Î¾ðÊó¤ÏÆÀ¤é¤ì¤Þ¤¹¤¬¡¢¥×¥í¥°¥é¥à¤Î°Ü¿¢À­¤Ê¤É¤ò¹Íθ¤¹¤ë¤È¡¢¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤Î¥¢¥¯¥»¥¹¤Ï¤ä¤Ï¤êBIOS¤òÍøÍѤ·¤Æ¹Ô¤¦Êý¤¬ÌµÆñ¤Ç¤·¤ç¤¦¡£
¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯¤ò¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë¤Ï¡¢°Ê²¼¤Ë¼¨¤¹BIOS¥ë¡¼¥Á¥ó¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Ê¤ª¡¢¤³¤ì¤é¤Î¥ë¡¼¥Á¥ó¤ÏBASIC¤ÎSTICK´Ø¿ô¤äSTRIG´Ø¿ô¤È¤Û¤ÜÅù¤·¤¤µ¡Ç½¤ò»ý¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¡¢¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯°Ê³°¤Ë¥«¡¼¥½¥ë¥­¡¼¤ä¥¹¥Ú¡¼¥¹¥Ð¡¼¤Î¾õÂÖ¤ò¥ê¥¢¥ë¥¿¥¤¥à¤ÇÆɤ߼è¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£


¿Þ5.23¡¡¥¸¥ç¥¤¥¹¥Æ¥£¥Ã¥¯²óÏ©¿Þ

¡ü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¤ÎÈϰϤÇÊѲ½¤·¤Þ¤¹¤Î¤Ç¡¢¥Ñ¥ë¥¹Ä¹¤ò¬Äꤹ¤ì¤Ð²ÄÊÑÄñ¹³¤ÎÃÍ¡¢¤Ò¤¤¤Æ¤Ï¤½¤Î²óž³Ñ¤òÃΤ뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£


¿Þ5.24¡¡¥Ñ¥É¥ë²óÏ©¿Þ

¥Ñ¥É¥ë¤ò¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Î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
1XºÂɸ(0¡Á255)
2YºÂɸ(0¡Á255)
3¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤Æ¤¤¤ì¤Ð0FFH¡¢¤¤¤Ê¤±¤ì¤Ð00H
4¥¿¥Ã¥Á¥Ñ¥Í¥ë2Ʊ¾å
5
6
7
8¥é¥¤¥È¥Ú¥ó0FFH¤Ç¤¢¤ì¤Ð¥Ç¡¼¥¿¤ÏÍ­¸ú¡¢00H¤Ç¤¢¤ì¤Ð̵¸ú
9XºÂɸ(0¡Á255)
10YºÂɸ(0¡Á255)
11¥¹¥¤¥Ã¥Á¤¬²¡¤µ¤ì¤Æ¤¤¤ì¤Ð0FFH¡¢¤¤¤Ê¤±¤ì¤Ð00H
12¥Þ¥¦¥¹1¡¢¤Þ¤¿¤Ï
¥È¥é¥Ã¥¯¥Ü¡¼¥ë1
¤Ä¤Í¤Ë0FFH¤òÊÖ¤¹(ÆþÎϤÎÍ×µá¤Ë»ÈÍÑ)
13XºÂɸ(0¡Á255)
14YºÂɸ(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