Hello Michal, hello Louis,

I've run some software on Pentium 3 Tualatin S on FreeDOS and it's
getting an invalid opcode error. The error precisely says "Invalid
opcode at ..." where ... is a bunch of 16 bit variables. Saying "at" is
really misleading and doesn't make any sense, since such a high address
like let's say 628a 0000 3002 206f 2b43 202b 202d 6f43 7970 6972 6867

I think those are binary instructions.  Not actual addresses.  You could
try disassembling here [0] but a quick cut & paste gave an instruction
sequence that is non-obvious to me.  If Contra is a debugger/mod, then

The list of 16-bit values is a stack trace.  The first three shortwords
should give the ip and cs of the offending instruction, and the flags
register value --- these will be at the stack top when the "invalid
opcode" exception happens --- and the rest of the shortwords are the
contents of the stack further down.

If I deliberately try to run an invalid instruction under a DEBUG.COM
session, this happens:

==========
A:\>debug
-a
2902:0100 db ff,ff
2902:0102
-t

Invalid Opcode at 0100 2902 7306 0000 20CD 9894 9A00 FEF0 F01D 1D9F 236A
07C6 109A
==========

In your case, this probably means that the CPU tried to run an invalid
instruction at cs:ip = 0x0:0x628a (!?), with flags = 0x3002.

If I understand correctly, Quake is a 32-bit protected mode program.
But the "Invalid Opcode" message comes from the FreeDOS kernel, which
runs in real (or maybe V86) mode.  So perhaps something in real mode was
directly causing the error.  Or (less likely?), something bad happened
while Quake was running in protected mode, and the exception was
"reflected" to real/V86 mode.  In either case, I would expect the true
root cause of the error to be a bit further back in time.

Thank you!

--
https://github.com/tkchia :: https://gitlab.com/tkchia


_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to