RSSAmplifier

Blog

Reinventing The Wheel

mcejp.github.ioRSS feed ↗10 posts

Latest posts

Extracting regions from ESA WorldCover

ESA WorldCover is a categorical dataset with 11 classes of land cover (such as water, trees, built-up etc.) at a 10-meter resolution covering most of the world. In this short post I show how to extract a specific region given its geographic coordinates.

STAK: My weird programming language for DOS games

The inspiration for this project came from two main sources. The first is Zork, a text adventure released back in 1977. The original version ran on the PDP-10 mainframe and was coded in MDL, a Lisp derivative. When the time came for a microcomputer version, however, MDL was just too big to fit. The game was reimplemented in a custom language called ZIL – Zork Implementation Language . Incredibly,…

How I failed to make a game

Today I am releasing my raycasting tech demo for the GameBoy Advance. Although it falls short of the goals I set out in the beginning – which included releasing a playable game –, I think there are some lessons worth sharing with the world.

sys/iosupport.h: No such file or directory

I ran into this issue in the process of moving away from devkitARM to a vanilla ARM GNU Toolchain.

Automated benchmarking in GameBoy Advance homebrew

The GBA is a delightful platform to develop for. It is straightforward enough to understand thoroughly – a single 32-bit CPU, no OS, no built-in wireless features – but also sufficiently advanced to allow an ergonomic workflow based on modern languages and tools like C++20 and CMake (or Rust). Still, it is not particularly powerful in terms of raw computation and when writing rendering code, even…

Generating core dumps for bare-metal AArch64 programs

Introduction

Generating Makefile-like workflows with Python

Every now and then I feel a need to programatically generate and execute a Makefile: for example, to execute a graph-based procedural generation workflow, or to compile some game assets that are discovered dynamically by a tool – in general, all these problems can be represented as directed acyclic graphs of files and tasks.

Macro expansion in Hy-based custom languages

This seems like a very obvious thing to do, but I could not find a simple example anywhere.

ARMv8: Cache coherency between code running in different exception levels

At its heart, the Xilinx UltraScale+ SOC has a multi-core Cortex-A53 CPU. This is not the fastest ARM out there, but it’s still plenty capable. One interesting feature is its built-in Snoop Control Unit (SCU). This enables transparent synchronization of L1 caches among the individual cores. There is one pitfall that you might fall into when running bare-metal code: the distinction between secure…

Tracking FPGA design build metrics

…with low infrastructure footprint