# Die fünf Megamodul-ROMs von Volker Pohlers zerlegen # Ergebnis ist EINE Firmwaredatei # AUTOR: Ulrich Zander # DATUM: 22.05.2021 # # *** Testversion # #!/usr/bin/perl -w use Cwd; use strict; # Parameter 1 # 1. Teilen der fünf 512K-EPROM-Dateien (rom1...rom5) in 256 Teile # 2. Zusammenfügen einer Bankdatei a 10K aus je einer Teildatei der fünf Blöcke a 256 Teile # 3. Zusammenfügen der 256 1K-Bankdateien zur Gesamtdatei # Parameter 2 # 4. Zerlegen der Gesamtdatei in 256 Bankdateien a 10K # 5. Zusammenfügen von jeweils fünf 2K-Bereichen aus den Bankdateien zu je einer 512K-EPROM-Datei # # globale Variable # romdatei sind die 5 EPROM-Dateien # teildatei sind die 5x256 2K-Dateien # bankdatei sind die 256 10K-Bankdateien # xdir Verzeichnis mit den EPROM-Dateien my (@verzeichnis, $romdatei, $teildatei, $bankdatei, $xdir, $outdir, $bankdir, $megadir, $megadatei, $i, $j, $k, $tok); $xdir = "./rom"; $outdir = "./teile"; $teildatei = "rom"; $bankdir = "./bank"; $bankdatei = "bank"; $megadir = "./mega"; $megadatei = "mega.bin"; mkdir $outdir; mkdir $bankdir; mkdir $megadir; # 1. Dateien im Verzeichnis ermitteln und in 2K-Teile teilen opendir(DIR, "$xdir"); @verzeichnis = sort readdir(DIR); closedir(DIR); $i = "0"; # Anzahl der 2K-Dateien je ROM-Datei foreach $romdatei (@verzeichnis) { next if ($romdatei eq "."); next if ($romdatei eq ".."); # print "$romdatei\n" ; print "." ; $i++; if ("$i" eq "256") { $i = "000" }; system " split -d -a 3 -b 2048 $xdir/$romdatei $outdir/$teildatei$i\_"; # -d=dezimal, -a=Stellenanzahl, -b=Größe } print "\n1280 ROM-Dateien erstellt\n"; # 2. 2K-Dateien zusammenfügen in 10K opendir(DIR, "$outdir"); @verzeichnis = sort readdir(DIR); closedir(DIR); $i = "0"; # Anzahl der 2K-Dateien je Bank (5) $j = "000"; # Anzahl der Bänke (256) $k = "0"; # romi_jjj foreach $teildatei (@verzeichnis) # 1280 Teildateien, je 256 der 5 ROMs { next if ($teildatei eq "."); next if ($teildatei eq ".."); $i++; system "cat $outdir/rom$i\_$j > $bankdir/$bankdatei$j"; $i++; system "cat $outdir/rom$i\_$j >> $bankdir/$bankdatei$j"; $i++; system "cat $outdir/rom$i\_$j >> $bankdir/$bankdatei$j"; $i++; system "cat $outdir/rom$i\_$j >> $bankdir/$bankdatei$j"; $i++; # print "$i $j $outdir/rom$i\_$j\n" ; print "." ; system "cat $outdir/rom$i\_$j >> $bankdir/$bankdatei$j"; $i++; if ($i eq "6") { $i = "0", $j++; } if ("$j" eq "256") { print "\n256 Bankdateien erstellt\n"; goto weiter; }; } weiter: # 3. 10K-Dateien zusammenfügen zur Megadatei opendir(DIR, "$bankdir"); @verzeichnis = sort readdir(DIR); closedir(DIR); unlink "$megadir/$megadatei"; $i = "000"; foreach $bankdatei (@verzeichnis) # 256 Bankdateien a 10K { next if ($bankdatei eq "."); next if ($bankdatei eq ".."); # print "$i $bankdatei\n" ; print "." ; system " cat $bankdir/$bankdatei >> $megadir/$megadatei" ; if ("$i" eq "255") { goto end; }; $i++; } end: print "\nMegadatei mega.bin erstellt.\n"; # end perl