There are no reviews yet. Be the first to send feedback to the community and the maintainers!
This is a Thumb (16 bit ARM) instruction set simulator. Written primarily for my experiments and for anyone wanting to learn the instruction set but not having to read schematics or get many registers set right to blink your first led or turn a pixel on on a display. I started cleaning up the armulator from ARM (wanted to remove the if-then-elses and target specific stuff and make it a clean, simple, core) but got frustrated with it, I probably broke it so I wrote my own. The single file thumbulator.c is the instruction set simulator (ISS), the other directories are test programs and/or examples depending on how you want to look at it. It boots similar, well the same as a cortex-m where the exception vector table is addresses to code instead of code like you have with an ARM based core. The thumbulator does not support thumb2 instructions at this time, if/when that happens it will likely be a separate simulator to keep the two separate, simple, and clean. There are virtually no peripherals, one uart port for TX only (prints the character to the console). A port that prints the 32 bit value written to the console, and a port to halt the processor. Adding your own peripherals is easy. Not necessarily cycle accurate to any real ARM core, it is designed around a 16 bit data bus model similar to running on a GBA, and instruction fetches and reads and writes to memory are counted and displayed when you finish. One main reason for this program was to use it to compare the output of various compilers. No guarantees to be bug free, the tests I have thrown at it so far are both special purpose and real world applications. And so far I have cleaned up the instructions that didnt work, I have not checked code coverage to see if every instruction has been hit. If you happen to try it, and happen to find something please let me know. Beware though the compilers and the code out there can be evil, I found an llvm bug already, one or two of the examples I used mismanaged their integer lengths. I used to like to use zlib as test code, but its integer lengths are chaotic and it has become useless(to me)(as embedded or test code) without a lot of rework. d w e l c h a t d w e l c h d o t c o m UPDATE: The directories here are just a bunch of experiments and entertainments for me, thumbulator.c is basically the project. I have a bare_metal directory in my raspberrypi project you may find interesting to understand how to put together a little bit of bootstrap code to jump into a C program and go from there. The blinker directory (in this project) is perhaps a place to use as a beginning point on an embedded program. Google ARM DDI 0100E or ARM DDI 0100I https://www.scss.tcd.ie/~waldroj/3d1/arm_arm.pdf http://morrow.ece.wisc.edu/ECE353/arm_reference/ddi0100e_arm_arm.pdf http://reds.heig-vd.ch/share/cours/aro/ARM_Thumb_instructions.pdf They have a rev B here...Which was the blue covered one in print. http://www.home.marutan.net/arcemdocs/ https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/third-party/archives/ddi0100e_arm_arm.pdf https://www.cs.miami.edu/~burt/learning/Csc521.141/Documents/arm_arm.pdf
raspberrypi
Raspberry Pi ARM based bare metal examplesraspberrypi-zero
Raspberry Pi Zero baremetal examplesraspberrypi-pico
Raspberry Pi pico baremetal examplesrpigpu
Raspberry Pi GPU based bare metal example programsstm32_samples
qemu_arm_samples
bare metal ARM examples to be run with qemu-system-armstm32f4d
mbed_samples
NXP mbed microcontroller board example programslsasim
Educational load/store instruction set architecture processor simulatorraspberrypi-three
Baremetal examples for the Raspberry Pi 3build_gcc
microbit
baremetal examples for the BBC micro:bitamber_samples
black_pill_too
STM32F407VGT6 breakout board baremetal examples.ntc_chip_examples
Next Thing Co CHIP examplesyagbat
Yet Another GBA Tutorialallwinner_samples
Example baremetal programs for some allwinner boards.pic32_samples
Low level embedded example programs for the pic32 (UBW32 and CUI32 boards)avr_samples
arduino and family low level example programsmsp430_samples
msp430 launchpad sample programsatsamd_samples
Atmel SAM D bare metal examples.beaglebone_samples
pcemu_samples
Using the pcemu to learn 8088/86 assembly language programmingxmos_samples
Some of my xmos sample programstivac_launchpad
Tiva C Launchpad Bare Metal Exampleslc3
stm32f0d
stm32f0 discovery examplesstm32vld
pocket_beagle_samples
PocketBeagle baremetal examples.lichee-rv-samples
Lichee RV bare metal examplessifive_samples
SiFive risc-v baremetal examplesonion_omega2_samples
Onion Omega2 baremetal examplespdp11_samples
Bare metal pdp11 samples.blue_pill_too
Like the STM32 blue pill there is a STM32F030F4P6 based blue board which so far as I know doesnt have a cool name yet.gigadevice_samples
GigaDevice RISC-V BareMetal examplesriscv_baremetal
RISC-V Baremetal examples.avriss
avr instruction set simulatormsp432_samples
ti msp432 baremetal samplesteensy_samples
pdp8sim
pdp8 instruction set simulatoripod_mini
mpx_samples
icestick_samples
stellaris_launchpad
msp430sim
msp430 instruction set simulatorlpc-h2148_samples
sample programs for the lpc-h21488051_samples
8051 bare metal examplesaltor32_samples
nxp_samples
NXP microcontroller samplesmyrisc16
nmea_clock
GPS NMEA parsing for GPS clock.atsaml11_samples
Baremetal examples for the ATSAML10 and ATSAML11 cortex-m23 microcontrollers.maple_samples
pdp11sim
lpcxpresso_samples
Example programs for the lpc1343 version of the lpcxpressosam7s_samples
at91sam7s example programsraspberrypi-pico-2
Bare metal examples for the raspberry pi pico 2pn532_samples
Using the pn532 rfid nfc readerefm32_samples
Baremetal examples for the EFM32 microcontrollers.kicad_fun
morestuff
panda_samples
Low level embedded example programs for the FEZ Pandariscv-instructions
esp8266_samples
picorv32_samples
samples to play with Clifford Wolf's picorv32 riscv32i processormips1_core_samples
Derived from opencore m1_corearmmite_samples
Example low level programs for the Coridium Armmite pro.Love Open Source and this site? Check out how you can help us