.db $bb,$6d \ .org $9d95 ; xor a ; fin d'entête "ION" out ($20),a ; z80 à 6Mhz (mode "éco") rst $28 \ .dw $4b52 ; AnsName: écrit le token Ans dans OP1 rst $28 \ .dw $4ae3 ; RclVarSym: lis le contenu d'OP1 cp 4 ; si a<>4 c'est pas une chaîne! ret nz ld a,(de) ; (DE) contient la longueur de chaîne (16bits), puis les caractères ld c,a ; longueur=0 ? inc de ld a,(de) ld b,a ; BC = longueur de chaîne or c ; =0 ? ret z ; alors on quitte! di ; désactive les interruptions (pour la LED & gestion-clavier) ld a,%11111111 out (1),a ; ré-initialise le clavier ld a,$fd ; défini le groupe de out (1),a ; touches (ayant la touche [ANNUL]) Boucle_Principale: push bc ; préserve BC (=longueur de chaîne) inc de ld a,(de) ; lis le prochain caractère ld hl,CodeMorseEspace ; caractère "espace" par défaut cp 41 ; "espace" ? jr z,Espace ld hl,Couleur+1 ld (hl),2 ; couleur verte pour les chiffres cp 48 ; < "0" ? jr c,Inconnu cp 58 ; <="9" ? jr c,Chiffre cp 65 ; < "A" ? jr c,Inconnu cp 91 ; > "Z" ? jr nc,Inconnu sub a,7 ; 1 lettre! alors "rattacher" les lettres aux chiffres ld (hl),3 ; couleur orange pour les lettres Chiffre: ld h,0 ld l,a add hl,hl add hl,hl ld bc,CodeMorse-(4*48) ; offset ajusté add hl,bc Espace: ld b,(hl) ; nb de bits à lire ld a,%10000000 ; repère pour passer à l'octet suivant SequBits: ; boucle de lecture de séquence rlca push af jr nc,PasDinc inc hl ld c,(hl) PasDinc: rl c Couleur: ld a,3 jr c,Led_ON xor a Led_ON: out (0),a push bc ld c,80 ; valeur pour temporiser Tempo: in a,(1) bit 6,a ; [ANNUL] appuyée? jr z,Quitter djnz Tempo dec c jr nz,Tempo pop bc pop af djnz SequBits Inconnu: pop bc dec bc ld a,b or c jr nz,Boucle_Principale ei ; réactive les interruptions ret Quitter: pop bc \ pop af \ pop bc \ ei \ ret ; nb bits à lire + 3bits(séparation entre chaque lettre) ; suivi du code morse en binaire (à décoder par la gauche) CodeMorse: .db 22 ,%11101110,%11101110,%11100000 ;0 .db 20 ,%10111011,%10111011,%10000000 ;1 .db 18 ,%10101110,%11101110,0 ;2 .db 16 ,%10101011,%10111000,0 ;3 .db 14 ,%10101010,%11100000,0 ;4 .db 12 ,%10101010,%10000000,0 ;5 .db 14 ,%11101010,%10100000,0 ;6 .db 16 ,%11101110,%10101000,0 ;7 .db 18 ,%11101110,%11101010,0 ;8 .db 20 ,%11101110,%11101110,%10000000 ;9 .db 8 ,%10111000,0,0 ;A .db 12 ,%11101010,%10000000,0 ;B .db 14 ,%11101011,%10100000,0 ;C .db 10 ,%11101010,0,0 ;D .db 4 ,%10000000,0,0 ;E .db 12 ,%10101110,%10000000,0 ;F .db 12 ,%11101110,%10000000,0 ;G .db 10 ,%10101010,0,0 ;H .db 6 ,%10100000,0,0 ;I .db 16 ,%10111011,%10111000,0 ;J .db 12 ,%11101011,%10000000,0 ;K .db 12 ,%10111010,%10000000,0 ;L .db 10 ,%11101110,0,0 ;M .db 8 ,%11101000,0,0 ;N .db 14 ,%11101110,%11100000,0 ;O .db 14 ,%10111011,%10100000,0 ;P .db 16 ,%11101110,%10111000,0 ;Q .db 10 ,%10111010,0,0 ;R .db 8 ,%10101000,0,0 ;S .db 6 ,%11100000,0,0 ;T .db 10 ,%10101110,0,0 ;U .db 12 ,%10101011,%10000000,0 ;V .db 12 ,%10111011,%10000000,0 ;W .db 14 ,%11101010,%11100000,0 ;X .db 16 ,%11101011,%10111000,0 ;Y .db 14 ,%11101110,%10100000 ;Z CodeMorseEspace: .db 4 ,0