1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
* Editon History
Edition equ 1 current edition number
Typ_Lang set (Prgrm<<8)+Objct
Attr_Rev set ((ReEnt)<<8)+0
psect IRQ,Typ_Lang,Attr_Rev,Edition,256,Debut
use C:/mwos/os9/src/defs/oskdefs.d
vsect
Touche: ds.b 1
ends
* Registres du PIA
PIA0 EQU $FC0400 adresse de base
ORA EQU 01 registre de sortie cote A
DDRA EQU ORA registre de sens de transfert cote A
CRA EQU 03 registre de controle cote A
ORB EQU 05 registre de sortie cote B
DDRB EQU ORB registre de sens de transfert cote B
CRB EQU 07 registre de controle cote B
* cablage des E/S: port B en entree PB0-PB3: code scan
* port A en sortie PA0-PA3: leds
* CB2 en sortie: commande /OE
* CB1 en entree: détection signal touche actionnée
Debut: lea PIA0,a3 adresse du port
bsr IniPIA0 pas d'interruption
move.b #$00,Touche(a6)
Reco: bsr Lecla
bcs Reco
moveq #1,d0 stdout
moveq #1,d1 un caractere a afficher
lea Touche(a6),a0
OS9 I$Write
bcs Erreur
bra Reco
Fin: moveq #0,d1 sortie sans erreur
Erreur: OS9 F$Exit
**************************
Lecla: btst #7,CRB(a3) transition cur CA1 ?
beq PdT interruption autre
bset #3,CRB(a3) mise
un CB2: /OE=0
move.b ORB(a3),d0 lecture valeur et raz CRA7
andi.b #$0F,d0 poids faibles seulement
lea TabConv(pc),a0 a0 pointe sur la table de conversion
move.b (a0,d0),d0 conversion
move.b d0,Touche(a6) passage de valeur
bclr.b #3,CRB(a3) mise a zéro CB2: /OE=1
rts
PdT: ori.b #1,CCR carry a un pour signaler pas de touche
rts
*************************
TabConv: dc.b '#',$30,$2A,$00,$39,$38,$37,$00,$36,$35,$34,$00,$33,$32,$31
align
******************************************************************************
* Initialisation du PIA gerant l'afficheur
******************************************************************************
IniPIA0:
lea PIA0,a3 a3 pointe le pia
clr.b CRA(a3) acces DDRA
clr.b CRB(a3) acces DDRB
move.b #$00,DDRB(a3) port B en entree
move.b #$FF,DDRA(a3) port A en sortie
move.b #$34,CRA(a3) acces ORA,CA2 en sortie mode programme
move.b #$34,CRB(a3) acces ORB,CB2 en sortie mode programme
rts
******************************************************************************
ends |
Partager