tandy put their sound chip on the 1A interrupt?
-
PUSH BX
PUSH ES
PUSH SI
CALL StartPlayingSound
POP BX
POP ES
POP SIsince when has the x86 stack been FIFO instead of LIFO?
the internal audio API used by this game is interesting.
LoadAndPlaySoundChunk is called with a chunk name from digisnd.dat, but you can also pass -1 or 0. I'm not sure what -1 does yet (maybe silence a currently playing sound?) but 0 means "wait until the sound finishes" -
the internal audio API used by this game is interesting.
LoadAndPlaySoundChunk is called with a chunk name from digisnd.dat, but you can also pass -1 or 0. I'm not sure what -1 does yet (maybe silence a currently playing sound?) but 0 means "wait until the sound finishes"I'm not really sure why it works that way, especially because calling LoadAndPlaySoundChunk(0) is equivalent to calling WaitUntilSoundFinishes().
So why not just do that instead?
-
I'm not really sure why it works that way, especially because calling LoadAndPlaySoundChunk(0) is equivalent to calling WaitUntilSoundFinishes().
So why not just do that instead?
uh oh. the computer noise is triggered with:
LoadAndPlaySoundChunk(217)but I look in the DIGISND.DAT file and it has chunks 200-216.
So either my DAT file parsing is wrong or it's loading sounds from elsewhere, somehow? because the sound DOES play, so it's not just an error
-
uh oh. the computer noise is triggered with:
LoadAndPlaySoundChunk(217)but I look in the DIGISND.DAT file and it has chunks 200-216.
So either my DAT file parsing is wrong or it's loading sounds from elsewhere, somehow? because the sound DOES play, so it's not just an error
I thought it might just be playing from MIDISND.DAT instead (since the computer noise is very beepy, maybe it's just a synth sound?) but MIDISND.DAT starts at chunk id 218 and goes up.
WHERE IS 217?
-
I thought it might just be playing from MIDISND.DAT instead (since the computer noise is very beepy, maybe it's just a synth sound?) but MIDISND.DAT starts at chunk id 218 and goes up.
WHERE IS 217?
huh. weird. when you try to backspace too far in the name entry screen, it goes "duh-nuh" at you, but that isn't connected to a LoadAndPlaySoundChunk call.
So it's using a different function for this ONE NOISE?
-
huh. weird. when you try to backspace too far in the name entry screen, it goes "duh-nuh" at you, but that isn't connected to a LoadAndPlaySoundChunk call.
So it's using a different function for this ONE NOISE?
maybe it's hardcoded to pc speaker and I can't tell the difference between soundblaster and pc speaker because they're both coming out of the same laptop
-
maybe it's hardcoded to pc speaker and I can't tell the difference between soundblaster and pc speaker because they're both coming out of the same laptop
YEP. muted my soundblaster (MIXER SB 0:0) and it's still duh-nuhing at me.
why would you do this to me, brøderbund?
-
YEP. muted my soundblaster (MIXER SB 0:0) and it's still duh-nuhing at me.
why would you do this to me, brøderbund?
ah-ha! I found 217.
DIGISND.DAT has PCM sound effects for 200-216.
But there's also chunks in CARMEN.DAT for 200-229.I didn't think the ones in CARMEN.DAT were sound files because they're so small... but they're just the right size to be PC speaker sound effects!
-
ah-ha! I found 217.
DIGISND.DAT has PCM sound effects for 200-216.
But there's also chunks in CARMEN.DAT for 200-229.I didn't think the ones in CARMEN.DAT were sound files because they're so small... but they're just the right size to be PC speaker sound effects!
the way the game works is that it loads CARMEN.DAT always, then if you have a sound card it supports, it loads DIGISND.DAT which replaces chunks 200-216 in memory with the DIGISND.DAT ones, which are PCM. But if you don't have a sound card, it still has the CARMEN.DAT ones loaded, and they're all pc speaker sound effects.
-
the way the game works is that it loads CARMEN.DAT always, then if you have a sound card it supports, it loads DIGISND.DAT which replaces chunks 200-216 in memory with the DIGISND.DAT ones, which are PCM. But if you don't have a sound card, it still has the CARMEN.DAT ones loaded, and they're all pc speaker sound effects.
they hardcoded two sound effects into the EXE and the rest are loaded from the DAT files.
eww. Someone hacked something in at the last moment!
-
they hardcoded two sound effects into the EXE and the rest are loaded from the DAT files.
eww. Someone hacked something in at the last moment!
yeah lets just return 17 bits from this function WHY NOT there are no rules
-
yeah lets just return 17 bits from this function WHY NOT there are no rules
correction: 33 bits
-
correction: 33 bits
correction correction: 49 bits
-
correction correction: 49 bits
did some stats:
there's 729 functions in the EXE.
I've named (in some way, counting placeholders) 355 of them, or 49% -
did some stats:
there's 729 functions in the EXE.
I've named (in some way, counting placeholders) 355 of them, or 49%by placeholders I mean things like "pcjr_sound_related" or "VGAFunc8"
and 13 of those function names include the word "maybe"
-
by placeholders I mean things like "pcjr_sound_related" or "VGAFunc8"
and 13 of those function names include the word "maybe"
up to 52% after today's work
-
up to 52% after today's work
I think they generated their hints wrong.
The *22 chunk for a city says something like "$SUSPECT was going to an opera with the president" or "$SUSPECT would be having tea with the Emperor", right?but it's also got "drove away in a vehicle flying a green, blue, and yellow flag". which'd be fine, except that hint is also in *19!
I think they accidentally duplicated it when they generated the cities.dat file
-
I think they generated their hints wrong.
The *22 chunk for a city says something like "$SUSPECT was going to an opera with the president" or "$SUSPECT would be having tea with the Emperor", right?but it's also got "drove away in a vehicle flying a green, blue, and yellow flag". which'd be fine, except that hint is also in *19!
I think they accidentally duplicated it when they generated the cities.dat file
this causes a glitch in the game where you can have 2 of your 3 informants give you the same flag-color hint, which is less than useful
-
this causes a glitch in the game where you can have 2 of your 3 informants give you the same flag-color hint, which is less than useful
ugh. ghidra really doesn't understand that you can call far functions using near calls.
and the compiler for this LOVES using them.
-
ugh. ghidra really doesn't understand that you can call far functions using near calls.
and the compiler for this LOVES using them.
I might have explained this before, but normally a near call to a far function will break, because it'll pop 4 bytes off the stack for the return address, when the near call only pushed 2.
So you fix this by doing push CS first, so it'll pop the 2 from the call, and then the 2 you placed before.