tandy put their sound chip on the 1A interrupt?
-
replied to Foone🏳️⚧️ last edited by [email protected]
@dividuum got it:
they're drawing the font 9 times, offset in each of the 8 directions, and in black. then they draw it in white, with no offset.
It's a pixel-outliner! By drawing their pixel font offset in each direction, they get a black outline on their font.
-
replied to Foone🏳️⚧️ last edited by
@foone I've never gotten around to looking into how DOSBox actually does it, but from my last foray into SDL, I recall it had some weird ideas about graphics updates due to the path dependency of how it implemented multiple-buffering. On classic PC during ordinary operations, this might tie into the VGA's frame refresh interrupt; during human-stepping debugging, obviously, the target program just can't have access to all the frame refreshes, and something in DOSBox's emulation architecture might be doing something clever about it that just happens to break things.
Obviously, DOSBox's idea of how frame refresh works doesn't have to have anything to do with actual target-visible interrupts, but it might potentially give you a bit of information to let the software think it has a CGA, not a VGA. CGA, IIRC, didn't have support for proper frame interrupt, and a different synchronisation mechanism (status register polling?) might fail in a different, and perhaps illuminating, way.
-
replied to Riley S. Faelan last edited by
@foone I can't quite remember which way MCGA would have fallen, either. It was kind of a halfway between CGA and (a subset of) VGA.
-
replied to Foone🏳️⚧️ last edited by
The Answer to the DRM questions for Where in the world is Carmen Sandiego? Enhanced (DOS, 1990) are, in no particular order:
23
Kent
dragon
calcium
1796
Warren
revenue
1792
Willard
1937
Crater
Tanzania
Hartford
Duluth
London
Gem
Silent
squeaker -
replied to Foone🏳️⚧️ last edited by
if ((0x80 >> ((byte)local_4 & 7) &
(int)(char)*(byte *)((int)((int *)param_1 + 1) + (local_4 >> 3))) != 0) {COULD YOU USE SOME MORE CASTS MAYBE?
-
replied to Foone🏳️⚧️ last edited by
oh it's because ghidra's near/far pointer support is shit.
I had param2 defined as a byte*32 and it was casting it to a byte* before using it
-
replied to Foone🏳️⚧️ last edited by
if I define it as byte* and let the calling convention implicitly define it as 32bit, it doesn't do the cast
-
replied to Foone🏳️⚧️ last edited by
well I found the decompression method.
as always, I hate it. decompression routines are probably my least favorite thing to reverse engineer
-
replied to Foone🏳️⚧️ last edited by
I think this compression is specifically designed for ASCII text, which is annoying because they've also got compressed images... which probably use a DIFFERENT COMPRESSION!
-
replied to Foone🏳️⚧️ last edited by
it looks like this chunk has length 256, which means 253 usable bytes, and it expands to 374 bytes.
Not the greatest compression. a little better than just doing 6-bit ASCII.
-
replied to Foone🏳️⚧️ last edited by
it's some kind of shifting bit mask but it starts at encoding values in 4 bits, then it can increase (or decrease, I guess) based on the input stream.
then it has an output filter, where if the number specified wasn't 8 bits, it's actually an index into a predefined text table
-
replied to Foone🏳️⚧️ last edited by [email protected]
the predefined table starts with NUL, space, then:
aetonisrdlhugfcwypbmk,vSA.T'PMxBCIRGDWHqE-zNFKL0j:51YJ8\U?73Q;2!469
\r\nOVXZ()*+"#$%&<=>/@[]^_` -
replied to Foone🏳️⚧️ last edited by
given that the most comment symbols are near the beginning, this is presumably a sort of lazy huffman coding
-
replied to Foone🏳️⚧️ last edited by
but I've got the predefined table, an input file, an output file, and now I need to write some python code to replicate this, hopefully without crying
-
replied to Foone🏳️⚧️ last edited by
"vs ses oa is isgit's tc eital and largest t u anhtA ttggh os nnotosnhrdsmarosogdn ss drte tishoth's isdhsceohtsnthminder of isgit's t nuorhdhtpast\x00 geru is slightltsn oaller than ndhd na and is o nnsgtgstbtst oa dotlalssaaolootbiaoht Sal gh, sonuhvia and sl ghh\x00isgit, ontvdn ss nhsiaalgarsnadlfnaatawlarst oadrlhrs i is a rugged land dooousr'casrbhe nrdsgs fountainsnht iah"
-
replied to Foone🏳️⚧️ last edited by
I mean, it's not 100% wrong, but it's not right either
-
replied to Foone🏳️⚧️ last edited by
that's supposed to read:
"\x03Lima is Peru's capital and largest city. A well-known landmark is the Archbishop's Palace, a reminder of Peru's colonial past\x00Peru is slightly smaller than Alaska and is bordered by Ecuador, Colombia, Brazil, Bolivia and Chile\x00Peru, once the center of the mighty Incan Empire, is a rugged land dominated by the Andes Mountains. Forests and jungles cover half its land area\x00" -
replied to Foone🏳️⚧️ last edited by
I somehow confused the dosbox-x debugger into not accepting letters anymore
-
replied to Foone🏳️⚧️ last edited by
it was a trivial off-by-one error.
I was doing saved_byte=input[3]but while I needed the 3rd byte, that's at input[2]
-
replied to Foone🏳️⚧️ last edited by
yess!
C:\DOSBox-X\drive_c\carmen\py>python datfile.py cities.dat --dump=12803 --decompress
"\x03Sydney, with a population of more than 3.3 million people, is Australia's largest city. A well-known sight is Sydney's distinctively designed Opera House\x00An island continent, Australia is nearly as large as the United States but has only one-fifteenth the population\x00The capital of Australia is Canberra, located in the southeast corner of the country between Sydney and Melbourne\x00"