Now available: Sub-articles: articles that I didn't get around to writing detailed expositions for.

How Emulators Work: a presentation
At deviantART's technology team meetup in France ('Breadlands 2012'), I gave a short Ignite talk distilling the first three articles in the Gameboy Emulation in Javascript series. The slides from that talk are now available here.
Printable Opcodes in x86 Real Mode
Procedures for transmission of files over ASCII-text networks generally involve some form of encoding such as uuencode. When program executable files are being encoded for transmission, extra steps are required at the receiver before the program can be run. This article explores the concept of a program which has been encoded for an ASCII-text network, but can also be run directly without decoding; in this case, the article is limited to MS-DOS programs.
Memory Usage of Constants in PHP
PHP provides two methods of defining constants: global-scope constants and class constants. A friend of mine, while discussing the issue with Derick Rethans, was informed that class constants are more memory efficient; this article documents my investigation into the reasons behind that assertion.
Binary Coded Decimal Addition on Atmel AVR
The AVR instruction set manual mentions binary-coded decimal exactly once, and provides no instructions for easily working with BCD values, despite the utility of BCD in embedded applications. This article explores the issues involved in working with BCD values, especially in incrementing and adding such values, and introduces an algorithm for resolving the discrepancies that arise.
GameBoy Z80 Opcode Map
The CPU used by the Nintendo GameBoy is a specially modified version of the Z80, with various functions removed to make the CPU cheaper to manufacture. Documentation for this CPU is often lacking; the most common opcode maps are written down as a standard Z80 map with addenda for the Nintendo modifications. This opcode map collates the references into a coherent opcode map for the Nintendo GB-Z80.
Parsing the DIME Message Format
If a SOAP web service requests in a complex response, where more than one file has to be returned, an encoding format has to be used to fit the files into one message. One of the more common formats is Microsoft DIME, used by Jasper Reports and other services. This article looks into how a DIME message can be parsed, and the files pulled out to work with.
JavaScript Slideshows
Many developers state that modern JavaScript effects, such as slide-shows and news tickers, can only be viably achieved using frameworks such as jQuery and Dojo. This article sets out to demonstrate that it is in fact a simple affair to construct a slideshow using JavaScript and DOM manipulation, without the need for such frameworks.
List of Countries and Dependent Territories
If you've ever needed to know which country is at UTC+3.5 (it's Iran), or who is responsible for administrating the Western Sahara (that's Morocco), it's all in here. List is also available in SQL, for such situations as a 'select your country' dropdown on an e-commerce Website.
Asynchronous JavaScript and JSON
The most common problem that people encounter when using AJAX is that they can't update more than one region of a Web page at the same time, since the request only comes back to fill one region. Using JSON, it's possible to update multiple regions at once, and it's even possible to run inline JavaScript in the AJAX response, automatically. The magic behind it is explained here.
Using Pointers in C#
The current crop of programming languages tend to frown upon the use of pointers, deeming them to be unsafe for everyday work; indeed, many languages ban their use altogether. C# is different: it is possible for a C# program to delve into pointers, but there are caveats. An example is given in this article, using a graphical bitmap effect driven by pointer arithmetic.
The Structure Pattern
Reading and manipulating binary files can be troublesome in PHP, primarily because the language doesn't have a native type to represent structures of encoded data. Using the Structure pattern allows PHP to load and work with these files, by providing a method of decoding the data into a class and performing calculations. Examples are given in this article of the Windows BMP and TrueType file formats.
JavaScript Tetris
It's often said by some that JavaScript isn't a real programming language, that it can't provide the full range of development possibilities that a more complex language would be able to give. It's quite easy to prove this argument wrong: JavaScript is a full-blown language, with some very interesting features that conventional languages fail to bring to the table. It's also quite easy to write programs with, and I put this example together to prove the point: an implementation of Tetris in HTML and JavaScript, playable right in your browser.
ARM Opcode Map
There are many places in which you can look if you want an explanation of the instructions available on the ARM series of processor cores. However, there is no overview of the instruction set in the form of a table or map; not even the official ARM instruction reference provides this anywhere in its 811 pages. I produced an opcode map in 2006, in an attempt to rectify this problem: it provides a mapping of all the instructions and addressing modes for cores up to ARM version 4, with version 5 extensions highlighted in blue and the DSP extensions in green.
Interfacing ADODB to PDO
Many developers who come to PHP from ASP bring their experience of using ActiveX Data Objects (ADO) to interface with databases; however, existing solutions to allow ADO usage from PHP suffer from performance and support issues. Using PHP's native Data Objects (PDO) library can be infeasible for legacy applications: with the code provided here, PDO can be used with no redevelopment of the application.
Trainf*ck
One of the most widely-known esoteric programming languages is Brainf*ck, which attempts to break computing operations down into the simplest possible steps: just eight operations are provided, along with a small buffer of memory to work with. The problem with Brainf*ck is that it only provides the most basic I/O, interfacing with the console. Trainf*ck is an extension of the language, which endeavours to provide the ability to read and write files, and communicate over a TCP/IP network.
Get the RSS feed