|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object hades.models.mcs4.MCS4Assembler
A simple assembler for the Intel MCS4 (4004) microprocessor system. The current version supports:
The symbol table is realized with two Hashtables. The first Hashtable maps symbol (label, opcode, ...) names into values. The second Hashtable maps symbol names into symbol types like T_UNDEFINED, T_OPOCDE, T_LABEL, etc.
Field Summary | |
(package private) int |
current_addr
|
(package private) int[] |
instructionMemory
|
(package private) java.util.Hashtable |
labelTargetTable
|
(package private) int |
max_addr
|
(package private) java.util.Hashtable |
opcodeArgsTable
|
(package private) java.util.Vector |
patchAddressVector
|
(package private) java.util.Vector |
patchLabelVector
|
(package private) java.util.Vector |
patchTypeVector
|
(package private) java.util.Vector |
rawTokens
|
(package private) java.lang.String |
sourcefilename
|
(package private) java.util.Hashtable |
symbolTable
|
(package private) java.util.Hashtable |
symbolTypeTable
|
static java.lang.String |
T_ADDRESS_12
|
static java.lang.String |
T_ADDRESS_8
|
static int |
T_DATA
|
static int |
T_EQU
|
static int |
T_INCLUDE
|
static int |
T_LABEL
|
static int |
T_LIST
|
static int |
T_OPCODE
|
static int |
T_ORG
|
static int |
T_SHORTHAND
|
static int |
T_UNDEFINED
|
static int |
T_UNKNOWN
|
Constructor Summary | |
MCS4Assembler()
|
Method Summary | |
void |
addOpcodeSymbol(java.lang.String key,
java.lang.String value,
int n_bytes,
int n_args)
call addSymbol with both the String key and a second time with the uppercase-version of key |
void |
addStandaloneLabel(java.lang.String[] tokens)
we just found a Label definition sitting alone on one line. |
void |
addSymbol(java.lang.String key,
java.lang.Object value,
int type)
create a new symbol table entry for key with value. |
void |
addSymbol2(java.lang.String key,
java.lang.Object value,
int type)
call addSymbol with both the String key and a second time with the uppercase-version of key |
void |
codegen()
|
void |
copyright()
|
void |
createMCS4InstructionMemory()
|
void |
createMCS4OpcodeSymbols()
|
void |
createMCS4RegisterNameSymbols()
|
void |
createMetaSymbols()
|
void |
createSymbolTable()
|
void |
defineLabel(java.lang.String label,
int address)
try to define a Label Symbol with the Label's target address. |
void |
dumpRawTokens(java.util.Vector rawTokens)
|
void |
dumpSymbolTable(java.io.PrintStream ps)
|
java.lang.String |
flushLeft(java.lang.Object o,
int fieldsize)
|
int |
getA12(java.lang.String token)
|
int |
getAAAA(java.lang.String token)
|
int |
getCCCC(java.lang.String token)
|
int |
getD4(java.lang.String token)
|
int |
getDDDD(java.lang.String token)
|
java.lang.String |
getFilename()
|
int |
getLabelAddress(java.lang.String label)
|
int |
getMemorySize()
|
int |
getNOP()
|
java.io.PrintWriter |
getPrintWriter(java.lang.String suffix)
|
void |
getReader()
|
int |
getRRR(java.lang.String token)
|
int |
getRRRR(java.lang.String token)
|
java.lang.String |
getSymbol(java.lang.String key)
|
int |
getSymbolType(java.lang.String key)
|
void |
handleDataExpression(java.lang.String[] tokens)
|
void |
handleEquExpression(java.lang.String[] tokens)
|
void |
handleIncludeExpression(java.lang.String[] tokens)
|
void |
handleLabelAndOpcode(java.lang.String[] tokens)
|
void |
handleListExpression(java.lang.String[] tokens)
|
void |
handleOpcode(java.lang.String[] tokens)
|
void |
handleOrgExpression(java.lang.String[] tokens)
|
boolean |
isEquSymbol(java.lang.String key)
|
boolean |
isOpcodeSymbol(java.lang.String key)
|
boolean |
isSymbol(java.lang.String key)
|
static void |
main(java.lang.String[] argv)
|
static void |
msg(java.lang.String s)
|
void |
parse(java.io.BufferedReader reader)
|
int |
parseNumber(java.lang.String s)
try to parse an integer from a string in one of the following reps: [0-9]+ normal decimal number 0b[01]+ binary number 0d[0-9]+ decimal number 0x[0-F]+ hex number b'[01]+' binary number d'[0-9]+' decimal number x'[0-f]+' hex number '[ascii-char]' ascii char .[0-9]+ decimal number [0-f]+h hex number |
void |
patchLabels()
|
void |
printLineTokens(java.lang.String[] tokens)
|
java.lang.String |
printSymbolType(java.lang.String key)
|
void |
setFilename(java.lang.String sourcefilename)
|
void |
setOptions(java.lang.String[] argv)
|
java.lang.String |
stripComments(java.lang.String line)
|
void |
tokenize(java.io.BufferedReader reader)
|
java.lang.String[] |
tokenizeLine(java.lang.String line)
|
void |
usage()
|
void |
writeHex(java.io.PrintWriter writer)
|
void |
writeLabels(java.io.PrintWriter writer)
|
void |
writeRawLabels(java.io.PrintWriter writer)
write a list of all labels, sorted by ascending addresses |
void |
writeRom(java.io.PrintWriter writer)
|
void |
writeSymbolTable(java.io.PrintWriter writer)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
java.util.Hashtable symbolTable
java.util.Hashtable symbolTypeTable
java.util.Hashtable opcodeArgsTable
java.util.Vector rawTokens
int[] instructionMemory
java.util.Hashtable labelTargetTable
java.util.Vector patchAddressVector
java.util.Vector patchLabelVector
java.util.Vector patchTypeVector
int current_addr
int max_addr
java.lang.String sourcefilename
public static final int T_UNDEFINED
public static final int T_UNKNOWN
public static final int T_OPCODE
public static final int T_ORG
public static final int T_EQU
public static final int T_LABEL
public static final int T_SHORTHAND
public static final int T_DATA
public static final int T_INCLUDE
public static final int T_LIST
public static final java.lang.String T_ADDRESS_8
public static final java.lang.String T_ADDRESS_12
Constructor Detail |
public MCS4Assembler()
Method Detail |
public int getMemorySize()
public int getNOP()
public void createMCS4InstructionMemory()
public void createSymbolTable()
public void createMetaSymbols()
public void createMCS4OpcodeSymbols()
public void createMCS4RegisterNameSymbols()
public void addSymbol(java.lang.String key, java.lang.Object value, int type) throws java.lang.Exception
java.lang.Exception
public void addSymbol2(java.lang.String key, java.lang.Object value, int type) throws java.lang.Exception
java.lang.Exception
public void addOpcodeSymbol(java.lang.String key, java.lang.String value, int n_bytes, int n_args) throws java.lang.Exception
java.lang.Exception
public int getSymbolType(java.lang.String key)
public boolean isOpcodeSymbol(java.lang.String key)
public boolean isEquSymbol(java.lang.String key)
public boolean isSymbol(java.lang.String key)
public java.lang.String getSymbol(java.lang.String key)
public java.lang.String printSymbolType(java.lang.String key)
public void dumpSymbolTable(java.io.PrintStream ps)
public void defineLabel(java.lang.String label, int address) throws java.lang.Exception
java.lang.Exception
public int getLabelAddress(java.lang.String label) throws java.lang.Exception
java.lang.Exception
public void parse(java.io.BufferedReader reader)
public void writeRom(java.io.PrintWriter writer) throws java.lang.Exception
java.lang.Exception
public void writeHex(java.io.PrintWriter writer) throws java.lang.Exception
java.lang.Exception
public void writeLabels(java.io.PrintWriter writer) throws java.lang.Exception
java.lang.Exception
public void writeRawLabels(java.io.PrintWriter writer) throws java.lang.Exception
java.lang.Exception
public void writeSymbolTable(java.io.PrintWriter writer) throws java.lang.Exception
java.lang.Exception
public java.lang.String flushLeft(java.lang.Object o, int fieldsize)
public void patchLabels()
public void codegen()
public void addStandaloneLabel(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public int getRRR(java.lang.String token)
public int getRRRR(java.lang.String token)
public int getCCCC(java.lang.String token)
public int getA12(java.lang.String token)
public int getAAAA(java.lang.String token)
public int getDDDD(java.lang.String token)
public int getD4(java.lang.String token)
public void handleDataExpression(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void handleOpcode(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void handleLabelAndOpcode(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void handleListExpression(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void handleIncludeExpression(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void handleOrgExpression(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void handleEquExpression(java.lang.String[] tokens) throws java.lang.Exception
java.lang.Exception
public void tokenize(java.io.BufferedReader reader)
public void dumpRawTokens(java.util.Vector rawTokens)
public java.lang.String[] tokenizeLine(java.lang.String line)
public void printLineTokens(java.lang.String[] tokens)
public java.lang.String stripComments(java.lang.String line)
public int parseNumber(java.lang.String s)
public void setOptions(java.lang.String[] argv)
public void setFilename(java.lang.String sourcefilename)
public java.lang.String getFilename()
public void getReader()
public java.io.PrintWriter getPrintWriter(java.lang.String suffix) throws java.lang.Exception
java.lang.Exception
public void usage()
public void copyright()
public static void msg(java.lang.String s)
public static void main(java.lang.String[] argv)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |