Be advised; this thread is not for serious in depth discussion of weighty topics (we have a link for that), this thread is not for anything Culture War related. This thread is for Fun. You got jokes? Share 'em. You got silly questions? Ask 'em.
- 111
- 7
What is this place?
This website is a place for people who want to move past shady thinking and test their ideas in a
court of people who don't all share the same biases. Our goal is to
optimize for light, not heat; this is a group effort, and all commentators are asked to do their part.
The weekly Culture War threads host the most
controversial topics and are the most visible aspect of The Motte. However, many other topics are
appropriate here. We encourage people to post anything related to science, politics, or philosophy;
if in doubt, post!
Check out The Vault for an archive of old quality posts.
You are encouraged to crosspost these elsewhere.
Why are you called The Motte?
A motte is a stone keep on a raised earthwork common in early medieval fortifications. More pertinently,
it's an element in a rhetorical move called a "Motte-and-Bailey",
originally identified by
philosopher Nicholas Shackel. It describes the tendency in discourse for people to move from a controversial
but high value claim to a defensible but less exciting one upon any resistance to the former. He likens
this to the medieval fortification, where a desirable land (the bailey) is abandoned when in danger for
the more easily defended motte. In Shackel's words, "The Motte represents the defensible but undesired
propositions to which one retreats when hard pressed."
On The Motte, always attempt to remain inside your defensible territory, even if you are not being pressed.
New post guidelines
If you're posting something that isn't related to the culture war, we encourage you to post a thread for it.
A submission statement is highly appreciated, but isn't necessary for text posts or links to largely-text posts
such as blogs or news articles; if we're unsure of the value of your post, we might remove it until you add a
submission statement. A submission statement is required for non-text sources (videos, podcasts, images).
Culture war posts go in the culture war thread; all links must either include a submission statement or
significant commentary. Bare links without those will be removed.
If in doubt, please post it!
Rules
- Courtesy
- Content
- Engagement
- When disagreeing with someone, state your objections explicitly.
- Proactively provide evidence in proportion to how partisan and inflammatory your claim might be.
- Accept temporary bans as a time-out, and don't attempt to rejoin the conversation until it's lifted.
- Don't attempt to build consensus or enforce ideological conformity.
- Write like everyone is reading and you want them to be included in the discussion.
- The Wildcard Rule
- The Metarule
Jump in the discussion.
No email address required.
Notes -
This adlib tracker I'm working on is turning out to be a larger project than I at first intended.
UI programming is a pain in the dick in assembly. Even in humble 80 column mode. I learned the hard way you really want to use definitions for all the screen coordinates of your UI elements. So that was an afternoon's refactoring. Then I split them all off to a definitions file which gets included in the assembly file, just for readability and management's sake.
I did finish the adlib channel configuration page. Lets you change about 20ish settings for the selected channel? Basically everything that is exposed by the registers. I think the actual music composition screen might turn out to be easier, but we'll see. Still thinking through how I want it laid out, and how I'll use what I learned doing the channel configuration screen to do it better.
I did "discover" some interesting uses for a few assembly commands. AAM and AAD, or Ascii Adjust (after) Multiply and Ascii Adjust (before) Division. All the plebian documentation I see says to use these commands only after multiplying two unpacked BCD digits, or before dividing two unpacked BCD digits. In reality, all they functionally do is unpack or pack two BCD digits into a binary byte value. Which is handy if you need to take a byte value that ranges less than 99, and need to display it on the screen. Or accept user input that ranges less than 99, and convert it to a byte value. Which I did a good bit on the channel configuration screen. Lots of values that range 0-15 or 0-63. I'm sure at some point, when more people did assembly, this was well known.
The NuXT I ordered finally showed up today! Put a bunch of old RPGs on it. Ultimas, Might & Magics, Bard's Tales. Also threw Gateway to the Savage Frontier on there, along with Treasures of the Savage Frontier, since I own them and haven't played them yet. And most of those early Gold Box games technically run on a Turbo XT.
In fact, I went through this user collection on Archive.org called goodolddays.net, and they have a massive archive of floppy images. So I've been downloading the ones that look interesting, and throwing them on a used Gotek Floppy Emulator I scored cheap and locally. Even took out the 7 segment panel and replaced it with a fancy OLED screen which shows the actual name of the selected image. That increased it's usability about 1000%.
The only downside is I tried a booter version of Wizardry 1, and it appears it's copy protection rejects the Gotek. I had noticed this even using 86box, where the game only properly launched when it was mounted in an emulated 360k, 5 1/4 floppy drive. I have no idea what the Gotek is doing, but it's mounted in the system as a 3.5" 1.44 MB floppy drive, even though it mounts all sizes of image with no problems. Trying to change the BIOS to a 5.25" 720K drive to "match" the image the Gotek is emulating only breaks things entirely. So oh well. Other booter versions of games have worked with no problems.
I actually have a non-booter version of Wizardry from The Ultimate Wizardry Archives. But it's known, or at least extremely strongly suspected, to be bugged. Many of it's game formula's differ significantly from all other versions of the game. Most obviously, how stats increase or decrease when you level up. The chance for stats to decrease in this version of the game are much higher. Which is rather crippling in an already difficult game. So I'm thinking of going in and hex editing the formulas to correct them. Should be possible with the debug version of dosbox, and setting some memory breakpoints around the character data.
Alright, I'm curious. Is there an end-goal to programming a digital audio workstation on your own (e.g. you plan to make music with it yourself), or are you pursuing it as its own end? Or a bit of both?
A lot of reasons. I wanted to learn x86, and the original 8088/8086 instruction set is less intimidating than the 4000 pages of documentation the current x86 instruction set possess. Going original 8088/8086 means PC Speaker, Tandy 3-Voice or Adlib are your likely sound options. Then you have 40/80 column text modes, CGA or EGA graphics as your display choices.
Plus I'd been looking for an excuse to buy a NuXT. It's a reproduction Turbo XT using modern-ish parts. So you don't have to fuck around with ancient and failing power supplies, spinning rust drives, 8-bit ISA controller cards, etc. I threw a reproduction Adlib card on there, the Resound-2 from Texelec, and I was good to go. It does use NOS or recovered NEC V20 8088 compatible CPUs, and a Trident VGA chip. Not sure about the provenance of other ICs like memory and such.
Since this is entirely self directed, I had to form some goal for myself. That goal is an Ultima style RPG. So I made an EGA sprite editor first to create my own sprite sheets. Now I'm working on an adlib tracker to make my own music. It's going to be terrible. But it's going to be mine.
After that, I'm probably good to go on the RPG. I'll probably create some more utilities to create the data files for the game world, etc. I have zero to no aspirations of making any money on it. Life may well knock me off track, as it tends to do, and it'll never even get finished. But I'm enjoying myself, learning something new, and trying to keep myself sharp.
Plus I just love working a computer like the clockwork machine it is, instead of fighting through layers and layers of abstractions, and libraries, and networking, and software as a service and configuration management. That's my day job, but this is why I fell in love with computers. It helps me not forget that.
More options
Context Copy link
More options
Context Copy link
what does adlib tracker do? Does it plays music from notes?
It basically lets you compose FM synth music. There are trackers for almost every FM synth platform. Some are more fully featured than others. It's a world I'm only just now dipping my toes into.
For example, here is one called Adlib Tracker II which targets the OPL3 chip. Mine is not going to be nearly that complex. Both because it's focusing on the OPL2 chip on an Adlib card, and also because I don't know enough about trackers to even know what half of those features do. It'll let you configure the channels, the beats per minute, and play notes on different channels, change some other global settings, and that's about it.
More options
Context Copy link
More options
Context Copy link
To be fair, programming literally anything is a pain in the dick in assembly.
Yeah, but some things are worse than others.
Right now I'd rank UI Programming as the worst. Although I'm developing a sense for a style that works more formulaically and facilitates changing the layout at will.
Some things I actually find really convenient, thanks to x86's exposed BCD and "string" instructions. Likewise, it's loop and rep instructions.
Then there are the things that simply aren't possible with most platforms today. FM synth is a great way to programmatically create music, and directly programming the registers of an OPL chip is relatively straightforward in assembly. I guess it's not easier than telling Unity or Unreal engine to play an MP3. But if you were trying to build up something from scratch, it's a million times better.
Same thing goes for graphics programming. EGA or VGA aren't that bad. You set some registers, then start writing to memory space. The equivalent "hello world" for DX12 of Vulkan is many times larger and more complex. Which says a lot when you are comparing it to assembly! Once again, there are libraries which dumb it back down. You could use SDL if all you want is to throw pixels up on a screen. And there are always engines like Unity or Unreal. But once again, if you feel the compulsion to build from scratch...
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link