Last weekend, there was a special demoscene party, the 1991 party, with, obviously, 1991 as a theme. Well, that is just my bag, baby! The focus was mainly on C64 and Amiga, which were the most popular platforms for gaming and demoscene activity in those days. I wanted to do a small production myself as well. I decided to go with a PC production, because of my oldskool code experiments, the PC stuff was in the most mature state.
Archive for the ‘Demoscene’ Category
Posted by Trixter on November 25, 2013
Posted by Trixter on August 27, 2013
I have the dumbest first-world problems. The current one: I’ve come up with new ideas for a retroprogramming/demoscene project, ideas that nobody on my platform (4.77MHz 8088) has ever attempted. They’re pretty radical, and on par with 8088 Corruption in terms of code cleverness and impact, except this time, I actually know what I’m doing (as opposed to stumbling into it somewhat by accident with Corruption). Every time I think about what is possible, I get really excited and obsess over implementation details. In my head, it’s all coded and running beautifully, bringing shocks of laughter to other retroprogrammers and demosceners alike.
The problem is, even after weeks of design, it’s still in my head.
What I have planned relies heavily on same tricks as the 8-bit democoding scene, namely lots of tables. Generation of those tables, compared to how they are used, is a highly asymmetric process: It can take hours or days to create the table, whereas using it only costs a few cycles for a memory lookup. This very similar to the process of vector quantization, where coming up with the codebook is an NP-hard problem that there is no universal solution for. To bring my ideas to life, I need to write programs that take advantage of gigs of memory and multiple cores to come up with the tables I need. So why not just write them? What’s stopping me is the dumbest of dumb problems: I simply haven’t written any large, modern, multithreaded applications before. All of my programming over the last 30 years has been either in Pascal, or assembler, using dialects and architectures that aren’t applicable to modern resources any more.
“So pick up a new language, ya moron!” is what all of you just screamed at me. I know, I know. But this is what kills me: It would take me at least a month to pick up a new language, learn its IDE, learn its visual form/component system, and the inevitable learning of how to debug my code when it all goes pants. I’ve been putting it off for at least a decade. I can do it… but it would take at least a month to ramp up to full speed! And (said in Veruca Salt cadence) I want to code up my idea NOW!
I’m frozen. What a stupid, stupid first-world problem.
I need an algorithm for getting over the hump that can be solved in polynomial time.
Posted by Trixter on July 20, 2013
(Impatient? Scroll down to the end of this post if you just want to watch the videos or download the programs.)
The demoscene used to be based almost completely on “world firsts”, which are bonus levels of street cred given when you are the first in the world to produce a living, working example of some new technological marvel. In the early days it was as simple as “most sprites onscreen at once” (impressive because you were exceeding the hardware’s published limitations for that kind of thing) or “first example of texture mapping on PC” or similar. Nowadays the “world first”, as a pure concept, as been boiled down to “first demo for a platform”. So for modern hardware, this will likely translate into something like the very first demo for the XBone or the PS4.
But what of old hardware? Just about every single old personal computer has had a demo made for it. Pouet lists over 25,000 demos for over 90 platforms from the Acorn to the ZX Spectrum. There are demos for the TI-86 calculator, for old nokia cell phones… even a goddamn typewriter. Linus Åkesson even created his own hardware platform out of a microcontroller when nothing else seemed interesting. It is pretty hard to find something that hasn’t had a proper demoscene demo made for it.
Luckily, my obsession with the IBM PCjr’s 30th anniversary pays off in this area. Around the beginning of the year, I noted that there have been a few demos that supported the Tandy 1000′s 16-color graphics and 3-voice sound, but nothing that was specifically designed for the PCjr, which made it a “virgin platform”. Since I had intimate knowledge of the CPU and had a decent development toolchain, and with @party 2013 coming up, I realized this was probably my last chance to achieve a world first, so I starting writing code around April.
To qualify as a “world first” for the platform, I felt it was appropriate to perform one or more effects that specifically required a PCjr to run, and for good measure, that nobody had ever seen before so that DOSBox or any other emulator would not be able to run the code properly. One of my favorite features of the PCjr is a real vertical retrace interrupt that you can use to perform display operations “behind the scenes” so that any tricks you’re pulling remain invisible. Coding to use that went very well, and no emulator or clones (save for a few early Tandy 1000 models) provided it, so I started off on a proper little demo for the platform.
Along the way, I found that my ideas to use the vertical retrace interrupt broke down because I needed to do more operations than I had time for in the blanking interval, so I wrote my own interrupt sync’d to the interval I wanted using the system timer instead. I also discovered that the PCjr’s legendary lack of speed (it’s the slowest PC clone ever made) meant I couldn’t use the 320x200x16 mode I originally wanted to — there’s just too many bits to move around in a reasonable amount of time. To maintain world-first status, I pondered creating a PCjr cartridge-based demo — a ton of work I wasn’t really prepared for — when I discovered that some poor coding on my part had resulted in some odd graphical properties in the 160x200x16 mode. The wrong values had configured the PCjr’s video gate array to double each line. Completely by accident, I had created a lower-res 160x100x16 mode with a true linear chunky organization! (This is not the same as CGA “lowres” mode, which is based on text mode and is slow to work with.)
That mode was a great match for the slower speed of the PCjr, and I proceeded to write the entire demo and all its effects to use that mode. I had already started a silly joke game for the PCjr, and when I discovered the 160×100 mode, I retrofitted the game to use it as well! Both of these productions won 2nd and 1st place in their respective categories at @party 2013 (and Phoenix doing the graphics and sound for the demo was a big help; check the video below for his tiny Charlie Chaplin).
But more important than winning competitions… world first, y’all. I’m part of an elite group of less than 100 people in the entire world. Which I know just about nobody cares about, but I care, and that’s what makes me smile. :-)
To view the demo, watch INTROjr on Youtube. Regrettably, the demo is not shown at the full framerate because Youtube doesn’t support 60fps video and has no plans to in the near future (of course, they support near useless 4K resolution video, but whatever). Download links for the software can be found on INTROjr’s Pouet page. .
PS: If you want source code to the PCjr-specific bits, such as the music player, the vertical retrace interrupt, setting the special graphics mode up, using multiple graphics pages, reading the joystick, etc., drop me a line.
Posted by Trixter on June 17, 2013
Back from @party 2013 where I went bug-nutty over the PCjr and everyone graciously tolerated and humored me. I gave a speedy 30-minute intro to the PCjr as the first talk of the party, then I spent 3 hours trying frantically to get my laptop and PCjr to talk to each other over ethernet so I could upload what I was working on, then coded up the rest of our demo (intro, really) with Phoenix and relaxed for a few hours until the compo.
Inverse Phase and I won the game compo with a silly little thing called HARLEM SHAKEjr and Phoenix and I came in 2nd place in the oldskool demo compo. 2nd place was quite deserved because the 1st place was Sigflup and co.’s Sega Genesis demo “Day Trip” which had some truly amazing effects in it that all ran at the full framerate. (The end screen in that demo is 512 simultaneous colors and when you learn how it works you will laugh your ass off.)
For now, all party productions are downloadable but I don’t know how long that link will last. If you want to run my stuff, you’d better have a real PCjr because I use an undocumented video mode I discovered that doesn’t work in DOSBox.
I’ll post video of both productions in a week or so when my PCjr comes back in the mail :-)
Posted by Trixter on May 15, 2013
June 14-16 you should be able to see me at @party in Boston. (If anyone is looking to share a hotel room, drop me a line!) I am scheduled to give a 30-minute version of the PCjr presentation I had worked on for NOTACON, and hopefully enter a compo or two with some oldskool hardware I will be shipping to arrive ahead of me.
Speaking of entering a compo: I really, really dig retroprogramming. The cool part is, after 10 years of retroprogramming in spare time, my kung fu is getting advanced enough where I not only know how to do what I want in assembly, but I know the fastest possible method to getting it done on the target hardware. For example, I recently implemented a vertical-retrace interrupt in software because the hardware one wasn’t good enough. It’s sick that I know how to do that, but sicker that I know why I need to do that.
I still get a kick out of impressing Jim-of-20-years-ago.
Posted by Trixter on December 17, 2012
Update 12/7/2012 @ 13:46: Peter Ferrie smashed my record by a single byte, so the record is now held by him at 12 bytes. Congrats, and I feel like a fool for missing it :-) I’ve tacked on his optimization to the end of my original post.
Update 1/7/2013: herm1t further smashed the record, down to 11 bytes!
Update 1/7/2013 @ 18:00: Peter bounces back and reclaims the record with 10 bytes! It kind-of breaks my target platform (uses an undocumented opcode that only works on Intel processors) but hey, a record’s a record! I’ve updated the article below.
In the past, when I’ve had a democoding breakthrough, I kept quiet and either used my discovery in a production, or just bragged to my demoscene friends privately. However, my opportunities to achieve democoding “world firsts” are just about gone, and size coding compos seem to be dead, so I’ve decided to just write a blog post about what I’ve done instead: I’ve written a maze generator in only 13 bytes of x86 machine code.
Posted by Trixter on November 23, 2012
A year ago, myself and a few friends completed our demoscene video trilogy with MindCandy Volume 3. This was the first volume to be rendered at 60 frames per second for Blu-ray; it makes for a great home theater showcase. Like all MindCandy volumes, most of the demos contain commentary from the original authors, so you can get some insight as to how they got their ideas and programmed the effects.
We still have some left, so we’ve lowered the price for Black Friday (and the rest of the holiday buying season) down to $17 for the US and $19 for Canada. (If overseas, you can try Maz Sound, CSW Verlag, and Amazon UK for the best deals.)
Posted by Trixter on November 8, 2012
Nearly two decades ago on the usenet newsgroups comp.sys.ibm.pc.demos and comp.sys.ibm.pc.soundcard, there were some accusations flung around that Josh Jensen (Cyberstrike of Renaissance, for those who still remember the PC demoscene) had copied entire chunks of Mark J. Cox‘s MODPLAY to use in his own modplayer SuperProPlay (and later MASI sound system). Just as time has a way of healing old wounds, advances in technology has a way of ripping them open again, and a chance encounter with some familiar assembly code in October got me thinking about the accusations against Jensen all those years ago. I didn’t give it much attention back then, but I’m a different person now, with much more skill than I had 20 years ago. With decades of x86 assembler, reverse-engineering, and programming skills under my belt, I decided to take another look at this issue to see if it could be answered definitively. I armed myself with much better RE tools (IDA) as well as Josh’s released Protracker Playing Source (PPS) v1.10 source code (PPS110.ZIP) and spent about an hour looking at them both.
My verdict: Josh quite absolutely copied entire chunks of MODPLAY for use in his own code.
Posted by Trixter on August 30, 2012
A user on a vintage computing forum recently asked if anyone had an Adlib Gold for sale. Actually, pleading would be more accurate, because the Adlib Gold is an exceedingly rare card due to being completely crushed in the marketplace by Creative. (Which is a shame, because the Gold had much better digital and FM sound quality, but as many industries illustrate, being first (or best, or even first+best) in the marketplace does not guarantee success. Microsoft and Apple have many interesting multicolored stains on the soles of their boots.)
I’m one of the people this user probably hates, as I own not one but two Adlib Golds, one loose and another open-but-hopefully-complete-in-box. (I also have three IBM Music Feature cards, as well as an MSound Stereo, giving him four more reasons to hate me.) And until I get my “Sound Card Museum” project up and running, and have the card fully documented, I’m unwilling to let either of mine go.
But it got me thinking: If you want to have fun exploring a high-quality, quirky, or just historically interesting sound card for your vintage rig, there are plenty of other options that grace ebay on a semi-monthly basis. For example, the Pro Audio Spectrum series is interesting in that one of the models (maybe more?) can be put into an 8-bit ISA slot and give even a lowly 808x machine 16-bit 44.1Khz stereo sound. Later PAS cards had 3D in the name (Pro 3D Spectrum IIRC) and had a “surround” bit you could flip for some fake surround. Some clone cards could do all sorts of wacky emulation; I have an Aztech Sound Galaxy NX Pro 16 that can emulate the Covox Speech Thing and Disney Sound Source. Some cards somehow manage to tap port ox60 so they can route PC speaker sound through the card (and some Sound Blasters and other cards have a cable jack that plug into the motherboard for that). The Sound Blaster 16 ASP has a programmable DSP that can be used for realtime compression/decompression of ADPCM audio as well as QSound, although only one game supports the ASP that I know of, name escapes me at the moment. You can almost always find an MT-32 or an LAPC-1 on ebay now and then, and those will obviously add dimension to most games published from 1989 to 1993. For truly amazing General MIDI sound, you can still sometimes find the original Roland SCC-1 which not only practically defined the GMIDI standard but still remains one of the best-sounding cards for GMIDI (some of the MIDI files that actually use the GS extensions sound pretty damn amazing). While high-end and not very compatible with games, the Turtle Beach Multisound has really great MIDI wavetable that should be heard at least once.
King of the “interesting” sound cards is the Gravis Ultrasound. Very wacky, very capable, very limited, very unlimited. It can produce simultaneously the very worst and the very VERY best sound you’ve ever heard, depending on how well the application programmers understood the card. Some games get small speed-ups with a Gravis card because it is capable of playing up to 32 digital channels out of its onboard wavetable RAM, giving the CPU some more time to render frames. You can put the Gravis into any 286 or higher that has a true NMI. If you put it in a 386 or higher, find yourself some demos that support the GUS and prepare to be amazed at what your old slow computer can do. (Bonus non-sound-related hint: You can get Doom (not Doom II) running at nearly the full framerate on a 386-40 by hitting F5 as soon as the game starts to throw it into low-res mode.)
Sometimes a very uninteresting/dull/plain card can be put to very interesting uses; for example, DOS-era MPC-era gaming, where the audio consists entirely of redbook audio tracks (even the interactive speaking parts). This is something that emulation still has some trouble getting right (namely, the sync is delayed/off/slips), but on real hardware it usually works. I have a Tandy 2500 sx-25 that has a CDROM interface card with stereo RCA jacks — it’s perfectly capable of playing Jones in the Fast Lane or Loom or Monkey Island (MPC edition) or INCA or any other redbook audio-based game with no sync issues whatsoever without needing a secondary sound card (although having a real sound card adds more dimension to those games).
And finally, if you want to give even a truly shitty card the opportunity to sound awesome, grab yourself some decent Amiga MODs (or .S3Ms, or .ITs, or .XMs) and fire up a decent modplayer (or better, the tracker that originally created them). A 386-25 can calculate 8 or more digital channels mixed together in decent quality realtime and then feed that to your crap SB clone. If you have a Tandy TL/SL/RL machine with the built-in DAC, “TANTRAKR” is an excellent modplayer that uses the DAC and even on an 8086 can play 4-channel MODs decently.
You can even have some fun with the Covox Speech Thing (and other LPT DACs like the Disney Sound Source). The Covox by itself isn’t very interesting and also draws quite a bit of CPU when playing audio, but if you have the [B]software[/B] that came with the Speech Thing, it gets more interesting. The software contains some interesting utilities including an 8:1 speech compression method that actually works (modified CVSD) as well as a 2:1 compression scheme that works very well with music. Don’t have a Speech Thing? Build your own using a handful of resistors and some wire!
So yes, it is unfortunate that the Adlib Gold is somewhat of a holy grail when it comes to PC DOS-era soundcards, but that doesn’t mean you can’t explore some other dark corners of DOS audio.
Posted by Trixter on June 6, 2012
In anticipation of the NAID organizers visiting @party this year, and unable to attend myself, I spent some time working up a video DVD of all the high-quality NAID footage I had copies of. It’s called “Memories of NAID” and includes the following footage:
- “NAID ’95″ tape compiled by the organizers
- “NAID ’96″ tape compiled by the organizers
- “IC and Soundgun do NAID ’96″ by IC, with a 2012 introduction by IC
- Four local news programs on NAID ’95
- 8 minutes of NAID ’95 registration and guestbook signing with lots of familiar faces
- 2 minutes of NAID ’96 classroom footage
It’s a little over 2 hours of footage of the height of the 1990s NA demoscene. Also included on the DVD-ROM section is Phoenix’s NAIDorabilia which is all of the demos, music, party reports, and other miscellany associated with both NAID parties.
The footage is fully interlaced, preserving that “video verite” look. I chose to distribute it as a DVD because that was the only way I could guarantee people would see all 60 fields per second. (Unless something has changed in the last year, no online streaming video service (Youtube, Vimeo, etc.) supports 30i material properly… although that’s a moot point anyway, since there is some very well-known copyrighted music in parts of the footage which would probably get it rejected from such services anyway.)
You can download the DVD .ISO at archive.org, but if that is gone for some reason, there is a slower download link here: ftp://ftp.oldskool.org/pub/misc/Video/MemoriesOfNAID.iso