Hardware > Hardware (Classic 16-/32-Bit)

Tastatur mit CapsLock Controlle

<< < (16/27) > >>

simonsunnyboy:
XBRA tut nichts anderes. Es hinterlegt nur eine zusätzliche Information, daß umgebogen wurde.

IIRC gehts so:

a) alten Vektor speichern
b) neuen Vektor übergeben
c) ein paar Bytes vor dem neuen Vektor steht dann im Speicher "XBRA" und eine 4 Byte Kennung Deiner Routine
d) um sauber zu sein, am Ende deiner Routine den alten Vektor durch jmp etc anspringen.

Detail bitte im Profibuch nachschlagen, gerade die neuere Version hat das bestimt dokumentiert.

Ein praktisches Beispiel von Patrice Mandin habe ich in meiner AHCC IKBD Routine drinn. Da siehts so aus:


--- Code: ---; custom IKBD vector
EVEN
dc.b "XBRA"
dc.b "IKBD"
old_ikbd: ds.l 1

ikbd:
        ; <ISR code omitted>
rte ; ... and terminate the ISR

--- Ende Code ---

Ob das völlig konform ist, k.A. aber ich gehe davon aus.

guest2696:

--- Zitat ---Wäre schön wenn man auch PC-Keyboards unterstützen könnte. Da müsste ich aber wissen wie ich es am einfachsten heraus finden kann welches System läuft.
--- Ende Zitat ---

EDIT: Uuups, da hat mein PC gerade "Hitzefrei" gemacht ; Ein kleines Hängerlein!  ;D
Wollte eigentlich schreiben, ob sich nicht das System, auf dem ein Programm gerade läuft aus dem 'Machine-Cookie' auslesen lässt!? - Bei den alten 68000ern unter TOS2.06 klappt das, aber welche Werte werden hier von den Emulatoren geliefert  ???

@ToPeg: Bin begierig drauf, deine GfA-Procs auszuprobieren!

Gruß soldermaSTer

rainers:
Hallo,

also ich möchte Eurer Diskussion gern folgen.
Ich verstehe das so, daß Ihr eine Möglichkeit sucht, ein Programm zu schreiben, welches im Hintergrund läuft und den Tastaturprozessor abfragt, um herauszufinden, ob z.B. die CapsLock-Taste gedrückt ist oder nicht. Anhand des Status wird dann eine LED geschaltet. Aber genau hier komme ich nicht mehr mit. Diese LED muß doch auch irgendwo angeschlossen sein. Wo wäre das denn in dem Fall?

Gruß.
Rainer

Burkhard Mankel:
Darf ich das mal kurz für Dich zusammenfassen: Ich hatte diesen Thread - jawohl, ich stecke auch hinter den Synonym Pippi Langstrumpf - begonnen, weil mir dieser Schaltplan und die entsprechenden Beiträge im englischsprachigen Nachbarforum auffielen und ich dachte: hier hat Atari einfach nur was einsparen wollen und das Nachrüsten einer CapsLock Kontrolle sei einfach nur mit dem Einbau eines Transistors, zwei Widerständen und eeiner LED mit Anschluß an GND (Pin 20), +5V (40) und einer Steuerleitung (37) erledigt. Daß man noch entsprechend Bits/Flags setzen muß fiel mir dabei nicht im Traum ein. Später kam mir eine Idee, etwa mit einer Relais Schaltung den Tastaturprozessor zu umgehen, indem ich beide Leitungen der CL Taste abgreifen wollte und an die Steueranschlüsse eines Relais anschließen wollte. Das Relais würde aber nicht anziehen, denn ein Relais arbeitet nur, wenn die Steuerleitung in einen Steuerschaltkreis eingebunden wird. Eine Relaischaltung fällt also aus, da ein so beschaltetes Relais immer dann Schalten würde, wenn eine Taste gedrückt würde die auf derselben Reihe bzw. Spalte der Tastaturmatrix gedrückt wird. Ich stellte dann auch fest, daß ToPeG die selbe Richtung einschlug nämlich die Zwei Tasterleitungen abzufragen, wie ab seinem Post #58 hervorging (Pins 20 und 26 liegen am Capslock-Key). Nun hielt ich mich wieder raus weil ich mit meinen faden Elektrokentnissen nix in dieser Entwicklung weiter beitragen konnte ...
Soweit mein Versuch einer Zusammenfassung und der Versuch, meinen Erklärungsbedarf zu stillen!

ToPeG:
Nun hier mal das GFA-Listing eines kleinen Tests:

--- Code: ---'
' Testprogramm fuer Capslock LED
' ueberwacht den Capslock-Status
' und setzt danach Bit0 an Port3 des IKBD
' Wenn dort ueber einen Transisor eine LED angeschlossen ist
' Kann sie den CapsLockStatus anzeigen
'
' Komando, Adresse, Bytecount, Bytes
' AN
' 20,      0006,    02,        FFFF
' AUS
' 20,      0006,    02,        FFFE
'
kbd$="      "
SDPOKE VARPTR(kbd$),&H2000
SDPOKE VARPTR(kbd$)+2,&H602
'
PRINT AT(1,1);"Ende mit Maustaste"
'
REPEAT
  led_update
  PAUSE 1
UNTIL MOUSEK
'
PROCEDURE led_update
  LOCAL status!
  status!=BIOS(11,-1) AND 16
  led(status!)
  print_status(status!)
RETURN
'
PROCEDURE print_status(on!)
  PRINT AT(5,5);"Capslock: ";
  IF on!
    PRINT "ON "
  ELSE
    PRINT "OFF"
  ENDIF
RETURN
'
PROCEDURE led(on!)
  LOCAL adr%
  adr%=VARPTR(kbd$)
  IF on!
    SDPOKE adr%+4,&HFFFF
  ELSE
    SDPOKE adr%+4,&HFFFE
  ENDIF
  ~XBIOS(25,5,L:adr%)
RETURN

--- Ende Code ---
Auf dem Emulator läuft es. Wenn jemand Schon eine LED am IKBD hat kann er ja mal schauen ob das Funktioniert.

Das Programm reagiert schon auf das CapsLock der Tastatur und ändert damit den Status.
Im Anhang das .GFA (.PDF entfernen)

Sollte das Funktionieren mache ich mich daran daraus ein Persistentes Programm zu machen, das sich an einen Regelmäßigen Interrupt hängt (VBlank z.B.) und den Status aktualisiert.
Danach werde ich ein paar Sachen einbauen, wie eine Überprüfung des OS und Unterstützung für PS2 Tastaturen, wenn es geht.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln