BLASTERBOARD : A new SB 2.0-compatible ISA sound card - Page 15 \ VOGONS

Skip to content

## BLASTERBOARD : A new SB 2.0-compatible ISA sound card

### Topic actions

- Post a reply
- View first unread post
- Watch topic

### Reply 280 of 468, by keropi

Posted on 2019-07-23, 13:23

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  l33t++
Posts
  7719
Joined
  2003-09-07, 22:45
Location
  Greece

> LABS wrote:

> [...]

> Nevertheless, I just disassembled and decoded to a human-readable form the original firmware of Sound Blaster 2.0 (DSP 2.01). Many unknown things revealed and there is a room for perfection for BB's future firmware releases.

this is truly amazing news, kudos! 😲

🎵Link to buy a PCMIDI mpu
🎧Orpheus soundcard project
💻WTB Amstrad PC7486SLC-33 system

### Reply 281 of 468, by canthearu

Posted on 2019-07-23, 15:17

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  890
Joined
  2018-05-25, 17:00

> LABS wrote:

> Noisy playback in Windows (I assume you are running W95/98) does not depend on cpu speed. You don't hear a bit-to-bit accurate playback because Windows apply internal mixing and sample conversion in real time and the result sounds like crap. You should try DirectSound games like Diablo, Starcraft, Hexen II and hear how they sound, outputting directly:)
> High CPU speed does not degrade the output under DOS, as ISA bus speed remains the same. Some games just may not have sound at all on faster machines, like early SCUMM-based games, which use finite loops when waiting for DSP response and just give up too early. The same is with OPL2 - the sirens you talked about earlier. Anyway, it is a user's responsibility which software to run on which hardware.

I can see what you are getting at, if we are talking about WDM drivers, as they remix sound up, which is not a particularly bright idea on an 8-bit output. However, VXD drivers shouldn't be doing too much to the output signal, and I think the Sound Blaster compatible driver is actually a VXD driver.

I'll definitely fire up Diablo though at some stage, see how that sounds though. Still many tests to do before I can narrow down what is causing playback to be significantly worse than I expected.

### Reply 282 of 468, by ajacocks

Posted on 2019-07-23, 17:20

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Newbie
Posts
  23
Joined
  2017-07-10, 07:33

Unfortunately, I don't have the ability to respond to PMs, as I haven't posted enough. Labs, I'm definitely interested, so please put me on the list for the next batch.

Apologies, all, for the silly post.

- Alex

### Reply 283 of 468, by MrSmiley381

Posted on 2019-07-23, 18:23

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Newbie
Posts
  92
Joined
  2018-09-11, 03:55

> LABS wrote:

> Nevertheless, I just disassembled and decoded to a human-readable form the original firmware of Sound Blaster 2.0 (DSP 2.01). Many unknown things revealed and there is a room for perfection for BB's future firmware releases.

That sounds a little intense. How long did that take? Anything immediately fascinating worth mentioning?

I spend my days fighting with clunky software so I can afford to spend my evenings fighting with clunky hardware.

### Reply 284 of 468, by Tiido

Posted on 2019-07-23, 21:23

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  1494
Joined
  2018-01-13, 20:40
Location
  Estonia

Wow, awesome ! Are you planning to document any of the findings somewhere ?
I do have a question, where did you find information about the ADPCM formats ? I haven't actually found any resource that tells how to decode or encode PCM into the Creative's ADPCM flavor.

T-04YBSC, a new YMF71x based sound card & Official VOGONS thread about it
Newly made 4MB 60ns 30pin SIMMs ~
mida sa loed ? nagunii aru ei saa 😜

### Reply 285 of 468, by appiah4

Posted on 2019-07-23, 22:23

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  l33t++
Posts
  5734
Joined
  2017-02-18, 23:36
Location
  Sea of Sorrows

If you can decode these DSPs maybe you can decode the SB16 ones as well, so that we can possibly figure out what the MIDI bug really is.

Retronautics: A digital gallery of my retro computers, hardware and projects.

### Reply 286 of 468, by root42

Posted on 2019-07-23, 22:55

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  1718
Joined
  2018-01-27, 05:23

> Tiido wrote:

> Wow, awesome ! Are you planning to document any of the findings somewhere ?
> I do have a question, where did you find information about the ADPCM formats ? I haven't actually found any resource that tells how to decode or encode PCM into the Creative's ADPCM flavor.

Is Creative's ADPCM really different? If not, sox has you probably covered:

https://github.com/chirlu/sox/blob/master/src/adpcms.c

YouTube and Bonus
80386DX@25 MHz, 8 MiB RAM, Tseng ET4000 1 MiB, SnarkBarker & BlasterBoard, PC MIDI Card + SC55 + MT32, XT CF Lite, OSSC

### Reply 287 of 468, by LABS

Posted on 2019-07-24, 01:19

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

> MrSmiley381 wrote:

> Anything immediately fascinating worth mentioning?

First noticeable thing was that its command jump table has no dummy code for unimplemented commands. Every function 00-FF has some code to run. However, the jump addresses are repeated. For example Set Time Constant function (0x40) is valid for commands 0x40 - 0x47. I bet some games have their command numbers written incorrectly and still work on the original thing.

A first half of a jump table looks like this (=== are documented command numbers, Lxxxx - labels not yet decoded):

    1	; 00 - Resets DSP_BUSY flag
    2	AJMP	CMD_00_03
    3	AJMP	CMD_00_03
    4	AJMP	CMD_00_03
    5	AJMP	CMD_00_03
    6	; 04 - Outputs byte 0x21 to host and starts Timer 0
    7	AJMP	CMD_04_07
    8	AJMP	CMD_04_07
    9	AJMP	CMD_04_07
    10	AJMP	CMD_04_07
    11	; 08 - Halts DSP
    12	AJMP	CMD_08_0F
    13	AJMP	CMD_08_0F
    14	AJMP	CMD_08_0F
    15	AJMP	CMD_08_0F
    16	AJMP	CMD_08_0F
    17	AJMP	CMD_08_0F
    18	AJMP	CMD_08_0F
    19	AJMP	CMD_08_0F
    20	; === 10
    21	AJMP	CMD_10_Direct_PCM_Out
    22	AJMP	CMD_10_Direct_PCM_Out
    23	AJMP	CMD_10_Direct_PCM_Out
    24	AJMP	CMD_10_Direct_PCM_Out
    25	; === 14
    26	AJMP	CMD_14_PCM_Single_DMA
    27	AJMP	CMD_14_PCM_Single_DMA
    28	; === 16
    29	AJMP	CMD_16_ADPCM82_Single_DMA
    30	; === 17
    31	AJMP	CMD_17_ADPCM82_Single_DMA_REF
    32	; === 18
    33	AJMP	CMD_1C_PCM_Auto_DMA
    34	AJMP	CMD_1C_PCM_Auto_DMA
    35	; 1A
    36	AJMP	L0152
    37	; 1B
    38	AJMP	CMD_1F_ADPCM82_Auto_DMA_REF
    39	; === 1C L0143
    40	AJMP	CMD_1C_PCM_Auto_DMA
    41	AJMP	CMD_1C_PCM_Auto_DMA
    42	; 1E
    43	AJMP	L0152
    44	; === 1F L016D - ADPCM 82 Auto REF
    45	AJMP	CMD_1F_ADPCM82_Auto_DMA_REF
    46	; === 20 L018B - PCM Direct Input
    47	AJMP	CMD_20_PCM_Direct_Input
    48	AJMP	CMD_20_PCM_Direct_Input	; 21
    49	AJMP	CMD_20_PCM_Direct_Input ; 22
    50	AJMP	CMD_20_PCM_Direct_Input ; 23
    51	; === 24 L0192 - PCM Single DMA Input
    52	AJMP	CMD_24_PCM_Single_DMA_Input
    53	AJMP	CMD_24_PCM_Single_DMA_Input ; 25
    54	AJMP	CMD_24_PCM_Single_DMA_Input ; 26
    55	AJMP	CMD_24_PCM_Single_DMA_Input ; 27
    56	; 28
    57	AJMP	L01C1
    58	AJMP	L01C1 ; 29
    59	AJMP	L01C1 ; 2A
    60	AJMP	L01C1 ; 2B

    61	AJMP	L01C1 ; 2C
    62	AJMP	L01C1 ; 2D
    63	AJMP	L01C1 ; 2E
    64	AJMP	L01C1 ; 2F
    65	; === 30 L01E4 - Polling MIDI Input
    66	AJMP	CMD_30_Polling_MIDI_Input
    67	; === 31 L023E - Int MIDI Input
    68	AJMP	CMD_31_Int_MIDI_Input
    69	AJMP	L0286 ; 32
    70	AJMP	L030B ; 33
    71	; === 34 L0394 - UART_Poll_MIDI_IO
    72	AJMP	CMD_34_UART_Poll_MIDI_IO
    73	; === 35 L03E3
    74	AJMP	CMD_35_UART_Int_MIDI_IO
    75	; === 36 L0436
    76	AJMP	CMD_36_UART_Poll_MIDI_IO_Time
    77	; === 37 lL04C6
    78	AJMP	CMD_37_UART_Int_MIDI_IO_Time
    79	; === 38 L01D2
    80	AJMP	CMD_38_MIDI_Output
    81	AJMP	CMD_38_MIDI_Output ; 39
    82	AJMP	CMD_38_MIDI_Output ; 3A
    83	AJMP	CMD_38_MIDI_Output ; 3B
    84	AJMP	CMD_38_MIDI_Output ; 3C
    85	AJMP	CMD_38_MIDI_Output ; 3D
    86	AJMP	CMD_38_MIDI_Output ; 3E
    87	AJMP	CMD_38_MIDI_Output ; 3F
    88	; === 40 L055A
    89	AJMP	CMD_40_Set_Time_Constant
    90	AJMP	CMD_40_Set_Time_Constant ; 41
    91	AJMP	CMD_40_Set_Time_Constant ; 42
    92	AJMP	CMD_40_Set_Time_Constant ; 43
    93	AJMP	CMD_40_Set_Time_Constant ; 44
    94	AJMP	CMD_40_Set_Time_Constant ; 45
    95	AJMP	CMD_40_Set_Time_Constant ; 46
    96	AJMP	CMD_40_Set_Time_Constant ; 47
    97	; === 48 L056B
    98	AJMP	CMD_48_Set_DMA_Block_Size
    99	AJMP	CMD_48_Set_DMA_Block_Size ; 49
    100	AJMP	CMD_48_Set_DMA_Block_Size ; 4A
    101	AJMP	CMD_48_Set_DMA_Block_Size ; 4B
    102	AJMP	CMD_48_Set_DMA_Block_Size ; 4C
    103	AJMP	CMD_48_Set_DMA_Block_Size ; 4D
    104	AJMP	CMD_48_Set_DMA_Block_Size ; 4E
    105	AJMP	CMD_48_Set_DMA_Block_Size ; 4F
    106	AJMP	L0582 ; 50
    107	AJMP	L058D ; 51
    108	AJMP	L0582 ; 52
    109	AJMP	L058D ; 53
    110	AJMP	L0582 ; 54
    111	AJMP	L058D ; 55
    112	AJMP	L0582 ; 56
    113	AJMP	L058D ; 57
    114	AJMP	L0596 ; 58
    115	AJMP	L05BE ; 59
    116	AJMP	L0596 ; 5A
    117	AJMP	L05BE ; 5B
    118	AJMP	L0596 ; 5C
    119	AJMP	L05BE ; 5D
    120	AJMP	L0596 ; 5E
    121	AJMP	L05BE ; 5F
    122	AJMP	L05E8 ; 60
    123	AJMP	L05E8
    124	AJMP	L05E8
    125	AJMP	L05E8
    126	AJMP	L05EC	; 64
    127	AJMP	L05EC
    128	AJMP	L05EC
    129	AJMP	L05EC
    130	AJMP	L05FE	; 68
    131	AJMP	L05FE
    132	AJMP	L05FE
    133	AJMP	L05FE
    134	AJMP	L05FE
    135	AJMP	L05FE
    136	AJMP	L05FE
    137	AJMP	L05FE
    138	AJMP	L0605	; 70
    139	AJMP	CMD_7D_ADPCM84_Auto_DMA_REF	; 71
    140	AJMP	L0668	; 72
    141	AJMP	CMD_7F_ADPCM83_Auto_DMA_REF	; 73
    142	; === 74
    143	AJMP	CMD_74_ADPCM84_Single_DMA
    144	; === 75
    145	AJMP	CMD_75_ADPCM84_Single_DMA_REF
    146	; === 76
    147	AJMP	CMD_76_ADPCM83_Single_DMA
    148	; === 77
    149	AJMP	CMD_77_ADPCM83_Single_DMA_REF
    150	AJMP	L0605 ; 78
    151	AJMP	CMD_7D_ADPCM84_Auto_DMA_REF ; 79
    152	AJMP	L0668	; 7A
    153	AJMP	CMD_7F_ADPCM83_Auto_DMA_REF ; 7B
    154	AJMP	L0605	; 7C
    155	; === 7D
    156	AJMP	CMD_7D_ADPCM84_Auto_DMA_REF
    157	AJMP	L0668	; 7E
    158	; === 7F
    159	AJMP	CMD_7F_ADPCM83_Auto_DMA_REF

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 288 of 468, by LABS

Posted on 2019-07-24, 01:20

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

> ajacocks wrote:

> Unfortunately, I don't have the ability to respond to PMs, as I haven't posted enough. Labs, I'm definitely interested, so please put me on the list for the next batch.

> Apologies, all, for the silly post.

> - Alex

Added you to the list.

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 289 of 468, by LABS

Posted on 2019-07-24, 01:44

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

> Tiido wrote:

> Wow, awesome ! Are you planning to document any of the findings somewhere ?
> I do have a question, where did you find information about the ADPCM formats ? I haven't actually found any resource that tells how to decode or encode PCM into the Creative's ADPCM flavor.

Yes, this type of document will be useful. I would gladly share the source code with anyone who is interested as well and wish to collaborate in translating its darkest corners.
I did not get to the details of ADPCM code yet, so can't say anything about it, root42. BlasterBoard uses this one https://wiki.multimedia.cx/index.php/Creative_8_bits_ADPCM, it works great. DosBox uses tables instead, but I traced both methods with one ADPCM83 source and got to the same waveform at the end.

PS: Did anyone try any ADPCM-enabled games on BB?

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 290 of 468, by canthearu

Posted on 2019-07-24, 04:48

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  890
Joined
  2018-05-25, 17:00

You might be pleased to know that my blasterboard's DAC actually works perfectly fine on the 486 under windows 95. The level of noise and distortion is largely comparable to the level displayed by my Sound Blaster AE-5 when playing the same 8-bit content.

The AE-5 might still have a little bit of an edge over the blasterboard, but it is pretty close.

### Reply 291 of 468, by LABS

Posted on 2019-07-24, 05:25

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

> canthearu wrote:

> You might be pleased to know that my blasterboard's DAC actually works perfectly fine on the 486 under windows 95. The level of noise and distortion is largely comparable to the level displayed by my Sound Blaster AE-5 when playing the same 8-bit content.

> The AE-5 might still have a little bit of an edge over the blasterboard, but it is pretty close.

Oh, that's a bold comparison, thank you.
Is it W98 or W95 on your P3 installed where the sound is poor?

EDIT:
Can you check "Hardware version:" string under "Sound Blaster or compatible" Properties in Device Manager on both 486 and P3?

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 292 of 468, by canthearu

Posted on 2019-07-24, 05:48

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  890
Joined
  2018-05-25, 17:00

System specs:

Intel Pentium 3 600mhz Katmai (100fsb)
Asus P2B v1.1
512meg RAM
Voodoo 3-3000 GPU
Intel 100mbit PCI ethernet.
NEC USB 2.0 card
Windows 98 SE

### Reply 293 of 468, by canthearu

Posted on 2019-07-24, 06:10

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  890
Joined
  2018-05-25, 17:00

> LABS wrote:

> Can you check "Hardware version:" string under "Sound Blaster or compatible" Properties in Device Manager on both 486 and P3?

I can't seem to find that particular detail on either computer.

In further testing, the P3 isn't as bad as I thought. If I play the sound clip in media player, it is quite badly distorted, while if I play the same clip in sound recorder, it is mostly OK. So it looks like windows media player, assuming that you would have a 16bit sound card, was munting the sound output, probably due to rounding errors.

I still get a lot of clicking on the P3 when playing though sound recorder though, I wonder if your newer firmware has already fixed that.

### Reply 294 of 468, by LABS

Posted on 2019-07-24, 06:15

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

> canthearu wrote:
> System specs: […]
> Show full quote

> System specs:

> Intel Pentium 3 600mhz Katmai (100fsb) Asus P2B v1.1 512meg RAM Voodoo 3-3000 GPU Intel 100mbit PCI ethernet. NEC USB 2.0 card Windows 98 SE

I have poor performance on W98 too. Sounds like W98 driver is downsampling the stream to like 4 or 8kHz.
Is it "Hardware version: Not available" on both machines?

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 295 of 468, by canthearu

Posted on 2019-07-24, 06:28

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Oldbie
Posts
  890
Joined
  2018-05-25, 17:00

> LABS wrote:

> I have poor performance on W98 too. Sounds like W98 driver is downsampling the stream to like 4 or 8kHz.
> Is it "Hardware version: Not available" on both machines?

I get that hardware version: not avaliable.

However, have you tried playing the wave file through sound recorder rather than media player (the default player)?

### Reply 296 of 468, by LABS

Posted on 2019-07-26, 01:33

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

> canthearu wrote:

> However, have you tried playing the wave file through sound recorder rather than media player (the default player)?

Yes, it is ok. Still need to get deeper into that later anyway. I have a P3-1GHz with ISA as well, but it is not at my place at the moment.

2 days of thorough SB2.0 firmware decoding answered a lot of questions concerning internal processes that affect the behavior of the card in different register programming situations and combinations. But still there is some code (about 5-6%) left with unknown yet functionality. Still needs some work.
I think I should document my findings later somehow - can be useful for emulator developers for example. At least I did not find any doc like that on the net.

Based on the acquired superpowers there will be a hardcore firmware upgrade for BB for sure.

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 297 of 468, by Eleanor1967

Posted on 2019-07-30, 02:05

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  173
Joined
  2016-09-18, 01:31
Location
  Europe

I‘ve finally finished my card, too. Took me a while just soldering parts here and there when there was time on hand. It might not be the cleanest looking Blasterboard around, far from it, but it worked first try so thats good with me (well technically second try but I think jumpering it wrong doesn’t count here 😉 ). Soldering the card was pretty smooth sailing, spacing on the resistors was a a bit tight for my clumsy hands but all went well. Overall pretty impressed with the kit and the card, especially the noise level is quite impressive! Thanks again.

#### Attachments

- Filename
    20190730_114133.jpg
  File size
    1.09 MiB
  Views
    360 views
  File license
    Fair use/fair dealing exception
- Filename
    20190730_114121.jpg
  File size
    1.27 MiB
  Views
    360 views
  File license
    Fair use/fair dealing exception

### Reply 298 of 468, by LABS

Posted on 2019-07-30, 06:54

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

Which is the best Homebrew Soundcard? by root42

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

### Reply 299 of 468, by LABS

Posted on 2019-08-02, 00:13

- Reply with quote
- Report this post
- Creative Commons Attribution No Derivatives 1.0 Generic license

Rank
  Member
Posts
  181
Joined
  2018-06-07, 08:49
Location
  Riga, LV

Just received a fresh batch of PCBs

However, still upgrading the firmware, which will take some time.

Last edited by LABS on 2020-01-03, 01:46. Edited 2 times in total.

BLASTERBOARD: a DIY SB2.0-compatible sound card on ATmega328P microcontroller

Go to top of page
Back to Sound

### Quick Reply

Message

## Who’s online?

Users browsing this forum: TheGreatCodeholio and 6 guests