ARMv4T

ARMv4T on pub.dev Code coverage Github action status Dartdocs Style guide

An emulator for the ARMv4T instruction set, written in Dart.

Libraries

armv4t.dart

Emulator and related components necessary to load and execute ARMv4T programs.

debug.dart

Components specific to aid debugging.

decode.dart

Contains classes and data structures for decoding (and in some cases, encoding) Uint32-encoded binary instructions into their resulting ArmFormat and finally ArmInstruction data classes. If you intend to write your own interpreter, debugger, or (re-)compiler, you may need to import this library.

Resources

A few different resources and documents used to develop this package.

Getting Started with ARM and Assembly

If you've (a) never written en emulator before or (b) want a tutorial on ARM assembly (or both), these are for you.

  • ARM Assembly Basics: A tutorial and walkthrough explaining the basics of ARM assembly, written from the perspective of learning to write ARM shellcode for security purposes. A great "getting started" guide if you have never been exposed to writing assembly or want a quick refresher.

  • ARM THUMB Programmers Guide: A slide deck quickly explaining Thumb ARM assembly. Very digestable when compared to the more exhaustive resources available explaining the specifications of ARM and Thumb.

  • ARM Instruction Set: A slide deck from the "ARM University Program", explaining the basics of ARM processing and ARM assembly instructions. It is an eductional resources, and even has quizzes to check your understanding at the end of each section.

  • CSE30 Data Transfer Instructions: I found it a bit difficult coming from almost entirely higher level languages to understand data transfer instructions (register <--> memory); this is a slide deck from a CSE30 course that does a decent job explaining the basics.

    There is another slide deck, multiple data transfer instructions that specifically helps explain LDM and STM instructions.

Advanced and/or Emulator Specific

These resources were necessary when writing this package.

  • ARM CPU Overview by GBATek: A reference guide extracted from the No$GBA emulator, which is sometimes considered the most complete (and completely documetned and debuggable) GBA and NDS emulator. Contains a very digestable (if somewhat brief) overview of the ARM7/TDMI processor, ARM CPU, and instruction sets.

  • ARM Developer Suite Assembler Guide: An official (And older) guide to learning and writing ARM and Thumb Assembly Language by ARM Limited. Most of the other references listed here very quickly explain syntax and formats, where this assembler guide goes much more into detail - I found it absolutely necessary when writing this package.

  • ARM7/TDMI Datasheet: Official ARM reference for the processor we are emulating, the ARM7/TDMI (which implements the ARMv4T instruction set, if you were wondering/confused). One of the more detailed resources (along with the assembler guide).

  • ARM7/TDMI Instruction Timings: A quick reference (<2 pages) of the instruction timings for the ARM7/TDMI.

Other Emulators

Some other emulators that were referenced when writing this one. It's really tricky to find emulators of sufficient quality in terms of development - e.g. useful doc comments, tests, and documentation in general (hence one of the reasons I wrote this package), but it's also nice to have at least some code references when writing an emulator.

Libraries

armv4t
Exports classes and functions for loading and executing ARMv4T programs. [...]
armv4t.debug
Exports classes and functions for debugging ARMv4T programs.
armvt.decode
Handles the decoding (and some cases, encoding) of CPU instructions. [...]