Routine keyboard controler

Des MO et des TO...

Modérateur : Politburo

Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Encore plus fort. Plus simple et plus court, aussi.

Avec cette routine, qui est très similaire à la précédente, je dévie le programme au bon moment pour récupérer les résultats du scan de clavier, autrement dit : Le bit pour SHIFT, le bit pour CNT et le scancode de la touche (son code électronique, pas le code ASCII).

Donc maintenant, non seulement ton programme pourra différencier les curseurs avec ou sans SHIFT, mais aussi avec ou sans CNT. Et donc avec ou sans CNT+SHIFT.

A assembler et lancer par un "GDEBUT", comme précédemment.

Code : Tout sélectionner

DEBUT
       LBSR   INIT    Init le clavier

       PSHS   CC      ! Gèle les
       ORCC   #$10    ! IRQ

TEST   JSR    $E806   Capture clavier
       TSTB           ! Boucle
       BEQ    TEST    ! si rien
       CMPB   #$20     ! Si SPC,
       BEQ    EXIT     ! sort
       BSR    HEXS    Affiche ASCII
       LDB    #'(     ! Affiche "("
       JSR    $E803   !
       LDB    KEY      !
       ANDB   #$80     ! Affiche SHIFT
       BSR    HEXS     !
       LDB    KEY+1   !
       ANDB   #$01    ! Affiche CNT
       BSR    HEXS    !
       LDB    KEY      !
       ANDB   #$7F     ! Affiche CODE
       BSR    HEX      !
       LDB    #')     ! Affiche ")"
       JSR    $E803   !
       LDB    #$0A     !
       JSR    $E803    ! Retour
       LDB    #$0D     ! de ligne
       JSR    $E803    !
       BRA    TEST    Test suivant

EXIT   PULS   CC      Restaure IRQ
       LBSR   OUT     Restaure vecteur
       SWI            - Fin -

HEXS   BSR    HEX     !
       LDB    #$20    ! Affiche code
       JMP    $E803   !

* Affichage d'un 8 bits en hexadécimal
HEX    BSR    HEX0
       EXG    A,B
HEX0   LDA    #$10
       MUL
       ADDA   #$90
       DAA
       ADCA   #$40
       DAA
       EXG    A,B
       JMP    $E803

INIT   EQU    *
* Copie de la routine clavier
       LDX    #PCOPY  ! Init vecteur
       STX    $6055   ! de copie
       JSR    $FFA0   Exécute dans bank1
* Ajustement des adressages
       LDX    #CLAV   !
       LEAU   $CD,X   !
       STU    $AF,X   !
       LEAU   $28D,X  !
       STU    $13D,X  !
       STU    $1F1,X  !
       LEAU   $2DD,X  !
       STU    $142,X  !
* Inclusion du programme de capture
       LDB    #$7E    ! Code
       STB    $136,X  ! de JMP
       LDU    #CAPTUR  ! Adresse du
       STU    $137,X   ! programme
* Protection du vecteur de clavier
       LDX    $600A   Lit vecteur clav
       STX    PROTCL  Sauve vecteur
* Activation du nouveau clavier
       PSHS   CC       !
       ORCC   #$50    Gèle interruptions
       LDX    #CLAV   ! Init nouveau
       STX    $600A   ! vecteur
       PULS   CC,PC    !

PROTCL FDB    $0000   Protection vecteur

OUT    EQU    *
* Restaure le vecteur clavier
       PSHS   CC       !
       ORCC   #$50    Gèle interruptions
       LDX    PROTCL  ! Restaure
       STX    $600A   ! vecteur système
       PULS   CC,PC    !


* Programme de copie de routine clavier
PCOPY  LDX    $600A   Lit vecteur clav
       LDX    1,X     Lit ptr routine
       LDU    #CLAV   Ptr buffer
       LDY    #813    Taille à copier
PCOPY0 LDB    ,X+     !
       STB    ,U+     ! Copie
       LEAY   -1,Y    ! routine clavier
       BNE    PCOPY0  !
       RTS             !

* Programme de capture
CAPTUR LDD    <$6C    ! Sauve les
       STD    KEY     ! scancodes
       BITA   #$80    Teste pour suite
       LBRA   CLAV+$13A Suite routine

KEY    FDB    $0000   Capture scancode

* Buffer pour routine clavier
CLAV   RMB    813     Buffer de copie

       END
Si tu as vraiment besoin pour le TO9+...
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

foolduplex a écrit :ouf c'est quand meme plus simple sur MO :wink: vive le balayage a la main sans passer par le 6804 :lol:

Fool
Oui. Quand on y pense, ça fait presque mal... :cry:
jasz
Désactivé
Messages : 796
Enregistré le : 12 déc. 2004 07:53
Localisation : Planete Zorg (31)

Message par jasz »

8O

Bon, je vais tâcher d'intégrer ça dans mon programme pour voir.


En tous les cas, merci :D
Stef
jasz
Désactivé
Messages : 796
Enregistré le : 12 déc. 2004 07:53
Localisation : Planete Zorg (31)

Message par jasz »

Code : Tout sélectionner

CAPTUR LDD    <$6C   
Heu... C'est quoi ce petit signe à côté de $6C... Il veut dire quoi :?:
Stef
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

jasz a écrit :

Code : Tout sélectionner

CAPTUR LDD    <$6C   
Heu... C'est quoi ce petit signe à côté de $6C... Il veut dire quoi :?:
C'est un adressage direct. Le DP est chargé avec #$60 par le programme système. Donc, s'il te gêne vraiment, tu peux remplacer par :

Code : Tout sélectionner

CAPTUR LDD    $606C   
Avatar du membre
foolduplex
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 628
Enregistré le : 02 oct. 2002 23:06
Localisation : Lausanne, Suisse
Contact :

Message par foolduplex »

Ah non, pas question, tu perds un cycle machine (et un byte de memoire) ! :lol:

on en fait des choses en 1 us et 1 byte ...

Fool
Yoann
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 142
Enregistré le : 28 oct. 2005 05:01

Message par Yoann »

foolduplex a écrit :Ah non, pas question, tu perds un cycle machine (et un byte de memoire) ! :lol:

on en fait des choses en 1 us et 1 byte ...

Fool
Clair, surtout le cycle repete quelques milliers de fois pour un affichage, ca fait tout de suite une sacre difference ;)
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Hé dites donc, vous avez fini vous deux, oui? :!: :)

C'est pas une démo, c'est un programme pour le système! :)
jasz
Désactivé
Messages : 796
Enregistré le : 12 déc. 2004 07:53
Localisation : Planete Zorg (31)

Message par jasz »

Prehisto a écrit :C'est un adressage direct.
Hum... C'est bien ce qu'il me semblait. Merci!
Stef
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Et puisque l'on parle d'optimisation, je me suis permis d'en faire certaines :

* Je ne copie plus les tables de correspondance pour les caractères : j'utilise celle de la mémoire Moniteur. Ce qui me fait gagner quelques centaines d'octets.
* J'ajoute bien évidemment en entrée un programme pour commuter sur la banque 1 du Moniteur avant de faire le test clavier.
* J'ai regroupé la fin de INIT et le programme OUT.

Tout ça fait passer le programme utile de 913 à 700 octets.

Je te fais grâce de la partie pour tester :

Code : Tout sélectionner

* Installation du nouveau clavier
INIT   EQU    *
* Copie de la routine clavier
       LDX    #PCOPY  ! Init vecteur
       STX    $6055   ! de copie
       JSR    $FFA0   Exécute dans bank1
* Ajustement des adressages
       LDX    #CLAV   !
       LEAU   $CD,X   !
       STU    $AF,X   !
* Inclusion du programme de capture
       LDB    #$7E    ! Code
       STB    $136,X  ! de JMP
       LDU    #CAPTUR  ! Adresse du
       STU    $137,X   ! programme
* Protection du vecteur de clavier
       LDX    $600A   Lit vecteur clav
       STX    PROTCL  Sauve vecteur
* Activation du nouveau clavier
       LDX    #ENTREE Nouveau vecteur
       BRA    OUT1    Active vecteur

* Restauration du vecteur clavier
OUT    LDX    PROTCL  Pour restauration
OUT1   PSHS   CC       !
       ORCC   #$50    Gèle interruptions
       STX    $600A   Ecrit vect clavier
       PULS   CC,PC    !

PROTCL FDB    $0000   Protection vecteur

* Programme de copie de routine clavier
PCOPY  LDX    $600A   Lit vecteur clav
       LDX    1,X     Lit ptr routine
       LDU    #CLAV   Ptr buffer
       LDY    #596    Taille à copier
PCOPY0 LDB    ,X+     !
       STB    ,U+     ! Copie
       LEAY   -1,Y    ! routine clavier
       BNE    PCOPY0  !
       RTS             !

* Programme de filtrage
CAPTUR LDD    <$6C    ! Sauve les
       STD    KEY     ! scancodes
       BITA   #$80    Teste pour suite
       LBRA   CLAV+$13A Suite routine

KEY    FDB    $0000   Capture scancode

* Entrée pour test clavier
ENTREE PSHS   X        !
       LDX    #CLAV   Ptr routine syst
       STX    $6055   Vecteur banque 1
       PULS   X        !
       JMP    $FFA0   Exécute en banque1

* Buffer pour routine clavier
CLAV   RMB    596     Buffer de copie

       END
Répondre

Retourner vers « Thomson »