Wie versprochen hier der Code:
'
' Testprogramm fuer Tastatur LEDs
' Ueberwacht den Capslock-Status
'
' Siehe beigelete Schaltung
'
' Komando, Adresse, Bytecount, Bytes
' 20, 0006, 01, 82+LEDbit
'
kbd$=" "
oldsend|=0
send|=0
init
'
PRINT AT(1,1);"Ende mit Maustaste"
PRINT AT(1,2);"CapsLock schaltet LED 0"
PRINT AT(1,3);"LED 1..4 werden mit den Nummerntasten geschaltet"
'
key$=""
REPEAT
key$=INKEY$
IF key$="1"
led_update(0)
ELSE IF key$="2"
led_update(1)
ELSE IF key$="3"
led_update(2)
ELSE IF key$="4"
led_update(3)
ENDIF
capslock_update
send
print_status
UNTIL MOUSEK OR key$=CHR$(27)
'
' ############################################
'
PROCEDURE init
LOCAL adr%
send|=&H82
oldsend|=send|
'
adr%=VARPTR(kbd$)
CARD{adr%}=&H2000
CARD{adr%+2}=&H601
CARD{adr%+4}=send|
'
~XBIOS(25,5,L:adr%)
~XBIOS(25,5,L:adr%)
RETURN
'
PROCEDURE capslock_update
LOCAL status!
IF BIOS(11,-1) AND 16
send|=BSET(send|,2)
ELSE
send|=BCLR(send|,2)
ENDIF
RETURN
'
PROCEDURE led_update(num|)
LOCAL pos|
IF num|<4
num|=num|+3
IF send| AND BSET(0,num|)
send|=BCLR(send|,num|)
ELSE
send|=BSET(send|,num|)
ENDIF
ENDIF
RETURN
'
PROCEDURE led_set(num|,on!)
IF num|<4
IF on!
send|=BSET(send|,num|+2)
ELSE
send|=BCLR(send|,num|+2)
ENDIF
ENDIF
RETURN
'
PROCEDURE print_status
PRINT AT(5,5);"LED0: ";
IF send| AND 4
PRINT "ON "
ELSE
PRINT "OFF"
ENDIF
'
PRINT AT(5,6);"LED1: ";
IF send| AND 8
PRINT "ON "
ELSE
PRINT "OFF"
ENDIF
'
PRINT AT(5,7);"LED2: ";
IF send| AND 16
PRINT "ON "
ELSE
PRINT "OFF"
ENDIF
'
PRINT AT(5,8);"LED3: ";
IF send| AND 32
PRINT "ON "
ELSE
PRINT "OFF"
ENDIF
'
PRINT AT(5,9);"LED4: ";
IF send| AND 64
PRINT "ON "
ELSE
PRINT "OFF"
ENDIF
RETURN
'
PROCEDURE send
LOCAL adr%
send|=BCLR(send|,0)
send|=BSET(send|,1)
send|=BSET(send|,7)
IF oldsend|<>send|
adr%=VARPTR(kbd$)
CARD{adr%+4}=send|
~XBIOS(25,5,L:adr%)
~XBIOS(25,5,L:adr%)
oldsend|=send|
ENDIF
RETURN
und im Anhang als GFA. (.PDF entfernen)