mifwrite.javaDownload readbin.zip.
This program reads a binary executable file and generates a mif
format file. It uses
readbin.java to actually
read the input file.
// mifwrite.java
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
public class mifwrite
{
public static void main(String args[])
{
String filename;
Scanner inp = new Scanner(System.in);
if (args.length>0) filename = args[0];
else {
System.out.print("Enter input (bin) file name: ");
filename = inp.nextLine();
}
readbin bin = new readbin();
boolean found = bin.open(filename);
if (!found) System.exit( -1 );
if (args.length>1) filename = args[1];
else {
System.out.print("Enter output (mif) file name: ");
filename = inp.nextLine();
}
int offset = 0;
if (args.length>2) offset = (int) Long.parseLong(args[2],16);
mifwrite mif = new mifwrite();
if (!mif.open(filename)) System.exit(-1);
mif.write(bin,offset);
}
private Formatter output;
public boolean open(String filename)
{
try {
output = new Formatter(filename);
}
catch (FileNotFoundException e) {
System.err.println("Error opening file: " + filename);
return false;
}
catch (SecurityException e) {
System.err.println("You do not have access to this file: " + filename);
return false;
}
return true;
}
public void write(readbin bin, int offset)
{
int address, contents;
boolean first = true;
int ndepth = 256;
int nwidth = 32;
output.format("DEPTH = %d;\n",ndepth);
output.format("WIDTH = %d;\n\n",nwidth);
output.format("ADDRESS_RADIX = HEX;\n");
output.format("DATA_RADIX = HEX;\n");
address = 0;
offset = offset>>2;
while (bin.hasNext()) {
if (address<offset) {
offset--;
continue;
}
if (first) {
first = false;
//System.out.printf("\n-- address_offset %x\n\n",address_offset);
output.format("CONTENTS\n BEGIN\n");
output.format("[0..%x] : 0;\n",ndepth-1);
}
contents = bin.getInt();
output.format("%04x : %08x;\n",address,contents);
address++;
if (address>=ndepth) break;
}
output.format("END;\n");
output.close();
}
}
Maintained by John Loomis, updated Sun Feb 04 21:34:56 2007