How to generate AVR (Arduino) Assembly Control Flow Graphs with C#

In all fairness, for any Arduino (or Atmel AVR) program it is hard to fathom a more authoritative source (on its behavior) than the list of machine instructions it ultimately compiles down to. Disassemblers for viewing the contents of .HEX files (the end result of compilation that is typically flashed through the bootloader on your Arduino) are not hard to come by. While the industry standard is definitely avr-objdump (in the avr-gcc toolchain), multiple people (including myself) wrote their own (you can find mine here). [Read More]

How to build / publish self contained .NET Core binaries for Windows, Linux and OSX

The introduction of the .NET Core stack (and .NET Standard) has certainly been accompanied with some growing pains. The most prominent (wildly discussed) example would be the change in project file format from .csproj (XML based) to .xproj (JSON based). And then back to .csproj. The associated tooling has been somewhat rough around the edges (to a certain extent that still holds true today). As a part of Microsofts remarkably more modern software development approach, a lot of the work is now performed out in the open on GitHub (with real community involvement as well). [Read More]

Enchanted Orbs: an Arduino based Magical Drop clone

Magical Drop is a fun (and addictive) puzzle game series by the now defunct Japanese arcade veterans Data East. Personally I find the third installment (1997, on Neo Geo MVS) the ultimate version. Magical Drop F (on the PSX) was not too bad either. I decided to make a (primitive and limited) version of the game with an Arduino: Enchanted Orbs! Components This little homebrew homage is built with the following components: [Read More]

Introducing AVRDisassembler: a .NET Core (cross platform) AVR / Arduino Disassembler

AVRDisassembler is a new open source, cross platform (Windows, Mac, Linux) disassembler for the AVR microcontroller platform, written in C# (.NET Core). It supports the full instruction set as described by the ATMEL 0856 Instruction Set Documentation. The code is made available under the MIT license. Note: Full source code for the disassembler can be found on GitHub: AVRDisassembler. Command line usage Using the disassembler is very straightforward. [Read More]

Performance comparison of (relational) embedded databases for .NET

In this post, we will establish a performance comparison among several freely distributable embedded database technologies for the .NET crowd. Your real-life mileage may vary (depending on your exact usage scenario), so make sure to run your own (more specific) benchmarks as required. Also, keep in mind that performance (while important) is only one of the many aspects to consider when choosing an embedded database technology (together with ease of development and enhancement, availability and quality of tooling, ease of maintenance, licensing and distribution, …). [Read More]

How Microsoft Access 97 stored its database passwords (20 years ago)

While working with larger clients one sometimes encounters legacy applications that have been running on the same technology stack / backend for 20 years (or more). Running old components comes with a particular set of challenges without any doubt. But from time to time one can see artifacts that suggest security awareness itself was really just in its infancy (at least for some products on the market). Some leeway should perhaps be given to the fact that this is old technology (for context, while Microsofts Access 97 was published on CD-rom, it was also distributed as a set of a 44 3½-inch floppy disks). [Read More]

Interfacing with the Arduino's bootloader directly from C# (to upload a HEX file)

Sending a program to a microcontroller (which is most often called “programming” the device) can be done in multiple ways. For example, one can do it through the use of ICSP headers and dedicated hardware programmers. In the Arduino world the usage of bootloaders is extremely common, since it is what allows you to program your device directly through the Serial (USB) connection. This blog post will explore how we can upload a compiled program (in its Intel HEX form) to an Arduino UNO directly, by interacting with the device’s bootloader from C#. [Read More]

How to drive a CGA screen directly with an Arduino

A couple of weeks ago there was a local advert for a vintage Tandy 1000RL computer in very minty condition. I picked it up, primarily because I was interested in the rather old school monitor it came with (a Tandy RGB-11). While not as flat out brilliant as the Commodore 1081 I used to own in Europe a couple of years ago (usable for many purposes), it’s still a pretty respectable vintage display device in it’s own right. [Read More]