Live data from Hacker News

A JavaScript Port of the 1986 Amiga Juggler Raytracer

home.comcast.net

11–20 of 35 posts

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#11
post #5

The Juggler showed off the Amiga graphic abilities. It is what helped sell some of the 1986 and 1987 Amiga computers. Before that it was a bouncing checkered beach ball. Other computers did their own bouncing ball, but the Amiga could multitask and had multiple bouncing beach balls, each program running on its own. I think you could have multiple jugglers as well.

Some of the amazing capabilities of the Amiga were influenced by one of its architects: Carl Sassenrath. He has since gone on to create the Rebol language which is even more astounding once you begin to look into it. He's currently at Roku where I can only begin to imagine what he's working on. My only wish is that they'd replace the horrific BrightScript with Rebol.

The hardware owes it all to Jay Miner and Ron Nicholson (rhn). Jay Miner passed a long time away from a long term kidney condition and is still out there doing lots of stuff:

http://www.nicholson.com/rhn/photo-cv.html

Notice how he was the guy behind the IWM (Integrated Woz Machine) for the Mac and the beautifully minimized Apple //c in addition to being one of the key persons in creating the essence of Amiga hardware magic: Denise, Copper and Blitter.

Carl Sassenrath and RJ Mical were super influential on the OS side, making a super lightweight preemptively multitasking OS with small components that messaged each other and the OS abstraction layers that the rest of the personal computing world will not see in the next 10+ years.

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#12
post #4

The Juggler showed off the Amiga graphic abilities. It is what helped sell some of the 1986 and 1987 Amiga computers. Before that it was a bouncing checkered beach ball. Other computers did their own bouncing ball, but the Amiga could multitask and had multiple bouncing beach balls, each program running on its own. I think you could have multiple jugglers as well.

A few years later 1992 "State of the Art", Spaceballs demo shows off Amiga 500 pretty well. That whole thing fits on 880 kB floppy and it's rendered realtime. https://www.youtube.com/watch?v=89wq5EoXy-0 A year later same group released "9 Fingers", also running on Amiga 500. https://www.youtube.com/watch?v=PPoYzwib7JQ

Did those run on a stock Amiga 500?

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#13
post #12
post #4

Earlier quoted context omitted.

A few years later 1992 "State of the Art", Spaceballs demo shows off Amiga 500 pretty well. That whole thing fits on 880 kB floppy and it's rendered realtime. https://www.youtube.com/watch?v=89wq5EoXy-0 A year later same group released "9 Fingers", also running on Amiga 500. https://www.youtube.com/watch?v=PPoYzwib7JQ

Did those run on a stock Amiga 500?

Yes, this ran on an 1987 Amiga 500 with the Commodore A501[1] 512K RAM expansion. This means:

  * 1MB RAM
  * 256K ROM
  * 7.16 MHz (yes, that's 0.007 GHz :)) Motorola 68000
plus a whole lot of custom chips [2]

There were different ways of expanding the Amiga RAM and the demo became so popular it was reverse engineered by a popular cracking group Skid Row[3,4]., patched and re-distributed

[1] http://amiga.resource.cx/exp/a501

[2] http://en.wikipedia.org/wiki/Amiga_500

[3] http://www.exotica.org.uk/wiki/Skid_Row_%28old%29

[4] https://www.youtube.com/watch?v=uqfcrViBGn8

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#14
post #12

Earlier quoted context omitted.

Did those run on a stock Amiga 500?

Yes, this ran on an 1987 Amiga 500 with the Commodore A501[1] 512K RAM expansion. This means: * 1MB RAM * 256K ROM * 7.16 MHz (yes, that's 0.007 GHz :)) Motorola 68000 plus a whole lot of custom chips [2] There were different ways of expanding the Amiga RAM and the demo became so popular it was reverse engineered by a popular cracking group Skid Row[3,4]., patched and re-distributed [1] http://amiga.resource.cx/exp/a…

This says 50fps, so I assume it was the 7.09MHz version...

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#15
post #14

Earlier quoted context omitted.

Yes, this ran on an 1987 Amiga 500 with the Commodore A501[1] 512K RAM expansion. This means: * 1MB RAM * 256K ROM * 7.16 MHz (yes, that's 0.007 GHz :)) Motorola 68000 plus a whole lot of custom chips [2] There were different ways of expanding the Amiga RAM and the demo became so popular it was reverse engineered by a popular cracking group Skid Row[3,4]., patched and re-distributed [1] http://amiga.resource.cx/exp/a…

This says 50fps, so I assume it was the 7.09MHz version...

Correct, just like with the Commodore 64, the CPU clock actually differed based on the graphics hardware output, which was back in the day adjusted for the household CRT TV sets.

The master clock crystal oscillator on the motherboard was set to be 2 clock cycles per pixel and other chips clocks were derived from that.

Hence the CPU was set to 1/4th of master clock, so the European PAL[1] machines (a 50fps TV standard) actually ran slightly slower than the American NTSC[2] machines (a 60fps TV standard with a smaller vertical resolution).

[1] http://en.wikipedia.org/wiki/PAL

[2] http://en.wikipedia.org/wiki/NTSC

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#16
post #8

i'm surprised to see so much badness in the original code. it kind of takes away from the rose tinted view i have of the past being dominated by awesome programmers who got the most out of the hardware...

I just realized I can't find the original code on this guy's website but I have the extracted Amiga disk image from a public domain disk circulated at the time... so, here's the annotated 1987 K&R C code on pastebin for comparison:

RT1.C http://pastebin.com/67KWYV3p

RT2.C http://pastebin.com/pc3Uq2Xd

RT3.C http://pastebin.com/v4Qx0gTD

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#17
post #12

Earlier quoted context omitted.

Did those run on a stock Amiga 500?

Yes, this ran on an 1987 Amiga 500 with the Commodore A501[1] 512K RAM expansion. This means: * 1MB RAM * 256K ROM * 7.16 MHz (yes, that's 0.007 GHz :)) Motorola 68000 plus a whole lot of custom chips [2] There were different ways of expanding the Amiga RAM and the demo became so popular it was reverse engineered by a popular cracking group Skid Row[3,4]., patched and re-distributed [1] http://amiga.resource.cx/exp/a…

7.16 MHz (NTSC) / 7.09 MHz (PAL), and what's worse, average instruction takes about 8 clock cycles. Fastest ones take 4 cycles. "move" (like mov on x86) takes from 4 up to 36 cycles depending on addressing modes. Multiplication is up to 70 cycles. Divide up to 140 cycles (unsigned) and 158 (signed).

In some sense it's really like a 1.7 MHz machine. And that's being generous.

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#18
post #8

i'm surprised to see so much badness in the original code. it kind of takes away from the rose tinted view i have of the past being dominated by awesome programmers who got the most out of the hardware...

For what it was aiming to do, I think it makes a lot of sense, albeit it might be a little bit too factored for the data(e.g. passing in the whole world to functions called only once).

You can kind of tell that this is more "proof of concept" than "artistic triumph" because the scene itself is relatively bland stuff, with its most impressive aspect today being that the juggler actually animates somewhat like a person. Everything else is just a straightforward demonstration of the Amiga's compute resources and display capability. Since the output was always going to be a single prerendered animation, deep optimization probably wouldn't be worth it.

Re: A JavaScript Port of the 1986 Amiga Juggler Raytracer

#19
post #18
post #8

i'm surprised to see so much badness in the original code. it kind of takes away from the rose tinted view i have of the past being dominated by awesome programmers who got the most out of the hardware...

For what it was aiming to do, I think it makes a lot of sense, albeit it might be a little bit too factored for the data(e.g. passing in the whole world to functions called only once). You can kind of tell that this is more "proof of concept" than "artistic triumph" because the scene itself is relatively bland stuff, with its most impressive aspect today being that the juggler actually animates somewhat like a person…

i mean stuff like the wonky reflection code and checkerboard logic... its a bit 'special', even for a proof of concept.

its unexpected given the apparent intuition for rendering/geometry/maths from the simple, yet clever animation used.

Post reply on HN