Super Nintendo Architecture

A practical analysis by Rodrigo Copetti

Classic edition - Last updated: October 25, 2024

Languages available: 🇬🇧 - English, 🇪🇸 - Español, 🇧🇷 - Português (Brasil), 👋 - Add translation


About this edition

The ‘classic’ edition is an alternative version to the ‘modern’ counterpart. It doesn’t require Javascript, state-of-the-art CSS or convoluted HTML to work, which makes it ideal for readers who use accessibility tools or legacy internet browsers. On the other hand, eBook users can now check the eBook edition.

This edition is identical content-wise. However, interactive widgets have been simplified to work with pure HTML, though these will offer an link to the original article in case the reader wants to try the ‘full version’.

As always, this article is available on Github to enable readers to report mistakes or propose changes. There’s also a supporting reading list available to help understand the series. The author also accepts donations and translations to help improve the quality of current articles and upcoming ones.


Table of Contents

  1. Supporting imagery
  2. A quick introduction
  3. CPU
    1. Modernising the 6502
    2. The new CPU
    3. Ricoh’s additions
      1. Speedy memory access
      2. Segmentation Fault
    4. (Lots of) more memory
  4. Graphics
    1. Design
      1. The chipset
      2. Display modalities
    2. Organising the content
    3. Constructing the frame
      1. Tiles
      2. Background
      3. Modes
      4. Sprites
      5. Result
    4. That feature
    5. Cause of frame drops
    6. A convenient video out
  5. Audio
    1. Architecture
    2. Pitch control
    3. Evolution from the NES
    4. Advanced usage
    5. Stereo confusion
  6. Games
    1. Cartridge configuration
      1. Beyond convention
  7. Anti-piracy / Region Lock
  8. That’s all folks
  9. Copyright and permissions
  10. Sources / Keep Reading
  11. Contributing
  12. Changelog

Supporting imagery

Model

Image
The Super Nintendo (in Europe) or Super Famicom (in Japan).
Released on 21/11/1990 in Japan and 11/04/1992 in Europe.
Image
The Super Nintendo.
Released on 13/08/1991 in America.

Motherboard

Image
Motherboard
Showing revision 'SNS-RGB-CPU-01'.
Earlier revisions had the Sound Subsystem connected as a daughterboard, later ones unified both PPUs.
Image
Motherboard with important parts labelled

Diagram

Image
Main architecture diagram
Bus 'A' and 'B' are address buses, the data bus follows the trail of bus 'B' and it's 8 bits wide.

A quick introduction

It seems Nintendo managed to bring the next generation of graphics and sounds without using expensive off-the-shelf components. But there’s a catch: the new console was also designed with expandability in mind. In a world where CPUs are evolving faster than the speed of light, Nintendo ultimately depended on game cartridges to make its console shine.


CPU

The Super Nintendo’s choice of processor is a peculiar one. Unlike its competition bundling a fully-fledged 68000, the SNES’ chip is not a radical break from its predecessor. To recap, the NES employed a modified 6502 CPU, an admired ingredient of late-70s and early-80s computers. Now, to pave way for the new decade (the 90s), Nintendo went for a more conservative (and cheaper) solution: the WDC 65C816, a 16-bit extension of the 6502.

Modernising the 6502

The 65C816 CPU originates at Western Design Center, particularly from Bill Mensch, a former member of the 6502 team (at MOS) and the 6800 team (at Motorola). In 1978, one year after leaving MOS, Mensch founded Western Design Center (WDC), a semiconductor company that ships clones of the MOS 6502 with attractive enhancements (i.e CMOS design, extra opcodes, circuitry fixes, new addressing modes, etc).

Image
The WDC 65C816 chip found on the Apple IIGS.

One day, WDC was approached by Apple to design a backwards-compatible variant of the 6502 that could process larger amounts of data. This resulted in the WDC 65C816 CPU, released in 1983. Curiously enough, Apple went through many setbacks during the development of a computer that would use the new CPU, until three years later, with the release of the Apple IIGS.

Image
In the end, the Apple IIGS and the Super Nintendo became the only major adopters of the 65C816 CPU.

Meanwhile, Nintendo was enjoying a good relationship with Ricoh and their set of bespoken chips for the NES. I haven’t found the exact document outlining what connected Ricoh with WDC, but what I can confirm is that at some point in time, WDC agreed to license their 65C816 designs to Ricoh [1]. Consequently, the latter tailored it to the new requirements of the Super Nintendo and became the Ricoh 5A22, exclusively supplied to Nintendo.

The new CPU

As you’ve seen before, the main processor of this console is the Ricoh 5A22, a superset of the 65C816.

Image
The Ricoh 5A22 chip, labelled ‘S-CPU’ by Nintendo.

Unlike the Apple IIGS, which enjoyed backward compatibility with Apple II software, the Super Nintendo is not compatible with NES games. To be fair, by looking at the choice of processor, there’s a slight possibility that the SNES was originally planned to be compatible with NES games, who knows.

Moving on, the CPU employs a variable clock speed that will reach up to 3.58 MHz during register operations and down to 1.79 MHz when accessing the slowest buses (i.e. the serial/controller port).

Now, to properly understand the functionality of the 5A22, we must first look at what the 65C816 provides:

Looking at this, I have to confess the 65C816 feels excessively cumbersome for little gain. Compared to other offerings such as the Motorola 68000, it’s not difficult to conclude why the Apple IIGS ended up being the only personal computer to adopt the 65C816. Nonetheless, throughout the article you’ll see how Nintendo and Ricoh managed to turn the limitations of this CPU into opportunities to revamp its game library.

Ricoh’s additions

The 65C816 is a general-purpose CPU conceived in 1983 as a follow-up of its 1975 ancestor, with all the requirements and constraints that this implies. Yet, Nintendo planned its console to last throughout the 90s. Thus, Ricoh had to step up its game (if you pardon the pun).

First on the list was to tackle its arithmetic limitations, the 65C816 doesn’t include any dedicated instructions for multiplication or division. As a consequence, Ricoh added 16-bit multiplication and division units, enabling the CPU to carry out these types of operations by hardware (instead of software).

Now, ‘why is this relevant’ you may be wondering, and the answer will come up when we discuss certain novelties of the Super Nintendo’s graphics chips (in the ‘Graphics’ section).

Speedy memory access

The second challenge was to increment its data bandwidth. Hence, two exclusive DMAs (Direct Memory Access) were added to move data around without the intervention of the CPU (resulting in faster speeds). For this design to work, regions of memory are referenced using two different address buses [6]:

When a DMA is being set up, the origin must come from a different bus than the destination.

Furthermore, the two DMAs are not identical and provide very distinct functionality [7]:

Finally, the system provides eight channels to set up DMA transfers, thus enabling to dispatch up to eight independent transfers at once.

Segmentation Fault

This console also features a special ‘anomaly’ called Open Bus: If there is an instruction trying to read from an unmapped/invalid address, the last value read is supplied instead (the CPU stores this value in a register called Memory Data Register or MDR) and execution carries on in an unpredictable state.

For comparison, the 68000 uses a vector table to handle exceptions, so execution will be redirected whenever a fault is detected.

(Lots of) more memory

It’s fascinating to realise the amount of content the NES managed to show with only 2 KB of RAM. Well, the Super Nintendo now features 128 KB of SRAM (still called ‘Work RAM’ or WRAM). That’s 6400% more general-purpose memory than its predecessor.

So, what can developers do with this? Anything they desire, really. WRAM is used to store variable information for the game. The greater the space, the more information can be stored and processed (thus, saving in catridge hardware). Bear in mind, however, the following sections in this article will show you that the Super Nintendo is a fairly complex machine (albeit its ‘simplistic’ CPU), I tend to call this console a ‘collection of mini-computers/subsystems’. Now, each subsystem may need data from the CPU. Thus, programmers may allocate part of WRAM to process that information, thereby justifying the need for 128 KB.


Graphics

After everything said so far, let me tell you that the graphic subsystem of this console is a true work of engineering. With such a constrained CPU, one would imagine the SNES could never cast a shadow on its competitor featuring a ‘32-bit’ Motorola 68000. Yet, Nintendo and Ricoh engineers managed to find clever tricks that take advantage of the way CRT displays behave, thereby expanding the capabilities of this console without requiring expensive state-of-the-art components.

In any case, before we go in-depth I strongly recommend reading the NES article first since it introduces useful concepts that will be revisited here.

Design

As with any other console of its generation, the Super Nintendo draws graphics using 2D tiles (8 x 8 pixels). The NES originally accomplished this by bundling the signature ‘Picture Processing Unit’ (PPU) that beams the image in pace with a CRT screen. The Super Nintendo follows suit but it now implements more sophisticated techniques to obtain richer results.

The chipset

The Super Nintendo houses two different PPU chips that constitute the graphics subsystem, which combined are known as Super PPU or ‘S-PPU’.

Image
The two PPU chips.

Both PPU packages are designed to serve different functionality [8]:

This separation, from the programming point of view, is redundant since both chips are virtually treated as one.

Display modalities

The system outputs a standard resolution of 256 x 224 pixels at ~60 Hz (NTSC) [9]. The European PAL variant outputs 256 × 240 pixels at ~50 Hz instead (to abide by the PAL specification). Be as it may, most games don’t use the extra pixels and show a letterbox (black lines) instead.

Now, here’s the tricky part, traditional TVs have an aspect ratio of 4:3. Yet, if you do the math, the Super Nintendo’s output resolution has an aspect ratio of 8:7. Consequently, after beaming the picture on the TV, it will look horizontally stretched, as if it were a 292 x 224 pixels frame instead (in the case of the NTSC variant) [10]. To put it in another way, you could say pixels on the Super Nintendo have an aspect ratio of 8:7 instead of being ‘perfectly squared’.

Image
Rendered frame with a resolution of 256 x 224 pixels. This is what the console sends to the TV.
Image
Stretched frame as seen from the TV (with an apparent resolution of 292 x 224 pixels).
Kirby’s Dream Land 3 (1997).

Some games like ‘The Legend of Zelda: A Link to the Past’ account for this factor so shapes are explicitly squashed by design, which looks correct after being stretched by the TV. This, however, is an exceptional case since the majority of games take no extra measure to account for this factor.

Organising the content

Image
Memory architecture of the S-PPU.

Due to costs and performance reasons, graphics data is distributed across three regions of memory:

Constructing the frame

Let’s now see how a frame is rendered on the console and subsequently displayed on TV. For demonstration purposes, Super Mario World will be used as an example.

Tiles

Image
Some 16x16 Tiles found in VRAM.

Just like its predecessor, the S-PPU uses tiles to build sophisticated graphics. Although, there are significant improvements compared to the original PPU:

Background

Image
Background Layer 1 (BG1).
Image
Background Layer 2 (BG2).
Image
Background Layer 3 (BG3).
Background maps in VRAM.
Image
Rendered Background Layer 1 (BG1).
Image
Rendered Background Layer 2 (BG2).
Image
Rendered Background Layer 3 (BG3).
Image
Rendered Background Layers combined.
Rendered Background layers after selection and transparency are applied.

The Super Nintendo can generate up to four different background planes. Using either 8x8 or 16x16 tiles, blocks are made of 32x32 pixels (2x2 tiles). That being said, the size of each background layer can be up to 1024x1024 pixels wide (32x32 tiles). The region in VRAM where these layers are configured is called Tilemap and is structured as a table (continuous values in memory).

Each entry in the Tilemap contains the following attributes:

As always, these planes are scrollable, though the number of features available (colour, number of layers, independent scrolling region and size of selection) will depend on the Background mode activated on the S-PPU, which brings us to the next section…

Modes

The S-PPU provides many operations for backgrounds, but these can’t be chosen arbitrarily. Instead, there are eight background modes to choose from, each one providing a different set of features [11]:

As you can see, programmers now have the choice of prioritising either the number of colours, layers, effects or resolution of the selected area.

Sprites

Image
Rendered Sprite layer.

An area on memory called Object Attribute Memory (OAM) stores a table with references of up to 128 sprites with these properties [12]:

The S-PPU can draw up to 32 sprites per scanline, overflowing this will only make the S-PPU discard the ones with the lowest priority.

Result

Image
Tada!

The S-PPU draws each scanline on-the-fly by first processing the respective portion of each layer and then mixing them together.

One of the main constraints of NES games was the fact that they could only update their graphics during V-Blank. The moment from which the CRT’s beam was returning to the starting point provided a reasonable time frame to reshuffle some tiles without breaking the image.

Well, now thanks to the new capabilities of the SNES, this limitation gained a different meaning.

You see, because the new DMA/HDMA units now enable programmers to perform memory transfers without waiting for V-Scan [13], games can now update tiles, colours and registers without waiting for the whole frame to be drawn. In fact, we can go beyond that: Since games can now change the S-PPU settings during mid-frame, this means that it’s possible to activate different background modes at different stages of the same frame, opening the door to new and original game designs!

That feature

Truth to be told, I still haven’t mentioned the most important characteristic of this console…

Image
Rendered Background layer.
Image
Allocated Background map.
Image
Rendered frame on the screen.
The first quarter of scan-lines uses another mode to simulate distance, Mode 7 starts at the second quarter (this is possible thanks to HDMA).
F-Zero (1990).

Introducing Mode 7, yet another background mode, but this time, with a completely different way of working. While it can only render a single 8 bpp background layer, it provides the exclusive ability to apply the following affine transformations on that plane [14]:

The S-PPU is controlled with a rotation matrix to alter the parameters of this mode. I won’t go into the linear algebra here, but depending on the desired effect, the CPU will have to perform some trigonometric functions (sine and cosine) to fill the entries of this table accordingly. This is really expensive for the 65C816, even with the use of fixed-point precision. For this reason, with the 5A22, Ricoh added multiplication and division registers to offload some cycles.

By the way, notice that the list of transformations doesn’t mention perspective, which is what you see in the example game (F-Zero). This is achieved by altering the rotation matrix at each HDMA call, creating a pseudo-3D effect in the process. That should give you an idea about how practical the S-PPU is!

Finally, due to the high number of calculations needed, the memory map is changed to optimise the pipeline of the two PPUs, the first one processes the Tilemap (where tiles are referenced) while the other fetches the Tileset (where tiles are stored).

Cause of frame drops

One another topic, have you ever wondered what causes games to lag? When the V-Blank interrupt is called to allow graphics update, sometimes the game is still executing some heavy code and skips the V-Blank window, graphics can’t be updated until the next V-Blank call and since the frame wasn’t updated, this is manifested as a drop in frame-rate.

This can also happen the other way around, extensive processing during a V-Blank won’t allow the PPU to output the video signal (as the bus is blocked). Thus, black lines during a scan will be shown, although this is barely noticeable since the frames update 50 or 60 times per second.

A convenient video out

All of the aforementioned advancements will be futile unless the console sends the picture to the TV through a medium both can understand. With the Super Nintendo, the company debuted some sort of universal-but-proprietary connection called Multi Out which can transport many types of signals at the same time, including Composite, S-Video and RGB [15].

Along with the console, Nintendo bundled a ‘Multi Out to composite’ cable since that was pretty much the common denominator of TVs back then. In Europe however, the SCART port was also very popular as many set-top boxes and VCRs relied on it. A great thing about SCART is that it can also carry many types of signals, this enables AV equipment to use the most optimal signal type without encountering compatibility issues. As far as I know, only French consumers were offered an official SCART cable that took advantage of the RGB pins exposed in the Super Nintendo [16].

Nonetheless, Nintendo altered the pinout of its PAL consoles to comply with the SCART protocol, and in doing so it replaced the ‘composite sync’ pin with a 12 Volts one (which tells the TV to set the 4:3 aspect ratio). So, even though Multi out is ‘universal’, the resulting RGB cables, if any, are region-specific.

I think the real benefits of Multi Out started to become evident during present times, as it allowed users to take advantage of the RGB signal with their state-of-the-art tellies without tampering with the internals of this console. Although, unlike composite and S-Video, RGB requires an extra ‘sync’ signal. For this, the cable can be wired up to capture the sync signal from composite or S-Video; or for best results, use a dedicated sync line called ‘composite sync’. But, as mentioned in the previous paragraph, only NTSC consoles carried the latter.


Audio

Just like graphical abilities, the audio department of this console has gone through a significant revamp. I would say it even provides the most advanced synthesising techniques of its generation.

Architecture

Some companies partnered with Yamaha, others devised an in-house solution. Well, Nintendo partnered with Sony (the electronics conglomerate and authors of the Walkman) so they provide them with a sophisticated synthesiser. And so, Sony gave them two processors: a DSP that can sequence and mix samples; and a CPU that drives that DSP.

Hence, the resulting audio subsystem of this console is composed of:

This block functions in parallel with the main CPU. When the console is turned on, the SPC700 boots a 64-byte internal ROM that sets it up to receive commands from the main CPU [18]. After that, it stays idle.

Channels used for melody.
Drums are discriminated for demonstration purposes.
All audio channels.
StarFox (1993).

For the S-SMP to start doing useful work, it needs to load a type of program referred to as Sound Driver. The latter instructs the chip on how to manipulate the raw audio data that the main CPU sends to PSRAM and also how to command the S-DSP.

As you can see, the sound subsystem was a huge advancement compared to the previous generation, but it was challenging to program as well. The documentation that Nintendo provided was notable for including unintelligible explanations and skipping important features altogether, so it was up to the programmers to carry out their own research.

As a consequence, there were tons of different sound drivers found on the market [19], and some of them ended up uncovering impressive features.

Pitch control

Pitch bending enables to produce distinct notes using the same sample. Well, the S-SMP included a useful bender to alter the pitch in a smooth manner. Take a look at this extracted channel from Mother 2/Earthbound, both examples come from the original soundtrack, however, the first one has the pitch control disabled.

No pitch bend.
With pitch bend enabled.

Evolution from the NES

In order to demonstrate the evolution of sounds from the NES to the Super NES, here are two music scores, one from an NES game and another from its Super NES sequel. Both used the same composition:

Mother (1989).
Mother 2/Earthbound (1994).

Advanced usage

Channels used for melody.
Drums are discriminated for demonstration purposes.
All audio channels.
Kirby’s Dream Land 3 (1997).

Here’s a more instrument-rich composition that takes great advantage of pitch bending, echo and envelope.

This combination of techniques allowed the music to only require five channels in total, leaving the other three for sound effects.

Stereo confusion

The DSP’s volume controls are organised in chunks of signed 8 bits values [20], this means that the volume can be set up with negative values. But hang on, if ‘0’ means mute, what would a number like ‘-1’ do? Well, it will invert the signal.

This is particularly used for creating a special surrounding effect, which is accomplished by setting the stereo channels to output out of phase (one channel outputs the normal signal and the other outputs the same signal but inverted).

Unfortunately, abusing this feature results in very unpleasant results (e.g. the feeling that the music is coming from inside your head), so you will notice that most SNES emulators just skip this setting altogether.

Additionally, out-of-phase stereo gets cancelled out on mono devices, so those games had to include a stereo/mono selector to avoid muting their own soundtrack.


Games

To be blunt, the main program is written in plain 65816 assembly and the music driver is written in SPC700 assembly. I’m afraid you won’t find any of the commodities available on 21st-century-equipment.

There were, however, some tools distributed by Nintendo, Intelligent Systems and Ricoh to make life easier for programmers, these included [21]:

Curiously enough, multiple game studios like Argonaut Software, Accolade, SN Systems and so forth also developed their own in-house equipment that provided more capabilities than the official offerings (i.e. memory editor, floppy disk reader, devkit as an ISA daughterboard, etc) [22].

Cartridge configuration

When it comes to accessing the cartridge, things get a lot more confusing compared to the relatively simpler mapping model of the NES. I find it interesting nonetheless, especially for understanding how it could be expanded.

The 65C816 uses a 24-bit address bus, which allows it to access up to 16 MB worth of data. However and due to the way this console is designed, part of the address space is consumed by memory-mapped components. Moreover, 65C816 only comes with 16 address lines, which are then combined with an internal register to form a 24-bit address. This is analogous to housing an internal mapper and requiring bank switching to access extra data beyond the boundaries of the address bus. If you read other articles of the same generation, you’ll find this methodology somewhat familiar.

Image
Example cartridge boards designed with different configurations [23].
From top to bottom: LoROM (dual ROM with battery-backed SRAM), LoROM (single ROM with battery-backed SRAM) and LoROM (single ROM)

That being said, when it comes to designing the cartridge, there are many ways of electrically connecting the address pins between the ROM and the CPU. Each takes advantage of bank switching in a different way. There are two fundamental models that enables accessing up to 4 MB of ROM and 64 KB of SRAM [24], and they work like this:

In both cases, a large part of the ROM space is mirrored across the leftover area of the CPU’s address space, but here’s the interesting part: one half of the space can be read at ~2.68 MHz while the other can reach 3.58 MHz. This will only happen if the ROM chip supports the higher speed and the CPU’s FastROM flag is enabled [26].

Something I haven’t mentioned yet is that cartridges that bundle SRAM also need to house a MAD-1 (or similar) chip, which performs address decoding. This is especially needed for properly latching the pins that select between ROM and SRAM chips [27].

Beyond convention

Now, if programmers need more space, that’s when derivative models of LoROM and HiROM come into place. For instance, two variations commonly referred to as ExHiROM and ExLoROM expand the ROM’s addressing space by reducing the mirrored area. Both can access ~7.9 MB of ROM.

Image
Star Fox (1993) uses the Super FX GSU chip to render 3D surfaces (the S-PPU only sees a background layer made of erratic tiles).

Alternatively and most importantly, LoRom and HiROM can also be adapted to house enhancement chips in the cartridge. These are additional processors that expand the capabilities of the console. To name a few examples of new configurations:

It’s difficult to ignore the impact this engineering made on games during the 90s, many of which managed to exceed the expectations of this console without requiring expansion modules and whatnot. You could say this complicated Nintendo’s plans to deliver a successor of this console (which may explain why advanced games like Star Fox 2 were cancelled).


Anti-piracy / Region Lock

With the Super Nintendo, Nintendo once again became the sole authority on game distribution. Thus, in an attempt to enforce the company’s rules, engineers devised three different layers to protect cartridges against third-party distribution (and subsequently circumvention of royalties).

Firstly, the external shape of cartridges is different between regions, so they won’t fit on consoles from different regions. Be as it may, anybody could easily go around this by using a third-party adapter.

Secondly, this console, like the NES, still incorporates the 10NES protection system to lock out non-authorised distributors. Be as it may, the CIC chip was eventually cloned.

As a final layer (and specially made to protect against bootlegging) games also included a chain of piracy checks like:

  1. Comparing the SRAM size (bootlegs normally include large SRAM blocks to fit any kind of game).
  2. A series of checksums on the code to check if the previous comparison was removed. These checks would be dispersed at different stages of the game, so they’d be difficult to find.

This could be nullified by manually removing these routines but, naturally, it would take significant time to find all of them. After all, they would be scattered around the game only to upset the player (and eventually make them buy a legitimate copy). Truth to be told, you’ll notice that most ROMs surfing the internet had all their piracy checks removed.


That’s all folks

Image
My modded SNES with an American cartridge.
That game was only released in the states. Luckily, a lad was selling it in Glasgow!

Contributing

This article is part of the Architecture of Consoles series. If you found it interesting then please consider donating. Your contribution will be used to fund the purchase of tools and resources that will help me to improve the quality of existing articles and upcoming ones.

Donate with PayPal
Become a Patreon

You can also buy the eBook edition in English. I treat profits as donations.

Image

A list of desirable tools and latest acquisitions for this article are tracked in here:

Interesting hardware to get (ordered by priority)

Acquired tools used

Alternatively, you can help out by suggesting changes and/or adding translations.


Copyright and permissions

This work is licensed under a Creative Commons Attribution 4.0 International License. You may use it for your work at no cost, even for commercial purposes. But you have to respect the license and reference the article properly. Please take a look at the following guidelines and permissions:

Article information and referencing

For any referencing style, you can use the following information:

For instance, to use with BibTeX:

@misc{copetti-snes,
    url = {https://classic.copetti.org/writings/consoles/super-nintendo/},
    title = {Super Nintendo Architecture - A Practical Analysis},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "Super Nintendo Architecture - A Practical Analysis", Copetti.org, 2019. [Online]. Available: https://classic.copetti.org/writings/consoles/super-nintendo/. [Accessed: day- month- year].

Special use in multimedia (Youtube, Twitch, etc)

I only ask that you at least state the author’s name, the title of the article and the URL of the article, using any style of choice.

You don’t have to include all the information in the same place if it’s not feasible. For instance, if you use the article’s imagery in a Youtube video, you may state either the author’s name or URL of the article at the bottom of the image, and then include the complete reference in the video description. In other words, for any resource used from this website, let your viewers know where it originates from.

This is a very nice example because the channel shows this website directly and their viewers know where to find it. In fact, I was so impressed with their content and commentary that I gave them an interview 🙂.

Appreciated additions

If this article has significantly contributed to your work, I would appreciate it if you could dedicate an acknowledgement section, just like I do with the people and communities that helped me.

This is of course optional and beyond the requirements of the CC license, but I think it’s a nice detail that makes us, the random authors on the net, feel part of something bigger.

Third-party publishing

If you are interested in publishing this article on a third-party website, please get in touch.

If you have translated an article and wish to publish it on a third-party website, I tend to be open about it, but please contact me first.


Sources / Keep Reading

Audio

CPU

Games

Graphics

Photography


Changelog

It’s always nice to keep a record of changes. For a complete report, you can check the commit log. Alternatively, here’s a simplified list:

2024-09-30

2024-01-14

2022-11-19

Super revamp:

2021-07-10

2020-09-23

2020-08-23

2019-12-08

2019-10-28

2019-09-17

2019-09-01

2019-08-29

2019-06-28