FM / Midi Composition & programming help

Discussion about old sound cards, MIDI devices and sound related accessories.

Re: FM / Midi Composition & programming help

Postby BeginnerGuy » 2017-10-02 @ 18:21

Gered wrote:This topic got me thinking about it again, so I tracked down another seller with a copy of the book in new condition. Sent him a question asking if it has the disk or not and will definitely buy it if it does (cost is quite a bit more then it would be from a thrift store though, so that sucks). I do like collecting these things too, but in a lot of cases I've had to settle for ISOs of the CDs that I end up not getting. Hopefully one of us gets lucky and is able to get the disk. :) If not, you're right that most of these books tend to put a lot of the code directly in the book itself too.


Mine came with the disk (it's a single 3.5" floppy). Couple of read errors but I managed to copy it, not bad for a 25 year old floppy. Sometimes you do get lucky with cheap thrift books :blush:

It seems to just be a couple of freeware programs that I've come across on many other disks from books of the same time period like Blaster Master unregistered, a few sound files in .voc, .rol, and .cmf format packaged into an installer, no source files. I'll send you a copy if you need.

Contents are quite broad and generic (There is a section on deciding what speakers to buy), starting with a little back history on sound blaster cards (up until the CT 1600, where this book was released), explanation of MIDI and FM synth. Lots on software such as talking parrot, sbaitso, play and record utilities, mixer controls, multimedia software, and sequencer plus pro). SPUTMON (sputter monitor), Blaster Master, and so on.

The programming section is an appendix of around 60 pages, there is no ready made code for you to dabble with, but it seems to have everything I need. knowledge of 80x86 assembly is assumed by this book, instructions are written like this:

Initializing the DSP for Voice
1. Write a byte value of 01h to DSP reset port 2x6h
2. Wait 3 microseconds
3. Write 00h to DSP Reset port
...and so on.

I will get to work writing some short programs to test it out throughout the week :)
Sup. I like computers. Are you a computer?
User avatar
BeginnerGuy
Oldbie
 
Posts: 614
Joined: 2016-12-19 @ 08:32
Location: North Carolina, US

Re: FM / Midi Composition & programming help

Postby BloodyCactus » 2017-10-02 @ 18:31

also read the SB page on the online version of the PCGPE (pc game programmers encyclipdia)

main page - http://qzx.com/pc-gpe/

sbdsp - http://qzx.com/pc-gpe/sbdsp.txt

sbpro - http://qzx.com/pc-gpe/sbpro.txt
--/\-[ Stu : Bloody Cactus :: http://kråketær.com :: http://mega-tokyo.com ]-/\--
User avatar
BloodyCactus
Oldbie
 
Posts: 703
Joined: 2016-2-03 @ 13:34
Location: Lexington VA

Re: FM / Midi Composition & programming help

Postby BeginnerGuy » 2017-10-02 @ 20:19

BloodyCactus wrote:also read the SB page on the online version of the PCGPE (pc game programmers encyclipdia)

main page - http://qzx.com/pc-gpe/

sbdsp - http://qzx.com/pc-gpe/sbdsp.txt

sbpro - http://qzx.com/pc-gpe/sbpro.txt


All added to my bookmarks, thanks. I've got tons of reading to do now :cool: .. Starting with this SB official book as we speak.
Sup. I like computers. Are you a computer?
User avatar
BeginnerGuy
Oldbie
 
Posts: 614
Joined: 2016-12-19 @ 08:32
Location: North Carolina, US

Re: FM / Midi Composition & programming help

Postby Gered » 2017-10-02 @ 22:06

BeginnerGuy wrote:The programming section is an appendix of around 60 pages, there is no ready made code for you to dabble with, but it seems to have everything I need. knowledge of 80x86 assembly is assumed by this book, instructions are written like this:

Initializing the DSP for Voice
1. Write a byte value of 01h to DSP reset port 2x6h
2. Wait 3 microseconds
3. Write 00h to DSP Reset port
...and so on.

I will get to work writing some short programs to test it out throughout the week :)


That is actually better than I was expecting and is awesome to hear! The copy I ordered hasn't arrived yet... was described as "like new" but not "new", so may not have the disk, heh. But I guess the disk isn't that helpful after all for the stuff we were both looking to get out of this book. lol @ a section on what speakers to buy. Really is a "complete" book on the Sound Blaster I guess. :)

Sounds like you got the first edition if it ends at the CT1600? (1992 publish date?) Unless they messed up the ISBN #'s, that is the one I should be receiving too.

BloodyCactus wrote:also read the SB page on the online version of the PCGPE (pc game programmers encyclipdia)

main page - http://qzx.com/pc-gpe/

sbdsp - http://qzx.com/pc-gpe/sbdsp.txt

sbpro - http://qzx.com/pc-gpe/sbpro.txt


Awesome, thanks for sharing the links, they look very helpful. They look vaguely familiar, probably saw them many years ago and had forgotten about them completely (or more likely, my younger self in the late 90's didn't see anything I could copy+paste, shrugged and looked elsewhere, haha).
User avatar
Gered
Member
 
Posts: 160
Joined: 2017-6-23 @ 22:31
Location: Toronto, Canada

Re: FM / Midi Composition & programming help

Postby BeginnerGuy » 2017-10-02 @ 22:14

Gered wrote:
BeginnerGuy wrote:The programming section is an appendix of around 60 pages, there is no ready made code for you to dabble with, but it seems to have everything I need. knowledge of 80x86 assembly is assumed by this book, instructions are written like this:

Initializing the DSP for Voice
1. Write a byte value of 01h to DSP reset port 2x6h
2. Wait 3 microseconds
3. Write 00h to DSP Reset port
...and so on.

I will get to work writing some short programs to test it out throughout the week :)


That is actually better than I was expecting and is awesome to hear! The copy I ordered hasn't arrived yet... was described as "like new" but not "new", so may not have the disk, heh. But I guess the disk isn't that helpful after all for the stuff we were both looking to get out of this book. lol @ a section on what speakers to buy. Really is a "complete" book on the Sound Blaster I guess. :)

Sounds like you got the first edition if it ends at the CT1600? (1992 publish date?) Unless they messed up the ISBN #'s, that is the one I should be receiving too.


I usually like to go for the earliest editions for my collection, I saw around 50,000 of this one sold so subtract however many were destroyed over the years and it's probably not a common book :cool: . SB16 definitely were on the shelves in 1992 though (at least that's how I remember it).

Mine is 0-07-881907-5, the disk is dated 1992, copyright 1993 inside. Oh and mine has an Egghead store price sticker on it, which I love because I used to have an egghead right up the hill from my house back then.

--- It does say on the back "Covers the whole sound blaster family including Sound Blaster, Sound Blaster Pro, the New Sound Blaster 16 & the Sound Blaster Multimedia Upgrade kit" but the SB16 is not mentioned in the table of contents.

edit: P.28 "By the time you read this, Sound Blaster 16 ASP (SB16) will be out". So it looks like this edition of the book was finalized for print somewhere around early-mid 1992.
Sup. I like computers. Are you a computer?
User avatar
BeginnerGuy
Oldbie
 
Posts: 614
Joined: 2016-12-19 @ 08:32
Location: North Carolina, US

Re: FM / Midi Composition & programming help

Postby BloodyCactus » 2017-10-03 @ 00:59

if your interested; here is the source (compiles with openwatcom for dos), for my sbdsp program (it lists the dsp copyright or major/,minor dsp so you can run it in batch files).

Code: Select all
/*   Purpose: Dumps the SoundBlaster DSP version
   Keywords: DOS, Watcom, SoundBlaster, DSP
   Changelog:
   20160522 (sgeorge) - Initial release
*/

#define APP_RELEASE "20160522"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <i86.h>

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;


#define DSP_RESET      0x06
#define DSP_READ         0x0A
#define DSP_WRITE      0x0C

#define DSP_STATUS      0x0E

#define DSP_VERSION      0xE1
#define DSP_COPYRIGHT   0xE3

uint16_t g_port;

static void reset_dsp(void)
{
   outp(g_port + DSP_RESET, 1);
   delay(1);
   outp(g_port + DSP_RESET, 0);

   while(inp(g_port + DSP_STATUS) < 0x80)
      ;

   while(inp(g_port + DSP_READ) != 0xAA)
      ;
}

static void write_dsp(uint8_t command)
{
    while(inp(g_port + DSP_WRITE) >= 0x80)
      ;

   outp(g_port + DSP_WRITE, command);
}

static uint8_t read_dsp(void)
{
   uint16_t c;
   while(inp(g_port + DSP_STATUS) < 0x80)
      ;

   c = inp(g_port + DSP_READ);

   return c & 0xFF;
}


static char* unspace(char *s)
{
   while(*s != 0 && isspace(*s) != 0)
      s++;

   return s;
}

static int parse_sb_env(void)
{
   int rc = 0;
   char *e;
   char *p;

   g_port = 0;

   e = getenv("BLASTER");
   p = e;
   if(e != NULL)
   {
      while(*p != 0x0)
      {
         p = unspace(p);
         if(p != 0x0)
         {
            // look for 'A' or 'a')
            if(*p == 'A' || *p == 'a')
            {
               p = unspace(p+1);

               while(*p != 0x0 && isspace(*p) == 0)
               {
                  unsigned char c = toupper(*p);

                  if(c >= 'A')
                     c -= 'A' + 10;
                  else
                     c -= '0';

                  g_port <<= 4;
                  g_port += c;

                  p += 1;
               }

               return g_port;
            }
            else
            {
               while(*p != 0x0 && isspace(*p) == 0)
                  p++;
            }
         }
      }
   }

   return rc;
}

int main(int argc, char *argv[])
{
   int rc = 0;
   int rettype = 0;
   int quiet = 0;
   int i;

   for(i=1; i < argc; i++)
   {
      if(strcmp(argv[i], "-?") == 0)
      {
         printf("Stu's SoundBlaster DSP checker - r" APP_RELEASE "\n\n");
         printf("--major    Return DSP major version (DEFAULT)\n");
         printf("--minor    Return DSP minor version\n");
         printf("-q         Quiet (no printing anything)\n");
         printf("\n-?         This help\n");
         printf("\n\nA return value of 0 indicates an error\n");
         exit(0);
      }
      else if(strcmp(argv[i], "-q") == 0)
      {
         quiet = 1;
      }
      else if(strcmp(argv[i], "--major") == 0)
      {
         rettype = 0;
      }
      else if(strcmp(argv[i], "--minor") == 0)
      {
         rettype = 1;
      }
   }
   
   if(quiet == 0)
      printf("Stu's SoundBlaster DSP checker - r" APP_RELEASE "\n\n");
   
   if( parse_sb_env() > 0)
   {
      uint16_t dsp;

      reset_dsp();
      
      write_dsp(DSP_VERSION);
      dsp = (read_dsp() << 8) + read_dsp();
      
      if(quiet == 0)
         printf("DSP Version = %i.%i\n", dsp >> 8, dsp & 0xFF);
      
      if(rettype == 0)
         rc = dsp >> 8;
      else
         rc = dsp & 0xFF;
      
      /* do not show DSP copyright if not version 4! */
      if(quiet == 0 && dsp >= 0x400 && dsp <= 0x7FF )
      {
         uint8_t c;
         uint8_t buff[256];
         
         i = 0;
         memset(buff, 0x0, 256);

         write_dsp(DSP_COPYRIGHT);
         c = 1;
         while(i < 256 && c != 0)
         {
            c = read_dsp();
            buff[i++] = c;
         }
         
         printf("DSP Copyright = %s\n", buff);
      }
   }
   else
   {
      if(quiet == 0)
         printf("Could not find BLASTER environment variable.\n");
      
      rc = 0;
   }

   return rc;
}


anyway, here is the source/bin link.

https://kråketær.com/sbdsp.zip
--/\-[ Stu : Bloody Cactus :: http://kråketær.com :: http://mega-tokyo.com ]-/\--
User avatar
BloodyCactus
Oldbie
 
Posts: 703
Joined: 2016-2-03 @ 13:34
Location: Lexington VA

Re: FM / Midi Composition & programming help

Postby gerwin » 2017-10-06 @ 21:03

Just received a copy of 'Sound Blaster - The official book' second edition 1994. Skimped through it briefly: I have mixed feelings about it. Like it is a 660+ page book about ISA Sound Blaster cards, thats great! Where "Upgrading and Repairing PCs" only has a few pages on that topic.

But it is not much of a programming book, neither as in-depth on the hardware like "Upgrading and Repairing PCs". It is more like a very big user manual for Sound Blaster owners. It reads like an advertorial at times, since competitor hardware gets no coverage here, only Adlib is covered a little and not very favorable. There is actual sample code in the last chapter 12 "Programming the SB family", but pretty much all of it is about using the creative supplied drivers and API. That goes against the bare-metal fun that is DOS. Chapter 12 includes file formats for VOC, WAV, CMF, SBI, IBK and MID. The last paragraph of the chapter advises one to order the Sound Blaster Developer Kit (2nd edition), which is free for download since.

@BeginnerGuy; My book came without the disk, I would appreciate a copy...
User avatar
gerwin
l33t
 
Posts: 2506
Joined: 2004-5-07 @ 19:21
Location: NL

Re: FM / Midi Composition & programming help

Postby Gered » 2017-10-07 @ 15:22

Yeah, mine arrived on Thursday (same 1992 edition as BeginnerGuy, though mine did not have the disk... though can't say I'm interested in the software that was on it). You're exactly right that much of the book feels like a glorified advertisement piece, heh. Was kind of sad to see that the majority of the ~60 page programming section is devoted to the Creative drivers (CT-VOICE, etc). But even still the little bits that are devoted to programming against the "bare metal" is still going to be very helpful.

I still like having physical books that has this information. :) The only other book I have that has this kind of bare-metal Sound Blaster programming in it is "Revolutionary Guide to QBASIC". Though the info is very light covering very basic sound recording + playback and some FM synth to play a simple melody. Actually the content in that book is almost exactly identical to this article here (some edits/improvements are in the article, but the text is otherwise the same).

I'll likely just end up printing myself a copy of the Creative PDF that was linked earlier in this topic just to round it all out.
User avatar
Gered
Member
 
Posts: 160
Joined: 2017-6-23 @ 22:31
Location: Toronto, Canada

Re: FM / Midi Composition & programming help

Postby yawetaG » 2017-10-25 @ 15:18

xjas wrote:A lot of game composers from back in the day (Bobby Prince & Lee Jackson notably) used Voyetra Sequencer, which was a full MIDI sequencer that also has an FM driver. So you can compose GM on e.g. a Roland Sound Canvas and then play it back using a preset FM bank to see how it sounds. I think you can tweak the built-in FM preset banks if you want. Results won't be as good as using a dedicated OPLx editor (Edlib, RAD Tracker, Adlib Tracker II) but are usually pretty serviceable if you're careful and you get the bonus of not having to convert MIDI. I've messed around with it a bit, it's a little clunky but not too bad once you get used to it.

The last, best V.S. Plus Gold version was released freeware a while ago. Some good info on ChrisNova777's site here.


Bumping this, because to me it looks like Voyetra Orchestrator Plus (first impressions here, might contain some errors because I lack a English manual) is a Windows version of the program above. Originally meant for Windows 3.1 and 95, also works in 98SE.

Edit: So it's this program: http://www.oldschooldaw.com/forums/index.php?topic=531.0, except that I have a newer version, so I guess I'll have to image the floppies :cool:
yawetaG
Oldbie
 
Posts: 1070
Joined: 2016-6-14 @ 14:36
Location: Netherlands

Previous

Return to Sound

Who is online

Users browsing this forum: Synthoridity and 5 guests