⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.java

📁 Java Op Processor java vhdl processor
💻 JAVA
字号:
/***	Flash programming via TFTP.**	For new jopcore board with 512 KB flash.**	three file types:**		.ttf	ACEX config start at 0x60000*				Cyclone config start at 0x40000*		.bin	Java files start at 0x10000		(history of BB project)*		.html	start at 0x00000*		.class	start at 0x30000 (for Applet Tal.class)**	Flash overview (in 64 KB sectors):**		0x00000 :	Java program*		0x10000 :	HTML or longer Java program*		0x20000 :	user data, Streckendaten in oebb BG263*		0x30000 :	Applet for TAL, bgid in oebb*		0x40000 :	CYC config*		0x50000 :	CYC config*		0x60000 :	ACX, CYC config*		0x70000 :	ACX, CYC config*/package udp;import java.io.*;import java.util.*;public class Flash extends FlashConst {	protected static final int FLASH_SIZE = 0x80000;	protected static final int SECTOR_SIZE = 0x10000;	protected static final int SECTOR_MASKx = 0xf0000;	protected static final int SECTOR_SHIFT = 16;	protected static final int MAX_ACEX = 32768*3;	// 96kB (acex 1k50)	protected static final int MAX_MEM = 65536*4;		// 256kB (Cyclone)	protected static final int MAX_JAVA = 16384*4*2;	// max. 128KB	protected static final int MAX_HTML = 1024;		// max. 1KB	protected static final int START_JAVA = 0x00000;	protected static final int START_HTML = 0x10000;	protected static final int START_DATA = 0x20000;	protected static final int START_CONFIG = 0x30000;	protected static final int START_ACX_TTF = 0x60000;	protected static final int START_CYC_TTF = 0x40000;		protected int start;	protected String fname;	protected byte[] mem;	protected int len;	private Tftp tftp;	public Flash(Tftp t, String fname) {		tftp = t;		this.fname = fname;		mem = new byte[MAX_MEM];		for (int i=0; i<MAX_MEM; ++i) mem[i] = (byte) 0xff;	}	public void read() {		String line;		StringTokenizer st;		int pos;		boolean isTtf = false;		boolean isJava = false;		boolean isHtml = false;		boolean isAppl = false;		int byteCnt = 0;		len = 0;		try {			File f = new File(fname);			String s = f.getName();			pos = s.indexOf('.');			if (pos==-1) {				System.out.println("wrong filename");				System.exit(-1);			}			s = s.substring(pos);			if (s.equals(".jop") || s.equals(".bin")) {				isJava = true;				start= START_JAVA;			} else if (s.equals(".html")) {				isHtml = true;				start= START_HTML;			} else if (s.equals(".class")) {				isAppl = true;				start= START_CONFIG;			} else if (s.equals(".ttf")) {				isTtf = true;				// TODO: should be changed to an option				start= START_ACX_TTF;		// assume a file for Jopcore (ACEX)			} else {				System.out.println("wrong file type: '"+s+"'");				System.exit(-1);			}			if (isJava || isTtf) {				BufferedReader in = new BufferedReader(new FileReader(f));				while ((line = in.readLine()) != null) {					if ((pos = line.indexOf('/'))!=-1) {						st = new StringTokenizer(line.substring(0, pos), " \t\n\r\f,");					} else {						st = new StringTokenizer(line, " \t\n\r\f,");					}					while (st.hasMoreTokens()) {						int val = Integer.parseInt(st.nextToken());							if (isJava) {							mem[len++] = (byte) (val>>>24);							mem[len++] = (byte) (val>>>16);							mem[len++] = (byte) (val>>>8);							mem[len++] = (byte) val;						} else {							mem[len++] = (byte) val;						}							if (len==MAX_MEM) {							System.out.println("too many words");							System.exit(-1);						}						if (isJava && len==MAX_JAVA) {							System.out.println("too many words for this Flash");							System.exit(-1);						}					}				}				in.close();				if (len>MAX_ACEX) {							// file is big, so it must be for Cyclone					start= START_CYC_TTF;					// change start address				}			} else {					// 'binary' file				InputStream in = new FileInputStream(f);				len = in.read(mem);				if (in.available()!=0) {					System.out.println("file to long");					System.exit(-1);				}				if (isHtml) {					mem[len] = 0;			// end character for html files					++len;				} else if (isAppl) {		// length of class file in first two bytes					for (int i=len-1; i>=0; --i) {						mem[i+2] = mem[i];					}					mem[0] = (byte) (len>>>8);					mem[1] = (byte) len;					len += 2;				}			}		} catch (IOException e) {			System.out.println(e.getMessage());			System.exit(-1);		}		System.out.println(len+" bytes to program");	}	public void program() {		int i, j;		byte[] buf = new byte[SECTOR_SIZE];		byte[] inbuf = new byte[SECTOR_SIZE];		for (i=0; i<len; i+=SECTOR_SIZE) {			int slen = SECTOR_SIZE;			if (len-i<slen) slen = len-i;			System.out.println("programming");			for (j=0; j<slen ; ++j) {				buf[j] = mem[i+j];			}			byte s = (byte) ('0'+((i+start)>>SECTOR_SHIFT));System.out.println("sector "+(s-'0'));			try {				if (!tftp.write((byte) 'f', (byte) s, buf, slen)) {					System.out.println();					System.out.println("programming error");					System.exit(-1);				}				System.out.println();				System.out.println("compare");				if (tftp.read((byte) 'f', s, inbuf)!=SECTOR_SIZE) {					System.out.println();					System.out.println("read error");					System.exit(-1);				}			} catch (Exception e) {				System.out.println(e);				System.exit(-1);			}			for (j=0; j<slen; ++j) {				if (buf[j] != inbuf[j]) {					System.out.println("wrong data: "+(i+j)+" "+buf[j]+" "+inbuf[j]);					System.exit(-1);				}			}		}		System.out.println("programming ok");	}	public static void main (String[] args) {		if (args.length < 2) {			System.out.println("usage: java Flash file host");			System.exit(-1);		}		Flash fl = new Flash(new Tftp(args[1]), args[0]);		fl.read();		fl.program();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -