DECLARE FUNCTION clavier$ (maxi%) ' EAROM 93C46 Port parallŠle ' CS 1 <------------------- 4 bit 2 ' CLK 2 <------------------- 3 bit 1 ' Di 3 <------------------- 2 bit 0 ' Do 4 -------------------> 10 bit 6 ACK/ ' 5 -------------------- 20 GND ' 6 Nc ' 7 Nc ' 8 VCC sommaire: '<- ce qui … ‚t‚ rajout‚ depuis la version 2.0 CLEAR '<- pb de modif. de l'EAROM avec le test de a = FRE(0) '<- virginit‚. Les autres modif. sont rep‚r‚es a = FRE("") '<- par une "<-" dans LECTURE et VIERGE OPTION BASE 0 adress% = &H378 lect% = &H379 bitadr% = 1 'bit 0 bitdata% = 64 'bit 6 cs% = 4 'bit 3 clk% = 2 'bit 2 DIM trame%(127, 11), di%(127, 15), dout%(15) k% = 0 l = LOG(2) 'sommaire: 'position de "sommaire" dans la version 2.0 CLS OUT adress%, 0 DO CLS LOCATE 5, 31: PRINT "S O M M A I R E" LOCATE 6, 31: PRINT "_______________" LOCATE 9, 20: PRINT "Type d'EAROM :" LOCATE 11, 33: PRINT "-1- 93C06" LOCATE 12, 33: PRINT "-2- 93C46" LOCATE 13, 33: PRINT "-3- 93C56" LOCATE 14, 33: PRINT "-4- Aide" LOCATE 15, 33: PRINT "-5- Quitter" LOCATE 22, 17: PRINT "ATTENTION : Traitement des EAROM sur 16 bits." LOCATE 23, 17: PRINT "---------" repfirst: z$ = INKEY$: IF z$ = "" THEN GOTO repfirst IF z$ < "0" OR z$ > "5" THEN BEEP: GOTO repfirst ELSE modele% = VAL(z$) IF modele% = 5 THEN END IF modele% = 4 THEN GOTO aide LOOP WHILE z$ < "0" OR z$ > "4" choix: CLS PRINT "EAROM version 2.2" PRINT "(c) 1993 par le Dr. Kifailclown" SELECT CASE modele% CASE 1: PRINT " Configuration pour 93C06": nbbitadr% = 8: adrmax% = 15 CASE 2: PRINT " Configuration pour 93C46": nbbitadr% = 8: adrmax% = 63 CASE 3: PRINT " Configuration pour 93C56": nbbitadr% = 10: adrmax% = 127 CASE ELSE END SELECT LOCATE 5, 31: PRINT "S O M M A I R E" LOCATE 6, 31: PRINT "_______________" LOCATE 9, 33: PRINT "-1- Lecture" LOCATE 10, 33: PRINT "-2- Ecriture" LOCATE 11, 33: PRINT "-3- Efface" LOCATE 12, 33: PRINT "-4- Vierge" LOCATE 13, 33: PRINT "-5- Changer d'EAROM" LOCATE 14, 33: PRINT "-0- Fin de travail" LOCATE 17, 33: PRINT "Choix :"; repchoix: z$ = INKEY$: IF z$ = "" THEN GOTO repchoix IF z$ < "0" OR z$ > "5" THEN BEEP: GOTO repchoix ELSE c% = VAL(z$) PRINT c% IF c% = 0 THEN END ON c% GOTO lit, ecrit, efface, vierge, sommaire GOTO choix ''''''''''''''''''''''''''''''''''''' '' DEMANDE D'ECRITURE ''''' ''''''''''''''''''''''''''''''''''''' ecrit: PRINT demande1: LOCATE 24, 2: PRINT "Taper pour revenir au sommaire"; LOCATE 21, 2: PRINT "Donner l'adresse … ‚crire en h‚xa : "; DO a$ = UCASE$(INKEY$) LOCATE 21, 41: PRINT a$; LOOP WHILE a$ < "0" OR a$ > "H" AND a$ <> "Q" IF a$ = "Q" THEN GOTO choix DO b$ = UCASE$(INKEY$) LOCATE 21, 42: PRINT b$; LOOP WHILE b$ < "0" OR b$ > "H" AND b$ <> "Q" IF b$ = "Q" THEN GOTO choix PRINT IF a$ > "9" AND a$ < "A" THEN BEEP GOTO demande1 ELSE IF b$ > "9" AND b$ < "A" THEN BEEP GOTO demande1 END IF END IF SELECT CASE a$ CASE IS = "A": i% = 10 CASE IS = "B": i% = 11 CASE IS = "C": i% = 12 CASE IS = "D": i% = 13 CASE IS = "E": i% = 14 CASE IS = "F": i% = 15 CASE ELSE: i% = VAL(a$) END SELECT SELECT CASE b$ CASE IS = "A": j% = 10 CASE IS = "B": j% = 11 CASE IS = "C": j% = 12 CASE IS = "D": j% = 13 CASE IS = "E": j% = 14 CASE IS = "F": j% = 15 CASE ELSE: j% = VAL(b$) END SELECT ad% = i% * 16 + j% IF ad% > 2 * adrmax% THEN BEEP LOCATE 22, 6: PRINT "Valeur trop grande pour le type d'EAROM" SLEEP (3) LOCATE 22, 6: PRINT SPACE$(40) GOTO demande1 END IF IF (ad% / 2) - INT(ad% / 2) <> 0 THEN BEEP LOCATE 22, 6: PRINT "Uniquement adresse paire" SLEEP (3) LOCATE 22, 6: PRINT SPACE$(40) GOTO demande1 END IF ad% = INT(ad% / 2) demande2: LOCATE 22, 2: PRINT "Donner les 2 octets … ‚crire en h‚xa : "; DO a$ = UCASE$(INKEY$) LOCATE 22, 41: PRINT a$; LOOP WHILE a$ < "0" OR a$ > "H" AND a$ <> "Q" IF a$ = "Q" THEN GOTO choix DO b$ = UCASE$(INKEY$) LOCATE 22, 42: PRINT b$; LOOP WHILE b$ < "0" OR b$ > "H" AND b$ <> "Q" IF b$ = "Q" THEN GOTO choix DO c$ = UCASE$(INKEY$) LOCATE 22, 43: PRINT c$; LOOP WHILE c$ < "0" OR c$ > "H" AND c$ <> "Q" IF c$ = "Q" THEN GOTO choix DO d$ = UCASE$(INKEY$) LOCATE 22, 44: PRINT d$; LOOP WHILE d$ < "0" OR d$ > "H" AND d$ <> "Q" IF d$ = "Q" THEN GOTO choix PRINT IF a$ > "9" AND a$ < "A" THEN BEEP GOTO demande2 ELSE IF b$ > "9" AND b$ < "A" THEN BEEP GOTO demande2 ELSE IF c$ > "9" AND c$ < "A" THEN BEEP GOTO demande2 ELSE IF d$ > "9" AND d$ < "A" THEN BEEP GOTO demande2 END IF END IF END IF END IF SELECT CASE a$ CASE IS = "A": i = 10 CASE IS = "B": i = 11 CASE IS = "C": i = 12 CASE IS = "D": i = 13 CASE IS = "E": i = 14 CASE IS = "F": i = 15 CASE ELSE: i = VAL(a$) END SELECT SELECT CASE b$ CASE IS = "A": j = 10 CASE IS = "B": j = 11 CASE IS = "C": j = 12 CASE IS = "D": j = 13 CASE IS = "E": j = 14 CASE IS = "F": j = 15 CASE ELSE: j = VAL(b$) END SELECT SELECT CASE c$ CASE IS = "A": k = 10 CASE IS = "B": k = 11 CASE IS = "C": k = 12 CASE IS = "D": k = 13 CASE IS = "E": k = 14 CASE IS = "F": k = 15 CASE ELSE: k = VAL(c$) END SELECT SELECT CASE d$ CASE IS = "A": m = 10 CASE IS = "B": m = 11 CASE IS = "C": m = 12 CASE IS = "D": m = 13 CASE IS = "E": m = 14 CASE IS = "F": m = 15 CASE ELSE: m = VAL(d$) END SELECT va = i * 4096 + j * 256 + k * 16 + m FOR i% = 15 TO 0 STEP -1 k = INT(EXP(l * i%) + .02) dout%(i%) = INT(va / k) IF (dout%(i%) = 1) THEN va = va - k NEXT GOSUB ewen '''''''''''''''''''''''''' '' ECRITURE ''''' '''''''''''''''''''''''''' ordre% = 256 + 64 'ordre ‚crire IF adrmax% = 127 THEN ordre% = ordre% * 4 a% = ordre% + ad% i% = 0 FOR j% = nbbitadr% TO 0 STEP -1 k% = EXP(l * j%) trame%(i%, j%) = INT(a% / k%) IF (trame%(i%, j%) = 1) THEN a% = a% - k% NEXT LOCATE 20, 29: PRINT "Transmission / Ecriture " SLEEP (1) i% = 0 OUT adress%, cs% GOSUB tempo1 FOR j% = nbbitadr% TO 0 STEP -1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo1 NEXT FOR i% = 15 TO 0 STEP -1 OUT adress%, (bitadr% * dout%(i%)) + cs% GOSUB tempo2 OUT adress%, (bitadr% * dout%(i%)) + cs% + clk% GOSUB tempo1 OUT adress%, (bitadr% * dout%(i%)) + cs% + clk% GOSUB tempo2 OUT adress%, (bitadr% * dout%(i%)) + cs% GOSUB tempo1 NEXT OUT adress%, 0 GOSUB tempo2 OUT adress%, cs% a% = bitdata% AND INP(lect%) WHILE (a%) <> 0 AND a$ <> "Q" a% = bitdata% AND INP(lect%) a$ = UCASE$(INKEY$) WEND a% = (bitdata% AND INP(lect%)) / bitdata% WHILE (a%) <> 1 AND a$ <> "Q" a% = (bitdata% AND INP(lect%)) / bitdata% OUT adress%, 0 a$ = UCASE$(INKEY$) WEND GOSUB tempo1 OUT adress%, 0 GOSUB tempo1 OUT adress%, 0 GOSUB ewds GOTO choix ''''''''''''''''''''''''' '' LECTURE ''''' ''''''''''''''''''''''''' lit: LOCATE 24, 17: PRINT "Sauver les donn‚es dans un fichier (O)ui/(N)on"; DO rep$ = UCASE$(INKEY$) LOOP WHILE rep$ <> "O" AND rep$ <> "N" IF rep$ = "N" THEN GOTO passauve errsaisie: LOCATE 24, 1: PRINT SPACE$(78); LOCATE 24, 14: PRINT "Nom du fichier de sauvegarde : "; a$ = UCASE$(clavier$(8)) IF LEN(a$) = 0 OR LEN(a$) > 8 THEN LOCATE 24, 1: PRINT SPACE$(78); LOCATE 24, 16: PRINT "Le nom de fichier doit avoir entre 1 et 8 caractŠres"; SLEEP (4) GOTO errsaisie END IF FOR i% = 1 TO LEN(a$) IF MID$(a$, i%, 1) < "A" OR MID$(a$, i%, 1) > "Z" THEN LOCATE 24, 1: PRINT SPACE$(78); LOCATE 24, 14: PRINT "Seuls les caractŠres de A … Z sont accept‚s"; SLEEP (4) GOTO errsaisie END IF NEXT i% OPEN a$ + ".eep" FOR OUTPUT AS #2 'ouverture du fichier passauve: ordre% = 256 + 128 'ordre lire IF adrmax% = 127 THEN ordre% = ordre% * 4 FOR i% = 0 TO adrmax% a% = ordre% + i% FOR j% = nbbitadr% TO 0 STEP -1 k% = EXP(l * j%) trame%(i%, j%) = INT(a% / k%) IF (trame%(i%, j%) = 1) THEN a% = a% - k% NEXT NEXT LOCATE 20, 29: PRINT "Transmission / Lecture " FOR i% = 0 TO adrmax% OUT adress%, cs% GOSUB tempo1 FOR j% = nbbitadr% TO 0 STEP -1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo1 NEXT FOR j% = 15 TO 0 STEP -1 OUT adress%, cs% + clk% GOSUB tempo1 di%(i%, j%) = INP(lect%) OUT adress%, cs% GOSUB tempo1 NEXT ' OUT adress%, clk% <- ' GOSUB tempo1 <- OUT adress%, 0 GOSUB tempo1 ' OUT adress%, clk% <- ' GOSUB tempo1 <- ' OUT adress%, 0 <- ' GOSUB tempo1 <- NEXT OUT adress%, 0 CLS LOCATE 3, 1: PRINT " ADR D15 D08 D07 D0 HEXA ASCII" LOCATE 5, 1 p% = 0 nbpage% = adrmax% / 16 FOR i% = 0 TO adrmax% k% = 2 * i% PRINT SPACE$(6 - LEN(HEX$(k%))) + (HEX$(k%)) + ": "; k = 0 FOR j% = 15 TO 0 STEP -1 result% = (di%(i%, j%) AND bitdata%) / bitdata% k = k + result% * EXP(l * j%) PRINT result%; IF j% = 8 THEN PRINT " "; NEXT PRINT " -- " + HEX$(INT(k / 4096)) + HEX$(INT((k AND 3840) / 256)) + HEX$(INT((k AND 240) / 16)) + HEX$(k AND 15) + " "; IF (k / 256) > 31 THEN PRINT CHR$(INT(k / 256)); ELSE PRINT "."; END IF IF (k AND 255) > 31 THEN PRINT CHR$(k AND 255) ELSE PRINT "." END IF IF ((i% + 1) / 16 = INT((i% + 1) / 16)) AND i% > 0 THEN p% = p% + 1 PRINT PRINT "- Espace pour continuer -" LOCATE 24, 70: PRINT "Page" + STR$(p%) + "/" + LTRIM$(STR$(nbpage%)); IF rep$ = "O" THEN 'sauvegarde demand‚e LOCATE 24, 1: PRINT SPACE$(78); 'commence la sauvegarde LOCATE 24, 14: PRINT "Sauvegarde en cours"; FOR jj% = 1 TO 23 'scrute les lignes LOCATE 24, 33 + jj%: PRINT "."; FOR ii% = 1 TO 80 'et les colonnes aa% = SCREEN(jj%, ii%) 'le caractŠre se trouvant … l'intersection PRINT #2, CHR$(aa%); 'est envoy‚ dans le fichier NEXT ii% NEXT jj% LOCATE 24, 1: PRINT SPACE$(78); END IF WHILE INKEY$ <> " ": WEND LOCATE 5, 1 END IF NEXT IF rep$ = "O" THEN 'sauvegarde demand‚e CLOSE #2 'ferme le fichier BEEP LOCATE 24, 9: PRINT "Ecran sauvegard‚ en mode texte dans le fichier " + a$ + ".EEP"; SLEEP (4) END IF GOTO choix '''''''''''''''''''''''''''' '' EFFACE TOUT '' '''''''''''''''''''''''''''' efface: LOCATE 22, 2: PRINT "Attention : Perte des donn‚es. Confirmez (O)ui ou (N)on"; DO a$ = UCASE$(INKEY$) LOOP WHILE a$ <> "O" AND a$ <> "N" IF a$ = "N" THEN GOTO choix GOSUB ewen i% = 0 ordre% = 256 + 32 'ordre ERAL IF adrmax% = 127 THEN ordre% = ordre% * 4 a% = ordre% + i% FOR j% = nbbitadr% TO 0 STEP -1 k% = EXP(l * j%) trame%(i%, j%) = INT(a% / k%) IF (trame%(i%, j%) = 1) THEN a% = a% - k% NEXT LOCATE 20, 29: PRINT "Transmission / Efface tout " SLEEP (1) i% = 0 OUT adress%, cs% GOSUB tempo1 FOR j% = nbbitadr% TO 0 STEP -1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo1 NEXT OUT adress%, 0 GOSUB ewds GOTO choix '''''''''''''''''''''''' '' VIERGE ''''' '''''''''''''''''''''''' vierge: PRINT ordre% = 256 + 128 'ordre lire IF adrmax% = 127 THEN ordre% = ordre% * 4 FOR i% = 0 TO adrmax% a% = ordre% + i% FOR j% = nbbitadr% TO 0 STEP -1 k% = EXP(l * j%) trame%(i%, j%) = INT(a% / k%) IF (trame%(i%, j%) = 1) THEN a% = a% - k% NEXT NEXT LOCATE 20, 29: PRINT "Transmission / Lecture " FOR i% = 0 TO adrmax% OUT adress%, cs% GOSUB tempo1 FOR j% = nbbitadr% TO 0 STEP -1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo1 NEXT FOR j% = 15 TO 0 STEP -1 OUT adress%, cs% + clk% GOSUB tempo1 di%(i%, j%) = INP(lect%) OUT adress%, cs% GOSUB tempo1 NEXT ' OUT adress%, clk% <- ' GOSUB tempo1 <- OUT adress%, 0 GOSUB tempo1 ' OUT adress%, clk% <- ' GOSUB tempo1 <- ' OUT adress%, 0 <- ' GOSUB tempo1 <- NEXT OUT adress%, 0 LOCATE 20, 29: PRINT " Comparaison " FOR i% = 0 TO adrmax% k = 0 FOR j% = 15 TO 0 STEP -1 result% = (di%(i%, j%) AND bitdata%) / bitdata% k = k + result% * EXP(l * j%) NEXT IF k < 65534.8 THEN BEEP LOCATE 22, 20: PRINT "**** EAROM non vierge … l'adresse " + HEX$(i% * 2) + " ****" LOCATE 24, 2: PRINT "Taper pour revenir au sommaire"; DO a$ = UCASE$(INKEY$) LOOP WHILE a$ <> "Q" GOTO choix END IF NEXT BEEP LOCATE 22, 29: PRINT "**** EAROM vierge ****" LOCATE 24, 2: PRINT "Taper pour revenir au sommaire"; DO a$ = UCASE$(INKEY$) LOOP WHILE a$ <> "Q" GOTO choix ''''''''''''''''''''' '' AIDE '' ''''''''''''''''''''' aide: CLS LOCATE 3, 31: PRINT "AIDE AU CABLAGE" LOCATE 8, 18: PRINT " EAROM 93C46 Port parallŠle" LOCATE 10, 20: PRINT " CS 1 <------------------- 4 bit 2" LOCATE 11, 20: PRINT " CLK 2 <------------------- 3 bit 1" LOCATE 12, 20: PRINT " Di 3 <------------------- 2 bit 0" LOCATE 13, 20: PRINT " Do 4 -------------------> 10 bit 6 ACK/" LOCATE 14, 20: PRINT " GND 5 -------------------- 20 GND" LOCATE 15, 20: PRINT " 6 Nc" LOCATE 16, 20: PRINT " 7 Nc" LOCATE 17, 20: PRINT " VCC 8 VCC" LOCATE 24, 2: PRINT "Taper pour revenir au sommaire"; DO a$ = UCASE$(INKEY$) LOOP WHILE a$ <> "Q" GOTO sommaire END '''''' LES SOUS-PROGRAMMES '''''' tempo1: FOR tempo% = 1 TO 100: NEXT RETURN tempo2: FOR tempo% = 1 TO 30: NEXT RETURN '''''''''''''''''''''' '' EWEN ''''' '''''''''''''''''''''' ewen: i% = 0 ordre% = 256 + 32 + 16 'ordre EWEN IF adrmax% = 127 THEN ordre% = ordre% * 4 a% = ordre% + i% FOR j% = nbbitadr% TO 0 STEP -1 k% = EXP(l * j%) trame%(i%, j%) = INT(a% / k%) IF (trame%(i%, j%) = 1) THEN a% = a% - k% NEXT LOCATE 20, 29: PRINT "Transmission / D‚v‚rouille " SLEEP (1) i% = 0 OUT adress%, cs% GOSUB tempo1 FOR j% = nbbitadr% TO 0 STEP -1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo1 NEXT OUT adress%, 0 RETURN '''''''''''''''''''''' '' EWDS ''''' '''''''''''''''''''''' ewds: i% = 0 ordre% = 256 'ordre EWDS IF adrmax% = 127 THEN ordre% = ordre% * 4 a% = ordre% + i% FOR j% = nbbitadr% TO 0 STEP -1 k% = EXP(l * j%) trame%(i%, j%) = INT(a% / k%) IF (trame%(i%, j%) = 1) THEN a% = a% - k% NEXT LOCATE 20, 29: PRINT "Transmission / V‚rouille " SLEEP (1) i% = 0 OUT adress%, cs% GOSUB tempo1 FOR j% = nbbitadr% TO 0 STEP -1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo1 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% + clk% GOSUB tempo2 OUT adress%, (trame%(i%, j%) * bitadr%) + cs% GOSUB tempo1 NEXT OUT adress%, 0 RETURN FUNCTION clavier$ (maxi%) DIM pasbon$(2), a$(maxi% + 1) pasbon$ = " " + CHR$(9) + CHR$(27) a$ = " " i% = 1 DO recommence: DO 'attente frappe caractŠre b$ = INKEY$ LOOP WHILE b$ = "" FOR j% = 1 TO LEN(pasbon$) 'teste si le caractŠre lu au clavier IF b$ = MID$(pasbon$, j%, 1) GOTO recommence 'est un caractŠre interdit NEXT j% IF b$ <> CHR$(13) THEN 'si ce n'est pas "ENTER" PRINT b$; 'on affiche le caractŠre MID$(a$, i%) = b$ 'et on le stocke END IF i% = i% + 1 IF i% > maxi% + 1 THEN EXIT DO 'si plus de 8 caractŠres LOOP WHILE b$ <> CHR$(13) 'si CR alors fin de saisie clavier$ = RTRIM$(a$) END FUNCTION