Oldskooler Ramblings

the unlikely child born of the home computer wars

Archive for the ‘Demoscene’ Category

The strangest kind of problem

Posted by Trixter on April 18, 2014

For @party coming up in June of this year, I thought it would be fun to revisit 8088 Corruption with a spiritual sequel.  I designed two new ways to improve the tech and visual quality. I came up with a new disk I/O strategy to deal with the new tech.  I built a new model of handling color for it.  I’ve previewed the results for both monochrome and color test material, and I liked what I saw.

One problem:  I haven’t written a single line of code yet.  It’s all in my head.

At night, as I fall asleep, I “pull it out” and run it through with different test material and “watch” the results.

And with the puzzle solved, I’m “done”, and I no longer have the desire to actually write the code.

Posted in Demoscene | Tagged: | Leave a Comment »

Mixed Feelings

Posted by Trixter on March 22, 2014

If the airlines gods shine on me next week, I will be at NVScene 2014 in San Jose Tuesday through Thursday.  Co-located within the GPU Technology Conference, the entire event is looking to be the most concentrated collection of Very Intelligent People in regards to realtime computer graphics hardware and techniques.

I have mixed feelings about attending events like these, because I am so completely out of my league among these people.  I understand no more than 10% of everything they present or create.  I am looking forward to visiting and staying with friends, but my knowledge and accomplishments are dwarfed in orders of magnitude by every single other attendee.  It’s very intimidating.

That’s all.  No pithy observations or self-help advice in this post, sorry.  My level of anxiety is high enough that, if I weren’t seeing some old friends there, I definitely wouldn’t be going.  I have no business being there.

Posted in Demoscene | Tagged: , | 2 Comments »

Just keeping it real… like it’s 1991

Posted by Trixter on November 25, 2013

Trixter:

Came across a nice post from Scali with some oldskool and “midskool” analysis on demomaking for very slow PCs. Check out his production as well, which he did for the “1991″ demoparty this month.

Originally posted on Scali's OpenBlog™:

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. And also, because the PC platforms of those early days have not been explored very much, so it’s still possible to create some refreshing things and work out interesting ideas for early PC.

PCjr

Speaking of early PCs… Because of my early PC escapades, I have come into contact with Trixter a while ago, and we started bouncing ideas back and forth. Trixter’s platform of choice is the PCjr, the…

View original 2,011 more words

Posted in Demoscene | Leave a Comment »

Hump Algorithms

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 in Demoscene, Programming, Vintage Computing | 17 Comments »

World Firsts and Happy Accidents

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.  .

To view the game with a silly theme attached, watch HARLEM SHAKEjr  on Youtube.  Download links for the software can be found on SHAKEjr’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 in Demoscene, Programming, Vintage Computing | 1 Comment »

Now THAT was fun

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 in Demoscene | Tagged: | Leave a Comment »

Upcoming Trixter Sighting + Retroprogramming

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 in Demoscene, Programming | 7 Comments »

Maze Generation In Thirteen Bytes

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.

Read the rest of this entry »

Posted in Demoscene, Programming, Vintage Computing | 20 Comments »

MindCandy Black Friday Deal

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 in Demoscene, MindCandy | Leave a Comment »

Reverse-engineering an old wound

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.

Read the rest of this entry »

Posted in Demoscene, Programming | 2 Comments »

 
Follow

Get every new post delivered to your Inbox.

Join 229 other followers