Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Interrupt vectors emulation |
| 3 | * |
| 4 | * Copyright 1995 Alexandre Julliard |
| 5 | */ |
| 6 | |
| 7 | #include <sys/types.h> |
Jim Aston | 2e1cafa | 1999-03-14 16:35:05 +0000 | [diff] [blame] | 8 | #include "windef.h" |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 9 | #include "wine/winbase16.h" |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 10 | #include "miscemu.h" |
| 11 | #include "msdos.h" |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 12 | #include "module.h" |
Alexandre Julliard | 61fece0 | 1999-06-26 19:09:08 +0000 | [diff] [blame] | 13 | #include "debugtools.h" |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 14 | |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 15 | DEFAULT_DEBUG_CHANNEL(int); |
Patrik Stridvall | b4b9fae | 1999-04-19 14:56:29 +0000 | [diff] [blame] | 16 | |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 17 | static FARPROC16 INT_Vectors[256]; |
| 18 | |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 19 | /* Ordinal number for interrupt 0 handler in WPROCS.DLL */ |
| 20 | #define FIRST_INTERRUPT 100 |
| 21 | |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 22 | |
| 23 | /********************************************************************** |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 24 | * INT_GetPMHandler |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 25 | * |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 26 | * Return the protected mode interrupt vector for a given interrupt. |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 27 | */ |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 28 | FARPROC16 INT_GetPMHandler( BYTE intnum ) |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 29 | { |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 30 | if (!INT_Vectors[intnum]) |
| 31 | { |
| 32 | static HMODULE16 wprocs; |
| 33 | if (!wprocs) |
| 34 | { |
Alexandre Julliard | 7afce0e | 2000-12-01 21:25:31 +0000 | [diff] [blame] | 35 | if (((wprocs = GetModuleHandle16( "wprocs" )) < 32) && |
| 36 | ((wprocs = LoadLibrary16( "wprocs" )) < 32)) |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 37 | { |
| 38 | ERR("could not load wprocs.dll\n"); |
| 39 | return 0; |
| 40 | } |
| 41 | } |
Alexandre Julliard | 7afce0e | 2000-12-01 21:25:31 +0000 | [diff] [blame] | 42 | if (!(INT_Vectors[intnum] = GetProcAddress16( wprocs, (LPCSTR)(FIRST_INTERRUPT + intnum)))) |
| 43 | { |
| 44 | WARN("int%x not implemented, returning dummy handler\n", intnum ); |
| 45 | INT_Vectors[intnum] = GetProcAddress16( wprocs, (LPCSTR)(FIRST_INTERRUPT + 256) ); |
| 46 | } |
Alexandre Julliard | 4324b47 | 2000-06-03 04:52:14 +0000 | [diff] [blame] | 47 | } |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 48 | return INT_Vectors[intnum]; |
| 49 | } |
| 50 | |
| 51 | |
| 52 | /********************************************************************** |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 53 | * INT_SetPMHandler |
| 54 | * |
| 55 | * Set the protected mode interrupt handler for a given interrupt. |
| 56 | */ |
| 57 | void INT_SetPMHandler( BYTE intnum, FARPROC16 handler ) |
| 58 | { |
Alexandre Julliard | 61fece0 | 1999-06-26 19:09:08 +0000 | [diff] [blame] | 59 | TRACE("Set protected mode interrupt vector %02x <- %04x:%04x\n", |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 60 | intnum, HIWORD(handler), LOWORD(handler) ); |
| 61 | INT_Vectors[intnum] = handler; |
| 62 | } |
| 63 | |
| 64 | |
| 65 | /********************************************************************** |
Patrik Stridvall | 3ca9823 | 2001-06-20 23:03:14 +0000 | [diff] [blame] | 66 | * INT_DefaultHandler (WPROCS.356) |
Alexandre Julliard | 7afce0e | 2000-12-01 21:25:31 +0000 | [diff] [blame] | 67 | * |
| 68 | * Default interrupt handler. |
| 69 | */ |
| 70 | void WINAPI INT_DefaultHandler( CONTEXT86 *context ) |
| 71 | { |
| 72 | } |