mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-20 19:21:46 +00:00
Added a SCI1.1 case in the lofss opcode, like in the lofsa opcode (essentially, lofss and lofsa both load an offset, with lofsa loading it in the accumulator and lofss in the stack). lofss is rarely used in SCI1.1 games, which explains why no lofss-related crashes have been observed in SCI1.1
svn-id: r42209
This commit is contained in:
parent
45b7e5bbc2
commit
e4f6330418
@ -1211,10 +1211,15 @@ void run_vm(EngineState *s, int restoring) {
|
||||
case 0x3a: // lofss
|
||||
r_temp.segment = xs->addr.pc.segment;
|
||||
|
||||
if (s->_kernel->hasLofsAbsolute())
|
||||
r_temp.offset = opparams[0];
|
||||
else
|
||||
r_temp.offset = xs->addr.pc.offset + opparams[0];
|
||||
if (s->_version >= SCI_VERSION_1_1) {
|
||||
r_temp.offset = opparams[0] + local_script->script_size;
|
||||
} else {
|
||||
if (s->_kernel->hasLofsAbsolute())
|
||||
r_temp.offset = opparams[0];
|
||||
else
|
||||
r_temp.offset = xs->addr.pc.offset + opparams[0];
|
||||
}
|
||||
|
||||
#ifndef DISABLE_VALIDATIONS
|
||||
if (r_temp.offset >= code_buf_size) {
|
||||
error("VM: lofss operation overflowed: %04x:%04x beyond end"
|
||||
|
Loading…
x
Reference in New Issue
Block a user