playing digital samples in BASIC

Started by ruthven, November 18, 2009, 12:12 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ruthven

Ok, another BASIC question: I'm wondering if it is possible to play digital audio samples through the fourth "virtual" SID channel from within BASIC?

I've never sampled anything into the Commodore before, but I'm considering checking it out, though I'll need to invest in a Datasette recorder.  I was just thinking, if I could actually make use of these 4 bit samples in a BASIC program, that would be ample motivation to delve into this.

commodorejohn

It's not built into BASIC, but you could create a machine-language routine and call it with SYS. Playing samples is actually pretty simple; you just write the 4-bit sample value to the volume part of the volume/resonance register. If you're okay with the program pausing during sample playback, all you need to do is loop through the sample at a constant rate; otherwise you'd need to set up an interrupt routine.

ruthven

Thanks--I kind of figured it wasn't built into BASIC but I had to ask--I try to get BASIC to do EVERYTHING (however slowly) simply because I don't know any other languages.  So it seems I'll have to learn some machine language/assembly to incorporate samples into my own programs...

commodorejohn

It's worth learning a little machine language even if BASIC is your primary language, juust because of all the possibilities it opens up. Feel free to ask if you have any questions!

airship

You might also think about getting a BASIC compiler. You'll get about a 10x speed boost from most of them (on average).
Serving up content-free posts on the Interwebs since 1983.
History of INFO Magazine

ruthven

At this point, I didn't think I would ever try picking up any new programming languages from scratch (as it took me this long just to get somewhat proficient in BASIC)--I also figured if I ever went so far as to delve into machine language, it would probably be on a more modern computer than Commodore.  However, I'm starting to reconsider--there's an auction I'm considering bidding on for a breadbox C64 that just happens to include an "absolute beginner's guide to ML", so who knows...

I did end up downloading Blitz! 128 and some other compiler for BASIC 2.0 back in February when I first joined this forum (per somebody's suggestion).  After all this time, would you believe I still haven't even tried them out!--just got sidetracked with so many things... I had downloaded them so I could compile a synthesizer BASIC program I was (still) working on in hopes that I could boost the speed between pressing a key and hearing a note sound.  If it makes my program run anywhere near 10x faster then maybe it'll just work...

commodorejohn

Well, even at 10x speed you're not likely to get a decent sample playback routine, but a BASIC compiler can improve your program's performance in a lot of other ways. As to machine language, you can get a decent start just by perusing the ML section of the Commodore 64 Programmer's Reference Guide, archived on just about every respectable Commodore website.

ruthven

I know I have the Programmer's Reference Guide somewhere; I'll have to check it out sometime...  Switching gears here, breaking off topic--can somebody tell me how sampling is generally accomplished on a Commodore?  I ran across a program once that supposedly made a sample from something pre-recorded on a cassette (through the datasette).  Is this the way all C64 sampler programs worked or is there some other way of sending an audio signal into the computer?  I ask because I recently stumbled into a C64 synth program that supposedly can take an incoming audio signal through the A/V input port... first off, I'm wondering if this refers to the port whose cable breaks off into composite plugs or the RF port--secondly, I thought both these ports were output only(?)  Anyway, the program is called "aSid" and I put it on a disk with Star Commander but I cannot get it to work on my C128 (in C64 mode)--maybe it's just not compatible on a C128 (or with the Warp Load cartridge I use), but supposedly the program lets you route the incoming sound through the SID filter and make changes to the filter (and sound going through it) in real time!  This seemed pretty unbelievable to me, but then I read that the SID was designed to support an audio input pin making it a capable effects processor.

I'm just wondering if any sampler programs make use of this A/V input method or if they generally get the audio through a datasette?  Because if they use a datasette, then I'll have to buy one--and I'd probably only buy a datasette if I needed it for this purpose.

Mark Smith

hiya,

Yup the SID does have an input, but it's not an input you can sample from it just gets passed through and output along with the other sounds the SID makes.

If you want to sample, you are better of building a ADC on the userport, not that hard to be honest!  If you search the forum you will find a kind soul (I started doing it but he obviously had more time than me and finished it :-) has scanned a book titled "Electronics Projects for your Commodore 64 and 128" .. in that book is a simple project to record audio via the userport.

Regards

Mark
------------------------------------------------------------------------------------------------------------------

Commodore 128, 512K 1750 REU, 1581, 1571, 1541-II, MMC64 + MP3@64, Retro-Replay + RR-Net and a 1541 Ultimate with 16MB REU, IDE64 v4.1 + 4GB CF :-)

gsteemso

Ruthven,

I recommend Jim Butterfield’s machine language book (either edition) if you can find a copy. The man was a genius at explaining stuff in an easy-to-understand way.
The world's only gsteemso

commodorejohn

Quote from: Mark Smith on November 19, 2009, 09:24 AMIf you want to sample, you are better of building a ADC on the userport, not that hard to be honest!  If you search the forum you will find a kind soul (I started doing it but he obviously had more time than me and finished it :-) has scanned a book titled "Electronics Projects for your Commodore 64 and 128" .. in that book is a simple project to record audio via the userport.
Unfortunately, the download link on this is dead. Does anyone still have the PDF?

Hydrophilic

Sorry I don't know where you can find it.  But if you're shopping on eBay, you might try searching for something called the Covox Voice Master.  I think there were two versions.  I bought the cheaper version.  Anyway it plugs into the joystick port and takes 1-bit samples.  I think the more expensive one takes 4-bit samples.

But be careful, there are other "voice" type produces that don't record samples.  I had/have one that claimed (and according to my tests true) it has 100% accurate voice recognition (after personal training).  But as far as I can tell, this all happens in the cartridge and results are reported back to your BASIC/ML program.

If you're going to learn ML, I recommend starting on a simple CPU like the 6502/8502 of the C128 or similar.  The intel pentium etc are truly horrendous!  Plus the C128 comes with a nice ML monitor built-in.  Althogh it doesn't let you use labels, you don't really nead them when you first start ML programming because your programs will be really short to begin with.  Oh, if your ML program crashes (virtually gauranteed), you can reboot your Commodore in 2 seconds... I still want to see a Winblows machine do that!!

I have a BASIC program for the C128 from back in the day that plays some digi-voice when you complete a level or die or win (actually, I don't think the game was winnable!)  Now that I have my uIEC, I'm gonna start retrieving those lost gems.  I'll make that one a priority for you.

If you have some way to transfer files from your PC (like an X1541 cable or a uIEC), I would just convert your sound to an 8-bit mono (not stereo) wave file on the PC and transfer it to your Commodore.  Of course, you'd waste a lot of memory if you're only playing 4-bit digis, but it's simple!
I'm kupo for kupo nuts!

RobertB

     All this talk about playing digital samples made me get out Autumn Technologies' Digimaster for the Commodore 64.  With a 1993 copyright, it was developed by Chris Brenner's company named above.  Chris was an avid Amiga fan (he even constructed an Amiga 1200 built into the case of a SX-64) and was a member of the Sacramento Amiga Computer Club.  Digimaster featured a very Amiga-like GUI, with editing features, like cut, copy, and paste.  The package advertises -

"Using an optional audio digitizer, live sound can be grabbed into the computer, edited, and then saved to disk. There is even a utility included which will convert Amiga [IFF] sound samples, giving you access to a vast library of sounds."

"Probably the most impressive feature of this software is its ability to replay sounds in true eight bit digital audio on your Commodore 64 without the need for extra hardware.  This is made possible by a revolutionary method of controlling the sound chip inside the Commodore 64."

     Well, the optional audio digitizer was never produced by Chris, but he did include a schematic so you could build your own.  In fact, a company in Texas did build those digitizers for $30 each (o.k., where did I put mine?).
     Not to stray too far off-topic for this 128 forum, Digimaster included 64PlayFile and 128PlayFile, utilities which let you play the Digimaster File Format sounds without having to load up the editor.  There were 64Player and 128Player, machine language routines to be included in your Basic or machine language programs in order to play back Digimaster's DFF sound files.  There are also 64Routines and 128Routines, a collection of Basic routines for playing back DFF files in your Basic programs.  In version 1.1m, 64Player and 128Player are replaced with 64PlayIt! and 128PlayIt!

          I should mention this software in the software
          collection section of this forum,
          Robert Bernardo
          Fresno Commodore User Group
          http://videocam.net.au/fcug
          The Other Group of Amigoids
          http://www.calweb.com/~rabel1/
          Southern California Commodore & Amiga Network
          http://www.sccaners.org

RobertB

#13
Quote from: Hydrophilic on November 19, 2009, 03:47 PM...Covox Voice Master.  I think there were two versions.  I bought the cheaper version.  Anyway it plugs into the joystick port and takes 1-bit samples.  I think the more expensive one takes 4-bit samples.
I have the more expensive Covox Voice Master, and yes, it does 4-bit sampling.  (I didn't know that the Covox Voice Master, Jr., did 1-bit sampling.)  The 4-bit sampling on the Covox is really rough to the ear.
     Much better was the Digimaster software (though clearer, its volume was low).

                 Truly,
                 Robert Bernardo
                 Fresno Commodore User Group
                 http://videocam.net.au/fcug
                 The Other Group of Amigoids
                 http://www.calweb.com/~rabel1/
                 Southern California Commodore & Amiga Network
                 http://www.sccaners.org

ruthven

Thanks for all the info guys.

QuoteIf you're going to learn ML, I recommend starting on a simple CPU like the 6502/8502 of the C128 or similar.  The intel pentium etc are truly horrendous!  Plus the C128 comes with a nice ML monitor built-in.

You make some good points about starting off with ML on a Commodore as opposed to a more modern machine.  In fact, now that I think about it--there's really no point in learning ML on a modern machine these days; computers are fast enough where you can do pretty much anything you want in an interpreted language, or even in a "specialty" home-brew language that is just designed for creating games for example.

QuoteI have a BASIC program for the C128 from back in the day that plays some digi-voice when you complete a level or die or win (actually, I don't think the game was winnable!)  Now that I have my uIEC, I'm gonna start retrieving those lost gems.  I'll make that one a priority for you.

If you can find that and send it to me (or post it here somewhere), I would appreciate it!  I'd like to have a look at that code.

QuoteIf you have some way to transfer files from your PC (like an X1541 cable or a uIEC), I would just convert your sound to an 8-bit mono (not stereo) wave file on the PC and transfer it to your Commodore.  Of course, you'd waste a lot of memory if you're only playing 4-bit digis, but it's simple!

I have one of those X1541 adapters that I use to transfer .D64 files to 5 1/4" disks.  What format would I have to save the 8 bit mono wave in to be playable on the Commodore?--standard .WAV or something more specific like Amiga's .IFF format?  What program(s) could I use to play these waves?--does this have to do with that Digimaster software Robert is talking about that can play 8 bit sounds?

QuoteNot to stray too far off-topic for this 128 forum, Digimaster included 64PlayFile and 128PlayFile, utilities which let you play the Digimaster File Format sounds without having to load up the editor.  There were 64Player and 128Player, machine language routines to be included in your Basic or machine language programs in order to play back Digimaster's DFF sound files.  There are also 64Routines and 128Routines, a collection of Basic routines for playing back DFF files in your Basic programs.  In version 1.1m, 64Player and 128Player are replaced with 64PlayIt! and 128PlayIt!

Actually, I think you've strayed back ON-topic by telling me how to access these samples from within BASIC--thanks!  I think I may have downloaded Digimaster and copied it to a floppy at some point--if not, I'll have to get it along with any other sampling (or sample manipulating) programs I can find.

commodorejohn

#15
Quote from: ruthven on November 20, 2009, 12:19 AMI have one of those X1541 adapters that I use to transfer .D64 files to 5 1/4" disks.  What format would I have to save the 8 bit mono wave in to be playable on the Commodore?--standard .WAV or something more specific like Amiga's .IFF format?  What program(s) could I use to play these waves?--does this have to do with that Digimaster software Robert is talking about that can play 8 bit sounds?
The format is entirely dependent on how you write your code. You'll probably find it easiest to save your samples as headerless RAW files, but the only absolute must is that your samples be unsigned 8-bit integers. However, since the standard sample playback method only takes 4-bit samples, you can fit twice the number of samples into the available space by writing a converter program to pack them two to a byte; say, for example, you store the first sample in bits 0-3 and the second in bits 4-7. I'm working on some example code for how to do this, but I still have to get the bugs worked out.

RobertB

Quote from: ruthven on November 20, 2009, 12:19 AMWhat program(s) could I use to play these waves?
There are a few .wav players for the Commodore.  I use Nate (Vanessa) Dannenberg's Sound Studio 3.71 (3.8 seemed to be buggy).  Nate also developed ModPlay 64 and ModPlay 128, two programs which can play Amiga .mods.
Quote...does this have to do with that Digimaster software Robert is talking about that can play 8 bit sounds?
No, .wavs are not accessible by Digimaster.

                 Truly,
                 Robert Bernardo
                 Fresno Commodore User Group
                 http://videocam.net.au/fcug
                 The Other Group of Amigoids
                 http://www.calweb.com/~rabel1/
                 Southern California Commodore & Amiga Network
                 http://www.sccaners.org

Hydrophilic

#17
Quote from: RobertB...Autumn Technologies' Digimaster for the Commodore 64.  With a 1993 copyright...

That's pretty cool he was releasing software in '93 for the 128.  The software sounds awesome (ooh, a pun!); I mean fairly sophisticated, with file editing, copy/paste, and 8-bit digis.  I've toyed with 8-bit digis myself, but they always have an annoying hi-freq whistle, even using the SID filter.  Is this software superior?  I'd like to a link if so...

Quote from: RobertB
(I didn't know that the Covox Voice Master, Jr., did 1-bit sampling.)  The 4-bit sampling on the Covox is really rough to the ear.

You should hear the 1-bit samples!  Well, now you can!  I've attached the game I was telling you about that plays 1-bit samples.  It sounds best on a real Commodore.  VICE on my former PC was OK.  On this PC, which is must faster (3+GHz), there is still a bit of stutter in the sound, even if I boost the application's priority to High.

The game itself is uncompiled BASIC, and is pretty lame.  Hey I was teenager back then just learning stuff!  Sheeeeesh, give me a break.  Anyway, use joystick in port#2 for everthing except when you enter NUMBER OF SHIPS TO KILL? (only part that uses keyboard)

It saves high scores.  This works fine on my real C128 using the uIEC.  For some reason on VICE there was a problem.  Maybe true drive emulation is needed, but when I tried to investigate the problem, I crashed Windows XP... hard reset required... it makes me so proud I can still crash modern PCs!  (BTW, I was running as normal user, not power user nor administrator)

Although the sound is really poor, as noted above, it is really small!  I looked at the code, and it is doing 8kHz playback frequency.  With 8 bits per byte, that works out to 1000 bytes per second.  All the sounds are in 40 block file (BLOADed to $4000 in BANK1).  So there must about 10s worth of audio total.  There are 9 samples in the file.

The way this works is a ML program "PLAY" is BLOADed to $1300 in BANK0.  Then variable AY is set to 4864 (dec of $1300).  Then when needed the program simply does:

SYSAY,n

where n is a number 0 to 8.

The ML program that does the playback is terribly convoluted.  I know I wasn't a great ML programmer back then, but that seems too bad to mine.  I'm thinking that I mod'd the software provided with Voice Master Jr.  If you'd like, I can write re-write it to make it simpler to understand (and make it a lot smaller, not that it should matter)

Basically it just looks at a list of addresses at the start of the $4000 area in BANK1 and then starts playing samples from an address in the list.  I think the software originally worked by writing either 0 or 15 to the SID volume register.  But I made it sound a little better by changing the values to less extreme.  Most of the samples toggle between volume 12 and 14.  The timing is done by checking $DD04 to go from negative to positive, in other words, every $80 (128) CPU cycles.  This works out to almost 8kHz on NTSC.  No idea about PAL.

Quote from: ruthvenWhat format would I have to save the 8 bit mono wave in to be playable on the Commodore?
The method I was talking about (to play 4-bit digis with little effort), is to save as .WAV using encoding/format of

PCM 8.000 kHz, 8 Bit, Mono (7kb/sec)

This is the exact setting shown on Sound Recorder which comes shipped with every version of Windows since at least '95.  (Actually, I don't know if it comes with Vista or Win 7, but I assume so).

The .WAV file includes a RIFF header which is not audio samples, so the first millisecond or two of your sound will be corrupt unless you find/write some software to remove the header.

Oh yeah, don't try the "PLAY" software in the attached file because it is for 1-bit, not 8-bit.  Maybe you should try the software RobertB recommended.  I haven't used it, but with it, I assume you shouldn't have to worry about the RIFF header.

Quote from: commodorejohn
...the only absolute must is that your samples be unsigned 8-bit integers

Excellent point!  I forgot about that, since Sound Recorder doesn't tell you if it's signed or not.  I am pretty sure it is signed, so conversion would be necessary if you write your own code.

Edit
I got bored and wrote a BASIC program to convert a .WAV file to raw 4bit audio, "WAV TO 4BIT".  Somebody should compile this because it takes several minutes to run in VICE at warp speed.  Some error checking would be nice too.  But once it is created playing it is simple.

First load the player,
BLOAD"PLAY4BIT",B0

Then load your 4bit digi,
BLOAD"FUEL.RAW",B1,P1024

Then finally,
BANK0:SYS4864

It plays from $0400 up to the end of file (it checks memory address $ae,af the end of last-loaded-file).  If it is already in memory or you have mucked up the address by loading other files, then you need to POKE the end address into $ae,af before you SYS

To use with a BASIC program, you would need to change the pointers used by BASIC or change the start-playing-address above $0400, otherwise the sound will clash with your BASIC variables.

Of yeah, it will play a bit rough because of VIC bad lines, but you can use FAST before the SYS.  The CPU speed doesn't matter (because of I/O timers) but it is a simple way to blank VIC and avoid bad lines.
/Edit
I'm kupo for kupo nuts!

commodorejohn

Quote from: Hydrophilic on November 20, 2009, 08:06 PM
Quote from: commodorejohn
...the only absolute must is that your samples be unsigned 8-bit integers
Excellent point!  I forgot about that, since Sound Recorder doesn't tell you if it's signed or not.  I am pretty sure it is signed, so conversion would be necessary if you write your own code.
I believe Sound Recorder does signed by default, but I can't remember if that's configurable or not. Rather than writing my ownn conversion code, though, I'm using SoX, an open-source audio-conversion utility with a plethora of format options, to convert samples to 8-bit unsigned RAW format; that way, the only conversion utility I had to write was the 8-to-4-bit packer. I'll include SoX and a .bat file in the example package I'm putting together.

RobertB

Quote from: Hydrophilic on November 20, 2009, 08:06 PM...I mean fairly sophisticated, with file editing, copy/paste, and 8-bit digis.
Yes, Chris got his inspiration from Amiga programs, so that is why you see a graphical representation of the sound frequencies and why you can clip and paste right there on that graph.
QuoteIs this software superior?  I'd like to a link if so...
I consider it to be superior.  I don't know of any links to Digimaster.  I don't even know if Chris has released it as shareware or to the public domain, since it was a commercial product back in the 90's.  However, I think I have a phone number and address for him (it was so long ago that I visited him).  I can try to contact him.
QuoteI've attached the game I was telling you about that plays 1-bit samples.  It sounds best on a real Commodore.
Oooo, thanks!  I'm traveling on the road right after work and won't be able to get to it until Sunday.
Quote...I crashed Windows XP... hard reset required... it makes me so proud I can still crash modern PCs!
Yay!  ;)

                 Truly,
                 Robert Bernardo
                 Fresno Commodore User Group
                 http://videocam.net.au/fcug
                 The Other Group of Amigoids
                 http://www.calweb.com/~rabel1/
                 Southern California Commodore & Amiga Network
                 http://www.sccaners.org

RobertB

Quote from: Hydrophilic on November 20, 2009, 08:06 PM
I've attached the game I was telling you about that plays 1-bit samples.
Hmm, I don't see where the game attachment is.

              Truly,
              Robert Bernardo
              Fresno Commodore User Group
              http://videocam.net.au/fcug
              The Other Group of Amigoids
              http://www.calweb.com/~rabel1/
              Southern California Commodore & Amiga Network
              http://www.sccaners.org

Hydrophilic

The game is on the disk image "BLANK.D64" which is the only file in the attachement, digi.zip

I downloaded it to make sure it works.  The dir listing is:

NFSOUNDraw 1-bit digis
PLAYoriginal 1-bit player, ML
SHIPSsprite data
NIGHT FLIGHT!just RUN this BASIC game
SCOREShi score SEQ file
-- the next files I added cuz I was bored --

FUEL.RAW4-bit digi
PLAY4BITnew 4-bit player, ML
WAVE TO 4BITnew BASIC converter .WAV to .RAW

The WAVE TO 4BIT is terribly slow since it is uncompiled BASIC.  Better to use commodorejohn's suggestion of SoX.  ...almost anything would be better... use mine as an educational tool :)

And the game... you're getting way to excited about that!  In fact, it is so bad I can't help but laugh when I think about it... it should also be used as an educational tool... or a good joke  ;)
I'm kupo for kupo nuts!

RobertB

#22
Quote from: Hydrophilic on November 21, 2009, 06:08 PM
The game is on the disk image "BLANK.D64" which is the only file in the attachement, digi.zip
Thanks!
QuoteThe WAVE TO 4BIT is terribly slow since it is uncompiled BASIC.
Time for me to crunch it or Blitz it!  :)

                  On the road,
                  Robert Bernardo
                  Fresno Commodore User Group
                  http://videocam.net.au/fcug
                  The Other Group of Amigoids
                  http://www.calweb.com/~rabel1/
                  Southern California Commodore & Amiga Network
                  http://www.sccaners.org

SmallCleverDinosaur

Quote from: commodorejohn on November 18, 2009, 01:16 PM
It's not built into BASIC, but you could create a machine-language routine and call it with SYS. Playing samples is actually pretty simple; you just write the 4-bit sample value to the volume part of the volume/resonance register. If you're okay with the program pausing during sample playback, all you need to do is loop through the sample at a constant rate; otherwise you'd need to set up an interrupt routine.
I had to try that for myself to see if it was actually that simple. And it was :)

I wrote a small machine language routine that continuously stores the values $00-$0F into address $D418 (the volume register of the SID). The routine looks like this:


1300 SEI           ;Stop interrupts (to give my program 100% of the processor time)
1301 LDX #$00      ;Reset volume to zero
1303 STX $D418     ;Store it in the volume register of the SID
1306 INX           ;Increase the volume
1307 CPX #$10      ;Is the volume #$10?
1309 BNE $1303     ;If not, continue storing the volume in the SID register
130B JMP $1301     ;If it was #$10, then the last stored value was #$0F, then reset the volume and start over


This code will create a sound that starts at volume zero and then increases to volume 15 (#$0F), then resets to zero and starts over, indefinitely.

I ran this code in VICE and it produced (a horrible) sound that I then recorded using Audacity. The recorded waveform looked like this:



Ehh... This isn't what I wanted... So I inserted a (very) small delay into the program:


1300 SEI           ;Stop interrupts (to give my program 100% of the processor time)
1301 LDX #$00      ;Reset volume to zero
1303 STX $D418     ;Store it in the volume register of the SID
.
1306 LDY #$F0      ;Begin delay counter at #$F0
1308 INY           ;Increase delay counter
1309 BNE $1308     ;Repeat until delay counter reaches #$00 (i.e wraps from #$FF to #$00)
.
1306 INX           ;Increase the volume
1307 CPX #$10      ;Is the volume #$10?
1309 BNE $1303     ;If not, continue storing the volume in the SID register
130B JMP $1301     ;If it was #$10, then the last stored value was #$0F, then reset the volume and start over


The delay loop counts from #$F0 to #$FF between every increase of the volume. The waveform now looks like this:



And that is exactly what I wanted :)

The waveform should actually be a straight line rising from volume 0 to 15 but the delay in the code makes the line to be not completely straight. And above that the SID emulation in VICE is probably not as good as the real thing. The sound is then recorded in Audacity, probably distorting it further. It would probably look a lot better seen in an oscilloscope connected to a real C128. But still, it's a good example of how it can be done :)

What puzzles me though is that I never actually told the SID to play any tune. I just continuously change the volume of the SID and that in itself creates this sound. Is this a bug in the SID? If so, lucky for us, otherwise playing samples using this technique wouldn't be possible :)
Ignorance is a precious thing. Once lost, it can never be regained.

ruthven

Wow, thanks for that package you put together Hydrophilic!  I put it on 5 1/4" the other night and ran it on my C128.  I got a real kick out of your game!--It is very similar to a game I started making when I was in High School (in Quick Basic)... mine was also a space flight simulator; cockpit view, chasing down alien craft... complete with High School juevenile language (the cute little 3-eyed aliens (modeled after the ones from Toy Story) would come up on your scanner-view screen and swear at you when you shot at them).  You could also insult them by pressing F1-F4 (insults fully customizable, an idea I got from Wing Commander) which would result in them cursing you even more!  I never finished my game because I could not for the life of me get the computer to remember the coordinates of the enemy ship once it went off screen.  The game would have been so much cooler if I could have incorporated digitized voices like yours!  Was that your voice by the way?

Anyway, I haven't gotten a chance to delve too deeply into your code yet.  I haven't yet tried the wave converter or 4 bit player, but I'm going to try "Blitzing" it tonight to see what kind of speed difference there is between compiled/uncompiled BASIC... which leads me to my next question (definitely getting off original topic here): this weekend I tried Blitz! 128 for the first time on a C128 BASIC synthesizer program I was working on last February--after Blitz was done doing it's thing, the result was two files written to my disk--"Z/SYNTH" and "C/SYNTH".  Is one of these files supposed to be the compiled executable or is the original file (SYNTH) now compiled so that it should run faster?  I ask because both Z/SYNTH and C/SYNTH cause the Commodore to hang; the original file (SYNTH) still runs exactly as it did before--that is, it doesn't appear to run any faster.  When I compiled this, from Blitz's menu I chose "1" and later I tried "4"--these were the two options that involved a single drive, something to do with having "RESUME" on or off (I didn't know what it meant so I tried both options as separate tests)--I got no error messages either time.

To bring this back on topic here:
QuoteQuote
Is this software superior?  I'd like to a link if so...

     I consider it to be superior.  I don't know of any links to Digimaster.  I don't even know if Chris has released it as shareware or to the public domain, since it was a commercial product back in the 90's.  However, I think I have a phone number and address for him (it was so long ago that I visited him).  I can try to contact him.

I found Digimaster on NoGames64 (http://www.haddewig.de/nogames64/)--I can't get it to work though; it boots up to the main screen and then I can't do anything (can't move the arrow pointer).  I've tried the joystick in both ports--when connected to port 2, the "File" menu comes up for as long as I'm holding up on the joystick.  But I can't select anything--the button has no effect and the arrow pointer does not move when I move the joystick or hit any button on the keyboard.  So I guess this question is directed to you, RobertB--do you know if this software is controllable by mouse only?