Author: aandrejevic
Date: Mon Nov 11 02:27:29 2013
New Revision: 60933
URL:
http://svn.reactos.org/svn/reactos?rev=60933&view=rev
Log:
[NTVDM]
To make debugging easier, put the interrupt handlers at offset 0x1000,
and reserve 16 bytes for each. Also, move the common stub to offset
0x2000. That way the entry point of, for example, INT 0x21 is at
F000:1210.
Modified:
branches/ntvdm/subsystems/ntvdm/int32.c
branches/ntvdm/subsystems/ntvdm/int32.h
Modified: branches/ntvdm/subsystems/ntvdm/int32.c
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/int32.c?…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/int32.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/int32.c [iso-8859-1] Mon Nov 11 02:27:29 2013
@@ -131,11 +131,31 @@
LPDWORD IntVecTable = (LPDWORD)BaseAddress;
LPBYTE BiosCode = (LPBYTE)SEG_OFF_TO_PTR(BiosSegment, 0);
USHORT i;
- WORD CommonStub, BopSeqOffset, Offset;
+ WORD BopSeqOffset, Offset = 0;
- CommonStub = Offset = 0;
+ /* Generate ISR stubs and fill the IVT */
+ for (i = 0x00; i <= 0xFF; i++)
+ {
+ Offset = INT_HANDLER_OFFSET + (i << 4);
+ IntVecTable[i] = MAKELONG(Offset, BiosSegment);
+
+ BiosCode[Offset++] = 0xFA; // cli
+
+ BiosCode[Offset++] = 0x6A; // push i
+ BiosCode[Offset++] = (UCHAR)i;
+
+ BiosCode[Offset++] = 0x6A; // push 0
+ BiosCode[Offset++] = 0x00;
+
+ BopSeqOffset = COMMON_STUB_OFFSET - (Offset + 3);
+
+ BiosCode[Offset++] = 0xE9; // jmp near BOP_SEQ
+ BiosCode[Offset++] = LOBYTE(BopSeqOffset);
+ BiosCode[Offset++] = HIBYTE(BopSeqOffset);
+ }
/* Write the common stub code */
+ Offset = COMMON_STUB_OFFSET;
// BOP_SEQ:
BiosCode[Offset++] = 0xF8; // clc
@@ -162,26 +182,6 @@
BiosCode[Offset++] = 0x04;
BiosCode[Offset++] = 0xCF; // iret
-
- /* Generate ISR stubs and fill the IVT */
- for (i = 0x00; i <= 0xFF; i++)
- {
- IntVecTable[i] = MAKELONG(Offset, BiosSegment);
-
- BiosCode[Offset++] = 0xFA; // cli
-
- BiosCode[Offset++] = 0x6A; // push i
- BiosCode[Offset++] = (UCHAR)i;
-
- BiosCode[Offset++] = 0x6A; // push 0
- BiosCode[Offset++] = 0x00;
-
- BopSeqOffset = CommonStub - (Offset + 3);
-
- BiosCode[Offset++] = 0xE9; // jmp near BOP_SEQ
- BiosCode[Offset++] = LOBYTE(BopSeqOffset);
- BiosCode[Offset++] = HIBYTE(BopSeqOffset);
- }
}
VOID WINAPI RegisterInt32(BYTE IntNumber, EMULATOR_INT32_PROC IntHandler)
Modified: branches/ntvdm/subsystems/ntvdm/int32.h
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/int32.h?…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/int32.h [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/int32.h [iso-8859-1] Mon Nov 11 02:27:29 2013
@@ -18,6 +18,9 @@
/* 32-bit Interrupt Identifiers */
#define EMULATOR_MAX_INT32_NUM 0xFF + 1
+#define INT_HANDLER_OFFSET 0x1000
+#define COMMON_STUB_OFFSET 0x2000
+
/* FUNCTIONS ******************************************************************/
typedef VOID (WINAPI *EMULATOR_INT32_PROC)(LPWORD Stack);