- Register dictionary updated (using Reflection)
- Support for 332/555 git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@47 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
This commit is contained in:
32
mcdp/src/ch/ntb/mcdp/dict/Register.java
Normal file
32
mcdp/src/ch/ntb/mcdp/dict/Register.java
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package ch.ntb.mcdp.dict;
|
||||||
|
|
||||||
|
public class Register {
|
||||||
|
|
||||||
|
// Register Types
|
||||||
|
public static String[] types = null;
|
||||||
|
|
||||||
|
public Register(String name, int type, int value, int size,
|
||||||
|
String description) {
|
||||||
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
|
this.value = value;
|
||||||
|
this.size = size;
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final String name;
|
||||||
|
|
||||||
|
public final int type;
|
||||||
|
|
||||||
|
public final int value;
|
||||||
|
|
||||||
|
public final int size;
|
||||||
|
|
||||||
|
public final String description;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return new String(name + "\t" + types[type] + "\t0x"
|
||||||
|
+ Integer.toHexString(value) + "\t" + size + "\t" + description);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,18 +1,14 @@
|
|||||||
package ch.ntb.mcdp.mc68332;
|
package ch.ntb.mcdp.dict;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStreamWriter;
|
import java.lang.reflect.Constructor;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import javax.xml.parsers.SAXParser;
|
|
||||||
import javax.xml.parsers.SAXParserFactory;
|
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.NamedNodeMap;
|
import org.w3c.dom.NamedNodeMap;
|
||||||
@@ -21,11 +17,12 @@ import org.w3c.dom.NodeList;
|
|||||||
import org.xml.sax.ErrorHandler;
|
import org.xml.sax.ErrorHandler;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import org.xml.sax.SAXParseException;
|
import org.xml.sax.SAXParseException;
|
||||||
import org.xml.sax.helpers.DefaultHandler;
|
|
||||||
|
|
||||||
public class RegisterDict {
|
public abstract class RegisterDict {
|
||||||
|
|
||||||
private static LinkedList<Register> registers;
|
private LinkedList registers;
|
||||||
|
|
||||||
|
private Class regClass;
|
||||||
|
|
||||||
private static final long serialVersionUID = -582382284126896830L;
|
private static final long serialVersionUID = -582382284126896830L;
|
||||||
|
|
||||||
@@ -43,80 +40,41 @@ public class RegisterDict {
|
|||||||
|
|
||||||
private static final String REG_ATTR_TYPE = "type";
|
private static final String REG_ATTR_TYPE = "type";
|
||||||
|
|
||||||
private static final String REG_ATTR_OFFSET = "offset";
|
private static final String REG_ATTR_VALUE = "value";
|
||||||
|
|
||||||
private static final String REG_ATTR_SIZE = "size";
|
private static final String REG_ATTR_SIZE = "size";
|
||||||
|
|
||||||
private static final String REG_ATTR_TYPE_CTRLREG = "CtrlReg";
|
protected RegisterDict(String registerClass) {
|
||||||
|
|
||||||
private static final String REG_ATTR_TYPE_USERREG = "UserReg";
|
|
||||||
|
|
||||||
private static final String REG_ATTR_TYPE_SYSREG = "SysReg";
|
|
||||||
|
|
||||||
static {
|
|
||||||
registers = new LinkedList<Register>();
|
|
||||||
|
|
||||||
// data registers
|
|
||||||
add("D0", Register.UserReg, 0x0, 4, "data register 0");
|
|
||||||
add("D1", Register.UserReg, 0x1, 4, "data register 1");
|
|
||||||
add("D2", Register.UserReg, 0x2, 4, "data register 2");
|
|
||||||
add("D3", Register.UserReg, 0x3, 4, "data register 3");
|
|
||||||
add("D4", Register.UserReg, 0x4, 4, "data register 4");
|
|
||||||
add("D5", Register.UserReg, 0x5, 4, "data register 5");
|
|
||||||
add("D6", Register.UserReg, 0x6, 4, "data register 6");
|
|
||||||
add("D7", Register.UserReg, 0x7, 4, "data register 7");
|
|
||||||
|
|
||||||
// address registers
|
|
||||||
add("A0", Register.UserReg, 0x8, 4, "address register 0");
|
|
||||||
add("A1", Register.UserReg, 0x9, 4, "address register 1");
|
|
||||||
add("A2", Register.UserReg, 0xA, 4, "address register 2");
|
|
||||||
add("A3", Register.UserReg, 0xB, 4, "address register 3");
|
|
||||||
add("A4", Register.UserReg, 0xC, 4, "address register 4");
|
|
||||||
add("A5", Register.UserReg, 0xD, 4, "address register 5");
|
|
||||||
add("A6", Register.UserReg, 0xE, 4, "address register 6");
|
|
||||||
add("A7", Register.UserReg, 0xF, 4, "address register 7");
|
|
||||||
|
|
||||||
// system registers
|
|
||||||
add("RPC", Register.SysReg, 0x0, 4, "return program counter");
|
|
||||||
add("PCC", Register.SysReg, 0x1, 4,
|
|
||||||
"current instruction program counter");
|
|
||||||
add("SR", Register.SysReg, 0xB, 2, "status register");
|
|
||||||
add("USP", Register.SysReg, 0xC, 4, "user stack pointer (A7)");
|
|
||||||
add("SSP", Register.SysReg, 0xD, 4, "supervisor stack pointer");
|
|
||||||
add("SFC", Register.SysReg, 0xE, 4, "source function code register");
|
|
||||||
add("DFC", Register.SysReg, 0xF, 4,
|
|
||||||
"destination function code register");
|
|
||||||
add("ATEMP", Register.SysReg, 0x8, 4, "temporary register A");
|
|
||||||
add("FAR", Register.SysReg, 0x9, 4, "fault address register");
|
|
||||||
add("VBR", Register.SysReg, 0xA, 4, "vector base register");
|
|
||||||
|
|
||||||
// TODO: remove
|
|
||||||
try {
|
try {
|
||||||
addRegistersFromFile("resources/targets/mc68332/registerDictionary.xml");
|
this.regClass = Class.forName(registerClass);
|
||||||
} catch (IOException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (ParserConfigurationException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (SAXException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
this.registers = new LinkedList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void add(String name, int type, int addr, int size,
|
@SuppressWarnings("unchecked")
|
||||||
|
protected void add(String name, int type, int value, int size,
|
||||||
String description) {
|
String description) {
|
||||||
// remove before add for updates
|
// remove before add for updates
|
||||||
for (Iterator<Register> i = registers.iterator(); i.hasNext();) {
|
for (Iterator i = registers.iterator(); i.hasNext();) {
|
||||||
if (i.next().name.equals(name)) {
|
if (((Register)i.next()).name.equals(name)) {
|
||||||
i.remove();
|
i.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
registers.add(new Register(name, type, addr, size, description));
|
Constructor[] regConstructors = regClass.getDeclaredConstructors();
|
||||||
|
Register reg = null;
|
||||||
|
try {
|
||||||
|
reg = (Register) regConstructors[0].newInstance(name, type, value, size, description);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
registers.add(reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int parseInt(String s) {
|
protected int parseInt(String s) {
|
||||||
if (s == "")
|
if (s == "")
|
||||||
return 0;
|
return 0;
|
||||||
if (s.indexOf('x') > 0) {
|
if (s.indexOf('x') > 0) {
|
||||||
@@ -136,9 +94,9 @@ public class RegisterDict {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Register getRegister(String name) {
|
public Register getRegister(String name) {
|
||||||
for (Iterator<Register> i = registers.iterator(); i.hasNext();) {
|
for (Iterator i = registers.iterator(); i.hasNext();) {
|
||||||
Register r = i.next();
|
Register r = (Register) i.next();
|
||||||
if (r.name.equals(name)) {
|
if (r.name.equals(name)) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@@ -146,31 +104,15 @@ public class RegisterDict {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void printRegisters() {
|
public void printRegisters() {
|
||||||
System.out
|
System.out
|
||||||
.println("******************** register dictionary *********************");
|
.println("******************** register dictionary *********************");
|
||||||
System.out.println("Name \t Type \t\t Address \t Size \t Description");
|
System.out.println("Name\tType\tAddress\tSize\tDescription");
|
||||||
System.out
|
System.out
|
||||||
.println("**************************************************************");
|
.println("**************************************************************");
|
||||||
for (Iterator<Register> i = registers.iterator(); i.hasNext();) {
|
for (Iterator i = registers.iterator(); i.hasNext();) {
|
||||||
Register r = i.next();
|
Register r = (Register) i.next();
|
||||||
String type;
|
System.out.println(r.toString());
|
||||||
switch (r.type) {
|
|
||||||
case Register.CtrReg:
|
|
||||||
type = "CtrReg";
|
|
||||||
break;
|
|
||||||
case Register.SysReg:
|
|
||||||
type = "SysReg";
|
|
||||||
break;
|
|
||||||
case Register.UserReg:
|
|
||||||
type = "UserReg";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
type = Integer.toString(r.type);
|
|
||||||
}
|
|
||||||
System.out.println(r.name + "\t" + type + "\t\t0x"
|
|
||||||
+ Integer.toHexString(r.addr) + "\t\t" + r.size + "\t"
|
|
||||||
+ r.description);
|
|
||||||
}
|
}
|
||||||
System.out
|
System.out
|
||||||
.println("**************************************************************");
|
.println("**************************************************************");
|
||||||
@@ -189,8 +131,8 @@ public class RegisterDict {
|
|||||||
* @throws ParserConfigurationException
|
* @throws ParserConfigurationException
|
||||||
* @throws SAXException
|
* @throws SAXException
|
||||||
*/
|
*/
|
||||||
public static void addRegistersFromFile(String xmlPathname)
|
public void addRegistersFromFile(String xmlPathname) throws IOException,
|
||||||
throws IOException, ParserConfigurationException, SAXException {
|
ParserConfigurationException, SAXException {
|
||||||
Document document;
|
Document document;
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
factory.setValidating(true);
|
factory.setValidating(true);
|
||||||
@@ -206,7 +148,7 @@ public class RegisterDict {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
// treat warnings errors as fatal error
|
// treat warnings as fatal error
|
||||||
public void warning(SAXParseException e) throws SAXParseException {
|
public void warning(SAXParseException e) throws SAXParseException {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
@@ -228,12 +170,34 @@ public class RegisterDict {
|
|||||||
parseRegisterGroup(list.item(j), baseAddr);
|
parseRegisterGroup(list.item(j), baseAddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (list.item(j).getNodeName().equals(REGISTER)) {
|
||||||
|
NamedNodeMap attributes = list.item(j).getAttributes();
|
||||||
|
// attributes: name, type, offset, size
|
||||||
|
Node n = attributes.getNamedItem(REG_ATTR_NAME);
|
||||||
|
String name = n.getNodeValue();
|
||||||
|
n = attributes.getNamedItem(REG_ATTR_TYPE);
|
||||||
|
String typeStr = n.getNodeValue();
|
||||||
|
int type = convertType(typeStr);
|
||||||
|
n = attributes.getNamedItem(REG_ATTR_VALUE);
|
||||||
|
int value = parseInt(n.getNodeValue());
|
||||||
|
n = attributes.getNamedItem(REG_ATTR_SIZE);
|
||||||
|
int size = parseInt(n.getNodeValue());
|
||||||
|
parseRegister(list.item(j), name, type, value, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseRegisterGroup(Node registerGroup, int baseAddr)
|
protected int convertType(String typeStr) throws SAXException {
|
||||||
|
for (int index = 0; index < Register.types.length; index++) {
|
||||||
|
if (typeStr.equals(Register.types[index])) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new SAXException("invalid register definition: " + typeStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parseRegisterGroup(Node registerGroup, int baseAddr)
|
||||||
throws SAXException {
|
throws SAXException {
|
||||||
NodeList list = registerGroup.getChildNodes();
|
NodeList list = registerGroup.getChildNodes();
|
||||||
for (int i = 0; i < list.getLength(); i++) {
|
for (int i = 0; i < list.getLength(); i++) {
|
||||||
@@ -244,18 +208,8 @@ public class RegisterDict {
|
|||||||
String name = n.getNodeValue();
|
String name = n.getNodeValue();
|
||||||
n = attributes.getNamedItem(REG_ATTR_TYPE);
|
n = attributes.getNamedItem(REG_ATTR_TYPE);
|
||||||
String typeStr = n.getNodeValue();
|
String typeStr = n.getNodeValue();
|
||||||
int type;
|
int type = convertType(typeStr);
|
||||||
if (typeStr.equals(REG_ATTR_TYPE_CTRLREG)) {
|
n = attributes.getNamedItem(REG_ATTR_VALUE);
|
||||||
type = Register.CtrReg;
|
|
||||||
} else if (typeStr.equals(REG_ATTR_TYPE_SYSREG)) {
|
|
||||||
type = Register.SysReg;
|
|
||||||
} else if (typeStr.equals(REG_ATTR_TYPE_USERREG)) {
|
|
||||||
type = Register.UserReg;
|
|
||||||
} else {
|
|
||||||
throw new SAXException("invalid register definition: "
|
|
||||||
+ list.item(i).getNodeName());
|
|
||||||
}
|
|
||||||
n = attributes.getNamedItem(REG_ATTR_OFFSET);
|
|
||||||
int offset = parseInt(n.getNodeValue());
|
int offset = parseInt(n.getNodeValue());
|
||||||
n = attributes.getNamedItem(REG_ATTR_SIZE);
|
n = attributes.getNamedItem(REG_ATTR_SIZE);
|
||||||
int size = parseInt(n.getNodeValue());
|
int size = parseInt(n.getNodeValue());
|
||||||
@@ -265,8 +219,8 @@ public class RegisterDict {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseRegister(Node register, String name, int type,
|
private void parseRegister(Node register, String name, int type, int addr,
|
||||||
int addr, int size) throws SAXException {
|
int size) throws SAXException {
|
||||||
NodeList list = register.getChildNodes();
|
NodeList list = register.getChildNodes();
|
||||||
String description = "";
|
String description = "";
|
||||||
for (int i = 0; i < list.getLength(); i++) {
|
for (int i = 0; i < list.getLength(); i++) {
|
||||||
@@ -7,24 +7,23 @@ import ch.ntb.usb.USBException;
|
|||||||
|
|
||||||
public class IMCBTargetBoard {
|
public class IMCBTargetBoard {
|
||||||
|
|
||||||
|
static MC68332RegisterDict regDict = new MC68332RegisterDict();
|
||||||
|
|
||||||
private static void writeRegister(String name, int value)
|
private static void writeRegister(String name, int value)
|
||||||
throws USBException, DispatchException, BDIException {
|
throws USBException, DispatchException, BDIException {
|
||||||
System.out.println("0x" + Integer.toHexString(readRegister(name)));
|
System.out.println("0x" + Integer.toHexString(readRegister(name)));
|
||||||
System.out.println("writeRegister: " + name + ", value: 0x"
|
System.out.println("writeRegister: " + name + ", value: 0x"
|
||||||
+ Integer.toHexString(value));
|
+ Integer.toHexString(value));
|
||||||
Register r = RegisterDict.getRegister(name);
|
MC68332Register r = (MC68332Register) regDict.getRegister(name);
|
||||||
switch (r.type) {
|
switch (r.type) {
|
||||||
case Register.CtrReg:
|
case MC68332Register.CtrlReg:
|
||||||
System.out.println("writeMem");
|
MC68332.writeMem(r.value, value, r.size);
|
||||||
MC68332.writeMem(r.addr, value, r.size);
|
|
||||||
break;
|
break;
|
||||||
case Register.SysReg:
|
case MC68332Register.SysReg:
|
||||||
System.out.println("writeSysReg");
|
MC68332.writeSysReg(r.value, value);
|
||||||
MC68332.writeSysReg(r.addr, value);
|
|
||||||
break;
|
break;
|
||||||
case Register.UserReg:
|
case MC68332Register.UserReg:
|
||||||
System.out.println("writeUserReg");
|
MC68332.writeUserReg(r.value, value);
|
||||||
MC68332.writeUserReg(r.addr, value);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
System.out.println("0x" + Integer.toHexString(readRegister(name)));
|
System.out.println("0x" + Integer.toHexString(readRegister(name)));
|
||||||
@@ -33,17 +32,14 @@ public class IMCBTargetBoard {
|
|||||||
private static int readRegister(String name) throws USBException,
|
private static int readRegister(String name) throws USBException,
|
||||||
DispatchException, BDIException {
|
DispatchException, BDIException {
|
||||||
System.out.print("readRegister: " + name);
|
System.out.print("readRegister: " + name);
|
||||||
Register r = RegisterDict.getRegister(name);
|
MC68332Register r = (MC68332Register) regDict.getRegister(name);
|
||||||
switch (r.type) {
|
switch (r.type) {
|
||||||
case Register.CtrReg:
|
case MC68332Register.CtrlReg:
|
||||||
System.out.println("\treadMem");
|
return MC68332.readMem(r.value, r.size);
|
||||||
return MC68332.readMem(r.addr, r.size);
|
case MC68332Register.SysReg:
|
||||||
case Register.SysReg:
|
return MC68332.readSysReg(r.value);
|
||||||
System.out.println("\treadSysReg");
|
case MC68332Register.UserReg:
|
||||||
return MC68332.readSysReg(r.addr);
|
return MC68332.readUserReg(r.value);
|
||||||
case Register.UserReg:
|
|
||||||
System.out.println("\treadUserReg");
|
|
||||||
return MC68332.readUserReg(r.addr);
|
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -52,8 +48,8 @@ public class IMCBTargetBoard {
|
|||||||
BDIException {
|
BDIException {
|
||||||
|
|
||||||
MC68332.reset_target();
|
MC68332.reset_target();
|
||||||
|
|
||||||
// RegisterDict.printRegisters();
|
// regDict.printRegisters();
|
||||||
|
|
||||||
writeRegister("SR", 0x2700);
|
writeRegister("SR", 0x2700);
|
||||||
writeRegister("SFC", 0x05);
|
writeRegister("SFC", 0x05);
|
||||||
|
|||||||
28
mcdp/src/ch/ntb/mcdp/mc68332/MC68332Register.java
Normal file
28
mcdp/src/ch/ntb/mcdp/mc68332/MC68332Register.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package ch.ntb.mcdp.mc68332;
|
||||||
|
|
||||||
|
import ch.ntb.mcdp.dict.Register;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For system and user registers the <code>value</code> value is used as BDI
|
||||||
|
* specific identifier (code specific to each register from the Technical
|
||||||
|
* Reference Manual).
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class MC68332Register extends Register {
|
||||||
|
|
||||||
|
// Register Types
|
||||||
|
static {
|
||||||
|
types = new String[] { "UserReg", "SysReg", "CtrlReg" };
|
||||||
|
}
|
||||||
|
|
||||||
|
static final int UserReg = 0;
|
||||||
|
|
||||||
|
static final int SysReg = 1;
|
||||||
|
|
||||||
|
static final int CtrlReg = 2;
|
||||||
|
|
||||||
|
public MC68332Register(String name, int type, int value, int size,
|
||||||
|
String description) {
|
||||||
|
super(name, type, value, size, description);
|
||||||
|
}
|
||||||
|
}
|
||||||
35
mcdp/src/ch/ntb/mcdp/mc68332/MC68332RegisterDict.java
Normal file
35
mcdp/src/ch/ntb/mcdp/mc68332/MC68332RegisterDict.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package ch.ntb.mcdp.mc68332;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import ch.ntb.mcdp.dict.RegisterDict;
|
||||||
|
|
||||||
|
public class MC68332RegisterDict extends RegisterDict {
|
||||||
|
|
||||||
|
private static final String REGISTER_CLASS = "ch.ntb.mcdp.mc68332.MC68332Register";
|
||||||
|
|
||||||
|
private static final String PATH_TO_REGISTER_FILE = "resources/targets/mc68332/registerDictionary.xml";
|
||||||
|
|
||||||
|
MC68332RegisterDict() {
|
||||||
|
super(REGISTER_CLASS);
|
||||||
|
|
||||||
|
// TODO: remove
|
||||||
|
try {
|
||||||
|
addRegistersFromFile(PATH_TO_REGISTER_FILE);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ParserConfigurationException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (SAXException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
printRegisters();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
package ch.ntb.mcdp.mc68332;
|
|
||||||
|
|
||||||
class Register {
|
|
||||||
|
|
||||||
public final static int UserReg = 0;
|
|
||||||
|
|
||||||
public final static int SysReg = 1;
|
|
||||||
|
|
||||||
public final static int CtrReg = 2;
|
|
||||||
|
|
||||||
Register(String name, int type, int addr, int size, String description) {
|
|
||||||
this.name = name;
|
|
||||||
this.type = type;
|
|
||||||
this.addr = addr;
|
|
||||||
this.size = size;
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String name;
|
|
||||||
|
|
||||||
public final int type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Absolute address of this register. <br>
|
|
||||||
* For system and user register this value is used as BDI specific
|
|
||||||
* identifier.
|
|
||||||
*/
|
|
||||||
public final int addr;
|
|
||||||
|
|
||||||
public final int size;
|
|
||||||
|
|
||||||
public final String description;
|
|
||||||
}
|
|
||||||
29
mcdp/src/ch/ntb/mcdp/mpc555/MPC555Register.java
Normal file
29
mcdp/src/ch/ntb/mcdp/mpc555/MPC555Register.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package ch.ntb.mcdp.mpc555;
|
||||||
|
|
||||||
|
import ch.ntb.mcdp.dict.Register;
|
||||||
|
|
||||||
|
public class MPC555Register extends Register {
|
||||||
|
|
||||||
|
// Register Types
|
||||||
|
static final String[] types = new String[] { "GPR", "FPR", "SPR", "MSR",
|
||||||
|
"CR", "FPSCR", "CtrlReg" };
|
||||||
|
|
||||||
|
static final int GPR = 0;
|
||||||
|
|
||||||
|
static final int FPR = 1;
|
||||||
|
|
||||||
|
static final int SPR = 2;
|
||||||
|
|
||||||
|
static final int MSR = 3;
|
||||||
|
|
||||||
|
static final int CR = 4;
|
||||||
|
|
||||||
|
static final int FPSCR = 5;
|
||||||
|
|
||||||
|
static final int CtrlReg = 6;
|
||||||
|
|
||||||
|
protected MPC555Register(String name, int type, int value, int size,
|
||||||
|
String description) {
|
||||||
|
super(name, type, value, size, description);
|
||||||
|
}
|
||||||
|
}
|
||||||
35
mcdp/src/ch/ntb/mcdp/mpc555/MPC555RegisterDict.java
Normal file
35
mcdp/src/ch/ntb/mcdp/mpc555/MPC555RegisterDict.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package ch.ntb.mcdp.mpc555;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import ch.ntb.mcdp.dict.RegisterDict;
|
||||||
|
|
||||||
|
public class MPC555RegisterDict extends RegisterDict {
|
||||||
|
|
||||||
|
private static final String REGISTER_CLASS = "ch.ntb.mcdp.mpc555.MPC555RegisterDict";
|
||||||
|
|
||||||
|
private static final String PATH_TO_REGISTER_FILE = "resources/targets/mpc555/registerDictionary.xml";
|
||||||
|
|
||||||
|
MPC555RegisterDict() {
|
||||||
|
super(REGISTER_CLASS);
|
||||||
|
|
||||||
|
// TODO: remove
|
||||||
|
try {
|
||||||
|
addRegistersFromFile(PATH_TO_REGISTER_FILE);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ParserConfigurationException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (SAXException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
printRegisters();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user