|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectavrora.sim.State
The State class represents the state of the simulator, including
the contents of registers and memory.
| Nested Class Summary | |
static interface |
State.IOReg
The IOReg interface models the behavior of an IO register.
|
static class |
State.RWIOReg
The RWIOReg class is an implementation of an IO register
that has the simple, default behavior of being able to read and write
just as a general purpose register or byte in SRAM. |
| Field Summary | |
protected boolean[] |
flag_delta
|
protected boolean |
pc_delta
|
protected boolean[] |
reg_delta
Delta lists of things that have changed recently. |
static State.IOReg |
RESERVED
The RESERVED field of the state class represents an instance
of the IOReg interface that will not allow any writes to
this register to occur. |
protected boolean |
sp_delta
|
| Fields inherited from interface avrora.sim.IORegisterConstants |
ACSR, ADCH, ADCL, ADCSRA, ADMUX, ASSR, DDRA, DDRB, DDRC, DDRD, DDRE, DDRF, DDRG, EEARH, EEARL, EECR, EEDR, EICRA, EICRB, EIFR, EIMSK, ETIFR, ETIMSK, ICR1H, ICR1L, ICR3H, ICR3L, MCUCR, MCUCSR, NUM_REGS, OCDR, OCR0, OCR1AH, OCR1AL, OCR1BH, OCR1BL, OCR1CH, OCR1CL, OCR2, OCR3AH, OCR3AL, OCR3BH, OCR3BL, OCR3CH, OCR3CL, OSCCAL, PINA, PINB, PINC, PIND, PINE, PINF, PING, PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, PORTG, RAMPZ, SFIOR, SPCR, SPDR, SPH, SPL, SPMCSR, SPSR, SREG, SREG_C, SREG_H, SREG_I, SREG_N, SREG_S, SREG_T, SREG_V, SREG_Z, TCCR0, TCCR1A, TCCR1B, TCCR1C, TCCR2, TCCR3A, TCCR3B, TCCR3C, TCNT0, TCNT1H, TCNT1L, TCNT2, TCNT3H, TCNT3L, TIFR, TIMSK, TWAR, TWBR, TWCR, TWDR, TWSR, UBRR0H, UBRR0L, UBRR1H, UBRR1L, UCSR0A, UCSR0B, UCSR0C, UCSR1A, UCSR1B, UCSR1C, UDR0, UDR1, WDTCR, XDIV, XMCRA, XMCRB |
| Constructor Summary | |
State(Program p,
int flash_size,
int ioreg_size,
int sram_size)
The constructor for the State class builds the internal data
structures needed to store the complete state of the machine, including registers,
IO registers, the SRAM, and the flash. |
|
| Method Summary | |
void |
clearTracingState()
|
void |
consumeCycle()
The consumeCycle() method increments the cycle count of
the state by one. |
void |
consumeCycles(long num)
The consumeCycles() method increments the cycle count of
the state by the specified number of cycles. |
void |
dump()
|
Instr |
getCurrentInstr()
The getCurrentInstr() method returns a reference to the
Instr object representing the instruction at the address of
the current value of the program counter. |
long |
getCycles()
The getCycles() method returns the clock cycle count recorded
so far in the simulation. |
byte |
getDataByte(int address)
The getDataByte() method reads a byte value from the data memory
(SRAM) at the specified address. |
boolean |
getFlag_C()
The getFlag_C() method returns the current value of the C bit
in the status register as a boolean. |
boolean |
getFlag_H()
The getFlag_H() method returns the current value of the H bit
in the status register as a boolean. |
boolean |
getFlag_I()
The getFlag_I() method returns the current value of the I bit
in the status register as a boolean. |
boolean |
getFlag_N()
The getFlag_N() method returns the current value of the N bit
in the status register as a boolean. |
boolean |
getFlag_S()
The getFlag_S() method returns the current value of the S bit
in the status register as a boolean. |
boolean |
getFlag_T()
The getFlag_T() method returns the current value of the T bit
in the status register as a boolean. |
boolean |
getFlag_V()
The getFlag_V() method returns the current value of the V bit
in the status register as a boolean. |
boolean |
getFlag_Z()
The getFlag_Z() method returns the current value of the Z bit
in the status register as a boolean. |
Instr |
getInstr(int address)
The getInstr() can be used to retrieve a reference to the
Instr object representing the instruction at the specified program
address. |
State.IOReg |
getIOReg(int ioreg)
The getIOReg() method is used to retrieve a reference to
the actual IOReg instance stored internally in the state. |
byte |
getIORegisterByte(int ioreg)
The getIORegisterByte() method reads the value of an IO register.
|
int |
getPC()
The getPC() retrieves the current program counter. |
long |
getPostedInterrupts()
The getPostedInterrupts() method returns a mask that represents
all interrupts that are currently pending (meaning they are ready to be
fired in priority order as long as the I flag is on). |
byte |
getProgramByte(int address)
The getProgramByte() method reads a byte value from
the program (Flash) memory. |
byte |
getRegisterByte(Register reg)
Read a general purpose register's current value as a byte. |
int |
getRegisterUnsigned(Register reg)
Read a general purpose register's current value as an integer, without any sign extension. |
int |
getRegisterWord(Register reg)
Read a general purpose register pair as an unsigned word. |
int |
getSP()
The getSP() method reads the current value of the stack pointer.
|
byte |
getSREG()
The getSREG() method reads the value of the status register.
|
byte |
getStackByte()
The getStackByte() method reads a byte from the address
specified by SP+1. |
protected void |
initializeIORegs()
|
byte |
popByte()
The popByte() method pops a byte from the stack by reading
from the address pointed to by SP+1 and incrementing the stack pointer.
|
void |
postInterrupt(int num)
The postInterrupt() method is generally only used within the
simulator which does pre-processing of interrupts before it posts them
into the internal State instance. |
protected void |
printPair(java.lang.String n,
byte val,
boolean modified)
|
protected void |
printPair(java.lang.String n,
int val,
boolean modified)
|
protected void |
printPair(java.lang.String n,
long val,
boolean modified)
|
protected void |
printPair(java.lang.String n,
java.lang.String str,
boolean modified)
|
void |
pushByte(byte val)
The pushByte() method pushes a byte onto the stack by writing
to the memory address pointed to by the stack pointer and decrementing the
stack pointer. |
void |
setDataByte(byte val,
int address)
The setDataByte() method writes a value to the data
memory (SRAM) of the state. |
void |
setFlag_C(boolean val)
The setFlag_C() method updates the value of the C bit in the status
register. |
void |
setFlag_H(boolean val)
The setFlag_H() method updates the value of the H bit in the status
register. |
void |
setFlag_I(boolean val)
The setFlag_I() method updates the value of the I bit in the status
register. |
void |
setFlag_N(boolean val)
The setFlag_N() method updates the value of the N bit in the status
register. |
void |
setFlag_S(boolean val)
The setFlag_S() method updates the value of the S bit in the status
register. |
void |
setFlag_T(boolean val)
The setFlag_T() method updates the value of the T bit in the status
register. |
void |
setFlag_V(boolean val)
The setFlag_V() method updates the value of the V bit in the status
register. |
void |
setFlag_Z(boolean val)
The setFlag_Z() method updates the value of the Z bit in the status
register. |
void |
setInstr(Instr i,
int address)
The setInstr() method is used internally to update the instructions
of the program by the simulator. |
void |
setIOReg(int ioreg,
State.IOReg reg)
The setIOReg method installs the specified IOReg
object to the specified IO register number. |
void |
setIORegisterByte(byte val,
int ioreg)
The setIORegisterByte() method writes a value to the specified
IO register. |
void |
setPC(int pc)
The setPC() method updates the value of the program counter. |
void |
setPostedInterrupts(long mask)
The setPostedInterrupts() method allows a full update to the
pending list of interrupts. |
void |
setRegisterByte(Register reg,
byte val)
The setRegisterByte() method writes a value to a general purpose
register. |
void |
setRegisterWord(Register reg,
int val)
The setRegisterWord method writes a word value to a general
purpose register pair. |
void |
setSP(int val)
The setSP() method updates the value of the stack pointer. |
void |
setSREG_bit(int bit,
boolean val)
The setSREG_bit() updates the value of the specified bit in the
status register. |
void |
setSREG(byte val)
The setSREG() method writes the value of the status register.
|
void |
unpostInterrupt(int num)
The unpostInterrupt() method is generally only used within the
simulator which does pre-processing of interrupts before it posts them
into the internal State instance. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final State.IOReg RESERVED
RESERVED field of the state class represents an instance
of the IOReg interface that will not allow any writes to
this register to occur. These reserved IO registers are specified in the
hardware manuals.
protected final boolean[] reg_delta
TracingState.
protected final boolean[] flag_delta
protected boolean sp_delta
protected boolean pc_delta
| Constructor Detail |
public State(Program p,
int flash_size,
int ioreg_size,
int sram_size)
State class builds the internal data
structures needed to store the complete state of the machine, including registers,
IO registers, the SRAM, and the flash. All IO registers are initialized to be
instances of RWIOReg. Reserved and special IO registers must be
inserted by the getIOReg() and setIOReg()
methods.
p - the program to construct the state forflash_size - the size of the flash (program) memory in bytesioreg_size - the number of IO registerssram_size - the size of the SRAM in bytes| Method Detail |
protected void initializeIORegs()
public long getPostedInterrupts()
getPostedInterrupts() method returns a mask that represents
all interrupts that are currently pending (meaning they are ready to be
fired in priority order as long as the I flag is on).
public void postInterrupt(int num)
postInterrupt() method is generally only used within the
simulator which does pre-processing of interrupts before it posts them
into the internal State instance. This method causes the
specified interrupt number to be added to the pending list of interrupts
Clients should not use this method directly.
num - the interrupt number to postpublic void unpostInterrupt(int num)
unpostInterrupt() method is generally only used within the
simulator which does pre-processing of interrupts before it posts them
into the internal State instance. This method causes the
specified interrupt number to be removed from the pending list of interrupts
Clients should not use this method directly.
num - the interrupt number to postpublic void setPostedInterrupts(long mask)
setPostedInterrupts() method allows a full update to the
pending list of interrupts. This should only be used within the simulator.
mask - the new pending interrupt maskpublic byte getRegisterByte(Register reg)
reg - the register to read
public int getRegisterUnsigned(Register reg)
reg - the register to read
public int getRegisterWord(Register reg)
reg - the low register of the pair to read
public void setRegisterByte(Register reg,
byte val)
setRegisterByte() method writes a value to a general purpose
register. This is a destructive update and should only be called from the
appropriate places in the simulator.
reg - the register to write the value toval - the value to write to the register
public void setRegisterWord(Register reg,
int val)
setRegisterWord method writes a word value to a general
purpose register pair. This is a destructive update and should only be
called from the appropriate places in the simulator. The specified register
and the next register in numerical order are updated with the low-order and
high-order byte of the value passed, respectively. The specified register should
be less than r31, since r32 (the next register) does not exist.
reg - the low register of the pair to writeval - the word value to write to the register pairpublic byte getSREG()
getSREG() method reads the value of the status register.
The status register contains the I, T, H, S, V, N, Z, and C flags, in order
from highest-order to lowest-order.
public void setSREG(byte val)
setSREG() method writes the value of the status register.
This method should only be called from the appropriate places in the simulator.
val -
public void setSREG_bit(int bit,
boolean val)
setSREG_bit() updates the value of the specified bit in the
status register. It should only be called from the appropriate places in the
simulator.
bit - the number of the bit to updateval - the new value of the bit as a booleanpublic void setFlag_I(boolean val)
setFlag_I() method updates the value of the I bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_T(boolean val)
setFlag_T() method updates the value of the T bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_H(boolean val)
setFlag_H() method updates the value of the H bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_S(boolean val)
setFlag_S() method updates the value of the S bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_V(boolean val)
setFlag_V() method updates the value of the V bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_N(boolean val)
setFlag_N() method updates the value of the N bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_Z(boolean val)
setFlag_Z() method updates the value of the Z bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic void setFlag_C(boolean val)
setFlag_C() method updates the value of the C bit in the status
register. It should only be called from within the simulator.
val - the new value of the flagpublic boolean getFlag_I()
getFlag_I() method returns the current value of the I bit
in the status register as a boolean.
public boolean getFlag_T()
getFlag_T() method returns the current value of the T bit
in the status register as a boolean.
public boolean getFlag_H()
getFlag_H() method returns the current value of the H bit
in the status register as a boolean.
public boolean getFlag_S()
getFlag_S() method returns the current value of the S bit
in the status register as a boolean.
public boolean getFlag_V()
getFlag_V() method returns the current value of the V bit
in the status register as a boolean.
public boolean getFlag_N()
getFlag_N() method returns the current value of the N bit
in the status register as a boolean.
public boolean getFlag_Z()
getFlag_Z() method returns the current value of the Z bit
in the status register as a boolean.
public boolean getFlag_C()
getFlag_C() method returns the current value of the C bit
in the status register as a boolean.
public byte getStackByte()
getStackByte() method reads a byte from the address
specified by SP+1. This method should not be called with an empty stack,
as it will cause an exception consistent with trying to read non-existent
memory.
public byte popByte()
popByte() method pops a byte from the stack by reading
from the address pointed to by SP+1 and incrementing the stack pointer.
This method, like all of the other methods that change the state,
should probably only be used within the simulator. This method should not
be called with an empty stack, as it will cause an exception consistent
with trying to read non-existent memory.
public void pushByte(byte val)
pushByte() method pushes a byte onto the stack by writing
to the memory address pointed to by the stack pointer and decrementing the
stack pointer. This method, like all of the other methods that change the state,
should probably only be used within the simulator.
val - the value to push onto the stackpublic int getSP()
getSP() method reads the current value of the stack pointer.
Since the stack pointer is stored in two IO registers, this method will cause the
invocation of the .read() method on each of the IOReg
objects that store these values.
public void setSP(int val)
setSP() method updates the value of the stack pointer. Generally
the stack pointer is stored in two IO registers SPL and SPH.
This method should generally only be used within the simulator.
val - IORegisterConstantspublic int getPC()
getPC() retrieves the current program counter.
public void setPC(int pc)
setPC() method updates the value of the program counter. It is
generally used only by the simulator. In general it is a good idea to keep the
program counter aligned on a 2-byte boundary. Clients of the State interface
should generally not use this method.
pc - the new program counter as a byte addresspublic Instr getCurrentInstr()
getCurrentInstr() method returns a reference to the
Instr object representing the instruction at the address of
the current value of the program counter.
Instr object representing the instruction
at the current program counterpublic Instr getInstr(int address)
getInstr() can be used to retrieve a reference to the
Instr object representing the instruction at the specified program
address. Care should be taken that the address in program memory specified does
not contain data. This is because Avrora does have a functioning disassembler
and assumes that the Instr objects for each instruction in the
program are known a priori.
address - the byte address from which to read the instruction
Instr object representing the instruction
at that address in the program
public void setInstr(Instr i,
int address)
setInstr() method is used internally to update the instructions
of the program by the simulator. This is generally for the purpose of replacing
an instruction with a Simulator.ProbedInstr instance that will fire
probes when it is visited. It is generally not recommended for clients of the
State interface to update instructions in the program memory.
i - the instruction to writeaddress - the byte address in the program to write the instruction topublic byte getDataByte(int address)
getDataByte() method reads a byte value from the data memory
(SRAM) at the specified address.
address - the byte address to read
java.lang.ArrayIndexOutOfBoundsException - if the specified address is not the valid
memory rangepublic byte getProgramByte(int address)
getProgramByte() method reads a byte value from
the program (Flash) memory. The flash memory generally stores read-only
values and the instructions of the program. Care should be taken that
the program memory at the specified address does not contain an instruction.
This is because, in general, programs should not read instructions as
data, and secondly, because no assembler is present in Avrora and therefore
the actual byte value of an instruction may not be known.
address - the byte address at which to read
java.lang.ArrayIndexOutOfBoundsException - if the specified address is not the valid
program memory range
public void setDataByte(byte val,
int address)
setDataByte() method writes a value to the data
memory (SRAM) of the state. This is generally meant for the simulator, related
classes, and device implementations to use, but could also be used by
debuggers and other tools.
val - the value to writeaddress - the byte address at which to write the valuepublic byte getIORegisterByte(int ioreg)
getIORegisterByte() method reads the value of an IO register.
Invocation of this method causes an invocatiobn of the .read()
method on the corresponding internal IOReg object, and its value
returned.
ioreg - the IO register number
public void setIOReg(int ioreg,
State.IOReg reg)
setIOReg method installs the specified IOReg
object to the specified IO register number. This method is generally only used
in the simulator and in device implementations to set up the state correctly
during initialization.
ioreg - the IO register numberreg - the IOReg object to installpublic State.IOReg getIOReg(int ioreg)
getIOReg() method is used to retrieve a reference to
the actual IOReg instance stored internally in the state. This is
generally only used in the simulator and device implementations, and clients
should probably not call this memory directly.
ioreg - the IO register number to retrieve
IOReg instance of the specified IO register
public void setIORegisterByte(byte val,
int ioreg)
setIORegisterByte() method writes a value to the specified
IO register. This is generally only used internally to the simulator and
device implementations, and client interfaces should probably not call
this method.
val - the value to write to the IO registerioreg - the IO register number to which to write the valuepublic long getCycles()
getCycles() method returns the clock cycle count recorded
so far in the simulation.
public void consumeCycle()
consumeCycle() method increments the cycle count of
the state by one. This is generally only used internally to the simulator
and tightly coupled classes, so clients of the state interface should not
call this method unless they are implementing careful timings (e.g. an
external RAM).
public void consumeCycles(long num)
consumeCycles() method increments the cycle count of
the state by the specified number of cycles. This is generally only used
internally to the simulator and tightly coupled classes, so clients of the
state interface should not call this method unless they are implementing
careful timings (e.g. an external RAM).
num - the number of cycles to advance the cycle counterpublic void dump()
protected final void printPair(java.lang.String n,
java.lang.String str,
boolean modified)
protected final void printPair(java.lang.String n,
byte val,
boolean modified)
protected final void printPair(java.lang.String n,
int val,
boolean modified)
protected final void printPair(java.lang.String n,
long val,
boolean modified)
public void clearTracingState()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||