This blog article is based on my seminar presentation held during Revision 2024.
The original presentation can be found here.
Who are we?
I’m Cyril Lambin, my demoscene name is Fenarinarsa and I’m part of the demogroup “French Touch”.
French Touch has been doing demos on the Apple II since 2014 with more than 30 official releases, and currently consists of two members: Grouik (FT’s founder) and Fenarinarsa. We are both coders.
You can find all FT’s releases on French Touch Vault. The source code for all releases is also available under GPLv3.
As for myself, I’m part of the Atari ST scene since 1992 and part of the Apple II scene since 2018.

The Apple II family
Like many computers of the same era, the Apple II is not one computer but a line of computers. I could describe them in details but that would not be relevant, let’s just list the major models with their main specs, if you aren’t familiar with them.
The family

First released in 1977, the Apple II went out of prodution in 1995. That’s 18 years!
- 1977 – Apple II
- 1979 – Apple II+ – Better Apple II, one of the easiest to find
- 1983 – Apple IIe – New graphic modes and RAM expansion. Also exists as “enhanced” (65C02 + new character ROM)
- 1987 – Apple IIc – Compact, non-expandable version of the IIe
- 1986 – Apple IIgs – 16 bits computer with some 8-bits retro-compatibility
- 1987 – Apple IIe Platinum – IIe enhanced, with a new case
- 1988 – Apple IIc+ – 4Mhz enhanced version of the IIc
- 1991 – Apple IIe card for Mac – Non expandable Apple IIe on one small board to be used on some macs.
I won’t talk about the IIgs. It’s a whole different computer that I don’t know very well. People like Brutal Deluxe should answer all your questions about it.
Specifications
Out of the box main specs
The Apple II 8-bits family is based on 6502 or 65C02 CPU running at ~1Mhz (except the IIc+).
The minimum RAM available is 48k except for some very first (and rare) original Apple II’s. Starting from the Apple IIe, they can support natively up to 128k.
There’s 3 video modes, expanded to 6 starting from the Apple IIe (if 128k RAM installed).
The Apple II and Apple IIc+ are only available in NTSC, while all the others are available in both PAL and NTSC.
PAL and NTSC models are different (a PAL model can’t output NTSC).

Standard I/O available on all 8-bits Apple II
- Keyboard
- Composite color video output*
- Joystick input
- Internal speaker
* except for the Apple IIc PAL, which needs an external composite modulator to output composite color.
In addition, the non-compact models (Apple II / II+ / IIe) have ‘Tape in’ / ‘Tape out’ audio ports, which were mostly used around 1977~78.
The compact models have a lot mode I/O available since they were planned to be non-expandable:
- Serial
- Printer
- External video expansion port
- External floppy port
- Internal floppy disk drive
Specs that should interest demosceners
Let’s start with stuff that the Apple II family does NOT provide out of the box:
- No timers
- No interrupts [except the IIc/IIc+]
- No DMA
- No video acceleration
- No simple framebuffer (they’re hard to work with, really)
- No audio chipset
And some stuff that is quite surprising for the time:
- Double buffering available in all video modes
- Interesting routs in ROM (like 2D vectors)
- Vsync features available starting from the Apple IIe
Expansion cards
Like the IBM PC in 1981, the Apple II computers were meant to be used with expansion cards. They’re known as “Peripheral cards” and are so common that some were supported natively by the Apple ROM and ProDOS, and considered mandatory by almost all users, like the floppy disk interface.
So what can you do with those peripheral cards?
Quite anything, actually, since they can give you control over the CPU and the RAM. So the actual limit is your imagination.
It’s worth noting that cards can provide Interrupt sources, timers or even DMA transfers.
Some examples of cards available in the 1970/80s:
- Floppy disk (quite mandatory)
- Serial
- Parallel
- RAM expansions (very common)
- Mouse
- CPU accelerators
- Additional CPU (Z80, 68008)
- Video cards (common in some PAL countries)
- Sound cards
- “Debug” cards (to “backup” your software)
- etc.
Cards are still being created by enthusiasts, like:
- 20Mhz accelerator + PCM sound card
- High resolution HDMI video card
- CF-card HDD interface
- etc.
What’s possible on Apple II?
Selection of games
Let’s watch a selection of technical games to see what’s possible to achieve on those computers. All games run on a 48k original Apple II except Prince of Persia, which needs at least a 128k Apple IIe.
The 1980/90s 8-bit Apple II scene
The scene on the Apple II during the 1980s was a cracker scene, with a couple of real demo prods being released in the early 1990s.
This video shows almost all that exists from this period, so it was a very small scene that can’t be compared with the other 8-bits/16-bits scenes.
You can still see that the very first cracktro seems to be on Apple II 🙂
What’s striking is the absence of sound, since playing music on the Apple II is a very complex and CPU-intensive process.
Rebirth of the Apple II scene (2011+)
In 2011, Krüe released “Art where?” on Apple II, a single code generated image:
Then more prods were released, and that’s the current status of the scene on Apple II:
Modern development
Good and bad news
First, the good news !
- You’re a 6502 coder? You’re good, since everything is software-based.
- Lots of source code/tools/routs are already available. Also, you can reuse code from the C64/Atari XL world (like math functions etc)
- AY/YM musician? You’re good as well since the audio cards are AY-based.
- Emulators are 99.99% accurate!
- It’s a small but dynamic community. There’s not a lot of Apple II sceners so we share knowledge easily.
Now, the bad news…
- Unless you want to make a wild prod based on some specific peripheral card (HDD, 20Mhz CPU etc), you’re stuck with a 1Mhz CPU with no hardware acceleration.
- There’s a huge lack of cross-dev graphic tools, so we have to resort to converters or to use old Apple II graphic software.
- Advanced demos often use the 0.01% not correctly emulated. Currently, only Accurapple does reproduce exactly what you can see on a real Apple II.
- The biggest community is US-based, which, for the most part, is not interested in demos and won’t be able to run PAL prods.
Modern tools
Code:
MERLIN, acme, cc65… any 6502/65C02 assembler will do, same for the IDE.
We use VScode + makefiles + acme + our own Python scripts to generate floppy disk images.
Note that the defacto standard on Apple II is MERLIN.
Music:
Any PT3 compatible tracker, or any other AY/YM tracker + .YM conversion.
For example, we used furnace and a VGM to .FYM converter for the intro of our demo anthology DIX.
Grafx:
Gfx software on Apple II
GrafX2 for HGR on PC (in “Apple II HGR” 8-bits mode, currently emulating only RGB outputs)
Dithertron or other converters (not 100% accurate)
Which target to use
Three models are worth using as target when making demos: Apple II+, Apple IIe and Apple IIc.
They have incompatibilities though :
- 6502 vs 65C02. The Apple II+ and IIe use a 6502 CPU, while the IIe “enhanced” and the IIc use a 65C02. The cycle count differ for some instructions and the 65C02 has more instructions.
- Vsync. There’s no Vsync on Apple II+ (unless you use a trick), the IIe and IIc have different Vsync implementations.
- Graphic modes between the II+ and IIe/IIc.
- RAM available.
For demos, it’s better to use targets with well known cards. Here’s the targets used by French Touch:
- Apple IIe, 128k, Mockingboard, Floppy, mostly PAL
- Apple IIc, Mockingboard, mostly PAL
The 6502/65C02 difference can be solved by modifying the code on the fly, not using opcodes that have different timings in time-critical segments, or by making double releases.
The Vsync difference can be solved by using a timer on the Mockingboard (see below).
Challenge #1: Sound
Speaker sound
Sound specs of the Apple II are very… bare, to say the least.
Basically, when you read or write to address $C030, you get a click on the speaker, and that’s all.
- The speaker doesn’t hold state (1 click = up + down)
- Software sound rendering stop all other tasks and must be integrated in the middle of your code.
- To replay sampled sound, you must use PWM (Pulse Width Modulation)
- This makes demo with speaker music overly complex to do, but feel free to make one!
Mockingboard
Nowadays, demos require the Mockingboard Sound card (or compatible).
It’s a dual AY-3-8910 or dual YM2149 based card.
Some people told us it was cheating. Really? So I guess having a 3D card in your PC for games and demos is cheating too? 🙂
- It was released in 1983
- It’s supported by ~50 games
- It’s available for II+, IIe, IIc, IIc+
- It has 6 PSG channels
- There’s two AY or two YM – 1 left, 1 right
- Also it has two VIA 6522 for I/O
- And it comes with 4 timers!!
- You can also have more than one Mockingboard installed. You can perfectly can make a 12 or 18 channels tune (Ultima did).
6502 players are available for the following formats: PT3, YM, MYM, PYM, FYM
I made this video about the Mockingboard and the available players (with English subs):
Challenge #2: Graphics
Video modes

All Apple II have at least 3 video modes through the composite video output :
- TEXT – 40×24, B&W
- Low Resolution (GR) – 40×48, 16 colors
- High Resolution (HGR) – 280×192, 6 colors
The IIe and IIc added 3 extended modes when a second 64k RAM bank is installed (total 128k):
- 80 column TEXT – 80×24, B&W
- Double Low Resolution – 80×48, 16 colors
- Double High Resolution – 560×192 monochrome / “140”x192 16 colors
+ dozen of other modes supported by specific video cards.
In addition, a “mixed” mode is available when you can mix graphics on top of the screen and 4 lines of TEXT at the bottom of the screen.

Framebuffers & more specs
Some technical information on all those modes.
- TEXT and GR start at $400 or $800 (page 2)
- HGR and DHGR start at $2000 or $4000 (page 2)
- The framebuffers are not linear. For example in TEXT mode, line 0 starts at $400 and line 1 at $480.
- “80 column” and “Double” resolutions use the same framebuffer addresses on two RAM banks, mixing bytes between the banks.
- The TEXT charset is not modifiable in software.
- The Low Resolution and Double Low Resolution is actually TEXT modes with color activated and an alternate charset containing color patterns.
Colors: the Apple II big lie
Understanding how color works on the Apple II is a bit tricky if you’re not used to how colors are generated on a composite signal but I’ll try my best 🙂
What’s important to understand is that the Apple II is NOT a color computer. Instead, it uses clever specs of the NTSC composite signal to create color in the TV or monitor. (PAL models use a NTSC composite to PAL composite color converter)
- There’s no color DAC, no palette and no color modulator
- It generates a monochrome 560×192 video signal
- It tells the TV or monitor “this is a color signal”
- On the TV, the NTSC chroma demodulation is enabled and decodes the signal as “color”
- Since the 560 pixels/line is “too much”, they appear as big color artifacts on screen.
One could understand the generation of color as being a huge trick, using composite artifacts to create color.
To be more precise:
- 1 NTSC chroma cycle = 4 dots (for a line of 560 dots)
- dots enter a QAM modulator
- You get 16 “colors” but it’s not chunky. A color “pixel” can be 1 to 4 dots wide.
- However, sometimes, a “chunky” approximation (1 color = 4 dots) works well despite all those issues.
Now, if you recall the various resolutions available, you see that only Double High Resolution has a resolution of 560×192. And in practice, this is the only video mode where you can individually address all dots. In all other modes, you’ll have to address 2 dots at the same time (HGR), reducing the number of colors available. Or you can address 14 dots at the same time in Low Resolution, which enables easy – but blocky – 16 colors.
So for GR, the final resolution is 560×192 but you can only address them as blocks of 14×4 dots:

Colors never start and stop on the same column, but when the signal starts or stops:

Changing color means interference or white/black areas.
Any 4 consecutive black dots = black
Any 4 consecutive white dots = white

In HGR, the final resolution is 560×192 but you can only address them as “pixels” of 280×192 + delay trick.

The higher bit of of each byte delay the signal by 1 dot, so instead of having only 4 colors, you get 2 more colors, hence the 6 colors mode. That’s also why only 7 bits of each byte is used to define the actual pixels in HGR

In all color modes, but especially in HGR, you get big color clashes:
The two main video tricks on the Apple II
Mode change
- Any video mode change is immediate (2 cycles)
- Change mode during HBLANK: Invisible
- During display: Invisible if there’s no graphic data, else video artifacts during 2 cycles (14 pixels)
- 99% of emulators don’t show the real thing 🙁
MAD EFFECT #2 by French Touch use mode changes during the display to make this megascroller effect. If you pause the video you can see video artifacts when it’s doing HGR>GR changes:
Vaporlock
On Apple II and Apple II+, there’s no VSYNC available. But of course there’s a trick.
When reading some specific bytes in the I/O pages ($C000-$CFFF), you actually read the last data transferred on the bus, which is TEXT or GRAPHIC data (it works even in HBLANK or VBLANK, the video scanner never stops reading memory).
By using carefully crafted content in the video framebuffer, you can then deduce where the electron beam currently is, and then sync with that (either on each frame, or to set up a « vsync » timer).
Any other trick?
There’s a trick that allows to change 2 colors in HGR by writing only one byte, but it’s not compatible with RGB cards.
All those tricks were actually discovered back in the 1970s and since the Apple II is a very basic computer, we think there’s no more to be discovered. Actually, since the Apple II is expendable, every software issue was resolved with a new peripheral card (like : “the 6502 is too slow? let’s put a 4Mhz 6502 on a peripheral card!”). Like PCs, the complexity lies in the number of peripheral cards existing.
Challenge #3: Loading
You are the disk controller
One of the most challenging aspect of the Apple II when you start doing low-level stuff, is loading data from a floppy disk.
That’s because the Disk II interface card has no disk controller: this role is assumed by the main 6502 CPU!
Disk access (load/write) is entirely done in 6502 sync code… and the disk cannot wait! So the loading rout must NOT be paused or interrupted, which makes animation & playing music during loading times tricky or almost impossible.
On the other hand, since the disk controller is the CPU, while the standard disk uses a 16 sectors format, you can perfectly use your own disk format. You can even use the step motor to make 1/2 tracks and 1/4 tracks (instead of hopping from one track to the next one, you can stop the head in between tracks). Aaaaand that’s when the fun happens 🙂
Here’s a dump of two disks. On the left is a standard 16-sectors disk. On the right is a protected game disk that can be read by the Apple II but not easily copied since it uses a completely different format. The only requirement is that a boot sector (a regular sector) must be present on track 0.

Bad Apple
By Wiz/Imphobia, this version of Bad Apple uses a regular 16 sectors format without any music nor sync. The animation is actually rendered as soon as a sector is loaded, so it’s entirely driven by the disk loader.
Lowtech
Still by Wiz/Imphobia, this demo is based on the same engine than Bad Apple, except that it loads a 3D scene. For it to be able to load and play music at the same time, Wiz had to slow the music sequence replay to 40Hz. That’s because if you replay a 50Hz music while something is loading, some sectors will never be available in full between two music interrupts.
FAST LOADER
By French Touch, this intro uses a regular 50Hz music sequencer. To fix the issue Wiz ran into, this time a non-standard disk format is used, with 32 half sectors that can be easily loaded between music interrupts. Since the sectors still use the regular prologue info, bit (disk) copiers are able to make copies of the disk.
More information & credits
To get in touch:
Mastodon: @fenarinarsa@shelter.moe
Bluesky: fenarinarsa.com
Discord: fenarinarsa
References, links, communities : fenarinarsa.com/?p=1190
Follow French Touch on Bluesky and on the Fediverse! We also have a French Touch Apple II discord server.
Photo credits
Apple II photos: Wikipedia
Expansion cards: nosnhojm on Applefritter
HGR code generation: https://www.xtof.info/hires-graphics-apple-ii.html
Floppy disk dumps visuals: 4am