From 4b508e967a5361150847ac254601e5cac2eb2640 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Sun, 10 May 2015 14:34:28 +0000 Subject: [PATCH] [FAST486] Fix LTR. svn path=/trunk/; revision=67623 --- reactos/lib/fast486/opgroups.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/reactos/lib/fast486/opgroups.c b/reactos/lib/fast486/opgroups.c index b8a393996b2..ec4733592d6 100644 --- a/reactos/lib/fast486/opgroups.c +++ b/reactos/lib/fast486/opgroups.c @@ -1945,7 +1945,10 @@ FAST486_OPCODE_HANDLER(Fast486ExtOpcodeGroup0F00) return; } - if (GdtEntry.Signature != FAST486_TSS_SIGNATURE) + if (GdtEntry.Signature != FAST486_TSS_SIGNATURE + && GdtEntry.Signature != FAST486_BUSY_TSS_SIGNATURE + && GdtEntry.Signature != FAST486_TSS_16_SIGNATURE + && GdtEntry.Signature != FAST486_BUSY_TSS_16_SIGNATURE) { /* This is not a TSS descriptor */ Fast486ExceptionWithErrorCode(State, FAST486_EXCEPTION_GP, Selector); @@ -1963,6 +1966,18 @@ FAST486_OPCODE_HANDLER(Fast486ExtOpcodeGroup0F00) State->TaskReg.Limit |= 0x00000FFF; } + if (GdtEntry.Signature != FAST486_BUSY_TSS_SIGNATURE + && GdtEntry.Signature != FAST486_BUSY_TSS_16_SIGNATURE) + { + /* Set the busy bit of this TSS descriptor and write it back */ + GdtEntry.Signature |= 2; + + Fast486WriteLinearMemory(State, + State->Gdtr.Address + GET_SEGMENT_INDEX(Selector), + &GdtEntry, + sizeof(GdtEntry)); + } + break; }