A 48Khz digital music player for the Commodore 64
brokenbytes.blogspot.com
brokenbytes.blogspot.com
He also has a 22khz demo that plays back a full song on stock HW.
Seeing full screen video and audio on an 8-bit machine in 1982 would have seemed like alien technology, it would have blown people away. Years later people would be impressive by simple black and white QuickTime movies on far more expensive and faster HW.
I just noticed he compressed an entire bananarama music video with better quality sound into a 1Mb REU.
I especially like the unique but still 64-flavoured compression artefacts of the video.
Heres another Onslaught demo that fits on a Floppy disk: https://www.youtube.com/watch?v=OsDy-4L6-tQ
1) cluster all possible 8x8 pixel video blocks by some metric, and pick the 256 most frequent ones.
2) include these into a new charset, or several character sets up to how much memory you want to use, with the most frequent 8x8 pattern occuring.
3) Now encode each frame by 'quantizing' an 8x8 block into its character code. You want to minimize overall perceptual error, so choosing the optimal charset tile patterns and optimal tiling can be done with many optimization techniques (monto carlo, genetic algorithms, etc)
But basically, you're 'dithering' the frame down to characters in a font, and the font character patterns must be chosen optimally to fit the whole video. There's some leeway in this because you can change the font every scanline or 8 scanlines, so it is possible to go beyond a max of 256 unique tiles per frame, you could also switch fonts between different parts of the video.
A given full screen would be 40x25 characters, so you'd need to decode/write about 1000 characters per frame. At 10fps, you need to decode about 10k per second. The c64 executes about 20k cycles per frame, and the time to load/store from memory is going to be at least 9 cycles, 13 if you use indirect addressing. That gives you enough time to barely write 1500 bytes per frame, so this is right at the limit of what the C64 can do. You decompression has to be essentially a table lookup, and minimally a loop if I've estimated the bounds correct. (I'm going by 20 year old memory :) )
http://www.youtube.com/watch?feature=player_embedded&v=xxjiQ...
Audience: "No way!" and "That's impossible!" and "How did it do that?"
The big innovation was Pex's discovery of a way to output 8 bit samples by a single register write on the SID chip. The chip was never designed for outputing digital samples, and the approach leverages basically a bug in the chip design to achieve this.
The only innovative bit in this new demo (besides presuming to use a cartridge for storage) is the vector quantized compression technique.
This doesn't take away from the demo, but if say, EA, Epyx, or Activision were going to ship a game that played music like this, they would have had to fix it in 64k. So it's even more impressive when I see stuff that a typical home computer could have seen in 1983.
I remember the first few times I heard digi-mods on the C64, like Rob Hubbard's Skate or Die game intro (https://www.youtube.com/watch?v=vqRXxPl6bXA) and it absolutely blew me away. Full screen video + audio like that Onslaught Demo would have given me a heart attack.
This doesn't use REU. This uses a simple banked (EEP)ROM cartridge.
Cartridges have been used from the beginning, at first they were just 16 kB. Games have been released in cartridge format from 8 to 512 kB.
It's really impressive to be able to include any type of decompression when total budget per sample is just 21 clock cycles on a system where one instruction takes 2 to 8 clocks.
So I think you're underrating the achievement here.
See these 512 kbit 1983 vintage EPROM chips:
https://www.ebay.com/itm/INTEL-D27512-27512-IC-28Pin-DIP-EPR...
16 of these 512 kbit chips, some address decoding and banking logic. 1 MB cart.
Very much doable with off-the-shelf parts even way back then.
https://www.youtube.com/watch?v=ELpnGDHo0Bg https://www.youtube.com/watch?v=eI5d6Y0Fzl4
Yes that is 100% original C64, no extensions, no cartridges. The first time I heard these, I was absolutely blown away.
http://8088mph.blogspot.de/2015/04/cga-in-1024-colors-new-mo...
People have exploited interlacing/sub pixel/NTSC/PAL effects to generate new colors, or simulate hi-res. They've combined changing color palettes per-line with sprite overlays to breach the barrier of 4 unique colors per 4x8 pixel block.
The list of surprising effects I've seen on the C64 never seems to end. Some crazy people have also managed to get the C128's VDC to do demo-scene effects as well.
One trick I was working on in the 80s before I quit the C64/C128 to go to the Amiga was to try and use the C128's MMU chip to run high speed 8502 code. The C128 MMU could remap the 0 page addresses ($00-$FF) into other memory regions. Because 0-page instructions run faster (e.g. STA $C000 vs STA $C0), if you could remap zero page, you could write code in a style that is significantly faster.
I wanted to use this to write a fast line drawing/poly-filing routine. Since the VIC could also be remapped by the MMU, in theory (I never go to to test it), you could map the zero page to a VIC mapped address, and do pixel block operations at 2-3 cycles per write.
And in addition to the 8088MPH demo mentioned downthread, MDA graphical demos should in principle be possible by rapidly changing character RAM as the beam passes by. This is a trick I saw to generate graphics on another text-only monochrome machine, from Commodore: the PET.
Yes and today we might be talking about boring 65xx vs. exotic, sexy 8086.
> They could have easily been the PC if they went the same way. It's not far fetched, just mismanaged. They could have done it and gone there but they didn't have the vision.
IBM didn't have the vision either. They left that to Dell, Compaq, etc. The PC evolved quite by accident, and once IBM realized what they had unleashed -- a computer revolution in business and eventually the home that was OUT of their control -- they struggled to try to put the genie back in the bottle with the PS/2 line.
> But I do know that one of them triggered excitement and one is just "a chip".
Says you, who never harnessed the on-chip timers of the 80186 to drive PWM sound through the beeper!
> (can you run linux on commodore??? now that would be something...)
You can run LUnix, a cut down Unix workalike. And Tandy Color Computers, based on a 6502 relative the 6809, could run a Unix workalike called OS-9...
Compaq, Dell, Gateway, and the rest took the idea and ran with it. But it wouldn't have happened without IBM.
Of course the PC was a technological cripple compared to Commodore hardware - somewhat compared to the C64, and very much so compared to the Amiga.
Unfortunately that's not the point. Businesses wanted packaged systems with software, not games with sound and sprites. That's what IBM set out to provide, and that's what they provided. (In spite of themselves - but even so.)
The competition wasn't from Commodore - the PET was considered a risky toy - but from S100 systems at one end, and massively more expensive DEC/DG/IBM minicomputers at the other. The high prices of the latter and limited performance of the former made the PC look like a bargain to corporates, even though its price looked ridiculous to consumers.
There's an elegant simplicity in these old pieces of hardware, it's relatively easy to study them exhaustively and if you're clever enough you might find a new way to fit the pieces of the puzzle to do something nobody had though possible before. If you want to hack a modern PC you'll probably first have to spend a few years reverse-engineering the various parts to figure out how they work exactly and what you can do with them. Even getting a basic understanding of the low level details of a modern GPU is quite a massive undertaking.
But there was a modem for the Apple II, the Novation Apple-Cat II that contained a tone synthesizer and could be used to play music out over the line. To this day, I think that modem is one of the neatest peripherals ever made:
It references SAM, a software speech synthesizer that could run on that one-bit click speaker (“with the addition of much distortion”, as Wikipedia says)
Edit: also having only one bit can be offset by larger sampling rate. In fact this is how probably every non-audiophile audio DAC manufactured in last 25 years works.
A good moment to remember https://github.com/marioballano/emudore so I can experiment with this thing on the weekend.
l: nop
sample: ldx $8400 + i*$100
ldy $8000,x
lda sidtable,y
sta $d418
inc sample +1
bit $ea
ldy $8100,x
lda sidtable,y
sta $d418
inc $d020
...Found a very good description here: https://livet.se/mahoney/c64-files/Musik_RunStop_Technical_D...
Interesting story about accidental discoveries and using oscilloscope to get compensation tables for different types of SID chips.
My code's here: https://github.com/ekimekim/gb_music_video, and you can get a finished demo rom (which doesn't actually use any of the graphics stuff due to lack of assets) here: https://ekimekim.itch.io/steamed-hams-but-it-plays-on-a-game...
I should note that the technique I used for audio on the Gameboy was taken from this excellent video: http://tasvideos.org/5384S.html
https://www.youtube.com/playlist?list=PLFeDsJqcV6DhwH16fVp_a...
Edit: vardump is right, the screen would be "turned off" in this case so just the border color is used. This gives a slight performance boost.
To avoid making it a dull monochrome screen, devs tend to push the data that they process into the border color register (acting as background color in this mode). You also see this with decompressors at the beginning of (cracked) games. So the background color gets updated every few multiple of 8 pixels (1 character), and there's where the patterns come from. The slow shift of the pattern to the left indicates that the code isn't entirely balanced, but the article states as much (is it moving every 1.28 secs? I can't tell).