388h is indeed the original adlib base port. Most sound cards that feature an OPL chip will also monitor reads/writes to this port for backward compatibility with older software, but the FM chip is also addressable from a base port offset.
Incidentally, the DSP isn't actually at 220h, it's at 22a/22ch. How the ports are mapped exactly depends on which sound blaster model you have. What's actually at 220h on older cards is the old CMS chips, while the OPL2 is at 228/229h. As CMS chips fell out of use and later cards featured dual OPL2 or an OPL3 chip, 220h-223h were repurposed for FM writes also, which means you can access the OPL chip from a grand total of 3 different IO ports.
Interestingly, cards with dual OPL2 chips would often be designed such that writes to 388h would actually go to both FM chips instead of just one, so that you still get proper mono sound, otherwise it would be panned hard left.
Coincidentally I'm currently working on a Sound Blaster driver for some DOS homebrew, so here's quick rundown of how an SB is programmed and what its resources do:
Base Address: This is the beginning of the IO port range you use to program the card, commonly it's 0x220, but can be configured with jumpers (or software on later cards). You can add offsets to this address to access different functionality of the card, such as the OPL chip or the Mixer chip.
IRQ: The interrupt number that will be fired when the soundcard finishes playback of an audio chunk. Early cards usually used 7, later models defaulting to 5. More on this below.
DMA Channel: Which channel of the PC's DMA controller will be supplying audio data to the card. Usually 1 for 8-bit cards, with 5 being used for 16-bit cards.
The general process for playback is as follows:
- Program the DMA controller with the address and size of an audio buffer you'll be using to mix your PCM sound into. This buffer will conventionally be used in 2 halves by the interrupt service routine, a front buffer and backbuffer, similar to what you'd have for double buffered video. The DMA channel should also be put in "auto-init" mode so that the DMA transfer will loop back to the start when it finishes, which allows continuous playback.
- Install an interrupt service routine to write data into the "backbuffer" half of the DMA buffer, which switches back and forth each time an IRQ fires.
- Initialize the DSP chip via its IO port, pick a sample rate (usually around 11khz for most DOS games), then issue a continuous playback command. For this part, you tell the soundcard that your playback buffer is half the size it actually is, which causes the IRQ to fire once in the middle of the buffer, and again at the end of the buffer before looping back to the start. These halfway IRQs allow you to fill the unused half of the buffer while the other half is playing, for smooth gapless playback with no clicks or pops.
This is probably more info than you or anyone actually wanted, but it's a fun topic so I couldn't help myself.
I'm glad somebody mentioned this book, I was just about to reply with it myself. I'd summarize the core premise as anxiety and depression, while some people are more naturally predisposed to them, aren't things that "just happen", and it's not your brain suddenly misfiring for no reason.
Our culture has become increasingly individualized and isolated, in contrast to millions of years of evolutionary selection for tribal behavior in the great apes. Anxiety is a natural response to being separated from your tribe, since it increases your risk exposure to many things. It's not enough to just have colleagues or acquaintances, but people who actually know and care about you and will notice if you're missing or if something is wrong.
A fantastic book. I borrowed it from the library, but I think I'm going to buy my own copy.
Similar experience, including multiple trips to the ER fearing my imminent death. Still waiting for the bill on the latest one. The first time it happened I had dialed 911 on my phone but stopped short, fearing the impending life-ruining debt it might plunge me into. Thankfully it wasn't actually a heart attack, but the fact that people even have to stop to make a risk assessment like that is dystopian.
As for the symptoms, it is indeed astonishing how "physical" anxiety can be. Most people conceive of anxiety as just an emotional state, and think a "panic attack" is what you have when you're really nervous about a math test and get a cold sweat. The true horror of a real panic attack can't be described to someone who hasn't experienced that level of mortal terror.
And it's definitely true that once the trauma is "etched" into you like you describe, your mind can reconstruct it again much more easily. I find physical sensations that used to be mildly annoying, like a stomach cramp or post-exercise exhaustion, can summon the anxiety right back again.
The scientific evidence for the long-term effectiveness of SSRIs is dubious at best, so I'm attempting a more comprehensive life change to improve my outlook, including trying to build stronger connections with people and community. Isolation is one of the most intense causes of depression and anxiety, among other health problems, so addressing it is a good idea for anyone.
This website is such a blast from the past. I remember using DJGPP in highschool in 1998 and it still looks just the same. Glad to hear that it's still being used and updated; maybe I'll give it another try for old time's sake.
There's an interesting book on this topic of individualized philanthropy by the powerful and its effect of masking the deeper systemic problems. It's called "Winners Take All" by Anand Giridharadas.
I'm only about halfway through, but the central thesis appears to be that the powerful, even if they truly want to make a good-faith effort to improve the world, will naturally gravitate towards forms of social change that don't challenge their power. He describes this kind of thinking as "win-win" in that only solutions that don't involve those in power sacrificing the conditions that made them powerful will be considered by the philanthropic class. These "win-win" solutions then displace more direct "win-lose" solutions that actually address the underlying power dynamic.
The arguments put forth ring pretty true to me, and this GoFundMe stuff fits the model perfectly.
Also from the Seattle area and this hits home as well, except I am a bit agoraphobic and need to build up courage to go out.
I used to push myself to go to dev meetups and such, even gave a few presentations, but eventually stopped. The emotional cost of going was high, and when I would get back home feeling wiped out and reflecting on it, I realized I actually gained very little from the experience. All the socializing was just hollow small talk and no lasting connections were ever formed. Interest-based meetups I've found to generally be transient, ephemeral, and unfulfilling for those who can't muster the enormous social buy-in to get any meaningful results. Volunteer work was more satisfying, but also fleeting and temporary.
On the plus side I did gain experience in public speaking and discovered it really doesn't bother me (although the mingling afterwards is social anxiety hell). Unfortunately that skill on its own isn't terribly useful.
> I feel terrible for those of us on the spectrum without that option, as if I couldn't live this way I would end up being entirely dependent on my spouse or family. I can imagine that burning out + feeling guilty about being a burden financially makes recovery from that state even more difficult.
It is. I was swinging a remote-work career and doing the whole order-groceries-online shut-in routine as well. Eventually I succumbed to burnout for a host of reasons and the career crumbled to dust. Extended unemployment pulls you in like quicksand and I've been out of work for over a year now. I live in a converted tool shed in my parents back yard, and the guilt and shame is crushing. The erosion of self esteem saps your will to improve yourself, creating a vicious circle.
My last recourse at this point is to try to use this as an opportunity for learning and personal enrichment. While working I was myopically focused on programming and industry issues, and utterly ignored the wider world. I'm now trying to rectify that by reading more about philosophy, politics, history, etc.
There's so much more to the world than tech or vocation, and I regret ignoring that for so long. My advice to anyone in this situation is to, as much as your circumstances permit, expose yourself to a wider range of culture and find value and human dignity in ways other than your potential for capital generation. The value of a life is not measured in dollars, and don't let the world convince you that it is.
It feels like this is becoming a blog post or something, so I'll stop. Needless to say this topic hits home for me, as it seems to for many others here.
This is an insightful observation that I feel is worth unpacking further. I've had similar experience when attending interest-based meetups, which I thought would be an ideal place to make friends (which I've never been any good at), but I found that was not the case at all.
Thinking back, I recall feeling uncomfortable commenting on or diverting the conversation towards anything that was unrelated to the prescribed topic of the meetup. It felt rude to divert time away from the topic that everyone there had specifically chosen to allocate their time to, otherwise they wouldn't be there in the first place.
With places like school, even college, there's still a general feeling that you have to be there, and so diversions from the topic at hand are more welcome.
To put it another way, interest-based groups seem to be about the interest first and the people second. The people there are compartmentalized away as being related to the specific topic, and not generalized friends. In this way the group lacks that crucial idleness factor that others here have mentioned, since everyone is there with a purpose to fulfill that they don't want to distract others from.
Thanks for the tip on the area. Not surprising that it would be seeing climbing costs; that's all too common these days. Increasing cost is a pretty significant problem all around. I'm in the Seattle area, and the skyrocketing housing costs thanks in large part to Amazon's insatiable growth have pushed me out of the city into a much less accessible area.
My logistical disability is a visual impairment, so while I'm able to walk, there's relatively little to walk to in the area other than suburban sprawl. Unfortunately, operating any kind of motor vehicle is right out, and while it would be legal for me to bike around, I'm not confident that it would be safe given my poor vision, particularly in any kind of traffic.
As a disabled person who's spent his entire life dependent on others for transportation basically anywhere, I'll confirm how badly I'd love to live in a place like that. (I understand if you don't want to say where you live, but any hints to narrow it down or other places like that you know of?)
It can't be overstated how confining it is when anything you'd like to do or see involves logistical wrangling to work out when exactly you need to be there, how long you'll be there, when you need to be picked up, etc. I've lost count of the number of times I've just decided to not bother with all that and just stay home, which makes for a pretty depressing existence after a while.
Things like uber can help, but you're still placing your trust in someone you've never met to be able to get you there, and more importantly, to be able to get you back home. Not to mention having to do an upfront value analysis to determine if the trip is worth it, and for disabled people this can be a tough call given the difficulties with employment and income in general.
On the contrary, I think perhaps the best thing for the preservation of the history of windows gaming is for windows to stop changing. A frozen or deprecated win32 API will give WINE (which is already quite good) breathing room to catch up and fill in the gaps, without having to continuously cope with the shifting sand of the latest experiments with windows. We'll be able to run old windows games forever, rather than just as long as Microsoft deigns to allow it. DOS games are fairly well preserved at this point for similar reasons.
Of course, then we'll have to deal with whatever the next platform is, but that's just the reality of the industry.
It's important to remember that anxiety and panic are neurochemical responses and can have strong physical and genetic components, they don't always need to have a psychological "cause."
One thing I'd suggest, if you haven't already, is look into your family history for any for signs of it. In my case, there's a very clear hereditary line of panic disorder and other similar ailments that came down through the generations, eventually landing in me as well.
We like to think of our "mind" as something that exists completely separate from the physical reality of the brain, but in the end it's an organ like any other, and any malfunctions within it can affect us in subtle ways. For example, during the run up to a panic attack, I tend to get very irritable and easily frustrated. I've come to recognize it as a sign of what's to come and take steps in advance to try to curb it.
SQIII always felt a little short to me. SQV is probably my pick, but they're all great.
There's also some great Space Quest games made by the community, such as Space Quest 0, Space Quest 2 Remake, and Vohaul Strikes Back. Worth checking out for any SQ fan.
I'm one of the authors of this PR, and yes, WebAudio's baffling lack of proper consecutive buffer queuing has been no small source of frustration. They seem to have put so much effort into adding effects nodes and other such things, but something as simple as scheduling one sound to play gaplessly after another can't be (easily) done. Requests for such support have been batted aside as unnecessary, which is funny considering where all the effort is going instead.
To do it properly would require just giving up on WebAudio's features completely and doing all the mixing in software via WebAssembly. Honestly though, if you're going to do that, you may as well just compile OpenAL-Soft with emscripten and use that, so I opted to just try to get the best out of WebAudio that I could. Hopefully it's good enough.
Incidentally, the DSP isn't actually at 220h, it's at 22a/22ch. How the ports are mapped exactly depends on which sound blaster model you have. What's actually at 220h on older cards is the old CMS chips, while the OPL2 is at 228/229h. As CMS chips fell out of use and later cards featured dual OPL2 or an OPL3 chip, 220h-223h were repurposed for FM writes also, which means you can access the OPL chip from a grand total of 3 different IO ports.
Interestingly, cards with dual OPL2 chips would often be designed such that writes to 388h would actually go to both FM chips instead of just one, so that you still get proper mono sound, otherwise it would be panned hard left.