Details
A spooky demo for Apple IIe.Finished 1st place in the Retro Demo category at Demosplash 2025
Videos
Video capture from an actual Apple IIe Platinum:The percussion sounds a bit off compared to the emulator. I probably need a better recording setup.
System Requirements
- An Apple IIe with 128k RAM and Mockingboard
- It will not work on a IIc or IIgs currently for various reasons. If I have time I'll see about getting that to work
Credits
- Code
- 4am -- font, transitions
- DMSC -- ZX02 decompression
- French Touch -- Plasma
- Martin Kahn -- martymation
- Oliver Schmidt -- sound player
- qkumba -- fast disk loader
- Deater - everything else
- Graphics:
- grimnir -- logos/monsters
- Videlectrix -- peasantry
- The Pixel Apothecary -- spooky house
- Chad Savage -- fiendish font (on title screen)
- Music:
- ma2e
Downloads
Disk Images
- This is version 1.0 (31 October 2025)
monster_splash.dsk (140k)
- If you don't have real hardware it should work in emulators. Applewin (be sure to enable mockingboard sound support) and MAME both tested.
- Try it on the in-browser emulator at archive.org
Source
- You can find it in the full git repository here:
You'll need ca65 to build it.
https://github.com/deater/dos33fsprogs/demos/demosplash2025
You can vote for this: on Pouet
Mini-faq
- Q. Is this demo supposed to be impressive?
A. Well it depends a bit on how you stand on Apple II coding in general and the demoscene in particular.
- There's not many Apple II demos to begin with, and as far as I know not many target the double-hires mode introduced with the IIe. Not many commercial games used the mode, and the ones that did often just used it for title screens because it takes up massive amounts of RAM and doing sprites (in software) is a huge pain.
- The wipe effects from 4cade by 4am/qkumba are amazing. They are doing some wacky things, like having custom graphics routines compiled on the fly to be run out of the zero page for speed/bank-switch reasons.
- Yes, yes, c64 fans, I can hear your condescending noises from here. To soothe yourself you can go load a demo off a stock 1541 disk drive and come back in an hour when it's done loading.
- Also, with all due respect, "Boo Atari"
- Q. Since this demo targets Apple IIe and above, are you using
any 65C02 opcodes?
A. In theory I'd like this to run on any Apple IIe that has 128k of RAM and double-hires support. Not all IIe systems were IIe enhanced (yes, they enhanced it twice) with the 65C02.
- Q. Are you accelerating the disk loads? It loaded fast!
A. The Apple II disk is a remarkable bit of Woz engineering. Coupled with qkumba fast disk code it leaves other alternatives like the Commodore 1541 in the dust.
- Q. Why does the music sound muddled?
A. We've done a lot of research on this, including getting some chips decapped. It turns out modern Mockingboard replicas use AY-3-8913 variants of the chip, which sound worse than AY-3-8910 for some reason (we've verified the chips are actually different at the silicon level). Also the Mockingboard has high pass filters on the output which messes with some chiptune effects (especially envelope-driven bass).
French Touch has been investigating it and made some circuit boards that let you use AY-3-8910 variants and bypass the filtering. I actually have some of these but haven't tried it yet.
Someone analyzing the decaps noticed that the register values essentially float when the write pin is activated. This means the more writes you do, the more likely the register state can get corrupted. The pt3 lib was writing all 13 registers every interrupt (it made the code simpler). In this demo I track writes and only write changed values which hopefully helps. The updated datasheet for the chips says to try to keep write active for less than 10us which is actually difficult when trying to toggle a 6522 pin with a 6502 running at 1MHz.
It's also possible my capture setup is making a mess of things too. It's a USB/NTSC capture board running into a Linux laptop using OBS.
- Q. Why is there no Apple IIc / IIgs support?
A. This demo depends in places on reading the VBLANK register for some timing. All three advanced models of II (IIe, IIc, IIgs) have different ways of doing this.
IIc is the worst, I think you have to go through the mouse firmware in slot 4 and that's trouble since I am playing Mockingboard music also on slot 4. It might be possible to get it working anyway but I don't have hardware to test on.
The GS should be easier, as the VBLANK is just the inverse of Apple IIe. However I think interrupts mess with the language card bank-switch settings and I'm not sure how easy it is to avoid that. I should try and see though.
- Q. Why did you only have 8 sprites during the "woz" segment?
Shouldn't it have been at least 9 if not more?
The C64 people are going to be on your case about that.
A. Yes, the original plan was to have 16, and it was going to be hex numbers (or maybe the code that gets printed at the end). I ran out of time to optimize code and as is it's not really fast enough. I could have had something other than ball shapes, ran out of time for better graphics too.
- Q. Why does the peasant (robed figure) keep changing outfits?
Is it the same guy?
A. Yes, it's all the same guy. He keeps switching from hi-res to double-hires which necessitates a palette change. Also he's purple when standing in the house for artistic reasons. Either that or he just put on his brown/orange monster hunting robes before leaving.
- Q. Why is your web-page http? My web-browser hates it!
A. I'm a relic of 1990s internet and don't feel like there's anything secret on the page. Also the web host I've been using for the past 25 years makes it difficult/expensive to move to https and I am too lazy to switch providers. Yes, I know, someone could mitm attack and put malware in the Apple II images you download. You'll have to take that risk.
I'm not against encrypting web traffic, I just think that could be done independently of the whole new-certificate-every-10-days circus.
- Q. What's with the "No Greets" section in the credits?
A. They know what they did.
But really, it's just a somewhat pointless work annoyance I got assigned to recently that wastes a lot of time. This demo almost didn't get made because of the lost time.
- Q. This is amazing! How can I support you?
A. I don't really need any support, though if you have lots of money to burn feel free to donate it to the University of Maine ECE department. Even better, try to convince them to start a named chair of Electrical and Computer Engineering in the name of Chuck Peddle (who led the design of the 6502 processor, he went to UMaine). I've been trying to get the school to do this but I guess unless enough people start throwing money at them it's not going to happen.
Code Notes
Overall Framework
This reuses the demo framework from my Rewind 2 port. The Vortextracker music is being played via the 6502 PT3 player I made. The graphics are converted from PNG by some tools I have and compressed with ZX02 compression.Technical Issues
I won't go into details here, but the Apple IIe is a later model Apple II released by Apple in 1983. It was easily expandable up to 128k memory, but to access more than 48k you have to do some complex bank-switching. Click here for a summary of the Apple IIe memory layoutIt's mostly backwards compatible to the original Apple II from 1977, but introduced some new graphics modes. So in addition to the hi-res 280x192 6-color mode it now has a 280x192 16-color mode. All those stats are borderline lies, it's all NTSC artifacting and a mess of interleaving. Double hi-res is worse as parts of the pixels are in the bank-switched RAM (and the split isn't on even pixel boundaries). It does have page-flipping but that's complex to do in double-hires. Click here for a summary of the double-hires layout
Other than that, no acceleration. No hardware scrolling. No hardware sprites. No palette. Just the 6502 and you.
The Apple II disk drive is an amazing feat of engineering, and the disk code I am using by qkumba pushes it to the limit. It's orders of magnitude faster than the C64 drive.
One downside of the amazing code by Woz to run the drives is it's all hard-real time cycle-counted code. Which means you generally can't read from the disk while interrupts are going. This is a problem when playing music at the same time. A lot of trouble went into cramming all 128k of RAM completely full of data at the demo's start so we don't have to access the disk mid-demo. It's in theory possible to read the disk very carefully when playing music but I don't have a setup for doing that yet.
Generally the Apple II has poor sound support, you have to bitbang the speaker without any sort of timer to help out. I do play a btc encoded digital sample at the title screen. For music we are using the Mockingboard which was a contemporary add-on soundcard using AY-3-8910 square-wave chips. It's playing PT3 Vortextracker music (a sound format usually found on ZX Spectrum or Atari ST).
Effects summary
Falling Letters
|
I've always wanted to make this falling letter effect. A lot of C64 demos do fun things with the boot message text before launching into the demo proper. On the Apple II there's a bit of a giveaway because when you sneakily switch to graphics mode, the color-killer circuit turns off so the text suddenly gets purple/green fringes. It technically might be possible to avoid that by cycle-counting and flipping from text to graphics mid-screen but didn't seem worth the trouble. |
Title screen
|
This title screen is just plain hi-res, to save space. It's using
the nice free
"Fiendish Font" by Chad Savage. It's convenient
that the Demosplash logo maps fairly well to the available
hi-res colors.
There is some digitized audio here at the beginning though it's a bit hard to hear on my capture. It's a pitched-down version of me saying "Monster Splash" and it was a last-minute addition that nearly broke everything as I was trying to squeeze it in. I was trying to load it into "unused" memory that actually I had been using elsewhere and forgot about. |
Logo Screens
|
Some nice double hi-res Desire logos by Grimnir. The cool red-line wipe is by 4am. As I probably mentioned these wipes are all from the "Total Replay" 4cade package which you should look into if you haven't heard of it before. |
Scrolling House
|
This spooky house artwork is by The Pixel Apothecary.
It's a classy place for a peasant to live, I'm guessing that's
maybe not Rather Dashing, maybe his rich cousin.
This is regular hi-res too as it only needed four colors so dhgr would be overkill. It's twice as fast to scroll, and also a lot easier to print text in plain hi-res mode. In later scenes when you do see text in double-hires mode it's actually doing sub-pixel rendering in order to fit 40-columns across. I had to hack up my conversion utilities to handle this properly. |
Monsters Wave1
|
Amazing monster graphics by Grimnir. The cool 48-wipe effects by 4am from the 4cade/Total Replay project. Getting these wipes to work was a huge pain, as they use the *entire* zero page (yes, all of it) so I have to back up the zero page before/after, but even then when the music is playing it wants its zero-page values, so had to make a huge hack where the interrupt handler can known a wipe is happening and temporarily copy over the zero-page values it needs. Also it wasn't obvious at first but the wipe also stomps all over pages $70 - $8F. Luckily I could restore those pages easily because as side-effect of loading the relevant values are still backed up in AUX memory. Finally the Peasantry scenes are used with permission from Videlectrix / the Brothers Chaps. |
Monsters Wave2
|
In addition to more amazing monster graphics by Grimnir
the story progresses with some scenes borrowed from
the Homestar Runner "Peasant's Quest" game
(which I have a mostly completed
Apple II demake). This is what the game would look like
in double-hires, my demake is only in regular hi-res as
"good graphics" take up twice as much space and are 10 times
as complex.
I had hoped to have a lightning animation on this screen but ran out of time and space for it. Grimnir actually made many more graphics (and more that are full color) but I wasn't able to fit them all in memory. The graphics are compressed. At first just with ZX02 compression, but I later found that the really weird Apple II double-hires doesn't compress well (it packs 7 pixels into 4 bytes in a complex way that is interleaved in banked memory, and the actual lines on the screen are also weirdly interleaved in hi-res fashion). If instead I save a raw normal bitmap with 2 colors per byte, things compress much better and I can repack to double-hires in software. This is a bit slower though and since I only have 8k of scratchpad RAM it's why some of the image decodes seem to pause halfway while decompressing the second half. I wanted to use some more of the 48-wipes here but ran out of RAM to hold things. Given more time I could have made it fit, but instead you get a fizzle wipe (also by 4am) instead. |
Wizard of Woz
|
This is a parody of the C64
"nine" demo by lft. I originally had
grand plans for the Apple II version.
Whizzing around sprites, transparency, maybe
the letters for the code snippet flying around, an animation of
Woz taking off his hat, maybe him riding a segway. Too complex
though, only barely have double-hires sprites going, and as we can
see since it's all in software so a bit slow.
In retrospect though I should have had at least 10 sprites, even if it was slower. I'm kicking myself for not doing that. I was low on time and generating the co-ordinates for the circle was much easier with a power of two number. |
hgr8 demo
|
The code Woz zaps you with is my
8-byte hi-res demo for Apple II.
(You can read about it in more detail in the
September 2025 issue of
"Juiced.GS" magazine)
If you enter that code after a fresh boot to Applesoft BASIC it will show approximately this effect. I'm faking it here though because the effect depends on the Applesoft ROM being mapped in, but we've disabled it because we banked the ROM out to get more RAM (and also because the interrupt handler lives there as well). If you want to try it on your own Apple II/emulator, here it is again: CALL -151 B8: 2C EA 20 F4 F3 20 D8 F3 BDG |
Martymation
|
This is an effect by Martin Kahn found on
"Side B" of the Apple
II PrintShop disk. It's doing some clever things to have a palette
cycling looking effect on a system that doesn't have palette cycling.
(It makes clever use of the fact that Apple II hires has 8 colors
but two of them are black and two of them are white).
The Woz overlay is a bit of a hack because I didn't have the budget to do transparency properly. |
Final Monster
|
This is what started the idea for the whole project.
I had some code that could do multi-color variants of a greyscale
4-color double-hires image. This came from my
rewind2 proof of concept.
The plasma overlay was a happy accident when trying to make a double-hires plasma effect. It's a variant of the FrenchTouch "Plasmagoria" plasma but in double hires. It's actually what you get when you run the orange/blue hi-res version (from my second reality port) unchanged with double-hires enabled. Due to NTSC artifacting it gives a really nice almost iridescent look. Completely unintentional. The reason the background image is still visible too is because the plasma is only drawing every 4th row (I think it's 4th, too lazy to check right now) for speed. I was going to make a "proper" double-hires plasma but unpacking/repacking all the pixels sounded exhausting (and slow) and the alternative seems like it would have been an enormous amount of lookup tables. This particular chunk of demo has to fit in 4k so not a lot of room for something fancier. |
Credits
|
Re-using some vertical scroll code from previous demos, with some minor changes. Be sure to stick around for the after-credits scene! |
Development Notes
31 October 2025Been working on this for a month. Really difficult as it was an extremely busy time with work and family. Did finish before the deadline with an hour or so to spare.
Other VMW Software Demos
Other Apple II Projects
Back to the VMW Software Productions Page