2018-06-05 01:12:15 -04:00
|
|
|
Still Alive for the Apple II
|
|
|
|
in roughly 20k
|
|
|
|
|
|
|
|
By Deater (Vince Weaver)
|
|
|
|
|
|
|
|
|
|
|
|
BACKGROUND
|
|
|
|
~~~~~~~~~~
|
|
|
|
A few years back I implemented Valve's Portal in Applesoft BASIC.
|
|
|
|
|
|
|
|
At the end it played Still Alive, but in horrible single-channel
|
|
|
|
speaker beeps. I always wanted to have this sound better.
|
|
|
|
|
|
|
|
So here is the end result. Still Alive in 6-Channel Mockingboard
|
|
|
|
Sound in 80 column with cursor effects. Also in 40 column if
|
|
|
|
your display can't handle 80 cols. And if you don't have a
|
|
|
|
Mockingboard, then a simpler version using P. Lutus'
|
|
|
|
Electric Duet 2-channel audio for the stock speaker.
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-24 11:59:07 -04:00
|
|
|
Fun fact:
|
|
|
|
The letter 'Z' does not appear at all in the lyrics to the song.
|
|
|
|
(Noticed when I had to edge comparison for uppercase off by one)
|
|
|
|
|
2018-05-23 11:59:56 -04:00
|
|
|
Challenges:
|
2018-06-05 01:12:15 -04:00
|
|
|
+ 6-channel audio. Really its 4-channel (from a MOD file)
|
|
|
|
but it actually does load and play audio on all 6 channels.
|
2018-05-23 11:59:56 -04:00
|
|
|
+ Fitting it all in 48k (want to avoid disk routines if can)
|
2018-06-05 01:12:15 -04:00
|
|
|
+ Printing the ASCII art (naive implementation takes longer than 50Hz)
|
|
|
|
The ASCII art is roughly 7k. Thought of decompressing
|
|
|
|
on the fly, but the LZ4 code is not re-entrant and
|
|
|
|
the music is already decompressing on the fly.
|
|
|
|
+ Re-using the Lyrics for both the Mockingboard and Electric Duet
|
|
|
|
versions.
|
2018-05-23 11:59:56 -04:00
|
|
|
|
2018-05-23 16:09:44 -04:00
|
|
|
|
2018-05-23 11:59:56 -04:00
|
|
|
|
2018-05-23 14:07:19 -04:00
|
|
|
Goal: Binary fits in 16k (16384 bytes)
|
2018-05-23 11:59:56 -04:00
|
|
|
|
2018-05-23 14:07:19 -04:00
|
|
|
note size (bytes)
|
|
|
|
--------------------- ------
|
2018-05-23 12:50:12 -04:00
|
|
|
initial music player: 2078
|
|
|
|
add raw ascii art: 9142
|
|
|
|
add 3-channel music+lyrics,then slim a bit: 18787
|
|
|
|
initial 40 col support: 18864
|
2018-05-23 14:07:19 -04:00
|
|
|
have art loading properly 40col: 18910
|
2018-05-23 16:04:27 -04:00
|
|
|
lz4 encode the ascii art: 15529
|
|
|
|
revert because lz4 code not re-entrant: 18910
|
2018-05-23 23:49:18 -04:00
|
|
|
add 4-channel music (KR4): 20128
|
2018-06-05 13:21:36 -04:00
|
|
|
add cursor (a bit distracting): 20162
|
2018-05-24 12:42:27 -04:00
|
|
|
feature complete 40 col: 20180
|
|
|
|
intial 80 col support: 20191
|
2018-05-24 14:40:21 -04:00
|
|
|
80 col cursor: 20344
|
2018-05-24 14:47:49 -04:00
|
|
|
strip out some unneeded text printing: 19962
|
2018-06-05 13:21:36 -04:00
|
|
|
merge ED and MB code: 24993
|
2018-06-04 15:26:03 -04:00
|
|
|
properly select between versions: 25001
|
2018-06-04 16:46:32 -04:00
|
|
|
merge the ED and MB lyrics: 22828
|
2018-06-05 13:21:36 -04:00
|
|
|
80 column ED, wait for keypress+reboot at end: 22852
|
2018-05-21 23:46:47 -04:00
|
|
|
|
2018-06-05 01:12:15 -04:00
|
|
|
Memory Map:
|
2018-05-21 23:46:47 -04:00
|
|
|
|
|
|
|
|
2018-05-24 17:01:42 -04:00
|
|
|
|
|
|
|
0000: Zero Page
|
|
|
|
0100: Stack
|
|
|
|
0400: Text Page 0 (AUX 0400: 80 column text)
|
|
|
|
|
|
|
|
2000: HGR Page0
|
2018-06-01 00:46:54 -04:00
|
|
|
4000: HGR Page1
|
2018-05-24 17:01:42 -04:00
|
|
|
9600: DOS 37.5k
|
|
|
|
C000: I/O Space
|
|
|
|
D000: ROM
|
|
|
|
FFFF: END
|
|
|
|
|
|
|
|
|
|
|
|
Plan:
|
2018-06-05 13:21:36 -04:00
|
|
|
Load compressed 16k image ($4000) at $5600 - $9600
|
2018-06-05 01:12:15 -04:00
|
|
|
Decompress ENDING sequence at $1800 - $4000
|
2018-06-05 13:21:36 -04:00
|
|
|
(writes background to HGR graphics automatically)
|
|
|
|
When done:
|
|
|
|
+ STILL_ALIVE ($5a00, 22.5k) at $0c00 - $6600
|
|
|
|
+ Sound buffers ($3800, 14k) at $5e00 - $9600
|
|
|
|
(the overlap is OK, the ED file is over-written by
|
|
|
|
the mockingboard buffers, but that is not used by MB)
|