volver
10 SAVE"TECLFULL.BAS"
20 KEY OFF
30 SCREEN 0
40 CLS
50 LOCATE 5,5:PRINT "RUTINA DE TECLADO COMPLETO,MOUSE Y SUS BOTONES
60 GOSUB 700:REM LOAD ASSEMBLY LANGUAGE SUBROUTINE
70 REM
80 REM
90 REM
100 GOSUB 180
110 LOCATE 12,2:PRINT "TECLA O ACCION "A$" "
120 LOCATE 13,2:PRINT "YPOS "YPOS" "
130 LOCATE 14,2:PRINT "XPOS "XPOS" "
140 LOCATE 15,2:PRINT "X "X" "
150 LOCATE 16,2:PRINT "Y "Y" "
160 GOTO 100
170 END
180 REM TECLADO COMPLETO Y MOUSE
190 REGAH%=&H0:REGAL%=&H3 :REM FILL "REGISTERS"
200 REGBH%=&H0:REGBL%=&H0
210 REGCH%=&H0:REGCL%=&H0
220 REGDH%=&H0:REGDL%=&H0
230 INTERRUPT%=&H33:GOSUB 540 :REM CALL ASSEMBLY LANGUAGE SUBROUTINE
240 X=(REGCH%*256)+REGCL%
250 Y=(REGDH%*256)+REGDL%
260 YPOSA=YPOS
270 XPOSA=XPOS
280 YPOS=(Y/8)+1:XPOS=(X/8)+1
290 IF YPOS<YPOSA THEN X=X-1:GOTO 520
300 IF YPOS>YPOSA THEN X=X+1:GOTO 520
310 IF XPOS<XPOSA THEN Y=Y-1:GOTO 520
320 IF XPOS>XPOSA THEN Y=Y+1:GOTO 520
330 IF (REGBL% AND 7)=1 THEN A$="MOUSEIZQUIERDO":GOTO 520
340 IF (REGBL% AND 7)=2 THEN A$="MOUSEDERECHO":GOTO 520
350 IF (REGBL% AND 7)=3 THEN A$="MOUSECOMBINADO":GOTO 520
360 A$=INKEY$
370 IF A$="" THEN 180
380 Z$=MID$(A$,2,1):IF Z$="" THEN 520
390 IF Z$="H" THEN A$="UP":GOTO 510
400 IF Z$="P" THEN A$="DOWN":GOTO 510
410 IF Z$="K" THEN A$="LEFT":GOTO 510
420 IF Z$="M" THEN A$="RIGHT":GOTO 510
430 IF Z$="R" THEN A$="INS":GOTO 510
440 IF Z$="G" THEN A$="HOME":GOTO 510
450 IF Z$="O" THEN A$="END":GOTO 510
460 IF Z$="I" THEN A$="PGUP":GOTO 510
470 IF Z$="Q" THEN A$="PGDN":GOTO 510
480 IF Z$="S" THEN A$="DEL":GOTO 510
490 IF Z$="s" THEN A$="CTRL-LEFT":GOTO 510
500 IF Z$="t" THEN A$="CTRL-RIGHT":GOTO 510
510 Z$=""
520 RETURN
530 REM ----------------------------------------------------------------------
540 REM SET UP AND CALL ASSEMBLY LANGUAGE SUBROUTINE
550 DEF SEG=&H4B :REM POINT TO SEGMENT
560 POKE 31,INTERRUPT% :REM INTERRUPT TO CALL
570 POKE 4,REGAH%:POKE 3,REGAL%
580 POKE 6,REGBH%:POKE 5,REGBL%
590 POKE 8,REGCH%:POKE 7,REGCL%
600 POKE 10,REGDH%:POKE 9,REGDL%
610 ASMSUB=0:CALL ASMSUB :REM CALL ASSEMBLY LANGUAGE SUB. FOR INTERPRETER
620 REM CALL ABSOLUTE(0) :REM CALL ASSEMBLY LANGUAGE SUB. FOR COMPILER
630 REGAH%=PEEK(4):REGAL%=PEEK(3)
640 REGBH%=PEEK(6):REGBL%=PEEK(5)
650 REGCH%=PEEK(8):REGCL%=PEEK(7)
660 REGDH%=PEEK(10):REGDL%=PEEK(9)
670 DEF SEG:RETURN :REM RETURN TO BASIC SEGMENT
680 REM -----
690 REM LOAD AN ASSEMBLY LANGUAGE SUBROUTINE
700 DEF SEG=&H4B:FOR I=0 TO 51:READ B:POKE I,B:NEXT:DEF SEG:RETURN
710 REM -----
720 DATA &HEB,&H09,&H90
730 DATA &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00 :REM REGISTERS AX-DX
740 DATA &H2E,&HA1,&H03,&H00
750 DATA &H2E,&H8B,&H1E,&H05,&H00
760 DATA &H2E,&H8B,&H0E,&H07,&H00
770 DATA &H2E,&H8B,&H16,&H09,&H00
780 DATA &HCD,&H21 :REM INTERRUPT XX
790 DATA &H2E,&HA3,&H03,&H00
800 DATA &H2E,&H89,&H1E,&H5,&H0
810 DATA &H2E,&H89,&H0E,&H07,&H00
820 DATA &H2E,&H89,&H16,&H09,&H00
830 DATA &HCB :REM RETF
840 LOCATE 1,1:PRINT REGBL% AND 7
 
1