DECLARE SUB tempo (delay&) ON ERROR GOTO 666 one$ = STRING$(1, 0) e = &H379 'port entr‚e s = &H378 'port sortie io = &H37A 'port input/output lim& = 32767 isol = &H40 'bit du port parallele … utiliser pour l'entr‚e des donn‚es narg = 10 'nombre d'arguments de COMMAND max '---------------------------------------------------------------------------- 'DETERMINE LA COMMAND '---------------------------------------------------------------------------- cmd$ = UCASE$(COMMAND$) 'cmd$ = UCASE$("/f=outtest.bin /c=l /cn=1m,16 /d=0") DIM arg$(narg) FOR i = 1 TO LEN(cmd$) IF MID$(cmd$, i, 1) = " " THEN c = c + 1 ELSE arg$(c) = arg$(c) + MID$(cmd$, i, 1) NEXT i DIM compt$(1) FOR i = 0 TO narg IF MID$(arg$(i), 1, 3) = "/F=" THEN file$ = RIGHT$(arg$(i), LEN(arg$(i)) - 3) IF MID$(arg$(i), 1, 3) = "/D=" THEN delay& = VAL(RIGHT$(arg$(i), LEN(arg$(i)) - 3)) IF MID$(arg$(i), 1, 3) = "/T=" THEN table$ = RIGHT$(arg$(i), LEN(arg$(i)) - 3) IF MID$(arg$(i), 1, 3) = "/C=" THEN conff$ = RIGHT$(arg$(i), LEN(arg$(i)) - 3) IF MID$(arg$(i), 1, 4) = "/CN=" THEN c = 0 FOR z = 5 TO LEN(arg$(i)) IF MID$(arg$(i), z, 1) = "," THEN c = c + 1 ELSE compt$(c) = compt$(c) + MID$(arg$(i), z, 1) NEXT z END IF NEXT i faible = VAL(compt$(1)) IF LEN(compt$(0)) >= 2 THEN fort& = VAL(LEFT$(compt$(0), LEN(compt$(0)) - 1)) IF RIGHT$(compt$(0), 1) = "M" THEN fort& = fort& * 2 ^ 20 IF RIGHT$(compt$(0), 1) = "K" THEN fort& = fort& * 2 ^ 10 'PRINT file$; fort&; faible; delay&; table$; conff$: END IF conff$ = "L" THEN GOTO 1 IF conff$ = "G" THEN GOTO 2 ELSE GOTO 666 '---------------------------------------------------------------------------- '---------------------------------------------------------------------------- 'LECTURE '---------------------------------------------------------------------------- 1 OPEN file$ FOR OUTPUT AS #1 CLOSE #1 OPEN file$ FOR BINARY AS #1 IF table$ <> "" THEN 'PROJET - ne pas utiliser OPEN table$ FOR BINARY AS #2 DIM tabl(38) FOR tt = 0 TO 38 GET #2, tt + 1, one$ tabl(tt) = ASC(one$) NEXT tt CLOSE #2 IF fort& > lim& THEN bmp$ = STRING$(lim&, 0) cycle& = INT(fort& / lim&) reste& = fort& - cycle& * lim& FOR yi& = 1 TO cycle& 'cycle PUT #1, LOF(1) + 1, bmp$ NEXT yi& bmp$ = STRING$(reste&, 0) 'reste PUT #1, LOF(1) + 1, bmp$ ELSE bmp$ = STRING$(fort&, 0) PUT #1, LOF(1) + 1, bmp$ END IF END IF OUT s, &H70 'reset les compteurs 'CALL tempo(delay&) 'SLEEP PRINT "BITS A DUMPER:"; fort&; "x"; faible; "bits" xlin = CSRLIN - 1 PRINT "PROGRESSION:" IF faible = 8 THEN tosend = &HB0 ELSE tosend = &H30 FOR i& = 1 TO fort& LOCATE xlin, 13: PRINT i& - 1; "/"; fort& 'PRINT CLNG((i& / fort&) * 100); "%" IF faible = 16 THEN lchar = 0 FOR re = 0 TO 7 OUT s, tosend + re + 8 'CALL tempo(delay&) l = INP(e) AND isol 'CALL tempo(delay&) IF l <> isol THEN lchar = lchar + 2 ^ re NEXT re lchar$ = STRING$(1, lchar) PUT #1, LOF(1) + 1, lchar$ END IF lchar = 0 FOR re = 0 TO 7 OUT s, tosend + re 'CALL tempo(delay&) l = INP(e) AND isol 'CALL tempo(delay&) IF l <> isol THEN lchar = lchar + 2 ^ re NEXT re lchar$ = STRING$(1, lchar) PUT #1, LOF(1) + 1, lchar$ 'SLEEP IF i& MOD 4096 = 0 THEN OUT s, tosend AND &HCF 'inc faible+fort 'CALL tempo(delay&) ' ELSE OUT s, tosend AND &HEF 'inc faible 'CALL tempo(delay&) ' END IF 'SLEEP OUT s, tosend 'return to idle state 'CALL tempo(delay&) ' NEXT i& GOTO 999 '---------------------------------------------------------------------------- '---------------------------------------------------------------------------- 'ECRITURE '---------------------------------------------------------------------------- 2 PRINT "PARTIE EN TRAVAUX": GOTO 999 OPEN file$ FOR BINARY AS #1 OUT s, 0 'initialise OUT io, 0 'reset les compteurs CALL tempo(delay&) PRINT "BYTES A GRAVER:"; LOF(1); "bytes" xlin = CSRLIN - 1 PRINT "PROGRESSION:" tosend = &H8 FOR i& = 1 TO LOF(1) LOCATE xlin, 13: PRINT CLNG((i& / LOF(1)) * 100); "%" GET #1, i&, one$ OUT s, ASC(one$) OUT io, tosend + 4 'autorise l'‚criture CALL tempo(delay&) OUT io, tosend 'return to idle state CALL tempo(delay&) IF i& MOD 4096 = 0 THEN OUT s, tosend - 3 'inc faible+fort CALL tempo(delay&) ' ELSE OUT s, tosend - 1 'inc faible CALL tempo(delay&) ' END IF OUT s, tosend 'return to idle state CALL tempo(delay&) ' NEXT i& GOTO 999 '---------------------------------------------------------------------------- 666 'hell in there... PRINT "rom/ram reader/writer v1.3 - 30/08/2004" PRINT "" PRINT " /c=x x=l -> config lecteur." PRINT " x=g -> config graveur." PRINT " /f=x fichier … utiliser (attention, efface sans pr‚venir !)." PRINT " /d=x d‚lai (d=0 -> vitesse max)." PRINT " defaut: delay&=0." PRINT " /cn=x,y compteur normalis‚ (ne sert … rien en mode graveur)." PRINT " ie: cn=x[suffixe],y , avec x en [m]ega, [k]ilo, [b]it … compter." PRINT " y en bit … dumper." PRINT " ex: cn=512k,8 -> dump 512kB." PRINT " ex: cn=1m,16 -> dump 1mw (mega-word) (=16megabit GENESIS rom)." PRINT " ex: cn=2m,8 -> dump 2mB (=16megabit SNES rom)." PRINT " ex: cn=256b,8 -> dump 256bytes." PRINT " tip: pour sp‚cifier une valeur non normalis‚e, restez en mode bit." PRINT " ex: cn=128000b,8 -> dump 128000Bytes." 999 CLOSE OUT s, &H70 'reset les compteurs OUT io, 0 END SUB tempo (delay&) FOR i& = 0 TO delay& NEXT i& END SUB