Xcl4m4t10n
Advanced Member
- Joined
- Dec 18, 2009
- Messages
- 1,209
Check my edit XD.
Check my edit XD.
I have a question now, If you managed to fix the problem with carma/glide on dosbox, Is there a reason why they do not make it on the official release?
Thank you for all the information! Then it's pretty strange they don't implemented the fix officially yet. Maybe this fix make other things to fail.
Thank you for all the information! Then it's pretty strange they don't implemented the fix officially yet. Maybe this fix make other things to fail.
I have not seen any fix for that one, but I suspect it's x87 issue, with some block copy using 80bits operations maybe. I'm not sure at all, but I may spend some time to try fix it one day
I realized that we may not speak about the same glitch.
I assumed you where talking about the "black screen" glitch that can happens with carmageddon on 3dfx (and so my anwser) but may be you where talking about the black strippes that happens on mostly everything in caramaggedon sofware (as can be seen in Wally's video of it). In that case, the 3Dfx fix doesn't touch this one. I have not seen any fix for that one, but I suspect it's x87 issue, with some block copy using 80bits operations maybe. I'm not sure at all, but I may spend some time to try fix it one day.
Has Quake been tested?
Well there are native linux ports, so I guess the demand to try the DOS version isn't high.
Index: src/fpu/fpu_instructions.h
===================================================================
--- src/fpu/fpu_instructions.h (revision 3955)
+++ src/fpu/fpu_instructions.h (working copy)
@@ -16,8 +16,9 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+static FPU_Reg hackfpu_fregs[9];
+static FPU_Reg hackfpu_iregs[9];
-
static void FPU_FINIT(void) {
FPU_SetCW(0x37F);
fpu.sw = 0;
@@ -96,8 +97,8 @@
} test;
test.eind.l.lower = mem_readd(addr);
test.eind.l.upper = mem_readd(addr+4);
- test.begin = mem_readw(addr+8);
-
+ test.begin = mem_readw(addr+8);
+
Bit64s exp64 = (((test.begin&0x7fff) - BIAS80));
Bit64s blah = ((exp64 >0)?exp64:-exp64)&0x3ff;
Bit64s exp64final = ((exp64 >0)?blah:-blah) +BIAS64;
@@ -170,9 +171,9 @@
static void FPU_FLD_I64(PhysPt addr,Bitu store_to) {
FPU_Reg blah;
- blah.l.lower = mem_readd(addr);
- blah.l.upper = mem_readd(addr+4);
- fpu.regs[store_to].d = static_cast<Real64>(blah.ll);
+ blah.l.lower = hackfpu_iregs[store_to].l.lower = mem_readd(addr);
+ blah.l.upper = hackfpu_iregs[store_to].l.upper = mem_readd(addr+4);
+ fpu.regs[store_to].d = hackfpu_fregs[store_to].d = static_cast<Real64>(blah.ll);
}
static void FPU_FBLD(PhysPt addr,Bitu store_to) {
@@ -240,9 +241,17 @@
static void FPU_FST_I64(PhysPt addr) {
FPU_Reg blah;
- blah.ll = static_cast<Bit64s>(FROUND(fpu.regs[TOP].d));
- mem_writed(addr,blah.l.lower);
- mem_writed(addr+4,blah.l.upper);
+ if (hackfpu_fregs[TOP].ll == fpu.regs[TOP].ll)
+ {
+ mem_writed(addr,hackfpu_iregs[TOP].l.lower);
+ mem_writed(addr+4,hackfpu_iregs[TOP].l.upper);
+ }
+ else
+ {
+ blah.ll = static_cast<Bit64s>(FROUND(fpu.regs[TOP].d));
+ mem_writed(addr,blah.l.lower);
+ mem_writed(addr+4,blah.l.upper);
+ }
}
static void FPU_FBST(PhysPt addr) {
@@ -357,6 +366,13 @@
fpu.regs[other] = fpu.regs[st];
fpu.tags[st] = tag;
fpu.regs[st] = reg;
+
+ reg = hackfpu_iregs[other];
+ hackfpu_iregs[other] = hackfpu_iregs[st];
+ hackfpu_iregs[st] = reg;
+ reg = hackfpu_fregs[other];
+ hackfpu_fregs[other] = hackfpu_fregs[st];
+ hackfpu_fregs[st] = reg;
}
static void FPU_FST(Bitu st, Bitu other){
First and foremost thanks for working on this. On to some recommendations for you, or anyone else who'd like to try:Anyone got anything they'd like me to test?
What went wrong? I'd love if you'd try this one again once you have a proper set-up; I'm interested if the screen size and controls, especially the analog nubs, work for this game. Provided it runs, or could run, smoothly in the first place.I did have a TIE Fighter video too but yeah it was pretty crappy.
If it's the DOS version of Tomb Raider, it can be ran with DOSBox.Doesn't Tomb Raider 1 use dosbox?