4 ms·
Playing Atari ST Music on the Amiga with Zero CPU
- anonzzzies 5mo agoI was in a Dutch demo group first for msx and then amiga, then dropped out of low level dev; the amiga coprocessors I still miss. I went to PC as everyone did and definitely at the beginning thought: what is this garbage??? We lived in the future and then it was taken from us for a while.
- poulpy123 5mo agoI had an Atari ste and when I passed from the GUI os to msdos + windows 3.11, Inhaz the same reaction
- pjmlp 5mo agoYeah, the closest you can get to those days is doing homebrew in something like PS3 cell units, or shader coding, which is kind of why shader competitions are so beloved in demoscene parties.
- ndsipa_pomu 5mo agoI don't know if the Amiga was ahead of its time or the PC was behind its time. AmigaOS was a pre-emptive multitasking OS whilst PCs had to wait for Windows NT/95.
- abanana 5mo agoThe release of Windows 95 was weird. There were PC users talking about how amazing Microsoft were, to have come up with all the things their marketing people were shouting about, such as pre-emptive multitasking and plug-and-play. Then all the Amiga (and Mac) users, completely underwhelmed, pointing out "we've had all these things for years, how has it taken so long?".
- Keyframe 5mo agoYeah. one thing is not like the other. While AmigaOS was pre-emptive, Mac System - 6-8 weren't. It was co-op. Everyone who used 6 and 7 can remember copying file meant you couldn't do anything else, and 8 got multithreaded support in Finder finally, but it was still co-op. At the time I used various platforms daily. Namely, AmigaOS, Mac System 6-8, IRIX.. the difference was obvious. IRIX and hardware of course being from the future, but at at least 10x the price.
- gblargg 5mo agoEven Mac OS classic was just cooperative multitasking. Near the end it got some very limited pre-emptive capability, but most only usable to do calculations.
- Findecanor 5mo agoAs a Amiga and then Linux and Windows 95 user I remember being flabbergasted over a Mac in 1997 being completely unusable while it was formatting a floppy.
- smokel 5mo agoThere were early multitasking operating systems starting with the 286, but for demos you'd typically use the entire CPU. Part of the magic was that video routines would run at an extremely constant 50 (or 60) Hz, perfectly in sync with the hardware. This, and color bleeding, resulted in a buttery smooth experience, that I still miss. One particular example of this experience was that you'd use "raster bars" to time the performance of your routines. If your main loop is synchronized with the vertical retrace, then switching the background color after a piece of code would show up in the margins of your screen. Animations were tuned to move in constant pixel offsets. All the anti-aliasing in the world cannot bring back the true demoscene spirit :)
- z303 5mo agoAn example: https://youtu.be/z2C1uVqCqME https://youtu.be/z2C1uVqCqME Green is the main music routine. Blue is the sample playback
- z303 5mo agoand any example of a zero bitplane demo. Just using the CPU to switch the background colour https://youtu.be/z2Ke-Irp7U8 https://youtu.be/z2Ke-Irp7U8
- lproven 5mo agoSort of both. > AmigaOS was a pre-emptive multitasking OS Yes, but without memory protection. > whilst PCs had to wait for Windows NT/95. While Windows 2 on an 8086 could pre-emptively multitask DOS apps, so long as they all fit into 640 kB at once. Windows/386 could do it in extended memory. The innovative thing in W95 was doing it to Win32 apps as well. OS/2 in 1987 or so could multitask OS/2 code on a 286.
- bhaak 5mo ago>> AmigaOS was a pre-emptive multitasking OS > Yes, but without memory protection. That’s why it was so fast. :) Also surprisingly stable all things considered.
- makapuf 5mo agoI havent seen many desktop like workflows on it with several "big" apps open (and running cpu) at the same time, most ive seen was one software at a time or games. Cooperating with yourself is relatively easier, no ?
- bhaak 5mo agoRemember that without memory protection everybody shares the same memory and everything is visible to every process. If a process doesn't release all their memory that memory leak will stay even if the process ended. Shared libraries were typically loaded only once into the system's single shared address space. Any process could potentially overwrite another task's memory or shared library state. I don't have my old setup ready but if I boot into Pimiga, I get about 60 task and processes running. If you literally mean "seeing" workflows, because of the small monitors back then, you usually didn't have open programs side by side. The Amiga allowed to have multiple screens that were basically a better version of virtual screens combined with fullscreen mode. Here is an example of somebody having Deluxe Paint open and the Workbench. https://retrocomputing.stackexchange.com/questions/24842/amiga-multitasking-different-resolution-for-each-program-on-screen-dragging https://retrocomputing.stackexchange.com/questions/24842/ami... The pinnacle of workflow design on the Amiga was of course ARexx which allowed applications to communicate through message ports and automation scripts.
- weinzierl 5mo agoSame feeling. I often think of the 16-bit PC era as kind of the dark ages. Everything was weird, nothing made sense, elegance nowhere to be found. Things got a lot better again when 32-bit PCs came around and continued to improve with 64-bit.
- bartread 5mo agoI never had an Atari ST so wasn't familiar with the details of how its sound chip worked. I did know it was a variant of the AY chip found in the ZX Spectrum +2A, which I did own for a brief period after several years of 48K+ ownership. However, it's only as a result of reading this article that I realised the chip is only capable of generating square waves and noise, whereas I'd been under the impression it had some slightly more advanced FM synthesis capabilities. That impression must have come from, decades later, listening to what people could squeeze out of the chip on various Spectrum demos on YouTube. Well, that and the fact that after the 48K beeper the 128K was never going to sound less than incredible. I might not even have had it for a year before switching to the (much less prone to go wrong) C64[0]. Anyway, all of this to say: very interesting project, and I enjoyed the neat reversal trick with the attached voice to get the higher quality output out of Paula. [0] Actually the Spectrum -> C64 switch was more of a mixed bag than you might think - it wasn't, for example, like games on the C64 were all universally better. On the sound front, the C64's SID chip was a significant upgrade over the AY though, and certainly the most capable sound chip amongst 8-bit computers that I'm aware of. I really wish they'd crammed a SID chip into the Amiga alongside Paula. Or maybe even a dual SID with 6 channels for stereo output + Paula, but, alas... I'm sure it would have been cost prohibitive even if Commodore engineers had the idea at the time.
- rbanffy 5mo ago> I really wish they'd crammed a SID chip into the Amiga alongside Paula This is something the Apple IIgs had. It had an extremely capable synthesiser with good graphics and performance capped so not to compete with Macs. It was a weird machine, a sharp contrast with the minimalistic Apple IIs that preceded, over complicated and trying to be too many things at once. For the same reason I prefer the design of the ST over the Amiga’s. Amiga made lots of assumptions about the use that ended up tuning it well to platform games and NTSC video editing, but nothing else.
- rigonkulous 5mo agoI'd love to have a IIgs in my collection these days, its truly the pinnacle computer of its type and era.
- rigonkulous 5mo agoThis is such a delicious article for those of us who are 'retro-' computing enthusiasts. Made my Sunday cuppa shine! "In a way, this feature is similar to the YM2149 ADSR envelope. Not technically, but because both features are mostly ignored by Atari and Amiga programmers! :)" As an Oric-1/Atmos programmer, this line was especially juicy. Using PAULA's attached mode is so brilliant, btw. I love it when things of this nature are discovered, decades after the fact. We've had a few such revelations in the Oric world too, none as powerful of course at Orics' 1MHZ, but nevertheless, the shoulders of the Atari/Amiga giants are perilously within reach for the climb .. EDIT: Oh, COPPER and PAULA, paired at the bits. Such a great hack, this one ..
- christkv 5mo agoThe no CPU Amiga demos was fantastic
- Rpu-Micro 5mo ago[dead]
- indigodaddy 5mo agoThe demo linked at the bottom of the article: https://www.pouet.net/prod.php?which=104190 https://www.pouet.net/prod.php?which=104190 .. could it be run on something like PiMiga?
- snvzz 5mo agoShould work. Amiga emulators have been decent for a while, accuracy-wise.
- amiga386 5mo agoAwesome! As an aside, the only code I know that uses Paula's attached mode (where one channel can modulate the volume or pitch of another) is the sound effect used in X-Copy. It sounds like this: https://youtu.be/2OG2tPx5gnU?t=22 https://youtu.be/2OG2tPx5gnU?t=22 and the code that generates that sound is this: PLAY_SAMPLE ; a6=_custom, d0=zero for high-pitch sound, nonzero for low-pitch sound move.w #$F00,d1 ; high pitch: period=$d00-$f00 if d0 == 0 tst.b d0 beq.s .high move.w #$7700,d1 ; low pitch: period=$7500-$7700 if d0 != 0 .high lea MODULO,a0 move.w #$200-1,d0 .down move.w d1,(a0)+ subq.w #1,d1 dbra d0,.down move.w #$200-1,d0 .up addq.w #1,d1 move.w d1,(a0)+ dbra d0,.up ; set up channel 2; whatever words this plays will ; be written to the period register of channel 3 move.w adkconr(a6),-(sp) ; save ADKCON state for later move.w #ADKF_SETCLR!ADKF_USE2P3,adkcon(a6) move.l #MODULO,aud2+ac_ptr(a6) move.w #$400,aud2+ac_len(a6) move.w #0,aud2+ac_vol(a6) ; no volume (no actual sound wanted!) move.w #$90,aud2+ac_per(a6) ; change period every $90 ticks lea SAMPLE,a0 ; set up channel 3 to play a simple square wave move.l #$7f7f8080,(a0) ; square wave: 127 127 -128 -128 ... move.l a0,aud3+ac_ptr(a6) move.w #2,aud3+ac_len(a6) move.w #DMAF_SETCLR!DMAF_AUD2|DMAF_AUD3,dmacon(a6) ; turn on sound DMA moveq #$40,d2 ; start with volume = 64 .vol move.w d2,aud3+ac_vol(a6) ; write channel 3 volume move.w #$600-1,d1 ; wait a bit 1$ move.b vhposr(a6),d0 2$ cmp.b vhposr(a6),d0 beq.s 2$ dbra d1,1$ subq #8,d2 ; repeat to fade bpl.s .vol moveq #0,d0 ; stop sound move.w d0,aud2+ac_len(a6) move.w d0,aud3+ac_vol(a6) move.w d0,aud3+ac_len(a6) move.w #DMAF_AUD2!DMAF_AUD3,dmacon(a6) move.w (sp)+,d0 ; restore ADKCON btst #ADKB_USE2P3,d0 bne.s .keepon move.w #ADKF_USE2P3,adkcon(a6) .keepon rts section 2,bss,chip SAMPLE ds.w 2 MODULO ds.w $400