SNARE's Not A Risc os Emulator (in Java): Components

[ Home | About | Getting Started | Screenshots | Source Components | Project Page ]

The system is split into three main subsystems:

The subsystems are then decomposed into components. The components may be logically grouped to form lower-level subsystems, but this is not represented in the component naming or packages. Additionally, the components may be split into logical groupings of packages; where appropriate, this is noted below.

THIS TABLE IS INCOMPLETE!

Component Package
net.sf.snarej.
Description

Core

snarejCore core Common core functionality. This is currently a bag of 'stuff'.
core.config Configuration framework.
core.plugin Pre-Java 6 equivalent of ServiceLoader.
Needs to be refactored to use ServiceLoader when Java 6 is available on the system.
core.source Code annotations that are retained only in the source. Of particular note is ComponentApi, which can be used to mark classes that are public but are not part of the public API of the component.
core.util Other utility classes.
Needs to be tidied!

ARM Emulation

snarejArmModel arm.model Model of the ARM execution.
arm.model.memory Model of system memory. The key interface is MemoryManager.
Page support needs to be removed (it was slow and ugly) and be replaced with support for segments (size defined at construction, but not limited to 4KiB, allowing access to a buffer if possible).
arm.model.register Model of registers. The only class is RegisterSet.
snarejArmInstructionSet arm.model Model of the ARM instruction set.
arm.instructionset.instruction Instructions for the ARM emulator. Each instruction type is modelled by one class. For example, instructions such as ADD, SUB, and CMP are all provided by ArithmeticInstruction. The visitor pattern is used to allow a loose coupling between the instruction types and the execution environment; see InstructionTarget.
arm.instructionset.disassembler Provides the mapping from op codes to Instruction instances.
arm.instructionset.disassembler
(From generation source section)
The OpCodes class generates the very large if-else-if monster for ArmDisassembler. It operates on a mask system derived from the disassembler in GDB (file arm-dis.c); see Google's cache or here.