Programming Articles

Sega Genesis

Sega Genesis Programming Part 1: Palettes

Sega Genesis Programming Part 1: Palettes

After thinking about it for something like 25 years I decided to take a stab at learning how to program for the Sega Genesis. My first attempt at learning involves creating and loading palettes.


Sega Genesis Programming Part 2: Tiles and Sprites

Sega Genesis Programming Part 2: Tiles and Sprites

I expected to get either frustrated or bored with this whole "let's try to program for the Sega Genesis thing" and am surprised to find I'm enjoying it. In this experiment I try to draw some tiles and move a sprite around with the controller.


Sega Genesis Programming Part 3: Sprite Animation

Sega Genesis Programming Part 3: Sprite Animation

Building on the last article, this one looks at how to create an animated sprite with different patterns for each direction.


Sega Genesis Programming Part 4: Echo Sound Engine

Sega Genesis Programming Part 4: Echo Sound Engine

A brief write-up on how to include the open source Echo sound engine and convert .xm files to its audio format.


Sega Genesis Programming Part 5: Collision Detection

Sega Genesis Programming Part 5: Collision Detection

This article explores a technique to test for sprite collision against a map, it also covers how to draw to high & low graphic planes.


Sega Genesis Programming Part 6: Vertical Scrolling

Sega Genesis Programming Part 6: Vertical Scrolling

After a few iterations I have a sprite that moves around but has no place to go so it's time to try scrolling the map. Along the way I added a little more scenery and created another handy little tool.


Sega Genesis Programming Part 7: NPC Sprites

Sega Genesis Programming Part 7: NPC Sprites

Our sprite was looking awful lonely in his sparsely decorated store. In this article we give him a friend and fix up a few lingering problems with collision detection.


Sega Genesis Programming Part 8: Game State and Pausing

Sega Genesis Programming Part 8: Game State & Pausing

In this round I fixed several nagging problems and implemented (very) basic game state management. Since the breakneck action of this demo is probably too much for most to handle I also added a pause feature to test out game state management.


Sega Genesis Programming Part 9: Object List

Sega Genesis Programming Part 9: Object List

After 8 articles we have a sprite that can walk around and bump into things while music is playing. We can even pause the game just in case this is too much action for people to handle. Now let's figure out how we're going to let our sprite interact with their environment.


Sega Genesis Programming Part 10: Sprite Link List

Sega Genesis Programming Part 10: Sprite Link List

In this exciting episode we figure out how sprite links can be used to control the order that sprites are drawn as they move around the y-axis. We also take a small detour and look at a way to keep track of memory address constants.


Sega Genesis Programming Part 11: Scenes & Dialogs

Sega Genesis Programming Part 11: Scenes & Dialogs

This is a fairly large installment that looks at how to store & load scenes, creates a font, and displays dialogs with text based on what the player is looking at. This is getting closer to almost resembling a game of some sort.


Sega Genesis Programming Part 12: Scenes & NPCs

Sega Genesis Programming Part 12: Scenes & NPCs

I decided to focus on turning this crazy experiment into a simple one-room demo that contains all the basic mechanics of an adventure-like game. The first part of this involves supporting an arbitrary number of NPCs that can be moved between locations.


Sega Genesis Programming Part 13: Action Table

Sega Genesis Programming Part 13: Action Table

The second stop on our journey toward a one-room demo takes us to processing actions. In this article I built out a simple table that's used to respond to player actions based on the game state. Multi-page dialogs and default object description text were also built along the way.


Sega Genesis Programming Part 14: Selections

Sega Genesis Programming Part 14: Selections

So far our little sprite can only look at objects and engage in one-sided dialog with NPCs. Let's fix that by adding a menu that gives them more interaction options. While we're at it, let's add the ability to respond to NPC questions.


Sega Genesis Programming Part 15: Inventory

Sega Genesis Programming Part 15: Inventory

The next step in building a one-room demo is inventory management. In this installment we give the player a (small) inventory with basic add/remove item functionality. While we're at it, let's add some dialogs that allow the player to select items to give or take.


Sega Genesis Programming Part 16: Scripted Events

Sega Genesis Programming Part 16: Scripted Events

It's time to force some sprites to walk around against their will. What's that? You don't think 16-bit sprites have free will? What if our world is just a sophisticated computer simulation and everything we do is part of a table written in assembly language? Now what do you think about about making these little sprites walk wherever we tell them to? If you now have a moral objection then too bad because we're doing it anyway. Also this will be the last Genesis programming article I write for a while but not for a bad reason.


Sega Genesis Programming Part 17: Fade-In/Fade-Out

Sega Genesis Programming Part 17: Fade-In/Fade-Out

I say we put an end to ugly scene transitions in the Retail Clerk '89 demos by implementing some fade-in/fade-out effects. This article is also a good refresher on palettes since it's been something like three years since I wrote that tutorial. Hmm, I thought I'd have more to show after three years. That's alright, I'm still on pace to hit the 2040 holiday shopping season.


Sega Genesis Programming Part 18: Saving and Loading

Sega Genesis Programming Part 18: Saving & Loading

This was the last major feature I planned to add to Retail Clerk '89. I kept putting it off because I thought it would be a lot of work. It really wasn't though.


Sega Genesis Programming Part 19: 6 Button Controllers

Sega Genesis Programming Part 19: 6 Button Controllers

I think I'm done working on Retail Clerk '89 so it's time to explore other Genesis demo ideas. First up is deciphering how to add 6 button controller support and detect whether a 3 or 6 button controller is connected. This article also includes a demo ROM that's handy for testing controllers on real hardware and controller configuration on emulators.


Sega Genesis Programming Part 20: Palette and Tile Generation

Sega Genesis Programming Part 20: Palette and Tile Generation

This isn't really about Genesis programming all that much. It's about some tools I'm working on to make Genesis programming easier. In this installment we'll be writing code to extract palettes, tiles, and patterns from an existing image and re-drawing them on the Genesis.


Sega Genesis Programming Part 21: VDP Sprite Collision

Sega Genesis Programming Part 21: VDP Sprite Collision

This time around I'm looking at a seldom-discussed and potentially useless feature of the Genesis hardware - the VDP sprite collision flag. Let's see how it works and decide whether there's any benefit to using it.


Sega Genesis Programming Part 22: 4 Way Play

Sega Genesis Programming Part 22: 4 Way Play

Just a small example on how to interact with the 4 Way Play if that's something you're interested in.


Sega Genesis Programming Part 23: A Simple Project Template

Sega Genesis Programming Part 23: A Simple Project Template

This is cramming all my various Genesis programming tutorials and code generation tools into a project template. It contains a four room demo that shows how to use all the actions & events in the Retail Clerk game engine. I don't particularly like that name but can't come up with anything better. Anyway, if you're interested in code to build simple games that are halfway between adventure and interactive fiction on the Genesis then you should check this out.


Sega Genesis Programming Part 24: Pseudorandomness

Sega Genesis Programming Part 24: Pseudorandomness

In this installment I introduce a new cast of characters and take them on a journey through a completely absurd building.



C# .NET Programming

Outlook Screen Saver

Outlook Screen Saver

An example of how to create a screen saver in C# and work with the Outlook object model.


Random Maze Experiment

Random Maze Experiment

Inspired by the game Minotaur for the Intellivision, this is an attempt to build a random 12x12 maze where every room is accessible.


Random Maze Experiment Part II - Objects

Random Maze Experiment Part II - Objects

A follow-up to the random maze demo where I tackle adding random objects to the maze.


Android Programming

Android SpriteWalker Demo

Android SpriteWalker Demo

A small demo on how to move a sprite around with collision detection and background music.


Quick Guide to Android Serialization

Quick Guide to Android Serialization

A very quick tutorial on how to serialize objects to an SD card from an Android application.


Browsing Facebook Albums from an Android Application

Browsing Facebook Albums from an Android Application

A demo application and tutorial about how to browse Facebook albums on Android.


Integrating Android Applications with the eBay API

Integrating Android Applications with the eBay API

A demo application illustrating how to invoke the eBay API, parse the results, and display them on an Android device.


Java Programming

Converting .bin audio files to .wav in Java

Converting .bin audio files to .wav in Java

Somehow you acquired images of old-school CD games that use Red Book audio but are in bin/cue format. I'm not asking any questions about where you got them. I just want to help you listen to the music if that's a thing you're in to. Here's a hastily written program to convert .bin audio tracks to .wav files using the built-in Java Sound APIs.


Searching for English words in .bin files (or any language or file type really)

Searching for English words in .bin files (or any language or file type really)

In this article I embark on a journey to find English text hidden in PC Engine CD games. It starts off quite mundane, almost sleep-inducing. Then it hits a wild plot twist that makes it worth all the effort.


Cloudfront+Athena+Pi+Java mini monitoring thing

Cloudfront+Athena+Pi+Java mini monitoring thing

For no real reason I'm going to write a Java program to read AWS Cloudfront logs and display the results on a small screen connected to a Raspberry Pi.


Writing a simple file browser in JavaFX

Writing a simple file browser in JavaFX

A quick example of how to write a little file browser using the JavaFX TreeView and TreeItem classes.


Java 8 Optional: What's the Point?

Java 8 Optional: What's the Point?

My first impression of the new Optional feature introduced in Java 8.


Applet Repair Course

Applet Repair Course

How to fix an old applet you don't have the source code for.


Creating a Recent File Menu

Creating a Recent File Menu

An example of how to create a recently used file menu in Java.



Other Topics

Atari 2600 BASIC Programming

Atari 2600 BASIC Programming

In 1979 Atari made a BASIC programming cartridge for the 2600. Since I enjoy obsolete technology and frustration I attempted to write a few almost useful programs on it, here are the results.


Outlook VBA - Coping with annoying appointments

Outlook VBA - Coping with annoying appointments

Some handy VBA code to take care of the most annoying appointments your co-workers force upon you.


How to not completely screw up your portal implementation - Part 1: The First Rule of Portal Design

How to not completely screw up your portal implementation - Part 1: The First Rule of Portal Design

After 5-6 years of working on portal applications I've learned a lot of painful lessons, there's no reason you should have to suffer too. The first installment in this series deals with the single most important design rule for portals.


The Abridged Story of Mercator Software

The Abridged Story of Mercator Software

My experiences at the now-defunct Mercator Software.


Exploring an unsuccessful php hacking attempt

Exploring an unsuccessful php hacking attempt

Let's take a quick look at a PHP hacking attempt from a Russian botnet.


Overlib Image Hover

Overlib Image Hover

How to create an image hover effect using Overlib.


Microsoft's Year 2000 Resource Center CD

Microsoft's Year 2000 Resource Center CD

Preparing developers for the end of the world.